diff --git a/api-openbis-javascript/.gitignore b/api-openbis-javascript/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..c292c099311eb573bb63b4403c53f0067fc8243f
--- /dev/null
+++ b/api-openbis-javascript/.gitignore
@@ -0,0 +1,2 @@
+/node
+package-lock.json
\ No newline at end of file
diff --git a/core-plugin-openbis/resource/js/v3/.gitignore b/api-openbis-javascript/bin/.gitignore
similarity index 100%
rename from core-plugin-openbis/resource/js/v3/.gitignore
rename to api-openbis-javascript/bin/.gitignore
diff --git a/core-plugin-openbis/resource/js/v3/build.sh b/api-openbis-javascript/bin/build.sh
similarity index 68%
rename from core-plugin-openbis/resource/js/v3/build.sh
rename to api-openbis-javascript/bin/build.sh
index 2bcc03249194b6db5c8ae5abcbb9ed5b374f5be5..c3d32568449c9cac946171f79b746b3f08649958 100755
--- a/core-plugin-openbis/resource/js/v3/build.sh
+++ b/api-openbis-javascript/bin/build.sh
@@ -2,13 +2,12 @@
 
 pushd $(dirname $0) > /dev/null
 
-OPENBIS_STANDARD_TECHNOLOGIES_DIR=../../..
-OPENBIS_DIR=../../../../server-application-server
+NODE_PATH=../node/nodejs/node-*/bin/node
 
 CURRENT_DIR=$(pwd)
 TEMP_DIR=${CURRENT_DIR}/temp
 
-V3_DIR=$OPENBIS_DIR/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3
+V3_DIR=../src/v3
 
 # create an empty temporary folder
 rm -rvf $TEMP_DIR
@@ -25,8 +24,8 @@ cat config.bundle.template.js | sed -e '\|__FILES__|{' -e "r $TEMP_DIR/files.js"
 cat config.bundle.min.template.js | sed -e '\|__FILES__|{' -e "r $TEMP_DIR/files.js" -e 'd' -e '}' > $TEMP_DIR/config.bundle.min.js
 
 # create a JS bundle using NodeJS binary installed by NodeJS gradle plugin
-$OPENBIS_STANDARD_TECHNOLOGIES_DIR/node/nodejs/node-*/bin/node r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=none out=$TEMP_DIR/openbis.bundle.js
-$OPENBIS_STANDARD_TECHNOLOGIES_DIR/node/nodejs/node-*/bin/node r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=uglify out=$TEMP_DIR/openbis.bundle.min.js
+$NODE_PATH r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=none out=$TEMP_DIR/openbis.bundle.js
+$NODE_PATH r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=uglify out=$TEMP_DIR/openbis.bundle.min.js
 
 # copy relevant files to the V3 public folder
 cp $TEMP_DIR/config.bundle.js $TEMP_DIR/config.bundle.min.js $TEMP_DIR/openbis.bundle.js $TEMP_DIR/openbis.bundle.min.js $V3_DIR
diff --git a/core-plugin-openbis/resource/js/v3/config.bundle.min.template.js b/api-openbis-javascript/bin/config.bundle.min.template.js
similarity index 100%
rename from core-plugin-openbis/resource/js/v3/config.bundle.min.template.js
rename to api-openbis-javascript/bin/config.bundle.min.template.js
diff --git a/core-plugin-openbis/resource/js/v3/config.bundle.template.js b/api-openbis-javascript/bin/config.bundle.template.js
similarity index 100%
rename from core-plugin-openbis/resource/js/v3/config.bundle.template.js
rename to api-openbis-javascript/bin/config.bundle.template.js
diff --git a/core-plugin-openbis/resource/js/v3/r.config.template.js b/api-openbis-javascript/bin/r.config.template.js
similarity index 100%
rename from core-plugin-openbis/resource/js/v3/r.config.template.js
rename to api-openbis-javascript/bin/r.config.template.js
diff --git a/core-plugin-openbis/resource/js/v3/r.js b/api-openbis-javascript/bin/r.js
similarity index 100%
rename from core-plugin-openbis/resource/js/v3/r.js
rename to api-openbis-javascript/bin/r.js
diff --git a/api-openbis-javascript/build.gradle b/api-openbis-javascript/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..483e5d844e5cf01e149cf3d68ed7e0ca7463ef8e
--- /dev/null
+++ b/api-openbis-javascript/build.gradle
@@ -0,0 +1,20 @@
+plugins {
+    id "com.github.node-gradle.node" version "3.2.1"
+}
+
+apply from: '../build/javaproject.gradle'
+
+node {
+    download = true
+    version = '18.12.1'
+    workDir = file("${projectDir}/node/nodejs")
+    nodeModulesDir = file("${projectDir}")
+}
+
+
+task bundleOpenbisStaticResources(type: Exec) {
+    dependsOn 'npmInstall'
+    commandLine 'bash', '-c', "${projectDir}/bin/build.sh"
+}
+
+
diff --git a/api-openbis-javascript/gradle/wrapper/gradle-wrapper.jar b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..5c2d1cf016b3885f6930543d57b744ea8c220a1a
Binary files /dev/null and b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/api-openbis-javascript/gradle/wrapper/gradle-wrapper.properties b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..7745c4ec463c7bb1c4ff6a5e58db239890345152
--- /dev/null
+++ b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+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/api-openbis-javascript/gradlew b/api-openbis-javascript/gradlew
new file mode 100755
index 0000000000000000000000000000000000000000..83f2acfdc319a24e8766cca78f32474ad7a22dd6
--- /dev/null
+++ b/api-openbis-javascript/gradlew
@@ -0,0 +1,188 @@
+#!/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/api-openbis-javascript/gradlew.bat b/api-openbis-javascript/gradlew.bat
new file mode 100644
index 0000000000000000000000000000000000000000..9618d8d9607cd91a0efb866bcac4810064ba6fac
--- /dev/null
+++ b/api-openbis-javascript/gradlew.bat
@@ -0,0 +1,100 @@
+@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/core-plugin-openbis/package.json b/api-openbis-javascript/package.json
similarity index 100%
rename from core-plugin-openbis/package.json
rename to api-openbis-javascript/package.json
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME b/api-openbis-javascript/settings.gradle
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME
rename to api-openbis-javascript/settings.gradle
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore b/api-openbis-javascript/src/v3/.gitignore
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore
rename to api-openbis-javascript/src/v3/.gitignore
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/Attachment.js b/api-openbis-javascript/src/v3/as/dto/attachment/Attachment.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/Attachment.js
rename to api-openbis-javascript/src/v3/as/dto/attachment/Attachment.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/create/AttachmentCreation.js b/api-openbis-javascript/src/v3/as/dto/attachment/create/AttachmentCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/create/AttachmentCreation.js
rename to api-openbis-javascript/src/v3/as/dto/attachment/create/AttachmentCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/AttachmentFileName.js b/api-openbis-javascript/src/v3/as/dto/attachment/id/AttachmentFileName.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/AttachmentFileName.js
rename to api-openbis-javascript/src/v3/as/dto/attachment/id/AttachmentFileName.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/IAttachmentId.js b/api-openbis-javascript/src/v3/as/dto/attachment/id/IAttachmentId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/IAttachmentId.js
rename to api-openbis-javascript/src/v3/as/dto/attachment/id/IAttachmentId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/update/AttachmentListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/attachment/update/AttachmentListUpdateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/update/AttachmentListUpdateValue.js
rename to api-openbis-javascript/src/v3/as/dto/attachment/update/AttachmentListUpdateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/AuthorizationGroup.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/AuthorizationGroup.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/AuthorizationGroup.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/AuthorizationGroup.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Enum.js b/api-openbis-javascript/src/v3/as/dto/common/Enum.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Enum.js
rename to api-openbis-javascript/src/v3/as/dto/common/Enum.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/ITableCell.js b/api-openbis-javascript/src/v3/as/dto/common/ITableCell.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/ITableCell.js
rename to api-openbis-javascript/src/v3/as/dto/common/ITableCell.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Relationship.js b/api-openbis-javascript/src/v3/as/dto/common/Relationship.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Relationship.js
rename to api-openbis-javascript/src/v3/as/dto/common/Relationship.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableColumn.js b/api-openbis-javascript/src/v3/as/dto/common/TableColumn.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableColumn.js
rename to api-openbis-javascript/src/v3/as/dto/common/TableColumn.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableDoubleCell.js b/api-openbis-javascript/src/v3/as/dto/common/TableDoubleCell.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableDoubleCell.js
rename to api-openbis-javascript/src/v3/as/dto/common/TableDoubleCell.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableLongCell.js b/api-openbis-javascript/src/v3/as/dto/common/TableLongCell.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableLongCell.js
rename to api-openbis-javascript/src/v3/as/dto/common/TableLongCell.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableModel.js b/api-openbis-javascript/src/v3/as/dto/common/TableModel.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableModel.js
rename to api-openbis-javascript/src/v3/as/dto/common/TableModel.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableStringCell.js b/api-openbis-javascript/src/v3/as/dto/common/TableStringCell.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableStringCell.js
rename to api-openbis-javascript/src/v3/as/dto/common/TableStringCell.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/ICreation.js b/api-openbis-javascript/src/v3/as/dto/common/create/ICreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/ICreation.js
rename to api-openbis-javascript/src/v3/as/dto/common/create/ICreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/IObjectCreation.js b/api-openbis-javascript/src/v3/as/dto/common/create/IObjectCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/IObjectCreation.js
rename to api-openbis-javascript/src/v3/as/dto/common/create/IObjectCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/CacheMode.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/CacheMode.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/CacheMode.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/CacheMode.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntitySortOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntitySortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntitySortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntitySortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/FetchOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/FetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/FetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/FetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOrder.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOrder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOrder.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOrder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortParameter.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortParameter.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortParameter.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortParameter.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/Sorting.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/Sorting.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/Sorting.js
rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/Sorting.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/CreationId.js b/api-openbis-javascript/src/v3/as/dto/common/id/CreationId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/CreationId.js
rename to api-openbis-javascript/src/v3/as/dto/common/id/CreationId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/IObjectId.js b/api-openbis-javascript/src/v3/as/dto/common/id/IObjectId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/IObjectId.js
rename to api-openbis-javascript/src/v3/as/dto/common/id/IObjectId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectIdentifier.js b/api-openbis-javascript/src/v3/as/dto/common/id/ObjectIdentifier.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectIdentifier.js
rename to api-openbis-javascript/src/v3/as/dto/common/id/ObjectIdentifier.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectPermId.js b/api-openbis-javascript/src/v3/as/dto/common/id/ObjectPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectPermId.js
rename to api-openbis-javascript/src/v3/as/dto/common/id/ObjectPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectTechId.js b/api-openbis-javascript/src/v3/as/dto/common/id/ObjectTechId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectTechId.js
rename to api-openbis-javascript/src/v3/as/dto/common/id/ObjectTechId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IAttachmentsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IAttachmentsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IAttachmentsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IAttachmentsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICodeHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ICodeHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICodeHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ICodeHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICreationIdHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ICreationIdHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICreationIdHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ICreationIdHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetCodesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetCodesHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetCodesHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetCodesHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDescriptionHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IDescriptionHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDescriptionHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IDescriptionHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityType.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityType.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityTypeHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityTypeHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityTypeHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityTypeHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IIdentifierHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IIdentifierHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IIdentifierHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IIdentifierHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ILabelHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ILabelHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ILabelHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ILabelHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModificationDateHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IModificationDateHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModificationDateHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IModificationDateHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModifierHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IModifierHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModifierHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IModifierHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/INameHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/INameHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/INameHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/INameHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IOwnerHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IOwnerHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IOwnerHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IOwnerHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IParentChildrenHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IParentChildrenHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IParentChildrenHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IParentChildrenHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPermIdHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPermIdHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPermIdHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPermIdHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertiesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertiesHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertiesHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertiesHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyTypeHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyTypeHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyTypeHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyTypeHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistrationDateHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistrationDateHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistrationDateHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistrationDateHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistratorHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistratorHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistratorHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistratorHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISampleHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISampleHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISampleHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISampleHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISamplesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISamplesHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISamplesHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISamplesHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISpaceHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISpaceHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISpaceHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISpaceHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ITagsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ITagsHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ITagsHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ITagsHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IValidationPluginHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IValidationPluginHolder.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IValidationPluginHolder.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IValidationPluginHolder.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/SortIgnore.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/SortIgnore.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/SortIgnore.js
rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/SortIgnore.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperation.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionError.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionError.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionError.js
rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionError.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionProgress.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionProgress.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionProgress.js
rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionProgress.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateObjectValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateObjectValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateObjectValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateObjectValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractEntitySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractEntitySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractEntitySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractEntitySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractNumberValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractNumberValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractNumberValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractNumberValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractObjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractObjectSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractObjectSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractObjectSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractStringValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractStringValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractStringValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractStringValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractTimeZoneValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractTimeZoneValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractTimeZoneValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractTimeZoneValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyStringValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyStringValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/BooleanFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/BooleanFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/BooleanPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/BooleanPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/CodeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/CodeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodesSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/CodesSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodesSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/CodesSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CollectionFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/CollectionFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CollectionFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/CollectionFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DatePropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/DatePropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DatePropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DatePropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DescriptionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/DescriptionSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DescriptionSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/DescriptionSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/EnumFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/EnumFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/EnumFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/EnumFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDate.js b/api-openbis-javascript/src/v3/as/dto/common/search/IDate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDate.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/IDate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/IDateFormat.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDateFormat.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/IDateFormat.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ISearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/ISearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ISearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/ISearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ITimeZone.js b/api-openbis-javascript/src/v3/as/dto/common/search/ITimeZone.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ITimeZone.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/ITimeZone.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/IdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/IdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdentifierSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/IdentifierSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdentifierSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/IdentifierSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/IdsSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdsSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/IdsSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/LongDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/LongDateFormat.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/LongDateFormat.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/LongDateFormat.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ModificationDateSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/ModificationDateSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ModificationDateSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/ModificationDateSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/NameSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NameSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NameSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NormalDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/NormalDateFormat.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NormalDateFormat.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NormalDateFormat.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/PermIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/PermIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/PermIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/PermIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/RegistrationDateSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/RegistrationDateSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/RegistrationDateSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/RegistrationDateSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SamplePropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/SamplePropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SamplePropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/SamplePropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchFieldType.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchFieldType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchFieldType.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchFieldType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchOperator.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchOperator.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchOperator.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchOperator.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchResult.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ServerTimeZone.js b/api-openbis-javascript/src/v3/as/dto/common/search/ServerTimeZone.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ServerTimeZone.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/ServerTimeZone.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ShortDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/ShortDateFormat.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ShortDateFormat.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/ShortDateFormat.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsExactlyValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringContainsExactlyValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsExactlyValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringContainsExactlyValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringContainsValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringContainsValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEndsWithValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringEndsWithValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEndsWithValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringEndsWithValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringFieldSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringFieldSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringFieldSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanOrEqualToValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanOrEqualToValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanOrEqualToValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringMatchesValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringMatchesValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringMatchesValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringMatchesValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringPropertySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringPropertySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringPropertySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringStartsWithValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringStartsWithValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringStartsWithValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/StringStartsWithValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TechIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/TechIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TechIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/TechIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TextAttributeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/TextAttributeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TextAttributeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/TextAttributeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TimeZone.js b/api-openbis-javascript/src/v3/as/dto/common/search/TimeZone.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TimeZone.js
rename to api-openbis-javascript/src/v3/as/dto/common/search/TimeZone.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/FieldUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/common/update/FieldUpdateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/FieldUpdateValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/FieldUpdateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IObjectUpdate.js b/api-openbis-javascript/src/v3/as/dto/common/update/IObjectUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IObjectUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/IObjectUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IUpdate.js b/api-openbis-javascript/src/v3/as/dto/common/update/IUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/IUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IdListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/common/update/IdListUpdateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IdListUpdateValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/IdListUpdateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateAction.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateAction.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateAction.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateAction.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionAdd.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionAdd.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionAdd.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionAdd.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionRemove.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionRemove.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionRemove.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionRemove.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionSet.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionSet.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionSet.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionSet.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateMapValues.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateMapValues.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateMapValues.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateMapValues.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateValue.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/RelationshipUpdate.js b/api-openbis-javascript/src/v3/as/dto/common/update/RelationshipUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/RelationshipUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/RelationshipUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ArchivingStatus.js b/api-openbis-javascript/src/v3/as/dto/dataset/ArchivingStatus.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ArchivingStatus.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/ArchivingStatus.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/Complete.js b/api-openbis-javascript/src/v3/as/dto/dataset/Complete.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/Complete.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/Complete.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ContentCopy.js b/api-openbis-javascript/src/v3/as/dto/dataset/ContentCopy.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ContentCopy.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/ContentCopy.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSet.js b/api-openbis-javascript/src/v3/as/dto/dataset/DataSet.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSet.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/DataSet.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetKind.js b/api-openbis-javascript/src/v3/as/dto/dataset/DataSetKind.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetKind.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/DataSetKind.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetType.js b/api-openbis-javascript/src/v3/as/dto/dataset/DataSetType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetType.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/DataSetType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/FileFormatType.js b/api-openbis-javascript/src/v3/as/dto/dataset/FileFormatType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/FileFormatType.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/FileFormatType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LinkedData.js b/api-openbis-javascript/src/v3/as/dto/dataset/LinkedData.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LinkedData.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/LinkedData.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LocatorType.js b/api-openbis-javascript/src/v3/as/dto/dataset/LocatorType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LocatorType.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/LocatorType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/PhysicalData.js b/api-openbis-javascript/src/v3/as/dto/dataset/PhysicalData.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/PhysicalData.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/PhysicalData.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/StorageFormat.js b/api-openbis-javascript/src/v3/as/dto/dataset/StorageFormat.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/StorageFormat.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/StorageFormat.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/DataSetArchiveOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/archive/DataSetArchiveOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/DataSetArchiveOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/archive/DataSetArchiveOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/ContentCopyCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/ContentCopyCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/ContentCopyCreation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/ContentCopyCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetCreation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetTypeCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetTypeCreation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetTypeCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/LinkedDataCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/LinkedDataCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/LinkedDataCreation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/create/LinkedDataCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/history/DataSetRelationType.js b/api-openbis-javascript/src/v3/as/dto/dataset/history/DataSetRelationType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/history/DataSetRelationType.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/history/DataSetRelationType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ContentCopyPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/ContentCopyPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ContentCopyPermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/ContentCopyPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/DataSetPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/DataSetPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/DataSetPermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/DataSetPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/FileFormatTypePermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/FileFormatTypePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/FileFormatTypePermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/FileFormatTypePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IContentCopyId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IContentCopyId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IContentCopyId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IContentCopyId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IDataSetId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IDataSetId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IDataSetId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IDataSetId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IFileFormatTypeId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IFileFormatTypeId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IFileFormatTypeId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IFileFormatTypeId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ILocatorTypeId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/ILocatorTypeId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ILocatorTypeId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/ILocatorTypeId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IStorageFormatId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IStorageFormatId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IStorageFormatId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IStorageFormatId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/LocatorTypePermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/LocatorTypePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/LocatorTypePermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/LocatorTypePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/StorageFormatPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/StorageFormatPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/StorageFormatPermId.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/id/StorageFormatPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/DataSetLockOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/lock/DataSetLockOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/DataSetLockOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/lock/DataSetLockOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/CompleteSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/CompleteSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/CompleteSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/CompleteSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ContentCopySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ContentCopySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ContentCopySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ContentCopySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchRelation.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchRelation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchRelation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchRelation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/LocationSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocationSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/LocationSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PathSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/PathSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PathSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/PathSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ShareIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ShareIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ShareIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ShareIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SizeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SizeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SizeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SizeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StatusSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/StatusSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StatusSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/StatusSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetTypeUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetTypeUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetTypeUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/LinkedDataUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/LinkedDataUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/LinkedDataUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/LinkedDataUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/PhysicalDataUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/PhysicalDataUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/PhysicalDataUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/PhysicalDataUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/DataStore.js b/api-openbis-javascript/src/v3/as/dto/datastore/DataStore.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/DataStore.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/DataStore.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js b/api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/DataStorePermId.js b/api-openbis-javascript/src/v3/as/dto/datastore/id/DataStorePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/DataStorePermId.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/id/DataStorePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/IDataStoreId.js b/api-openbis-javascript/src/v3/as/dto/datastore/id/IDataStoreId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/IDataStoreId.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/id/IDataStoreId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/DataStoreSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/datastore/search/DataStoreSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/DataStoreSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/search/DataStoreSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperation.js b/api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperation.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js b/api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/AbstractObjectDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/AbstractObjectDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/AbstractObjectDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/AbstractObjectDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/DeletedObject.js b/api-openbis-javascript/src/v3/as/dto/deletion/DeletedObject.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/DeletedObject.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/DeletedObject.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/Deletion.js b/api-openbis-javascript/src/v3/as/dto/deletion/Deletion.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/Deletion.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/Deletion.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js b/api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/DeletionTechId.js b/api-openbis-javascript/src/v3/as/dto/deletion/id/DeletionTechId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/DeletionTechId.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/id/DeletionTechId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/IDeletionId.js b/api-openbis-javascript/src/v3/as/dto/deletion/id/IDeletionId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/IDeletionId.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/id/IDeletionId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperation.js b/api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/DeletionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/deletion/search/DeletionSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/DeletionSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/search/DeletionSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperation.js b/api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperation.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperation.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/EntityKind.js b/api-openbis-javascript/src/v3/as/dto/entitytype/EntityKind.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/EntityKind.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/EntityKind.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/create/IEntityTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/entitytype/create/IEntityTypeCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/create/IEntityTypeCreation.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/create/IEntityTypeCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/EntityTypePermId.js b/api-openbis-javascript/src/v3/as/dto/entitytype/id/EntityTypePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/EntityTypePermId.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/id/EntityTypePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/IEntityTypeId.js b/api-openbis-javascript/src/v3/as/dto/entitytype/id/IEntityTypeId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/IEntityTypeId.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/id/IEntityTypeId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/IEntityTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/entitytype/update/IEntityTypeUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/IEntityTypeUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/update/IEntityTypeUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js
rename to api-openbis-javascript/src/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EntityType.js b/api-openbis-javascript/src/v3/as/dto/event/EntityType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EntityType.js
rename to api-openbis-javascript/src/v3/as/dto/event/EntityType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/Event.js b/api-openbis-javascript/src/v3/as/dto/event/Event.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/Event.js
rename to api-openbis-javascript/src/v3/as/dto/event/Event.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EventType.js b/api-openbis-javascript/src/v3/as/dto/event/EventType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EventType.js
rename to api-openbis-javascript/src/v3/as/dto/event/EventType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventSortOptions.js b/api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/EventTechId.js b/api-openbis-javascript/src/v3/as/dto/event/id/EventTechId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/EventTechId.js
rename to api-openbis-javascript/src/v3/as/dto/event/id/EventTechId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/IEventId.js b/api-openbis-javascript/src/v3/as/dto/event/id/IEventId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/IEventId.js
rename to api-openbis-javascript/src/v3/as/dto/event/id/IEventId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventDescriptionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventDescriptionSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventDescriptionSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventDescriptionSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventIdentifierSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventIdentifierSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventIdentifierSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventIdentifierSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventReasonSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventReasonSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventReasonSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventReasonSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/EventTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperation.js b/api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/Experiment.js b/api-openbis-javascript/src/v3/as/dto/experiment/Experiment.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/Experiment.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/Experiment.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/ExperimentType.js b/api-openbis-javascript/src/v3/as/dto/experiment/ExperimentType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/ExperimentType.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/ExperimentType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentCreation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentCreation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentTypeCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentTypeCreation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentTypeCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/history/ExperimentRelationType.js b/api-openbis-javascript/src/v3/as/dto/experiment/history/ExperimentRelationType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/history/ExperimentRelationType.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/history/ExperimentRelationType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentIdentifier.js b/api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentIdentifier.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentIdentifier.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentIdentifier.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentPermId.js b/api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentPermId.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/IExperimentId.js b/api-openbis-javascript/src/v3/as/dto/experiment/id/IExperimentId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/IExperimentId.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/id/IExperimentId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentTypeUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentTypeUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentTypeUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentUpdate.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDms.js b/api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDms.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDms.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDms.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDmsAddressType.js b/api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDmsAddressType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDmsAddressType.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDmsAddressType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/ExternalDmsCreation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/create/ExternalDmsCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/ExternalDmsCreation.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/create/ExternalDmsCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js b/api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/ExternalDmsPermId.js b/api-openbis-javascript/src/v3/as/dto/externaldms/id/ExternalDmsPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/ExternalDmsPermId.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/id/ExternalDmsPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/IExternalDmsId.js b/api-openbis-javascript/src/v3/as/dto/externaldms/id/IExternalDmsId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/IExternalDmsId.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/id/IExternalDmsId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/AddressSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/AddressSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/AddressSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/AddressSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/LabelSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/LabelSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/LabelSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/LabelSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/ExternalDmsUpdate.js b/api-openbis-javascript/src/v3/as/dto/externaldms/update/ExternalDmsUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/ExternalDmsUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/update/ExternalDmsUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/GlobalSearchObject.js b/api-openbis-javascript/src/v3/as/dto/global/GlobalSearchObject.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/GlobalSearchObject.js
rename to api-openbis-javascript/src/v3/as/dto/global/GlobalSearchObject.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js b/api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/MatchFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/global/fetchoptions/MatchFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/MatchFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/global/fetchoptions/MatchFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKind.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKind.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKind.js
rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKind.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchTextCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchTextCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchTextCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchTextCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperation.js b/api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperation.js
rename to api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperationResult.js b/api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/ContentCopyHistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/ContentCopyHistoryEntry.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/ContentCopyHistoryEntry.js
rename to api-openbis-javascript/src/v3/as/dto/history/ContentCopyHistoryEntry.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/HistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/HistoryEntry.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/HistoryEntry.js
rename to api-openbis-javascript/src/v3/as/dto/history/HistoryEntry.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/IRelationType.js b/api-openbis-javascript/src/v3/as/dto/history/IRelationType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/IRelationType.js
rename to api-openbis-javascript/src/v3/as/dto/history/IRelationType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/PropertyHistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/PropertyHistoryEntry.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/PropertyHistoryEntry.js
rename to api-openbis-javascript/src/v3/as/dto/history/PropertyHistoryEntry.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/RelationHistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/RelationHistoryEntry.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/RelationHistoryEntry.js
rename to api-openbis-javascript/src/v3/as/dto/history/RelationHistoryEntry.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js b/api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/id/UnknownRelatedObjectId.js b/api-openbis-javascript/src/v3/as/dto/history/id/UnknownRelatedObjectId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/id/UnknownRelatedObjectId.js
rename to api-openbis-javascript/src/v3/as/dto/history/id/UnknownRelatedObjectId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/Material.js b/api-openbis-javascript/src/v3/as/dto/material/Material.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/Material.js
rename to api-openbis-javascript/src/v3/as/dto/material/Material.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/MaterialType.js b/api-openbis-javascript/src/v3/as/dto/material/MaterialType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/MaterialType.js
rename to api-openbis-javascript/src/v3/as/dto/material/MaterialType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialCreation.js b/api-openbis-javascript/src/v3/as/dto/material/create/MaterialCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialCreation.js
rename to api-openbis-javascript/src/v3/as/dto/material/create/MaterialCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/material/create/MaterialTypeCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialTypeCreation.js
rename to api-openbis-javascript/src/v3/as/dto/material/create/MaterialTypeCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/material/delete/MaterialDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/material/delete/MaterialDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialSortOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/IMaterialId.js b/api-openbis-javascript/src/v3/as/dto/material/id/IMaterialId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/IMaterialId.js
rename to api-openbis-javascript/src/v3/as/dto/material/id/IMaterialId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/MaterialPermId.js b/api-openbis-javascript/src/v3/as/dto/material/id/MaterialPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/MaterialPermId.js
rename to api-openbis-javascript/src/v3/as/dto/material/id/MaterialPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/material/search/MaterialSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/material/search/MaterialSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/material/search/MaterialTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/material/search/MaterialTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/material/update/MaterialTypeUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialTypeUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/material/update/MaterialTypeUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialUpdate.js b/api-openbis-javascript/src/v3/as/dto/material/update/MaterialUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/material/update/MaterialUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKind.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKind.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKind.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKind.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKindModification.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKindModification.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKindModification.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKindModification.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/OperationKind.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/OperationKind.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/OperationKind.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/OperationKind.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AbstractOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/AbstractOperationExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AbstractOperationExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/AbstractOperationExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionResults.js b/api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionResults.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionResults.js
rename to api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionResults.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionNotification.js b/api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionNotification.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionNotification.js
rename to api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionNotification.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionResults.js b/api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionResults.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionResults.js
rename to api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionResults.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecution.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecution.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecution.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecution.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionAvailability.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionAvailability.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionAvailability.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionAvailability.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionDetails.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionDetails.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionDetails.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionDetails.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionEmailNotification.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionEmailNotification.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionEmailNotification.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionEmailNotification.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionError.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionError.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionError.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionError.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionProgress.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionProgress.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionProgress.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionProgress.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionState.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionState.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionState.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionState.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionSummary.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionSummary.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionSummary.js
rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionSummary.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionResults.js b/api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionResults.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionResults.js
rename to api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionResults.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/IOperationExecutionId.js b/api-openbis-javascript/src/v3/as/dto/operation/id/IOperationExecutionId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/IOperationExecutionId.js
rename to api-openbis-javascript/src/v3/as/dto/operation/id/IOperationExecutionId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/OperationExecutionPermId.js b/api-openbis-javascript/src/v3/as/dto/operation/id/OperationExecutionPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/OperationExecutionPermId.js
rename to api-openbis-javascript/src/v3/as/dto/operation/id/OperationExecutionPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/OperationExecutionUpdate.js b/api-openbis-javascript/src/v3/as/dto/operation/update/OperationExecutionUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/OperationExecutionUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/operation/update/OperationExecutionUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/PersonalAccessToken.js b/api-openbis-javascript/src/v3/as/dto/pat/PersonalAccessToken.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/PersonalAccessToken.js
rename to api-openbis-javascript/src/v3/as/dto/pat/PersonalAccessToken.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js
rename to api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/PersonalAccessTokenCreation.js b/api-openbis-javascript/src/v3/as/dto/pat/create/PersonalAccessTokenCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/PersonalAccessTokenCreation.js
rename to api-openbis-javascript/src/v3/as/dto/pat/create/PersonalAccessTokenCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js
rename to api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js b/api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js
rename to api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/IPersonalAccessTokenId.js b/api-openbis-javascript/src/v3/as/dto/pat/id/IPersonalAccessTokenId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/IPersonalAccessTokenId.js
rename to api-openbis-javascript/src/v3/as/dto/pat/id/IPersonalAccessTokenId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/PersonalAccessTokenPermId.js b/api-openbis-javascript/src/v3/as/dto/pat/id/PersonalAccessTokenPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/PersonalAccessTokenPermId.js
rename to api-openbis-javascript/src/v3/as/dto/pat/id/PersonalAccessTokenPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js
rename to api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js b/api-openbis-javascript/src/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js
rename to api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/Person.js b/api-openbis-javascript/src/v3/as/dto/person/Person.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/Person.js
rename to api-openbis-javascript/src/v3/as/dto/person/Person.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/PersonCreation.js b/api-openbis-javascript/src/v3/as/dto/person/create/PersonCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/PersonCreation.js
rename to api-openbis-javascript/src/v3/as/dto/person/create/PersonCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/PersonDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/person/delete/PersonDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/PersonDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/person/delete/PersonDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonSortOptions.js b/api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/IPersonId.js b/api-openbis-javascript/src/v3/as/dto/person/id/IPersonId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/IPersonId.js
rename to api-openbis-javascript/src/v3/as/dto/person/id/IPersonId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/Me.js b/api-openbis-javascript/src/v3/as/dto/person/id/Me.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/Me.js
rename to api-openbis-javascript/src/v3/as/dto/person/id/Me.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/PersonPermId.js b/api-openbis-javascript/src/v3/as/dto/person/id/PersonPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/PersonPermId.js
rename to api-openbis-javascript/src/v3/as/dto/person/id/PersonPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/EmailSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/EmailSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/EmailSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/EmailSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/FirstNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/FirstNameSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/FirstNameSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/FirstNameSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/LastNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/LastNameSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/LastNameSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/LastNameSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/ModifierSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/ModifierSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/ModifierSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/ModifierSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/PersonSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/PersonSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/PersonSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/PersonSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/RegistratorSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/RegistratorSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/RegistratorSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/RegistratorSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/UserIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/UserIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/UserIdsSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdsSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/person/search/UserIdsSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/PersonUpdate.js b/api-openbis-javascript/src/v3/as/dto/person/update/PersonUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/PersonUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/person/update/PersonUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/Plugin.js b/api-openbis-javascript/src/v3/as/dto/plugin/Plugin.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/Plugin.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/Plugin.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginKind.js b/api-openbis-javascript/src/v3/as/dto/plugin/PluginKind.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginKind.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/PluginKind.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginType.js b/api-openbis-javascript/src/v3/as/dto/plugin/PluginType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginType.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/PluginType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/PluginCreation.js b/api-openbis-javascript/src/v3/as/dto/plugin/create/PluginCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/PluginCreation.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/create/PluginCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/PluginDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/delete/PluginDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/PluginDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/delete/PluginDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/IPluginId.js b/api-openbis-javascript/src/v3/as/dto/plugin/id/IPluginId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/IPluginId.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/id/IPluginId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/PluginPermId.js b/api-openbis-javascript/src/v3/as/dto/plugin/id/PluginPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/PluginPermId.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/id/PluginPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginKindSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/PluginKindSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginKindSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/search/PluginKindSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/PluginSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/search/PluginSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/PluginUpdate.js b/api-openbis-javascript/src/v3/as/dto/plugin/update/PluginUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/PluginUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/update/PluginUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/Project.js b/api-openbis-javascript/src/v3/as/dto/project/Project.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/Project.js
rename to api-openbis-javascript/src/v3/as/dto/project/Project.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/ProjectCreation.js b/api-openbis-javascript/src/v3/as/dto/project/create/ProjectCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/ProjectCreation.js
rename to api-openbis-javascript/src/v3/as/dto/project/create/ProjectCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/ProjectDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/project/delete/ProjectDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/ProjectDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/project/delete/ProjectDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectSortOptions.js b/api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/history/ProjectRelationType.js b/api-openbis-javascript/src/v3/as/dto/project/history/ProjectRelationType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/history/ProjectRelationType.js
rename to api-openbis-javascript/src/v3/as/dto/project/history/ProjectRelationType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/IProjectId.js b/api-openbis-javascript/src/v3/as/dto/project/id/IProjectId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/IProjectId.js
rename to api-openbis-javascript/src/v3/as/dto/project/id/IProjectId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectIdentifier.js b/api-openbis-javascript/src/v3/as/dto/project/id/ProjectIdentifier.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectIdentifier.js
rename to api-openbis-javascript/src/v3/as/dto/project/id/ProjectIdentifier.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectPermId.js b/api-openbis-javascript/src/v3/as/dto/project/id/ProjectPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectPermId.js
rename to api-openbis-javascript/src/v3/as/dto/project/id/ProjectPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/NoProjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/project/search/NoProjectSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/NoProjectSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/project/search/NoProjectSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/ProjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/project/search/ProjectSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/ProjectSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/project/search/ProjectSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/ProjectUpdate.js b/api-openbis-javascript/src/v3/as/dto/project/update/ProjectUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/ProjectUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/project/update/ProjectUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/DataType.js b/api-openbis-javascript/src/v3/as/dto/property/DataType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/DataType.js
rename to api-openbis-javascript/src/v3/as/dto/property/DataType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyAssignment.js b/api-openbis-javascript/src/v3/as/dto/property/PropertyAssignment.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyAssignment.js
rename to api-openbis-javascript/src/v3/as/dto/property/PropertyAssignment.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyType.js b/api-openbis-javascript/src/v3/as/dto/property/PropertyType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyType.js
rename to api-openbis-javascript/src/v3/as/dto/property/PropertyType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyAssignmentCreation.js b/api-openbis-javascript/src/v3/as/dto/property/create/PropertyAssignmentCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyAssignmentCreation.js
rename to api-openbis-javascript/src/v3/as/dto/property/create/PropertyAssignmentCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/property/create/PropertyTypeCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyTypeCreation.js
rename to api-openbis-javascript/src/v3/as/dto/property/create/PropertyTypeCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyAssignmentId.js b/api-openbis-javascript/src/v3/as/dto/property/id/IPropertyAssignmentId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyAssignmentId.js
rename to api-openbis-javascript/src/v3/as/dto/property/id/IPropertyAssignmentId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyTypeId.js b/api-openbis-javascript/src/v3/as/dto/property/id/IPropertyTypeId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyTypeId.js
rename to api-openbis-javascript/src/v3/as/dto/property/id/IPropertyTypeId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyAssignmentPermId.js b/api-openbis-javascript/src/v3/as/dto/property/id/PropertyAssignmentPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyAssignmentPermId.js
rename to api-openbis-javascript/src/v3/as/dto/property/id/PropertyAssignmentPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyTypePermId.js b/api-openbis-javascript/src/v3/as/dto/property/id/PropertyTypePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyTypePermId.js
rename to api-openbis-javascript/src/v3/as/dto/property/id/PropertyTypePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/property/search/PropertyTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/property/search/PropertyTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/PropertyTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/property/update/PropertyTypeUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/PropertyTypeUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/property/update/PropertyTypeUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/Query.js b/api-openbis-javascript/src/v3/as/dto/query/Query.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/Query.js
rename to api-openbis-javascript/src/v3/as/dto/query/Query.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryDatabase.js b/api-openbis-javascript/src/v3/as/dto/query/QueryDatabase.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryDatabase.js
rename to api-openbis-javascript/src/v3/as/dto/query/QueryDatabase.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryType.js b/api-openbis-javascript/src/v3/as/dto/query/QueryType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryType.js
rename to api-openbis-javascript/src/v3/as/dto/query/QueryType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/QueryCreation.js b/api-openbis-javascript/src/v3/as/dto/query/create/QueryCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/QueryCreation.js
rename to api-openbis-javascript/src/v3/as/dto/query/create/QueryCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/QueryDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/query/delete/QueryDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/QueryDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/query/delete/QueryDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperation.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperation.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/QueryExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/query/execute/QueryExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/QueryExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/query/execute/QueryExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/SqlExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/query/execute/SqlExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/SqlExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/query/execute/SqlExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QuerySortOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QuerySortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QuerySortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QuerySortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryDatabaseId.js b/api-openbis-javascript/src/v3/as/dto/query/id/IQueryDatabaseId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryDatabaseId.js
rename to api-openbis-javascript/src/v3/as/dto/query/id/IQueryDatabaseId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryId.js b/api-openbis-javascript/src/v3/as/dto/query/id/IQueryId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryId.js
rename to api-openbis-javascript/src/v3/as/dto/query/id/IQueryId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryDatabaseName.js b/api-openbis-javascript/src/v3/as/dto/query/id/QueryDatabaseName.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryDatabaseName.js
rename to api-openbis-javascript/src/v3/as/dto/query/id/QueryDatabaseName.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryName.js b/api-openbis-javascript/src/v3/as/dto/query/id/QueryName.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryName.js
rename to api-openbis-javascript/src/v3/as/dto/query/id/QueryName.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryTechId.js b/api-openbis-javascript/src/v3/as/dto/query/id/QueryTechId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryTechId.js
rename to api-openbis-javascript/src/v3/as/dto/query/id/QueryTechId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/DatabaseIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/DatabaseIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/DatabaseIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/DatabaseIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QuerySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/QuerySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QuerySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/QuerySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/QueryTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/QueryTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SqlSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/SqlSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SqlSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/query/search/SqlSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/QueryUpdate.js b/api-openbis-javascript/src/v3/as/dto/query/update/QueryUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/QueryUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/query/update/QueryUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Right.js b/api-openbis-javascript/src/v3/as/dto/rights/Right.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Right.js
rename to api-openbis-javascript/src/v3/as/dto/rights/Right.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Rights.js b/api-openbis-javascript/src/v3/as/dto/rights/Rights.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Rights.js
rename to api-openbis-javascript/src/v3/as/dto/rights/Rights.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperation.js b/api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/Role.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/Role.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/Role.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/Role.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleAssignment.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/RoleAssignment.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleAssignment.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/RoleAssignment.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleLevel.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/RoleLevel.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleLevel.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/RoleLevel.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/IRoleAssignmentId.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/id/IRoleAssignmentId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/IRoleAssignmentId.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/id/IRoleAssignmentId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/Sample.js b/api-openbis-javascript/src/v3/as/dto/sample/Sample.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/Sample.js
rename to api-openbis-javascript/src/v3/as/dto/sample/Sample.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/SampleType.js b/api-openbis-javascript/src/v3/as/dto/sample/SampleType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/SampleType.js
rename to api-openbis-javascript/src/v3/as/dto/sample/SampleType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleCreation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleCreation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/SampleTypeCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleTypeCreation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/create/SampleTypeCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/SampleDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/sample/delete/SampleDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleSortOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/history/SampleRelationType.js b/api-openbis-javascript/src/v3/as/dto/sample/history/SampleRelationType.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/history/SampleRelationType.js
rename to api-openbis-javascript/src/v3/as/dto/sample/history/SampleRelationType.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/ISampleId.js b/api-openbis-javascript/src/v3/as/dto/sample/id/ISampleId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/ISampleId.js
rename to api-openbis-javascript/src/v3/as/dto/sample/id/ISampleId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SampleIdentifier.js b/api-openbis-javascript/src/v3/as/dto/sample/id/SampleIdentifier.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SampleIdentifier.js
rename to api-openbis-javascript/src/v3/as/dto/sample/id/SampleIdentifier.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SamplePermId.js b/api-openbis-javascript/src/v3/as/dto/sample/id/SamplePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SamplePermId.js
rename to api-openbis-javascript/src/v3/as/dto/sample/id/SamplePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchRelation.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchRelation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchRelation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchRelation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SampleTypeSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleTypeSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/SampleTypeSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/sample/update/SampleTypeUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleTypeUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/sample/update/SampleTypeUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleUpdate.js b/api-openbis-javascript/src/v3/as/dto/sample/update/SampleUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/sample/update/SampleUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/SemanticAnnotation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/SemanticAnnotation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/SemanticAnnotation.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/SemanticAnnotation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/server/ServerInformation.js b/api-openbis-javascript/src/v3/as/dto/server/ServerInformation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/server/ServerInformation.js
rename to api-openbis-javascript/src/v3/as/dto/server/ServerInformation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/AggregationService.js b/api-openbis-javascript/src/v3/as/dto/service/AggregationService.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/AggregationService.js
rename to api-openbis-javascript/src/v3/as/dto/service/AggregationService.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASService.js b/api-openbis-javascript/src/v3/as/dto/service/CustomASService.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASService.js
rename to api-openbis-javascript/src/v3/as/dto/service/CustomASService.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/CustomASServiceExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASServiceExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/CustomASServiceExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ProcessingService.js b/api-openbis-javascript/src/v3/as/dto/service/ProcessingService.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ProcessingService.js
rename to api-openbis-javascript/src/v3/as/dto/service/ProcessingService.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ReportingService.js b/api-openbis-javascript/src/v3/as/dto/service/ReportingService.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ReportingService.js
rename to api-openbis-javascript/src/v3/as/dto/service/ReportingService.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainService.js b/api-openbis-javascript/src/v3/as/dto/service/SearchDomainService.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainService.js
rename to api-openbis-javascript/src/v3/as/dto/service/SearchDomainService.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceExecutionResult.js b/api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceExecutionResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceExecutionResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceExecutionResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceSearchOption.js b/api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceSearchOption.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceSearchOption.js
rename to api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceSearchOption.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js b/api-openbis-javascript/src/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/CustomASServiceCode.js b/api-openbis-javascript/src/v3/as/dto/service/id/CustomASServiceCode.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/CustomASServiceCode.js
rename to api-openbis-javascript/src/v3/as/dto/service/id/CustomASServiceCode.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/DssServicePermId.js b/api-openbis-javascript/src/v3/as/dto/service/id/DssServicePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/DssServicePermId.js
rename to api-openbis-javascript/src/v3/as/dto/service/id/DssServicePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/ICustomASServiceId.js b/api-openbis-javascript/src/v3/as/dto/service/id/ICustomASServiceId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/ICustomASServiceId.js
rename to api-openbis-javascript/src/v3/as/dto/service/id/ICustomASServiceId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/IDssServiceId.js b/api-openbis-javascript/src/v3/as/dto/service/id/IDssServiceId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/IDssServiceId.js
rename to api-openbis-javascript/src/v3/as/dto/service/id/IDssServiceId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/AggregationServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/AggregationServiceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/AggregationServiceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/AggregationServiceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/CustomASServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/CustomASServiceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/CustomASServiceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/CustomASServiceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ReportingServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/ReportingServiceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ReportingServiceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/ReportingServiceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/SessionInformation.js b/api-openbis-javascript/src/v3/as/dto/session/SessionInformation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/SessionInformation.js
rename to api-openbis-javascript/src/v3/as/dto/session/SessionInformation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperation.js
rename to api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/ISessionInformationId.js b/api-openbis-javascript/src/v3/as/dto/session/id/ISessionInformationId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/ISessionInformationId.js
rename to api-openbis-javascript/src/v3/as/dto/session/id/ISessionInformationId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/SessionInformationPermId.js b/api-openbis-javascript/src/v3/as/dto/session/id/SessionInformationPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/SessionInformationPermId.js
rename to api-openbis-javascript/src/v3/as/dto/session/id/SessionInformationPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperation.js
rename to api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SessionInformationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/SessionInformationSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SessionInformationSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/session/search/SessionInformationSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/UserNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/UserNameSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/UserNameSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/session/search/UserNameSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/Space.js b/api-openbis-javascript/src/v3/as/dto/space/Space.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/Space.js
rename to api-openbis-javascript/src/v3/as/dto/space/Space.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/SpaceCreation.js b/api-openbis-javascript/src/v3/as/dto/space/create/SpaceCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/SpaceCreation.js
rename to api-openbis-javascript/src/v3/as/dto/space/create/SpaceCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/SpaceDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/space/delete/SpaceDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/SpaceDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/space/delete/SpaceDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/ISpaceId.js b/api-openbis-javascript/src/v3/as/dto/space/id/ISpaceId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/ISpaceId.js
rename to api-openbis-javascript/src/v3/as/dto/space/id/ISpaceId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpacePermId.js b/api-openbis-javascript/src/v3/as/dto/space/id/SpacePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpacePermId.js
rename to api-openbis-javascript/src/v3/as/dto/space/id/SpacePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpaceTechId.js b/api-openbis-javascript/src/v3/as/dto/space/id/SpaceTechId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpaceTechId.js
rename to api-openbis-javascript/src/v3/as/dto/space/id/SpaceTechId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/NoSpaceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/space/search/NoSpaceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/NoSpaceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/space/search/NoSpaceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SpaceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/space/search/SpaceSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SpaceSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/space/search/SpaceSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/SpaceUpdate.js b/api-openbis-javascript/src/v3/as/dto/space/update/SpaceUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/SpaceUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/space/update/SpaceUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/Tag.js b/api-openbis-javascript/src/v3/as/dto/tag/Tag.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/Tag.js
rename to api-openbis-javascript/src/v3/as/dto/tag/Tag.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/TagCreation.js b/api-openbis-javascript/src/v3/as/dto/tag/create/TagCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/TagCreation.js
rename to api-openbis-javascript/src/v3/as/dto/tag/create/TagCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/TagDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/tag/delete/TagDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/TagDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/tag/delete/TagDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagSortOptions.js b/api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/ITagId.js b/api-openbis-javascript/src/v3/as/dto/tag/id/ITagId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/ITagId.js
rename to api-openbis-javascript/src/v3/as/dto/tag/id/ITagId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagCode.js b/api-openbis-javascript/src/v3/as/dto/tag/id/TagCode.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagCode.js
rename to api-openbis-javascript/src/v3/as/dto/tag/id/TagCode.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagPermId.js b/api-openbis-javascript/src/v3/as/dto/tag/id/TagPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagPermId.js
rename to api-openbis-javascript/src/v3/as/dto/tag/id/TagPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/TagSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/tag/search/TagSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/TagSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/tag/search/TagSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/TagUpdate.js b/api-openbis-javascript/src/v3/as/dto/tag/update/TagUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/TagUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/tag/update/TagUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/Vocabulary.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/Vocabulary.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/Vocabulary.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/Vocabulary.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/VocabularyTerm.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/VocabularyTerm.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/VocabularyTerm.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/VocabularyTerm.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyCreation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyCreation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyTermCreation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyTermCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyTermCreation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyTermCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyId.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyTermId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyTermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyTermId.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyTermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyPermId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyPermId.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyTermPermId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyTermPermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyTermPermId.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyTermPermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyUpdate.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyUpdate.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyUpdate.js
rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyUpdate.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSetting.js b/api-openbis-javascript/src/v3/as/dto/webapp/WebAppSetting.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSetting.js
rename to api-openbis-javascript/src/v3/as/dto/webapp/WebAppSetting.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSettings.js b/api-openbis-javascript/src/v3/as/dto/webapp/WebAppSettings.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSettings.js
rename to api-openbis-javascript/src/v3/as/dto/webapp/WebAppSettings.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/create/WebAppSettingCreation.js b/api-openbis-javascript/src/v3/as/dto/webapp/create/WebAppSettingCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/create/WebAppSettingCreation.js
rename to api-openbis-javascript/src/v3/as/dto/webapp/create/WebAppSettingCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js
rename to api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js b/api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js
rename to api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js
rename to api-openbis-javascript/src/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/config.js b/api-openbis-javascript/src/v3/config.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/config.js
rename to api-openbis-javascript/src/v3/config.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/FullDataSetCreation.js b/api-openbis-javascript/src/v3/dss/dto/dataset/create/FullDataSetCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/FullDataSetCreation.js
rename to api-openbis-javascript/src/v3/dss/dto/dataset/create/FullDataSetCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/UploadedDataSetCreation.js b/api-openbis-javascript/src/v3/dss/dto/dataset/create/UploadedDataSetCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/UploadedDataSetCreation.js
rename to api-openbis-javascript/src/v3/dss/dto/dataset/create/UploadedDataSetCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/DataSetFile.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/DataSetFile.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/DataSetFile.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/DataSetFile.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/create/DataSetFileCreation.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/create/DataSetFileCreation.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/create/DataSetFileCreation.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/create/DataSetFileCreation.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/DataSetFilePermId.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/id/DataSetFilePermId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/DataSetFilePermId.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/id/DataSetFilePermId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/IDataSetFileId.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/id/IDataSetFileId.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/IDataSetFileId.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/id/IDataSetFileId.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js
rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js b/api-openbis-javascript/src/v3/lib/jquery/js/jquery.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js
rename to api-openbis-javascript/src/v3/lib/jquery/js/jquery.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/moment/js/moment.js b/api-openbis-javascript/src/v3/lib/moment/js/moment.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/moment/js/moment.js
rename to api-openbis-javascript/src/v3/lib/moment/js/moment.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/stjs/js/stjs.js b/api-openbis-javascript/src/v3/lib/stjs/js/stjs.js
similarity index 96%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/stjs/js/stjs.js
rename to api-openbis-javascript/src/v3/lib/stjs/js/stjs.js
index 3946d4343ba41b58f8624d84a7bebfacb22572e7..3b97e7c1084ed87912010c661ae3fa9d274601c9 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/stjs/js/stjs.js
+++ b/api-openbis-javascript/src/v3/lib/stjs/js/stjs.js
@@ -1,768 +1,768 @@
-/*
- *  Copyright 2011 Alexandru Craciun, Eyal Kaspi
- *
- *  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.
- */
-/**** Functionality in Java, but not in JS ********
- * methods added to JS prototypes
- */
-
-var NOT_IMPLEMENTED = function(){
-	throw "This method is not implemented in Javascript.";
-}
-
-JavalikeEquals = function(value){
-	if (value == null)
-		return false;
-	if (value.valueOf)
-		return this.valueOf() === value.valueOf();
-	return this === value;
-}
-
-/* String */
-if (!String.prototype.equals) {
-	String.prototype.equals=JavalikeEquals;
-}
-if (!String.prototype.getBytes) {
-	String.prototype.getBytes=NOT_IMPLEMENTED;
-}
-if (!String.prototype.getChars) {
-	String.prototype.getChars=NOT_IMPLEMENTED;
-}
-if (!String.prototype.contentEquals){
-	String.prototype.contentEquals=NOT_IMPLEMENTED;
-}
-if (!String.prototype.startsWith) {
-	String.prototype.startsWith=function(start, from){
-		var f = from != null ? from : 0;
-		return this.substring(f, f + start.length) == start;
-	}
-}
-if (!String.prototype.endsWith) {
-	String.prototype.endsWith=function(end){
-		if (end == null)
-			return false;
-		if (this.length < end.length)
-			return false;
-		return this.substring(this.length - end.length, this.length) == end;
-	}
-}
-if (!String.prototype.trim) {
-	var trimLeft = /^\s+/;
-	var trimRight = /\s+$/;
-	String.prototype.trim = function(  ) {
-		return this.replace( trimLeft, "" ).replace( trimRight, "" );
-	}
-}
-if (!String.prototype.matches){
-	String.prototype.matches=function(regexp){
-		return this.match("^" + regexp + "$") != null;
-	}
-}
-if (!String.prototype.compareTo){
-	String.prototype.compareTo=function(other){
-		if (other == null)
-			return 1;
-		if (this < other)
-			return -1;
-		if (this == other)
-			return 0;
-		return 1;
-	}
-}
-
-if (!String.prototype.compareToIgnoreCase){
-	String.prototype.compareToIgnoreCase=function(other){
-		if (other == null)
-			return 1;
-		return this.toLowerCase().compareTo(other.toLowerCase());
-	}
-}
-
-if (!String.prototype.equalsIgnoreCase){
-	String.prototype.equalsIgnoreCase=function(other){
-		if (other == null)
-			return false;
-		return this.toLowerCase() === other.toLowerCase();
-	}
-}
-
-if (!String.prototype.codePointAt){
-	String.prototype.codePointAt=String.prototype.charCodeAt;
-}
-
-if (!String.prototype.codePointBefore){
-	String.prototype.codePointBefore=NOT_IMPLEMENTED;
-}
-if (!String.prototype.codePointCount){
-	String.prototype.codePointCount=NOT_IMPLEMENTED;
-}
-
-if (!String.prototype.replaceAll){
-	String.prototype.replaceAll=function(regexp, replace){
-		return this.replace(new RegExp(regexp, "g"), replace);
-	}
-}
-
-if (!String.prototype.replaceFirst){
-	String.prototype.replaceFirst=function(regexp, replace){
-		return this.replace(new RegExp(regexp), replace);
-	}
-}
-
-if (!String.prototype.regionMatches){
-	String.prototype.regionMatches=function(ignoreCase, toffset, other, ooffset, len){
-		if (arguments.length == 4){
-			len=arguments[3];
-			ooffset=arguments[2];
-			other=arguments[1];
-			toffset=arguments[0];
-			ignoreCase=false;
-		}
-		if (toffset < 0 || ooffset < 0 || other == null || toffset + len > this.length || ooffset + len > other.length)
-			return false;
-		var s1 = this.substring(toffset, toffset + len);
-		var s2 = other.substring(ooffset, ooffset + len);
-		return ignoreCase ? s1.equalsIgnoreCase(s2) : s1 === s2;
-	}
-}
-
-
-
-//force valueof to match the Java's behavior
-String.valueOf=function(value){
-	return new String(value);
-}
-
-/* Number */
-var Byte=Number;
-var Double=Number;
-var Float=Number;
-var Integer=Number;
-var Long=Number;
-var Short=Number;
-
-/* type conversion - approximative as Javascript only has integers and doubles */
-if (!Number.prototype.intValue) {
-	Number.prototype.intValue=function(){
-		return parseInt(this);
-	}
-}
-if (!Number.prototype.shortValue) {
-	Number.prototype.shortValue=function(){
-		return parseInt(this);
-	}
-}
-if (!Number.prototype.longValue) {
-	Number.prototype.longValue=function(){
-		return parseInt(this);
-	}
-}
-if (!Number.prototype.byteValue) {
-	Number.prototype.byteValue=function(){
-		return parseInt(this);
-	}
-}
-
-if (!Number.prototype.floatValue) {
-	Number.prototype.floatValue=function(){
-		return parseFloat(this);
-	}
-}
-
-if (!Number.prototype.doubleValue) {
-	Number.prototype.doubleValue=function(){
-		return parseFloat(this);
-	}
-}
-
-if (!Number.parseInt) {
-	Number.parseInt = parseInt;
-}
-if (!Number.parseShort) {
-	Number.parseShort = parseInt;
-}
-if (!Number.parseLong) {
-	Number.parseLong = parseInt;
-}
-if (!Number.parseByte) {
-	Number.parseByte = parseInt;
-}
-
-if (!Number.parseDouble) {
-	Number.parseDouble = parseFloat;
-}
-
-if (!Number.parseFloat) {
-	Number.parseFloat = parseFloat;
-}
-
-if (!Number.isNaN) {
-	Number.isNaN = isNaN;
-}
-
-if (!Number.prototype.isNaN) {
-	Number.prototype.isNaN = isNaN;
-}
-if (!Number.prototype.equals) {
-	Number.prototype.equals=JavalikeEquals;
-}
-
-//force valueof to match approximately the Java's behavior (for Integer.valueOf it returns in fact a double)
-Number.valueOf=function(value){
-	return new Number(value).valueOf();
-}
-
-/* Boolean */
-if (!Boolean.prototype.equals) {
-	Boolean.prototype.equals=JavalikeEquals;
-}
-
-//force valueof to match the Java's behavior
-Boolean.valueOf=function(value){
-	return new Boolean(value).valueOf();
-}
-
-
-
-/************* STJS helper functions ***************/
-var stjs={};
-
-stjs.global=this;
-stjs.skipCopy = {"prototype":true, "constructor": true, "$typeDescription":true, "$inherit" : true};
-
-stjs.ns=function(path){
-	var p = path.split(".");
-	var obj = stjs.global;
-	for(var i = 0; i < p.length; ++i){
-		var part = p[i];
-		obj = obj[part] = obj[part] || {};
-	}
-	return obj;
-};
-
-stjs.copyProps=function(from, to){
-	for(key in from){
-		if (!stjs.skipCopy[key])
-			to[key]	= from[key];
-	}
-	return to;
-};
-
-stjs.copyInexistentProps=function(from, to){
-	for(key in from){
-		if (!stjs.skipCopy[key] && !to[key])
-			to[key]	= from[key];
-	}
-	return to;
-};
-
-stjs.extend=function(_constructor, _super, _implements, _initializer, _typeDescription){
-	if(typeof(_typeDescription) !== "object"){
-		// stjs 1.3+ always passes an non-null object to _typeDescription => The code calling stjs.extend
-		// was generated with version 1.2 or earlier, so let's call the 1.2 version of stjs.extend
-		return stjs.extend12.apply(this, arguments);
-	}
-
-	_constructor.$inherit=[];
-	var key, a;
-	if(_super != null){
-		// I is used as a no-op constructor that has the same prototype as _super
-		// we do this because we cannot predict the result of calling new _super()
-		// without parameters (it might throw an exception).
-		// Basically, the following 3 lines are a safe equivalent for
-		// _constructor.prototype = new _super();
-		var I = function(){};
-		I.prototype	= _super.prototype;
-		_constructor.prototype	= new I();
-
-		// copy static properties for super
-		// assign every method from proto instance
-		stjs.copyProps(_super, _constructor);
-		stjs.copyProps(_super.$typeDescription, _typeDescription);
-
-		//add the super class to inherit array
-		_constructor.$inherit.push(_super);
-	}
-
-	// copy static properties and default methods from interfaces
-	for(a = 0; a < _implements.length; ++a){
-		stjs.copyProps(_implements[a], _constructor);
-		stjs.copyInexistentProps(_implements[a].prototype, _constructor.prototype);
-		_constructor.$inherit.push(_implements[a]);
-	}
-
-	// remember the correct constructor
-	_constructor.prototype.constructor	= _constructor;
-
-	// run the initializer to assign all static and instance variables/functions
-	if(_initializer != null){
-		_initializer(_constructor, _constructor.prototype);
-	}
-
-	_constructor.$typeDescription = _typeDescription;
-
-	// add the default equals method if it is not present yet, and we don't have a superclass
-	if(_super == null && !_constructor.prototype.equals){
-		_constructor.prototype.equals = JavalikeEquals;
-	}
-	
-	_constructor.prototype.toJSON = function() {
-		function flatten(x) {
-			if (_.isArray(x)) {
-				return _.map(x, function(el) { return flatten(el) });
-			} else if (_.isObject(x)) {
-				var result = Object.create(null);
-
-			    for(var i in x) {
-			    	if (!_.isFunction(x[i])) {
-			    		result[i] = flatten(x[i]);
-			    	}
-			    }
-			    return result;
-			}
-			
-			return x;
-		}
-		
-		var r = flatten(this);
-		var res = JSON.stringify(r);
-		return r;
-	}
-
-	// build package and assign
-	return	_constructor;
-};
-
-/**
- * 1.2 and earlier version of stjs.extend. Included for backwards compatibility
- */
-stjs.extend12=function( _constructor,  _super, _implements){
-	var key, a;
-	var I = function(){};
-	I.prototype	= _super.prototype;
-	_constructor.prototype	= new I();
-
-	//copy static properties for super and interfaces
-	// assign every method from proto instance
-	for(a = 1; a < arguments.length; ++a){
-		stjs.copyProps(arguments[a], _constructor);
-	}
-	// remember the correct constructor
-	_constructor.prototype.constructor	= _constructor;
-
-	// add the default equals method if we don't have a superclass. Code generated with version 1.2 will
-	// override this method is equals() is present in the original java code.
-	// this was not part of the original 1.2 version of extends, however forward compatibility
-	// with 1.3 requires it
-	if(_super == null){
-		_constructor.prototype.equals = JavalikeEquals;
-	}
-
-	// build package and assign
-	return	_constructor;
-};
-
-/**
- * checks if the child is an instanceof parent. it checks recursively if "parent" is the child itself or it's found somewhere in the $inherit array
- */
-stjs.isInstanceOf=function(child, parent){
-	if (child === parent)
-		return true;
-	if (!child.$inherit)
-		return false;
-	for(var i in child.$inherit){
-		if (stjs.isInstanceOf(child.$inherit[i], parent)) {
-			return true;
-		}
-	}
-	return false;
-}
-stjs.enumEntry=function(idx, name){
-	this._name = name;
-	this._ordinal = idx;
-};
-
-stjs.enumEntry.prototype.name=function(){
-	return this._name;
-};
-stjs.enumEntry.prototype.ordinal=function(){
-	return this._ordinal;
-};
-stjs.enumEntry.prototype.toString=function(){
-	return this._name;
-};
-stjs.enumEntry.prototype.equals=JavalikeEquals;
-
-stjs.enumeration=function(){
-	var i;
-	var e = {};
-	e._values = [];
-	for(i = 0; i < arguments.length; ++i){
-		e[arguments[i]] = new stjs.enumEntry(i, arguments[i]);
-		e._values[i] = e[arguments[i]];
-	}
-	e.values = function(){return this._values;};
-	e.valueOf=function(label){
-		return this[label];
-	}
-	return e;
-};
-
-
-/**
- * if true the execution of generated main methods is disabled.
- * this is useful when executing unit tests, to no have the main methods executing before the tests
- */
-stjs.mainCallDisabled = false;
-
-stjs.exception=function(err){
-	return err;
-}
-
-stjs.isEnum=function(obj){
-	return obj != null && obj.constructor == stjs.enumEntry;
-}
-
-stjs.trunc=function(n) {
-	if (n == null)
-		return null;
-	return n | 0;
-}
-
-stjs.converters = {
-	Date : function(s, type) {
-		var a = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)$/
-				.exec(s);
-		if (a) {
-			return new Date(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
-		}
-		return null;
-	},
-
-	Enum : function(s, type){
-		return eval(type.arguments[0])[s];
-	}
-};
-
-/** *********** global ************** */
-function exception(err){
-	return err;
-}
-
-function isEnum(obj){
-	return obj != null && obj.constructor == stjs.enumEntry;
-}
-
-/******* parsing *************/
-
-/**
- * parse a json string using the type definition to build a typed object hierarchy
- */
-stjs.parseJSON = (function () {
-	  var number
-	      = '(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)';
-	  var oneChar = '(?:[^\\0-\\x08\\x0a-\\x1f\"\\\\]'
-	      + '|\\\\(?:[\"/\\\\bfnrt]|u[0-9A-Fa-f]{4}))';
-	  var string = '(?:\"' + oneChar + '*\")';
-
-	  // Will match a value in a well-formed JSON file.
-	  // If the input is not well-formed, may match strangely, but not in an unsafe
-	  // way.
-	  // Since this only matches value tokens, it does not match whitespace, colons,
-	  // or commas.
-	  var jsonToken = new RegExp(
-	      '(?:false|true|null|[\\{\\}\\[\\]]'
-	      + '|' + number
-	      + '|' + string
-	      + ')', 'g');
-
-	  // Matches escape sequences in a string literal
-	  var escapeSequence = new RegExp('\\\\(?:([^u])|u(.{4}))', 'g');
-
-	  // Decodes escape sequences in object literals
-	  var escapes = {
-	    '"': '"',
-	    '/': '/',
-	    '\\': '\\',
-	    'b': '\b',
-	    'f': '\f',
-	    'n': '\n',
-	    'r': '\r',
-	    't': '\t'
-	  };
-	  function unescapeOne(_, ch, hex) {
-	    return ch ? escapes[ch] : String.fromCharCode(parseInt(hex, 16));
-	  }
-
-	  var constructors = {};
-
-	  function constr(name, param){
-		  var c = constructors[name];
-		  if (!c)
-			  constructors[name] = c = eval(name);
-		  return new c(param);
-	  }
-
-	  function convert(type, json){
-		  if (!type)
-			  return json;
-		  var cv = stjs.converters[type.name || type];
-		  if (cv)
-			  return cv(json, type);
-		  //hopefully the type has a string constructor
-		 return constr(type, json);
-	  }
-
-	  function builder(type){
-		  if (!type)
-			  return {};
-			if (typeof type == "function")
-				return new type();
-			if (type.name) {
-				if (type.name == "Map")
-					return {};
-				if (type.name == "Array")
-					return [];
-				return constr(type.name);
-			}
-			return constr(type);
-	  }
-
-	  // A non-falsy value that coerces to the empty string when used as a key.
-	  var EMPTY_STRING = new String('');
-	  var SLASH = '\\';
-
-	  // Constructor to use based on an open token.
-	  var firstTokenCtors = { '{': Object, '[': Array };
-
-	  var hop = Object.hasOwnProperty;
-
-	  function nextMatch(str){
-		  var m = jsonToken.exec(str);
-		  return m != null ? m[0] : null;
-	  }
-	  return function (json, type) {
-	    // Split into tokens
-	    // Construct the object to return
-	    var result;
-	    var tok = nextMatch(json);
-	    var topLevelPrimitive = false;
-	    if ('{' === tok) {
-	      result = builder(type, null);
-	    } else if ('[' === tok) {
-	      result = [];
-	    } else {
-	      // The RFC only allows arrays or objects at the top level, but the JSON.parse
-	      // defined by the EcmaScript 5 draft does allow strings, booleans, numbers, and null
-	      // at the top level.
-	      result = [];
-	      topLevelPrimitive = true;
-	    }
-
-	    // If undefined, the key in an object key/value record to use for the next
-	    // value parsed.
-	    var key;
-	    // Loop over remaining tokens maintaining a stack of uncompleted objects and
-	    // arrays.
-	    var stack = [result];
-	    var stack2 = [type];
-	    for (tok = nextMatch(json); tok != null; tok = nextMatch(json)) {
-
-	      var cont;
-	      switch (tok.charCodeAt(0)) {
-	        default:  // sign or digit
-	          cont = stack[0];
-	          cont[key || cont.length] = +(tok);
-	          key = void 0;
-	          break;
-	        case 0x22:  // '"'
-	          tok = tok.substring(1, tok.length - 1);
-	          if (tok.indexOf(SLASH) !== -1) {
-	            tok = tok.replace(escapeSequence, unescapeOne);
-	          }
-	          cont = stack[0];
-	          if (!key) {
-	            if (cont instanceof Array) {
-	              key = cont.length;
-	            } else {
-	              key = tok || EMPTY_STRING;  // Use as key for next value seen.
-	              stack2[0] = cont.constructor.$typeDescription ? cont.constructor.$typeDescription[key] : stack2[1].arguments[1];
-	              break;
-	            }
-	          }
-	          cont[key] = convert(stack2[0],tok);
-	          key = void 0;
-	          break;
-	        case 0x5b:  // '['
-	          cont = stack[0];
-	          stack.unshift(cont[key || cont.length] = []);
-	          stack2.unshift(stack2[0].arguments[0]);
-	          //put the element type desc
-	          key = void 0;
-	          break;
-	        case 0x5d:  // ']'
-	          stack.shift();
-	          stack2.shift();
-	          break;
-	        case 0x66:  // 'f'
-	          cont = stack[0];
-	          cont[key || cont.length] = false;
-	          key = void 0;
-	          break;
-	        case 0x6e:  // 'n'
-	          cont = stack[0];
-	          cont[key || cont.length] = null;
-	          key = void 0;
-	          break;
-	        case 0x74:  // 't'
-	          cont = stack[0];
-	          cont[key || cont.length] = true;
-	          key = void 0;
-	          break;
-	        case 0x7b:  // '{'
-	          cont = stack[0];
-	          stack.unshift(cont[key || cont.length] = builder(stack2[0]));
-	          stack2.unshift(null);
-	          key = void 0;
-	          break;
-	        case 0x7d:  // '}'
-	          stack.shift();
-	          stack2.shift();
-	          break;
-	      }
-	    }
-	    // Fail if we've got an uncompleted object.
-	    if (topLevelPrimitive) {
-	      if (stack.length !== 1) { throw new Error(); }
-	      result = result[0];
-	    } else {
-	      if (stack.length) { throw new Error(); }
-	    }
-
-	    return result;
-	  };
-})();
-
-/************* STJS asserts ***************/
-var stjsAssertHandler = function(position, code, msg) {
-	throw msg + " at " + position;
-}
-function setAssertHandler(a) {
-	stjsAssertHandler = a;
-}
-
-function assertArgEquals(position, code, expectedValue, testValue) {
-	if (expectedValue != testValue && stjsAssertHandler)
-		stjsAssertHandler(position, code, "Wrong argument. Expected: " + expectedValue + ", got:" + testValue);
-}
-
-function assertArgNotNull(position, code, testValue) {
-	if (testValue == null && stjsAssertHandler)
-		stjsAssertHandler(position, code, "Wrong argument. Null value");
-}
-
-function assertArgTrue(position, code, condition) {
-	if (!condition && stjsAssertHandler)
-		stjsAssertHandler(position, code, "Wrong argument. Condition is false");
-}
-
-function assertStateEquals(position, code, expectedValue, testValue) {
-	if (expectedValue != testValue && stjsAssertHandler)
-		stjsAssertHandler(position, code, "Wrong state. Expected: " + expectedValue + ", got:" + testValue);
-}
-
-function assertStateNotNull(position, code, testValue) {
-	if (testValue == null && stjsAssertHandler)
-		stjsAssertHandler(position, code, "Wrong state. Null value");
-}
-
-function assertStateTrue(position, code, condition) {
-	if (!condition && stjsAssertHandler)
-		stjsAssertHandler(position, code, "Wrong state. Condition is false");
-}
-/** exception **/
-var Throwable = function(message, cause){
-	if (typeof message === "string"){
-		this.detailMessage  = message;
-		this.message = message;
-		this.cause = cause;
-	} else {
-		this.cause = message;
-	}
-};
-stjs.extend(Throwable, Error, [], function(constructor, prototype){
-	prototype.detailMessage = null;
-	prototype.cause = null;
-	prototype.getMessage = function() {
-        return this.detailMessage;
-    };
-
-	prototype.getLocalizedMessage = function() {
-        return this.getMessage();
-    };
-
-	prototype.getCause = function() {
-        return (this.cause==this ? null : this.cause);
-    };
-
-	prototype.toString = function() {
-	        var s = "Exception";//TODO should get the exception's type name here
-	        var message = this.getLocalizedMessage();
-	        return (message != null) ? (s + ": " + message) : s;
-	 };
-
-	 //TODO use stacktrace.js script
-	 prototype.getStackTrace = function() {
-		 return this.stack;
-	 };
-
-	 //TODO use stacktrace.js script
-	 prototype.printStackTrace = function(){
-		 console.error(this.getStackTrace());
-	 };
-}, {});
-
-var Exception = function(message, cause){
-	Throwable.call(this, message, cause);
-};
-stjs.extend(Exception, Throwable, [], function(constructor, prototype){
-}, {});
-
-var RuntimeException = function(message, cause){
-	Exception.call(this, message, cause);
-};
-stjs.extend(RuntimeException, Exception, [], function(constructor, prototype){
-}, {});
-
-/** stjs field manipulation */
-stjs.setField=function(obj, field, value, returnOldValue){
-	if (stjs.setFieldHandler)
-		return stjs.setFieldHandler(obj, field, value, returnOldValue);
-	var toReturn = returnOldValue ? obj[field] : value;
-	obj[field] = value;
-	return toReturn;
-}
-
-stjs.getField=function(obj, field){
-	if (stjs.getFieldHandler)
-		return stjs.getFieldHandler(obj, field);
-	return obj[field];
-}
-
-if (typeof exports !== 'undefined') {
-	if (typeof module !== 'undefined' && module.exports) {
-		exports = module.exports = stjs
-	}
-	exports.stjs = stjs
+/*
+ *  Copyright 2011 Alexandru Craciun, Eyal Kaspi
+ *
+ *  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.
+ */
+/**** Functionality in Java, but not in JS ********
+ * methods added to JS prototypes
+ */
+
+var NOT_IMPLEMENTED = function(){
+	throw "This method is not implemented in Javascript.";
+}
+
+JavalikeEquals = function(value){
+	if (value == null)
+		return false;
+	if (value.valueOf)
+		return this.valueOf() === value.valueOf();
+	return this === value;
+}
+
+/* String */
+if (!String.prototype.equals) {
+	String.prototype.equals=JavalikeEquals;
+}
+if (!String.prototype.getBytes) {
+	String.prototype.getBytes=NOT_IMPLEMENTED;
+}
+if (!String.prototype.getChars) {
+	String.prototype.getChars=NOT_IMPLEMENTED;
+}
+if (!String.prototype.contentEquals){
+	String.prototype.contentEquals=NOT_IMPLEMENTED;
+}
+if (!String.prototype.startsWith) {
+	String.prototype.startsWith=function(start, from){
+		var f = from != null ? from : 0;
+		return this.substring(f, f + start.length) == start;
+	}
+}
+if (!String.prototype.endsWith) {
+	String.prototype.endsWith=function(end){
+		if (end == null)
+			return false;
+		if (this.length < end.length)
+			return false;
+		return this.substring(this.length - end.length, this.length) == end;
+	}
+}
+if (!String.prototype.trim) {
+	var trimLeft = /^\s+/;
+	var trimRight = /\s+$/;
+	String.prototype.trim = function(  ) {
+		return this.replace( trimLeft, "" ).replace( trimRight, "" );
+	}
+}
+if (!String.prototype.matches){
+	String.prototype.matches=function(regexp){
+		return this.match("^" + regexp + "$") != null;
+	}
+}
+if (!String.prototype.compareTo){
+	String.prototype.compareTo=function(other){
+		if (other == null)
+			return 1;
+		if (this < other)
+			return -1;
+		if (this == other)
+			return 0;
+		return 1;
+	}
+}
+
+if (!String.prototype.compareToIgnoreCase){
+	String.prototype.compareToIgnoreCase=function(other){
+		if (other == null)
+			return 1;
+		return this.toLowerCase().compareTo(other.toLowerCase());
+	}
+}
+
+if (!String.prototype.equalsIgnoreCase){
+	String.prototype.equalsIgnoreCase=function(other){
+		if (other == null)
+			return false;
+		return this.toLowerCase() === other.toLowerCase();
+	}
+}
+
+if (!String.prototype.codePointAt){
+	String.prototype.codePointAt=String.prototype.charCodeAt;
+}
+
+if (!String.prototype.codePointBefore){
+	String.prototype.codePointBefore=NOT_IMPLEMENTED;
+}
+if (!String.prototype.codePointCount){
+	String.prototype.codePointCount=NOT_IMPLEMENTED;
+}
+
+if (!String.prototype.replaceAll){
+	String.prototype.replaceAll=function(regexp, replace){
+		return this.replace(new RegExp(regexp, "g"), replace);
+	}
+}
+
+if (!String.prototype.replaceFirst){
+	String.prototype.replaceFirst=function(regexp, replace){
+		return this.replace(new RegExp(regexp), replace);
+	}
+}
+
+if (!String.prototype.regionMatches){
+	String.prototype.regionMatches=function(ignoreCase, toffset, other, ooffset, len){
+		if (arguments.length == 4){
+			len=arguments[3];
+			ooffset=arguments[2];
+			other=arguments[1];
+			toffset=arguments[0];
+			ignoreCase=false;
+		}
+		if (toffset < 0 || ooffset < 0 || other == null || toffset + len > this.length || ooffset + len > other.length)
+			return false;
+		var s1 = this.substring(toffset, toffset + len);
+		var s2 = other.substring(ooffset, ooffset + len);
+		return ignoreCase ? s1.equalsIgnoreCase(s2) : s1 === s2;
+	}
+}
+
+
+
+//force valueof to match the Java's behavior
+String.valueOf=function(value){
+	return new String(value);
+}
+
+/* Number */
+var Byte=Number;
+var Double=Number;
+var Float=Number;
+var Integer=Number;
+var Long=Number;
+var Short=Number;
+
+/* type conversion - approximative as Javascript only has integers and doubles */
+if (!Number.prototype.intValue) {
+	Number.prototype.intValue=function(){
+		return parseInt(this);
+	}
+}
+if (!Number.prototype.shortValue) {
+	Number.prototype.shortValue=function(){
+		return parseInt(this);
+	}
+}
+if (!Number.prototype.longValue) {
+	Number.prototype.longValue=function(){
+		return parseInt(this);
+	}
+}
+if (!Number.prototype.byteValue) {
+	Number.prototype.byteValue=function(){
+		return parseInt(this);
+	}
+}
+
+if (!Number.prototype.floatValue) {
+	Number.prototype.floatValue=function(){
+		return parseFloat(this);
+	}
+}
+
+if (!Number.prototype.doubleValue) {
+	Number.prototype.doubleValue=function(){
+		return parseFloat(this);
+	}
+}
+
+if (!Number.parseInt) {
+	Number.parseInt = parseInt;
+}
+if (!Number.parseShort) {
+	Number.parseShort = parseInt;
+}
+if (!Number.parseLong) {
+	Number.parseLong = parseInt;
+}
+if (!Number.parseByte) {
+	Number.parseByte = parseInt;
+}
+
+if (!Number.parseDouble) {
+	Number.parseDouble = parseFloat;
+}
+
+if (!Number.parseFloat) {
+	Number.parseFloat = parseFloat;
+}
+
+if (!Number.isNaN) {
+	Number.isNaN = isNaN;
+}
+
+if (!Number.prototype.isNaN) {
+	Number.prototype.isNaN = isNaN;
+}
+if (!Number.prototype.equals) {
+	Number.prototype.equals=JavalikeEquals;
+}
+
+//force valueof to match approximately the Java's behavior (for Integer.valueOf it returns in fact a double)
+Number.valueOf=function(value){
+	return new Number(value).valueOf();
+}
+
+/* Boolean */
+if (!Boolean.prototype.equals) {
+	Boolean.prototype.equals=JavalikeEquals;
+}
+
+//force valueof to match the Java's behavior
+Boolean.valueOf=function(value){
+	return new Boolean(value).valueOf();
+}
+
+
+
+/************* STJS helper functions ***************/
+var stjs={};
+
+stjs.global=this;
+stjs.skipCopy = {"prototype":true, "constructor": true, "$typeDescription":true, "$inherit" : true};
+
+stjs.ns=function(path){
+	var p = path.split(".");
+	var obj = stjs.global;
+	for(var i = 0; i < p.length; ++i){
+		var part = p[i];
+		obj = obj[part] = obj[part] || {};
+	}
+	return obj;
+};
+
+stjs.copyProps=function(from, to){
+	for(key in from){
+		if (!stjs.skipCopy[key])
+			to[key]	= from[key];
+	}
+	return to;
+};
+
+stjs.copyInexistentProps=function(from, to){
+	for(key in from){
+		if (!stjs.skipCopy[key] && !to[key])
+			to[key]	= from[key];
+	}
+	return to;
+};
+
+stjs.extend=function(_constructor, _super, _implements, _initializer, _typeDescription){
+	if(typeof(_typeDescription) !== "object"){
+		// stjs 1.3+ always passes an non-null object to _typeDescription => The code calling stjs.extend
+		// was generated with version 1.2 or earlier, so let's call the 1.2 version of stjs.extend
+		return stjs.extend12.apply(this, arguments);
+	}
+
+	_constructor.$inherit=[];
+	var key, a;
+	if(_super != null){
+		// I is used as a no-op constructor that has the same prototype as _super
+		// we do this because we cannot predict the result of calling new _super()
+		// without parameters (it might throw an exception).
+		// Basically, the following 3 lines are a safe equivalent for
+		// _constructor.prototype = new _super();
+		var I = function(){};
+		I.prototype	= _super.prototype;
+		_constructor.prototype	= new I();
+
+		// copy static properties for super
+		// assign every method from proto instance
+		stjs.copyProps(_super, _constructor);
+		stjs.copyProps(_super.$typeDescription, _typeDescription);
+
+		//add the super class to inherit array
+		_constructor.$inherit.push(_super);
+	}
+
+	// copy static properties and default methods from interfaces
+	for(a = 0; a < _implements.length; ++a){
+		stjs.copyProps(_implements[a], _constructor);
+		stjs.copyInexistentProps(_implements[a].prototype, _constructor.prototype);
+		_constructor.$inherit.push(_implements[a]);
+	}
+
+	// remember the correct constructor
+	_constructor.prototype.constructor	= _constructor;
+
+	// run the initializer to assign all static and instance variables/functions
+	if(_initializer != null){
+		_initializer(_constructor, _constructor.prototype);
+	}
+
+	_constructor.$typeDescription = _typeDescription;
+
+	// add the default equals method if it is not present yet, and we don't have a superclass
+	if(_super == null && !_constructor.prototype.equals){
+		_constructor.prototype.equals = JavalikeEquals;
+	}
+	
+	_constructor.prototype.toJSON = function() {
+		function flatten(x) {
+			if (_.isArray(x)) {
+				return _.map(x, function(el) { return flatten(el) });
+			} else if (_.isObject(x)) {
+				var result = Object.create(null);
+
+			    for(var i in x) {
+			    	if (!_.isFunction(x[i])) {
+			    		result[i] = flatten(x[i]);
+			    	}
+			    }
+			    return result;
+			}
+			
+			return x;
+		}
+		
+		var r = flatten(this);
+		var res = JSON.stringify(r);
+		return r;
+	}
+
+	// build package and assign
+	return	_constructor;
+};
+
+/**
+ * 1.2 and earlier version of stjs.extend. Included for backwards compatibility
+ */
+stjs.extend12=function( _constructor,  _super, _implements){
+	var key, a;
+	var I = function(){};
+	I.prototype	= _super.prototype;
+	_constructor.prototype	= new I();
+
+	//copy static properties for super and interfaces
+	// assign every method from proto instance
+	for(a = 1; a < arguments.length; ++a){
+		stjs.copyProps(arguments[a], _constructor);
+	}
+	// remember the correct constructor
+	_constructor.prototype.constructor	= _constructor;
+
+	// add the default equals method if we don't have a superclass. Code generated with version 1.2 will
+	// override this method is equals() is present in the original java code.
+	// this was not part of the original 1.2 version of extends, however forward compatibility
+	// with 1.3 requires it
+	if(_super == null){
+		_constructor.prototype.equals = JavalikeEquals;
+	}
+
+	// build package and assign
+	return	_constructor;
+};
+
+/**
+ * checks if the child is an instanceof parent. it checks recursively if "parent" is the child itself or it's found somewhere in the $inherit array
+ */
+stjs.isInstanceOf=function(child, parent){
+	if (child === parent)
+		return true;
+	if (!child.$inherit)
+		return false;
+	for(var i in child.$inherit){
+		if (stjs.isInstanceOf(child.$inherit[i], parent)) {
+			return true;
+		}
+	}
+	return false;
+}
+stjs.enumEntry=function(idx, name){
+	this._name = name;
+	this._ordinal = idx;
+};
+
+stjs.enumEntry.prototype.name=function(){
+	return this._name;
+};
+stjs.enumEntry.prototype.ordinal=function(){
+	return this._ordinal;
+};
+stjs.enumEntry.prototype.toString=function(){
+	return this._name;
+};
+stjs.enumEntry.prototype.equals=JavalikeEquals;
+
+stjs.enumeration=function(){
+	var i;
+	var e = {};
+	e._values = [];
+	for(i = 0; i < arguments.length; ++i){
+		e[arguments[i]] = new stjs.enumEntry(i, arguments[i]);
+		e._values[i] = e[arguments[i]];
+	}
+	e.values = function(){return this._values;};
+	e.valueOf=function(label){
+		return this[label];
+	}
+	return e;
+};
+
+
+/**
+ * if true the execution of generated main methods is disabled.
+ * this is useful when executing unit tests, to no have the main methods executing before the tests
+ */
+stjs.mainCallDisabled = false;
+
+stjs.exception=function(err){
+	return err;
+}
+
+stjs.isEnum=function(obj){
+	return obj != null && obj.constructor == stjs.enumEntry;
+}
+
+stjs.trunc=function(n) {
+	if (n == null)
+		return null;
+	return n | 0;
+}
+
+stjs.converters = {
+	Date : function(s, type) {
+		var a = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)$/
+				.exec(s);
+		if (a) {
+			return new Date(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
+		}
+		return null;
+	},
+
+	Enum : function(s, type){
+		return eval(type.arguments[0])[s];
+	}
+};
+
+/** *********** global ************** */
+function exception(err){
+	return err;
+}
+
+function isEnum(obj){
+	return obj != null && obj.constructor == stjs.enumEntry;
+}
+
+/******* parsing *************/
+
+/**
+ * parse a json string using the type definition to build a typed object hierarchy
+ */
+stjs.parseJSON = (function () {
+	  var number
+	      = '(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)';
+	  var oneChar = '(?:[^\\0-\\x08\\x0a-\\x1f\"\\\\]'
+	      + '|\\\\(?:[\"/\\\\bfnrt]|u[0-9A-Fa-f]{4}))';
+	  var string = '(?:\"' + oneChar + '*\")';
+
+	  // Will match a value in a well-formed JSON file.
+	  // If the input is not well-formed, may match strangely, but not in an unsafe
+	  // way.
+	  // Since this only matches value tokens, it does not match whitespace, colons,
+	  // or commas.
+	  var jsonToken = new RegExp(
+	      '(?:false|true|null|[\\{\\}\\[\\]]'
+	      + '|' + number
+	      + '|' + string
+	      + ')', 'g');
+
+	  // Matches escape sequences in a string literal
+	  var escapeSequence = new RegExp('\\\\(?:([^u])|u(.{4}))', 'g');
+
+	  // Decodes escape sequences in object literals
+	  var escapes = {
+	    '"': '"',
+	    '/': '/',
+	    '\\': '\\',
+	    'b': '\b',
+	    'f': '\f',
+	    'n': '\n',
+	    'r': '\r',
+	    't': '\t'
+	  };
+	  function unescapeOne(_, ch, hex) {
+	    return ch ? escapes[ch] : String.fromCharCode(parseInt(hex, 16));
+	  }
+
+	  var constructors = {};
+
+	  function constr(name, param){
+		  var c = constructors[name];
+		  if (!c)
+			  constructors[name] = c = eval(name);
+		  return new c(param);
+	  }
+
+	  function convert(type, json){
+		  if (!type)
+			  return json;
+		  var cv = stjs.converters[type.name || type];
+		  if (cv)
+			  return cv(json, type);
+		  //hopefully the type has a string constructor
+		 return constr(type, json);
+	  }
+
+	  function builder(type){
+		  if (!type)
+			  return {};
+			if (typeof type == "function")
+				return new type();
+			if (type.name) {
+				if (type.name == "Map")
+					return {};
+				if (type.name == "Array")
+					return [];
+				return constr(type.name);
+			}
+			return constr(type);
+	  }
+
+	  // A non-falsy value that coerces to the empty string when used as a key.
+	  var EMPTY_STRING = new String('');
+	  var SLASH = '\\';
+
+	  // Constructor to use based on an open token.
+	  var firstTokenCtors = { '{': Object, '[': Array };
+
+	  var hop = Object.hasOwnProperty;
+
+	  function nextMatch(str){
+		  var m = jsonToken.exec(str);
+		  return m != null ? m[0] : null;
+	  }
+	  return function (json, type) {
+	    // Split into tokens
+	    // Construct the object to return
+	    var result;
+	    var tok = nextMatch(json);
+	    var topLevelPrimitive = false;
+	    if ('{' === tok) {
+	      result = builder(type, null);
+	    } else if ('[' === tok) {
+	      result = [];
+	    } else {
+	      // The RFC only allows arrays or objects at the top level, but the JSON.parse
+	      // defined by the EcmaScript 5 draft does allow strings, booleans, numbers, and null
+	      // at the top level.
+	      result = [];
+	      topLevelPrimitive = true;
+	    }
+
+	    // If undefined, the key in an object key/value record to use for the next
+	    // value parsed.
+	    var key;
+	    // Loop over remaining tokens maintaining a stack of uncompleted objects and
+	    // arrays.
+	    var stack = [result];
+	    var stack2 = [type];
+	    for (tok = nextMatch(json); tok != null; tok = nextMatch(json)) {
+
+	      var cont;
+	      switch (tok.charCodeAt(0)) {
+	        default:  // sign or digit
+	          cont = stack[0];
+	          cont[key || cont.length] = +(tok);
+	          key = void 0;
+	          break;
+	        case 0x22:  // '"'
+	          tok = tok.substring(1, tok.length - 1);
+	          if (tok.indexOf(SLASH) !== -1) {
+	            tok = tok.replace(escapeSequence, unescapeOne);
+	          }
+	          cont = stack[0];
+	          if (!key) {
+	            if (cont instanceof Array) {
+	              key = cont.length;
+	            } else {
+	              key = tok || EMPTY_STRING;  // Use as key for next value seen.
+	              stack2[0] = cont.constructor.$typeDescription ? cont.constructor.$typeDescription[key] : stack2[1].arguments[1];
+	              break;
+	            }
+	          }
+	          cont[key] = convert(stack2[0],tok);
+	          key = void 0;
+	          break;
+	        case 0x5b:  // '['
+	          cont = stack[0];
+	          stack.unshift(cont[key || cont.length] = []);
+	          stack2.unshift(stack2[0].arguments[0]);
+	          //put the element type desc
+	          key = void 0;
+	          break;
+	        case 0x5d:  // ']'
+	          stack.shift();
+	          stack2.shift();
+	          break;
+	        case 0x66:  // 'f'
+	          cont = stack[0];
+	          cont[key || cont.length] = false;
+	          key = void 0;
+	          break;
+	        case 0x6e:  // 'n'
+	          cont = stack[0];
+	          cont[key || cont.length] = null;
+	          key = void 0;
+	          break;
+	        case 0x74:  // 't'
+	          cont = stack[0];
+	          cont[key || cont.length] = true;
+	          key = void 0;
+	          break;
+	        case 0x7b:  // '{'
+	          cont = stack[0];
+	          stack.unshift(cont[key || cont.length] = builder(stack2[0]));
+	          stack2.unshift(null);
+	          key = void 0;
+	          break;
+	        case 0x7d:  // '}'
+	          stack.shift();
+	          stack2.shift();
+	          break;
+	      }
+	    }
+	    // Fail if we've got an uncompleted object.
+	    if (topLevelPrimitive) {
+	      if (stack.length !== 1) { throw new Error(); }
+	      result = result[0];
+	    } else {
+	      if (stack.length) { throw new Error(); }
+	    }
+
+	    return result;
+	  };
+})();
+
+/************* STJS asserts ***************/
+var stjsAssertHandler = function(position, code, msg) {
+	throw msg + " at " + position;
+}
+function setAssertHandler(a) {
+	stjsAssertHandler = a;
+}
+
+function assertArgEquals(position, code, expectedValue, testValue) {
+	if (expectedValue != testValue && stjsAssertHandler)
+		stjsAssertHandler(position, code, "Wrong argument. Expected: " + expectedValue + ", got:" + testValue);
+}
+
+function assertArgNotNull(position, code, testValue) {
+	if (testValue == null && stjsAssertHandler)
+		stjsAssertHandler(position, code, "Wrong argument. Null value");
+}
+
+function assertArgTrue(position, code, condition) {
+	if (!condition && stjsAssertHandler)
+		stjsAssertHandler(position, code, "Wrong argument. Condition is false");
+}
+
+function assertStateEquals(position, code, expectedValue, testValue) {
+	if (expectedValue != testValue && stjsAssertHandler)
+		stjsAssertHandler(position, code, "Wrong state. Expected: " + expectedValue + ", got:" + testValue);
+}
+
+function assertStateNotNull(position, code, testValue) {
+	if (testValue == null && stjsAssertHandler)
+		stjsAssertHandler(position, code, "Wrong state. Null value");
+}
+
+function assertStateTrue(position, code, condition) {
+	if (!condition && stjsAssertHandler)
+		stjsAssertHandler(position, code, "Wrong state. Condition is false");
+}
+/** exception **/
+var Throwable = function(message, cause){
+	if (typeof message === "string"){
+		this.detailMessage  = message;
+		this.message = message;
+		this.cause = cause;
+	} else {
+		this.cause = message;
+	}
+};
+stjs.extend(Throwable, Error, [], function(constructor, prototype){
+	prototype.detailMessage = null;
+	prototype.cause = null;
+	prototype.getMessage = function() {
+        return this.detailMessage;
+    };
+
+	prototype.getLocalizedMessage = function() {
+        return this.getMessage();
+    };
+
+	prototype.getCause = function() {
+        return (this.cause==this ? null : this.cause);
+    };
+
+	prototype.toString = function() {
+	        var s = "Exception";//TODO should get the exception's type name here
+	        var message = this.getLocalizedMessage();
+	        return (message != null) ? (s + ": " + message) : s;
+	 };
+
+	 //TODO use stacktrace.js script
+	 prototype.getStackTrace = function() {
+		 return this.stack;
+	 };
+
+	 //TODO use stacktrace.js script
+	 prototype.printStackTrace = function(){
+		 console.error(this.getStackTrace());
+	 };
+}, {});
+
+var Exception = function(message, cause){
+	Throwable.call(this, message, cause);
+};
+stjs.extend(Exception, Throwable, [], function(constructor, prototype){
+}, {});
+
+var RuntimeException = function(message, cause){
+	Exception.call(this, message, cause);
+};
+stjs.extend(RuntimeException, Exception, [], function(constructor, prototype){
+}, {});
+
+/** stjs field manipulation */
+stjs.setField=function(obj, field, value, returnOldValue){
+	if (stjs.setFieldHandler)
+		return stjs.setFieldHandler(obj, field, value, returnOldValue);
+	var toReturn = returnOldValue ? obj[field] : value;
+	obj[field] = value;
+	return toReturn;
+}
+
+stjs.getField=function(obj, field){
+	if (stjs.getFieldHandler)
+		return stjs.getFieldHandler(obj, field);
+	return obj[field];
+}
+
+if (typeof exports !== 'undefined') {
+	if (typeof module !== 'undefined' && module.exports) {
+		exports = module.exports = stjs
+	}
+	exports.stjs = stjs
 }
\ No newline at end of file
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/underscore/js/underscore.js b/api-openbis-javascript/src/v3/lib/underscore/js/underscore.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/underscore/js/underscore.js
rename to api-openbis-javascript/src/v3/lib/underscore/js/underscore.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/openbis.js b/api-openbis-javascript/src/v3/openbis.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/openbis.js
rename to api-openbis-javascript/src/v3/openbis.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/require.js b/api-openbis-javascript/src/v3/require.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/require.js
rename to api-openbis-javascript/src/v3/require.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/DateFormat.js b/api-openbis-javascript/src/v3/util/DateFormat.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/DateFormat.js
rename to api-openbis-javascript/src/v3/util/DateFormat.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Exceptions.js b/api-openbis-javascript/src/v3/util/Exceptions.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Exceptions.js
rename to api-openbis-javascript/src/v3/util/Exceptions.js
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Json.js b/api-openbis-javascript/src/v3/util/Json.js
similarity index 100%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Json.js
rename to api-openbis-javascript/src/v3/util/Json.js
diff --git a/app-openbis-installer/build.gradle b/app-openbis-installer/build.gradle
index 51f1bc31c22b4172884a5bff5fb059230ad57f80..3f19168393b97697bbfcb8b2cb17288a4cc529ac 100644
--- a/app-openbis-installer/build.gradle
+++ b/app-openbis-installer/build.gradle
@@ -1,6 +1,7 @@
 evaluationDependsOn(':lib-commonbase')
 evaluationDependsOn(':lib-common')
 evaluationDependsOn(':api-openbis-java')
+evaluationDependsOn(':api-openbis-javascript')
 evaluationDependsOn(':lib-openbis-common')
 evaluationDependsOn(':lib-authentication')
 evaluationDependsOn(':lib-dbmigration')
@@ -53,7 +54,7 @@ println "installerDir:${installerDistDir}"
 println "buildDir:${buildDir}"
 println "installer:${project.projectDir}/resource/installer"
 
-task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zip', ':core-plugin-openbis:zipDss', 'core-plugin-openbis:zipBdlServer']) {
+task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zip', ':core-plugin-openbis:zipDss', ':core-plugin-openbis:zipBdlServer']) {
     duplicatesStrategy 'include'
     from "${project.projectDir}/resource/installer"
     from "${project.projectDir}/../core-plugin-openbis/dist/tarball/installer"
@@ -61,7 +62,7 @@ task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zi
     into installerDistDir
     from zipTree(project(':core-plugin-openbis').zipBdlServer.archivePath)
     into installerDistDir
-    from("${installerDistDir}/../BUILD-installation.INFO") {
+    from("${installerDistDir}/../BUILD-app-openbis-installer.INFO") {
         into 'bin'
     }
     from("${buildDir}/classes/java/main/InstallerVariableAccess.class") {
diff --git a/app-openbis-installer/settings.gradle b/app-openbis-installer/settings.gradle
index ed7e5f09bc90809cab64232326952654ff904bfa..c65fe80bb49c16bf548fcca399c764023799e5ca 100644
--- a/app-openbis-installer/settings.gradle
+++ b/app-openbis-installer/settings.gradle
@@ -1,4 +1,4 @@
 includeFlat 'lib-commonbase', 'lib-common',
         'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server',
         'server-original-data-store', 'server-screening', 'core-plugin-openbis', 'server-external-data-store',
-        'ui-admin', 'lib-microservice-server'
+        'ui-admin', 'lib-microservice-server', 'ui-eln-lims', 'api-openbis-javascript'
diff --git a/build/build.gradle b/build/build.gradle
index 6c2b4f45d63b198f72da2fa1f284fe05d82a1ddf..7fdf2e012a2acd5702e5c2e198362b04a6b59573 100644
--- a/build/build.gradle
+++ b/build/build.gradle
@@ -1,6 +1,7 @@
 evaluationDependsOn(':lib-commonbase')
 evaluationDependsOn(':lib-common')
 evaluationDependsOn(':api-openbis-java')
+evaluationDependsOn(':api-openbis-javascript')
 evaluationDependsOn(':lib-openbis-common')
 evaluationDependsOn(':lib-authentication')
 evaluationDependsOn(':lib-dbmigration')
diff --git a/build/settings.gradle b/build/settings.gradle
index f5301d20e35c707ecd8571e335b5b75c09213849..d790bf35e109db3f87a4755aed2bffbcc3734e9f 100644
--- a/build/settings.gradle
+++ b/build/settings.gradle
@@ -1,4 +1,4 @@
 includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server',
         'server-original-data-store', 'server-screening', 'core-plugin-openbis', 'app-openbis-installer',
         'lib-image-readers', 'test-ui-core', 'test-api-openbis-javascript', 'server-external-data-store', 'ui-admin',
-        'lib-microservice-server'
\ No newline at end of file
+        'lib-microservice-server', 'lib-transactional-file-system', 'server-data-store', 'ui-eln-lims', 'api-openbis-javascript'
\ No newline at end of file
diff --git a/core-plugin-openbis/build.gradle b/core-plugin-openbis/build.gradle
index d79096d2eef9e4f1ae1303a1c4fa09ce4cd31ef5..f258f6b371d8e3415d68716fbbb2441e8ac999d8 100644
--- a/core-plugin-openbis/build.gradle
+++ b/core-plugin-openbis/build.gradle
@@ -10,9 +10,9 @@ buildscript {
     }
 }
 
-plugins {
-    id "com.github.node-gradle.node" version "3.2.1"
-}
+//plugins {
+//    id "com.github.node-gradle.node" version "3.2.1"
+//}
 apply plugin: org.owasp.dependencycheck.gradle.DependencyCheckPlugin
 apply plugin: "org.paleozogt.symzip"
 
@@ -39,6 +39,7 @@ evaluationDependsOn(':server-original-data-store')
 evaluationDependsOn(':server-screening')
 evaluationDependsOn(':server-external-data-store')
 evaluationDependsOn(':ui-admin')
+evaluationDependsOn(':ui-eln-lims')
 
 
 apply from: '../build/javaproject.gradle'
@@ -57,6 +58,7 @@ configurations.create('zipping')
 configurations.create('server_original_data_store')
 configurations.create('javadoc_sources')
 configurations.create('javadoc_compilation')
+configurations.create('blast_tar')
 
 def jettyVersion = '9.4.44'
 def jettyDistributionVersion = '9.4.44.v20210927'
@@ -79,6 +81,8 @@ dependencies {
 
     zipping "eclipse:jetty-distribution:${jettyVersion}@zip"
 
+    blast_tar "blast:blast:2.2.30@tar.gz"
+
     server_original_data_store project(':server-screening'),
             'bioformats:bioformats:6.5.1',
             'imagej:ij:1.43u',
@@ -87,7 +91,6 @@ dependencies {
             'slf4j:slf4j:1.6.2',
             'slf4j:slf4j-log4j12:1.6.2',
             'sybit:image-viewer:0.3.6'
-//    }
 
     javadoc_sources project(path: ':lib-commonbase', configuration: 'archives'),
             project(path: ':lib-common', configuration: 'archives'),
@@ -195,25 +198,17 @@ task untarGwt(type: Copy) {
     into gwtBuildDir
 }
 
-node {
-    download = true
-    version = '18.12.1'
-    workDir = file("${projectDir}/node/nodejs")
-    nodeModulesDir = file("${projectDir}")
-}
-
-task bundleOpenbisStaticResources(type: Exec) {
-    dependsOn 'untarGwt'
-    dependsOn 'npmInstall'
-    commandLine 'bash', '-c', "${projectDir}/resource/js/v3/build.sh"
-}
-
 task copyOpenbisStaticResources(type: Copy) {
-    dependsOn 'bundleOpenbisStaticResources'
+    dependsOn 'untarGwt'
     from "${project(':server-application-server').projectDir}/source/java/ch/systemsx/cisd/openbis/public"
     into gwtModuleBuildDir
 }
 
+task copyV3ApiResources(type: Copy, dependsOn: [copyOpenbisStaticResources, ':api-openbis-javascript:bundleOpenbisStaticResources']) {
+    from("${project(':api-openbis-javascript').projectDir}/src/v3")
+    into "${gwtModuleBuildDir}/resources/api/v3"
+}
+
 ext.classpathEntries = files(
         project(':server-application-server').file('source/java/applicationContext.xml'),
         project(':server-application-server').file('source/java/dbConfigurationContext.xml'),
@@ -265,9 +260,9 @@ task checkFilesExist {
     }
 }
 
-
 war.dependsOn untarGwt
 war.dependsOn copyOpenbisStaticResources
+war.dependsOn copyV3ApiResources
 war.dependsOn checkFilesExist
 war.dependsOn copyJarsForWebStart
 war {
@@ -348,6 +343,9 @@ task zipCorePlugins(type: SymZip) {
     from fileTree(dir: 'targets/downloads/obit_shared_core_technology-release-20.x/core-plugins', includes: ['shared/**'])
     from 'dist/core-plugins'
     from 'dist/server/core-plugins.properties'
+    from(configurations.blast_tar.collect { tarTree(it) }) {
+        into 'eln-lims'
+    }
     into 'core-plugins'
 }
 
@@ -503,7 +501,17 @@ task copyOpenbisNgUiToCorePlugins(type: Copy, dependsOn: [deleteOpenbisNgUi, ':u
     into file('dist/core-plugins')
 }
 
+task deleteOpenbisElnLims(type: Delete) {
+    delete 'dist/core-plugins/eln-lims'
+}
+
+task copyOpenbisElnLimsCorePlugins(type: Copy, dependsOn: [deleteOpenbisNgUi, ':ui-eln-lims:copyCorePlugins']) {
+    from project(':ui-eln-lims').file('build/core-plugins')
+    into file('dist/core-plugins')
+}
+
 zipCorePlugins.dependsOn copyOpenbisNgUiToCorePlugins
+zipCorePlugins.dependsOn copyOpenbisElnLimsCorePlugins
 
 task generateJavadoc(type: Javadoc) {
     source = configurations.javadoc_sources.collect {
diff --git a/core-plugin-openbis/settings.gradle b/core-plugin-openbis/settings.gradle
index df7724ce0359ace7d89fe754342a537380c209a6..9045031c72a55696235201e02e26501f5ba57110 100644
--- a/core-plugin-openbis/settings.gradle
+++ b/core-plugin-openbis/settings.gradle
@@ -1,3 +1,3 @@
 includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server',
         'server-original-data-store', 'server-screening', 'server-external-data-store',
-        'ui-admin', 'lib-microservice-server'
+        'ui-admin', 'lib-microservice-server', 'ui-eln-lims', 'api-openbis-javascript'
diff --git a/docs/codestyle/CISD_Conventions_Eclipse_V2.xml b/docs/codestyle/CISD_Conventions_Eclipse_V2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..970407607e2eeb528e6bdbd366d796b09e66e056
--- /dev/null
+++ b/docs/codestyle/CISD_Conventions_Eclipse_V2.xml
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="utf-8"?>
+<profiles version="21">
+	<profile kind="CodeFormatterProfile" name="CISD Conventions V2" version="21">
+		<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+		<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+		<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+		<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="preserve_positions"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+		<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
+		<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
+		<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
+		<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+		<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="18"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="48"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="2"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="49"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="49"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="49"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="49"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="0"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="true"/>
+		<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
+		<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
+		<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
+	</profile>
+</profiles>
\ No newline at end of file
diff --git a/docs/codestyle/CISD_Conventions_IntelliJ_V2.xml b/docs/codestyle/CISD_Conventions_IntelliJ_V2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2d251e3189b41da182e320f69be511f95b0a5f06
--- /dev/null
+++ b/docs/codestyle/CISD_Conventions_IntelliJ_V2.xml
@@ -0,0 +1,42 @@
+<code_scheme name="CISD Conventions V2" version="173">
+  <option name="RIGHT_MARGIN" value="100" />
+  <JavaCodeStyleSettings>
+    <option name="SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENT" value="true" />
+    <option name="ALIGN_TYPES_IN_MULTI_CATCH" value="false" />
+    <option name="JD_P_AT_EMPTY_LINES" value="false" />
+    <option name="JD_KEEP_EMPTY_LINES" value="false" />
+    <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" />
+    <option name="JD_INDENT_ON_CONTINUATION" value="true" />
+  </JavaCodeStyleSettings>
+  <codeStyleSettings language="JAVA">
+    <option name="RIGHT_MARGIN" value="100" />
+    <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
+    <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
+    <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
+    <option name="KEEP_BLANK_LINES_BETWEEN_PACKAGE_DECLARATION_AND_HEADER" value="1" />
+    <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
+    <option name="BLANK_LINES_AROUND_FIELD" value="1" />
+    <option name="BLANK_LINES_AROUND_FIELD_IN_INTERFACE" value="1" />
+    <option name="BRACE_STYLE" value="2" />
+    <option name="CLASS_BRACE_STYLE" value="2" />
+    <option name="METHOD_BRACE_STYLE" value="2" />
+    <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
+    <option name="ALIGN_MULTILINE_RESOURCES" value="false" />
+    <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
+    <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
+    <option name="CALL_PARAMETERS_WRAP" value="1" />
+    <option name="METHOD_PARAMETERS_WRAP" value="1" />
+    <option name="RESOURCE_LIST_WRAP" value="5" />
+    <option name="EXTENDS_LIST_WRAP" value="1" />
+    <option name="THROWS_LIST_WRAP" value="1" />
+    <option name="EXTENDS_KEYWORD_WRAP" value="1" />
+    <option name="THROWS_KEYWORD_WRAP" value="1" />
+    <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
+    <option name="TERNARY_OPERATION_WRAP" value="5" />
+    <option name="ARRAY_INITIALIZER_WRAP" value="1" />
+    <option name="ASSIGNMENT_WRAP" value="1" />
+    <option name="WRAP_COMMENTS" value="true" />
+    <option name="ENUM_CONSTANTS_WRAP" value="1" />
+  </codeStyleSettings>
+</code_scheme>
\ No newline at end of file
diff --git a/docs/copyright/Copyright.xml b/docs/copyright/Copyright.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e1797f4eb727d4fa3a75226f371a862d137fa363
--- /dev/null
+++ b/docs/copyright/Copyright.xml
@@ -0,0 +1,7 @@
+<component name="CopyrightManager">
+  <copyright>
+    <option name="keyword" value=".*Copyright" />
+    <option name="notice" value=" Copyright &amp;#36;today.year ETH Zürich, Scientific IT Services&#10; &#10; Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);&#10; you may not use this file except in compliance with the License.&#10; You may obtain a copy of the License at&#10; &#10;      http://www.apache.org/licenses/LICENSE-2.0&#10;  &#10; Unless required by applicable law or agreed to in writing, software&#10; distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&#10; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&#10; See the License for the specific language governing permissions and&#10; limitations under the License.&#10;" />
+    <option name="myName" value="Copyright" />
+  </copyright>
+</component>
\ No newline at end of file
diff --git a/docs/copyright/profiles_settings.xml b/docs/copyright/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c803e3e77f27709e8b0966b3e22f30a564958257
--- /dev/null
+++ b/docs/copyright/profiles_settings.xml
@@ -0,0 +1,7 @@
+<component name="CopyrightManager">
+  <settings default="Copyright">
+    <module2copyright>
+      <element module="All" copyright="Copyright" />
+    </module2copyright>
+  </settings>
+</component>
\ No newline at end of file
diff --git a/docs/hooks/commit-msg b/docs/hooks/commit-msg
new file mode 100755
index 0000000000000000000000000000000000000000..8a0b37a062629dec7f8569581ccd79fa30c4046e
--- /dev/null
+++ b/docs/hooks/commit-msg
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# A simple hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.
+#
+# To enable this hook, move it to .git/hooks directory and make it executable.
+# Remember to keep the name of the file as "commit-msg".
+
+commit_regex='(SSDM-[0-9]+:|merge|rebase)'
+error_msg="Aborting commit. Your commit message is missing an issue number ('SSDM-XXXX:')"
+
+if ! grep -iqE "$commit_regex" "$1"; then
+    echo "$error_msg" >&2
+    exit 1
+fi
diff --git a/server-application-server/build.gradle b/server-application-server/build.gradle
index 107edd94015a8973f6787d859eed5d04acb1073e..4a36b56582796415dff75739fd9dcbb9f7cc1b0d 100644
--- a/server-application-server/build.gradle
+++ b/server-application-server/build.gradle
@@ -1,6 +1,7 @@
 evaluationDependsOn(':lib-commonbase')
 evaluationDependsOn(':lib-common')
 evaluationDependsOn(':api-openbis-java')
+evaluationDependsOn(':api-openbis-javascript')
 evaluationDependsOn(':lib-openbis-common')
 evaluationDependsOn(':lib-authentication')
 evaluationDependsOn(':lib-dbmigration')
@@ -123,7 +124,7 @@ task copyTestData(type: Copy, dependsOn: testClasses) {
     include "*.properties"
 }
 
-task openBISDevelopementEnvironmentASStart(type: JavaExec) {
+task openBISDevelopmentEnvironmentASStart(type: JavaExec) {
     main = 'org.eclipse.jetty.runner.Runner'
     classpath = sourceSets.main.runtimeClasspath + configurations.devRuntime
     jvmArgs(['-Dpython.path=../libraries/jython/jython-lib', '-Dlog4j.configuration=etc/log.xml',
@@ -145,6 +146,5 @@ cleanDbSuiteProjectSamplesEnabled.dependsOn(testProjectSamplesEnabled)
 test.maxHeapSize = "10240m"
 test.dependsOn(copyTestData)
 test.dependsOn(cleanDbSuite)
-//test.dependsOn(testProjectSamplesEnabled)
 
 apply from: 'gwtdev.gradle'
diff --git a/server-application-server/gwtdev.gradle b/server-application-server/gwtdev.gradle
index bede33e992bb7072e33db331f27ab7d315cb23e8..ebc1984bbf5ae00c20ec7ed9a3180dda9ac0cc11 100644
--- a/server-application-server/gwtdev.gradle
+++ b/server-application-server/gwtdev.gradle
@@ -16,12 +16,15 @@ if (System.getProperty("openbis.development-build") != null) {
                 project(path: ':lib-common', configuration: 'archives'),
                 project(path: ':api-openbis-java'),
                 project(path: ':api-openbis-java', configuration: 'archives'),
+                project(path: ':api-openbis-javascript'),
                 project(path: ':lib-openbis-common'),
                 project(path: ':lib-openbis-common', configuration: 'archives'),
                 project(path: ':server-application-server', configuration: 'archives')
     }
 }
 
+def gwtTempPath = "${project.projectDir.absolutePath}/targets/www/gwt-temp"
+
 task deleteGWT(type: Exec) {
     executable "rm"
     args "-rf", "${project.projectDir.absolutePath}/.gwt-cache", "${project.projectDir.absolutePath}/targets/www"
@@ -81,15 +84,20 @@ task compileGWT(type: Copy, dependsOn: compileGWTToTempJDK8) {
 
 task untarGwt(type: Copy, dependsOn: prepareGWT) {
     from tarTree(resources.gzip("../core-plugin-openbis/resource/gwt.tar.gz"))
-    into "${project.projectDir.absolutePath}/targets/www/gwt-temp"
+    into "${gwtTempPath}"
 }
 
 task compileGWTToTempJDK11(type: Copy, dependsOn: untarGwt) {
     from "${project.projectDir.absolutePath}/source/java/ch/systemsx/cisd/openbis/public"
-    into "${project.projectDir.absolutePath}/targets/www/gwt-temp/ch.systemsx.cisd.openbis.OpenBIS"
+    into "${gwtTempPath}/ch.systemsx.cisd.openbis.OpenBIS"
 }
 
-task openBISDevelopementEnvironmentASPrepare(type: Copy, dependsOn: compileGWTToTempJDK11) {
-    from "targets/www/gwt-temp/ch.systemsx.cisd.openbis.OpenBIS"
+task copyV3Api(type: Copy, dependsOn: [compileGWTToTempJDK11, ':api-openbis-javascript:bundleOpenbisStaticResources']) {
+    from("${project(':api-openbis-javascript').projectDir}/src/v3")
+    into "${gwtTempPath}/ch.systemsx.cisd.openbis.OpenBIS/resources/api/v3"
+}
+
+task openBISDevelopmentEnvironmentASPrepare(type: Copy, dependsOn: copyV3Api) {
+    from "${gwtTempPath}/ch.systemsx.cisd.openbis.OpenBIS"
     into "targets/www/openbis-test"
 }
diff --git a/server-application-server/settings.gradle b/server-application-server/settings.gradle
index b7da688c98309b6d2f7ae4b0edd0097bff5a7edc..f137ccdee51430a83be4aa05fe11ef9b79d51d82 100644
--- a/server-application-server/settings.gradle
+++ b/server-application-server/settings.gradle
@@ -1 +1,2 @@
-includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration'
+includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication',
+        'lib-dbmigration', 'api-openbis-javascript'
diff --git a/server-original-data-store/build.gradle b/server-original-data-store/build.gradle
index 8a41bcea224a3800bb80db69cc3a2f5193dc25f0..29e9b2cf6b4e8b3edb70bc9a39bc3f95268695c1 100644
--- a/server-original-data-store/build.gradle
+++ b/server-original-data-store/build.gradle
@@ -1,6 +1,7 @@
 evaluationDependsOn(':lib-commonbase')
 evaluationDependsOn(':lib-common')
 evaluationDependsOn(':api-openbis-java')
+evaluationDependsOn(':api-openbis-javascript')
 evaluationDependsOn(':lib-openbis-common')
 evaluationDependsOn(':lib-authentication')
 evaluationDependsOn(':lib-dbmigration')
@@ -42,18 +43,18 @@ dependencies {
     runtimeOnly 'bioformats:bioformats:6.5.1'
 
     // eln-lims Jython APIs dependencies
-    datastoreExecRuntime files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docx4j-3.3.3.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/ascii-table-1.1.0.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docxbuilder.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/jsoup-1.11.3.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/serializer-2.7.2.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/slf4j-api-1.7.21.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/xalan-2.7.2.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar"),
-            files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar"),
+    datastoreExecRuntime files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docx4j-3.3.3.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/ascii-table-1.1.0.jar"),
+            files("../ui-eln-lims/src/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docxbuilder.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/jsoup-1.11.3.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/serializer-2.7.2.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/slf4j-api-1.7.21.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/xalan-2.7.2.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar"),
+            files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar"),
             files("../../../openbis-hvl.ethz.ch/deployed/core-plugins/hvl-dropbox/1/dss/dropboxes/hvl-dropbox/lib/jmatio-1.5.jar")
 
     testImplementation project(path: ':lib-commonbase', configuration: 'tests'),
@@ -118,7 +119,7 @@ jar {
     }
 }
 
-task openBISDevelopementEnvironmentDSSStart(type: JavaExec) {
+task openBISDevelopmentEnvironmentDSSStart(type: JavaExec) {
     main = 'ch.systemsx.cisd.openbis.dss.generic.DataStoreServer'
     classpath = sourceSets.datastoreExec.runtimeClasspath
     jvmArgs(['-ea', '-Dpython.path=../libraries/jython/jython-lib',
diff --git a/server-original-data-store/settings.gradle b/server-original-data-store/settings.gradle
index 9f7f64fb01faf34522f022bd6519fecc659a94b5..9cd9754f77ab5d690f47563a6b910b3482db258e 100644
--- a/server-original-data-store/settings.gradle
+++ b/server-original-data-store/settings.gradle
@@ -1 +1,2 @@
-includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server'
+includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication',
+        'lib-dbmigration', 'server-application-server', 'api-openbis-javascript'
diff --git a/server-screening/build.gradle b/server-screening/build.gradle
index 69a4193a33184b541c31775e0f6eaff204232708..fd7c7eb7fa0fa1dace4a7b41620777f01195a7c9 100644
--- a/server-screening/build.gradle
+++ b/server-screening/build.gradle
@@ -1,6 +1,7 @@
 evaluationDependsOn(':lib-commonbase')
 evaluationDependsOn(':lib-common')
 evaluationDependsOn(':api-openbis-java')
+evaluationDependsOn(':api-openbis-javascript')
 evaluationDependsOn(':lib-openbis-common')
 evaluationDependsOn(':lib-authentication')
 evaluationDependsOn(':lib-dbmigration')
diff --git a/server-screening/settings.gradle b/server-screening/settings.gradle
index 4c14cb1fe577a0f288e9da37a7c598914548df6f..a4f178f6496329cb475cacbd20b38c64072fb82f 100644
--- a/server-screening/settings.gradle
+++ b/server-screening/settings.gradle
@@ -1 +1,2 @@
-includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server', 'server-original-data-store'
+includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication',
+        'lib-dbmigration', 'server-application-server', 'server-original-data-store', 'api-openbis-javascript'
diff --git a/test-api-openbis-javascript/build.gradle b/test-api-openbis-javascript/build.gradle
index 789f93acdf9b424ba4b0f287a73b359af4b45f37..bc005df508020da47cc0e5fc5008de0429a5d132 100644
--- a/test-api-openbis-javascript/build.gradle
+++ b/test-api-openbis-javascript/build.gradle
@@ -1,6 +1,7 @@
 evaluationDependsOn(':lib-commonbase')
 evaluationDependsOn(':lib-common')
 evaluationDependsOn(':api-openbis-java')
+evaluationDependsOn(':api-openbis-javascript')
 evaluationDependsOn(':lib-openbis-common')
 evaluationDependsOn(':lib-authentication')
 evaluationDependsOn(':lib-dbmigration')
diff --git a/test-api-openbis-javascript/settings.gradle b/test-api-openbis-javascript/settings.gradle
index 10fead2276a036b6da3457fcb05aea0ca36461b1..09200920db5ef12840c394fe246d98d75df73732 100644
--- a/test-api-openbis-javascript/settings.gradle
+++ b/test-api-openbis-javascript/settings.gradle
@@ -1,3 +1,3 @@
-includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server',
-        'server-original-data-store', 'server-screening', 'core-plugin-openbis',
-        'test-ui-core'
+includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication',
+        'lib-dbmigration', 'server-application-server', 'server-original-data-store', 'server-screening',
+        'core-plugin-openbis', 'test-ui-core', 'api-openbis-javascript'
diff --git a/test-ui-core/settings.gradle b/test-ui-core/settings.gradle
index 97351a8a9e028c67b2ff0b8bf68cc738860cbdb5..e6e70fc93cf8fcfeeb3d95e29906b09c8250afeb 100644
--- a/test-ui-core/settings.gradle
+++ b/test-ui-core/settings.gradle
@@ -1,2 +1,3 @@
-includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server',
+includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication',
+        'lib-dbmigration', 'server-application-server', 'api-openbis-javascript',
         'server-original-data-store', 'server-screening', 'core-plugin-openbis'
diff --git a/ui-admin/srcV3 b/ui-admin/srcV3
index a9bdb1c90c58456811c8c7920e1879e4761196b8..be1152886cbc68a127b2417a2f3dfda4a9f06804 120000
--- a/ui-admin/srcV3
+++ b/ui-admin/srcV3
@@ -1 +1 @@
-../server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3
\ No newline at end of file
+../api-openbis-javascript/src/v3
\ No newline at end of file
diff --git a/ui-eln-lims/.gitignore b/ui-eln-lims/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..378eac25d311703f3f2cd456d8036da525cd0366
--- /dev/null
+++ b/ui-eln-lims/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/ui-eln-lims/build.gradle b/ui-eln-lims/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..0ff8270be88ec96e4b3c8c8402f950800d8be237
--- /dev/null
+++ b/ui-eln-lims/build.gradle
@@ -0,0 +1,8 @@
+task cleanBuild(type: Delete) {
+    delete 'build'
+}
+
+task copyCorePlugins(type: Copy) {
+    from file('src/core-plugins')
+    into file('build/core-plugins')
+}
diff --git a/ui-eln-lims/gradle/wrapper/gradle-wrapper.jar b/ui-eln-lims/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..5c2d1cf016b3885f6930543d57b744ea8c220a1a
Binary files /dev/null and b/ui-eln-lims/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/ui-eln-lims/gradle/wrapper/gradle-wrapper.properties b/ui-eln-lims/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..7745c4ec463c7bb1c4ff6a5e58db239890345152
--- /dev/null
+++ b/ui-eln-lims/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+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/ui-eln-lims/gradlew b/ui-eln-lims/gradlew
new file mode 100755
index 0000000000000000000000000000000000000000..83f2acfdc319a24e8766cca78f32474ad7a22dd6
--- /dev/null
+++ b/ui-eln-lims/gradlew
@@ -0,0 +1,188 @@
+#!/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/ui-eln-lims/gradlew.bat b/ui-eln-lims/gradlew.bat
new file mode 100644
index 0000000000000000000000000000000000000000..9618d8d9607cd91a0efb866bcac4810064ba6fac
--- /dev/null
+++ b/ui-eln-lims/gradlew.bat
@@ -0,0 +1,100 @@
+@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/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/initialize-master-data.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/initialize-master-data.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/common-data-model.xls b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/common-data-model.xls
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/common-data-model.xls
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/common-data-model.xls
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/script.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/script.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/script.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js
similarity index 96%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js
index fe752f529576ce012934a20024edec876a8d57aa..0dcdf1a7edbe52ee6f30d9ded8542178fc285985 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js
@@ -1,388 +1,388 @@
-/* =========================================================
- * bootstrap-slider.js v2.0.0
- * http://www.eyecon.ro/bootstrap-slider
- * =========================================================
- * Copyright 2012 Stefan Petre
- *
- * 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( $ ) {
-
-	var Slider = function(element, options) {
-		this.element = $(element);
-		this.picker = $('<div class="slider">'+
-							'<div class="slider-track">'+
-								'<div class="slider-selection"></div>'+
-								'<div class="slider-handle"></div>'+
-								'<div class="slider-handle"></div>'+
-							'</div>'+
-							'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'+
-						'</div>')
-							.insertBefore(this.element)
-							.append(this.element);
-		this.id = this.element.data('slider-id')||options.id;
-		if (this.id) {
-			this.picker[0].id = this.id;
-		}
-
-		if (typeof Modernizr !== 'undefined' && Modernizr.touch) {
-			this.touchCapable = true;
-		}
-
-		var tooltip = this.element.data('slider-tooltip')||options.tooltip;
-
-		this.tooltip = this.picker.find('.tooltip');
-		this.tooltipInner = this.tooltip.find('div.tooltip-inner');
-
-		this.orientation = this.element.data('slider-orientation')||options.orientation;
-		switch(this.orientation) {
-			case 'vertical':
-				this.picker.addClass('slider-vertical');
-				this.stylePos = 'top';
-				this.mousePos = 'pageY';
-				this.sizePos = 'offsetHeight';
-				this.tooltip.addClass('right')[0].style.left = '100%';
-				break;
-			default:
-				this.picker
-					.addClass('slider-horizontal')
-					.css('width', this.element.outerWidth());
-				this.orientation = 'horizontal';
-				this.stylePos = 'left';
-				this.mousePos = 'pageX';
-				this.sizePos = 'offsetWidth';
-				this.tooltip.addClass('top')[0].style.top = -this.tooltip.outerHeight() - 14 + 'px';
-				break;
-		}
-
-		this.min = this.element.data('slider-min')||options.min;
-		this.max = this.element.data('slider-max')||options.max;
-		this.step = this.element.data('slider-step')||options.step;
-		this.value = this.element.data('slider-value')||options.value;
-		if (this.value[1]) {
-			this.range = true;
-		}
-
-		this.selection = this.element.data('slider-selection')||options.selection;
-		this.selectionEl = this.picker.find('.slider-selection');
-		if (this.selection === 'none') {
-			this.selectionEl.addClass('hide');
-		}
-		this.selectionElStyle = this.selectionEl[0].style;
-
-
-		this.handle1 = this.picker.find('.slider-handle:first');
-		this.handle1Stype = this.handle1[0].style;
-		this.handle2 = this.picker.find('.slider-handle:last');
-		this.handle2Stype = this.handle2[0].style;
-
-		var handle = this.element.data('slider-handle')||options.handle;
-		switch(handle) {
-			case 'round':
-				this.handle1.addClass('round');
-				this.handle2.addClass('round');
-				break
-			case 'triangle':
-				this.handle1.addClass('triangle');
-				this.handle2.addClass('triangle');
-				break
-		}
-
-		if (this.range) {
-			this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
-			this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
-		} else {
-			this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
-			this.handle2.addClass('hide');
-			if (this.selection == 'after') {
-				this.value[1] = this.max;
-			} else {
-				this.value[1] = this.min;
-			}
-		}
-		this.diff = this.max - this.min;
-		this.percentage = [
-			(this.value[0]-this.min)*100/this.diff,
-			(this.value[1]-this.min)*100/this.diff,
-			this.step*100/this.diff
-		];
-
-		this.offset = this.picker.offset();
-		this.size = this.picker[0][this.sizePos];
-
-		this.formater = options.formater;
-
-		this.layout();
-
-		if (this.touchCapable) {
-			// Touch: Bind touch events:
-			this.picker.on({
-				touchstart: $.proxy(this.mousedown, this)
-			});
-		} else {
-			this.picker.on({
-				mousedown: $.proxy(this.mousedown, this)
-			});
-		}
-
-		if (tooltip === 'show') {
-			this.picker.on({
-				mouseenter: $.proxy(this.showTooltip, this),
-				mouseleave: $.proxy(this.hideTooltip, this)
-			});
-		} else {
-			this.tooltip.addClass('hide');
-		}
-	};
-
-	Slider.prototype = {
-		constructor: Slider,
-
-		over: false,
-		inDrag: false,
-		
-		showTooltip: function(){
-			this.tooltip.addClass('in');
-			//var left = Math.round(this.percent*this.width);
-			//this.tooltip.css('left', left - this.tooltip.outerWidth()/2);
-			this.over = true;
-		},
-		
-		hideTooltip: function(){
-			if (this.inDrag === false) {
-				this.tooltip.removeClass('in');
-			}
-			this.over = false;
-		},
-
-		layout: function(){
-			this.handle1Stype[this.stylePos] = this.percentage[0]+'%';
-			this.handle2Stype[this.stylePos] = this.percentage[1]+'%';
-			if (this.orientation == 'vertical') {
-				this.selectionElStyle.top = Math.min(this.percentage[0], this.percentage[1]) +'%';
-				this.selectionElStyle.height = Math.abs(this.percentage[0] - this.percentage[1]) +'%';
-			} else {
-				this.selectionElStyle.left = Math.min(this.percentage[0], this.percentage[1]) +'%';
-				this.selectionElStyle.width = Math.abs(this.percentage[0] - this.percentage[1]) +'%';
-			}
-			if (this.range) {
-				this.tooltipInner.text(
-					this.formater(this.value[0]) + 
-					' : ' + 
-					this.formater(this.value[1])
-				);
-				this.tooltip[0].style[this.stylePos] = this.size * (this.percentage[0] + (this.percentage[1] - this.percentage[0])/2)/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
-			} else {
-				this.tooltipInner.text(
-					this.formater(this.value[0])
-				);
-				this.tooltip[0].style[this.stylePos] = this.size * this.percentage[0]/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
-			}
-		},
-
-		mousedown: function(ev) {
-
-			// Touch: Get the original event:
-			if (this.touchCapable && ev.type === 'touchstart') {
-				ev = ev.originalEvent;
-			}
-
-			this.offset = this.picker.offset();
-			this.size = this.picker[0][this.sizePos];
-
-			var percentage = this.getPercentage(ev);
-
-			if (this.range) {
-				var diff1 = Math.abs(this.percentage[0] - percentage);
-				var diff2 = Math.abs(this.percentage[1] - percentage);
-				this.dragged = (diff1 < diff2) ? 0 : 1;
-			} else {
-				this.dragged = 0;
-			}
-
-			this.percentage[this.dragged] = percentage;
-			this.layout();
-
-			if (this.touchCapable) {
-				// Touch: Bind touch events:
-				$(document).on({
-					touchmove: $.proxy(this.mousemove, this),
-					touchend: $.proxy(this.mouseup, this)
-				});
-			} else {
-				$(document).on({
-					mousemove: $.proxy(this.mousemove, this),
-					mouseup: $.proxy(this.mouseup, this)
-				});
-			}
-
-			this.inDrag = true;
-			var val = this.calculateValue();
-			this.element.trigger({
-					type: 'slideStart',
-					value: val
-				}).trigger({
-					type: 'slide',
-					value: val
-				});
-			return false;
-		},
-
-		mousemove: function(ev) {
-			
-			// Touch: Get the original event:
-			if (this.touchCapable && ev.type === 'touchmove') {
-				ev = ev.originalEvent;
-			}
-
-			var percentage = this.getPercentage(ev);
-			if (this.range) {
-				if (this.dragged === 0 && this.percentage[1] < percentage) {
-					this.percentage[0] = this.percentage[1];
-					this.dragged = 1;
-				} else if (this.dragged === 1 && this.percentage[0] > percentage) {
-					this.percentage[1] = this.percentage[0];
-					this.dragged = 0;
-				}
-			}
-			this.percentage[this.dragged] = percentage;
-			this.layout();
-			var val = this.calculateValue();
-			this.element
-				.trigger({
-					type: 'slide',
-					value: val
-				})
-				.data('value', val)
-				.prop('value', val);
-			return false;
-		},
-
-		mouseup: function(ev) {
-			if (this.touchCapable) {
-				// Touch: Bind touch events:
-				$(document).off({
-					touchmove: this.mousemove,
-					touchend: this.mouseup
-				});
-			} else {
-				$(document).off({
-					mousemove: this.mousemove,
-					mouseup: this.mouseup
-				});
-			}
-
-			this.inDrag = false;
-			if (this.over == false) {
-				this.hideTooltip();
-			}
-			this.element;
-			var val = this.calculateValue();
-			this.element
-				.trigger({
-					type: 'slideStop',
-					value: val
-				})
-				.data('value', val)
-				.prop('value', val);
-			return false;
-		},
-
-		calculateValue: function() {
-			var val;
-			if (this.range) {
-				val = [
-					(this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step),
-					(this.min + Math.round((this.diff * this.percentage[1]/100)/this.step)*this.step)
-				];
-				this.value = val;
-			} else {
-				val = (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step);
-				this.value = [val, this.value[1]];
-			}
-			return val;
-		},
-
-		getPercentage: function(ev) {
-			if (this.touchCapable) {
-				ev = ev.touches[0];
-			}
-			var percentage = (ev[this.mousePos] - this.offset[this.stylePos])*100/this.size;
-			percentage = Math.round(percentage/this.percentage[2])*this.percentage[2];
-			return Math.max(0, Math.min(100, percentage));
-		},
-
-		getValue: function() {
-			if (this.range) {
-				return this.value;
-			}
-			return this.value[0];
-		},
-
-		setValue: function(val) {
-			this.value = val;
-
-			if (this.range) {
-				this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
-				this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
-			} else {
-				this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
-				this.handle2.addClass('hide');
-				if (this.selection == 'after') {
-					this.value[1] = this.max;
-				} else {
-					this.value[1] = this.min;
-				}
-			}
-			this.diff = this.max - this.min;
-			this.percentage = [
-				(this.value[0]-this.min)*100/this.diff,
-				(this.value[1]-this.min)*100/this.diff,
-				this.step*100/this.diff
-			];
-			this.layout();
-		}
-	};
-
-	$.fn.slider = function ( option, val ) {
-		return this.each(function () {
-			var $this = $(this),
-				data = $this.data('slider'),
-				options = typeof option === 'object' && option;
-			if (!data)  {
-				$this.data('slider', (data = new Slider(this, $.extend({}, $.fn.slider.defaults,options))));
-			}
-			if (typeof option == 'string') {
-				data[option](val);
-			}
-		})
-	};
-
-	$.fn.slider.defaults = {
-		min: 0,
-		max: 10,
-		step: 1,
-		orientation: 'horizontal',
-		value: 5,
-		selection: 'before',
-		tooltip: 'show',
-		handle: 'round',
-		formater: function(value) {
-			return value;
-		}
-	};
-
-	$.fn.slider.Constructor = Slider;
-
+/* =========================================================
+ * bootstrap-slider.js v2.0.0
+ * http://www.eyecon.ro/bootstrap-slider
+ * =========================================================
+ * Copyright 2012 Stefan Petre
+ *
+ * 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( $ ) {
+
+	var Slider = function(element, options) {
+		this.element = $(element);
+		this.picker = $('<div class="slider">'+
+							'<div class="slider-track">'+
+								'<div class="slider-selection"></div>'+
+								'<div class="slider-handle"></div>'+
+								'<div class="slider-handle"></div>'+
+							'</div>'+
+							'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'+
+						'</div>')
+							.insertBefore(this.element)
+							.append(this.element);
+		this.id = this.element.data('slider-id')||options.id;
+		if (this.id) {
+			this.picker[0].id = this.id;
+		}
+
+		if (typeof Modernizr !== 'undefined' && Modernizr.touch) {
+			this.touchCapable = true;
+		}
+
+		var tooltip = this.element.data('slider-tooltip')||options.tooltip;
+
+		this.tooltip = this.picker.find('.tooltip');
+		this.tooltipInner = this.tooltip.find('div.tooltip-inner');
+
+		this.orientation = this.element.data('slider-orientation')||options.orientation;
+		switch(this.orientation) {
+			case 'vertical':
+				this.picker.addClass('slider-vertical');
+				this.stylePos = 'top';
+				this.mousePos = 'pageY';
+				this.sizePos = 'offsetHeight';
+				this.tooltip.addClass('right')[0].style.left = '100%';
+				break;
+			default:
+				this.picker
+					.addClass('slider-horizontal')
+					.css('width', this.element.outerWidth());
+				this.orientation = 'horizontal';
+				this.stylePos = 'left';
+				this.mousePos = 'pageX';
+				this.sizePos = 'offsetWidth';
+				this.tooltip.addClass('top')[0].style.top = -this.tooltip.outerHeight() - 14 + 'px';
+				break;
+		}
+
+		this.min = this.element.data('slider-min')||options.min;
+		this.max = this.element.data('slider-max')||options.max;
+		this.step = this.element.data('slider-step')||options.step;
+		this.value = this.element.data('slider-value')||options.value;
+		if (this.value[1]) {
+			this.range = true;
+		}
+
+		this.selection = this.element.data('slider-selection')||options.selection;
+		this.selectionEl = this.picker.find('.slider-selection');
+		if (this.selection === 'none') {
+			this.selectionEl.addClass('hide');
+		}
+		this.selectionElStyle = this.selectionEl[0].style;
+
+
+		this.handle1 = this.picker.find('.slider-handle:first');
+		this.handle1Stype = this.handle1[0].style;
+		this.handle2 = this.picker.find('.slider-handle:last');
+		this.handle2Stype = this.handle2[0].style;
+
+		var handle = this.element.data('slider-handle')||options.handle;
+		switch(handle) {
+			case 'round':
+				this.handle1.addClass('round');
+				this.handle2.addClass('round');
+				break
+			case 'triangle':
+				this.handle1.addClass('triangle');
+				this.handle2.addClass('triangle');
+				break
+		}
+
+		if (this.range) {
+			this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
+			this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
+		} else {
+			this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
+			this.handle2.addClass('hide');
+			if (this.selection == 'after') {
+				this.value[1] = this.max;
+			} else {
+				this.value[1] = this.min;
+			}
+		}
+		this.diff = this.max - this.min;
+		this.percentage = [
+			(this.value[0]-this.min)*100/this.diff,
+			(this.value[1]-this.min)*100/this.diff,
+			this.step*100/this.diff
+		];
+
+		this.offset = this.picker.offset();
+		this.size = this.picker[0][this.sizePos];
+
+		this.formater = options.formater;
+
+		this.layout();
+
+		if (this.touchCapable) {
+			// Touch: Bind touch events:
+			this.picker.on({
+				touchstart: $.proxy(this.mousedown, this)
+			});
+		} else {
+			this.picker.on({
+				mousedown: $.proxy(this.mousedown, this)
+			});
+		}
+
+		if (tooltip === 'show') {
+			this.picker.on({
+				mouseenter: $.proxy(this.showTooltip, this),
+				mouseleave: $.proxy(this.hideTooltip, this)
+			});
+		} else {
+			this.tooltip.addClass('hide');
+		}
+	};
+
+	Slider.prototype = {
+		constructor: Slider,
+
+		over: false,
+		inDrag: false,
+		
+		showTooltip: function(){
+			this.tooltip.addClass('in');
+			//var left = Math.round(this.percent*this.width);
+			//this.tooltip.css('left', left - this.tooltip.outerWidth()/2);
+			this.over = true;
+		},
+		
+		hideTooltip: function(){
+			if (this.inDrag === false) {
+				this.tooltip.removeClass('in');
+			}
+			this.over = false;
+		},
+
+		layout: function(){
+			this.handle1Stype[this.stylePos] = this.percentage[0]+'%';
+			this.handle2Stype[this.stylePos] = this.percentage[1]+'%';
+			if (this.orientation == 'vertical') {
+				this.selectionElStyle.top = Math.min(this.percentage[0], this.percentage[1]) +'%';
+				this.selectionElStyle.height = Math.abs(this.percentage[0] - this.percentage[1]) +'%';
+			} else {
+				this.selectionElStyle.left = Math.min(this.percentage[0], this.percentage[1]) +'%';
+				this.selectionElStyle.width = Math.abs(this.percentage[0] - this.percentage[1]) +'%';
+			}
+			if (this.range) {
+				this.tooltipInner.text(
+					this.formater(this.value[0]) + 
+					' : ' + 
+					this.formater(this.value[1])
+				);
+				this.tooltip[0].style[this.stylePos] = this.size * (this.percentage[0] + (this.percentage[1] - this.percentage[0])/2)/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
+			} else {
+				this.tooltipInner.text(
+					this.formater(this.value[0])
+				);
+				this.tooltip[0].style[this.stylePos] = this.size * this.percentage[0]/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
+			}
+		},
+
+		mousedown: function(ev) {
+
+			// Touch: Get the original event:
+			if (this.touchCapable && ev.type === 'touchstart') {
+				ev = ev.originalEvent;
+			}
+
+			this.offset = this.picker.offset();
+			this.size = this.picker[0][this.sizePos];
+
+			var percentage = this.getPercentage(ev);
+
+			if (this.range) {
+				var diff1 = Math.abs(this.percentage[0] - percentage);
+				var diff2 = Math.abs(this.percentage[1] - percentage);
+				this.dragged = (diff1 < diff2) ? 0 : 1;
+			} else {
+				this.dragged = 0;
+			}
+
+			this.percentage[this.dragged] = percentage;
+			this.layout();
+
+			if (this.touchCapable) {
+				// Touch: Bind touch events:
+				$(document).on({
+					touchmove: $.proxy(this.mousemove, this),
+					touchend: $.proxy(this.mouseup, this)
+				});
+			} else {
+				$(document).on({
+					mousemove: $.proxy(this.mousemove, this),
+					mouseup: $.proxy(this.mouseup, this)
+				});
+			}
+
+			this.inDrag = true;
+			var val = this.calculateValue();
+			this.element.trigger({
+					type: 'slideStart',
+					value: val
+				}).trigger({
+					type: 'slide',
+					value: val
+				});
+			return false;
+		},
+
+		mousemove: function(ev) {
+			
+			// Touch: Get the original event:
+			if (this.touchCapable && ev.type === 'touchmove') {
+				ev = ev.originalEvent;
+			}
+
+			var percentage = this.getPercentage(ev);
+			if (this.range) {
+				if (this.dragged === 0 && this.percentage[1] < percentage) {
+					this.percentage[0] = this.percentage[1];
+					this.dragged = 1;
+				} else if (this.dragged === 1 && this.percentage[0] > percentage) {
+					this.percentage[1] = this.percentage[0];
+					this.dragged = 0;
+				}
+			}
+			this.percentage[this.dragged] = percentage;
+			this.layout();
+			var val = this.calculateValue();
+			this.element
+				.trigger({
+					type: 'slide',
+					value: val
+				})
+				.data('value', val)
+				.prop('value', val);
+			return false;
+		},
+
+		mouseup: function(ev) {
+			if (this.touchCapable) {
+				// Touch: Bind touch events:
+				$(document).off({
+					touchmove: this.mousemove,
+					touchend: this.mouseup
+				});
+			} else {
+				$(document).off({
+					mousemove: this.mousemove,
+					mouseup: this.mouseup
+				});
+			}
+
+			this.inDrag = false;
+			if (this.over == false) {
+				this.hideTooltip();
+			}
+			this.element;
+			var val = this.calculateValue();
+			this.element
+				.trigger({
+					type: 'slideStop',
+					value: val
+				})
+				.data('value', val)
+				.prop('value', val);
+			return false;
+		},
+
+		calculateValue: function() {
+			var val;
+			if (this.range) {
+				val = [
+					(this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step),
+					(this.min + Math.round((this.diff * this.percentage[1]/100)/this.step)*this.step)
+				];
+				this.value = val;
+			} else {
+				val = (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step);
+				this.value = [val, this.value[1]];
+			}
+			return val;
+		},
+
+		getPercentage: function(ev) {
+			if (this.touchCapable) {
+				ev = ev.touches[0];
+			}
+			var percentage = (ev[this.mousePos] - this.offset[this.stylePos])*100/this.size;
+			percentage = Math.round(percentage/this.percentage[2])*this.percentage[2];
+			return Math.max(0, Math.min(100, percentage));
+		},
+
+		getValue: function() {
+			if (this.range) {
+				return this.value;
+			}
+			return this.value[0];
+		},
+
+		setValue: function(val) {
+			this.value = val;
+
+			if (this.range) {
+				this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
+				this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
+			} else {
+				this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
+				this.handle2.addClass('hide');
+				if (this.selection == 'after') {
+					this.value[1] = this.max;
+				} else {
+					this.value[1] = this.min;
+				}
+			}
+			this.diff = this.max - this.min;
+			this.percentage = [
+				(this.value[0]-this.min)*100/this.diff,
+				(this.value[1]-this.min)*100/this.diff,
+				this.step*100/this.diff
+			];
+			this.layout();
+		}
+	};
+
+	$.fn.slider = function ( option, val ) {
+		return this.each(function () {
+			var $this = $(this),
+				data = $this.data('slider'),
+				options = typeof option === 'object' && option;
+			if (!data)  {
+				$this.data('slider', (data = new Slider(this, $.extend({}, $.fn.slider.defaults,options))));
+			}
+			if (typeof option == 'string') {
+				data[option](val);
+			}
+		})
+	};
+
+	$.fn.slider.defaults = {
+		min: 0,
+		max: 10,
+		step: 1,
+		orientation: 'horizontal',
+		value: 5,
+		selection: 'before',
+		tooltip: 'show',
+		handle: 'round',
+		formater: function(value) {
+			return value;
+		}
+	};
+
+	$.fn.slider.Constructor = Slider;
+
 }( window.jQuery );
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA
similarity index 97%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA
index f1a20ac1a8ade9c6aa7dea55d39661b7e4e7624c..1456c1809da62fb01a5ef2403d6e6f271cfedb13 100755
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA
@@ -1,97 +1,97 @@
-Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
-with Reserved Font Name <Reserved Font Name>.
-Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
-with Reserved Font Name <additional Reserved Font Name>.
-Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded, 
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
+Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
+with Reserved Font Name <Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
+with Reserved Font Name <additional Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2 b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js
similarity index 97%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js
index a39a4ecfdd3245aabe64a815d3d322869fb68ca4..1ab25fc059f845deb73bb4bbcf43d40b2b1c142b 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js
@@ -1,12921 +1,12921 @@
-/**
- * (c) jExcel v3.6.1
- * 
- * Author: Paul Hodel <paul.hodel@gmail.com>
- * Website: https://bossanova.uk/jexcel/
- * Description: Create amazing web based spreadsheets.
- * 
- * This software is distribute under MIT License
- * 
- * ROADMAP:
- * Frozen columns
- * Meta information
- */
-
-'use strict';
-
-if (! jSuites && typeof(require) === 'function') {
-    var jSuites = require('jsuites');
-    require('jsuites/dist/jsuites.css');
-}
-
-var jexcel = (function(el, options) {
-    // Create jexcel object
-    var obj = {};
-    obj.options = {};
-
-    // Loading default configuration
-    var defaults = {
-        // External data
-        url:null,
-        // Data
-        data:null,
-        // Copy behavior
-        copyCompatibility:false,
-        // Rows and columns definitions
-        rows:[],
-        columns:[],
-        // Deprected legacy options
-        colHeaders:[],
-        colWidths:[],
-        colAlignments:[],
-        nestedHeaders:null,
-        // Column width that is used by default
-        defaultColWidth:50,
-        defaultColAlign:'center',
-        // Spare rows and columns
-        minSpareRows:0,
-        minSpareCols:0,
-        // Minimal table dimensions
-        minDimensions:[0,0],
-        // Allow Export
-        allowExport:true,
-        // Allow column sorting
-        columnSorting:true,
-        // Allow column dragging
-        columnDrag:false,
-        // Allow column resizing
-        columnResize:true,
-        // Allow row resizing
-        rowResize:false,
-        // Allow row dragging
-        rowDrag:true,
-        // Allow table edition
-        editable:true,
-        // Allow new rows
-        allowInsertRow:true,
-        // Allow new rows
-        allowManualInsertRow:true,
-        // Allow new columns
-        allowInsertColumn:true,
-        // Allow new rows
-        allowManualInsertColumn:true,
-        // Allow row delete
-        allowDeleteRow:true,
-        // Allow deleting of all rows
-        allowDeletingAllRows:false,
-        // Allow column delete
-        allowDeleteColumn:true,
-        // Allow rename column
-        allowRenameColumn:true,
-        // Allow comments
-        allowComments:false,
-        // Global wrap
-        wordWrap:false,
-        // Image options
-        imageOptions: null,
-        // CSV source
-        csv:null,
-        // Filename
-        csvFileName:'jexcel',
-        // Consider first line as header
-        csvHeaders:true,
-        // Delimiters
-        csvDelimiter:',',
-        // Disable corner selection
-        selectionCopy:true,
-        // Merged cells
-        mergeCells:{},
-        // Create toolbar
-        toolbar:null,
-        // Allow search
-        search:false,
-        // Create pagination
-        pagination:false,
-        paginationOptions:null,
-        // Full screen
-        fullscreen:false,
-        // Lazy loading
-        lazyLoading:false,
-        loadingSpin:false,
-        // Table overflow
-        tableOverflow:false,
-        tableHeight:'300px',
-        tableWidth:null,
-        // Meta
-        meta: null,
-        // Style
-        style:null,
-        // Execute formulas
-        parseFormulas:true,
-        autoIncrement:true,
-        // Event handles
-        onundo:null,
-        onredo:null,
-        onload:null,
-        onchange:null,
-        onbeforechange:null,
-        onafterchanges:null,
-        onbeforeinsertrow: null,
-        oninsertrow:null,
-        onbeforeinsertcolumn: null,
-        oninsertcolumn:null,
-        onbeforedeleterow:null,
-        ondeleterow:null,
-        onbeforedeletecolumn:null,
-        ondeletecolumn:null,
-        onmoverow:null,
-        onmovecolumn:null,
-        onresizerow:null,
-        onresizecolumn:null,
-        onsort:null,
-        onselection:null,
-        onpaste:null,
-        onbeforepaste:null,
-        onmerge:null,
-        onfocus:null,
-        onblur:null,
-        onchangeheader:null,
-        oneditionstart:null,
-        oneditionend:null,
-        onchangestyle:null,
-        onchangemeta:null,
-        // Customize any cell behavior
-        updateTable:null,
-        // Texts
-        text:{
-            noRecordsFound: 'No records found',
-            showingPage: 'Showing page {0} of {1} entries',
-            show: 'Show ',
-            search: 'Search',
-            entries: ' entries',
-            columnName: 'Column name',
-            insertANewColumnBefore: 'Insert a new column before',
-            insertANewColumnAfter: 'Insert a new column after',
-            deleteSelectedColumns: 'Delete selected columns',
-            renameThisColumn: 'Rename this column',
-            orderAscending: 'Order ascending',
-            orderDescending: 'Order descending',
-            insertANewRowBefore: 'Insert a new row before',
-            insertANewRowAfter: 'Insert a new row after',
-            deleteSelectedRows: 'Delete selected rows',
-            editComments: 'Edit comments',
-            addComments: 'Add comments',
-            comments: 'Comments',
-            clearComments: 'Clear comments',
-            copy: 'Copy...',
-            paste: 'Paste...',
-            saveAs: 'Save as...',
-            about: 'About',
-            areYouSureToDeleteTheSelectedRows: 'Are you sure to delete the selected rows?',
-            areYouSureToDeleteTheSelectedColumns: 'Are you sure to delete the selected columns?',
-            thisActionWillDestroyAnyExistingMergedCellsAreYouSure: 'This action will destroy any existing merged cells. Are you sure?',
-            thisActionWillClearYourSearchResultsAreYouSure: 'This action will clear your search results. Are you sure?',
-            thereIsAConflictWithAnotherMergedCell: 'There is a conflict with another merged cell',
-            invalidMergeProperties: 'Invalid merged properties',
-            cellAlreadyMerged: 'Cell already merged',
-            noCellsSelected: 'No cells selected',
-        },
-        // About message
-        about:"jExcel CE Spreadsheet\nVersion 3.6.1\nAuthor: Paul Hodel <paul.hodel@gmail.com>\nWebsite: https://bossanova.uk/jexcel/v3",
-    };
-
-    // Loading initial configuration from user
-    for (var property in defaults) {
-        if (options && options.hasOwnProperty(property)) {
-            obj.options[property] = (property == 'text') ? Object.assign(defaults[property], options[property]) :  options[property];
-        } else {
-            obj.options[property] = defaults[property];
-        }
-    }
-
-    // Global elements
-    obj.el = el;
-    obj.corner = null;
-    obj.contextMenu = null;
-    obj.textarea = null;
-    obj.ads = null;
-    obj.content = null;
-    obj.table = null;
-    obj.thead = null;
-    obj.tbody = null;
-    obj.rows = [];
-    obj.results = null;
-    obj.searchInput = null;
-    obj.toolbar = null;
-    obj.pagination = null;
-    obj.pageNumber = null;
-    obj.headerContainer = null;
-    obj.colgroupContainer = null;
-
-    // Containers
-    obj.headers = [];
-    obj.records = [];
-    obj.history = [];
-    obj.formula = [];
-    obj.colgroup = [];
-    obj.selection = [];
-    obj.highlighted  = [];
-    obj.selectedCell = null;
-    obj.selectedContainer = null;
-    obj.style = [];
-    obj.data = null;
-
-    // Internal controllers
-    obj.cursor = null;
-    obj.historyIndex = -1;
-    obj.ignoreEvents = false;
-    obj.ignoreHistory = false;
-    obj.edition = null;
-    obj.hashString = null;
-    obj.resizing = null;
-    obj.dragging = null;
-
-    // Lazy loading
-    if (obj.options.lazyLoading == true && (obj.options.tableOverflow == false && obj.options.fullscreen == false)) {
-        console.error('JEXCEL: The lazyloading only works when tableOverflow = yes or fullscreen = yes');
-        obj.options.lazyLoading = false;
-    }
-    
-    /**
-     * Activate/Disable fullscreen 
-     * use programmatically : table.fullscreen(); or table.fullscreen(true); or table.fullscreen(false);
-     * @Param {boolean} activate
-     */
-    obj.fullscreen = function(activate) {
-        // If activate not defined, get reverse options.fullscreen
-        if (activate == null) {
-            activate = ! obj.options.fullscreen;
-        }
-
-        // If change
-        if (obj.options.fullscreen != activate) {
-            obj.options.fullscreen = activate;
-
-            // Test LazyLoading conflict
-            if (activate == true) {
-                el.classList.add('fullscreen');
-            } else {
-                el.classList.remove('fullscreen');
-            }
-        } 
-    }
-
-    /**
-     * Prepare the jexcel table
-     * 
-     * @Param config
-     */
-    obj.prepareTable = function() {
-        // Loading initial data from remote sources
-        var results = [];
-
-        // Number of columns
-        var size = obj.options.columns.length;
-
-        if (obj.options.data && typeof(obj.options.data[0]) !== 'undefined') {
-            // Data keys
-            var keys = Object.keys(obj.options.data[0]);
-
-            if (keys.length > size) {
-                size = keys.length;
-            }
-        }
-
-        // Minimal dimensions
-        if (obj.options.minDimensions[0] > size) {
-            size = obj.options.minDimensions[0];
-        }
-
-        // Requests
-        var multiple = [];
-
-        // Preparations
-        for (var i = 0; i < size; i++) {
-            // Deprected options. You should use only columns
-            if (! obj.options.colHeaders[i]) {
-                obj.options.colHeaders[i] = '';
-            }
-            if (! obj.options.colWidths[i]) {
-                obj.options.colWidths[i] = obj.options.defaultColWidth;
-            }
-            if (! obj.options.colAlignments[i]) {
-                obj.options.colAlignments[i] = obj.options.defaultColAlign;
-            }
-
-            // Default column description
-            if (! obj.options.columns[i]) {
-                obj.options.columns[i] = { type:'text' };
-            } else if (! obj.options.columns[i].type) {
-                obj.options.columns[i].type = 'text';
-            }
-            if (! obj.options.columns[i].name) {
-                obj.options.columns[i].name = keys && keys[i] ? keys[i] : i;
-            }
-            if (! obj.options.columns[i].source) {
-                obj.options.columns[i].source = [];
-            }
-            if (! obj.options.columns[i].options) {
-                obj.options.columns[i].options = [];
-            }
-            if (! obj.options.columns[i].editor) {
-                obj.options.columns[i].editor = null;
-            }
-            if (! obj.options.columns[i].allowEmpty) {
-                obj.options.columns[i].allowEmpty = false;
-            }
-            if (! obj.options.columns[i].title) {
-                obj.options.columns[i].title = obj.options.colHeaders[i] ? obj.options.colHeaders[i] : '';
-            }
-            if (! obj.options.columns[i].width) {
-                obj.options.columns[i].width = obj.options.colWidths[i] ? obj.options.colWidths[i] : '50';
-            }
-            if (! obj.options.columns[i].align) {
-                obj.options.columns[i].align = obj.options.colAlignments[i] ? obj.options.colAlignments[i] : 'center';
-            }
-
-            // Pre-load initial source for json autocomplete
-            if (obj.options.columns[i].type == 'autocomplete' || obj.options.columns[i].type == 'dropdown') {
-                // if remote content
-                if (obj.options.columns[i].url) {
-                    multiple.push(jSuites.ajax({
-                        url: obj.options.columns[i].url,
-                        index: i,
-                        method: 'GET',
-                        dataType: 'json',
-                        multiple: multiple,
-                        success: function(data) {
-                            var source = [];
-                            for (var i = 0; i < data.length; i++) {
-                                obj.options.columns[this.index].source.push(data[i]);
-                            }
-                        },
-                        complete: function() {
-                            obj.createTable();
-                        }
-                    }));
-                }
-            } else if (obj.options.columns[i].type == 'calendar') {
-                // Default format for date columns
-                if (! obj.options.columns[i].options.format) {
-                    obj.options.columns[i].options.format = 'DD/MM/YYYY';
-                }
-            }
-        }
-
-        // On complete
-        if (! multiple.length) {
-            obj.createTable();
-        }
-    }
-
-    obj.createTable = function() {
-        // Elements
-        obj.table = document.createElement('table');
-        obj.thead = document.createElement('thead');
-        obj.tbody = document.createElement('tbody');
-
-        // Create headers controllers
-        obj.headers = [];
-        obj.colgroup = [];
-
-        // Create table container
-        obj.content = document.createElement('div');
-        obj.content.classList.add('jexcel_content');
-
-        // Create toolbar object
-        obj.toolbar = document.createElement('div');
-        obj.toolbar.classList.add('jexcel_toolbar');
-
-        // Search
-        var searchContainer = document.createElement('div');
-        var searchText = document.createTextNode((obj.options.text.search) + ': ');
-        obj.searchInput = document.createElement('input');
-        obj.searchInput.classList.add('jexcel_search');
-        searchContainer.appendChild(searchText);
-        searchContainer.appendChild(obj.searchInput);
-        obj.searchInput.onfocus = function() {
-            obj.resetSelection();
-        }
-
-        // Pagination select option
-        var paginationUpdateContainer = document.createElement('div');
-
-        if (obj.options.pagination > 0 && obj.options.paginationOptions && obj.options.paginationOptions.length > 0) {
-            obj.paginationDropdown = document.createElement('select');
-            obj.paginationDropdown.classList.add('jexcel_pagination_dropdown');
-            obj.paginationDropdown.onchange = function() {
-                obj.options.pagination = parseInt(this.value);
-                obj.page(0);
-            }
-
-            for (var i = 0; i < obj.options.paginationOptions.length; i++) {
-                var temp = document.createElement('option');
-                temp.value = obj.options.paginationOptions[i];
-                temp.innerHTML = obj.options.paginationOptions[i];
-                obj.paginationDropdown.appendChild(temp);
-            }
-
-            paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.show));
-            paginationUpdateContainer.appendChild(obj.paginationDropdown);
-            paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.entries));
-        }
-
-        // Filter and pagination container
-        obj.filter = document.createElement('div');
-        obj.filter.classList.add('jexcel_filter');
-        obj.filter.appendChild(paginationUpdateContainer);
-        obj.filter.appendChild(searchContainer);
-
-        // Colsgroup
-        obj.colgroupContainer = document.createElement('colgroup');
-        var tempCol = document.createElement('col');
-        tempCol.setAttribute('width', 50);
-        obj.colgroupContainer.appendChild(tempCol);
-
-        // Nested
-        if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
-            // Flexible way to handle nestedheaders
-            if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
-                for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
-                    obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders[j]));
-                }
-            } else {
-                obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders));
-            }
-        }
-
-        // Row
-        obj.headerContainer = document.createElement('tr');
-        var tempCol = document.createElement('td');
-        tempCol.classList.add('jexcel_selectall');
-        obj.headerContainer.appendChild(tempCol);
-
-        for (var i = 0; i < obj.options.columns.length; i++) {
-            // Create header
-            obj.createCellHeader(i);
-            // Append cell to the container
-            obj.headerContainer.appendChild(obj.headers[i]);
-            obj.colgroupContainer.appendChild(obj.colgroup[i]);
-        }
-
-        obj.thead.appendChild(obj.headerContainer);
-
-        // Content table
-        obj.table = document.createElement('table');
-        obj.table.classList.add('jexcel');
-        obj.table.setAttribute('cellpadding', '0');
-        obj.table.setAttribute('cellspacing', '0');
-        obj.table.setAttribute('unselectable', 'yes');
-        obj.table.setAttribute('onselectstart', 'return false');
-        obj.table.appendChild(obj.colgroupContainer);
-        obj.table.appendChild(obj.thead);
-        obj.table.appendChild(obj.tbody);
-
-        // Spreadsheet corner
-        obj.corner = document.createElement('div');
-        obj.corner.className = 'jexcel_corner';
-        obj.corner.setAttribute('unselectable', 'on');
-        obj.corner.setAttribute('onselectstart', 'return false');
-
-        if (obj.options.selectionCopy == false) {
-            obj.corner.style.display = 'none';
-        }
-
-        // Textarea helper
-        obj.textarea = document.createElement('textarea');
-        obj.textarea.className = 'jexcel_textarea';
-        obj.textarea.id = 'jexcel_textarea';
-
-        // Contextmenu container
-        obj.contextMenu = document.createElement('div');
-        obj.contextMenu.className = 'jexcel_contextmenu';
-
-        // Create element
-        jSuites.contextmenu(obj.contextMenu, {
-            onclick:function() {
-                obj.contextMenu.contextmenu.close(false);
-            }
-        });
-
-        // Powered by jExcel
-        var ads = '<a href="https://bossanova.uk/jexcel/"><img src="//bossanova.uk/jexcel/logo.png">jExcel Spreadsheet</a>';
-        obj.ads = document.createElement('div');
-        obj.ads.className = 'jexcel_about';
-        if (typeof(sessionStorage) !== "undefined") {
-            if (! sessionStorage.getItem('jexcel')) {
-                sessionStorage.setItem('jexcel', true);
-                obj.ads.innerHTML = ads;
-            }
-        } else {
-            obj.ads.innerHTML = ads;
-        }
-
-        // Create table container TODO: frozen columns
-        var container = document.createElement('div');
-        container.classList.add('jexcel_table');
-
-        // Pagination
-        obj.pagination = document.createElement('div');
-        obj.pagination.classList.add('jexcel_pagination');
-        var paginationInfo = document.createElement('div');
-        var paginationPages = document.createElement('div');
-        obj.pagination.appendChild(paginationInfo);
-        obj.pagination.appendChild(paginationPages);
-
-        // Append containers to the table
-        if (obj.options.search == true) {
-            el.appendChild(obj.filter);
-        }
-
-        // Elements
-        obj.content.appendChild(obj.table);
-        obj.content.appendChild(obj.corner);
-        obj.content.appendChild(obj.textarea);
-
-        el.appendChild(obj.toolbar);
-        el.appendChild(obj.content);
-        el.appendChild(obj.pagination);
-        el.appendChild(obj.contextMenu);
-        el.appendChild(obj.ads);
-        el.classList.add('jexcel_container');
-
-        // Create toolbar
-        if (obj.options.toolbar && obj.options.toolbar.length) {
-            obj.createToolbar();
-        }
-
-        // Fullscreen
-        if (obj.options.fullscreen == true) {
-            el.classList.add('fullscreen');
-        } else {
-            // Overflow
-            if (obj.options.tableOverflow == true) {
-                if (obj.options.tableHeight) {
-                    obj.content.style['overflow-y'] = 'auto';
-                    obj.content.style.height = obj.options.tableHeight;
-                }
-                if (obj.options.tableWidth) {
-                    obj.content.style['overflow-x'] = 'auto';
-                    obj.content.style.width = obj.options.tableWidth;
-                }
-            }
-        }
-
-        // With toolbars
-        if (obj.options.tableOverflow != true && obj.options.toolbar) {
-            el.classList.add('with-toolbar');
-        }
-
-        // Actions
-        if (obj.options.columnDrag == true) {
-            obj.thead.classList.add('draggable');
-        }
-        if (obj.options.columnResize == true) {
-            obj.thead.classList.add('resizable');
-        }
-        if (obj.options.rowDrag == true) {
-            obj.tbody.classList.add('draggable');
-        }
-        if (obj.options.rowResize == true) {
-            obj.tbody.classList.add('resizable');
-        }
-
-        // Load data
-        obj.setData();
-
-        // Style
-        if (obj.options.style) {
-            obj.setStyle(obj.options.style, null, null, 1, 1);
-        }
-    }
-
-    /**
-     * Set data
-     * 
-     * @param array data In case no data is sent, default is reloaded
-     * @return void
-     */
-    obj.setData = function(data) {
-        // Update data
-        if (data) {
-            if (typeof(data) == 'string') {
-                data = JSON.parse(data);
-            }
-
-            obj.options.data = data;
-        }
-
-        // Data
-        if (! obj.options.data) {
-            obj.options.data = [];
-        }
-
-        // Prepare data
-        if (obj.options.data) {
-            var data = [];
-            for (var j = 0; j < obj.options.data.length; j++) {
-                var row = [];
-                for (var i = 0; i < obj.options.columns.length; i++) {
-                    row[i] = obj.options.data[j][obj.options.columns[i].name];
-                }
-                data.push(row);
-            }
-
-            obj.options.data = data;
-        }
-
-        // Adjust minimal dimensions
-        var j = 0;
-        var i = 0;
-        var size_i = obj.options.columns.length;
-        var size_j = obj.options.data.length;
-        var min_i = obj.options.minDimensions[0];
-        var min_j = obj.options.minDimensions[1];
-        var max_i = min_i > size_i ? min_i : size_i;
-        var max_j = min_j > size_j ? min_j : size_j;
-
-        for (j = 0; j < max_j; j++) {
-            for (i = 0; i < max_i; i++) {
-                if (obj.options.data[j] == undefined) {
-                    obj.options.data[j] = [];
-                }
-
-                if (obj.options.data[j][i] == undefined) {
-                    obj.options.data[j][i] = '';
-                }
-            }
-        }
-
-        // Reset containers
-        obj.rows = [];
-        obj.results = null;
-        obj.records = [];
-        obj.history = [];
-
-        // Reset internal controllers
-        obj.historyIndex = -1;
-
-        // Reset data
-        obj.tbody.innerHTML = '';
-
-        // Lazy loading
-        if (obj.options.lazyLoading == true) {
-            // Load only 100 records
-            var startNumber = 0
-            var finalNumber = obj.options.data.length < 100 ? obj.options.data.length : 100;
-
-            if (obj.options.pagination) {
-                obj.options.pagination = false;
-                console.error('JEXCEL: Pagination will be disable due the lazyLoading');
-            }
-        } else if (obj.options.pagination) {
-            // Pagination
-            if (! obj.pageNumber) {
-                obj.pageNumber = 0;
-            }
-            var quantityPerPage = obj.options.pagination;
-            startNumber = (obj.options.pagination * obj.pageNumber);
-            finalNumber = (obj.options.pagination * obj.pageNumber) + obj.options.pagination;
-
-            if (obj.options.data.length < finalNumber) {
-                finalNumber = obj.options.data.length;
-            }
-        } else {
-            var startNumber = 0;
-            var finalNumber = obj.options.data.length;
-        }
-
-        // Append nodes to the HTML
-        for (j = 0; j < obj.options.data.length; j++) {
-            // Create row
-            var tr = obj.createRow(j, obj.options.data[j]);
-            // Append line to the table
-            if (j >= startNumber && j < finalNumber) {
-                obj.tbody.appendChild(tr);
-            }
-        }
-
-        if (obj.options.lazyLoading == true) {
-            // Do not create pagination with lazyloading activated
-        } else if (obj.options.pagination) {
-            obj.updatePagination();
-        }
-
-        // Merge cells
-        if (obj.options.mergeCells) {
-            var keys = Object.keys(obj.options.mergeCells);
-            for (var i = 0; i < keys.length; i++) {
-                var num = obj.options.mergeCells[keys[i]];
-                obj.setMerge(keys[i], num[0], num[1], 1);
-            }
-        }
-
-        // Updata table with custom configurations if applicable
-        obj.updateTable();
-
-        // Onload
-        if (! obj.ignoreEvents) {
-            if (typeof(obj.options.onload) == 'function') {
-                obj.options.onload(el, obj);
-            }
-        }
-    }
-
-    /**
-     * Get the whole table data
-     * 
-     * @param integer row number
-     * @return string value
-     */
-    obj.getData = function(highlighted) {
-        // Control vars
-        var dataset = [];
-        var px = 0;
-        var py = 0;
-
-        // Column and row length
-        var x = obj.options.columns.length
-        var y = obj.options.data.length
-
-        // Go through the columns to get the data
-        for (var j = 0; j < y; j++) {
-            px = 0;
-            for (var i = 0; i < x; i++) {
-                // Cell selected or fullset
-                if (! highlighted || obj.records[j][i].classList.contains('highlight')) {
-                    // Get value
-                    if (! dataset[py]) {
-                        dataset[py] = [];
-                    }
-                    if (obj.options.copyCompatibility == true) {
-                        dataset[py][px] = obj.records[j][i].innerHTML;
-                    } else {
-                        dataset[py][px] = obj.options.data[j][i];
-                    }
-                    px++;
-                }
-            }
-            if (px > 0) {
-                py++;
-            }
-       }
-
-       return dataset;
-    }
-
-    /**
-     * Get the whole table data
-     * 
-     * @param integer row number
-     * @return string value
-     */
-    obj.getJson = function(highlighted) {
-        // Control vars
-        var data = [];
-
-        // Column and row length
-        var x = obj.options.columns.length
-        var y = obj.options.data.length
-
-        // Go through the columns to get the data
-        for (var j = 0; j < y; j++) {
-            var row = null;
-            for (var i = 0; i < x; i++) {
-                if (! highlighted || obj.records[j][i].classList.contains('highlight')) {
-                    if (row == null) {
-                        row = {};
-                    }
-                    row[obj.options.columns[i].name] = obj.options.data[j][i];
-                }
-            }
-
-            if (row != null) {
-                data.push(row);
-            }
-       }
-
-       return data;
-    }
-
-    /**
-     * Get a row data by rowNumber
-     */
-    obj.getRowData = function(rowNumber) {
-        return obj.options.data[rowNumber];
-    }
-
-    /**
-     * Set a row data by rowNumber
-     */
-    obj.setRowData = function(rowNumber, data) {
-        for (var i = 0; i < obj.headers.length; i++) {
-            // Update cell
-            var columnName = jexcel.getColumnNameFromId([ i, rowNumber ]);
-            // Set value
-            if (data[i] != null) {
-                obj.setValue(columnName, data[i]);
-            }
-        }
-    }
-
-    /**
-     * Get a column data by columnNumber
-     */
-    obj.getColumnData = function(columnNumber) {
-        var dataset = [];
-        // Go through the rows to get the data
-        for (var j = 0; j < obj.options.data.length; j++) {
-            dataset.push(obj.options.data[j][columnNumber]);
-        }
-        return dataset;
-    }
-
-    /**
-     * Set a column data by colNumber
-     */
-    obj.setColumnData = function(colNumber, data) {
-        for (var j = 0; j < obj.rows.length; j++) {
-            // Update cell
-            var columnName = jexcel.getColumnNameFromId([ colNumber, j ]);
-            // Set value
-            if (data[j] != null) {
-                obj.setValue(columnName, data[j]);
-            }
-        }
-    }
-
-    /**
-     * Create row
-     */
-    obj.createRow = function(j, data) {
-        // Create container
-        if (! obj.records[j]) {
-            obj.records[j] = [];
-        }
-        // Default data
-        if (! data) {
-            var data = obj.options.data[j];
-        }
-        // New line of data to be append in the table
-        obj.rows[j] = document.createElement('tr');
-        obj.rows[j].setAttribute('data-y', j);
-        // Definitions
-        if (obj.options.rows[j]) {
-            if (obj.options.rows[j].height) {
-                obj.rows[j].style.height = obj.options.rows[j].height;
-            }
-        }
-        // Row number label
-        var td = document.createElement('td');
-        td.innerHTML = parseInt(j + 1);
-        td.setAttribute('data-y', j);
-        td.className = 'jexcel_row';
-        obj.rows[j].appendChild(td);
-
-        // Data columns
-        for (i = 0; i < obj.options.columns.length; i++) {
-            // New column of data to be append in the line
-            obj.records[j][i] = obj.createCell(i, j, data[i]);
-            // Add column to the row
-            obj.rows[j].appendChild(obj.records[j][i]);
-        }
-
-        // Add row to the table body
-        return obj.rows[j];
-    }
-
-    /**
-     * Create cell
-     */
-    obj.createCell = function(i, j, value) {
-        // Create cell and properties
-        var td = document.createElement('td');
-        td.setAttribute('data-x', i);
-        td.setAttribute('data-y', j);
-        // Hidden column
-        if (obj.options.columns[i].type == 'hidden') {
-            td.style.display = 'none';
-            td.innerHTML = value;
-        } else if (obj.options.columns[i].type == 'checkbox' || obj.options.columns[i].type == 'radio') {
-            // Create input
-            var element = document.createElement('input');
-            element.type = obj.options.columns[i].type;
-            element.name = 'c' + i;
-            element.checked = (value == 1 || value == true || value == 'true') ? true : false;
-            element.onclick = function() {
-                obj.setValue(td, this.checked);
-            }
-
-            if (obj.options.columns[i].readOnly == true) {
-                element.setAttribute('disabled', 'disabled');
-            }
-
-            // Append to the table
-            td.appendChild(element);
-            // Make sure the values are correct
-            obj.options.data[j][i] = element.checked;
-        } else if (obj.options.columns[i].type == 'calendar') {
-            // Try formatted date
-            var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[i].options.format);
-            // Create calendar cell
-            td.innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[i].options.format);
-        } else if (obj.options.columns[i].type == 'dropdown' || obj.options.columns[i].type == 'autocomplete') {
-            // Create dropdown cell
-            td.classList.add('dropdown');
-            td.innerHTML = obj.getDropDownValue(i, value);
-        } else if (obj.options.columns[i].type == 'color') {
-            if (obj.options.columns[i].render == 'square') {
-                var color = document.createElement('div');
-                color.className = 'color';
-                color.style.backgroundColor = value;
-                td.appendChild(color);
-            } else {
-                td.style.color = value;
-                td.innerHTML = value;
-            }
-        } else if (obj.options.columns[i].type == 'image') {
-            if (value && value.substr(0, 10) == 'data:image') {
-                var img = document.createElement('img');
-                img.src = value;
-                td.appendChild(img);
-            }
-        } else {
-            if ((''+value).substr(0,1) == '=' && obj.options.parseFormulas == true) {
-                value = obj.executeFormula(value, i, j)
-            }
-            if (obj.options.columns[i].mask) {
-                var decimal = obj.options.columns[i].decimal || '.';
-                value = '' + jSuites.mask.run(value, obj.options.columns[i].mask, decimal);
-            }
-
-            td.innerHTML = value;
-        }
-
-        // Readonly
-        if (obj.options.columns[i].readOnly == true) {
-            td.className = 'readonly';
-        }
-
-        // Text align
-        var colAlign = obj.options.columns[i].align ? obj.options.columns[i].align : 'center';
-        td.style.textAlign = colAlign;
-
-        // Wrap option
-        if (obj.options.columns[i].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[i].wordWrap == true || td.innerHTML.length > 200)) {
-            td.style.whiteSpace = 'pre-wrap';
-        }
-
-        // Overflow
-        if (i > 0) {
-            if (value || td.innerHTML) {
-                obj.records[j][i-1].style.overflow = 'hidden';
-            } else {
-                if (i == obj.options.columns.length - 1) {
-                    td.style.overflow = 'hidden';
-                }
-            }
-        }
-
-        return td;
-    }
-
-    obj.createCellHeader = function(colNumber) {
-        // Create col global control
-        var colWidth = obj.options.columns[colNumber].width ? obj.options.columns[colNumber].width : obj.options.defaultColWidth;
-        var colAlign = obj.options.columns[colNumber].align ? obj.options.columns[colNumber].align : obj.options.defaultColAlign;
-
-        // Create header cell
-        obj.headers[colNumber] = document.createElement('td');
-        obj.headers[colNumber].innerHTML = obj.options.columns[colNumber].title ? obj.options.columns[colNumber].title : jexcel.getColumnName(colNumber);
-        obj.headers[colNumber].setAttribute('data-x', colNumber);
-        obj.headers[colNumber].style.textAlign = colAlign;
-        if (obj.options.columns[colNumber].title) {
-            obj.headers[colNumber].setAttribute('title', obj.options.columns[colNumber].title);
-        }
-
-        // Width control
-        obj.colgroup[colNumber] = document.createElement('col');
-        obj.colgroup[colNumber].setAttribute('width', colWidth);
-
-        // Hidden column
-        if (obj.options.columns[colNumber].type == 'hidden') {
-            obj.headers[colNumber].style.display = 'none';
-            obj.colgroup[colNumber].style.display = 'none';
-        }
-    }
-
-    obj.createNestedHeader = function(nestedInformation) {
-        var tr = document.createElement('tr');
-        tr.classList.add('jexcel_nested');
-        var td = document.createElement('td');
-        tr.appendChild(td);
-
-        var headerIndex = 0;
-        for (var i = 0; i < nestedInformation.length; i++) {
-            // Default values
-            if (! nestedInformation[i].colspan) {
-                nestedInformation[i].colspan = 1;
-            }
-            if (! nestedInformation[i].align) {
-                nestedInformation[i].align = 'center';
-            }
-            if (! nestedInformation[i].title) {
-                nestedInformation[i].title = '';
-            }
-
-            // Number of columns
-            var numberOfColumns = nestedInformation[i].colspan;
-
-            // Classes container
-            var column = [];
-            // Header classes for this cell
-            for (var x = 0; x < numberOfColumns; x++) {
-                if (obj.options.columns[headerIndex] && obj.options.columns[headerIndex].type == 'hidden') {
-                    numberOfColumns++;
-                }
-                column.push(headerIndex);
-                headerIndex++;
-            }
-
-            // Created the nested cell
-            var td = document.createElement('td');
-            td.setAttribute('data-column', column.join(','));
-            td.setAttribute('colspan', nestedInformation[i].colspan);
-            td.setAttribute('align', nestedInformation[i].align);
-            td.innerHTML = nestedInformation[i].title;
-            tr.appendChild(td);
-        }
-
-        return tr;
-    }
-
-    /**
-     * Create toolbar
-     */
-    obj.createToolbar = function(toolbar) {
-        if (toolbar) {
-            obj.options.toolbar = toolbar;
-        } else {
-            var toolbar = obj.options.toolbar;
-        }
-
-        for (var i = 0; i < toolbar.length; i++) {
-            if (toolbar[i].type == 'i') {
-                var toolbarItem = document.createElement('i');
-                toolbarItem.classList.add('jexcel_toolbar_item');
-                toolbarItem.classList.add('material-icons');
-                toolbarItem.setAttribute('data-k', toolbar[i].k);
-                toolbarItem.setAttribute('data-v', toolbar[i].v);
-                // Tooltip
-                if (toolbar[i].tooltip) {
-                    toolbarItem.setAttribute('title', toolbar[i].tooltip);
-                }
-                // Handle click
-                if (toolbar[i].onclick && typeof(toolbar[i].onclick)) {
-                    toolbarItem.onclick = toolbar[i].onclick;
-                } else {
-                    toolbarItem.onclick = function() {
-                        var k = this.getAttribute('data-k');
-                        var v = this.getAttribute('data-v');
-                        obj.setStyle(obj.highlighted, k, v);
-                    }
-                }
-                // Append element
-                toolbarItem.innerHTML = toolbar[i].content;
-                obj.toolbar.appendChild(toolbarItem);
-            } else if (toolbar[i].type == 'select') {
-               var toolbarItem = document.createElement('select');
-               toolbarItem.classList.add('jexcel_toolbar_item');
-               toolbarItem.setAttribute('data-k', toolbar[i].k);
-               // Tooltip
-               if (toolbar[i].tooltip) {
-                   toolbarItem.setAttribute('title', toolbar[i].tooltip);
-               }
-               // Handle onchange
-               if (toolbar[i].onchange && typeof(toolbar[i].onchange)) {
-                   toolbarItem.onchange = toolbar[i].onchange;
-               } else {
-                   toolbarItem.onchange = function() {
-                       var k = this.getAttribute('data-k');
-                       obj.setStyle(obj.highlighted, k, this.value);
-                   }
-               }
-               // Add options to the dropdown
-               for(var j = 0; j < toolbar[i].v.length; j++) {
-                    var toolbarDropdownOption = document.createElement('option');
-                    toolbarDropdownOption.value = toolbar[i].v[j];
-                    toolbarDropdownOption.innerHTML = toolbar[i].v[j];
-                    toolbarItem.appendChild(toolbarDropdownOption);
-               }
-               obj.toolbar.appendChild(toolbarItem);
-            } else if (toolbar[i].type == 'color') {
-                 var toolbarItem = document.createElement('i');
-                 toolbarItem.classList.add('jexcel_toolbar_item');
-                 toolbarItem.classList.add('material-icons');
-                 toolbarItem.setAttribute('data-k', toolbar[i].k);
-                 toolbarItem.setAttribute('data-v', '');
-                 // Tooltip
-                 if (toolbar[i].tooltip) {
-                     toolbarItem.setAttribute('title', toolbar[i].tooltip);
-                 }
-                 obj.toolbar.appendChild(toolbarItem);
-                 toolbarItem.onclick = function() {
-                     this.color.open();
-                 }
-                 toolbarItem.innerHTML = toolbar[i].content;
-                 jSuites.color(toolbarItem, {
-                     onchange:function(o, v) {
-                         var k = o.getAttribute('data-k');
-                         obj.setStyle(obj.highlighted, k, v);
-                     }
-                 });
-            }
-        }
-    }
-
-    /**
-     * Merge cells
-     * @param cellName
-     * @param colspan
-     * @param rowspan
-     * @param ignoreHistoryAndEvents
-     */
-    obj.setMerge = function(cellName, colspan, rowspan, ignoreHistoryAndEvents) {
-        var test = false;
-
-        if (! cellName) {
-            if (! obj.highlighted.length) {
-                alert(obj.options.text.noCellsSelected);
-                return null;
-            } else {
-                var x1 = parseInt(obj.highlighted[0].getAttribute('data-x'));
-                var y1 = parseInt(obj.highlighted[0].getAttribute('data-y'));
-                var x2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-x'));
-                var y2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-y'));
-                var cellName = jexcel.getColumnNameFromId([ x1, y1 ]);
-                var colspan = (x2 - x1) + 1;
-                var rowspan = (y2 - y1) + 1;
-            }
-        }
-
-        var cell = jexcel.getIdFromColumnName(cellName, true);
-
-        if (obj.options.mergeCells[cellName]) {
-            if (obj.records[cell[1]][cell[0]].getAttribute('data-merged')) {
-                test = obj.options.text.cellAlreadyMerged;
-            }
-        } else if ((! colspan || colspan < 2) && (! rowspan || rowspan < 2)) {
-            test = obj.options.text.invalidMergeProperties;
-        } else {
-            var cells = [];
-            for (var j = cell[1]; j < cell[1] + rowspan; j++) {
-                for (var i = cell[0]; i < cell[0] + colspan; i++) {
-                    var columnName = jexcel.getColumnNameFromId([i, j]);
-                    if (obj.records[j][i].getAttribute('data-merged')) {
-                        test = obj.options.text.thereIsAConflictWithAnotherMergedCell;
-                    }
-                }
-            }
-        }
-
-        if (test) {
-            alert(test);
-        } else {
-            // Add property
-            if (colspan > 1) {
-                obj.records[cell[1]][cell[0]].setAttribute('colspan', colspan);
-            } else {
-                colspan = 1;
-            }
-            if (rowspan > 1) {
-                obj.records[cell[1]][cell[0]].setAttribute('rowspan', rowspan);
-            } else {
-                rowspan = 1;
-            }
-            // Keep links to the existing nodes
-            obj.options.mergeCells[cellName] = [ colspan, rowspan, [] ];
-            // Mark cell as merged
-            obj.records[cell[1]][cell[0]].setAttribute('data-merged', 'true');
-            // Overflow
-            obj.records[cell[1]][cell[0]].style.overflow = 'hidden';
-            // History data
-            var data = [];
-            // Adjust the nodes
-            for (var y = cell[1]; y < cell[1] + rowspan; y++) {
-                for (var x = cell[0]; x < cell[0] + colspan; x++) {
-                    if (! (cell[0] == x && cell[1] == y)) {
-                        data.push(obj.options.data[y][x]);
-                        obj.updateCell(x, y, '', true);
-                        obj.options.mergeCells[cellName][2].push(obj.records[y][x]);
-                        obj.records[y][x].style.display = 'none';
-                        obj.records[y][x] = obj.records[cell[1]][cell[0]];
-                    }
-                }
-            }
-            // In the initialization is not necessary keep the history
-            obj.updateSelection(obj.records[cell[1]][cell[0]]);
-
-            if (! ignoreHistoryAndEvents) {
-                obj.setHistory({
-                    action:'setMerge',
-                    column:cellName,
-                    colspan:colspan,
-                    rowspan:rowspan,
-                    data:data,
-                });
-
-                if (typeof(obj.options.onmerge) == 'function') {
-                    obj.options.onmerge(el, cellName, colspan, rowspan);
-                }
-            }
-        }
-    }
-
-    /**
-     * Merge cells
-     * @param cellName
-     * @param colspan
-     * @param rowspan
-     * @param ignoreHistoryAndEvents
-     */
-    obj.getMerge = function(cellName) {
-        var data = {};
-        if (cellName) {
-            if (obj.options.mergeCells[cellName]) {
-                data = [ obj.options.mergeCells[cellName][0], obj.options.mergeCells[cellName][1] ];
-            } else {
-                data = null;
-            }
-        } else {
-            if (obj.options.mergeCells) {
-                var mergedCells = obj.options.mergeCells;
-                var keys = Object.keys(obj.options.mergeCells);
-                for (var i = 0; i < keys.length; i++) {
-                    data[keys[i]] = [ obj.options.mergeCells[keys[i]][0], obj.options.mergeCells[keys[i]][1] ];
-                }
-            }
-        }
-
-        return data;
-    }
-
-    /**
-     * Remove merge by cellname
-     * @param cellName
-     */
-    obj.removeMerge = function(cellName, data, keepOptions) {
-        if (obj.options.mergeCells[cellName]) {
-            var cell = jexcel.getIdFromColumnName(cellName, true);
-            obj.records[cell[1]][cell[0]].removeAttribute('colspan');
-            obj.records[cell[1]][cell[0]].removeAttribute('rowspan');
-            obj.records[cell[1]][cell[0]].removeAttribute('data-merged');
-            var info = obj.options.mergeCells[cellName];
-
-            var index = 0;
-            for (var j = 0; j < info[1]; j++) {
-                for (var i = 0; i < info[0]; i++) {
-                    if (j > 0 || i > 0) {
-                        obj.records[cell[1]+j][cell[0]+i] = info[2][index];
-                        obj.records[cell[1]+j][cell[0]+i].style.display = '';
-                        // Recover data
-                        if (data && data[index]) {
-                            obj.updateCell(cell[0]+i, cell[1]+j, data[index]);
-                        }
-                        index++;
-                    }
-                }
-            }
-
-            // Update selection
-            obj.updateSelection(obj.records[cell[1]][cell[0]], obj.records[cell[1]+j-1][cell[0]+i-1]);
-
-            if (! keepOptions) {
-                delete(obj.options.mergeCells[cellName]);
-            }
-        }
-    }
-
-    /**
-     * Remove all merged cells
-     */
-    obj.destroyMerged = function(keepOptions) {
-        // Remove any merged cells
-        if (obj.options.mergeCells) {
-            var mergedCells = obj.options.mergeCells;
-            var keys = Object.keys(obj.options.mergeCells);
-            for (var i = 0; i < keys.length; i++) {
-                obj.removeMerge(keys[i], null, keepOptions);
-            }
-        }
-    }
-
-    /**
-     * Is column merged
-     */
-    obj.isColMerged = function(x, insertBefore) {
-        var cols = [];
-        // Remove any merged cells
-        if (obj.options.mergeCells) {
-            var keys = Object.keys(obj.options.mergeCells);
-            for (var i = 0; i < keys.length; i++) {
-                var info = jexcel.getIdFromColumnName(keys[i], true);
-                var colspan = obj.options.mergeCells[keys[i]][0];
-                var x1 = info[0];
-                var x2 = info[0] + (colspan > 1 ? colspan - 1 : 0);
-
-                if (insertBefore == null) {
-                    if ((x1 <= x && x2 >= x)) {
-                        cols.push(keys[i]);
-                    }
-                } else {
-                    if (insertBefore) {
-                        if ((x1 < x && x2 >= x)) {
-                            cols.push(keys[i]);
-                        }
-                    } else {
-                        if ((x1 <= x && x2 > x)) {
-                            cols.push(keys[i]);
-                        }
-                    }
-                }
-            }
-        }
-
-        return cols;
-    }
-
-    /**
-     * Is rows merged
-     */
-    obj.isRowMerged = function(y, insertBefore) {
-        var rows = [];
-        // Remove any merged cells
-        if (obj.options.mergeCells) {
-            var keys = Object.keys(obj.options.mergeCells);
-            for (var i = 0; i < keys.length; i++) {
-                var info = jexcel.getIdFromColumnName(keys[i], true);
-                var rowspan = obj.options.mergeCells[keys[i]][1];
-                var y1 = info[1];
-                var y2 = info[1] + (rowspan > 1 ? rowspan - 1 : 0);
-
-                if (insertBefore == null) {
-                    if ((y1 <= y && y2 >= y)) {
-                        rows.push(keys[i]);
-                    }
-                } else {
-                    if (insertBefore) {
-                        if ((y1 < y && y2 >= y)) {
-                            rows.push(keys[i]);
-                        }
-                    } else {
-                        if ((y1 <= y && y2 > y)) {
-                            rows.push(keys[i]);
-                        }
-                    }
-                }
-            }
-        }
-
-        return rows;
-    }
-
-    /**
-     * Open the editor
-     * 
-     * @param object cell
-     * @return void
-     */
-    obj.openEditor = function(cell, empty, e) {
-        // Get cell position
-        var y = cell.getAttribute('data-y');
-        var x = cell.getAttribute('data-x');
-
-        // On edition start
-        if (! obj.ignoreEvents) {
-            if (typeof(obj.options.oneditionstart) == 'function') {
-                obj.options.oneditionstart(el, cell, x, y);
-            }
-        }
-
-        // Overflow
-        if (x > 0) {
-            obj.records[y][x-1].style.overflow = 'hidden';
-        }
-
-        // Create editor
-        var createEditor = function(type) {
-            // Cell information
-            var info = cell.getBoundingClientRect();
-
-            // Create dropdown
-            var editor = document.createElement(type);
-            editor.style.width = (info.width) + 'px';
-            editor.style.height = (info.height - 2) + 'px';
-            editor.style.minHeight = (info.height - 2) + 'px';
-
-            // Edit cell
-            cell.classList.add('editor');
-            cell.innerHTML = '';
-            cell.appendChild(editor);
-
-            return editor;
-        }
-
-        // Readonly
-        if (cell.classList.contains('readonly') == true) {
-            // Do nothing
-        } else {
-            // Holder
-            obj.edition = [ obj.records[y][x], obj.records[y][x].innerHTML, x, y ];
-
-            // If there is a custom editor for it
-            if (obj.options.columns[x].editor) {
-                // Custom editors
-                obj.options.columns[x].editor.openEditor(cell, el);
-            } else {
-                // Native functions
-                if (obj.options.columns[x].type == 'hidden') {
-                    // Do nothing
-                } else if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {
-                    // Get value
-                    var value = cell.children[0].checked ? false : true;
-                    // Toogle value
-                    obj.setValue(cell, value);
-                    // Do not keep edition open
-                    obj.edition = null;
-                } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
-                    // Get current value
-                    var value = obj.options.data[y][x];
-
-                    // Create dropdown
-                    if (typeof(obj.options.columns[x].filter) == 'function') {
-                        var source = obj.options.columns[x].filter(el, cell, x, y, obj.options.columns[x].source);
-                    } else {
-                        var source = obj.options.columns[x].source;
-                    }
-
-                    // Create editor
-                    var editor = createEditor('div');
-                    var options = {
-                        data: source,
-                        multiple: obj.options.columns[x].multiple ? true : false,
-                        autocomplete: obj.options.columns[x].autocomplete || obj.options.columns[x].type == 'autocomplete' ? true : false,
-                        opened:true,
-                        value: obj.options.columns[x].multiple ? value.split(';') : value,
-                        width:'100%',
-                        height:editor.style.minHeight,
-                        position: (obj.options.tableOverflow == true || obj.options.fullscreen == true) ? true : false,
-                        onclose:function() {
-                            obj.closeEditor(cell, true);
-                        }
-                    };
-                    if (obj.options.columns[x].options && obj.options.columns[x].options.type) {
-                        options.type = obj.options.columns[x].options.type;
-                    }
-                    jSuites.dropdown(editor, options);
-                } else if (obj.options.columns[x].type == 'calendar' || obj.options.columns[x].type == 'color') {
-                    // Value
-                    var value = obj.options.data[y][x];
-                    // Create editor
-                    var editor = createEditor('input');
-                    editor.value = value;
-
-                    if (obj.options.tableOverflow == true || obj.options.fullscreen == true) {
-                        obj.options.columns[x].options.position = true;
-                    }
-                    obj.options.columns[x].options.value = obj.options.data[y][x];
-                    obj.options.columns[x].options.opened = true;
-                    obj.options.columns[x].options.onclose = function(el, value) {
-                        obj.closeEditor(cell, true);
-                    }
-                    // Current value
-                    if (obj.options.columns[x].type == 'color') {
-                        jSuites.color(editor, obj.options.columns[x].options);
-                    } else {
-                        var calendar = jSuites.calendar(editor, obj.options.columns[x].options);
-                        calendar.setValue(value);
-                    }
-                    // Focus on editor
-                    editor.focus();
-                } else if (obj.options.columns[x].type == 'image') {
-                    // Value
-                    var img = cell.children[0];
-                    // Create editor
-                    var editor = createEditor('div');
-                    editor.style.position = 'relative';
-                    var div = document.createElement('div');
-                    div.classList.add('jclose');
-                    if (img && img.src) {
-                        div.appendChild(img);
-                    }
-                    editor.appendChild(div);
-                    jSuites.image(div, obj.options.imageOptions);
-                    const rect = cell.getBoundingClientRect();
-                    const rectContent = div.getBoundingClientRect();
-                    if (window.innerHeight < rect.bottom + rectContent.height) {
-                        div.style.top = (rect.top - (rectContent.height + 2)) + 'px';
-                    } else {
-                        div.style.top = (rect.top) + 'px';
-                    }
-                } else {
-                    // Value
-                    var value = empty == true ? '' : obj.options.data[y][x];
-
-                    // Basic editor
-                    if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true)) {
-                        var editor = createEditor('textarea');
-                    } else {
-                        var editor = createEditor('input');
-                        // Mask
-                        if (obj.options.columns[x].mask) {
-                            editor.setAttribute('data-mask', obj.options.columns[x].mask);
-                        }
-                    }
-
-                    editor.value = value;
-                    editor.onblur = function() {
-                        obj.closeEditor(cell, true);
-                    };
-                    editor.focus();
-                }
-            }
-        }
-    }
-
-    /**
-     * Close the editor and save the information
-     * 
-     * @param object cell
-     * @param boolean save
-     * @return void
-     */
-    obj.closeEditor = function(cell, save) {
-        var x = parseInt(cell.getAttribute('data-x'));
-        var y = parseInt(cell.getAttribute('data-y'));
-
-        // Get cell properties
-        if (save == true) {
-            // If custom editor
-            if (obj.options.columns[x].editor) {
-                // Custom editor
-                var value = obj.options.columns[x].editor.closeEditor(cell, save);
-            } else {
-                // Native functions
-                if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio' || obj.options.columns[x].type == 'hidden') {
-                    // Do nothing
-                } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
-                    var value = cell.children[0].dropdown.close(true);
-                } else if (obj.options.columns[x].type == 'calendar') {
-                    var value = cell.children[0].calendar.close(true);
-                } else if (obj.options.columns[x].type == 'color') {
-                    var value = cell.children[1].color.close(true);
-                } else if (obj.options.columns[x].type == 'image') {
-                    var img = cell.children[0].children[0].children[0];
-                    var value = img && img.tagName == 'IMG' ? img.src : '';
-                } else if (obj.options.columns[x].type == 'numeric') {
-                    var value = cell.children[0].value;
-                    if (value.substr(0,1) != '=') {
-                        if (value == '') {
-                            value = obj.options.columns[x].allowEmpty ? '' : 0;
-                        }
-                    }
-                    cell.children[0].onblur = null;
-                } else {
-                    var value = cell.children[0].value;
-                    cell.children[0].onblur = null;
-                }
-            }
-
-            // Ignore changes if the value is the same
-            if (obj.options.data[y][x] == value) {
-                cell.innerHTML = obj.edition[1];
-            } else {
-                obj.setValue(cell, value);
-            }
-        } else {
-            if (obj.options.columns[x].editor) {
-                // Custom editor
-                obj.options.columns[x].editor.closeEditor(cell, save);
-            } else {
-                if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
-                    cell.children[0].dropdown.close(true);
-                } else if (obj.options.columns[x].type == 'calendar') {
-                    cell.children[0].calendar.close(true);
-                } else if (obj.options.columns[x].type == 'color') {
-                    cell.children[1].color.close(true);
-                } else {
-                    cell.children[0].onblur = null;
-                }
-            }
-
-            // Restore value
-            cell.innerHTML = obj.edition && obj.edition[1] ? obj.edition[1] : '';
-        }
-
-        // On edition end
-        if (! obj.ignoreEvents) {
-            if (typeof(obj.options.oneditionend) == 'function') {
-                obj.options.oneditionend(el, cell, x, y, value, save);
-            }
-        }
-
-        // Remove editor class
-        cell.classList.remove('editor');
-
-        // Finish edition
-        obj.edition = null;
-    }
-
-    /**
-     * Get the cell object
-     * 
-     * @param object cell
-     * @return string value
-     */
-    obj.getCell = function(cell) {
-        // Convert in case name is excel liked ex. A10, BB92
-        cell = jexcel.getIdFromColumnName(cell, true);
-        var x = cell[0];
-        var y = cell[1];
-
-        return obj.records[y][x];
-    }
-
-    /**
-     * Get the cell object from coords
-     * 
-     * @param object cell
-     * @return string value
-     */
-    obj.getCellFromCoords = function(x, y) {
-        return obj.records[y][x].element;
-    }
-
-    /**
-     * Get label
-     * 
-     * @param object cell
-     * @return string value
-     */
-    obj.getLabel = function(cell) {
-        // Convert in case name is excel liked ex. A10, BB92
-        cell = jexcel.getIdFromColumnName(cell, true);
-        var x = cell[0];
-        var y = cell[1];
-
-        return obj.records[y][x].innerHTML;
-    }
-
-    /**
-     * Get labelfrom coords
-     * 
-     * @param object cell
-     * @return string value
-     */
-    obj.getLabelFromCoords = function(x, y) {
-        return obj.records[y][x].element.innerHTML;
-    }
-
-    /**
-     * Get the value from a cell
-     * 
-     * @param object cell
-     * @return string value
-     */
-    obj.getValue = function(cell, processedValue) {
-        if (typeof(cell) == 'object') {
-            var x = cell.getAttribute('data-x');
-            var y = cell.getAttribute('data-y');
-        } else {
-            cell = jexcel.getIdFromColumnName(cell, true);
-            var x = cell[0];
-            var y = cell[1];
-        }
-
-        var value = null;
-
-        if (x != null && y != null) {
-            if (obj.records[y] && obj.records[y][x] && (processedValue || obj.options.copyCompatibility == true)) {
-                value = obj.records[y][x].innerHTML;
-            } else {
-                if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') {
-                    value = obj.options.data[y][x];
-                }
-            }
-        }
-
-        return value;
-    }
-
-    /**
-     * Get the value from a coords
-     * 
-     * @param int x
-     * @param int y
-     * @return string value
-     */
-    obj.getValueFromCoords = function(x, y, processedValue) {
-        var value = null;
-
-        if (x != null && y != null) {
-            if ((obj.records[y] && obj.records[y][x]) && processedValue || obj.options.copyCompatibility == true) {
-                value = obj.records[y][x].innerHTML;
-            } else {
-                if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') {
-                    value = obj.options.data[y][x];
-                }
-            }
-        }
-
-        return value;
-    }
-
-    /**
-     * Set a cell value
-     * 
-     * @param mixed cell destination cell
-     * @param string value value
-     * @return void
-     */
-    obj.setValue = function(cell, value, force) {
-        var records = [];
-
-        if (typeof(cell) == 'string') {
-            var columnId = jexcel.getIdFromColumnName(cell, true);
-            var x = columnId[0];
-            var y = columnId[1];
-
-            // Update cell
-            records.push(obj.updateCell(x, y, value, force));
-
-            // Update all formulas in the chain
-            obj.updateFormulaChain(x, y, records);
-        } else {
-            var x = null;
-            var y = null;
-            if (cell && cell.getAttribute) {
-                var x = cell.getAttribute('data-x');
-                var y = cell.getAttribute('data-y');
-            }
-
-            // Update cell
-            if (x != null && y != null) {
-                records.push(obj.updateCell(x, y, value, force));
-
-                // Update all formulas in the chain
-                obj.updateFormulaChain(x, y, records);
-            } else {
-                var keys = Object.keys(cell);
-                if (keys.length > 0) {
-                    for (var i = 0; i < keys.length; i++) {
-                        if (typeof(cell[i]) == 'string') {
-                            var columnId = jexcel.getIdFromColumnName(cell[i], true);
-                            var x = columnId[0];
-                            var y = columnId[1];
-                        } else {
-                            var x = cell[i].getAttribute('data-x');
-                            var y = cell[i].getAttribute('data-y');
-                        }
-
-                         // Update cell
-                        if (x != null && y != null) {
-                            records.push(obj.updateCell(x, y, value, force));
-
-                            // Update all formulas in the chain
-                            obj.updateFormulaChain(x, y, records);
-                        }
-                    }
-                }
-            }
-        }
-
-        // Update history
-        obj.setHistory({
-            action:'setValue',
-            records:records,
-            selection:obj.selectedCell,
-        });
-
-        // Update table with custom configurations if applicable
-        obj.updateTable();
-
-        // On after changes
-        obj.onafterchanges(el, records);
-    }
-
-    /**
-     * Set a cell value based on coordinates
-     * 
-     * @param int x destination cell
-     * @param int y destination cell
-     * @param string value
-     * @return void
-     */
-    obj.setValueFromCoords = function(x, y, value, force) {
-        var records = [];
-        records.push(obj.updateCell(x, y, value, force));
-
-        // Update all formulas in the chain
-        obj.updateFormulaChain(x, y, records);
-
-        // Update history
-        obj.setHistory({
-            action:'setValue',
-            records:records,
-            selection:obj.selectedCell,
-        });
-
-        // Update table with custom configurations if applicable
-        obj.updateTable();
-
-        // On after changes
-        obj.onafterchanges(el, records);
-    }
-
-    /**
-     * Toogle
-     */
-    obj.setCheckRadioValue = function() {
-        var records = [];
-        var keys = Object.keys(obj.highlighted);
-        for (var i = 0; i < keys.length; i++) {
-            var x = obj.highlighted[i].getAttribute('data-x');
-            var y = obj.highlighted[i].getAttribute('data-y');
-
-            if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {
-                // Update cell
-                records.push(obj.updateCell(x, y, ! obj.options.data[y][x]));
-            }
-        }
-
-        if (records.length) {
-            // Update history
-            obj.setHistory({
-                action:'setValue',
-                records:records,
-                selection:obj.selectedCell,
-            });
-
-            // On after changes
-            obj.onafterchanges(el, records);
-        }
-    }
-
-    /**
-     * Update cell content
-     * 
-     * @param object cell
-     * @return void
-     */
-    obj.updateCell = function(x, y, value, force) {
-        // Changing value depending on the column type
-        if (obj.records[y][x].classList.contains('readonly') == true && ! force) {
-            // Do nothing
-        } else {
-            // On change
-            if (! obj.ignoreEvents) {
-                if (typeof(obj.options.onbeforechange) == 'function') {
-                    // Overwrite a value
-                    var val = obj.options.onbeforechange(el, obj.records[y][x], x, y, value);
-
-                    // If you return something this will overwrite the value
-                    if (val != undefined) {
-                        value = val;
-                    }
-                }
-            }
-
-            // History format
-            var record = {
-                col: x,
-                row: y,
-                newValue: value,
-                oldValue: obj.options.data[y][x],
-            }
-
-            if (obj.options.columns[x].editor) {
-                // Update data and cell
-                obj.options.data[y][x] = value;
-                obj.options.columns[x].editor.setValue(obj.records[y][x], value, force);
-            } else {
-                // Native functions
-                if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {
-                    // Unchecked all options
-                    if (obj.options.columns[x].type == 'radio') {
-                        for (var j = 0; j < obj.options.data.length; j++) {
-                            obj.options.data[j][x] = false;
-                        }
-                    }
-
-                    // Update data and cell
-                    obj.records[y][x].children[0].checked = (value == 1 || value == true || value == 'true' || value == 'TRUE') ? true : false;
-                    obj.options.data[y][x] = obj.records[y][x].children[0].checked;
-                } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
-                    // Update data and cell
-                    obj.options.data[y][x] = value;
-                    obj.records[y][x].innerHTML = obj.getDropDownValue(x, value);
-                } else if (obj.options.columns[x].type == 'calendar') {
-                    // Update calendar
-                    var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[x].options.format);
-                    // Update data and cell
-                    obj.options.data[y][x] = value;
-                    obj.records[y][x].innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[x].options.format);
-                } else if (obj.options.columns[x].type == 'color') {
-                    // Update color
-                    obj.options.data[y][x] = value;
-                    // Render
-                    if (obj.options.columns[x].render == 'square') {
-                        var color = document.createElement('div');
-                        color.className = 'color';
-                        color.style.backgroundColor = value;
-                        obj.records[y][x].innerHTML = '';
-                        obj.records[y][x].appendChild(color);
-                    } else {
-                    obj.records[y][x].style.color = value;
-                        obj.records[y][x].innerHTML = value;
-                    }
-                } else if (obj.options.columns[x].type == 'image') {
-                    value = ''+value;
-                    obj.options.data[y][x] = value;
-                    obj.records[y][x].innerHTML = '';
-                    if (value && value.substr(0, 10) == 'data:image') {
-                        var img = document.createElement('img');
-                        img.src = value;
-                        obj.records[y][x].appendChild(img);
-                    }
-                } else {
-                    // Update data and cell
-                    obj.options.data[y][x] = value;
-                    // Label
-                    if (('' + value).substr(0,1) == '='  && obj.options.parseFormulas == true) {
-                        value = obj.executeFormula(value, x, y);
-                    }
-                    if (obj.options.columns[x].mask) {
-                        var decimal = obj.options.columns[x].decimal || '.';
-                        value = '' + jSuites.mask.run(value, obj.options.columns[x].mask, decimal);
-                    }
-                    obj.records[y][x].innerHTML = value;
-
-                    // Handle big text inside a cell
-                    if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true || obj.records[y][x].innerHTML.length > 200)) {
-                        obj.records[y][x].style.whiteSpace = 'pre-wrap';
-                    } else {
-                        obj.records[y][x].style.whiteSpace = '';
-                    }
-                }
-            }
-
-            // Overflow
-            if (x > 0) {
-                if (obj.options.data[y][x] || (obj.options.columns[x].type != 'text' && obj.options.columns[x].type != 'number')) {
-                    obj.records[y][x-1].style.overflow = 'hidden';
-                } else {
-                    obj.records[y][x-1].style.overflow = '';
-                }
-            }
-
-            // On change
-            if (! obj.ignoreEvents) {
-                if (typeof(obj.options.onchange) == 'function') {
-                    obj.options.onchange(el, (obj.records[y] && obj.records[y][x] ? obj.records[y][x] : null), x, y, value, record.oldValue);
-                }
-            }
-        }
-
-        return record;
-    }
-
-    /**
-     * Helper function to copy data using the corner icon
-     */
-    obj.copyData = function(o, d) {
-        // Get data from all selected cells
-        var data = obj.getData(true);
-
-        // Selected cells
-        var t0 = obj.selectedContainer[1];
-        var t1 = obj.selectedContainer[3];
-
-        // Cells
-        var x1 = parseInt(o.getAttribute('data-x'));
-        var y1 = parseInt(o.getAttribute('data-y'));
-        var x2 = parseInt(d.getAttribute('data-x'));
-        var y2 = parseInt(d.getAttribute('data-y'));
-
-        // Records
-        var records = [];
-        var lineNumber = 1;
-        var breakControl = false;
-
-        // Copy data procedure
-        var posx = 0;
-        var posy = 0;
-
-        for (var j = y1; j <= y2; j++) {
-            // Skip hidden rows
-            if (obj.rows[j] && obj.rows[j].style.display == 'none') {
-                continue;
-            }
-
-            // Controls
-            if (data[posy] == undefined) {
-                posy = 0;
-            }
-            posx = 0;
-
-            // Data columns
-            for (var i = x1; i <= x2; i++) {
-                // Update non-readonly
-                if (obj.records[j][i] && ! obj.records[j][i].classList.contains('readonly') && obj.records[j][i].style.display != 'none' && breakControl == false) {
-                    // Stop if contains value
-                    if (! obj.selection.length) {
-                        if (obj.options.data[j][i] != '') {
-                            breakControl = true;
-                            continue;
-                        }
-                    }
-
-                    // Column
-                    if (data[posy] == undefined) {
-                        posx = 0;
-                    } else if (data[posy][posx] == undefined) {
-                        posx = 0;
-                    } else {
-                        var value = data[posy][posx];
-                    }
-
-                    if (value && t0 == t1 && obj.options.autoIncrement == true) {
-                        if (obj.options.columns[i].type == 'text' || obj.options.columns[i].type == 'number') {
-                            if ((''+value).substr(0,1) == '=') {
-                                var tokens = value.match(/([A-Z]+[0-9]+)/g);
-
-                                if (tokens) {
-                                    var affectedTokens = [];
-                                    for (var index = 0; index < tokens.length; index++) {
-                                        var position = jexcel.getIdFromColumnName(tokens[index], 1);
-                                        position[1] += lineNumber;
-                                        var token = jexcel.getColumnNameFromId([position[0], position[1]]);
-
-                                        if (token != tokens[index]) {
-                                            affectedTokens[tokens[index]] = token;
-                                        }
-                                    }
-                                    // Update formula
-                                    if (affectedTokens) {
-                                        value = obj.updateFormula(value, affectedTokens)
-                                    }
-                                }
-                            } else {
-                                if (value == Number(value)) {
-                                    value = Number(value) + lineNumber;
-                                }
-                            }
-                        } else if (obj.options.columns[i].type == 'calendar') {
-                            var date = new Date(value);
-                            date.setDate(date.getDate() + lineNumber);
-                            value = date.getFullYear() + '-' + parseInt(date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':00';
-                        }
-                    }
-
-                    records.push(obj.updateCell(i, j, value));
-
-                    // Update all formulas in the chain
-                    obj.updateFormulaChain(i, j, records);
-                }
-                posx++;
-            }
-            posy++;
-            lineNumber++;
-        }
-
-        // Update history
-        obj.setHistory({
-            action:'setValue',
-            records:records,
-            selection:obj.selectedCell,
-        });
-
-        // Update table with custom configuration if applicable
-        obj.updateTable();
-
-        // On after changes
-        obj.onafterchanges(el, records);
-    }
-
-    /**
-     * Refresh current selection
-     */
-    obj.refreshSelection = function() {
-        if (obj.selectedCell) {
-            obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-        }
-    }
-
-    /**
-     * Move coords to A1 in case ovelaps with an excluded cell
-     */
-    obj.conditionalSelectionUpdate = function(type, o, d) {
-        if (type == 1) {
-            if (obj.selectedCell && ((o >= obj.selectedCell[1] && o <= obj.selectedCell[3]) || (d >= obj.selectedCell[1] && d <= obj.selectedCell[3]))) {
-                obj.resetSelection();
-                return;
-            }
-        } else {
-            if (obj.selectedCell && ((o >= obj.selectedCell[0] && o <= obj.selectedCell[2]) || (d >= obj.selectedCell[0] && d <= obj.selectedCell[2]))) {
-                obj.resetSelection();
-                return;
-            }
-        }
-    }
-
-    /**
-     * Clear table selection
-     */
-    obj.resetSelection = function(blur) {
-        // Remove style
-        if (! obj.highlighted.length) {
-            var previousStatus = 0;
-        } else {
-            var previousStatus = 1;
-
-            for (var i = 0; i < obj.highlighted.length; i++) {
-                obj.highlighted[i].classList.remove('highlight');
-                obj.highlighted[i].classList.remove('highlight-left');
-                obj.highlighted[i].classList.remove('highlight-right');
-                obj.highlighted[i].classList.remove('highlight-top');
-                obj.highlighted[i].classList.remove('highlight-bottom');
-                obj.highlighted[i].classList.remove('highlight-selected');
-
-                var px = parseInt(obj.highlighted[i].getAttribute('data-x'));
-                var py = parseInt(obj.highlighted[i].getAttribute('data-y'));
-
-                // Check for merged cells
-                if (obj.highlighted[i].getAttribute('data-merged')) {
-                    var colspan = parseInt(obj.highlighted[i].getAttribute('colspan'));
-                    var rowspan = parseInt(obj.highlighted[i].getAttribute('rowspan'));
-                    var ux = colspan > 0 ? px + (colspan - 1) : px;
-                    var uy = rowspan > 0 ? py + (rowspan - 1): py;
-                } else {
-                    var ux = px;
-                    var uy = py;
-                }
-
-                // Remove selected from headers
-                for (var j = px; j <= ux; j++) {
-                    if (obj.headers[j]) {
-                        obj.headers[j].classList.remove('selected');
-                    }
-                }
-
-                // Remove selected from rows
-                for (var j = py; j <= uy; j++) {
-                    if (obj.rows[j]) {
-                        obj.rows[j].classList.remove('selected');
-                    }
-                }
-            }
-        }
-
-        // Reset highlighed cells
-        obj.highlighted = [];
-
-        // Reset
-        obj.selectedCell = null;
-
-        // Hide corner
-        obj.corner.style.top = '-2000px';
-        obj.corner.style.left = '-2000px';
-
-        if (obj.ignoreEvents != true && blur == true) {
-            if (obj.options.onblur) {
-                if (typeof(obj.options.onblur) == 'function') {
-                    if (previousStatus == 1) {
-                        obj.options.onblur(el);
-                    }
-                }
-            }
-        }
-
-        return previousStatus;
-    }
-
-    /**
-     * Update selection based on two cells
-     */
-    obj.updateSelection = function(el1, el2, origin) {
-        var x1 = el1.getAttribute('data-x');
-        var y1 = el1.getAttribute('data-y');
-        if (el2) {
-            var x2 = el2.getAttribute('data-x');
-            var y2 = el2.getAttribute('data-y');
-        } else {
-            var x2 = x1;
-            var y2 = y1;
-        }
-
-        obj.updateSelectionFromCoords(x1, y1, x2, y2, origin);
-    }
-
-    /**
-     * Update selection from coords
-     */
-    obj.updateSelectionFromCoords = function(x1, y1, x2, y2, origin) {
-        // Reset Selection
-        var updated = null;
-        var previousState = obj.resetSelection();
-
-        // Same element
-        if (x2 == null) {
-            x2 = x1;
-        }
-        if (y2 == null) {
-            y2 = y1;
-        }
-
-        // Selection must be within the existing data
-        if (x1 >= obj.headers.length) {
-            x1 = obj.headers.length - 1;
-        }
-        if (y1 >= obj.rows.length) {
-            y1 = obj.rows.length - 1;
-        }
-        if (x2 >= obj.headers.length) {
-            x2 = obj.headers.length - 1;
-        }
-        if (y2 >= obj.rows.length) {
-            y2 = obj.rows.length - 1;
-        }
-
-        // Keep selected cell
-        obj.selectedCell = [x1, y1, x2, y2];
-
-        // Select cells
-        if (x1 != null) {
-            // Add selected cell
-            if (obj.records[y1][x1]) {
-                obj.records[y1][x1].classList.add('highlight-selected');
-            }
-
-            // Origin & Destination
-            if (parseInt(x1) < parseInt(x2)) {
-                var px = parseInt(x1);
-                var ux = parseInt(x2);
-            } else {
-                var px = parseInt(x2);
-                var ux = parseInt(x1);
-            }
-
-            if (parseInt(y1) < parseInt(y2)) {
-                var py = parseInt(y1);
-                var uy = parseInt(y2);
-            } else {
-                var py = parseInt(y2);
-                var uy = parseInt(y1);
-            }
-
-            // Verify merged columns
-            for (var i = px; i <= ux; i++) {
-                for (var j = py; j <= uy; j++) {
-                    if (obj.records[j][i] && obj.records[j][i].getAttribute('data-merged')) {
-                        var x = parseInt(obj.records[j][i].getAttribute('data-x'));
-                        var y = parseInt(obj.records[j][i].getAttribute('data-y'));
-                        var colspan = parseInt(obj.records[j][i].getAttribute('colspan'));
-                        var rowspan = parseInt(obj.records[j][i].getAttribute('rowspan'));
-
-                        if (colspan > 1) {
-                            if (x < px) {
-                                px = x;
-                            }
-                            if (x + colspan > ux) {
-                                ux = x + colspan - 1;
-                            }
-                        }
-
-                        if (rowspan) {
-                            if (y < py) {
-                                py = y;
-
-                            }
-                            if (y + rowspan > uy) {
-                                uy = y + rowspan - 1;
-                            }
-                        }
-                    }
-                }
-            }
-
-            // Limits
-            var borderLeft = null;
-            var borderRight = null;
-            var borderTop = null;
-            var borderBottom = null;
-
-            // Vertical limits
-            for (var j = py; j <= uy; j++) {
-                if (obj.rows[j].style.display != 'none') {
-                    if (borderTop == null) {
-                        borderTop = j;
-                    }
-                    borderBottom = j;
-                }
-            }
-
-            // Redefining styles
-            for (var i = px; i <= ux; i++) {
-                for (var j = py; j <= uy; j++) {
-                    if (obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') {
-                        obj.records[j][i].classList.add('highlight');
-                        obj.highlighted.push(obj.records[j][i]);
-                    }
-                }
-
-                // Horizontal limits
-                if (obj.options.columns[i].type != 'hidden') {
-                    if (borderLeft == null) {
-                        borderLeft = i;
-                    }
-                    borderRight = i;
-                }
-            }
-
-            // Create borders
-            if (! borderLeft) {
-                borderLeft = 0;
-            }
-            if (! borderRight) {
-                borderRight = 0;
-            }
-            for (var i = borderLeft; i <= borderRight; i++) {
-                if (obj.options.columns[i].type != 'hidden') {
-                    // Top border
-                    if (obj.records[borderTop][i]) {
-                        obj.records[borderTop][i].classList.add('highlight-top');
-                    }
-                    // Bottom border
-                    if (obj.records[borderBottom][i]) {
-                        obj.records[borderBottom][i].classList.add('highlight-bottom');
-                    }
-                    // Add selected from headers
-                    obj.headers[i].classList.add('selected');
-                }
-            }
-
-            for (var j = borderTop; j <= borderBottom; j++) {
-                if (obj.rows[j].style.display != 'none') {
-                    // Left border
-                    obj.records[j][borderLeft].classList.add('highlight-left');
-                    // Right border
-                    obj.records[j][borderRight].classList.add('highlight-right');
-                    // Add selected from rows
-                    obj.rows[j].classList.add('selected');
-                }
-            }
-
-            obj.selectedContainer = [ borderLeft, borderTop, borderRight, borderBottom ];
-        }
-
-        // Handle events
-        if (obj.ignoreEvents != true) {
-            if (obj.options.onfocus) {
-                if (typeof(obj.options.onfocus) == 'function') {
-                    if (previousState == 0) {
-                        obj.options.onfocus(el);
-                    }
-                }
-            }
-
-            if (typeof(obj.options.onselection) == 'function') {
-                obj.options.onselection(el, borderLeft, borderTop, borderRight, borderBottom, origin);
-            }
-        }
-
-        // Find corner cell
-        obj.updateCornerPosition();
-    }
-
-    /**
-     * Remove copy selection
-     * 
-     * @return void
-     */
-    obj.removeCopySelection = function() {
-        // Remove current selection
-        for (var i = 0; i < obj.selection.length; i++) {
-            obj.selection[i].classList.remove('selection');
-            obj.selection[i].classList.remove('selection-left');
-            obj.selection[i].classList.remove('selection-right');
-            obj.selection[i].classList.remove('selection-top');
-            obj.selection[i].classList.remove('selection-bottom');
-        }
-
-        obj.selection = [];
-    }
-
-    /**
-     * Update copy selection
-     * 
-     * @param int x, y
-     * @return void
-     */
-    obj.updateCopySelection = function(x3, y3) {
-        // Remove selection
-        obj.removeCopySelection();
-
-        // Get elements first and last
-        var x1 = obj.selectedContainer[0];
-        var y1 = obj.selectedContainer[1];
-        var x2 = obj.selectedContainer[2];
-        var y2 = obj.selectedContainer[3];
-
-        if (x3 && y3) {
-            if (x3 - x2 > 0) {
-                var px = parseInt(x2) + 1;
-                var ux = parseInt(x3);
-            } else {
-                var px = parseInt(x3);
-                var ux = parseInt(x1) - 1;
-            }
-
-            if (y3 - y2 > 0) {
-                var py = parseInt(y2) + 1;
-                var uy = parseInt(y3);
-            } else {
-                var py = parseInt(y3);
-                var uy = parseInt(y1) - 1;
-            }
-
-            if (ux - px < uy - py) {
-                var px = parseInt(x1);
-                var ux = parseInt(x2);
-            } else {
-                var py = parseInt(y1);
-                var uy = parseInt(y2);
-            }
-
-            for (var j = py; j <= uy; j++) {
-                for (var i = px; i <= ux; i++) {
-                    if (obj.records[j][i] && obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') {
-                        obj.records[j][i].classList.add('selection');
-                        obj.records[py][i].classList.add('selection-top');
-                        obj.records[uy][i].classList.add('selection-bottom');
-                        obj.records[j][px].classList.add('selection-left');
-                        obj.records[j][ux].classList.add('selection-right');
-
-                        // Persist selected elements
-                        obj.selection.push(obj.records[j][i]);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Update corner position
-     * 
-     * @return void
-     */
-    obj.updateCornerPosition = function() {
-        // If any selected cells
-        if (! obj.highlighted.length) {
-            obj.corner.style.top = '-2000px';
-            obj.corner.style.left = '-2000px';
-        } else {
-            // Get last cell
-            var last = obj.highlighted[obj.highlighted.length-1];
-            var x1 = obj.content.getBoundingClientRect().left;
-            var y1 = obj.content.getBoundingClientRect().top;
-
-            var x2 = last.getBoundingClientRect().left;
-            var y2 = last.getBoundingClientRect().top;
-            var w2 = last.getBoundingClientRect().width;
-            var h2 = last.getBoundingClientRect().height;
-
-            var x = (x2 - x1) + obj.content.scrollLeft + w2 - 4;
-            var y = (y2 - y1) + obj.content.scrollTop + h2 - 4;
-
-            // Place the corner in the correct place
-            obj.corner.style.top = y + 'px';
-            obj.corner.style.left = x + 'px';
-        }
-    }
-
-    /**
-     * Update scroll position based on the selection
-     */
-    obj.updateScroll = function(direction) {
-        // jExcel Container information
-        var x1 = obj.content.getBoundingClientRect().left;
-        var y1 = obj.content.getBoundingClientRect().top;
-        var w1 = obj.content.getBoundingClientRect().width;
-        var h1 = obj.content.getBoundingClientRect().height;
-
-        // Direction Left or Up
-        var reference = obj.records[obj.selectedCell[3]][obj.selectedCell[2]];
-
-        var x2 = reference.getBoundingClientRect().left;
-        var y2 = reference.getBoundingClientRect().top;
-        var w2 = reference.getBoundingClientRect().width;
-        var h2 = reference.getBoundingClientRect().height;
-
-        // Direction
-        if (direction == 0 || direction == 1) {
-            var x = (x2 - x1) + obj.content.scrollLeft;
-            var y = (y2 - y1) + obj.content.scrollTop - 2;
-        } else {
-            var x = (x2 - x1) + obj.content.scrollLeft + w2;
-            var y = (y2 - y1) + obj.content.scrollTop + h2;
-        }
-
-        // Top position check
-        if (y > (obj.content.scrollTop + 30) && y < (obj.content.scrollTop + h1)) {
-            // In the viewport
-        } else {
-            // Out of viewport
-            if (y < obj.content.scrollTop + 30) {
-                obj.content.scrollTop = y - h2;
-            } else {
-                obj.content.scrollTop = y - (h1 - 2);
-            }
-        }
-
-        // Left position check - TODO: change that to the bottom border of the element
-        if (x > (obj.content.scrollLeft) && x < (obj.content.scrollLeft + w1)) {
-            // In the viewport
-        } else {
-            // Out of viewport
-            if (x < obj.content.scrollLeft + 30) {
-                obj.content.scrollLeft = x;
-                if (obj.content.scrollLeft < 50) {
-                    obj.content.scrollLeft = 0;
-                }
-            } else {
-                obj.content.scrollLeft = x - (w1 - 20);
-            }
-        }
-    }
-
-    /**
-     * Get the column width
-     * 
-     * @param int column column number (first column is: 0)
-     * @return int current width
-     */
-    obj.getWidth = function(column) {
-        if (! column) {
-            // Get all headers
-            var data = [];
-            for (var i = 0; i < obj.headers.length; i++) {
-                data.push(obj.options.columns[i].width);
-            }
-        } else {
-            // In case the column is an object
-            if (typeof(column) == 'object') {
-                column = $(column).getAttribute('data-x');
-            }
-
-            data = obj.colgroup[column].getAttribute('width')
-        }
-
-        return data;
-    }
-
-    /**
-     * Set the column width
-     * 
-     * @param int column number (first column is: 0)
-     * @param int new column width
-     * @param int old column width
-     */
-    obj.setWidth = function (column, width, oldWidth) {
-        if (width > 0) {
-            // In case the column is an object
-            if (typeof(column) == 'object') {
-                column = $(column).getAttribute('data-x');
-            }
-
-            // Oldwidth
-            if (! oldWidth) {
-                obj.colgroup[column].getAttribute('width');
-            }
-
-            // Set width
-            obj.colgroup[column].setAttribute('width', width);
-            obj.options.columns[column].width = width;
-
-            // Keeping history of changes
-            obj.setHistory({
-                action:'setWidth',
-                column:column,
-                oldValue:oldWidth,
-                newValue:width,
-            });
-
-            // On resize column
-            if (obj.ignoreEvents != true) {
-                if (typeof(obj.options.onresizecolumn) == 'function') {
-                    obj.options.onresizecolumn(el, column, width, oldWidth);
-                }
-            }
-
-            // Update corner position
-            obj.updateCornerPosition();
-        }
-    }
-
-    /**
-     * Set the row height
-     * 
-     * @param row - row number (first row is: 0)
-     * @param height - new row height
-     * @param oldHeight - old row height
-     */
-    obj.setHeight = function (row, height, oldHeight) {
-        if (height > 0) {
-            // In case the column is an object
-            if (typeof(row) == 'object') {
-                row = $(row).getAttribute('data-y');
-            }
-
-            // Oldwidth
-            if (! oldHeight) {
-                obj.rows[row].getAttribute('height');
-            }
-
-            // Set width
-            obj.rows[row].setAttribute('height', height);
-
-            // Keep options updated
-            if (! obj.options.rows[row]) {
-                obj.options.rows[row] = {};
-            }
-            obj.options.rows[row].height = height;
-
-            // Keeping history of changes
-            obj.setHistory({
-                action:'setHeight',
-                row:row,
-                oldValue:oldHeight,
-                newValue:height,
-            });
-
-            // On resize column
-            if (obj.ignoreEvents != true) {
-                if (typeof(obj.options.onresizerow) == 'function') {
-                    obj.options.onresizerow(el, row, height, oldHeight);
-                }
-            }
-
-            // Update corner position
-            obj.updateCornerPosition();
-        }
-    }
-
-    /**
-     * Get the row height
-     * 
-     * @param row - row number (first row is: 0)
-     * @return height - current row height
-     */
-    obj.getHeight = function(row) {
-        if (! row) {
-            // Get height of all rows
-            var data = [];
-            for (var j = 0; j < obj.rows.length; j++) {
-                var h = obj.rows[j].style.height;
-                if (h) {
-                    data[j] = h;
-                }
-            }
-        } else {
-            // In case the row is an object
-            if (typeof(row) == 'object') {
-                row = $(row).getAttribute('data-y');
-            }
-
-            var data = obj.rows[row].style.height;
-        }
-
-        return data;
-    }
-
-    /**
-     * Get the column title
-     * 
-     * @param column - column number (first column is: 0)
-     * @param title - new column title
-     */
-    obj.getHeader = function(column) {
-        return obj.headers[column].innerText;
-    }
-
-    /**
-     * Set the column title
-     * 
-     * @param column - column number (first column is: 0)
-     * @param title - new column title
-     */
-    obj.setHeader = function(column, newValue) {
-        if (obj.headers[column]) {
-            var oldValue = obj.headers[column].innerText;
-
-            if (! newValue) {
-                newValue = prompt(obj.options.text.columnName, oldValue)
-            }
-
-            if (newValue) {
-                obj.headers[column].innerHTML = newValue;
-            }
-
-            obj.setHistory({
-                action: 'setHeader',
-                column: column,
-                oldValue: oldValue,
-                newValue: newValue
-            });
-
-            // On change
-            if (! obj.ignoreEvents) {
-                if (typeof(obj.options.onchangeheader) == 'function') {
-                    obj.options.onchangeheader(el, column, oldValue, newValue);
-                }
-            }
-        }
-    }
-
-    /**
-     * Get the headers
-     * 
-     * @param asArray
-     * @return mixed
-     */
-    obj.getHeaders = function (asArray) {
-        var title = [];
-
-        for (var i = 0; i < obj.headers.length; i++) {
-            title.push(obj.getHeader(i));
-        }
-
-        return asArray ? title : title.join(obj.options.csvDelimiter);
-    }
-
-    /**
-     * Get meta information from cell(s)
-     * 
-     * @return integer
-     */
-    obj.getMeta = function(cell, key) {
-        if (! cell) {
-            return obj.options.meta;
-        } else {
-            if (key) {
-                return obj.options.meta[cell] && obj.options.meta[cell][key] ? obj.options.meta[cell][key] : null;
-            } else {
-                return obj.options.meta[cell] ? obj.options.meta[cell] : null;
-            }
-        }
-    }
-
-    /**
-     * Set meta information to cell(s)
-     * 
-     * @return integer
-     */
-    obj.setMeta = function(o, k, v) {
-        if (! obj.options.meta) {
-            obj.options.meta = {}
-        }
-
-        if (k && v) {
-            // Set data value
-            if (! obj.options.meta[o]) {
-                obj.options.meta[o] = {};
-            }
-            obj.options.meta[o][k] = v;
-        } else {
-            // Apply that for all cells
-            var keys = Object.keys(o);
-            for (var i = 0; i < keys.length; i++) {
-                if (! obj.options.meta[keys[i]]) {
-                    obj.options.meta[keys[i]] = {};
-                }
-
-                var prop = Object.keys(o[keys[i]]);
-                for (var j = 0; j < prop.length; j++) {
-                    obj.options.meta[keys[i]][prop[j]] = o[keys[i]][prop[j]];
-                }
-            }
-        }
-
-        if (obj.ignoreEvents != true) {
-            if (typeof(obj.options.onchangemeta) == 'function') {
-                obj.options.onchangemeta(el, o, k, v);
-            }
-        }
-    }
-
-    /**
-     * Update meta information
-     * 
-     * @return integer
-     */
-    obj.updateMeta = function(affectedCells) {
-        if (obj.options.meta) {
-            var newMeta = {};
-            var keys = Object.keys(obj.options.meta);
-            for (var i = 0; i < keys.length; i++) {
-                if (affectedCells[keys[i]]) {
-                    newMeta[affectedCells[keys[i]]] = obj.options.meta[keys[i]];
-                } else {
-                    newMeta[keys[i]] = obj.options.meta[keys[i]];
-                }
-            }
-            // Update meta information
-            obj.options.meta = newMeta;
-        }
-    }
-
-    /**
-     * Get style information from cell(s)
-     * 
-     * @return integer
-     */
-    obj.getStyle = function(cell, key) {
-        // Cell
-        if (! cell) {
-            // Control vars
-            var data = {};
-
-            // Column and row length
-            var x = obj.options.data[0].length;
-            var y = obj.options.data.length;
-
-            // Go through the columns to get the data
-            for (var j = 0; j < y; j++) {
-                for (var i = 0; i < x; i++) {
-                    // Value
-                    var v = key ? obj.records[j][i].style[key] : obj.records[j][i].getAttribute('style');
-
-                    // Any meta data for this column?
-                    if (v) {
-                        // Column name
-                        var k = jexcel.getColumnNameFromId([i, j]);
-                        // Value
-                        data[k] = v;
-                    }
-                }
-            }
-
-           return data;
-        } else {
-            cell = jexcel.getIdFromColumnName(cell, true);
-
-            return key ? obj.records[cell[1]][cell[0]].style[key] : obj.records[cell[1]][cell[0]].getAttribute('style');
-        }
-    },
-
-    obj.resetStyle = function(o, ignoreHistoryAndEvents) {
-        var keys = Object.keys(o);
-        for (var i = 0; i < keys.length; i++) {
-            // Position
-            var cell = jexcel.getIdFromColumnName(keys[i], true);
-            if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) {
-                obj.records[cell[1]][cell[0]].setAttribute('style', '');
-            }
-        }
-        obj.setStyle(o, null, null, null, ignoreHistoryAndEvents);
-    }
-
-    /**
-     * Set meta information to cell(s)
-     * 
-     * @return integer
-     */
-    obj.setStyle = function(o, k, v, force, ignoreHistoryAndEvents) {
-        var newValue = {};
-        var oldValue = {};
-
-        // Apply style
-        var applyStyle = function(cellId, key, value) {
-            // Position
-            var cell = jexcel.getIdFromColumnName(cellId, true);
-
-            if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) {
-                // Current value
-                var currentValue = obj.records[cell[1]][cell[0]].style[key];
-
-                // Change layout
-                if (currentValue == value && ! force) {
-                    value = '';
-                    obj.records[cell[1]][cell[0]].style[key] = '';
-                } else {
-                    obj.records[cell[1]][cell[0]].style[key] = value;
-                }
-
-                // History
-                if (! oldValue[cellId]) {
-                    oldValue[cellId] = [];
-                }
-                if (! newValue[cellId]) {
-                    newValue[cellId] = [];
-                }
-
-                oldValue[cellId].push([key + ':' + currentValue]);
-                newValue[cellId].push([key + ':' + value]);
-            }
-        }
-
-        if (k && v) {
-            // Get object from string
-            if (typeof(o) == 'string') {
-                applyStyle(o, k, v);
-            } else {
-                // Avoid duplications
-                var oneApplication = [];
-                // Apply that for all cells
-                for (var i = 0; i < o.length; i++) {
-                    var x = o[i].getAttribute('data-x');
-                    var y = o[i].getAttribute('data-y');
-                    var cellName = jexcel.getColumnNameFromId([x, y]);
-                    // This happens when is a merged cell
-                    if (! oneApplication[cellName]) {
-                        applyStyle(cellName, k, v);
-                        oneApplication[cellName] = true;
-                    }
-                }
-            }
-        } else {
-            var keys = Object.keys(o);
-            for (var i = 0; i < keys.length; i++) {
-                var style = o[keys[i]];
-                if (typeof(style) == 'string') {
-                    style = style.split(';');
-                }
-                for (var j = 0; j < style.length; j++) {
-                    if (typeof(style[j]) == 'string') {
-                        style[j] = style[j].split(':');
-                    }
-                    // Apply value
-                    if (style[j][0].trim()) {
-                        applyStyle(keys[i], style[j][0].trim(), style[j][1]);
-                    }
-                }
-            }
-        }
-
-        var keys = Object.keys(oldValue);
-        for (var i = 0; i < keys.length; i++) {
-            oldValue[keys[i]] = oldValue[keys[i]].join(';');
-        }
-        var keys = Object.keys(newValue);
-        for (var i = 0; i < keys.length; i++) {
-            newValue[keys[i]] = newValue[keys[i]].join(';');
-        }
-
-        if (! ignoreHistoryAndEvents) {
-            // Keeping history of changes
-            obj.setHistory({
-                action: 'setStyle',
-                oldValue: oldValue,
-                newValue: newValue,
-            });
-        }
-
-        if (obj.ignoreEvents != true) {
-            if (typeof(obj.options.onchangestyle) == 'function') {
-                obj.options.onchangestyle(el, o, k, v);
-            }
-        }
-    }
-
-    /**
-     * Get cell comments
-     */
-    obj.getComments = function(cell, withAuthor) {
-        if (typeof(cell) == 'string') {
-            var cell = jexcel.getIdFromColumnName(cell, true);
-        }
-
-        if (withAuthor) {
-            return [obj.records[cell[1]][cell[0]].getAttribute('title'), obj.records[cell[1]][cell[0]].getAttribute('author')];
-        } else {
-            return obj.records[cell[1]][cell[0]].getAttribute('title') || '';
-        }
-    }
-
-    /**
-     * Set cell comments
-     */
-    obj.setComments = function(cellId, comments, author) {
-        if (typeof(cellId) == 'string') {
-            var cell = jexcel.getIdFromColumnName(cellId, true);
-        } else {
-            var cell = cellId;
-        }
-
-        // Keep old value
-        var title = obj.records[cell[1]][cell[0]].getAttribute('title');
-        var author = obj.records[cell[1]][cell[0]].getAttribute('data-author');
-        var oldValue = [ title, author ];
-
-        // Set new values
-        obj.records[cell[1]][cell[0]].setAttribute('title', comments ? comments : '');
-        obj.records[cell[1]][cell[0]].setAttribute('data-author', author ? author : '');
-
-        // Remove class if there is no comment
-        if (comments) {
-            obj.records[cell[1]][cell[0]].classList.add('jexcel_comments');
-        } else {
-            obj.records[cell[1]][cell[0]].classList.remove('jexcel_comments');
-        }
-
-        // Save history
-        obj.setHistory({
-            action:'setComments',
-            column: cellId,
-            newValue: [ comments, author ],
-            oldValue: oldValue,
-        });
-    }
-
-    /**
-     * Get table config information
-     */
-    obj.getConfig = function() {
-        var options = obj.options;
-        options.style = obj.getStyle();
-        options.mergeCells = obj.getMerge();
-
-        return options;
-    }
-
-    /**
-     * Sort data and reload table
-     */
-    obj.orderBy = function(column, order) {
-        if (column >= 0) {
-            // Merged cells
-            if (Object.keys(obj.options.mergeCells).length > 0) {
-                if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
-                    return false;
-                } else {
-                    // Remove merged cells
-                    obj.destroyMerged();
-                }
-            }
-
-            // Direction
-            if (order == null) {
-                order = obj.headers[column].classList.contains('arrow-down') ? 1 : 0;
-            } else {
-                order = order ? 1 : 0;
-            }
-
-            // Filter
-            Array.prototype.orderBy = function(p, o) {
-                return this.slice(0).sort(function(a, b) {
-                    var valueA = a[p] == '' ? '' : Number(a[p]) == a[p] ? Number(a[p]) : a[p].toLowerCase();
-                    var valueB = b[p] == '' ? '' : Number(b[p]) == b[p] ? Number(b[p]) : b[p].toLowerCase();
-
-                    if (! o) {
-                        return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? 1 : (valueA < valueB) ? -1 :  0;
-                    } else {
-                        return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? -1 : (valueA < valueB) ? 1 :  0;
-                    }
-                });
-            }
-
-            // Test order
-            var temp = [];
-            if (obj.options.columns[column].type == 'calendar' ||
-                obj.options.columns[column].type == 'checkbox' ||
-                obj.options.columns[column].type == 'radio') {
-                for (var j = 0; j < obj.options.data.length; j++) {
-                    temp[j] = [ j, obj.options.data[j][column] ];
-                }
-            } else {
-                for (var j = 0; j < obj.options.data.length; j++) {
-                    temp[j] = [ j, obj.records[j][column].innerHTML ];
-                }
-            }
-            temp = temp.orderBy(1, order);
-
-            // Save history
-            var newValue = [];
-            for (var j = 0; j < temp.length; j++) {
-                newValue[j] = temp[j][0];
-            }
-
-            // Save history
-            obj.setHistory({
-                action: 'orderBy',
-                rows: newValue,
-                column: column,
-                order: order,
-            });
-
-            // Update order
-            obj.updateOrderArrow(column, order);
-            obj.updateOrder(newValue);
-
-            // On sort event
-            if (obj.ignoreEvents != true) {
-                if (typeof(obj.options.onsort) == 'function') {
-                    obj.options.onsort(el, column, order);
-                }
-            }
-
-            return true;
-        }
-    }
-
-    /**
-     * Update order arrow
-     */
-    obj.updateOrderArrow = function(column, order) {
-        // Remove order
-        for (var i = 0; i < obj.headers.length; i++) {
-            obj.headers[i].classList.remove('arrow-up');
-            obj.headers[i].classList.remove('arrow-down');
-        }
-
-        // No order specified then toggle order
-        if (order) {
-            obj.headers[column].classList.add('arrow-up');
-        } else {
-            obj.headers[column].classList.add('arrow-down');
-        }
-    }
-
-    /**
-     * Update rows position
-     */
-    obj.updateOrder = function(rows) {
-        // History
-        var data = []
-        for (var j = 0; j < rows.length; j++) {
-            data[j] = obj.options.data[rows[j]];
-        }
-        obj.options.data = data;
-
-        var data = []
-        for (var j = 0; j < rows.length; j++) {
-            data[j] = obj.records[rows[j]];
-        }
-        obj.records = data;
-
-        var data = []
-        for (var j = 0; j < rows.length; j++) {
-            data[j] = obj.rows[rows[j]];
-        }
-        obj.rows = data;
-
-        // Update references
-        obj.updateTableReferences();
-
-        // Redo search
-        if (obj.searchInput.value) {
-            obj.search(obj.searchInput.value);
-        } else {
-            // Create page
-            obj.results = null;
-            obj.pageNumber = 0;
-
-            if (obj.options.pagination > 0) {
-                obj.page(0);
-            } else if (obj.options.lazyLoading == true) {
-                obj.loadPage(0);
-            } else {
-                for (var j = 0; j < obj.rows.length; j++) {
-                    obj.tbody.appendChild(obj.rows[j]);
-                }
-            }
-        }
-    }
-
-    /**
-     * Move row
-     * 
-     * @return void
-     */
-    obj.moveRow = function(o, d, ignoreDom) {
-        if (Object.keys(obj.options.mergeCells).length > 0) {
-            if (obj.isRowMerged(d).length) {
-                if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
-                    return false;
-                } else {
-                    obj.destroyMerged();
-                }
-            }
-        }
-
-        if (obj.options.search == true) {
-            if (obj.results && obj.results.length != obj.rows.length) {
-                if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {
-                    obj.resetSearch();
-                } else {
-                    return false;
-                }
-            }
-
-            obj.results = null;
-        }
-
-        if (! ignoreDom) {
-            if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[d]) >= 0) {
-                if (o > d) {
-                    obj.tbody.insertBefore(obj.rows[o], obj.rows[d]);
-                } else {
-                    obj.tbody.insertBefore(obj.rows[o], obj.rows[d].nextSibling);
-                }
-            } else {
-                obj.tbody.removeChild(obj.rows[o]);
-            }
-        }
-
-        // Place references in the correct position
-        obj.rows.splice(d, 0, obj.rows.splice(o, 1)[0]);
-        obj.records.splice(d, 0, obj.records.splice(o, 1)[0]);
-        obj.options.data.splice(d, 0, obj.options.data.splice(o, 1)[0]);
-
-        // Respect pagination
-        if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) {
-            obj.page(obj.pageNumber);
-        }
-
-        // Keeping history of changes
-        obj.setHistory({
-            action:'moveRow',
-            oldValue: o,
-            newValue: d,
-        });
-
-        // Update table references
-        obj.updateTableReferences();
-
-        // Events
-        if (obj.ignoreEvents != true) {
-            if (typeof(obj.options.onmoverow) == 'function') {
-                obj.options.onmoverow(el, o, d);
-            }
-        }
-    }
-
-    /**
-     * Insert a new row
-     * 
-     * @param mixed - number of blank lines to be insert or a single array with the data of the new row
-     * @param rowNumber
-     * @param insertBefore
-     * @return void
-     */
-    obj.insertRow = function(mixed, rowNumber, insertBefore) {
-        // Configuration
-        if (obj.options.allowInsertRow == true) {
-            // Records
-            var records = [];
-
-            // Data to be insert
-            var data = [];
-
-            // The insert could be lead by number of rows or the array of data
-            if (mixed > 0) {
-                var numOfRows = mixed;
-            } else {
-                var numOfRows = 1;
-
-                if (mixed) {
-                    data = mixed;
-                }
-            }
-
-            // Direction
-            var insertBefore = insertBefore ? true : false;
-
-            // Current column number
-            var lastRow = obj.options.data.length - 1;
-
-            if (rowNumber == undefined || rowNumber >= parseInt(lastRow) || rowNumber < 0) {
-                rowNumber = lastRow;
-            }
-
-            // Onbeforeinsertrow
-            if (typeof(obj.options.onbeforeinsertrow) == 'function') {
-                if (! obj.options.onbeforeinsertrow(el, rowNumber, numOfRows, insertBefore)) {
-                    console.log('onbeforeinsertrow returned false');
-
-                    return false;
-                }
-            }
-
-            // Merged cells
-            if (Object.keys(obj.options.mergeCells).length > 0) {
-                if (obj.isRowMerged(rowNumber, insertBefore).length) {
-                    if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
-                        return false;
-                    } else {
-                        obj.destroyMerged();
-                    }
-                }
-            }
-
-            // Clear any search
-            if (obj.options.search == true) {
-                if (obj.results && obj.results.length != obj.rows.length) {
-                    if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {
-                        obj.resetSearch();
-                    } else {
-                        return false;
-                    }
-                }
-
-                obj.results = null;
-            }
-
-            // Insertbefore
-            var rowIndex = (! insertBefore) ? rowNumber + 1 : rowNumber;
-
-            // Keep the current data
-            var currentRecords = obj.records.splice(rowIndex);
-            var currentData = obj.options.data.splice(rowIndex);
-            var currentRows = obj.rows.splice(rowIndex);
-
-            // Adding lines
-            var rowRecords = [];
-            var rowData = [];
-            var rowNode = [];
-
-            for (var row = rowIndex; row < (numOfRows + rowIndex); row++) {
-                // Push data to the data container
-                obj.options.data[row] = [];
-                for (var col = 0; col < obj.options.columns.length; col++) {
-                    obj.options.data[row][col]  = data[col] ? data[col] : '';
-                }
-                // Create row
-                var tr = obj.createRow(row, obj.options.data[row]);
-                // Append node
-                if (! currentRows[0] || Array.prototype.indexOf.call(obj.tbody.children, currentRows[0]) >= 0) {
-                    obj.tbody.insertBefore(tr, currentRows[0]);
-                }
-                // Record History
-                rowRecords.push(obj.records[row]);
-                rowData.push(obj.options.data[row]);
-                rowNode.push(tr);
-            }
-
-            // Copy the data back to the main data
-            Array.prototype.push.apply(obj.records, currentRecords);
-            Array.prototype.push.apply(obj.options.data, currentData);
-            Array.prototype.push.apply(obj.rows, currentRows);
-
-            // Respect pagination
-            if (obj.options.pagination > 0) {
-                obj.page(obj.pageNumber);
-            }
-
-            // Keep history
-            obj.setHistory({
-                action: 'insertRow',
-                rowNumber: rowNumber,
-                numOfRows: numOfRows,
-                insertBefore: insertBefore,
-                rowRecords: rowRecords,
-                rowData: rowData,
-                rowNode: rowNode,
-            });
-
-            // Remove table references
-            obj.updateTableReferences();
-
-            // Events
-            if (obj.ignoreEvents != true) {
-                if (typeof(obj.options.oninsertrow) == 'function') {
-                    obj.options.oninsertrow(el, rowNumber, numOfRows, rowRecords, insertBefore);
-                }
-            }
-        }
-    }
-
-    /**
-     * Delete a row by number
-     * 
-     * @param integer rowNumber - row number to be excluded
-     * @param integer numOfRows - number of lines
-     * @return void
-     */
-    obj.deleteRow = function(rowNumber, numOfRows) {
-        // Global Configuration
-        if (obj.options.allowDeleteRow == true) {
-            if (obj.options.allowDeletingAllRows == true || obj.options.data.length > 1) {
-                // Delete row definitions
-                if (rowNumber == undefined) {
-                    var number = obj.getSelectedRows();
-
-                    if (! number[0]) {
-                        rowNumber = obj.options.data.length - 1;
-                        numOfRows = 1;
-                    } else {
-                        rowNumber = parseInt(number[0].getAttribute('data-y'));
-                        numOfRows = number.length;
-                    }
-                }
-
-                // Last column
-                var lastRow = obj.options.data.length - 1;
-
-                if (rowNumber == undefined || rowNumber > lastRow || rowNumber < 0) {
-                    rowNumber = lastRow;
-                }
-
-                if (! numOfRows) {
-                    numOfRows = 1;
-                }
-
-                // Do not delete more than the number of recoreds
-                if (rowNumber + numOfRows >= obj.options.data.length) {
-                    numOfRows = obj.options.data.length - rowNumber;
-                }
-
-                // Onbeforedeleterow
-                if (typeof(obj.options.onbeforedeleterow) == 'function') {
-                    if (! obj.options.onbeforedeleterow(el, rowNumber, numOfRows)) {
-                        console.log('onbeforedeleterow returned false');
-                        return false;
-                    }
-                }
-
-                if (parseInt(rowNumber) > -1) {
-                    // Merged cells
-                    var mergeExists = false;
-                    if (Object.keys(obj.options.mergeCells).length > 0) {
-                        for (var row = rowNumber; row < rowNumber + numOfRows; row++) {
-                            if (obj.isRowMerged(row, false).length) {
-                                mergeExists = true;
-                            }
-                        }
-                    }
-                    if (mergeExists) {
-                        if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
-                            return false;
-                        } else {
-                            obj.destroyMerged();
-                        }
-                    }
-
-                    // Clear any search
-                    if (obj.options.search == true) {
-                        if (obj.results && obj.results.length != obj.rows.length) {
-                            if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {
-                                obj.resetSearch();
-                            } else {
-                                return false;
-                            }
-                        }
-
-                        obj.results = null;
-                    }
-
-                    // Remove node
-                    for (var row = rowNumber; row < rowNumber + numOfRows; row++) {
-                        if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[row]) >= 0) {
-                            obj.rows[row].className = '';
-                            obj.rows[row].parentNode.removeChild(obj.rows[row]);
-                        }
-                    }
-
-                    // Remove data
-                    var rowRecords = obj.records.splice(rowNumber, numOfRows);
-                    var rowData = obj.options.data.splice(rowNumber, numOfRows);
-                    var rowNode = obj.rows.splice(rowNumber, numOfRows);
-
-                    // Respect pagination
-                    if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) {
-                        obj.page(obj.pageNumber);
-                    }
-
-                    // Remove selection
-                    obj.conditionalSelectionUpdate(1, rowNumber, (rowNumber + numOfRows) - 1);
-
-                    // Keep history
-                    obj.setHistory({
-                        action: 'deleteRow',
-                        rowNumber: rowNumber,
-                        numOfRows: numOfRows,
-                        insertBefore: 1,
-                        rowRecords: rowRecords,
-                        rowData: rowData,
-                        rowNode: rowNode
-                    });
-
-                    // Remove table references
-                    obj.updateTableReferences();
-
-                    // Events
-                    if (obj.ignoreEvents != true) {
-                        if (typeof(obj.options.ondeleterow) == 'function') {
-                            obj.options.ondeleterow(el, rowNumber, numOfRows, rowRecords);
-                        }
-                    }
-                }
-            } else {
-                console.error('JEXCEL. It is not possible to delete the last row');
-            }
-        }
-    }
-
-
-    /**
-     * Move column
-     * 
-     * @return void
-     */
-    obj.moveColumn = function(o, d) {
-        if (Object.keys(obj.options.mergeCells).length > 0) {
-            if (obj.isColMerged(d).length) {
-                if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
-                    return false;
-                } else {
-                    obj.destroyMerged();
-                }
-            }
-        }
-
-        var o = parseInt(o);
-        var d = parseInt(d);
-
-        if (o > d) {
-            obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d]);
-            obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d]);
-
-            for (var j = 0; j < obj.rows.length; j++) {
-                obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d]);
-            }
-        } else {
-            obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d].nextSibling);
-            obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d].nextSibling);
-
-            for (var j = 0; j < obj.rows.length; j++) {
-                obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d].nextSibling);
-            }
-        }
-
-        obj.options.columns.splice(d, 0, obj.options.columns.splice(o, 1)[0]);
-        obj.headers.splice(d, 0, obj.headers.splice(o, 1)[0]);
-        obj.colgroup.splice(d, 0, obj.colgroup.splice(o, 1)[0]);
-
-        for (var j = 0; j < obj.rows.length; j++) {
-            obj.options.data[j].splice(d, 0, obj.options.data[j].splice(o, 1)[0]);
-            obj.records[j].splice(d, 0, obj.records[j].splice(o, 1)[0]);
-        }
-
-        // Keeping history of changes
-        obj.setHistory({
-            action:'moveColumn',
-            oldValue: o,
-            newValue: d,
-        });
-
-        // Update table references
-        obj.updateTableReferences();
-
-        // Events
-        if (obj.ignoreEvents != true) {
-            if (typeof(obj.options.onmovecolumn) == 'function') {
-                obj.options.onmovecolumn(el, o, d);
-            }
-        }
-    }
-
-
-    /**
-     * Insert a new column
-     * 
-     * @param mixed - num of columns to be added or data to be added in one single column
-     * @param int columnNumber - number of columns to be created
-     * @param bool insertBefore
-     * @param object properties - column properties
-     * @return void
-     */
-    obj.insertColumn = function(mixed, columnNumber, insertBefore, properties) {
-        // Configuration
-        if (obj.options.allowInsertColumn == true) {
-            // Records
-            var records = [];
-
-            // Data to be insert
-            var data = [];
-
-            // The insert could be lead by number of rows or the array of data
-            if (mixed > 0) {
-                var numOfColumns = mixed;
-            } else {
-                var numOfColumns = 1;
-
-                if (mixed) {
-                    data = mixed;
-                }
-            }
-
-            // Direction
-            var insertBefore = insertBefore ? true : false;
-
-            // Current column number
-            var lastColumn = obj.options.columns.length - 1;
-
-            // Confirm position
-            if (columnNumber == undefined || columnNumber >= parseInt(lastColumn) || columnNumber < 0) {
-                columnNumber = lastColumn;
-            }
-
-            // Onbeforeinsertcolumn
-            if (typeof(obj.options.onbeforeinsertcolumn) == 'function') {
-                if (! obj.options.onbeforeinsertcolumn(el, columnNumber, numOfColumns, insertBefore)) {
-                    console.log('onbeforeinsertcolumn returned false');
-
-                    return false;
-                }
-            }
-
-            // Merged cells
-            if (Object.keys(obj.options.mergeCells).length > 0) {
-                if (obj.isColMerged(columnNumber, insertBefore).length) {
-                    if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
-                        return false;
-                    } else {
-                        obj.destroyMerged();
-                    }
-                }
-            }
-
-            // Create default properties
-            if (! properties) {
-                properties = [];
-            }
-
-            for (var i = 0; i < numOfColumns; i++) {
-                if (! properties[i]) {
-                    properties[i] = { type:'text', source:[], options:[], width:obj.options.defaultColWidth, align:obj.options.defaultColAlign };
-                }
-            }
-
-            // Insert before
-            var columnIndex = (! insertBefore) ? columnNumber + 1 : columnNumber;
-            obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, properties);
-
-            // Open space in the containers
-            var currentHeaders = obj.headers.splice(columnIndex);
-            var currentColgroup = obj.colgroup.splice(columnIndex);
-
-            // History
-            var historyHeaders = [];
-            var historyColgroup = [];
-            var historyRecords = [];
-            var historyData = [];
-
-            // Add new headers
-            for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) {
-                obj.createCellHeader(col);
-                obj.headerContainer.insertBefore(obj.headers[col], obj.headerContainer.children[col+1]);
-                obj.colgroupContainer.insertBefore(obj.colgroup[col], obj.colgroupContainer.children[col+1]);
-
-                historyHeaders.push(obj.headers[col]);
-                historyColgroup.push(obj.colgroup[col]);
-            }
-
-            // Adding visual columns
-            for (var row = 0; row < obj.options.data.length; row++) {
-                // Keep the current data
-                var currentData = obj.options.data[row].splice(columnIndex);
-                var currentRecord = obj.records[row].splice(columnIndex);
-
-                // History
-                historyData[row] = [];
-                historyRecords[row] = [];
-
-                for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) {
-                    // New value
-                    var value = data[row] ? data[row] : '';
-                    obj.options.data[row][col] = value;
-                    // New cell
-                    var td = obj.createCell(col, row, obj.options.data[row][col]);
-                    obj.records[row][col] = td;
-                    // Add cell to the row
-                    if (obj.rows[row]) {
-                        obj.rows[row].insertBefore(td, obj.rows[row].children[col+1]);
-                    }
-
-                    // Record History
-                    historyData[row].push(value);
-                    historyRecords[row].push(td);
-                }
-
-                // Copy the data back to the main data
-                Array.prototype.push.apply(obj.options.data[row], currentData);
-                Array.prototype.push.apply(obj.records[row], currentRecord);
-            }
-
-            Array.prototype.push.apply(obj.headers, currentHeaders);
-            Array.prototype.push.apply(obj.colgroup, currentColgroup);
-
-            // Adjust nested headers
-            if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
-                // Flexible way to handle nestedheaders
-                if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
-                    for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
-                        var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + numOfColumns;
-                        obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;
-                        obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);
-                    }
-                } else {
-                    var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + numOfColumns;
-                    obj.options.nestedHeaders[0].colspan = colspan;
-                    obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);
-                }
-            }
-
-            // Keep history
-            obj.setHistory({
-                action: 'insertColumn',
-                columnNumber:columnNumber,
-                numOfColumns:numOfColumns,
-                insertBefore:insertBefore,
-                columns:properties,
-                headers:historyHeaders,
-                colgroup:historyColgroup,
-                records:historyRecords,
-                data:historyData,
-            });
-
-            // Remove table references
-            obj.updateTableReferences();
-
-            // Events
-            if (obj.ignoreEvents != true) {
-                if (typeof(obj.options.oninsertcolumn) == 'function') {
-                    obj.options.oninsertcolumn(el, columnNumber, numOfColumns);
-                }
-            }
-        }
-    }
-
-    /**
-     * Delete a column by number
-     * 
-     * @param integer columnNumber - reference column to be excluded
-     * @param integer numOfColumns - number of columns to be excluded from the reference column
-     * @return void
-     */
-    obj.deleteColumn = function(columnNumber, numOfColumns) {
-        // Global Configuration
-        if (obj.options.allowDeleteColumn == true) {
-            if (obj.headers.length > 1) {
-                // Delete column definitions
-                if (columnNumber == undefined) {
-                    var number = obj.getSelectedColumns(true);
-
-                    if (! number.length) {
-                        // Remove last column
-                        columnNumber = obj.headers.length - 1;
-                        numOfColumns = 1;
-                    } else {
-                        // Remove selected
-                        columnNumber = parseInt(number[0]);
-                        numOfColumns = parseInt(number.length);
-                    }
-                }
-
-                // Lasat column
-                var lastColumn = obj.options.data[0].length - 1;
-
-                if (columnNumber == undefined || columnNumber > lastColumn || columnNumber < 0) {
-                    columnNumber = lastColumn;
-                }
-
-                // Minimum of columns to be delete is 1
-                if (! numOfColumns) {
-                    numOfColumns = 1;
-                }
-
-
-
-                // Can't delete more than the limit of the table
-                if (numOfColumns > obj.options.data[0].length - columnNumber) {
-                    numOfColumns = obj.options.data[0].length - columnNumber;
-                }
-
-                // onbeforedeletecolumn
-                if (typeof(obj.options.onbeforedeletecolumn) == 'function') {
-                   if (! obj.options.onbeforedeletecolumn(el, columnNumber, numOfColumns)) {
-                      console.log('onbeforedeletecolumn returned false');
-                      return false;
-                   }
-                }
-
-                // Can't remove the last column
-                if (parseInt(columnNumber) > -1) {
-                    // Merged cells
-                    var mergeExists = false;
-                    if (Object.keys(obj.options.mergeCells).length > 0) {
-                        for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {
-                            if (obj.isColMerged(col, false).length) {
-                                mergeExists = true;
-                            }
-                        }
-                    }
-                    if (mergeExists) {
-                        if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
-                            return false;
-                        } else {
-                            obj.destroyMerged();
-                        }
-                    }
-
-                    // Delete the column properties
-                    var columns = obj.options.columns.splice(columnNumber, numOfColumns);
-
-                    for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {
-                        obj.colgroup[col].className = '';
-                        obj.headers[col].className = '';
-                        obj.colgroup[col].parentNode.removeChild(obj.colgroup[col]);
-                        obj.headers[col].parentNode.removeChild(obj.headers[col]);
-                    }
-
-                    var historyHeaders = obj.headers.splice(columnNumber, numOfColumns);
-                    var historyColgroup = obj.colgroup.splice(columnNumber, numOfColumns);
-                    var historyRecords = [];
-                    var historyData = [];
-
-                    for (var row = 0; row < obj.options.data.length; row++) {
-                        for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {
-                            obj.records[row][col].className = '';
-                            obj.records[row][col].parentNode.removeChild(obj.records[row][col]);
-                        }
-                    }
-
-                    // Delete headers
-                    for (var row = 0; row < obj.options.data.length; row++) {
-                        // History
-                        historyData[row] = obj.options.data[row].splice(columnNumber, numOfColumns);
-                        historyRecords[row] = obj.records[row].splice(columnNumber, numOfColumns);
-                    }
-
-                    // Remove selection
-                    obj.conditionalSelectionUpdate(0, columnNumber, (columnNumber + numOfColumns) - 1);
-
-                    // Adjust nested headers
-                    if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
-                        // Flexible way to handle nestedheaders
-                        if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
-                            for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
-                                var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - numOfColumns;
-                                obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;
-                                obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);
-                            }
-                        } else {
-                            var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - numOfColumns;
-                            obj.options.nestedHeaders[0].colspan = colspan;
-                            obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);
-                        }
-                    }
-
-                    // Keeping history of changes
-                    obj.setHistory({
-                        action:'deleteColumn',
-                        columnNumber:columnNumber,
-                        numOfColumns:numOfColumns,
-                        insertBefore: 1,
-                        columns:columns,
-                        headers:historyHeaders,
-                        colgroup:historyColgroup,
-                        records:historyRecords,
-                        data:historyData,
-                    });
-
-                    // Update table references
-                    obj.updateTableReferences();
-
-                    // Delete
-                    if (obj.ignoreEvents != true) {
-                        if (typeof(obj.options.ondeletecolumn) == 'function') {
-                            obj.options.ondeletecolumn(el, columnNumber, numOfColumns, historyRecords);
-                        }
-                    }
-                }
-            } else {
-                console.error('JEXCEL. It is not possible to delete the last column');
-            }
-        }
-    }
-
-    /**
-     * Get seleted rows numbers
-     * 
-     * @return array
-     */
-    obj.getSelectedRows = function(asIds) {
-        var rows = [];
-        // Get all selected rows
-        for (var j = 0; j < obj.rows.length; j++) {
-            if (obj.rows[j].classList.contains('selected')) {
-                if (asIds) {
-                    rows.push(j);
-                } else {
-                    rows.push(obj.rows[j]);
-                }
-            }
-        }
-
-        return rows;
-    },
-
-    /**
-     * Get seleted column numbers
-     * 
-     * @return array
-     */
-    obj.getSelectedColumns = function() {
-        var cols = [];
-        // Get all selected cols
-        for (var i = 0; i < obj.headers.length; i++) {
-            if (obj.headers[i].classList.contains('selected')) {
-                cols.push(i);
-            }
-        }
-
-        return cols;
-    }
-
-    /**
-     * Get highlighted
-     * 
-     * @return array
-     */
-    obj.getHighlighted = function() {
-        return obj.highlighted;
-    }
-
-    /**
-     * Update cell references
-     * 
-     * @return void
-     */
-    obj.updateTableReferences = function() {
-        // Update headers
-        for (var i = 0; i < obj.headers.length; i++) {
-            var x = obj.headers[i].getAttribute('data-x');
-
-            if (x != i) {
-                // Update coords
-                obj.headers[i].setAttribute('data-x', i);
-                // Title
-                if (! obj.headers[i].getAttribute('title')) {
-                    obj.headers[i].innerHTML = jexcel.getColumnName(i);
-                }
-            }
-        }
-
-        // Update all rows
-        for (var j = 0; j < obj.rows.length; j++) {
-            if (obj.rows[j]) {
-                var y = obj.rows[j].getAttribute('data-y');
-
-                if (y != j) {
-                    // Update coords
-                    obj.rows[j].setAttribute('data-y', j);
-                    obj.rows[j].children[0].setAttribute('data-y', j);
-                    // Row number
-                    obj.rows[j].children[0].innerHTML = j + 1;
-                }
-            }
-        }
-
-        // Regular cells affected by this change
-        var affectedTokens = [];
-        var mergeCellUpdates = [];
-
-        // Update cell
-        var updatePosition = function(x,y,i,j) {
-            if (x != i) {
-                obj.records[j][i].setAttribute('data-x', i);
-            }
-            if (y != j) {
-                obj.records[j][i].setAttribute('data-y', j);
-            }
-
-            // Other updates
-            if (x != i || y != j) {
-                var columnIdFrom = jexcel.getColumnNameFromId([x, y]);
-                var columnIdTo = jexcel.getColumnNameFromId([i, j]);
-                affectedTokens[columnIdFrom] = columnIdTo;
-            }
-        }
-
-        for (var j = 0; j < obj.records.length; j++) {
-            for (var i = 0; i < obj.records[0].length; i++) {
-                if (obj.records[j][i]) {
-                    // Current values
-                    var x = obj.records[j][i].getAttribute('data-x');
-                    var y = obj.records[j][i].getAttribute('data-y');
-
-                    // Update column
-                    if (obj.records[j][i].getAttribute('data-merged')) {
-                        var columnIdFrom = jexcel.getColumnNameFromId([x, y]);
-                        var columnIdTo = jexcel.getColumnNameFromId([i, j]);
-                        if (mergeCellUpdates[columnIdFrom] == null) {
-                            if (columnIdFrom == columnIdTo) {
-                                mergeCellUpdates[columnIdFrom] = false;
-                            } else {
-                                var totalX = parseInt(i - x);
-                                var totalY = parseInt(j - y);
-                                mergeCellUpdates[columnIdFrom] = [ columnIdTo, totalX, totalY ];
-                            }
-                        }
-                    } else {
-                        updatePosition(x,y,i,j);
-                    }
-                }
-            }
-        }
-
-        // Update merged if applicable
-        var keys = Object.keys(mergeCellUpdates);
-        if (keys.length) {
-            for (var i = 0; i < keys.length; i++) {
-                if (mergeCellUpdates[keys[i]]) {
-                    var info = jexcel.getIdFromColumnName(keys[i], true)
-                    var x = info[0];
-                    var y = info[1];
-                    updatePosition(x,y,x + mergeCellUpdates[keys[i]][1],y + mergeCellUpdates[keys[i]][2]);
-
-                    var columnIdFrom = keys[i];
-                    var columnIdTo = mergeCellUpdates[keys[i]][0];
-                    for (var j = 0; j < obj.options.mergeCells[columnIdFrom][2].length; j++) {
-                        var x = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-x'));
-                        var y = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-y'));
-                        obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-x', x + mergeCellUpdates[keys[i]][1]);
-                        obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-y', y + mergeCellUpdates[keys[i]][2]);
-                    }
-
-                    obj.options.mergeCells[columnIdTo] = obj.options.mergeCells[columnIdFrom];
-                    delete(obj.options.mergeCells[columnIdFrom]);
-                }
-            }
-        }
-
-        // Update formulas
-        obj.updateFormulas(affectedTokens);
-
-        // Update meta data
-        obj.updateMeta(affectedTokens);
-
-        // Refresh selection
-        obj.refreshSelection();
-
-        // Update table with custom configuration if applicable
-        obj.updateTable();
-    }
-
-    /**
-     * Custom settings for the cells
-     */
-    obj.updateTable = function() {
-        // Check for spare
-        if (obj.options.minSpareRows > 0) {
-            var numBlankRows = 0;
-            for (var j = obj.rows.length - 1; j >= 0; j--) {
-                var test = false;
-                for (var i = 0; i < obj.headers.length; i++) {
-                    if (obj.options.data[j][i]) {
-                        test = true;
-                    }
-                }
-                if (test) {
-                    break;
-                } else {
-                    numBlankRows++;
-                }
-            }
-
-            if (obj.options.minSpareRows - numBlankRows > 0) {
-                obj.insertRow(obj.options.minSpareRows - numBlankRows)
-            }
-        }
-
-        if (obj.options.minSpareCols > 0) {
-            var numBlankCols = 0;
-            for (var i = obj.headers.length - 1; i >= 0 ; i--) {
-                var test = false;
-                for (var j = 0; j < obj.rows.length; j++) {
-                    if (obj.options.data[j][i]) {
-                        test = true;
-                    }
-                }
-                if (test) {
-                    break;
-                } else {
-                    numBlankCols++;
-                }
-            }
-
-            if (obj.options.minSpareCols - numBlankCols > 0) {
-                obj.insertColumn(obj.options.minSpareCols - numBlankCols)
-            }
-        }
-
-        // Customizations by the developer
-        if (typeof(obj.options.updateTable) == 'function') {
-            for (var j = 0; j < obj.rows.length; j++) {
-                for (var i = 0; i < obj.headers.length; i++) {
-                    obj.options.updateTable(el, obj.records[j][i], i, j, obj.options.data[j][i], obj.records[j][i].innerText, jexcel.getColumnNameFromId([i, j]));
-                }
-            }
-        }
-
-        // Update corner position
-        setTimeout(function() {
-            obj.updateCornerPosition();
-        },0);
-    }
-
-    /**
-     * Show index column
-     */
-    obj.showIndex = function() {
-        obj.table.classList.remove('jexcel_hidden_index');
-    }
-
-    /**
-     * Hide index column
-     */
-    obj.hideIndex = function() {
-        obj.table.classList.add('jexcel_hidden_index');
-    }
-
-    /**
-     * Update all related cells in the chain
-     */
-    var chainLoopProtection = [];
-
-    obj.updateFormulaChain = function(x, y, records) {
-        var cellId = jexcel.getColumnNameFromId([x, y]);
-        if (obj.formula[cellId] && obj.formula[cellId].length > 0) {
-            if (chainLoopProtection[cellId]) {
-                obj.records[y][x].innerHTML = '#ERROR';
-                obj.formula[cellId] = '';
-            } else {
-                // Protection
-                chainLoopProtection[cellId] = true;
-
-                for (var i = 0; i < obj.formula[cellId].length; i++) {
-                    var cell = jexcel.getIdFromColumnName(obj.formula[cellId][i], true);
-                    // Update cell
-                    var value = ''+obj.options.data[cell[1]][cell[0]];
-                    if (value.substr(0,1) == '=') {
-                        records.push(obj.updateCell(cell[0], cell[1], value, true));
-                    } else {
-                        // No longer a formula, remove from the chain
-                        Object.keys(obj.formula)[i] = null;
-                    }
-                    obj.updateFormulaChain(cell[0], cell[1], records);
-                }
-            }
-        }
-
-        chainLoopProtection = [];
-    }
-
-    /**
-     * Update formulas
-     */
-    obj.updateFormulas = function(referencesToUpdate) {
-        // Update formulas
-        for (var j = 0; j < obj.options.data.length; j++) {
-            for (var i = 0; i < obj.options.data[0].length; i++) {
-                var value = '' + obj.options.data[j][i];
-                // Is formula
-                if (value.substr(0,1) == '=') {
-                    // Replace tokens
-                    var newFormula = obj.updateFormula(value, referencesToUpdate);
-                    if (newFormula != value) {
-                        obj.options.data[j][i] = newFormula;
-                    }
-                }
-            }
-        }
-
-        // Update formula chain
-        var formula = [];
-        var keys = Object.keys(obj.formula);
-        for (var j = 0; j < keys.length; j++) {
-            // Current key and values
-            var key = keys[j];
-            var value = obj.formula[key];
-            // Update key
-            if (referencesToUpdate[key]) {
-                key = referencesToUpdate[key];
-            }
-            // Update values
-            formula[key] = [];
-            for (var i = 0; i < value.length; i++) {
-                var letter = value[i];
-                if (referencesToUpdate[letter]) {
-                    letter = referencesToUpdate[letter];
-                }
-                formula[key].push(letter);
-            }
-        }
-        obj.formula = formula;
-    }
-
-    /**
-     * Update formula
-     */
-    obj.updateFormula = function(formula, referencesToUpdate) {
-        var testLetter = /[A-Z]/;
-        var testNumber = /[0-9]/;
-
-        var newFormula = '';
-        var letter = null;
-        var number = null;
-        var token = '';
-
-        for (var index = 0; index < formula.length; index++) {
-            if (testLetter.exec(formula[index])) {
-                letter = 1;
-                number = 0;
-                token += formula[index];
-            } else if (testNumber.exec(formula[index])) {
-                number = letter ? 1 : 0;
-                token += formula[index];
-            } else {
-                if (letter && number) {
-                    token = referencesToUpdate[token] ? referencesToUpdate[token] : token;
-                }
-                newFormula += token;
-                newFormula += formula[index];
-                letter = 0;
-                number = 0;
-                token = '';
-            }
-        }
-
-        if (token) {
-            if (letter && number) {
-                token = referencesToUpdate[token] ? referencesToUpdate[token] : token;
-            }
-            newFormula += token;
-        }
-
-        return newFormula;
-    }
-
-    /**
-     * Parse formulas
-     */
-    obj.executeFormula = function(expression, x, y) {
-
-        var formulaResults = [];
-        var formulaLoopProtection = [];
-
-        // Execute formula with loop protection
-        var execute = function(expression, x, y) {
-         // Parent column identification
-            var parentId = jexcel.getColumnNameFromId([x, y]);
-
-            // Code protection
-            if (formulaLoopProtection[parentId]) {
-                console.error('Reference loop detected');
-                return '#ERROR';
-            }
-
-            formulaLoopProtection[parentId] = true;
-
-            // Convert range tokens
-            var tokensUpdate = function(tokens) {
-                for (var index = 0; index < tokens.length; index++) {
-                    var f = [];
-                    var token = tokens[index].split(':');
-                    var e1 = jexcel.getIdFromColumnName(token[0], true);
-                    var e2 = jexcel.getIdFromColumnName(token[1], true);
-
-                    if (e1[0] <= e2[0]) {
-                        var x1 = e1[0];
-                        var x2 = e2[0];
-                    } else {
-                        var x1 = e2[0];
-                        var x2 = e1[0];
-                    }
-
-                    if (e1[1] <= e2[1]) {
-                        var y1 = e1[1];
-                        var y2 = e2[1];
-                    } else {
-                        var y1 = e2[1];
-                        var y2 = e1[1];
-                    }
-
-                    for (var j = y1; j <= y2; j++) {
-                        for (var i = x1; i <= x2; i++) {
-                            f.push(jexcel.getColumnNameFromId([i, j]));
-                        }
-                    }
-
-                    expression = expression.replace(tokens[index], f.join(','));
-                }
-            }
-
-            var tokens = expression.match(/([A-Z]+[0-9]+)\:([A-Z]+[0-9]+)/g);
-            if (tokens && tokens.length) {
-                tokensUpdate(tokens);
-            }
-
-            // String
-            var evalstring = '';
-
-            // Get tokens
-            var tokens = expression.match(/([A-Z]+[0-9]+)/g);
-
-            // Direct self-reference protection
-            if (tokens && tokens.indexOf(parentId) > -1) {
-                console.error('Self Reference detected');
-                return '#ERROR';
-            } else {
-                if (tokens) {
-                    for (var i = 0; i < tokens.length; i++) {
-                        // Keep chain
-                        if (! obj.formula[tokens[i]]) {
-                            obj.formula[tokens[i]] = [];
-                        }
-                        // Is already in the register
-                        if (obj.formula[tokens[i]].indexOf(parentId) < 0) {
-                            obj.formula[tokens[i]].push(parentId);
-                        }
-
-                        // Do not calculate again
-                        if (eval('typeof(' + tokens[i] + ') == "undefined"')) {
-                            // Coords
-                            var position = jexcel.getIdFromColumnName(tokens[i], 1);
-                            // Get value
-                            if (typeof(obj.options.data[position[1]]) != 'undefined' && typeof(obj.options.data[position[1]][position[0]]) != 'undefined') {
-                                var value = obj.options.data[position[1]][position[0]];
-                            } else {
-                                var value = '';
-                            }
-                            // Get column data
-                            if ((''+value).substr(0,1) == '=') {
-                                if (formulaResults[tokens[i]]) {
-                                    value = formulaResults[tokens[i]];
-                                } else {
-                                    value = execute(value, position[0], position[1]);
-                                    formulaResults[tokens[i]] = value;
-                                }
-                            }
-                            // Type!
-                            if ((''+value).trim() == '') {
-                                // Null
-                                evalstring += "var " + tokens[i] + " = null;";
-                            } else {
-                                if (value == Number(value)) {
-                                    // Number
-                                    evalstring += "var " + tokens[i] + " = " + value + ";";
-                                } else {
-                                    // Trying any formatted number
-                                    var number = null;
-                                    if (number = obj.parseNumber(value, position[0])) {
-                                        // Render as number
-                                        evalstring += "var " + tokens[i] + " = " + number + ";";
-                                    } else {
-                                        // Render as string
-                                        evalstring += "var " + tokens[i] + " = '" + value + "';";
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                // Convert formula to javascript
-                try {
-                    evalstring += "function COLUMN() { return parseInt(x) + 1; }; function ROW() { return parseInt(y) + 1; }; function CELL() { return parentId; };";
-
-                    var res = eval(evalstring + expression.substr(1));
-                } catch (e) {
-                    var res = '#ERROR';
-                }
-
-                return res;
-            }
-        }
-
-        return execute(expression, x, y);
-    }
-
-    /**
-     * Trying to extract a number from a string
-     */
-    obj.parseNumber = function(value, columnNumber) {
-        // Decimal point
-        var decimal = columnNumber && obj.options.columns[columnNumber].decimal ? obj.options.columns[columnNumber].decimal : '.';
-
-        // Parse both parts of the number
-        var number = ('' + value);
-        number = number.split(decimal);
-        number[0] = number[0].match(/[+-]?[0-9]/g);
-        if (number[0]) {
-            number[0] = number[0].join('');
-        }
-        if (number[1]) {
-            number[1] = number[1].match(/[0-9]*/g).join('');
-        }
-
-        // Is a valid number
-        if (number[0] && Number(number[0]) >= 0) {
-            if (! number[1]) {
-                var value = Number(number[0] + '.00');
-            } else {
-                var value = Number(number[0] + '.' + number[1]);
-            }
-        } else {
-            var value = null;
-        }
-
-        return value;
-    }
-
-    /**
-     * Get row number
-     */
-    obj.row = function(cell) {
-    }
-
-    /**
-     * Get col number
-     */
-    obj.col = function(cell) {
-    }
-
-    obj.up = function(shiftKey, ctrlKey) {
-        if (shiftKey) {
-            if (obj.selectedCell[3] > 0) {
-                obj.up.visible(1, ctrlKey ? 0 : 1)
-            }
-        } else {
-            if (obj.selectedCell[1] > 0) {
-                obj.up.visible(0, ctrlKey ? 0 : 1)
-            }
-            obj.selectedCell[2] = obj.selectedCell[0];
-            obj.selectedCell[3] = obj.selectedCell[1];
-        }
-
-        // Update selection
-        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-
-        // Change page
-        if (obj.options.lazyLoading == true) {
-            if (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0) {
-                obj.loadPage(0);
-                obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-            } else {
-                if (obj.loadValidation()) {
-                    obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-                } else {
-                    var item = parseInt(obj.tbody.firstChild.getAttribute('data-y'));
-                    if (obj.selectedCell[1] - item < 30) {
-                        obj.loadUp();
-                        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-                    }
-                }
-            }
-        } else if (obj.options.pagination > 0) {
-            var pageNumber = obj.whichPage(obj.selectedCell[3]);
-            if (pageNumber != obj.pageNumber) {
-                obj.page(pageNumber);
-            }
-        }
-
-        obj.updateScroll(1);
-    }
-
-    obj.up.visible = function(group, direction) {
-        if (group == 0) {
-            var x = parseInt(obj.selectedCell[0]);
-            var y = parseInt(obj.selectedCell[1]);
-        } else {
-            var x = parseInt(obj.selectedCell[2]);
-            var y = parseInt(obj.selectedCell[3]);
-        }
-
-        if (direction == 0) {
-            for (var j = 0; j < y; j++) {
-                if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
-                    y = j;
-                    break;
-                }
-            }
-        } else {
-            y = obj.up.get(x, y);
-        }
-
-        if (group == 0) {
-            obj.selectedCell[0] = x;
-            obj.selectedCell[1] = y;
-        } else {
-            obj.selectedCell[2] = x;
-            obj.selectedCell[3] = y;
-        }
-    }
-
-    obj.up.get = function(x, y) {
-        var x = parseInt(x);
-        var y = parseInt(y);
-        for (var j = (y - 1); j >= 0; j--) {
-            if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
-                if (obj.records[j][x].getAttribute('data-merged')) {
-                    if (obj.records[j][x] == obj.records[y][x]) {
-                        continue;
-                    }
-                }
-                y = j;
-                break;
-            }
-        }
-
-        return y;
-    }
-
-    obj.down = function(shiftKey, ctrlKey) {
-        if (shiftKey) {
-            if (obj.selectedCell[3] < obj.records.length - 1) {
-                obj.down.visible(1, ctrlKey ? 0 : 1)
-            }
-        } else {
-            if (obj.selectedCell[1] < obj.records.length - 1) {
-                obj.down.visible(0, ctrlKey ? 0 : 1)
-            }
-            obj.selectedCell[2] = obj.selectedCell[0];
-            obj.selectedCell[3] = obj.selectedCell[1];
-        }
-
-        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-
-        // Change page
-        if (obj.options.lazyLoading == true) {
-            if ((obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) {
-                obj.loadPage(-1);
-                obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-            } else {
-                if (obj.loadValidation()) {
-                    obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-                } else {
-                    var item = parseInt(obj.tbody.lastChild.getAttribute('data-y'));
-                    if (item - obj.selectedCell[3] < 30) {
-                        obj.loadDown();
-                        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-                    }
-                }
-            }
-        } else if (obj.options.pagination > 0) {
-            var pageNumber = obj.whichPage(obj.selectedCell[3]);
-            if (pageNumber != obj.pageNumber) {
-                obj.page(pageNumber);
-            }
-        }
-
-        obj.updateScroll(3);
-    }
-
-    obj.down.visible = function(group, direction) {
-        if (group == 0) {
-            var x = parseInt(obj.selectedCell[0]);
-            var y = parseInt(obj.selectedCell[1]);
-        } else {
-            var x = parseInt(obj.selectedCell[2]);
-            var y = parseInt(obj.selectedCell[3]);
-        }
-
-        if (direction == 0) {
-            for (var j = obj.rows.length - 1; j > y; j--) {
-                if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
-                    y = j;
-                    break;
-                }
-            }
-        } else {
-            y = obj.down.get(x, y);
-        }
-
-        if (group == 0) {
-            obj.selectedCell[0] = x;
-            obj.selectedCell[1] = y;
-        } else {
-            obj.selectedCell[2] = x;
-            obj.selectedCell[3] = y;
-        }
-    }
-
-    obj.down.get = function(x, y) {
-        var x = parseInt(x);
-        var y = parseInt(y);
-        for (var j = (y + 1); j < obj.rows.length; j++) {
-            if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
-                if (obj.records[j][x].getAttribute('data-merged')) {
-                    if (obj.records[j][x] == obj.records[y][x]) {
-                        continue;
-                    }
-                }
-                y = j;
-                break;
-            }
-        }
-
-        return y;
-    }
-
-    obj.right = function(shiftKey, ctrlKey) {
-        if (shiftKey) {
-            if (obj.selectedCell[2] < obj.headers.length - 1) {
-                obj.right.visible(1, ctrlKey ? 0 : 1)
-            }
-        } else {
-            if (obj.selectedCell[0] < obj.headers.length - 1) {
-                obj.right.visible(0, ctrlKey ? 0 : 1)
-            }
-            obj.selectedCell[2] = obj.selectedCell[0];
-            obj.selectedCell[3] = obj.selectedCell[1];
-        }
-
-        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-        obj.updateScroll(2);
-    }
-
-    obj.right.visible = function(group, direction) {
-        if (group == 0) {
-            var x = parseInt(obj.selectedCell[0]);
-            var y = parseInt(obj.selectedCell[1]);
-        } else {
-            var x = parseInt(obj.selectedCell[2]);
-            var y = parseInt(obj.selectedCell[3]);
-        }
-
-        if (direction == 0) {
-            for (var i = obj.headers.length - 1; i > x; i--) {
-                if (obj.records[y][i].style.display != 'none') {
-                    x = i;
-                    break;
-                }
-            }
-        } else {
-            x = obj.right.get(x, y);
-        }
-
-        if (group == 0) {
-            obj.selectedCell[0] = x;
-            obj.selectedCell[1] = y;
-        } else {
-            obj.selectedCell[2] = x;
-            obj.selectedCell[3] = y;
-        }
-    }
-
-    obj.right.get = function(x, y) {
-        var x = parseInt(x);
-        var y = parseInt(y);
-
-        for (var i = (x + 1); i < obj.headers.length; i++) {
-            if (obj.records[y][i].style.display != 'none') {
-                if (obj.records[y][i].getAttribute('data-merged')) {
-                    if (obj.records[y][i] == obj.records[y][x]) {
-                        continue;
-                    }
-                }
-                x = i;
-                break;
-            }
-        }
-
-        return x;
-    }
-
-    obj.left = function(shiftKey, ctrlKey) {
-        if (shiftKey) {
-            if (obj.selectedCell[2] > 0) {
-                obj.left.visible(1, ctrlKey ? 0 : 1)
-            }
-        } else {
-            if (obj.selectedCell[0] > 0) {
-                obj.left.visible(0, ctrlKey ? 0 : 1)
-            }
-            obj.selectedCell[2] = obj.selectedCell[0];
-            obj.selectedCell[3] = obj.selectedCell[1];
-        }
-
-        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-        obj.updateScroll(0);
-    }
-
-    obj.left.visible = function(group, direction) {
-        if (group == 0) {
-            var x = parseInt(obj.selectedCell[0]);
-            var y = parseInt(obj.selectedCell[1]);
-        } else {
-            var x = parseInt(obj.selectedCell[2]);
-            var y = parseInt(obj.selectedCell[3]);
-        }
-
-        if (direction == 0) {
-            for (var i = 0; i < x; i++) {
-                if (obj.records[y][i].style.display != 'none') {
-                    x = i;
-                    break;
-                }
-            }
-        } else {
-            x = obj.left.get(x, y);
-        }
-
-        if (group == 0) {
-            obj.selectedCell[0] = x;
-            obj.selectedCell[1] = y;
-        } else {
-            obj.selectedCell[2] = x;
-            obj.selectedCell[3] = y;
-        }
-    }
-
-    obj.left.get = function(x, y) {
-        var x = parseInt(x);
-        var y = parseInt(y);
-        for (var i = (x - 1); i >= 0; i--) {
-            if (obj.records[y][i].style.display != 'none') {
-                if (obj.records[y][i].getAttribute('data-merged')) {
-                    if (obj.records[y][i] == obj.records[y][x]) {
-                        continue;
-                    }
-                }
-                x = i;
-                break;
-            }
-        }
-
-        return x;
-    }
-
-    obj.first = function(shiftKey, ctrlKey) {
-        if (shiftKey) {
-            if (ctrlKey) {
-                obj.selectedCell[3] = 0;
-            } else {
-                obj.left.visible(1, 0);
-            }
-        } else {
-            if (ctrlKey) {
-                obj.selectedCell[1] = 0;
-            } else {
-                obj.left.visible(0, 0);
-            }
-            obj.selectedCell[2] = obj.selectedCell[0];
-            obj.selectedCell[3] = obj.selectedCell[1];
-        }
-
-        // Change page
-        if (obj.options.lazyLoading == true && (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0)) {
-            obj.loadPage(0);
-        } else if (obj.options.pagination > 0) {
-            var pageNumber = obj.whichPage(obj.selectedCell[3]);
-            if (pageNumber != obj.pageNumber) {
-                obj.page(pageNumber);
-            }
-        }
-
-        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-        obj.updateScroll(1);
-    }
-
-    obj.last = function(shiftKey, ctrlKey) {
-        if (shiftKey) {
-            if (ctrlKey) {
-                obj.selectedCell[3] = obj.records.length - 1;
-            } else {
-                obj.right.visible(1, 0);
-            }
-        } else {
-            if (ctrlKey) {
-                obj.selectedCell[1] = obj.records.length - 1;
-            } else {
-                obj.right.visible(0, 0);
-            }
-            obj.selectedCell[2] = obj.selectedCell[0];
-            obj.selectedCell[3] = obj.selectedCell[1];
-        }
-
-        // Change page
-        if (obj.options.lazyLoading == true && (obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) {
-            obj.loadPage(-1);
-        } else if (obj.options.pagination > 0) {
-            var pageNumber = obj.whichPage(obj.selectedCell[3]);
-            if (pageNumber != obj.pageNumber) {
-                obj.page(pageNumber);
-            }
-        }
-
-        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-        obj.updateScroll(3);
-    }
-
-    obj.selectAll = function() {
-        if (! obj.selectedCell) {
-            obj.selectedCell = [];
-        }
-
-        obj.selectedCell[0] = 0;
-        obj.selectedCell[1] = 0;
-        obj.selectedCell[2] = obj.headers.length - 1;
-        obj.selectedCell[3] = obj.records.length - 1;
-
-        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
-    }
-
-    /**
-     * Go to a page in a lazyLoading
-     */
-    obj.loadPage = function(pageNumber) {
-        // Search
-        if (obj.options.search == true && obj.results) {
-            var results = obj.results;
-        } else {
-            var results = obj.rows;
-        }
-
-        // Per page
-        var quantityPerPage = 100;
-
-        // pageNumber
-        if (pageNumber == null || pageNumber == -1) {
-            // Last page
-            pageNumber = Math.ceil(results.length / quantityPerPage); 
-        }
-
-        var startRow = (pageNumber * quantityPerPage);
-        var finalRow = (pageNumber * quantityPerPage) + quantityPerPage;
-        if (finalRow > results.length) {
-            finalRow = results.length;
-        }
-        startRow = finalRow - 100;
-        if (startRow < 0) {
-            startRow = 0;
-        }
-
-        // Appeding items
-        for (var j = startRow; j < finalRow; j++) {
-            if (obj.options.search == true && obj.results) {
-                obj.tbody.appendChild(obj.rows[results[j]]);
-            } else {
-                obj.tbody.appendChild(obj.rows[j]);
-            }
-
-            if (obj.tbody.children.length > quantityPerPage) {
-                obj.tbody.removeChild(obj.tbody.firstChild);
-            }
-        }
-    }
-
-    obj.loadUp = function() {
-        // Search
-        if (obj.options.search == true && obj.results) {
-            var results = obj.results;
-        } else {
-            var results = obj.rows;
-        }
-        var test = 0;
-        if (results.length > 100) {
-            // Get the first element in the page
-            var item = parseInt(obj.tbody.firstChild.getAttribute('data-y'));
-            if (obj.options.search == true && obj.results) {
-                item = results.indexOf(item);
-            }
-            if (item > 0) {
-                for (var j = 0; j < 30; j++) {
-                    item = item - 1;
-                    if (item > -1) {
-                        if (obj.options.search == true && obj.results) {
-                            obj.tbody.insertBefore(obj.rows[results[item]], obj.tbody.firstChild);
-                        } else {
-                            obj.tbody.insertBefore(obj.rows[item], obj.tbody.firstChild);
-                        }
-                        if (obj.tbody.children.length > 100) {
-                            obj.tbody.removeChild(obj.tbody.lastChild);
-                            test = 1;
-                        }
-                    }
-                }
-            }
-        }
-        return test;
-    }
-
-    obj.loadDown = function() {
-        // Search
-        if (obj.options.search == true && obj.results) {
-            var results = obj.results;
-        } else {
-            var results = obj.rows;
-        }
-        var test = 0;
-        if (results.length > 100) {
-            // Get the last element in the page
-            var item = parseInt(obj.tbody.lastChild.getAttribute('data-y'));
-            if (obj.options.search == true && obj.results) {
-                item = results.indexOf(item);
-            }
-            if (item < obj.rows.length - 1) {
-                for (var j = 0; j <= 30; j++) {
-                    if (item < results.length) {
-                        if (obj.options.search == true && obj.results) {
-                            obj.tbody.appendChild(obj.rows[results[item]]);
-                        } else {
-                            obj.tbody.appendChild(obj.rows[item]);
-                        }
-                        if (obj.tbody.children.length > 100) {
-                            obj.tbody.removeChild(obj.tbody.firstChild);
-                            test = 1;
-                        }
-                    }
-                    item = item + 1;
-                }
-            }
-        }
-
-        return test;
-    }
-
-    obj.loadValidation = function() {
-        if (obj.selectedCell) {
-            var currentPage = parseInt(obj.tbody.firstChild.getAttribute('data-y')) / 100;
-            var selectedPage = parseInt(obj.selectedCell[3] / 100);
-            var totalPages = parseInt(obj.rows.length / 100);
-
-            if (currentPage != selectedPage && selectedPage <= totalPages) {
-                if (! Array.prototype.indexOf.call(obj.tbody.children, obj.rows[obj.selectedCell[3]])) {
-                    obj.loadPage(selectedPage);
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Reset search
-     */
-    obj.resetSearch = function() {
-        obj.searchInput.value = '';
-        obj.search('');
-        obj.results = null;
-    }
-
-    /**
-     * Search
-     */
-    obj.search = function(query) {
-        // Query
-        if (query) {
-            var query = query.toLowerCase();
-        }
-
-        // Reset selection
-        obj.resetSelection();
-
-        // Total of results
-        obj.pageNumber = 0;
-        obj.results = [];
-
-        if (query) {
-            // Search filter
-            var search = function(item, query, index) {
-                for (var i = 0; i < item.length; i++) {
-                    if ((''+item[i]).toLowerCase().search(query) >= 0 ||
-                        (''+obj.records[index][i].innerHTML).toLowerCase().search(query) >= 0) {
-                        return true;
-                    }
-                }
-                return false;
-            }
-
-            // Result
-            var addToResult = function(k) {
-                if (obj.results.indexOf(k) == -1) {
-                    obj.results.push(k);
-                }
-            }
-
-            // Filter
-            var data = obj.options.data.filter(function(v, k) {
-                if (search(v, query, k)) {
-                    // Merged rows found
-                    var rows = obj.isRowMerged(k);
-                    if (rows.length) {
-                        for (var i = 0; i < rows.length; i++) {
-                            var row = jexcel.getIdFromColumnName(rows[i], true);
-                            for (var j = 0; j < obj.options.mergeCells[rows[i]][1]; j++) {
-                                addToResult(row[1]+j);
-                            }
-                        }
-                    } else {
-                        // Normal row found
-                        addToResult(k);
-                    }
-                    return true;
-                } else {
-                    return false;
-                }
-            });
-        } else {
-            obj.results = null;
-        }
-
-        var total = 0;
-        var index = 0;
-
-        // Page 1
-        if (obj.options.lazyLoading == true) {
-            total = 100;
-        } else if (obj.options.pagination > 0) {
-            total = obj.options.pagination;
-        } else {
-            if (obj.results) {
-                total = obj.results.length;
-            } else {
-                total = obj.rows.length;
-            }
-        }
-
-        // Reset current nodes
-        while (obj.tbody.firstChild) {
-            obj.tbody.removeChild(obj.tbody.firstChild);
-        }
-
-        // Hide all records from the table
-        for (var j = 0; j < obj.rows.length; j++) {
-            if (! obj.results || obj.results.indexOf(j) > -1) {
-                if (index < total) {
-                    obj.tbody.appendChild(obj.rows[j]);
-                    index++;
-                }
-                obj.rows[j].style.display = '';
-            } else {
-                obj.rows[j].style.display = 'none';
-            }
-        }
-
-        // Update pagination
-        if (obj.options.pagination > 0) {
-            obj.updatePagination();
-        }
-
-        return total;
-    }
-
-    /**
-     * Which page the cell is
-     */
-    obj.whichPage = function(cell) {
-        // Search
-        if (obj.options.search == true && obj.results) {
-            cell = obj.results.indexOf(cell);
-        }
-
-        return (Math.ceil((parseInt(cell) + 1) / parseInt(obj.options.pagination))) - 1;
-    }
-
-    /**
-     * Go to page
-     */
-    obj.page = function(pageNumber) {
-        // Search
-        if (obj.options.search == true && obj.results) {
-            var results = obj.results;
-        } else {
-            var results = obj.rows;
-        }
-
-        // Per page
-        var quantityPerPage = parseInt(obj.options.pagination);
-
-        // pageNumber
-        if (pageNumber == null || pageNumber == -1) {
-            // Last page
-            pageNumber = Math.ceil(results.length / quantityPerPage); 
-        }
-
-        // Page number
-        obj.pageNumber = pageNumber;
-
-        var startRow = (pageNumber * quantityPerPage);
-        var finalRow = (pageNumber * quantityPerPage) + quantityPerPage;
-        if (finalRow > results.length) {
-            finalRow = results.length;
-        }
-        if (startRow < 0) {
-            startRow = 0;
-        }
-
-        // Reset container
-        while (obj.tbody.firstChild) {
-            obj.tbody.removeChild(obj.tbody.firstChild);
-        }
-
-        // Appeding items
-        for (var j = startRow; j < finalRow; j++) {
-            if (obj.options.search == true && obj.results) {
-                obj.tbody.appendChild(obj.rows[results[j]]);
-            } else {
-                obj.tbody.appendChild(obj.rows[j]);
-            }
-        }
-
-        if (obj.options.pagination > 0) {
-            obj.updatePagination();
-        }
-
-        // Update corner position
-        obj.updateCornerPosition();
-    }
-
-    /**
-     * Update the pagination
-     */
-    obj.updatePagination = function() {
-        // Reset container
-        obj.pagination.children[0].innerHTML = '';
-        obj.pagination.children[1].innerHTML = '';
-
-        // Start pagination
-        if (obj.options.pagination) {
-            // Searchable
-            if (obj.options.search == true && obj.results) {
-                var results = obj.results.length;
-            } else {
-                var results = obj.rows.length;
-            }
-
-            if (! results) {
-                // No records found
-                obj.pagination.children[0].innerHTML = obj.options.text.noRecordsFound;
-            } else {
-                // Pagination container
-                var quantyOfPages = Math.ceil(results / obj.options.pagination);
-
-                if (obj.pageNumber < 6) {
-                    var startNumber = 1;
-                    var finalNumber = quantyOfPages < 10 ? quantyOfPages : 10;
-                } else if (quantyOfPages - obj.pageNumber < 5) {
-                    var startNumber = quantyOfPages - 9;
-                    var finalNumber = quantyOfPages;
-                    if (startNumber < 1) {
-                        startNumber = 1;
-                    }
-                } else {
-                    var startNumber = obj.pageNumber - 4;
-                    var finalNumber = obj.pageNumber + 5;
-                }
-
-                // First
-                if (startNumber > 1) {
-                    var paginationItem = document.createElement('div');
-                    paginationItem.className = 'jexcel_page';
-                    paginationItem.innerHTML = '<';
-                    paginationItem.title = 1;
-                    obj.pagination.children[1].appendChild(paginationItem);
-                }
-
-                // Get page links
-                for (var i = startNumber; i <= finalNumber; i++) {
-                    var paginationItem = document.createElement('div');
-                    paginationItem.className = 'jexcel_page';
-                    paginationItem.innerHTML = i;
-                    obj.pagination.children[1].appendChild(paginationItem);
-
-                    if (obj.pageNumber == (i-1)) {
-                        paginationItem.classList.add('jexcel_page_selected');
-                    }
-                }
-
-                // Last
-                if (finalNumber < quantyOfPages) {
-                    var paginationItem = document.createElement('div');
-                    paginationItem.className = 'jexcel_page';
-                    paginationItem.innerHTML = '>';
-                    paginationItem.title = quantyOfPages;
-                    obj.pagination.children[1].appendChild(paginationItem);
-                }
-
-                // Text
-                var format = function(format) {
-                    var args = Array.prototype.slice.call(arguments, 1);
-                    return format.replace(/{(\d+)}/g, function(match, number) {
-                      return typeof args[number] != 'undefined'
-                        ? args[number]
-                        : match
-                      ;
-                    });
-                };
-
-                obj.pagination.children[0].innerHTML = format(obj.options.text.showingPage, obj.pageNumber + 1, quantyOfPages)
-            }
-        }
-    }
-
-    /**
-     * Download CSV table
-     * 
-     * @return null
-     */
-    obj.download = function(includeHeaders) {
-        if (obj.options.allowExport == false) {
-            console.error('Export not allowed');
-        } else {
-            // Data
-            var data = '';
-            if (includeHeaders == true) {
-                data += obj.getHeaders();
-                data += "\r\n";
-            }
-            // Get data
-            data += obj.copy(false, obj.options.csvDelimiter, true);
-            // Download element
-            var pom = document.createElement('a');
-            var blob = new Blob([data], {type: 'text/csv;charset=utf-8;'});
-            var url = URL.createObjectURL(blob);
-            pom.href = url;
-            pom.setAttribute('download', obj.options.csvFileName + '.csv');
-            document.body.appendChild(pom);
-            pom.click();
-            pom.parentNode.removeChild(pom);
-        }
-    }
-
-    /**
-     * Initializes a new history record for undo/redo
-     * 
-     * @return null
-     */
-    obj.setHistory = function(changes) {
-        if (obj.ignoreHistory != true) {
-            // Increment and get the current history index
-            var index = ++obj.historyIndex;
-
-            // Slice the array to discard undone changes
-            obj.history = (obj.history = obj.history.slice(0, index + 1));
-
-            // Keep history
-            obj.history[index] = changes;
-        }
-    }
-
-    /**
-     * Copy method
-     * 
-     * @param bool highlighted - Get only highlighted cells
-     * @param delimiter - \t default to keep compatibility with excel
-     * @return string value
-     */
-    obj.copy = function(highlighted, delimiter, returnData) {
-        if (! delimiter) {
-            delimiter = "\t";
-        }
-
-        // Controls
-        var col = [];
-        var colLabel = [];
-        var row = [];
-        var rowLabel = [];
-        var x = obj.options.data[0].length
-        var y = obj.options.data.length
-        var tmp = '';
-
-        // Reset container
-        obj.style = [];
-
-        // Go through the columns to get the data
-        for (var j = 0; j < y; j++) {
-            col = [];
-            colLabel = [];
-
-            for (var i = 0; i < x; i++) {
-                // If cell is highlighted
-                if (! highlighted || obj.records[j][i].classList.contains('highlight')) {
-                    // Values
-                    var value = obj.options.data[j][i];
-                    if (value.match && (value.match(/,/g) || value.match(/\n/) || value.match(/\"/))) {
-                        value = value.replace(new RegExp('"', 'g'), '""');
-                        value = '"' + value + '"';
-                    }
-                    col.push(value);
-
-                    // Labels
-                    var label = obj.records[j][i].innerHTML;
-                    if (label.match && (label.match(/,/g) || label.match(/\n/) || label.match(/\"/))) {
-                        // Scape double quotes
-                        label = label.replace(new RegExp('"', 'g'), '""');
-                        label = '"' + label + '"';
-                    }
-                    colLabel.push(label);
-
-                    // Get style
-                    tmp = obj.records[j][i].getAttribute('style');
-                    obj.style.push(tmp ? tmp : '');
-                }
-            }
-
-            if (col.length) {
-                row.push(col.join(delimiter));
-            }
-            if (colLabel.length) {
-                rowLabel.push(colLabel.join(delimiter));
-            }
-        }
-
-        // Final string
-        var str = row.join("\n");
-        var strLabel = rowLabel.join("\n");
-
-        // Create a hidden textarea to copy the values
-        if (! returnData) {
-            if (obj.options.copyCompatibility == true) {
-                obj.textarea.value = strLabel;
-            } else {
-                obj.textarea.value = str;
-            }
-            obj.textarea.select();
-            document.execCommand("copy");
-        }
-
-        // Keep data
-        if (obj.options.copyCompatibility == true) {
-            obj.data = strLabel;
-        } else {
-        obj.data = str;
-        }
-        // Keep non visible information
-        obj.hashString = obj.hash(obj.data);
-
-        return obj.data;
-    }
-
-    /**
-     * jExcel paste method
-     * 
-     * @param integer row number
-     * @return string value
-     */
-    obj.paste = function(x, y, data) {
-        // Paste filter
-        if (typeof(obj.options.onbeforepaste) == 'function') {
-            var data = obj.options.onbeforepaste(el, data);
-        }
-
-        // Controls
-        var hash = obj.hash(data);
-        var style = (hash == obj.hashString) ? obj.style : null;
-
-        // Depending on the behavior
-        if (obj.options.copyCompatibility == true && hash == obj.hashString) {
-            var data = obj.data;
-        }
-
-        // Split new line
-        var data = obj.parseCSV(data, "\t");
-
-        if (x != null && y != null && data) {
-            // Records
-            var i = 0;
-            var j = 0;
-            var records = [];
-            var newStyle = {};
-            var oldStyle = {};
-            var styleIndex = 0;
-
-            // Index
-            var colIndex = parseInt(x);
-            var rowIndex = parseInt(y);
-            var row = null;
-
-            // Go through the columns to get the data
-            while (row = data[j]) {
-                i = 0;
-                colIndex = parseInt(x);
-
-                while (row[i] != null) {
-                    // Update and keep history
-                    var record = obj.updateCell(colIndex, rowIndex, row[i]);
-                    // Keep history
-                    records.push(record);
-                    // Update all formulas in the chain
-                    obj.updateFormulaChain(colIndex, rowIndex, records);
-                    // Style
-                    if (style) {
-                        var columnName = jexcel.getColumnNameFromId([colIndex, rowIndex]);
-                        newStyle[columnName] = style[styleIndex];
-                        oldStyle[columnName] = obj.getStyle(columnName);
-                        obj.records[rowIndex][colIndex].setAttribute('style', style[styleIndex]);
-                        styleIndex++
-                    }
-                    i++;
-                    if (row[i] != null) {
-                        if (colIndex >= obj.headers.length - 1) {
-                            obj.insertColumn();
-                        }
-                        colIndex = obj.right.get(colIndex, rowIndex);
-                    }
-                }
-
-                j++;
-                if (data[j]) {
-                    if (rowIndex >= obj.rows.length-1) {
-                        obj.insertRow();
-                    }
-                    rowIndex = obj.down.get(x, rowIndex);
-                }
-            }
-
-            // Select the new cells
-            obj.updateSelectionFromCoords(x, y, colIndex, rowIndex);
-
-            // Update history
-            obj.setHistory({
-                action:'setValue',
-                records:records,
-                selection:obj.selectedCell,
-                newStyle:newStyle,
-                oldStyle:oldStyle,
-            });
-
-            // Update table
-            obj.updateTable();
-
-            // Paste event
-            if (typeof(obj.options.onpaste) == 'function') {
-                obj.options.onpaste(el, records);
-            }
-
-            // On after changes
-            obj.onafterchanges(el, records);
-        }
-    }
-
-    /**
-     * Process row
-     */
-    obj.historyProcessRow = function(type, historyRecord) {
-        var rowIndex = (! historyRecord.insertBefore) ? historyRecord.rowNumber + 1 : historyRecord.rowNumber;
-
-        if (obj.options.search == true) {
-            if (obj.results && obj.results.length != obj.rows.length) {
-                obj.resetSearch();
-            }
-        }
-
-        // Remove row
-        if (type == 1) {
-            var numOfRows = historyRecord.numOfRows;
-            // Remove nodes
-            for (var j = rowIndex; j < (numOfRows + rowIndex); j++) {
-                obj.rows[j].parentNode.removeChild(obj.rows[j]);
-            }
-            // Remove references
-            obj.records.splice(rowIndex, numOfRows);
-            obj.options.data.splice(rowIndex, numOfRows);
-            obj.rows.splice(rowIndex, numOfRows);
-
-            obj.conditionalSelectionUpdate(1, rowIndex, (numOfRows + rowIndex) - 1);
-        } else {
-            // Insert data
-            obj.records = jexcel.injectArray(obj.records, rowIndex, historyRecord.rowRecords);
-            obj.options.data = jexcel.injectArray(obj.options.data, rowIndex, historyRecord.rowData);
-            obj.rows = jexcel.injectArray(obj.rows, rowIndex, historyRecord.rowNode);
-            // Insert nodes
-            var index = 0
-            for (var j = rowIndex; j < (historyRecord.numOfRows + rowIndex); j++) {
-                obj.tbody.insertBefore(historyRecord.rowNode[index], obj.tbody.children[j]);
-                index++;
-            }
-        }
-
-        // Respect pagination
-        if (obj.options.pagination > 0) {
-            obj.page(obj.pageNumber);
-        }
-
-        obj.updateTableReferences();
-    }
-
-    /**
-     * Process column
-     */
-    obj.historyProcessColumn = function(type, historyRecord) {
-        var columnIndex = (! historyRecord.insertBefore) ? historyRecord.columnNumber + 1 : historyRecord.columnNumber;
-
-        // Remove column
-        if (type == 1) {
-            var numOfColumns = historyRecord.numOfColumns;
-
-            obj.options.columns.splice(columnIndex, numOfColumns);
-            for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) {
-                obj.headers[i].parentNode.removeChild(obj.headers[i]);
-                obj.colgroup[i].parentNode.removeChild(obj.colgroup[i]);
-            }
-            obj.headers.splice(columnIndex, numOfColumns);
-            obj.colgroup.splice(columnIndex, numOfColumns);
-            for (var j = 0; j < historyRecord.data.length; j++) {
-                for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) {
-                    obj.records[j][i].parentNode.removeChild(obj.records[j][i]);
-                }
-                obj.records[j].splice(columnIndex, numOfColumns);
-                obj.options.data[j].splice(columnIndex, numOfColumns);
-            }
-
-            obj.conditionalSelectionUpdate(0, columnIndex, (numOfColumns + columnIndex) - 1);
-        } else {
-            // Insert data
-            obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, historyRecord.columns);
-            obj.headers = jexcel.injectArray(obj.headers, columnIndex, historyRecord.headers);
-            obj.colgroup = jexcel.injectArray(obj.colgroup, columnIndex, historyRecord.colgroup);
-
-            var index = 0
-            for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) {
-                obj.headerContainer.insertBefore(historyRecord.headers[index], obj.headerContainer.children[i+1]);
-                obj.colgroupContainer.insertBefore(historyRecord.colgroup[index], obj.colgroupContainer.children[i+1]);
-                index++;
-            }
-
-            for (var j = 0; j < historyRecord.data.length; j++) {
-                obj.options.data[j] = jexcel.injectArray(obj.options.data[j], columnIndex, historyRecord.data[j]);
-                obj.records[j] = jexcel.injectArray(obj.records[j], columnIndex, historyRecord.records[j]);
-                var index = 0
-                for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) {
-                    obj.rows[j].insertBefore(historyRecord.records[j][index], obj.rows[j].children[i+1]);
-                    index++;
-                }
-            }
-        }
-
-        // Adjust nested headers
-        if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
-            // Flexible way to handle nestedheaders
-            if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
-                for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
-                    if (type == 1) {
-                        var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - historyRecord.numOfColumns;
-                    } else {
-                        var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + historyRecord.numOfColumns;
-                    }
-                    obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;
-                    obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);
-                }
-            } else {
-                if (type == 1) {
-                    var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - historyRecord.numOfColumns;
-                } else {
-                    var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + historyRecord.numOfColumns;
-                }
-                obj.options.nestedHeaders[0].colspan = colspan;
-                obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);
-            }
-        }
-
-        obj.updateTableReferences();
-    }
-
-    /**
-     * Undo last action
-     */
-    obj.undo = function() {
-        // Ignore events and history
-        var ignoreEvents = obj.ignoreEvents ? true : false;
-        var ignoreHistory = obj.ignoreHistory ? true : false;
-
-        obj.ignoreEvents = true;
-        obj.ignoreHistory = true;
-
-        // Records
-        var records = [];
-
-        // Update cells
-        if (obj.historyIndex >= 0) {
-            // History
-            var historyRecord = obj.history[obj.historyIndex--];
-
-            if (historyRecord.action == 'insertRow') {
-                obj.historyProcessRow(1, historyRecord);
-            } else if (historyRecord.action == 'deleteRow') {
-                obj.historyProcessRow(0, historyRecord);
-            } else if (historyRecord.action == 'insertColumn') {
-                obj.historyProcessColumn(1, historyRecord);
-            } else if (historyRecord.action == 'deleteColumn') {
-                obj.historyProcessColumn(0, historyRecord);
-            } else if (historyRecord.action == 'moveRow') {
-                obj.moveRow(historyRecord.newValue, historyRecord.oldValue);
-            } else if (historyRecord.action == 'moveColumn') {
-                obj.moveColumn(historyRecord.newValue, historyRecord.oldValue);
-            } else if (historyRecord.action == 'setMerge') {
-                obj.removeMerge(historyRecord.column, historyRecord.data);
-            } else if (historyRecord.action == 'setStyle') {
-                obj.setStyle(historyRecord.oldValue, null, null, 1);
-            } else if (historyRecord.action == 'setWidth') {
-                obj.setWidth(historyRecord.column, historyRecord.oldValue);
-            } else if (historyRecord.action == 'setHeight') {
-                obj.setHeight(historyRecord.row, historyRecord.oldValue);
-            } else if (historyRecord.action == 'setHeader') {
-                obj.setHeader(historyRecord.column, historyRecord.oldValue);
-            } else if (historyRecord.action == 'setComments') {
-                obj.setComments(historyRecord.column, historyRecord.oldValue[0], historyRecord.oldValue[1]);
-            } else if (historyRecord.action == 'orderBy') {
-                var rows = [];
-                for (var j = 0; j < historyRecord.rows.length; j++) {
-                    rows[historyRecord.rows[j]] = j;
-                }
-                obj.updateOrderArrow(historyRecord.column, historyRecord.order ? 0 : 1);
-                obj.updateOrder(rows);
-            } else if (historyRecord.action == 'setValue') {
-                // Redo for changes in cells
-                for (var i = 0; i < historyRecord.records.length; i++) {
-                    obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].oldValue);
-                    obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records);
-                    if (historyRecord.oldStyle) {
-                        obj.resetStyle(historyRecord.oldStyle, true);
-                    }
-                }
-                // Update selection
-                if (! historyRecord.selection) {
-                    historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row];
-                }
-                obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]);
-                // Update table
-                obj.updateTable();
-            }
-        }
-        obj.ignoreEvents = ignoreEvents;
-        obj.ignoreHistory = ignoreHistory;
-
-        if (typeof(obj.options.onundo) == 'function') {
-            obj.options.onundo(el, historyRecord);
-        }
-    }
-
-    /**
-     * Redo previously undone action
-     */
-    obj.redo = function() {
-        // Ignore events and history
-        var ignoreEvents = obj.ignoreEvents ? true : false;
-        var ignoreHistory = obj.ignoreHistory ? true : false;
-
-        obj.ignoreEvents = true;
-        obj.ignoreHistory = true;
-
-        // Records
-        var records = [];
-
-        // Update cells
-        if (obj.historyIndex < obj.history.length - 1) {
-            // History
-            var historyRecord = obj.history[++obj.historyIndex];
-
-            if (historyRecord.action == 'insertRow') {
-                obj.historyProcessRow(0, historyRecord);
-            } else if (historyRecord.action == 'deleteRow') {
-                obj.historyProcessRow(1, historyRecord);
-            } else if (historyRecord.action == 'insertColumn') {
-                obj.historyProcessColumn(0, historyRecord);
-            } else if (historyRecord.action == 'deleteColumn') {
-                obj.historyProcessColumn(1, historyRecord);
-            } else if (historyRecord.action == 'moveRow') {
-                obj.moveRow(historyRecord.oldValue, historyRecord.newValue);
-            } else if (historyRecord.action == 'moveColumn') {
-                obj.moveColumn(historyRecord.oldValue, historyRecord.newValue);
-            } else if (historyRecord.action == 'setMerge') {
-                obj.setMerge(historyRecord.column, historyRecord.colspan, historyRecord.rowspan, 1);
-            } else if (historyRecord.action == 'setStyle') {
-                obj.setStyle(historyRecord.newValue, null, null, 1);
-            } else if (historyRecord.action == 'setWidth') {
-                obj.setWidth(historyRecord.column, historyRecord.newValue);
-            } else if (historyRecord.action == 'setHeight') {
-                obj.setHeight(historyRecord.row, historyRecord.newValue);
-            } else if (historyRecord.action == 'setHeader') {
-                obj.setHeader(historyRecord.column, historyRecord.newValue);
-            } else if (historyRecord.action == 'setComments') {
-                obj.setComments(historyRecord.column, historyRecord.newValue[0], historyRecord.newValue[1]);
-            } else if (historyRecord.action == 'orderBy') {
-                obj.updateOrderArrow(historyRecord.column, historyRecord.order);
-                obj.updateOrder(historyRecord.rows);
-            } else if (historyRecord.action == 'setValue') {
-                // Redo for changes in cells
-                for (var i = 0; i < historyRecord.records.length; i++) {
-                    obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].newValue);
-                    obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records);
-                    if (historyRecord.newStyle) {
-                        obj.resetStyle(historyRecord.newStyle, true);
-                    }
-                }
-
-                // Update selection
-                if (! historyRecord.selection) {
-                    historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row];
-                }
-                obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]);
-                // Update table
-                obj.updateTable();
-            }
-        }
-        obj.ignoreEvents = ignoreEvents;
-        obj.ignoreHistory = ignoreHistory;
-
-        if (typeof(obj.options.onredo) == 'function') {
-            obj.options.onredo(el, historyRecord);
-        }
-    }
-
-    /**
-     * Get dropdown value from key
-     */
-    obj.getDropDownValue = function(column, key) {
-        var value = [];
-
-        if (obj.options.columns[column] && obj.options.columns[column].source) {
-            // Create array from source
-            var combo = [];
-            var source = obj.options.columns[column].source;
-
-            for (var i = 0; i < source.length; i++) {
-                if (typeof(source[i]) == 'object') {
-                    combo[source[i].id] = source[i].name;
-                } else {
-                    combo[source[i]] = source[i];
-                }
-            }
-
-            // Garante single multiple compatibily
-            var keys = ('' + key).split(';')
-
-            for (var i = 0; i < keys.length; i++) {
-                if (combo[keys[i]]) {
-                    value.push(combo[keys[i]]);
-                }
-            }
-        } else {
-            console.error('Invalid column');
-        }
-
-        return (value.length > 0) ? value.join('; ') : '';
-    }
-
-    /**
-     * From starckoverflow contributions
-     */
-    obj.parseCSV = function(str, delimiter) {
-        // Remove last line break
-        str = str.replace(/\r?\n$|\r$|\n$/g, "");
-        // Last caracter is the delimiter
-        if (str.charCodeAt(str.length-1) == 9) {
-            str += "\0";
-        }
-        // user-supplied delimeter or default comma
-        delimiter = (delimiter || ",");
-
-        var arr = [];
-        var quote = false;  // true means we're inside a quoted field
-        // iterate over each character, keep track of current row and column (of the returned array)
-        for (var row = 0, col = 0, c = 0; c < str.length; c++) {
-            var cc = str[c], nc = str[c+1];
-            arr[row] = arr[row] || [];
-            arr[row][col] = arr[row][col] || '';
-
-            // If the current character is a quotation mark, and we're inside a quoted field, and the next character is also a quotation mark, add a quotation mark to the current column and skip the next character
-            if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; }  
-
-            // If it's just one quotation mark, begin/end quoted field
-            if (cc == '"') { quote = !quote; continue; }
-
-            // If it's a comma and we're not in a quoted field, move on to the next column
-            if (cc == delimiter && !quote) { ++col; continue; }
-
-            // If it's a newline (CRLF) and we're not in a quoted field, skip the next character and move on to the next row and move to column 0 of that new row
-            if (cc == '\r' && nc == '\n' && !quote) { ++row; col = 0; ++c; continue; }
-
-            // If it's a newline (LF or CR) and we're not in a quoted field, move on to the next row and move to column 0 of that new row
-            if (cc == '\n' && !quote) { ++row; col = 0; continue; }
-            if (cc == '\r' && !quote) { ++row; col = 0; continue; }
-
-            // Otherwise, append the current character to the current column
-            arr[row][col] += cc;
-        }
-        return arr;
-    }
-
-    obj.hash = function(str) {
-        var hash = 0, i, chr;
-
-        if (str.length === 0) {
-            return hash;
-        } else {
-            for (i = 0; i < str.length; i++) {
-              chr = str.charCodeAt(i);
-              hash = ((hash << 5) - hash) + chr;
-              hash |= 0;
-            }
-        }
-        return hash;
-    }
-
-    obj.onafterchanges = function(el, records) {
-        if (! obj.ignoreEvents) {
-            // On after changes
-            if (typeof(obj.options.onafterchanges) == 'function') {
-                obj.options.onafterchanges(el, records);
-            }
-        }
-    }
-
-    /**
-     * Initialization method
-     */
-    obj.init = function() {
-        jexcel.current = obj;
-
-        // Build handlers
-        if (typeof(jexcel.build) == 'function') {
-            jexcel.build();
-            jexcel.build = null;
-        }
-
-        // Load the table data based on an CSV file
-        if (obj.options.csv) {
-            // Loading
-            if (obj.options.loadingSpin == true) {
-                jSuites.loading.show();
-            }
-
-            // Load CSV file
-            jSuites.ajax({
-                url: obj.options.csv,
-                method: 'GET',
-                dataType: 'text',
-                success: function(result) {
-                    // Convert data
-                    var newData = obj.parseCSV(result, obj.options.csvDelimiter)
-
-                    // Headers
-                    if (obj.options.csvHeaders == true && newData.length > 0) {
-                        var headers = newData.shift();
-                        for(var i = 0; i < headers.length; i++) {
-                            if (! obj.options.columns[i]) {
-                                obj.options.columns[i] = { type:'text', align:obj.options.defaultColAlign, width:obj.options.defaultColWidth };
-                            }
-                            // Precedence over pre-configurated titles
-                            if (typeof obj.options.columns[i].title === 'undefined') {
-                              obj.options.columns[i].title = headers[i];
-                            }
-                        }
-                    }
-                    // Data
-                    obj.options.data = newData;
-                    // Prepare table
-                    obj.prepareTable();
-                    // Hide spin
-                    if (obj.options.loadingSpin == true) {
-                        jSuites.loading.hide();
-                    }
-                }
-            });
-        } else if (obj.options.url) {
-            // Loading
-            if (obj.options.loadingSpin == true) {
-                jSuites.loading.show();
-            }
-
-            jSuites.ajax({
-                url: obj.options.url,
-                method: 'GET',
-                dataType: 'json',
-                success: function(result) {
-                    // Data
-                    obj.options.data = (result.data) ? result.data : result;
-                    // Prepare table
-                    obj.prepareTable();
-                    // Hide spin
-                    if (obj.options.loadingSpin == true) {
-                        jSuites.loading.hide();
-                    }
-                }
-            });
-        } else {
-            // Prepare table
-            obj.prepareTable();
-        }
-    }
-
-    // Context menu
-    if (options && options.contextMenu != null) {
-        obj.options.contextMenu = options.contextMenu;
-    } else {
-        obj.options.contextMenu = function(el, x, y, e) {
-            var items = [];
-
-            if (y == null) {
-                // Insert a new column
-                if (obj.options.allowInsertColumn == true) {
-                    items.push({
-                        title:obj.options.text.insertANewColumnBefore,
-                        onclick:function() {
-                            obj.insertColumn(1, parseInt(x), 1);
-                        }
-                    });
-                }
-
-                if (obj.options.allowInsertColumn == true) {
-                    items.push({
-                        title:obj.options.text.insertANewColumnAfter,
-                        onclick:function() {
-                            obj.insertColumn(1, parseInt(x), 0);
-                        }
-                    });
-                }
-
-                // Delete a column
-                if (obj.options.allowDeleteColumn == true) {
-                    items.push({
-                        title:obj.options.text.deleteSelectedColumns,
-                        onclick:function() {
-                            obj.deleteColumn(obj.getSelectedColumns().length ? undefined : parseInt(x));
-                        }
-                    });
-                }
-
-                // Rename column
-                if (obj.options.allowRenameColumn == true) {
-                    items.push({
-                        title:obj.options.text.renameThisColumn,
-                        onclick:function() {
-                            obj.setHeader(x);
-                        }
-                    });
-                }
-
-                // Sorting
-                if (obj.options.columnSorting == true) {
-                    // Line
-                    items.push({ type:'line' });
-
-                    items.push({
-                        title:obj.options.text.orderAscending,
-                        onclick:function() {
-                            obj.orderBy(x, 0);
-                        }
-                    });
-                    items.push({
-                        title:obj.options.text.orderDescending,
-                        onclick:function() {
-                            obj.orderBy(x, 1);
-                        }
-                    });
-                }
-            } else {
-                // Insert new row
-                if (obj.options.allowInsertRow == true) {
-                    items.push({
-                        title:obj.options.text.insertANewRowBefore,
-                        onclick:function() {
-                            obj.insertRow(1, parseInt(y), 1);
-                        }
-                    });
-
-                    items.push({
-                        title:obj.options.text.insertANewRowAfter,
-                        onclick:function() {
-                            obj.insertRow(1, parseInt(y));
-                        }
-                    });
-                }
-
-                if (obj.options.allowDeleteRow == true) {
-                    items.push({
-                        title:obj.options.text.deleteSelectedRows,
-                        onclick:function() {
-                            obj.deleteRow(obj.getSelectedRows().length ? undefined : parseInt(y));
-                        }
-                    });
-                }
-
-                if (x) {
-                    if (obj.options.allowComments == true) {
-                        items.push({ type:'line' });
-
-                        var title = obj.records[y][x].getAttribute('title') || '';
-
-                        items.push({
-                            title: title ? obj.options.text.editComments : obj.options.text.addComments,
-                            onclick:function() {
-                                obj.setComments([ x, y ], prompt(obj.options.text.comments, title));
-                            }
-                        });
-
-                        if (title) {
-                            items.push({
-                                title:obj.options.text.clearComments,
-                                onclick:function() {
-                                    obj.setComments([ x, y ], '');
-                                }
-                            });
-                        }
-                    }
-                }
-            }
-
-            // Line
-            items.push({ type:'line' });
-
-            // Copy
-            items.push({
-                title:obj.options.text.copy,
-                shortcut:'Ctrl + C',
-                onclick:function() {
-                    obj.copy(true);
-                }
-            });
-
-            // Paste
-            if (navigator && navigator.clipboard) {
-                items.push({
-                    title:obj.options.text.paste,
-                    shortcut:'Ctrl + V',
-                    onclick:function() {
-                        if (obj.selectedCell) {
-                            navigator.clipboard.readText().then(function(text) {
-                                if (text) {
-                                    jexcel.current.paste(obj.selectedCell[0], obj.selectedCell[1], text);
-                                }
-                            });
-                        }
-                    }
-                });
-            }
-
-            // Save
-            if (obj.options.allowExport) {
-                items.push({
-                    title: obj.options.text.saveAs,
-                    shortcut: 'Ctrl + S',
-                    onclick: function () {
-                        obj.download();
-                    }
-                });
-            }
-
-            // About
-            if (obj.options.about) {
-                items.push({
-                    title:obj.options.text.about,
-                    onclick:function() {
-                        alert(obj.options.about);
-                    }
-                });
-            }
-
-            return items;
-        }
-    }
-
-    obj.scrollControls = function(e) {
-        if (obj.options.lazyLoading == true) {
-            if (jexcel.timeControlLoading == null) {
-                jexcel.timeControlLoading = setTimeout(function() {
-                    if (obj.content.scrollTop + obj.content.clientHeight >= obj.content.scrollHeight) {
-                        if (obj.loadDown()) {
-                            if (obj.content.scrollTop + obj.content.clientHeight > obj.content.scrollHeight - 10) {
-                                obj.content.scrollTop = obj.content.scrollTop - obj.content.clientHeight;
-                            }
-                            obj.updateCornerPosition();
-                        }
-                    } else if (obj.content.scrollTop <= obj.content.clientHeight) {
-                        if (obj.loadUp()) {
-                            if (obj.content.scrollTop < 10) {
-                                obj.content.scrollTop = obj.content.scrollTop + obj.content.clientHeight;
-                            }
-                            obj.updateCornerPosition();
-                        }
-                    }
-
-                    jexcel.timeControlLoading = null;
-                }, 100);
-            }
-        }
-
-        // Close editor
-        if (obj.options.lazyLoading == true || obj.options.tableOverflow == true) {
-            if (obj.edition && e.target.className.substr(0,9) != 'jdropdown') {
-                obj.closeEditor(obj.edition[0], true);
-            }
-        }
-    }
-
-    el.addEventListener("DOMMouseScroll", obj.scrollControls);
-    el.addEventListener("mousewheel", obj.scrollControls);
-
-    el.jexcel = obj;
-
-    obj.init();
-
-    return obj;
-});
-
-jexcel.current = null;
-jexcel.timeControl = null;
-jexcel.timeControlLoading= null;
-
-jexcel.destroy = function(element, destroyEventHandlers) {
-    if (element.jexcel) {
-        element.jexcel = null;
-        element.innerHTML = '';
-
-        if (destroyEventHandlers) {
-            document.removeEventListener("keydown", jexcel.keyDownControls);
-            document.removeEventListener("mouseup", jexcel.mouseUpControls);
-            document.removeEventListener("mousedown", jexcel.mouseDownControls);
-            document.removeEventListener("mousemove", jexcel.mouseMoveControls);
-            document.removeEventListener("mouseover", jexcel.mouseOverControls);
-            document.removeEventListener("dblclick", jexcel.doubleClickControls);
-            document.removeEventListener("paste", jexcel.pasteControls);
-            document.removeEventListener("contextmenu", jexcel.contextMenuControls);
-            document.removeEventListener("touchstart", jexcel.touchStartControls);
-            document.removeEventListener("touchend", jexcel.touchEndControls);
-            document.removeEventListener("touchcancel", jexcel.touchEndControls);
-            jexcel = null;
-        }
-    }
-}
-
-jexcel.build = function() {
-    document.addEventListener("keydown", jexcel.keyDownControls);
-    document.addEventListener("mouseup", jexcel.mouseUpControls);
-    document.addEventListener("mousedown", jexcel.mouseDownControls);
-    document.addEventListener("mousemove", jexcel.mouseMoveControls);
-    document.addEventListener("mouseover", jexcel.mouseOverControls);
-    document.addEventListener("dblclick", jexcel.doubleClickControls);
-    document.addEventListener("paste", jexcel.pasteControls);
-    document.addEventListener("contextmenu", jexcel.contextMenuControls);
-    document.addEventListener("touchstart", jexcel.touchStartControls);
-    document.addEventListener("touchend", jexcel.touchEndControls);
-    document.addEventListener("touchcancel", jexcel.touchEndControls);
-    document.addEventListener("touchmove", jexcel.touchEndControls);
-}
-
-/**
- * Valid international letter
- */
-
-jexcel.validLetter = function (text) {
-    var regex = /([\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+)/g;
-    return text.match(regex) ? 1 : 0;
-}
-
-/**
- * Helper injectArray
- */
-jexcel.injectArray = function(o, idx, arr) {
-    return o.slice(0, idx).concat(arr).concat(o.slice(idx));
-}
-
-/**
- * Get letter based on a number
- * 
- * @param integer i
- * @return string letter
- */
-jexcel.getColumnName = function(i) {
-    var letter = '';
-    if (i > 701) {
-        letter += String.fromCharCode(64 + parseInt(i / 676));
-        letter += String.fromCharCode(64 + parseInt((i % 676) / 26));
-    } else if (i > 25) {
-        letter += String.fromCharCode(64 + parseInt(i / 26));
-    }
-    letter += String.fromCharCode(65 + (i % 26));
-
-    return letter;
-}
-
-/**
- * Convert excel like column to jexcel id
- * 
- * @param string id
- * @return string id
- */
-jexcel.getIdFromColumnName = function (id, arr) {
-    // Get the letters
-    var t = /^[a-zA-Z]+/.exec(id);
-
-    if (t) {
-        // Base 26 calculation
-        var code = 0;
-        for (var i = 0; i < t[0].length; i++) {
-            code += parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, (t[0].length - 1 - i));
-        }
-        code--;
-        // Make sure jexcel starts on zero
-        if (code < 0) {
-            code = 0;
-        }
-
-        // Number
-        var number = parseInt(/[0-9]+$/.exec(id));
-        if (number > 0) {
-            number--;
-        }
-
-        if (arr == true) {
-            id = [ code, number ];
-        } else {
-            id = code + '-' + number;
-        }
-    }
-
-    return id;
-}
-
-/**
- * Convert jexcel id to excel like column name
- * 
- * @param string id
- * @return string id
- */
-jexcel.getColumnNameFromId = function (cellId) {
-    if (! Array.isArray(cellId)) {
-        cellId = cellId.split('-');
-    }
-
-    return jexcel.getColumnName(parseInt(cellId[0])) + (parseInt(cellId[1]) + 1);
-}
-
-/**
- * Inside jexcel table
- * 
- * @param string id
- * @return string id
- */
-jexcel.getElement = function(element) {
-    var jexcelSection = 0;
-    var jexcelElement = 0;
-
-    function path (element) {
-        if (element.className) {
-            if (element.classList.contains('jexcel_container')) {
-                jexcelElement = element;
-            }
-        }
-
-        if (element.tagName == 'THEAD') {
-            jexcelSection = 1;
-        } else if (element.tagName == 'TBODY') {
-            jexcelSection = 2;
-        }
-
-        if (element.parentNode) {
-            path(element.parentNode);
-        }
-    }
-
-    path(element);
-
-    return [ jexcelElement, jexcelSection ];
-}
-
-/**
- * Events
- */
-jexcel.keyDownControls = function(e) {
-    if (jexcel.current) {
-        if (jexcel.current.edition) {
-            if (e.which == 27) {
-                // Escape
-                if (jexcel.current.edition) {
-                    // Exit without saving
-                    jexcel.current.closeEditor(jexcel.current.edition[0], false);
-                }
-                e.preventDefault();
-            } else if (e.which == 13) {
-                // Enter
-                if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') {
-                    jexcel.current.editor[0].children[0].calendar.close(1);
-                } else if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'dropdown' ||
-                           jexcel.current.options.columns[jexcel.current.edition[2]].type == 'autocomplete') {
-                    // Do nothing
-                } else {
-                    // Alt enter -> do not close editor
-                    if ((jexcel.current.options.wordWrap == true ||
-                         jexcel.current.options.columns[jexcel.current.edition[2]].wordWrap == true ||
-                         jexcel.current.options.data[jexcel.current.edition[3]][jexcel.current.edition[2]].length > 200) && e.altKey) {
-                        // Add new line to the editor
-                        var editorTextarea = jexcel.current.edition[0].children[0];
-                        var editorValue = jexcel.current.edition[0].children[0].value;
-                        var editorIndexOf = editorTextarea.selectionStart;
-                        editorValue = editorValue.slice(0, editorIndexOf) + "\n" + editorValue.slice(editorIndexOf);
-                        editorTextarea.value = editorValue;
-                        editorTextarea.focus();
-                        editorTextarea.selectionStart = editorIndexOf + 1;
-                        editorTextarea.selectionEnd = editorIndexOf + 1;
-                    } else {
-                        jexcel.current.edition[0].children[0].blur();
-                    }
-                }
-            } else if (e.which == 9) {
-                // Tab
-                if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') {
-                    jexcel.current.edition[0].children[0].calendar.close(1);
-                } else {
-                    jexcel.current.edition[0].children[0].blur();
-                }
-            }
-        }
-
-        if (! jexcel.current.edition && jexcel.current.selectedCell) {
-            // Which key
-            if (e.which == 37) {
-                jexcel.current.left(e.shiftKey, e.ctrlKey);
-                e.preventDefault();
-            } else if (e.which == 39) {
-                jexcel.current.right(e.shiftKey, e.ctrlKey);
-                e.preventDefault();
-            } else if (e.which == 38) {
-                jexcel.current.up(e.shiftKey, e.ctrlKey);
-                e.preventDefault();
-            } else if (e.which == 40) {
-                jexcel.current.down(e.shiftKey, e.ctrlKey);
-                e.preventDefault();
-            } else if (e.which == 36) {
-                jexcel.current.first(e.shiftKey, e.ctrlKey);
-                e.preventDefault();
-            } else if (e.which == 35) {
-                jexcel.current.last(e.shiftKey, e.ctrlKey);
-                e.preventDefault();
-            } else if (e.which == 32) {
-                if (jexcel.current.options.editable == true) {
-                    jexcel.current.setCheckRadioValue();
-                }
-                e.preventDefault();
-            } else if (e.which == 46) {
-                // Delete
-                if (jexcel.current.options.editable == true) {
-                    if (jexcel.current.selectedRow) {
-                        if (jexcel.current.options.allowDeleteRow == true) {
-                            if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedRows)) {
-                                jexcel.current.deleteRow();
-                            }
-                        }
-                    } else if (jexcel.current.selectedHeader) {
-                        if (jexcel.current.options.allowDeleteColumn == true) {
-                            if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedColumns)) {
-                                jexcel.current.deleteColumn();
-                            }
-                        }
-                    } else {
-                        // Change value
-                        jexcel.current.setValue(jexcel.current.highlighted, '');
-                    }
-                }
-            } else if (e.which == 13) {
-                // Move cursor
-                if (e.shiftKey) {
-                    jexcel.current.up();
-                } else {
-                    if (jexcel.current.options.allowInsertRow == true) {
-                        if (jexcel.current.options.allowManualInsertRow == true) {
-                            if (jexcel.current.selectedCell[1] == jexcel.current.options.data.length - 1) {
-                                // New record in case selectedCell in the last row
-                                jexcel.current.insertRow();
-                            }
-                        }
-                    }
-
-                    jexcel.current.down();
-                }
-                e.preventDefault();
-            } else if (e.which == 9) {
-                // Tab
-                if (e.shiftKey) {
-                    jexcel.current.left();
-                } else {
-                    if (jexcel.current.options.allowInsertColumn == true) {
-                        if (jexcel.current.options.allowManualInsertColumn == true) {
-                            if (jexcel.current.selectedCell[0] == jexcel.current.options.data[0].length - 1) {
-                                // New record in case selectedCell in the last column
-                                jexcel.current.insertColumn();
-                            }
-                        }
-                    }
-
-                    jexcel.current.right();
-                }
-                e.preventDefault();
-            } else {
-                if ((e.ctrlKey || e.metaKey) && ! e.shiftKey) {
-                    if (e.which == 65) {
-                        // Ctrl + A
-                        jexcel.current.selectAll();
-                        e.preventDefault();
-                    } else if (e.which == 83) {
-                        // Ctrl + S
-                        jexcel.current.download();
-                        e.preventDefault();
-                    } else if (e.which == 89) {
-                        // Ctrl + Y
-                        jexcel.current.redo();
-                        e.preventDefault();
-                    } else if (e.which == 90) {
-                        // Ctrl + Z
-                        jexcel.current.undo();
-                        e.preventDefault();
-                    } else if (e.which == 67) {
-                        // Ctrl + C
-                        jexcel.current.copy(true);
-                        e.preventDefault();
-                    } else if (e.which == 67) {
-                        // Ctrl + C
-                        jexcel.current.copy(true);
-                        e.preventDefault();
-                    } else if (e.which == 88) {
-                        // Ctrl + X
-                        if (jexcel.current.options.editable == true) {
-                            jexcel.cutControls();
-                        } else {
-                            jexcel.copyControls();
-                        }
-                        e.preventDefault();
-                    } else if (e.which == 86) {
-                        // Ctrl + V
-                        jexcel.pasteControls();
-                    }
-                } else {
-                    if (jexcel.current.selectedCell) {
-                        if (jexcel.current.options.editable == true) {
-                            var rowId = jexcel.current.selectedCell[1];
-                            var columnId = jexcel.current.selectedCell[0];
-
-                            // If is not readonly
-                            if (jexcel.current.options.columns[columnId].type != 'readonly') {
-                                // Characters able to start a edition
-                                if (e.keyCode == 32) {
-                                    // Space
-                                    if (jexcel.current.options.columns[columnId].type == 'checkbox' ||
-                                        jexcel.current.options.columns[columnId].type == 'radio') {
-                                        e.preventDefault();
-                                    } else {
-                                        // Start edition
-                                        jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true);
-                                    }
-                                } else if (e.keyCode == 113) {
-                                    // Start edition with current content F2
-                                    jexcel.current.openEditor(jexcel.current.records[rowId][columnId], false);
-                                } else if ((e.keyCode == 8) ||
-                                           (e.keyCode >= 48 && e.keyCode <= 57) ||
-                                           (e.keyCode >= 97 && e.keyCode <= 111) ||
-                                           (e.keyCode == 187) ||
-                                           ((String.fromCharCode(e.keyCode) == e.key || String.fromCharCode(e.keyCode).toLowerCase() == e.key.toLowerCase()) && jexcel.validLetter(String.fromCharCode(e.keyCode)))) {
-                                    // Start edition
-                                    jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true);
-                                    // Prevent entries in the calendar
-                                    if (jexcel.current.options.columns[columnId].type == 'calendar') {
-                                        e.preventDefault();
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        } else {
-            if (e.target.classList.contains('jexcel_search')) {
-                if (jexcel.timeControl) {
-                    clearTimeout(jexcel.timeControl);
-                }
-
-                jexcel.timeControl = setTimeout(function() {
-                    jexcel.current.search(e.target.value);
-                }, 200);
-            }
-        }
-    }
-}
-
-jexcel.isMouseAction = false;
-
-jexcel.mouseDownControls = function(e) {
-    e = e || window.event;
-    if (e.buttons) {
-        var mouseButton = e.buttons;
-    } else if (e.button) {
-        var mouseButton = e.button;
-    } else {
-        var mouseButton = e.which;
-    }
-
-    // Get elements
-    var jexcelTable = jexcel.getElement(e.target);
-
-    if (jexcelTable[0]) {
-        if (jexcel.current != jexcelTable[0].jexcel) {
-            if (jexcel.current) {
-                jexcel.current.resetSelection();
-            }
-            jexcel.current = jexcelTable[0].jexcel;
-        }
-    } else {
-        if (jexcel.current) {
-            jexcel.current.resetSelection(true);
-            jexcel.current = null;
-        }
-    }
-
-    if (jexcel.current && mouseButton == 1) {
-        if (e.target.classList.contains('jexcel_selectall')) {
-            if (jexcel.current) {
-                jexcel.current.selectAll();
-            }
-        } else if (e.target.classList.contains('jexcel_corner')) {
-            if (jexcel.current.options.editable == true) {
-                jexcel.current.selectedCorner = true;
-            }
-        } else {
-            // Header found
-            if (jexcelTable[1] == 1) {
-                var columnId = e.target.getAttribute('data-x');
-                if (columnId) {
-                    // Update cursor
-                    var info = e.target.getBoundingClientRect();
-                    if (jexcel.current.options.columnResize == true && info.width - e.offsetX < 6) {
-                        // Resize helper
-                        jexcel.current.resizing = {
-                            mousePosition: e.pageX,
-                            column: columnId,
-                            width: info.width,
-                        };
-
-                        // Border indication
-                        jexcel.current.headers[columnId].classList.add('resizing');
-                        for (var j = 0; j < jexcel.current.records.length; j++) {
-                            if (jexcel.current.records[j][columnId]) {
-                                jexcel.current.records[j][columnId].classList.add('resizing');
-                            }
-                        }
-                    } else if (jexcel.current.options.columnDrag == true && info.height - e.offsetY < 6) {
-                        if (jexcel.current.isColMerged(columnId).length) {
-                            console.error('JEXCEL: This column is part of a merged cell.');
-                        } else {
-                            // Reset selection
-                            jexcel.current.resetSelection();
-                            // Drag helper
-                            jexcel.current.dragging = {
-                                element: e.target,
-                                column:columnId,
-                                destination:columnId,
-                            };
-                            // Border indication
-                            jexcel.current.headers[columnId].classList.add('dragging');
-                            for (var j = 0; j < jexcel.current.records.length; j++) {
-                                if (jexcel.current.records[j][columnId]) {
-                                    jexcel.current.records[j][columnId].classList.add('dragging');
-                                }
-                            }
-                        }
-                    } else {
-                        if (jexcel.current.selectedHeader && (e.shiftKey || e.ctrlKey)) {
-                            var o = jexcel.current.selectedHeader;
-                            var d = columnId;
-                        } else {
-                            // Press to rename
-                            if (jexcel.current.selectedHeader == columnId && jexcel.current.options.allowRenameColumn == true) {
-                                jexcel.timeControl = setTimeout(function() {
-                                    jexcel.current.setHeader(columnId);
-                                }, 800);
-                            }
-
-                            // Keep track of which header was selected first
-                            jexcel.current.selectedHeader = columnId;
-
-                            // Update selection single column
-                            var o = columnId;
-                            var d = columnId;
-                        }
-
-                        // Update selection
-                        jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1);
-                    }
-                } else {
-                    if (e.target.parentNode.classList.contains('jexcel_nested')) {
-                        var column = e.target.getAttribute('data-column').split(',');
-                        var c1 = parseInt(column[0]);
-                        var c2 = parseInt(column[column.length-1]);
-                        jexcel.current.updateSelectionFromCoords(c1, 0, c2, jexcel.current.options.data.length - 1);
-                    }
-                }
-            } else {
-                jexcel.current.selectedHeader = false;
-            }
-
-            // Body found
-            if (jexcelTable[1] == 2) {
-                var rowId = e.target.getAttribute('data-y');
-
-                if (e.target.classList.contains('jexcel_row')) {
-                    var info = e.target.getBoundingClientRect();
-                    if (jexcel.current.options.rowResize == true && info.height - e.offsetY < 6) {
-                        // Resize helper
-                        jexcel.current.resizing = {
-                            element: e.target.parentNode,
-                            mousePosition: e.pageY,
-                            row: rowId,
-                            height: info.height,
-                        };
-                        // Border indication
-                        e.target.parentNode.classList.add('resizing');
-                    } else if (jexcel.current.options.rowDrag == true && info.width - e.offsetX < 6) {
-                        if (jexcel.current.isRowMerged(rowId).length) {
-                            console.error('JEXCEL: This row is part of a merged cell');
-                        } else if (jexcel.current.options.search == true && jexcel.current.results) {
-                            console.error('JEXCEL: Please clear your search before perform this action');
-                        } else {
-                            // Reset selection
-                            jexcel.current.resetSelection();
-                            // Drag helper
-                            jexcel.current.dragging = {
-                                element: e.target.parentNode,
-                                row:rowId,
-                                destination:rowId,
-                            };
-                            // Border indication
-                            e.target.parentNode.classList.add('dragging');
-                        }
-                    } else {
-                        if (jexcel.current.selectedRow && (e.shiftKey || e.ctrlKey)) {
-                            var o = jexcel.current.selectedRow;
-                            var d = rowId;
-                        } else {
-                            // Keep track of which header was selected first
-                            jexcel.current.selectedRow = rowId;
-
-                            // Update selection single column
-                            var o = rowId;
-                            var d = rowId;
-                        }
-
-                        // Update selection
-                        jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d);
-                    }
-                } else {
-                    // Jclose
-                    if (e.target.classList.contains('jclose') && e.target.clientWidth - e.offsetX < 50 && e.offsetY < 50) {
-                        jexcel.current.closeEditor(jexcel.current.edition[0], true);
-                    } else {
-                        var getCellCoords = function(element) {
-                            var x = element.getAttribute('data-x');
-                            var y = element.getAttribute('data-y');
-                            if (x && y) {
-                                return [x, y];
-                            } else {
-                                if (element.parentNode) {
-                                    return getCellCoords(element.parentNode);
-                                }
-                            }
-                        };
-
-                        var position = getCellCoords(e.target);
-                        if (position) {
-                            var columnId = position[0];
-                            var rowId = position[1];
-                            // Close edition
-                            if (jexcel.current.edition) {
-                                if (jexcel.current.edition[2] != columnId || jexcel.current.edition[3] != rowId) {
-                                    jexcel.current.closeEditor(jexcel.current.edition[0], true);
-                                }
-                            }
-
-                            if (! jexcel.current.edition) {
-                                // Update cell selection
-                                if (e.shiftKey) {
-                                    jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId);
-                                } else {
-                                    jexcel.current.updateSelectionFromCoords(columnId, rowId);
-                                }
-                            }
-
-                            // No full row selected
-                            jexcel.current.selectedHeader = null;
-                            jexcel.current.selectedRow = null;
-                        }
-                    }
-                }
-            } else {
-                jexcel.current.selectedRow = false;
-            }
-
-            // Pagination
-            if (e.target.classList.contains('jexcel_page')) {
-                if (e.target.innerText == '<') {
-                    jexcel.current.page(0);
-                } else if (e.target.innerText == '>') {
-                    jexcel.current.page(e.target.getAttribute('title') - 1);
-                } else {
-                    jexcel.current.page(e.target.innerText - 1);
-                }
-            }
-        }
-
-        if (jexcel.current.edition) {
-            jexcel.isMouseAction = false;
-        } else {
-            jexcel.isMouseAction = true;
-        }
-    } else {
-        jexcel.isMouseAction = false;
-    }
-}
-
-jexcel.mouseUpControls = function(e) {
-    if (jexcel.current) {
-        // Update cell size
-        if (jexcel.current.resizing) {
-            // Columns to be updated
-            if (jexcel.current.resizing.column) {
-                // Remove Class
-                jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing');
-                var newWidth = jexcel.current.colgroup[jexcel.current.resizing.column].getAttribute('width');
-                jexcel.current.setWidth(jexcel.current.resizing.column, newWidth, jexcel.current.resizing.width);
-                // Remove border
-                jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing');
-                for (var j = 0; j < jexcel.current.records.length; j++) {
-                    if (jexcel.current.records[j][jexcel.current.resizing.column]){
-                        jexcel.current.records[j][jexcel.current.resizing.column].classList.remove('resizing');
-                    }
-                }
-            } else {
-                // Remove Class
-                jexcel.current.rows[jexcel.current.resizing.row].children[0].classList.remove('resizing');
-                var newHeight = jexcel.current.rows[jexcel.current.resizing.row].getAttribute('height');
-                jexcel.current.setHeight(jexcel.current.resizing.row, newHeight, jexcel.current.resizing.height);
-                // Remove border
-                jexcel.current.resizing.element.classList.remove('resizing');
-            }
-            // Reset resizing helper
-            jexcel.current.resizing = null;
-        } else if (jexcel.current.dragging) {
-            // Reset dragging helper
-            if (jexcel.current.dragging) {
-                if (jexcel.current.dragging.column) {
-                    // Target
-                    var columnId = e.target.getAttribute('data-x');
-                    // Remove move style
-                    jexcel.current.headers[jexcel.current.dragging.column].classList.remove('dragging');
-                    for (var j = 0; j < jexcel.current.rows.length; j++) {
-                        if (jexcel.current.records[j][jexcel.current.dragging.column]) {
-                            jexcel.current.records[j][jexcel.current.dragging.column].classList.remove('dragging');
-                        }
-                    }
-                    for (var i = 0; i < jexcel.current.headers.length; i++) {
-                        jexcel.current.headers[i].classList.remove('dragging-left');
-                        jexcel.current.headers[i].classList.remove('dragging-right');
-                    }
-                    // Update position
-                    if (columnId) {
-                        if (jexcel.current.dragging.column != jexcel.current.dragging.destination) {
-                            jexcel.current.moveColumn(jexcel.current.dragging.column, jexcel.current.dragging.destination);
-                        }
-                    }
-                } else {
-                    var position = Array.prototype.indexOf.call(jexcel.current.dragging.element.parentNode.children, jexcel.current.dragging.element);
-                    if (jexcel.current.dragging.row != position) {
-                        jexcel.current.moveRow(jexcel.current.dragging.row, position, true);
-                    }
-                    jexcel.current.dragging.element.classList.remove('dragging');
-                }
-                jexcel.current.dragging = null;
-            }
-        } else {
-            // Close any corner selection
-            if (jexcel.current.selectedCorner) {
-                jexcel.current.selectedCorner = false;
-
-                // Data to be copied
-                if (jexcel.current.selection.length > 0) {
-                    // Copy data
-                    jexcel.current.copyData(jexcel.current.selection[0], jexcel.current.selection[jexcel.current.selection.length - 1]);
-
-                    // Remove selection
-                    jexcel.current.removeCopySelection();
-                }
-            }
-        }
-    }
-
-    // Clear any time control
-    if (jexcel.timeControl) {
-        clearTimeout(jexcel.timeControl);
-        jexcel.timeControl = null;
-    }
-
-    // Mouse up
-    jexcel.isMouseAction = false;
-}
-
-// Mouse move controls
-jexcel.mouseMoveControls = function(e) {
-    e = e || window.event;
-    if (e.buttons) {
-        var mouseButton = e.buttons;
-    } else if (e.button) {
-        var mouseButton = e.button;
-    } else {
-        var mouseButton = e.which;
-    }
-
-    if (! mouseButton) {
-        jexcel.isMouseAction = false;
-    }
-
-    if (jexcel.current) {
-        if (jexcel.isMouseAction == true) {
-            // Resizing is ongoing
-            if (jexcel.current.resizing) {
-                if (jexcel.current.resizing.column) {
-                    var width = e.pageX - jexcel.current.resizing.mousePosition;
-
-                    if (jexcel.current.resizing.width + width > 0) {
-                        var tempWidth = jexcel.current.resizing.width + width;
-                        jexcel.current.colgroup[jexcel.current.resizing.column].setAttribute('width', tempWidth);
-
-                        jexcel.current.updateCornerPosition();
-                    }
-                } else {
-                    var height = e.pageY - jexcel.current.resizing.mousePosition;
-
-                    if (jexcel.current.resizing.height + height > 0) {
-                        var tempHeight = jexcel.current.resizing.height + height;
-                        jexcel.current.rows[jexcel.current.resizing.row].setAttribute('height', tempHeight);
-
-                        jexcel.current.updateCornerPosition();
-                    }
-                }
-            }
-        } else {
-            var x = e.target.getAttribute('data-x');
-            var y = e.target.getAttribute('data-y');
-            var rect = e.target.getBoundingClientRect();
-
-            if (jexcel.current.cursor) {
-                jexcel.current.cursor.style.cursor = '';
-                jexcel.current.cursor = null;
-            }
-
-            if (e.target.parentNode.parentNode && e.target.parentNode.parentNode.className) {
-                if (e.target.parentNode.parentNode.classList.contains('resizable')) {
-                    if (e.target && x && ! y && (rect.width - (e.clientX - rect.left) < 6)) {
-                        jexcel.current.cursor = e.target;
-                        jexcel.current.cursor.style.cursor = 'col-resize';
-                    } else if (e.target && ! x && y && (rect.height - (e.clientY - rect.top) < 6)) {
-                        jexcel.current.cursor = e.target;
-                        jexcel.current.cursor.style.cursor = 'row-resize';
-                    }
-                }
-
-                if (e.target.parentNode.parentNode.classList.contains('draggable')) {
-                    if (e.target && ! x && y && (rect.width - (e.clientX - rect.left) < 6)) {
-                        jexcel.current.cursor = e.target;
-                        jexcel.current.cursor.style.cursor = 'move';
-                    } else if (e.target && x && ! y && (rect.height - (e.clientY - rect.top) < 6)) {
-                        jexcel.current.cursor = e.target;
-                        jexcel.current.cursor.style.cursor = 'move';
-                    }
-                }
-            }
-        }
-    }
-}
-
-jexcel.mouseOverControls = function(e) {
-    e = e || window.event;
-    if (e.buttons) {
-        var mouseButton = e.buttons;
-    } else if (e.button) {
-        var mouseButton = e.button;
-    } else {
-        var mouseButton = e.which;
-    }
-
-    if (! mouseButton) {
-        jexcel.isMouseAction = false;
-    }
-
-    if (jexcel.current && jexcel.isMouseAction == true) {
-        // Get elements
-        var jexcelTable = jexcel.getElement(e.target);
-
-        if (jexcelTable[0]) {
-            // Avoid cross reference
-            if (jexcel.current != jexcelTable[0].jexcel) {
-                if (jexcel.current) {
-                    return false;
-                }
-            }
-
-            var columnId = e.target.getAttribute('data-x');
-            var rowId = e.target.getAttribute('data-y');
-
-            if (jexcel.current.dragging) {
-                if (jexcel.current.dragging.column) {
-                    if (columnId) {
-                        if (jexcel.current.isColMerged(columnId).length) {
-                            console.error('JEXCEL: This column is part of a merged cell.');
-                        } else {
-                            for (var i = 0; i < jexcel.current.headers.length; i++) {
-                                jexcel.current.headers[i].classList.remove('dragging-left');
-                                jexcel.current.headers[i].classList.remove('dragging-right');
-                            }
-
-                            if (jexcel.current.dragging.column == columnId) {
-                                jexcel.current.dragging.destination = parseInt(columnId);
-                            } else {
-                                if (e.target.clientWidth / 2 > e.offsetX) {
-                                    if (jexcel.current.dragging.column < columnId) {
-                                        jexcel.current.dragging.destination = parseInt(columnId) - 1;
-                                    } else {
-                                        jexcel.current.dragging.destination = parseInt(columnId);
-                                    }
-                                    jexcel.current.headers[columnId].classList.add('dragging-left');
-                                } else {
-                                    if (jexcel.current.dragging.column < columnId) {
-                                        jexcel.current.dragging.destination = parseInt(columnId);
-                                    } else {
-                                        jexcel.current.dragging.destination = parseInt(columnId) + 1;
-                                    }
-                                    jexcel.current.headers[columnId].classList.add('dragging-right');
-                                }
-                            }
-                        }
-                    }
-                } else {
-                    if (rowId) {
-                        if (jexcel.current.isRowMerged(rowId).length) {
-                            console.error('JEXCEL: This row is part of a merged cell.');
-                        } else {
-                            var target = (e.target.clientHeight / 2 > e.offsetY) ? e.target.parentNode.nextSibling : e.target.parentNode;
-                            e.target.parentNode.parentNode.insertBefore(jexcel.current.dragging.element, target);
-                        }
-                    }
-                }
-            } else if (jexcel.current.resizing) {
-            } else {
-                // Header found
-                if (jexcelTable[1] == 1) {
-                    if (jexcel.current.selectedHeader) {
-                        var columnId = e.target.getAttribute('data-x');
-                        var o = jexcel.current.selectedHeader;
-                        var d = columnId;
-                        // Update selection
-                        jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1);
-                    }
-                }
-
-                // Body found
-                if (jexcelTable[1] == 2) {
-                    if (e.target.classList.contains('jexcel_row')) {
-                        if (jexcel.current.selectedRow) {
-                            var o = jexcel.current.selectedRow;
-                            var d = rowId;
-                            // Update selection
-                            jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d);
-                        }
-                    } else {
-                        // Do not select edtion is in progress
-                        if (! jexcel.current.edition) {
-                            if (columnId && rowId) {
-                                if (jexcel.current.selectedCorner) {
-                                    jexcel.current.updateCopySelection(columnId, rowId);
-                                } else {
-                                    if (jexcel.current.selectedCell) {
-                                        jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    // Clear any time control
-    if (jexcel.timeControl) {
-        clearTimeout(jexcel.timeControl);
-        jexcel.timeControl = null;
-    }
-}
-
-/**
- * Double click event handler: controls the double click in the corner, cell edition or column re-ordering.
- */
-jexcel.doubleClickControls = function(e) {
-    // Jexcel is selected
-    if (jexcel.current) {
-        // Corner action
-        if (e.target.classList.contains('jexcel_corner')) {
-            // Any selected cells
-            if (jexcel.current.highlighted.length > 0) {
-                // Copy from this
-                var x1 = jexcel.current.highlighted[0].getAttribute('data-x');
-                var y1 = parseInt(jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-y')) + 1;
-                // Until this
-                var x2 = jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-x');
-                var y2 = jexcel.current.records.length - 1
-                // Execute copy
-                jexcel.current.copyData(jexcel.current.records[y1][x1], jexcel.current.records[y2][x2]);
-            }
-        } else {
-            // Get table
-            var jexcelTable = jexcel.getElement(e.target);
-
-            // Double click over header
-            if (jexcelTable[1] == 1 && jexcel.current.options.columnSorting == true) {
-                // Check valid column header coords
-                var columnId = e.target.getAttribute('data-x');
-                if (columnId) {
-                    jexcel.current.orderBy(columnId);
-                }
-            }
-
-            // Double click over body
-            if (jexcelTable[1] == 2 && jexcel.current.options.editable == true) {
-                if (! jexcel.current.edition) {
-                    var getCellCoords = function(element) {
-                        if (element.parentNode) {
-                            var x = element.getAttribute('data-x');
-                            var y = element.getAttribute('data-y');
-                            if (x && y) {
-                                return element;
-                            } else {
-                                return getCellCoords(element.parentNode);
-                            }
-                        }
-                    }
-                    var cell = getCellCoords(e.target);
-                    if (cell && cell.classList.contains('highlight')) {
-                        jexcel.current.openEditor(cell);
-                    }
-                }
-            }
-        }
-    }
-}
-
-jexcel.copyControls = function(e) {
-    if (jexcel.current && jexcel.copyControls.enabled) {
-        if (! jexcel.current.edition) {
-            jexcel.current.copy(true);
-        }
-    }
-}
-
-jexcel.cutControls = function(e) {
-    if (jexcel.current) {
-        if (! jexcel.current.edition) {
-            jexcel.current.copy(true);
-            if (jexcel.current.options.editable == true) {
-                jexcel.current.setValue(jexcel.current.highlighted, '');
-            }
-        }
-    }
-}
-
-jexcel.pasteControls = function(e) {
-    if (jexcel.current && jexcel.current.selectedCell) {
-        if (! jexcel.current.edition) {
-            if (jexcel.current.options.editable == true) {
-                if (e && e.clipboardData) {
-                    jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], e.clipboardData.getData('text'));
-                    e.preventDefault();
-                } else if (window.clipboardData) {
-                    jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], window.clipboardData.getData('text'));
-                }
-            }
-        }
-    }
-}
-
-jexcel.contextMenuControls = function(e) {
-    e = e || window.event;
-    if ("buttons" in e) {
-        var mouseButton = e.buttons;
-    } else {
-        var mouseButton = e.which || e.button;
-    }
-
-    if (jexcel.current) {
-        if (jexcel.current.edition) {
-            e.preventDefault();
-        } else if (jexcel.current.options.contextMenu) {
-            jexcel.current.contextMenu.contextmenu.close();
-
-            if (jexcel.current) {
-                var x = e.target.getAttribute('data-x');
-                var y = e.target.getAttribute('data-y');
-
-                if (x || y) {
-                    // Table found
-                    var items = jexcel.current.options.contextMenu(jexcel.current, x, y, e);
-                    // The id is depending on header and body
-                    jexcel.current.contextMenu.contextmenu.open(e, items);
-                    // Avoid the real one
-                    e.preventDefault();
-                }
-            }
-        }
-    }
-}
-
-jexcel.touchStartControls = function(e) {
-    var jexcelTable = jexcel.getElement(e.target);
-
-    if (jexcelTable[0]) {
-        if (jexcel.current != jexcelTable[0].jexcel) {
-            if (jexcel.current) {
-                jexcel.current.resetSelection();
-            }
-            jexcel.current = jexcelTable[0].jexcel;
-        }
-    } else {
-        if (jexcel.current) {
-            jexcel.current.resetSelection();
-            jexcel.current = null;
-        }
-    }
-
-    if (jexcel.current) {
-        if (! jexcel.current.edition) {
-            var columnId = e.target.getAttribute('data-x');
-            var rowId = e.target.getAttribute('data-y');
-
-            if (columnId && rowId) {
-                jexcel.current.updateSelectionFromCoords(columnId, rowId);
-
-                jexcel.timeControl = setTimeout(function() {
-                    jexcel.current.openEditor(e.target, false, e);
-                }, 500);
-            }
-        }
-    }
-}
-
-jexcel.touchEndControls = function(e) {
-    // Clear any time control
-    if (jexcel.timeControl) {
-        clearTimeout(jexcel.timeControl);
-        jexcel.timeControl = null;
-    }
-}
-
-/**
- * Jquery Support
- */
-
-if (typeof(jQuery) != 'undefined') {
-    (function($){
-        $.fn.jexcel = function(method) {
-            var spreadsheetContainer = $(this).get(0);
-            if (! spreadsheetContainer.jexcel) {
-                return jexcel($(this).get(0), arguments[0]);
-            } else {
-                return spreadsheetContainer.jexcel[method].apply(this, Array.prototype.slice.call( arguments, 1 ));
-            }
-        };
-
-    })(jQuery);
-}
-
-/**
- * Jexcel extensions
- */
-
-jexcel.createTabs = function(tabs, result) {
-    // Create tab container
-    tabs.innerHTML = '';
-    tabs.classList.add('jexcel_tabs');
-    var spreadsheet = []
-    var link = [];
-    for (var i = 0; i < result.length; i++) {
-        // Spreadsheet container
-        spreadsheet[i] = document.createElement('div');
-        spreadsheet[i].classList.add('jexcel_tab');
-        // Tab link
-        link[i] = document.createElement('div');
-        link[i].classList.add('jexcel_tab_link');
-        link[i].setAttribute('data-spreadsheet', i);
-        link[i].innerHTML = result[i].sheetName;
-        link[i].onclick = function() {
-            for (var j = 0; j < spreadsheet.length; j++) {
-                spreadsheet[j].style.display = 'none';
-                link[j].classList.remove('selected');
-            }
-            var i = this.getAttribute('data-spreadsheet');
-            spreadsheet[i].style.display = 'block';
-            link[i].classList.add('selected')
-        }
-        tabs.appendChild(link[i]);
-    }
-
-    // Append spreadsheet
-    for (var i = 0; i < spreadsheet.length - 1; i++) {
-        tabs.appendChild(spreadsheet[i]);
-        jexcel(spreadsheet[i], result[i]);
-    }
-
-    // First tab
-    spreadsheet[0].style.display = 'block';
-    link[0].classList.add('selected')
-}
-
-jexcel.fromSpreadsheet = function(file, __callback) {
-    var convert = function(workbook) {
-        var spreadsheets = [];
-        workbook.SheetNames.forEach(function(sheetName) {
-            var spreadsheet = {};
-            spreadsheet.rows = [];
-            spreadsheet.columns = [];
-            spreadsheet.data = [];
-            spreadsheet.style = {};
-            spreadsheet.sheetName = sheetName;
-
-            // Column widths
-            var temp = workbook.Sheets[sheetName]['!cols'];
-            if (temp && temp.length) {
-                for (var i = 0; i < temp.length; i++) {
-                    spreadsheet.columns[i] = {};
-                    if (temp[i] && temp[i].wpx) {
-                        spreadsheet.columns[i].width = temp[i].wpx + 'px';
-                    }
-                }
-            }
-            // Rows heights
-            var temp = workbook.Sheets[sheetName]['!rows'];
-            if (temp && temp.length) {
-                for (var i = 0; i < temp.length; i++) {
-                    if (temp[i] && temp[i].hpx) {
-                        spreadsheet.rows[i] = {};
-                        spreadsheet.rows[i].height = temp[i].hpx + 'px';
-                    }
-                }
-            }
-            // Merge cells
-            var temp = workbook.Sheets[sheetName]['!merges'];
-            if (temp && temp.length > 0) {
-                spreadsheet.mergeCells = [];
-                for (var i = 0; i < temp.length; i++) {
-                    var x1 = temp[i].s.c;
-                    var y1 = temp[i].s.r;
-                    var x2 = temp[i].e.c;
-                    var y2 = temp[i].e.r;
-                    var key = jexcel.getColumnNameFromId([x1,y1]);
-                    spreadsheet.mergeCells[key] = [ x2-x1+1, y2-y1+1 ];
-                }
-            }
-            // Data container
-            var max_x = 0;
-            var max_y = 0;
-            var temp = Object.keys(workbook.Sheets[sheetName]);
-            for (var i = 0; i < temp.length; i++) {
-                if (temp[i].substr(0,1) != '!') {
-                    var cell = workbook.Sheets[sheetName][temp[i]];
-                    var info = jexcel.getIdFromColumnName(temp[i], true);
-                    if (! spreadsheet.data[info[1]]) {
-                        spreadsheet.data[info[1]] = [];
-                    }
-                    spreadsheet.data[info[1]][info[0]] = cell.f ? '=' + cell.f : cell.w;
-                    if (max_x < info[0]) {
-                        max_x = info[0];
-                    }
-                    if (max_y < info[1]) {
-                        max_y = info[1];
-                    }
-                    // Style
-                    if (cell.style && Object.keys(cell.style).length > 0) {
-                        spreadsheet.style[temp[i]] = cell.style;
-                    }
-                    if (cell.s && cell.s.fgColor) {
-                        if (spreadsheet.style[temp[i]]) {
-                            spreadsheet.style[temp[i]] += ';';
-                        }
-                        spreadsheet.style[temp[i]] += 'background-color:#' + cell.s.fgColor.rgb;
-                    }
-                }
-            }
-            var numColumns = spreadsheet.columns;
-            for (var j = 0; j <= max_y; j++) {
-                for (var i = 0; i <= max_x; i++) {
-                    if (! spreadsheet.data[j]) {
-                        spreadsheet.data[j] = [];
-                    }
-                    if (! spreadsheet.data[j][i]) {
-                        if (numColumns < i) {
-                            spreadsheet.data[j][i] = '';
-                        }
-                    }
-                }
-            }
-            spreadsheets.push(spreadsheet);
-        });
-
-        return spreadsheets;
-    }
-
-    var oReq;
-    oReq = new XMLHttpRequest();
-    oReq.open("GET", file, true);
-
-    if(typeof Uint8Array !== 'undefined') {
-        oReq.responseType = "arraybuffer";
-        oReq.onload = function(e) {
-            var arraybuffer = oReq.response;
-            var data = new Uint8Array(arraybuffer);
-            var wb = XLSX.read(data, {type:"array", cellFormula:true, cellStyles:true });
-            __callback(convert(wb))
-        };
-    } else {
-        oReq.setRequestHeader("Accept-Charset", "x-user-defined");
-        oReq.onreadystatechange = function() { if(oReq.readyState == 4 && oReq.status == 200) {
-            var ff = convertResponseBodyToText(oReq.responseBody);
-            var wb = XLSX.read(ff, {type:"binary", cellFormula:true, cellStyles:true });
-            __callback(convert(wb))
-        }};
-    }
-
-    oReq.send();
-}
-
-// Based on sutoiku work (https://github.com/sutoiku)
-
-var error = (function() {
-    var exports = {};
-
-    exports.nil = new Error('#NULL!');
-    exports.div0 = new Error('#DIV/0!');
-    exports.value = new Error('#VALUE!');
-    exports.ref = new Error('#REF!');
-    exports.name = new Error('#NAME?');
-    exports.num = new Error('#NUM!');
-    exports.na = new Error('#N/A');
-    exports.error = new Error('#ERROR!');
-    exports.data = new Error('#GETTING_DATA');
-
-    return exports;
-})();
-
-var utils = (function() {
-    var exports = {};
-
-    exports.flattenShallow = function(array) {
-        if (!array || !array.reduce) {
-            return array;
-        }
-
-        return array.reduce(function(a, b) {
-            var aIsArray = Array.isArray(a);
-            var bIsArray = Array.isArray(b);
-
-            if (aIsArray && bIsArray) {
-                return a.concat(b);
-            }
-            if (aIsArray) {
-                a.push(b);
-
-                return a;
-            }
-            if (bIsArray) {
-                return [ a ].concat(b);
-            }
-
-            return [ a, b ];
-        });
-    };
-
-    exports.isFlat = function(array) {
-        if (!array) {
-            return false;
-        }
-
-        for (var i = 0; i < array.length; ++i) {
-            if (Array.isArray(array[i])) {
-                return false;
-            }
-        }
-
-        return true;
-    };
-
-    exports.flatten = function() {
-        var result = exports.argsToArray.apply(null, arguments);
-
-        while (!exports.isFlat(result)) {
-            result = exports.flattenShallow(result);
-        }
-
-        return result;
-    };
-
-    exports.argsToArray = function(args) {
-        var result = [];
-
-        exports.arrayEach(args, function(value) {
-            result.push(value);
-        });
-
-        return result;
-    };
-
-    exports.numbers = function() {
-        var possibleNumbers = this.flatten.apply(null, arguments);
-        return possibleNumbers.filter(function(el) {
-            return typeof el === 'number';
-        });
-    };
-
-    exports.cleanFloat = function(number) {
-        var power = 1e14;
-        return Math.round(number * power) / power;
-    };
-
-    exports.parseBool = function(bool) {
-        if (typeof bool === 'boolean') {
-            return bool;
-        }
-
-        if (bool instanceof Error) {
-            return bool;
-        }
-
-        if (typeof bool === 'number') {
-            return bool !== 0;
-        }
-
-        if (typeof bool === 'string') {
-            var up = bool.toUpperCase();
-            if (up === 'TRUE') {
-                return true;
-            }
-
-            if (up === 'FALSE') {
-                return false;
-            }
-        }
-
-        if (bool instanceof Date && !isNaN(bool)) {
-            return true;
-        }
-
-        return error.value;
-    };
-
-    exports.parseNumber = function(string) {
-        if (string === undefined || string === '') {
-            return error.value;
-        }
-        if (!isNaN(string)) {
-            return parseFloat(string);
-        }
-
-        return error.value;
-    };
-
-    exports.parseNumberArray = function(arr) {
-        var len;
-
-        if (!arr || (len = arr.length) === 0) {
-            return error.value;
-        }
-
-        var parsed;
-
-        while (len--) {
-            parsed = exports.parseNumber(arr[len]);
-            if (parsed === error.value) {
-                return parsed;
-            }
-            arr[len] = parsed;
-        }
-
-        return arr;
-    };
-
-    exports.parseMatrix = function(matrix) {
-        var n;
-
-        if (!matrix || (n = matrix.length) === 0) {
-            return error.value;
-        }
-        var pnarr;
-
-        for (var i = 0; i < matrix.length; i++) {
-            pnarr = exports.parseNumberArray(matrix[i]);
-            matrix[i] = pnarr;
-
-            if (pnarr instanceof Error) {
-                return pnarr;
-            }
-        }
-
-        return matrix;
-    };
-
-    var d1900 = new Date(Date.UTC(1900, 0, 1));
-    exports.parseDate = function(date) {
-        if (!isNaN(date)) {
-            if (date instanceof Date) {
-                return new Date(date);
-            }
-            var d = parseInt(date, 10);
-            if (d < 0) {
-                return error.num;
-            }
-            if (d <= 60) {
-                return new Date(d1900.getTime() + (d - 1) * 86400000);
-            }
-            return new Date(d1900.getTime() + (d - 2) * 86400000);
-        }
-        if (typeof date === 'string') {
-            date = new Date(date);
-            if (!isNaN(date)) {
-                return date;
-            }
-        }
-        return error.value;
-    };
-
-    exports.parseDateArray = function(arr) {
-        var len = arr.length;
-        var parsed;
-        while (len--) {
-            parsed = this.parseDate(arr[len]);
-            if (parsed === error.value) {
-                return parsed;
-            }
-            arr[len] = parsed;
-        }
-        return arr;
-    };
-
-    exports.anyIsError = function() {
-        var n = arguments.length;
-        while (n--) {
-            if (arguments[n] instanceof Error) {
-                return true;
-            }
-        }
-        return false;
-    };
-
-    exports.arrayValuesToNumbers = function(arr) {
-        var n = arr.length;
-        var el;
-        while (n--) {
-            el = arr[n];
-            if (typeof el === 'number') {
-                continue;
-            }
-            if (el === true) {
-                arr[n] = 1;
-                continue;
-            }
-            if (el === false) {
-                arr[n] = 0;
-                continue;
-            }
-            if (typeof el === 'string') {
-                var number = this.parseNumber(el);
-                if (number instanceof Error) {
-                    arr[n] = 0;
-                } else {
-                    arr[n] = number;
-                }
-            }
-        }
-        return arr;
-    };
-
-    exports.rest = function(array, idx) {
-        idx = idx || 1;
-        if (!array || typeof array.slice !== 'function') {
-            return array;
-        }
-        return array.slice(idx);
-    };
-
-    exports.initial = function(array, idx) {
-        idx = idx || 1;
-        if (!array || typeof array.slice !== 'function') {
-            return array;
-        }
-        return array.slice(0, array.length - idx);
-    };
-
-    exports.arrayEach = function(array, iteratee) {
-        var index = -1, length = array.length;
-
-        while (++index < length) {
-            if (iteratee(array[index], index, array) === false) {
-                break;
-            }
-        }
-
-        return array;
-    };
-
-    exports.transpose = function(matrix) {
-        if (!matrix) {
-            return error.value;
-        }
-
-        return matrix[0].map(function(col, i) {
-            return matrix.map(function(row) {
-                return row[i];
-            });
-        });
-    };
-
-    return exports;
-})();
-
-jexcel.methods = {};
-
-jexcel.methods.datetime = (function() {
-    var exports = {};
-
-    var d1900 = new Date(1900, 0, 1);
-    var WEEK_STARTS = [
-        undefined,
-        0,
-        1,
-        undefined,
-        undefined,
-        undefined,
-        undefined,
-        undefined,
-        undefined,
-        undefined,
-        undefined,
-        undefined,
-        1,
-        2,
-        3,
-        4,
-        5,
-        6,
-        0
-    ];
-    var WEEK_TYPES = [
-        [],
-        [1, 2, 3, 4, 5, 6, 7],
-        [7, 1, 2, 3, 4, 5, 6],
-        [6, 0, 1, 2, 3, 4, 5],
-        [],
-        [],
-        [],
-        [],
-        [],
-        [],
-        [],
-        [7, 1, 2, 3, 4, 5, 6],
-        [6, 7, 1, 2, 3, 4, 5],
-        [5, 6, 7, 1, 2, 3, 4],
-        [4, 5, 6, 7, 1, 2, 3],
-        [3, 4, 5, 6, 7, 1, 2],
-        [2, 3, 4, 5, 6, 7, 1],
-        [1, 2, 3, 4, 5, 6, 7]
-    ];
-    var WEEKEND_TYPES = [
-        [],
-        [6, 0],
-        [0, 1],
-        [1, 2],
-        [2, 3],
-        [3, 4],
-        [4, 5],
-        [5, 6],
-        undefined,
-        undefined,
-        undefined, [0, 0],
-        [1, 1],
-        [2, 2],
-        [3, 3],
-        [4, 4],
-        [5, 5],
-        [6, 6]
-    ];
-
-    exports.DATE = function(year, month, day) {
-        year = utils.parseNumber(year);
-        month = utils.parseNumber(month);
-        day = utils.parseNumber(day);
-        if (utils.anyIsError(year, month, day)) {
-            return error.value;
-        }
-        if (year < 0 || month < 0 || day < 0) {
-            return error.num;
-        }
-        var date = new Date(year, month - 1, day);
-        return date;
-    };
-
-    exports.DATEVALUE = function(date_text) {
-        if (typeof date_text !== 'string') {
-            return error.value;
-        }
-        var date = Date.parse(date_text);
-        if (isNaN(date)) {
-            return error.value;
-        }
-        if (date <= -2203891200000) {
-            return (date - d1900) / 86400000 + 1;
-        }
-        return (date - d1900) / 86400000 + 2;
-    };
-
-    exports.DAY = function(serial_number) {
-        var date = utils.parseDate(serial_number);
-        if (date instanceof Error) {
-            return date;
-        }
-        return date.getDate();
-    };
-
-    exports.DAYS = function(end_date, start_date) {
-        end_date = utils.parseDate(end_date);
-        start_date = utils.parseDate(start_date);
-        if (end_date instanceof Error) {
-            return end_date;
-        }
-        if (start_date instanceof Error) {
-            return start_date;
-        }
-        return serial(end_date) - serial(start_date);
-    };
-
-    exports.DAYS360 = function(start_date, end_date, method) {
-    };
-
-    exports.EDATE = function(start_date, months) {
-        start_date = utils.parseDate(start_date);
-        if (start_date instanceof Error) {
-            return start_date;
-        }
-        if (isNaN(months)) {
-            return error.value;
-        }
-        months = parseInt(months, 10);
-        start_date.setMonth(start_date.getMonth() + months);
-        return serial(start_date);
-    };
-
-    exports.EOMONTH = function(start_date, months) {
-        start_date = utils.parseDate(start_date);
-        if (start_date instanceof Error) {
-            return start_date;
-        }
-        if (isNaN(months)) {
-            return error.value;
-        }
-        months = parseInt(months, 10);
-        return serial(new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0));
-    };
-
-    exports.HOUR = function(serial_number) {
-        serial_number = utils.parseDate(serial_number);
-        if (serial_number instanceof Error) {
-            return serial_number;
-        }
-        return serial_number.getHours();
-    };
-
-    exports.INTERVAL = function(second) {
-        if (typeof second !== 'number' && typeof second !== 'string') {
-            return error.value;
-        } else {
-            second = parseInt(second, 10);
-        }
-
-        var year  = Math.floor(second/946080000);
-        second    = second%946080000;
-        var month = Math.floor(second/2592000);
-        second    = second%2592000;
-        var day   = Math.floor(second/86400);
-        second    = second%86400;
-
-        var hour  = Math.floor(second/3600);
-        second    = second%3600;
-        var min   = Math.floor(second/60);
-        second    = second%60;
-        var sec   = second;
-
-        year  = (year  > 0) ? year  + 'Y' : '';
-        month = (month > 0) ? month + 'M' : '';
-        day   = (day   > 0) ? day   + 'D' : '';
-        hour  = (hour  > 0) ? hour  + 'H' : '';
-        min   = (min   > 0) ? min   + 'M' : '';
-        sec   = (sec   > 0) ? sec   + 'S' : '';
-
-        return 'P' + year + month + day + 'T' + hour + min + sec;
-    };
-
-    exports.ISOWEEKNUM = function(date) {
-        date = utils.parseDate(date);
-        if (date instanceof Error) {
-            return date;
-        }
-
-        date.setHours(0, 0, 0);
-        date.setDate(date.getDate() + 4 - (date.getDay() || 7));
-        var yearStart = new Date(date.getFullYear(), 0, 1);
-        return Math.ceil((((date - yearStart) / 86400000) + 1) / 7);
-    };
-
-    exports.MINUTE = function(serial_number) {
-        serial_number = utils.parseDate(serial_number);
-        if (serial_number instanceof Error) {
-            return serial_number;
-        }
-        return serial_number.getMinutes();
-    };
-
-    exports.MONTH = function(serial_number) {
-        serial_number = utils.parseDate(serial_number);
-        if (serial_number instanceof Error) {
-            return serial_number;
-        }
-        return serial_number.getMonth() + 1;
-    };
-
-    exports.NETWORKDAYS = function(start_date, end_date, holidays) {
-    };
-
-    exports.NETWORKDAYS.INTL = function(start_date, end_date, weekend, holidays) {
-    };
-
-    exports.NOW = function() {
-        return new Date();
-    };
-
-    exports.SECOND = function(serial_number) {
-        serial_number = utils.parseDate(serial_number);
-        if (serial_number instanceof Error) {
-            return serial_number;
-        }
-        return serial_number.getSeconds();
-    };
-
-    exports.TIME = function(hour, minute, second) {
-        hour = utils.parseNumber(hour);
-        minute = utils.parseNumber(minute);
-        second = utils.parseNumber(second);
-        if (utils.anyIsError(hour, minute, second)) {
-            return error.value;
-        }
-        if (hour < 0 || minute < 0 || second < 0) {
-            return error.num;
-        }
-        return (3600 * hour + 60 * minute + second) / 86400;
-    };
-
-    exports.TIMEVALUE = function(time_text) {
-        time_text = utils.parseDate(time_text);
-        if (time_text instanceof Error) {
-            return time_text;
-        }
-        return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400;
-    };
-
-    exports.TODAY = function() {
-        return new Date();
-    };
-
-    exports.WEEKDAY = function(serial_number, return_type) {
-        serial_number = utils.parseDate(serial_number);
-        if (serial_number instanceof Error) {
-            return serial_number;
-        }
-        if (return_type === undefined) {
-            return_type = 1;
-        }
-        var day = serial_number.getDay();
-        return WEEK_TYPES[return_type][day];
-    };
-
-    exports.WEEKNUM = function(serial_number, return_type) {
-    };
-
-    exports.WORKDAY = function(start_date, days, holidays) {
-    };
-
-    exports.WORKDAY.INTL = function(start_date, days, weekend, holidays) {
-    };
-
-    exports.YEAR = function(serial_number) {
-        serial_number = utils.parseDate(serial_number);
-        if (serial_number instanceof Error) {
-            return serial_number;
-        }
-        return serial_number.getFullYear();
-    };
-
-    function isLeapYear(year) {
-        return new Date(year, 1, 29).getMonth() === 1;
-    }
-
-    exports.YEARFRAC = function(start_date, end_date, basis) {
-    };
-
-    function serial(date) {
-        var addOn = (date > -2203891200000)?2:1;
-        return (date - d1900) / 86400000 + addOn;
-    }
-
-    return exports;
-})();
-
-jexcel.methods.database = (function() {
-    var exports = {};
-
-    function compact(array) {
-        if (!array) {
-            return array;
-        }
-        var result = [];
-        for (var i = 0; i < array.length; ++i) {
-            if (!array[i]) {
-                continue;
-            }
-            result.push(array[i]);
-        }
-        return result;
-    }
-
-    exports.FINDFIELD = function(database, title) {
-        var index = null;
-        for (var i = 0; i < database.length; i++) {
-            if (database[i][0] === title) {
-                index = i;
-                break;
-            }
-        }
-
-        // Return error if the input field title is incorrect
-        if (index == null) {
-            return error.value;
-        }
-        return index;
-    };
-
-    function findResultIndex(database, criterias) {
-        var matches = {};
-        for (var i = 1; i < database[0].length; ++i) {
-            matches[i] = true;
-        }
-        var maxCriteriaLength = criterias[0].length;
-        for (i = 1; i < criterias.length; ++i) {
-            if (criterias[i].length > maxCriteriaLength) {
-                maxCriteriaLength = criterias[i].length;
-            }
-        }
-
-        for (var k = 1; k < database.length; ++k) {
-            for (var l = 1; l < database[k].length; ++l) {
-                var currentCriteriaResult = false;
-                var hasMatchingCriteria = false;
-                for (var j = 0; j < criterias.length; ++j) {
-                    var criteria = criterias[j];
-                    if (criteria.length < maxCriteriaLength) {
-                        continue;
-                    }
-
-                    var criteriaField = criteria[0];
-                    if (database[k][0] !== criteriaField) {
-                        continue;
-                    }
-                    hasMatchingCriteria = true;
-                    for (var p = 1; p < criteria.length; ++p) {
-                        currentCriteriaResult = currentCriteriaResult
-                                || eval(database[k][l] + criteria[p]); // jshint
-                                                                        // ignore:line
-                    }
-                }
-                if (hasMatchingCriteria) {
-                    matches[l] = matches[l] && currentCriteriaResult;
-                }
-            }
-        }
-
-        var result = [];
-        for (var n = 0; n < database[0].length; ++n) {
-            if (matches[n]) {
-                result.push(n - 1);
-            }
-        }
-        return result;
-    }
-
-    // Database functions
-    exports.DAVERAGE = function(database, field, criteria) {
-        // Return error if field is not a number and not a string
-        if (isNaN(field) && (typeof field !== "string")) {
-            return error.value;
-        }
-        var resultIndexes = findResultIndex(database, criteria);
-        var targetFields = [];
-        if (typeof field === "string") {
-            var index = exports.FINDFIELD(database, field);
-            targetFields = utils.rest(database[index]);
-        } else {
-            targetFields = utils.rest(database[field]);
-        }
-        var sum = 0;
-        for (var i = 0; i < resultIndexes.length; i++) {
-            sum += targetFields[resultIndexes[i]];
-        }
-        return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length;
-    };
-
-    exports.DCOUNT = function(database, field, criteria) {
-    };
-
-    exports.DCOUNTA = function(database, field, criteria) {
-    };
-
-    exports.DGET = function(database, field, criteria) {
-        // Return error if field is not a number and not a string
-        if (isNaN(field) && (typeof field !== "string")) {
-            return error.value;
-        }
-        var resultIndexes = findResultIndex(database, criteria);
-        var targetFields = [];
-        if (typeof field === "string") {
-            var index = exports.FINDFIELD(database, field);
-            targetFields = utils.rest(database[index]);
-        } else {
-            targetFields = utils.rest(database[field]);
-        }
-        // Return error if no record meets the criteria
-        if (resultIndexes.length === 0) {
-            return error.value;
-        }
-        // Returns the #NUM! error value because more than one record meets the
-        // criteria
-        if (resultIndexes.length > 1) {
-            return error.num;
-        }
-
-        return targetFields[resultIndexes[0]];
-    };
-
-    exports.DMAX = function(database, field, criteria) {
-        // Return error if field is not a number and not a string
-        if (isNaN(field) && (typeof field !== "string")) {
-            return error.value;
-        }
-        var resultIndexes = findResultIndex(database, criteria);
-        var targetFields = [];
-        if (typeof field === "string") {
-            var index = exports.FINDFIELD(database, field);
-            targetFields = utils.rest(database[index]);
-        } else {
-            targetFields = utils.rest(database[field]);
-        }
-        var maxValue = targetFields[resultIndexes[0]];
-        for (var i = 1; i < resultIndexes.length; i++) {
-            if (maxValue < targetFields[resultIndexes[i]]) {
-                maxValue = targetFields[resultIndexes[i]];
-            }
-        }
-        return maxValue;
-    };
-
-    exports.DMIN = function(database, field, criteria) {
-        // Return error if field is not a number and not a string
-        if (isNaN(field) && (typeof field !== "string")) {
-            return error.value;
-        }
-        var resultIndexes = findResultIndex(database, criteria);
-        var targetFields = [];
-        if (typeof field === "string") {
-            var index = exports.FINDFIELD(database, field);
-            targetFields = utils.rest(database[index]);
-        } else {
-            targetFields = utils.rest(database[field]);
-        }
-        var minValue = targetFields[resultIndexes[0]];
-        for (var i = 1; i < resultIndexes.length; i++) {
-            if (minValue > targetFields[resultIndexes[i]]) {
-                minValue = targetFields[resultIndexes[i]];
-            }
-        }
-        return minValue;
-    };
-
-    exports.DPRODUCT = function(database, field, criteria) {
-        // Return error if field is not a number and not a string
-        if (isNaN(field) && (typeof field !== "string")) {
-            return error.value;
-        }
-        var resultIndexes = findResultIndex(database, criteria);
-        var targetFields = [];
-        if (typeof field === "string") {
-            var index = exports.FINDFIELD(database, field);
-            targetFields = utils.rest(database[index]);
-        } else {
-            targetFields = utils.rest(database[field]);
-        }
-        var targetValues = [];
-        for (var i = 0; i < resultIndexes.length; i++) {
-            targetValues[i] = targetFields[resultIndexes[i]];
-        }
-        targetValues = compact(targetValues);
-        var result = 1;
-        for (i = 0; i < targetValues.length; i++) {
-            result *= targetValues[i];
-        }
-        return result;
-    };
-
-    exports.DSTDEV = function(database, field, criteria) {
-    };
-
-    exports.DSTDEVP = function(database, field, criteria) {
-    };
-
-    exports.DSUM = function(database, field, criteria) {
-    };
-
-    exports.DVAR = function(database, field, criteria) {
-    };
-
-    exports.DVARP = function(database, field, criteria) {
-    };
-
-    exports.MATCH = function(lookupValue, lookupArray, matchType) {
-        if (!lookupValue && !lookupArray) {
-            return error.na;
-        }
-        if (arguments.length === 2) {
-            matchType = 1;
-        }
-        if (!(lookupArray instanceof Array)) {
-            return error.na;
-        }
-        if (matchType !== -1 && matchType !== 0 && matchType !== 1) {
-            return error.na;
-        }
-
-        var index;
-        var indexValue;
-
-        for (var idx = 0; idx < lookupArray.length; idx++) {
-            if (matchType === 1) {
-                if (lookupArray[idx] === lookupValue) {
-                    return idx + 1;
-                } else if (lookupArray[idx] < lookupValue) {
-                    if (!indexValue) {
-                        index = idx + 1;
-                        indexValue = lookupArray[idx];
-                    } else if (lookupArray[idx] > indexValue) {
-                        index = idx + 1;
-                        indexValue = lookupArray[idx];
-                    }
-                }
-            } else if (matchType === 0) {
-                if (typeof lookupValue === 'string') {
-                    lookupValue = lookupValue.replace(/\?/g, '.');
-                    if (lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase())) {
-                        return idx + 1;
-                    }
-                } else {
-                    if (lookupArray[idx] === lookupValue) {
-                        return idx + 1;
-                    }
-                }
-            } else if (matchType === -1) {
-                if (lookupArray[idx] === lookupValue) {
-                    return idx + 1;
-                } else if (lookupArray[idx] > lookupValue) {
-                    if (!indexValue) {
-                        index = idx + 1;
-                        indexValue = lookupArray[idx];
-                    } else if (lookupArray[idx] < indexValue) {
-                        index = idx + 1;
-                        indexValue = lookupArray[idx];
-                    }
-                }
-            }
-        }
-
-        return index ? index : error.na;
-    };
-
-    return exports;
-})();
-
-jexcel.methods.engineering = (function() {
-    var exports = {};
-
-    function isValidBinaryNumber(number) {
-        return (/^[01]{1,10}$/).test(number);
-    }
-
-    exports.BESSELI = function(x, n) {
-    };
-
-    exports.BESSELJ = function(x, n) {
-    };
-
-    exports.BESSELK = function(x, n) {
-    };
-
-    exports.BESSELY = function(x, n) {
-    };
-
-    exports.BIN2DEC = function(number) {
-        // Return error if number is not binary or contains more than 10
-        // characters (10 digits)
-        if (!isValidBinaryNumber(number)) {
-            return error.num;
-        }
-
-        // Convert binary number to decimal
-        var result = parseInt(number, 2);
-
-        // Handle negative numbers
-        var stringified = number.toString();
-        if (stringified.length === 10 && stringified.substring(0, 1) === '1') {
-            return parseInt(stringified.substring(1), 2) - 512;
-        } else {
-            return result;
-        }
-    };
-
-    exports.BIN2HEX = function(number, places) {
-        // Return error if number is not binary or contains more than 10
-        // characters (10 digits)
-        if (!isValidBinaryNumber(number)) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character hexadecimal number if number
-        // is negative
-        var stringified = number.toString();
-        if (stringified.length === 10 && stringified.substring(0, 1) === '1') {
-            return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16);
-        }
-
-        // Convert binary number to hexadecimal
-        var result = parseInt(number, 2).toString(16);
-
-        // Return hexadecimal number using the minimum number of characters
-        // necessary if places is undefined
-        if (places === undefined) {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.BIN2OCT = function(number, places) {
-        // Return error if number is not binary or contains more than 10
-        // characters (10 digits)
-        if (!isValidBinaryNumber(number)) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character octal number if number is
-        // negative
-        var stringified = number.toString();
-        if (stringified.length === 10 && stringified.substring(0, 1) === '1') {
-            return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8);
-        }
-
-        // Convert binary number to octal
-        var result = parseInt(number, 2).toString(8);
-
-        // Return octal number using the minimum number of characters necessary
-        // if places is undefined
-        if (places === undefined) {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.BITAND = function(number1, number2) {
-        // Return error if either number is a non-numeric value
-        number1 = utils.parseNumber(number1);
-        number2 = utils.parseNumber(number2);
-        if (utils.anyIsError(number1, number2)) {
-            return error.value;
-        }
-
-        // Return error if either number is less than 0
-        if (number1 < 0 || number2 < 0) {
-            return error.num;
-        }
-
-        // Return error if either number is a non-integer
-        if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {
-            return error.num;
-        }
-
-        // Return error if either number is greater than (2^48)-1
-        if (number1 > 281474976710655 || number2 > 281474976710655) {
-            return error.num;
-        }
-
-        // Return bitwise AND of two numbers
-        return number1 & number2;
-    };
-
-    exports.BITLSHIFT = function(number, shift) {
-        number = utils.parseNumber(number);
-        shift = utils.parseNumber(shift);
-        if (utils.anyIsError(number, shift)) {
-            return error.value;
-        }
-
-        // Return error if number is less than 0
-        if (number < 0) {
-            return error.num;
-        }
-
-        // Return error if number is a non-integer
-        if (Math.floor(number) !== number) {
-            return error.num;
-        }
-
-        // Return error if number is greater than (2^48)-1
-        if (number > 281474976710655) {
-            return error.num;
-        }
-
-        // Return error if the absolute value of shift is greater than 53
-        if (Math.abs(shift) > 53) {
-            return error.num;
-        }
-
-        // Return number shifted by shift bits to the left or to the right if
-        // shift is negative
-        return (shift >= 0) ? number << shift : number >> -shift;
-    };
-
-    exports.BITOR = function(number1, number2) {
-        number1 = utils.parseNumber(number1);
-        number2 = utils.parseNumber(number2);
-        if (utils.anyIsError(number1, number2)) {
-            return error.value;
-        }
-
-        // Return error if either number is less than 0
-        if (number1 < 0 || number2 < 0) {
-            return error.num;
-        }
-
-        // Return error if either number is a non-integer
-        if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {
-            return error.num;
-        }
-
-        // Return error if either number is greater than (2^48)-1
-        if (number1 > 281474976710655 || number2 > 281474976710655) {
-            return error.num;
-        }
-
-        // Return bitwise OR of two numbers
-        return number1 | number2;
-    };
-
-    exports.BITRSHIFT = function(number, shift) {
-        number = utils.parseNumber(number);
-        shift = utils.parseNumber(shift);
-        if (utils.anyIsError(number, shift)) {
-            return error.value;
-        }
-
-        // Return error if number is less than 0
-        if (number < 0) {
-            return error.num;
-        }
-
-        // Return error if number is a non-integer
-        if (Math.floor(number) !== number) {
-            return error.num;
-        }
-
-        // Return error if number is greater than (2^48)-1
-        if (number > 281474976710655) {
-            return error.num;
-        }
-
-        // Return error if the absolute value of shift is greater than 53
-        if (Math.abs(shift) > 53) {
-            return error.num;
-        }
-
-        // Return number shifted by shift bits to the right or to the left if
-        // shift is negative
-        return (shift >= 0) ? number >> shift : number << -shift;
-    };
-
-    exports.BITXOR = function(number1, number2) {
-        number1 = utils.parseNumber(number1);
-        number2 = utils.parseNumber(number2);
-        if (utils.anyIsError(number1, number2)) {
-            return error.value;
-        }
-
-        // Return error if either number is less than 0
-        if (number1 < 0 || number2 < 0) {
-            return error.num;
-        }
-
-        // Return error if either number is a non-integer
-        if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {
-            return error.num;
-        }
-
-        // Return error if either number is greater than (2^48)-1
-        if (number1 > 281474976710655 || number2 > 281474976710655) {
-            return error.num;
-        }
-
-        // Return bitwise XOR of two numbers
-        return number1 ^ number2;
-    };
-
-    exports.COMPLEX = function(real, imaginary, suffix) {
-        real = utils.parseNumber(real);
-        imaginary = utils.parseNumber(imaginary);
-        if (utils.anyIsError(real, imaginary)) {
-            return real;
-        }
-
-        // Set suffix
-        suffix = (suffix === undefined) ? 'i' : suffix;
-
-        // Return error if suffix is neither "i" nor "j"
-        if (suffix !== 'i' && suffix !== 'j') {
-            return error.value;
-        }
-
-        // Return complex number
-        if (real === 0 && imaginary === 0) {
-            return 0;
-        } else if (real === 0) {
-            return (imaginary === 1) ? suffix : imaginary.toString() + suffix;
-        } else if (imaginary === 0) {
-            return real.toString();
-        } else {
-            var sign = (imaginary > 0) ? '+' : '';
-            return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix);
-        }
-    };
-
-    exports.CONVERT = function(number, from_unit, to_unit) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-
-        // List of units supported by CONVERT and units defined by the
-        // International System of Units
-        // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion
-        // ratio]
-        var units = [
-            ["a.u. of action", "?", null, "action", false, false, 1.05457168181818e-34],
-            ["a.u. of charge", "e", null, "electric_charge", false, false, 1.60217653141414e-19],
-            ["a.u. of energy", "Eh", null, "energy", false, false, 4.35974417757576e-18],
-            ["a.u. of length", "a?", null, "length", false, false, 5.29177210818182e-11],
-            ["a.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31],
-            ["a.u. of time", "?/Eh", null, "time", false, false, 2.41888432650516e-17],
-            ["admiralty knot", "admkn", null, "speed", false, true, 0.514773333],
-            ["ampere", "A", null, "electric_current", true, false, 1],
-            ["ampere per meter", "A/m", null, "magnetic_field_intensity", true, false, 1],
-            ["ångström", "Å", ["ang"], "length", false, true, 1e-10],
-            ["are", "ar", null, "area", false, true, 100],
-            ["astronomical unit", "ua", null, "length", false, false, 1.49597870691667e-11],
-            ["bar", "bar", null, "pressure", false, false, 100000],
-            ["barn", "b", null, "area", false, false, 1e-28],
-            ["becquerel", "Bq", null, "radioactivity", true, false, 1],
-            ["bit", "bit", ["b"], "information", false, true, 1],
-            ["btu", "BTU", ["btu"], "energy", false, true, 1055.05585262],
-            ["byte", "byte", null, "information", false, true, 8],
-            ["candela", "cd", null, "luminous_intensity", true, false, 1],
-            ["candela per square metre", "cd/m?", null, "luminance", true, false, 1],
-            ["coulomb", "C", null, "electric_charge", true, false, 1],
-            ["cubic ångström", "ang3", ["ang^3"], "volume", false, true, 1e-30],
-            ["cubic foot", "ft3", ["ft^3"], "volume", false, true, 0.028316846592],
-            ["cubic inch", "in3", ["in^3"], "volume", false, true, 0.000016387064],
-            ["cubic light-year", "ly3", ["ly^3"], "volume", false, true, 8.46786664623715e-47],
-            ["cubic metre", "m?", null, "volume", true, true, 1],
-            ["cubic mile", "mi3", ["mi^3"], "volume", false, true, 4168181825.44058],
-            ["cubic nautical mile", "Nmi3", ["Nmi^3"], "volume", false, true, 6352182208],
-            ["cubic Pica", "Pica3", ["Picapt3", "Pica^3", "Picapt^3"], "volume", false, true, 7.58660370370369e-8],
-            ["cubic yard", "yd3", ["yd^3"], "volume", false, true, 0.764554857984],
-            ["cup", "cup", null, "volume", false, true, 0.0002365882365],
-            ["dalton", "Da", ["u"], "mass", false, false, 1.66053886282828e-27],
-            ["day", "d", ["day"], "time", false, true, 86400],
-            ["degree", "°", null, "angle", false, false, 0.0174532925199433],
-            ["degrees Rankine", "Rank", null, "temperature", false, true, 0.555555555555556],
-            ["dyne", "dyn", ["dy"], "force", false, true, 0.00001],
-            ["electronvolt", "eV", ["ev"], "energy", false, true, 1.60217656514141],
-            ["ell", "ell", null, "length", false, true, 1.143],
-            ["erg", "erg", ["e"], "energy", false, true, 1e-7],
-            ["farad", "F", null, "electric_capacitance", true, false, 1],
-            ["fluid ounce", "oz", null, "volume", false, true, 0.0000295735295625],
-            ["foot", "ft", null, "length", false, true, 0.3048],
-            ["foot-pound", "flb", null, "energy", false, true, 1.3558179483314],
-            ["gal", "Gal", null, "acceleration", false, false, 0.01],
-            ["gallon", "gal", null, "volume", false, true, 0.003785411784],
-            ["gauss", "G", ["ga"], "magnetic_flux_density", false, true, 1],
-            ["grain", "grain", null, "mass", false, true, 0.0000647989],
-            ["gram", "g", null, "mass", false, true, 0.001],
-            ["gray", "Gy", null, "absorbed_dose", true, false, 1],
-            ["gross registered ton", "GRT", ["regton"], "volume", false, true, 2.8316846592],
-            ["hectare", "ha", null, "area", false, true, 10000],
-            ["henry", "H", null, "inductance", true, false, 1],
-            ["hertz", "Hz", null, "frequency", true, false, 1],
-            ["horsepower", "HP", ["h"], "power", false, true, 745.69987158227],
-            ["horsepower-hour", "HPh", ["hh", "hph"], "energy", false, true, 2684519.538],
-            ["hour", "h", ["hr"], "time", false, true, 3600],
-            ["imperial gallon (U.K.)", "uk_gal", null, "volume", false, true, 0.00454609],
-            ["imperial hundredweight", "lcwt", ["uk_cwt", "hweight"], "mass", false, true, 50.802345],
-            ["imperial quart (U.K)", "uk_qt", null, "volume", false, true, 0.0011365225],
-            ["imperial ton", "brton", ["uk_ton", "LTON"], "mass", false, true, 1016.046909],
-            ["inch", "in", null, "length", false, true, 0.0254],
-            ["international acre", "uk_acre", null, "area", false, true, 4046.8564224],
-            ["IT calorie", "cal", null, "energy", false, true, 4.1868],
-            ["joule", "J", null, "energy", true, true, 1],
-            ["katal", "kat", null, "catalytic_activity", true, false, 1],
-            ["kelvin", "K", ["kel"], "temperature", true, true, 1],
-            ["kilogram", "kg", null, "mass", true, true, 1],
-            ["knot", "kn", null, "speed", false, true, 0.514444444444444],
-            ["light-year", "ly", null, "length", false, true, 9460730472580800],
-            ["litre", "L", ["l", "lt"], "volume", false, true, 0.001],
-            ["lumen", "lm", null, "luminous_flux", true, false, 1],
-            ["lux", "lx", null, "illuminance", true, false, 1],
-            ["maxwell", "Mx", null, "magnetic_flux", false, false, 1e-18],
-            ["measurement ton", "MTON", null, "volume", false, true, 1.13267386368],
-            ["meter per hour", "m/h", ["m/hr"], "speed", false, true, 0.00027777777777778],
-            ["meter per second", "m/s", ["m/sec"], "speed", true, true, 1],
-            ["meter per second squared", "m?s??", null, "acceleration", true, false, 1],
-            ["parsec", "pc", ["parsec"], "length", false, true, 30856775814671900],
-            ["meter squared per second", "m?/s", null, "kinematic_viscosity", true, false, 1],
-            ["metre", "m", null, "length", true, true, 1],
-            ["miles per hour", "mph", null, "speed", false, true, 0.44704],
-            ["millimetre of mercury", "mmHg", null, "pressure", false, false, 133.322],
-            ["minute", "?", null, "angle", false, false, 0.000290888208665722],
-            ["minute", "min", ["mn"], "time", false, true, 60],
-            ["modern teaspoon", "tspm", null, "volume", false, true, 0.000005],
-            ["mole", "mol", null, "amount_of_substance", true, false, 1],
-            ["morgen", "Morgen", null, "area", false, true, 2500],
-            ["n.u. of action", "?", null, "action", false, false, 1.05457168181818e-34],
-            ["n.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31],
-            ["n.u. of speed", "c?", null, "speed", false, false, 299792458],
-            ["n.u. of time", "?/(me?c??)", null, "time", false, false, 1.28808866778687e-21],
-            ["nautical mile", "M", ["Nmi"], "length", false, true, 1852],
-            ["newton", "N", null, "force", true, true, 1],
-            ["œrsted", "Oe ", null, "magnetic_field_intensity", false, false, 79.5774715459477],
-            ["ohm", "Ω", null, "electric_resistance", true, false, 1],
-            ["ounce mass", "ozm", null, "mass", false, true, 0.028349523125],
-            ["pascal", "Pa", null, "pressure", true, false, 1],
-            ["pascal second", "Pa?s", null, "dynamic_viscosity", true, false, 1],
-            ["pferdestärke", "PS", null, "power", false, true, 735.49875],
-            ["phot", "ph", null, "illuminance", false, false, 0.0001],
-            ["pica (1/6 inch)", "pica", null, "length", false, true, 0.00035277777777778],
-            ["pica (1/72 inch)", "Pica", ["Picapt"], "length", false, true, 0.00423333333333333],
-            ["poise", "P", null, "dynamic_viscosity", false, false, 0.1],
-            ["pond", "pond", null, "force", false, true, 0.00980665],
-            ["pound force", "lbf", null, "force", false, true, 4.4482216152605],
-            ["pound mass", "lbm", null, "mass", false, true, 0.45359237],
-            ["quart", "qt", null, "volume", false, true, 0.000946352946],
-            ["radian", "rad", null, "angle", true, false, 1],
-            ["second", "?", null, "angle", false, false, 0.00000484813681109536],
-            ["second", "s", ["sec"], "time", true, true, 1],
-            ["short hundredweight", "cwt", ["shweight"], "mass", false, true, 45.359237],
-            ["siemens", "S", null, "electrical_conductance", true, false, 1],
-            ["sievert", "Sv", null, "equivalent_dose", true, false, 1],
-            ["slug", "sg", null, "mass", false, true, 14.59390294],
-            ["square ångström", "ang2", ["ang^2"], "area", false, true, 1e-20],
-            ["square foot", "ft2", ["ft^2"], "area", false, true, 0.09290304],
-            ["square inch", "in2", ["in^2"], "area", false, true, 0.00064516],
-            ["square light-year", "ly2", ["ly^2"], "area", false, true, 8.95054210748189e+31],
-            ["square meter", "m?", null, "area", true, true, 1],
-            ["square mile", "mi2", ["mi^2"], "area", false, true, 2589988.110336],
-            ["square nautical mile", "Nmi2", ["Nmi^2"], "area", false, true, 3429904],
-            ["square Pica", "Pica2", ["Picapt2", "Pica^2", "Picapt^2"], "area", false, true, 0.00001792111111111],
-            ["square yard", "yd2", ["yd^2"], "area", false, true, 0.83612736],
-            ["statute mile", "mi", null, "length", false, true, 1609.344],
-            ["steradian", "sr", null, "solid_angle", true, false, 1],
-            ["stilb", "sb", null, "luminance", false, false, 0.0001],
-            ["stokes", "St", null, "kinematic_viscosity", false, false, 0.0001],
-            ["stone", "stone", null, "mass", false, true, 6.35029318],
-            ["tablespoon", "tbs", null, "volume", false, true, 0.0000147868],
-            ["teaspoon", "tsp", null, "volume", false, true, 0.00000492892],
-            ["tesla", "T", null, "magnetic_flux_density", true, true, 1],
-            ["thermodynamic calorie", "c", null, "energy", false, true, 4.184],
-            ["ton", "ton", null, "mass", false, true, 907.18474],
-            ["tonne", "t", null, "mass", false, false, 1000],
-            ["U.K. pint", "uk_pt", null, "volume", false, true, 0.00056826125],
-            ["U.S. bushel", "bushel", null, "volume", false, true, 0.03523907],
-            ["U.S. oil barrel", "barrel", null, "volume", false, true, 0.158987295],
-            ["U.S. pint", "pt", ["us_pt"], "volume", false, true, 0.000473176473],
-            ["U.S. survey mile", "survey_mi", null, "length", false, true, 1609.347219],
-            ["U.S. survey/statute acre", "us_acre", null, "area", false, true, 4046.87261],
-            ["volt", "V", null, "voltage", true, false, 1],
-            ["watt", "W", null, "power", true, true, 1],
-            ["watt-hour", "Wh", ["wh"], "energy", false, true, 3600],
-            ["weber", "Wb", null, "magnetic_flux", true, false, 1],
-            ["yard", "yd", null, "length", false, true, 0.9144],
-            ["year", "yr", null, "time", false, true, 31557600]
-        ];
-
-        // Binary prefixes
-        // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived
-        // from]
-        var binary_prefixes = {
-            Yi: ["yobi", 80, 1208925819614629174706176, "Yi", "yotta"],
-            Zi: ["zebi", 70, 1180591620717411303424, "Zi", "zetta"],
-            Ei: ["exbi", 60, 1152921504606846976, "Ei", "exa"],
-            Pi: ["pebi", 50, 1125899906842624, "Pi", "peta"],
-            Ti: ["tebi", 40, 1099511627776, "Ti", "tera"],
-            Gi: ["gibi", 30, 1073741824, "Gi", "giga"],
-            Mi: ["mebi", 20, 1048576, "Mi", "mega"],
-            ki: ["kibi", 10, 1024, "ki", "kilo"]
-        };
-
-        // Unit prefixes
-        // [Name, Multiplier, Abbreviation]
-        var unit_prefixes = {
-            Y: ["yotta", 1e+24, "Y"],
-            Z: ["zetta", 1e+21, "Z"],
-            E: ["exa", 1e+18, "E"],
-            P: ["peta", 1e+15, "P"],
-            T: ["tera", 1e+12, "T"],
-            G: ["giga", 1e+09, "G"],
-            M: ["mega", 1e+06, "M"],
-            k: ["kilo", 1e+03, "k"],
-            h: ["hecto", 1e+02, "h"],
-            e: ["dekao", 1e+01, "e"],
-            d: ["deci", 1e-01, "d"],
-            c: ["centi", 1e-02, "c"],
-            m: ["milli", 1e-03, "m"],
-            u: ["micro", 1e-06, "u"],
-            n: ["nano", 1e-09, "n"],
-            p: ["pico", 1e-12, "p"],
-            f: ["femto", 1e-15, "f"],
-            a: ["atto", 1e-18, "a"],
-            z: ["zepto", 1e-21, "z"],
-            y: ["yocto", 1e-24, "y"]
-        };
-
-        // Initialize units and multipliers
-        var from = null;
-        var to = null;
-        var base_from_unit = from_unit;
-        var base_to_unit = to_unit;
-        var from_multiplier = 1;
-        var to_multiplier = 1;
-        var alt;
-
-        // Lookup from and to units
-        for (var i = 0; i < units.length; i++) {
-            alt = (units[i][2] === null) ? [] : units[i][2];
-            if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {
-              from = units[i];
-            }
-            if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {
-              to = units[i];
-            }
-        }
-
-        // Lookup from prefix
-        if (from === null) {
-            var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)];
-            var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)];
-
-            // Handle dekao unit prefix (only unit prefix with two characters)
-            if (from_unit.substring(0, 2) === 'da') {
-              from_unit_prefix = ["dekao", 1e+01, "da"];
-            }
-
-            // Handle binary prefixes first (so that 'Yi' is processed before
-            // 'Y')
-            if (from_binary_prefix) {
-              from_multiplier = from_binary_prefix[2];
-              base_from_unit = from_unit.substring(2);
-            } else if (from_unit_prefix) {
-              from_multiplier = from_unit_prefix[1];
-              base_from_unit = from_unit.substring(from_unit_prefix[2].length);
-            }
-
-            // Lookup from unit
-            for (var j = 0; j < units.length; j++) {
-              alt = (units[j][2] === null) ? [] : units[j][2];
-              if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {
-                  from = units[j];
-              }
-            }
-        }
-
-        // Lookup to prefix
-        if (to === null) {
-            var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)];
-            var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)];
-
-            // Handle dekao unit prefix (only unit prefix with two characters)
-            if (to_unit.substring(0, 2) === 'da') {
-              to_unit_prefix = ["dekao", 1e+01, "da"];
-            }
-
-            // Handle binary prefixes first (so that 'Yi' is processed before
-            // 'Y')
-            if (to_binary_prefix) {
-              to_multiplier = to_binary_prefix[2];
-              base_to_unit = to_unit.substring(2);
-            } else if (to_unit_prefix) {
-              to_multiplier = to_unit_prefix[1];
-              base_to_unit = to_unit.substring(to_unit_prefix[2].length);
-            }
-
-            // Lookup to unit
-            for (var k = 0; k < units.length; k++) {
-              alt = (units[k][2] === null) ? [] : units[k][2];
-              if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {
-                  to = units[k];
-              }
-            }
-        }
-
-        // Return error if a unit does not exist
-        if (from === null || to === null) {
-            return error.na;
-        }
-
-        // Return error if units represent different quantities
-        if (from[3] !== to[3]) {
-            return error.na;
-        }
-
-        // Return converted number
-        return number * from[6] * from_multiplier / (to[6] * to_multiplier);
-    };
-
-    exports.DEC2BIN = function(number, places) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-
-        // Return error if number is not decimal, is lower than -512, or is
-        // greater than 511
-        if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character binary number if number is
-        // negative
-        if (number < 0) {
-            return '1' + REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2);
-        }
-
-        // Convert decimal number to binary
-        var result = parseInt(number, 10).toString(2);
-
-        // Return binary number using the minimum number of characters necessary
-        // if places is undefined
-        if (typeof places === 'undefined') {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.DEC2HEX = function(number, places) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-
-        // Return error if number is not decimal, is lower than -549755813888,
-        // or is greater than 549755813887
-        if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character hexadecimal number if number
-        // is negative
-        if (number < 0) {
-            return (1099511627776 + number).toString(16);
-        }
-
-        // Convert decimal number to hexadecimal
-        var result = parseInt(number, 10).toString(16);
-
-        // Return hexadecimal number using the minimum number of characters
-        // necessary if places is undefined
-        if (typeof places === 'undefined') {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.DEC2OCT = function(number, places) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-
-        // Return error if number is not decimal, is lower than -549755813888,
-        // or is greater than 549755813887
-        if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character octal number if number is
-        // negative
-        if (number < 0) {
-            return (1073741824 + number).toString(8);
-        }
-
-        // Convert decimal number to octal
-        var result = parseInt(number, 10).toString(8);
-
-        // Return octal number using the minimum number of characters necessary
-        // if places is undefined
-        if (typeof places === 'undefined') {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.DELTA = function(number1, number2) {
-        // Set number2 to zero if undefined
-        number2 = (number2 === undefined) ? 0 : number2;
-        number1 = utils.parseNumber(number1);
-        number2 = utils.parseNumber(number2);
-        if (utils.anyIsError(number1, number2)) {
-            return error.value;
-        }
-
-        // Return delta
-        return (number1 === number2) ? 1 : 0;
-    };
-
-    exports.ERF = function(lower_bound, upper_bound) {
-    };
-
-    exports.ERF.PRECISE = function() {
-    };
-
-    exports.ERFC = function(x) {
-    };
-
-    exports.ERFC.PRECISE = function() {
-    };
-
-    exports.GESTEP = function(number, step) {
-        step = step || 0;
-        number = utils.parseNumber(number);
-        if (utils.anyIsError(step, number)) {
-            return number;
-        }
-
-        // Return delta
-        return (number >= step) ? 1 : 0;
-    };
-
-    exports.HEX2BIN = function(number, places) {
-        // Return error if number is not hexadecimal or contains more than ten
-        // characters (10 digits)
-        if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
-            return error.num;
-        }
-
-        // Check if number is negative
-        var negative = (number.length === 10 && number.substring(0, 1).toLowerCase() === 'f') ? true : false;
-
-        // Convert hexadecimal number to decimal
-        var decimal = (negative) ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);
-
-        // Return error if number is lower than -512 or greater than 511
-        if (decimal < -512 || decimal > 511) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character binary number if number is
-        // negative
-        if (negative) {
-            return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);
-        }
-
-        // Convert decimal number to binary
-        var result = decimal.toString(2);
-
-        // Return binary number using the minimum number of characters necessary
-        // if places is undefined
-        if (places === undefined) {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.HEX2DEC = function(number) {
-        // Return error if number is not hexadecimal or contains more than ten
-        // characters (10 digits)
-        if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
-            return error.num;
-        }
-
-        // Convert hexadecimal number to decimal
-        var decimal = parseInt(number, 16);
-
-        // Return decimal number
-        return (decimal >= 549755813888) ? decimal - 1099511627776 : decimal;
-    };
-
-    exports.HEX2OCT = function(number, places) {
-        // Return error if number is not hexadecimal or contains more than ten
-        // characters (10 digits)
-        if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
-            return error.num;
-        }
-
-        // Convert hexadecimal number to decimal
-        var decimal = parseInt(number, 16);
-
-        // Return error if number is positive and greater than 0x1fffffff
-        // (536870911)
-        if (decimal > 536870911 && decimal < 1098974756864) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character octal number if number is
-        // negative
-        if (decimal >= 1098974756864) {
-            return (decimal - 1098437885952).toString(8);
-        }
-
-        // Convert decimal number to octal
-        var result = decimal.toString(8);
-
-        // Return octal number using the minimum number of characters necessary
-        // if places is undefined
-        if (places === undefined) {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.IMABS = function(inumber) {
-        // Lookup real and imaginary coefficients using exports.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        // Return error if either coefficient is not a number
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Return absolute value of complex number
-        return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
-    };
-
-    exports.IMAGINARY = function(inumber) {
-        if (inumber === undefined || inumber === true || inumber === false) {
-            return error.value;
-        }
-
-        // Return 0 if inumber is equal to 0
-        if (inumber === 0 || inumber === '0') {
-            return 0;
-        }
-
-        // Handle special cases
-        if (['i', 'j'].indexOf(inumber) >= 0) {
-            return 1;
-        }
-
-        // Normalize imaginary coefficient
-        inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j');
-
-        // Lookup sign
-        var plus = inumber.indexOf('+');
-        var minus = inumber.indexOf('-');
-        if (plus === 0) {
-            plus = inumber.indexOf('+', 1);
-        }
-
-        if (minus === 0) {
-            minus = inumber.indexOf('-', 1);
-        }
-
-        // Lookup imaginary unit
-        var last = inumber.substring(inumber.length - 1, inumber.length);
-        var unit = (last === 'i' || last === 'j');
-
-        if (plus >= 0 || minus >= 0) {
-            // Return error if imaginary unit is neither i nor j
-            if (!unit) {
-              return error.num;
-            }
-
-            // Return imaginary coefficient of complex number
-            if (plus >= 0) {
-              return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?
-                  error.num :
-                  Number(inumber.substring(plus + 1, inumber.length - 1));
-            } else {
-              return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?
-                  error.num :
-                  -Number(inumber.substring(minus + 1, inumber.length - 1));
-            }
-        } else {
-            if (unit) {
-              return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : inumber.substring(0, inumber.length - 1);
-            } else {
-              return (isNaN(inumber)) ? error.num : 0;
-            }
-        }
-    };
-
-    exports.IMARGUMENT = function(inumber) {
-        // Lookup real and imaginary coefficients using exports.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        // Return error if either coefficient is not a number
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Return error if inumber is equal to zero
-        if (x === 0 && y === 0) {
-            return error.div0;
-        }
-
-        // Return PI/2 if x is equal to zero and y is positive
-        if (x === 0 && y > 0) {
-            return Math.PI / 2;
-        }
-
-        // Return -PI/2 if x is equal to zero and y is negative
-        if (x === 0 && y < 0) {
-            return -Math.PI / 2;
-        }
-
-        // Return zero if x is negative and y is equal to zero
-        if (y === 0 && x > 0) {
-            return 0;
-        }
-
-        // Return zero if x is negative and y is equal to zero
-        if (y === 0 && x < 0) {
-            return -Math.PI;
-        }
-
-        // Return argument of complex number
-        if (x > 0) {
-            return Math.atan(y / x);
-        } else if (x < 0 && y >= 0) {
-            return Math.atan(y / x) + Math.PI;
-        } else {
-            return Math.atan(y / x) - Math.PI;
-        }
-    };
-
-    exports.IMCONJUGATE = function(inumber) {
-        // Lookup real and imaginary coefficients using exports.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return conjugate of complex number
-        return (y !== 0) ? exports.COMPLEX(x, -y, unit) : inumber;
-    };
-
-    exports.IMCOS = function(inumber) {
-        // Lookup real and imaginary coefficients using exports.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return cosine of complex number
-        return exports.COMPLEX(Math.cos(x) * (Math.exp(y) + Math.exp(-y)) / 2, -Math.sin(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);
-    };
-
-    exports.IMCOSH = function(inumber) {
-        // Lookup real and imaginary coefficients using exports.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return hyperbolic cosine of complex number
-        return exports.COMPLEX(Math.cos(y) * (Math.exp(x) + Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) - Math.exp(-x)) / 2, unit);
-    };
-
-    exports.IMCOT = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Return cotangent of complex number
-        return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber));
-    };
-
-    exports.IMDIV = function(inumber1, inumber2) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var a = exports.IMREAL(inumber1);
-        var b = exports.IMAGINARY(inumber1);
-        var c = exports.IMREAL(inumber2);
-        var d = exports.IMAGINARY(inumber2);
-
-        if (utils.anyIsError(a, b, c, d)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit1 = inumber1.substring(inumber1.length - 1);
-        var unit2 = inumber2.substring(inumber2.length - 1);
-        var unit = 'i';
-        if (unit1 === 'j') {
-            unit = 'j';
-        } else if (unit2 === 'j') {
-            unit = 'j';
-        }
-
-        // Return error if inumber2 is null
-        if (c === 0 && d === 0) {
-            return error.num;
-        }
-
-        // Return exponential of complex number
-        var den = c * c + d * d;
-        return exports.COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit);
-    };
-
-    exports.IMEXP = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return exponential of complex number
-        var e = Math.exp(x);
-        return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit);
-    };
-
-    exports.IMLN = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return exponential of complex number
-        return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit);
-    };
-
-    exports.IMLOG10 = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return exponential of complex number
-        return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit);
-    };
-
-    exports.IMLOG2 = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return exponential of complex number
-        return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit);
-    };
-
-    exports.IMPOWER = function(inumber, number) {
-        number = utils.parseNumber(number);
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-        if (utils.anyIsError(number, x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Calculate power of modulus
-        var p = Math.pow(exports.IMABS(inumber), number);
-
-        // Calculate argument
-        var t = exports.IMARGUMENT(inumber);
-
-        // Return exponential of complex number
-        return exports.COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit);
-    };
-
-    exports.IMPRODUCT = function() {
-        // Initialize result
-        var result = arguments[0];
-
-        // Loop on all numbers
-        for (var i = 1; i < arguments.length; i++) {
-            // Lookup coefficients of two complex numbers
-            var a = exports.IMREAL(result);
-            var b = exports.IMAGINARY(result);
-            var c = exports.IMREAL(arguments[i]);
-            var d = exports.IMAGINARY(arguments[i]);
-
-            if (utils.anyIsError(a, b, c, d)) {
-              return error.value;
-            }
-
-            // Complute product of two complex numbers
-            result = exports.COMPLEX(a * c - b * d, a * d + b * c);
-        }
-
-        // Return product of complex numbers
-        return result;
-    };
-
-    exports.IMREAL = function(inumber) {
-        if (inumber === undefined || inumber === true || inumber === false) {
-            return error.value;
-        }
-
-        // Return 0 if inumber is equal to 0
-        if (inumber === 0 || inumber === '0') {
-            return 0;
-        }
-
-        // Handle special cases
-        if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) {
-            return 0;
-        }
-
-        // Lookup sign
-        var plus = inumber.indexOf('+');
-        var minus = inumber.indexOf('-');
-        if (plus === 0) {
-            plus = inumber.indexOf('+', 1);
-        }
-        if (minus === 0) {
-            minus = inumber.indexOf('-', 1);
-        }
-
-        // Lookup imaginary unit
-        var last = inumber.substring(inumber.length - 1, inumber.length);
-        var unit = (last === 'i' || last === 'j');
-
-        if (plus >= 0 || minus >= 0) {
-            // Return error if imaginary unit is neither i nor j
-            if (!unit) {
-              return error.num;
-            }
-
-            // Return real coefficient of complex number
-            if (plus >= 0) {
-              return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?
-                  error.num :
-                  Number(inumber.substring(0, plus));
-            } else {
-              return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?
-                  error.num :
-                  Number(inumber.substring(0, minus));
-            }
-        } else {
-            if (unit) {
-              return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : 0;
-            } else {
-              return (isNaN(inumber)) ? error.num : inumber;
-            }
-        }
-    };
-
-    exports.IMSEC = function(inumber) {
-        // Return error if inumber is a logical value
-        if (inumber === true || inumber === false) {
-            return error.value;
-        }
-
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Return secant of complex number
-        return exports.IMDIV('1', exports.IMCOS(inumber));
-    };
-
-    exports.IMSECH = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Return hyperbolic secant of complex number
-        return exports.IMDIV('1', exports.IMCOSH(inumber));
-    };
-
-    exports.IMSIN = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return sine of complex number
-        return exports.COMPLEX(Math.sin(x) * (Math.exp(y) + Math.exp(-y)) / 2, Math.cos(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);
-    };
-
-    exports.IMSINH = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Return hyperbolic sine of complex number
-        return exports.COMPLEX(Math.cos(y) * (Math.exp(x) - Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) + Math.exp(-x)) / 2, unit);
-    };
-
-    exports.IMSQRT = function(inumber) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit = inumber.substring(inumber.length - 1);
-        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
-
-        // Calculate power of modulus
-        var s = Math.sqrt(exports.IMABS(inumber));
-
-        // Calculate argument
-        var t = exports.IMARGUMENT(inumber);
-
-        // Return exponential of complex number
-        return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit);
-    };
-
-    exports.IMCSC = function (inumber) {
-        // Return error if inumber is a logical value
-        if (inumber === true || inumber === false) {
-            return error.value;
-        }
-
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        // Return error if either coefficient is not a number
-        if (utils.anyIsError(x, y)) {
-            return error.num;
-        }
-
-        // Return cosecant of complex number
-        return exports.IMDIV('1', exports.IMSIN(inumber));
-    };
-
-    exports.IMCSCH = function (inumber) {
-        // Return error if inumber is a logical value
-        if (inumber === true || inumber === false) {
-            return error.value;
-        }
-
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        // Return error if either coefficient is not a number
-        if (utils.anyIsError(x, y)) {
-            return error.num;
-        }
-
-        // Return hyperbolic cosecant of complex number
-        return exports.IMDIV('1', exports.IMSINH(inumber));
-    };
-
-    exports.IMSUB = function(inumber1, inumber2) {
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var a = this.IMREAL(inumber1);
-        var b = this.IMAGINARY(inumber1);
-        var c = this.IMREAL(inumber2);
-        var d = this.IMAGINARY(inumber2);
-
-        if (utils.anyIsError(a, b, c, d)) {
-            return error.value;
-        }
-
-        // Lookup imaginary unit
-        var unit1 = inumber1.substring(inumber1.length - 1);
-        var unit2 = inumber2.substring(inumber2.length - 1);
-        var unit = 'i';
-        if (unit1 === 'j') {
-            unit = 'j';
-        } else if (unit2 === 'j') {
-            unit = 'j';
-        }
-
-        // Return _ of two complex numbers
-        return this.COMPLEX(a - c, b - d, unit);
-    };
-
-    exports.IMSUM = function() {
-        var args = utils.flatten(arguments);
-
-        // Initialize result
-        var result = args[0];
-
-        // Loop on all numbers
-        for (var i = 1; i < args.length; i++) {
-            // Lookup coefficients of two complex numbers
-            var a = this.IMREAL(result);
-            var b = this.IMAGINARY(result);
-            var c = this.IMREAL(args[i]);
-            var d = this.IMAGINARY(args[i]);
-
-            if (utils.anyIsError(a, b, c, d)) {
-              return error.value;
-            }
-
-            // Complute product of two complex numbers
-            result = this.COMPLEX(a + c, b + d);
-        }
-
-        // Return sum of complex numbers
-        return result;
-    };
-
-    exports.IMTAN = function(inumber) {
-        // Return error if inumber is a logical value
-        if (inumber === true || inumber === false) {
-            return error.value;
-        }
-
-        // Lookup real and imaginary coefficients using Formula.js
-        // [http://formulajs.org]
-        var x = exports.IMREAL(inumber);
-        var y = exports.IMAGINARY(inumber);
-
-        if (utils.anyIsError(x, y)) {
-            return error.value;
-        }
-
-        // Return tangent of complex number
-        return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber));
-    };
-
-    exports.OCT2BIN = function(number, places) {
-        // Return error if number is not hexadecimal or contains more than ten
-        // characters (10 digits)
-        if (!/^[0-7]{1,10}$/.test(number)) {
-            return error.num;
-        }
-
-        // Check if number is negative
-        var negative = (number.length === 10 && number.substring(0, 1) === '7') ? true : false;
-
-        // Convert octal number to decimal
-        var decimal = (negative) ? parseInt(number, 8) - 1073741824 : parseInt(number, 8);
-
-        // Return error if number is lower than -512 or greater than 511
-        if (decimal < -512 || decimal > 511) {
-            return error.num;
-        }
-
-        // Ignore places and return a 10-character binary number if number is
-        // negative
-        if (negative) {
-            return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);
-        }
-
-        // Convert decimal number to binary
-        var result = decimal.toString(2);
-
-        // Return binary number using the minimum number of characters necessary
-        // if places is undefined
-        if (typeof places === 'undefined') {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    exports.OCT2DEC = function(number) {
-        // Return error if number is not octal or contains more than ten
-        // characters (10 digits)
-        if (!/^[0-7]{1,10}$/.test(number)) {
-            return error.num;
-        }
-
-        // Convert octal number to decimal
-        var decimal = parseInt(number, 8);
-
-        // Return decimal number
-        return (decimal >= 536870912) ? decimal - 1073741824 : decimal;
-    };
-
-    exports.OCT2HEX = function(number, places) {
-        // Return error if number is not octal or contains more than ten
-        // characters (10 digits)
-        if (!/^[0-7]{1,10}$/.test(number)) {
-            return error.num;
-        }
-
-        // Convert octal number to decimal
-        var decimal = parseInt(number, 8);
-
-        // Ignore places and return a 10-character octal number if number is
-        // negative
-        if (decimal >= 536870912) {
-            return 'ff' + (decimal + 3221225472).toString(16);
-        }
-
-        // Convert decimal number to hexadecimal
-        var result = decimal.toString(16);
-
-        // Return hexadecimal number using the minimum number of characters
-        // necessary if places is undefined
-        if (places === undefined) {
-            return result;
-        } else {
-            // Return error if places is nonnumeric
-            if (isNaN(places)) {
-              return error.value;
-            }
-
-            // Return error if places is negative
-            if (places < 0) {
-              return error.num;
-            }
-
-            // Truncate places in case it is not an integer
-            places = Math.floor(places);
-
-            // Pad return value with leading 0s (zeros) if necessary (using
-            // Underscore.string)
-            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
-        }
-    };
-
-    return exports;
-})();
-
-jexcel.methods.financial = (function() {
-    var exports = {};
-
-    function validDate(d) {
-        return d && d.getTime && !isNaN(d.getTime());
-    }
-
-    function ensureDate(d) {
-        return (d instanceof Date)?d:new Date(d);
-    }
-
-    exports.ACCRINT = function(issue, first, settlement, rate, par, frequency, basis) {
-        // Return error if either date is invalid
-        issue        = ensureDate(issue);
-        first        = ensureDate(first);
-        settlement = ensureDate(settlement);
-        if (!validDate(issue) || !validDate(first) || !validDate(settlement)) {
-            return '#VALUE!';
-        }
-
-        // Return error if either rate or par are lower than or equal to zero
-        if (rate <= 0 || par <= 0) {
-            return '#NUM!';
-        }
-
-        // Return error if frequency is neither 1, 2, or 4
-        if ([1, 2, 4].indexOf(frequency) === -1) {
-            return '#NUM!';
-        }
-
-        // Return error if basis is neither 0, 1, 2, 3, or 4
-        if ([0, 1, 2, 3, 4].indexOf(basis) === -1) {
-            return '#NUM!';
-        }
-
-        // Return error if settlement is before or equal to issue
-        if (settlement <= issue) {
-            return '#NUM!';
-        }
-
-        // Set default values
-        par   = par   || 0;
-        basis = basis || 0;
-
-        // Compute accrued interest
-        return par * rate * YEARFRAC(issue, settlement, basis);
-    };
-
-    exports.ACCRINTM = null;
-
-    exports.AMORDEGRC = null;
-
-    exports.AMORLINC = null;
-
-    exports.COUPDAYBS = null;
-
-    exports.COUPDAYS = null;
-
-    exports.COUPDAYSNC = null;
-
-    exports.COUPNCD = null;
-
-    exports.COUPNUM = null;
-
-    exports.COUPPCD = null;
-
-    exports.CUMIPMT = function(rate, periods, value, start, end, type) {
-        // Credits: algorithm inspired by Apache OpenOffice
-        // Credits: Hannes Stiebitzhofer for the translations of function and
-            // variable names
-        // Requires exports.FV() and exports.PMT() from exports.js
-            // [http://stoic.com/exports/]
-
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        value = utils.parseNumber(value);
-        if (utils.anyIsError(rate, periods, value)) {
-            return error.value;
-        }
-
-        // Return error if either rate, periods, or value are lower than or
-            // equal to zero
-        if (rate <= 0 || periods <= 0 || value <= 0) {
-            return error.num;
-        }
-
-        // Return error if start < 1, end < 1, or start > end
-        if (start < 1 || end < 1 || start > end) {
-            return error.num;
-        }
-
-        // Return error if type is neither 0 nor 1
-        if (type !== 0 && type !== 1) {
-            return error.num;
-        }
-
-        // Compute cumulative interest
-        var payment = exports.PMT(rate, periods, value, 0, type);
-        var interest = 0;
-
-        if (start === 1) {
-            if (type === 0) {
-                interest = -value;
-                start++;
-            }
-        }
-
-        for (var i = start; i <= end; i++) {
-            if (type === 1) {
-                interest += exports.FV(rate, i - 2, payment, value, 1) - payment;
-            } else {
-                interest += exports.FV(rate, i - 1, payment, value, 0);
-            }
-        }
-        interest *= rate;
-
-        // Return cumulative interest
-        return interest;
-    };
-
-    exports.CUMPRINC = function(rate, periods, value, start, end, type) {
-        // Credits: algorithm inspired by Apache OpenOffice
-        // Credits: Hannes Stiebitzhofer for the translations of function and
-            // variable names
-
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        value = utils.parseNumber(value);
-        if (utils.anyIsError(rate, periods, value)) {
-            return error.value;
-        }
-
-        // Return error if either rate, periods, or value are lower than or
-            // equal to zero
-        if (rate <= 0 || periods <= 0 || value <= 0) {
-            return error.num;
-        }
-
-        // Return error if start < 1, end < 1, or start > end
-        if (start < 1 || end < 1 || start > end) {
-            return error.num;
-        }
-
-        // Return error if type is neither 0 nor 1
-        if (type !== 0 && type !== 1) {
-            return error.num;
-        }
-
-        // Compute cumulative principal
-        var payment = exports.PMT(rate, periods, value, 0, type);
-        var principal = 0;
-        if (start === 1) {
-            if (type === 0) {
-                principal = payment + value * rate;
-            } else {
-                principal = payment;
-            }
-            start++;
-        }
-        for (var i = start; i <= end; i++) {
-            if (type > 0) {
-                principal += payment - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate;
-            } else {
-                principal += payment - exports.FV(rate, i - 1, payment, value, 0) * rate;
-            }
-        }
-
-        // Return cumulative principal
-        return principal;
-    };
-
-    exports.DB = function(cost, salvage, life, period, month) {
-        // Initialize month
-        month = (month === undefined) ? 12 : month;
-
-        cost = utils.parseNumber(cost);
-        salvage = utils.parseNumber(salvage);
-        life = utils.parseNumber(life);
-        period = utils.parseNumber(period);
-        month = utils.parseNumber(month);
-        if (utils.anyIsError(cost, salvage, life, period, month)) {
-            return error.value;
-        }
-
-        // Return error if any of the parameters is negative
-        if (cost < 0 || salvage < 0 || life < 0 || period < 0) {
-            return error.num;
-        }
-
-        // Return error if month is not an integer between 1 and 12
-        if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) {
-            return error.num;
-        }
-
-        // Return error if period is greater than life
-        if (period > life) {
-            return error.num;
-        }
-
-        // Return 0 (zero) if salvage is greater than or equal to cost
-        if (salvage >= cost) {
-            return 0;
-        }
-
-        // Rate is rounded to three decimals places
-        var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3);
-
-        // Compute initial depreciation
-        var initial = cost * rate * month / 12;
-
-        // Compute total depreciation
-        var total = initial;
-        var current = 0;
-        var ceiling = (period === life) ? life - 1 : period;
-        for (var i = 2; i <= ceiling; i++) {
-            current = (cost - total) * rate;
-            total += current;
-        }
-
-        // Depreciation for the first and last periods are special cases
-        if (period === 1) {
-            // First period
-            return initial;
-        } else if (period === life) {
-            // Last period
-            return (cost - total) * rate;
-        } else {
-            return current;
-        }
-    };
-
-    exports.DDB = function(cost, salvage, life, period, factor) {
-        // Initialize factor
-        factor = (factor === undefined) ? 2 : factor;
-
-        cost = utils.parseNumber(cost);
-        salvage = utils.parseNumber(salvage);
-        life = utils.parseNumber(life);
-        period = utils.parseNumber(period);
-        factor = utils.parseNumber(factor);
-        if (utils.anyIsError(cost, salvage, life, period, factor)) {
-            return error.value;
-        }
-
-        // Return error if any of the parameters is negative or if factor is
-            // null
-        if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) {
-            return error.num;
-        }
-
-        // Return error if period is greater than life
-        if (period > life) {
-            return error.num;
-        }
-
-        // Return 0 (zero) if salvage is greater than or equal to cost
-        if (salvage >= cost) {
-            return 0;
-        }
-
-        // Compute depreciation
-        var total = 0;
-        var current = 0;
-        for (var i = 1; i <= period; i++) {
-            current = Math.min((cost - total) * (factor / life), (cost - salvage - total));
-            total += current;
-        }
-
-        // Return depreciation
-        return current;
-    };
-
-    exports.DISC = null;
-
-    exports.DOLLARDE = function(dollar, fraction) {
-        // Credits: algorithm inspired by Apache OpenOffice
-
-        dollar = utils.parseNumber(dollar);
-        fraction = utils.parseNumber(fraction);
-        if (utils.anyIsError(dollar, fraction)) {
-            return error.value;
-        }
-
-        // Return error if fraction is negative
-        if (fraction < 0) {
-            return error.num;
-        }
-
-        // Return error if fraction is greater than or equal to 0 and less than
-            // 1
-        if (fraction >= 0 && fraction < 1) {
-            return error.div0;
-        }
-
-        // Truncate fraction if it is not an integer
-        fraction = parseInt(fraction, 10);
-
-        // Compute integer part
-        var result = parseInt(dollar, 10);
-
-        // Add decimal part
-        result += (dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction;
-
-        // Round result
-        var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1);
-        result = Math.round(result * power) / power;
-
-        // Return converted dollar price
-        return result;
-    };
-
-    exports.DOLLARFR = function(dollar, fraction) {
-        // Credits: algorithm inspired by Apache OpenOffice
-
-        dollar = utils.parseNumber(dollar);
-        fraction = utils.parseNumber(fraction);
-        if (utils.anyIsError(dollar, fraction)) {
-            return error.value;
-        }
-
-        // Return error if fraction is negative
-        if (fraction < 0) {
-            return error.num;
-        }
-
-        // Return error if fraction is greater than or equal to 0 and less than
-            // 1
-        if (fraction >= 0 && fraction < 1) {
-            return error.div0;
-        }
-
-        // Truncate fraction if it is not an integer
-        fraction = parseInt(fraction, 10);
-
-        // Compute integer part
-        var result = parseInt(dollar, 10);
-
-        // Add decimal part
-        result += (dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction;
-
-        // Return converted dollar price
-        return result;
-    };
-
-    exports.DURATION = null;
-
-    exports.EFFECT = function(rate, periods) {
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        if (utils.anyIsError(rate, periods)) {
-            return error.value;
-        }
-
-        // Return error if rate <=0 or periods < 1
-        if (rate <= 0 || periods < 1) {
-            return error.num;
-        }
-
-        // Truncate periods if it is not an integer
-        periods = parseInt(periods, 10);
-
-        // Return effective annual interest rate
-        return Math.pow(1 + rate / periods, periods) - 1;
-    };
-
-    exports.FV = function(rate, periods, payment, value, type) {
-        // Credits: algorithm inspired by Apache OpenOffice
-
-        value = value || 0;
-        type = type || 0;
-
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        payment = utils.parseNumber(payment);
-        value = utils.parseNumber(value);
-        type = utils.parseNumber(type);
-        if (utils.anyIsError(rate, periods, payment, value, type)) {
-            return error.value;
-        }
-
-        // Return future value
-        var result;
-        if (rate === 0) {
-            result = value + payment * periods;
-        } else {
-            var term = Math.pow(1 + rate, periods);
-            if (type === 1) {
-                result = value * term + payment * (1 + rate) * (term - 1) / rate;
-            } else {
-                result = value * term + payment * (term - 1) / rate;
-            }
-        }
-        return -result;
-    };
-
-    exports.FVSCHEDULE = function(principal, schedule) {
-        principal = utils.parseNumber(principal);
-        schedule = utils.parseNumberArray(utils.flatten(schedule));
-        if (utils.anyIsError(principal, schedule)) {
-            return error.value;
-        }
-
-        var n = schedule.length;
-        var future = principal;
-
-        // Apply all interests in schedule
-        for (var i = 0; i < n; i++) {
-            // Apply scheduled interest
-            future *= 1 + schedule[i];
-        }
-
-        // Return future value
-        return future;
-    };
-
-    exports.INTRATE = null;
-
-    exports.IPMT = function(rate, period, periods, present, future, type) {
-        // Credits: algorithm inspired by Apache OpenOffice
-
-        future = future || 0;
-        type = type || 0;
-
-        rate = utils.parseNumber(rate);
-        period = utils.parseNumber(period);
-        periods = utils.parseNumber(periods);
-        present = utils.parseNumber(present);
-        future = utils.parseNumber(future);
-        type = utils.parseNumber(type);
-        if (utils.anyIsError(rate, period, periods, present, future, type)) {
-            return error.value;
-        }
-
-        // Compute payment
-        var payment = exports.PMT(rate, periods, present, future, type);
-
-        // Compute interest
-        var interest;
-        if (period === 1) {
-            if (type === 1) {
-                interest = 0;
-            } else {
-                interest = -present;
-            }
-        } else {
-            if (type === 1) {
-                interest = exports.FV(rate, period - 2, payment, present, 1) - payment;
-            } else {
-                interest = exports.FV(rate, period - 1, payment, present, 0);
-            }
-        }
-
-        // Return interest
-        return interest * rate;
-    };
-
-    exports.IRR = function(values, guess) {
-        // Credits: algorithm inspired by Apache OpenOffice
-
-        guess = guess || 0;
-
-        values = utils.parseNumberArray(utils.flatten(values));
-        guess = utils.parseNumber(guess);
-        if (utils.anyIsError(values, guess)) {
-            return error.value;
-        }
-
-        // Calculates the resulting amount
-        var irrResult = function(values, dates, rate) {
-            var r = rate + 1;
-            var result = values[0];
-            for (var i = 1; i < values.length; i++) {
-                result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365);
-            }
-            return result;
-        };
-
-        // Calculates the first derivation
-        var irrResultDeriv = function(values, dates, rate) {
-            var r = rate + 1;
-            var result = 0;
-            for (var i = 1; i < values.length; i++) {
-                var frac = (dates[i] - dates[0]) / 365;
-                result -= frac * values[i] / Math.pow(r, frac + 1);
-            }
-            return result;
-        };
-
-        // Initialize dates and check that values contains at least one positive
-            // value and one negative value
-        var dates = [];
-        var positive = false;
-        var negative = false;
-        for (var i = 0; i < values.length; i++) {
-            dates[i] = (i === 0) ? 0 : dates[i - 1] + 365;
-            if (values[i] > 0) {
-                positive = true;
-            }
-            if (values[i] < 0) {
-                negative = true;
-            }
-        }
-
-        // Return error if values does not contain at least one positive value
-            // and one negative value
-        if (!positive || !negative) {
-            return error.num;
-        }
-
-        // Initialize guess and resultRate
-        guess = (guess === undefined) ? 0.1 : guess;
-        var resultRate = guess;
-
-        // Set maximum epsilon for end of iteration
-        var epsMax = 1e-10;
-
-        // Implement Newton's method
-        var newRate, epsRate, resultValue;
-        var contLoop = true;
-        do {
-            resultValue = irrResult(values, dates, resultRate);
-            newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);
-            epsRate = Math.abs(newRate - resultRate);
-            resultRate = newRate;
-            contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);
-        } while (contLoop);
-
-        // Return internal rate of return
-        return resultRate;
-    };
-
-    exports.ISPMT = function(rate, period, periods, value) {
-        rate = utils.parseNumber(rate);
-        period = utils.parseNumber(period);
-        periods = utils.parseNumber(periods);
-        value = utils.parseNumber(value);
-        if (utils.anyIsError(rate, period, periods, value)) {
-            return error.value;
-        }
-
-        // Return interest
-        return value * rate * (period / periods - 1);
-    };
-
-    exports.MDURATION = null;
-
-    exports.MIRR = function(values, finance_rate, reinvest_rate) {
-        values = utils.parseNumberArray(utils.flatten(values));
-        finance_rate = utils.parseNumber(finance_rate);
-        reinvest_rate = utils.parseNumber(reinvest_rate);
-        if (utils.anyIsError(values, finance_rate, reinvest_rate)) {
-            return error.value;
-        }
-
-        // Initialize number of values
-        var n = values.length;
-
-        // Lookup payments (negative values) and incomes (positive values)
-        var payments = [];
-        var incomes = [];
-        for (var i = 0; i < n; i++) {
-            if (values[i] < 0) {
-                payments.push(values[i]);
-            } else {
-                incomes.push(values[i]);
-            }
-        }
-
-        // Return modified internal rate of return
-        var num = -exports.NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1);
-        var den = exports.NPV(finance_rate, payments) * (1 + finance_rate);
-        return Math.pow(num / den, 1 / (n - 1)) - 1;
-    };
-
-    exports.NOMINAL = function(rate, periods) {
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        if (utils.anyIsError(rate, periods)) {
-            return error.value;
-        }
-
-        // Return error if rate <=0 or periods < 1
-        if (rate <= 0 || periods < 1) {
-            return error.num;
-        }
-
-        // Truncate periods if it is not an integer
-        periods = parseInt(periods, 10);
-
-        // Return nominal annual interest rate
-        return (Math.pow(rate + 1, 1 / periods) - 1) * periods;
-    };
-
-    exports.NPER = function(rate, payment, present, future, type) {
-        type = (type === undefined) ? 0 : type;
-        future = (future === undefined) ? 0 : future;
-
-        rate = utils.parseNumber(rate);
-        payment = utils.parseNumber(payment);
-        present = utils.parseNumber(present);
-        future = utils.parseNumber(future);
-        type = utils.parseNumber(type);
-        if (utils.anyIsError(rate, payment, present, future, type)) {
-            return error.value;
-        }
-
-        // Return number of periods
-        var num = payment * (1 + rate * type) - future * rate;
-        var den = (present * rate + payment * (1 + rate * type));
-        return Math.log(num / den) / Math.log(1 + rate);
-    };
-
-    exports.NPV = function() {
-        var args = utils.parseNumberArray(utils.flatten(arguments));
-        if (args instanceof Error) {
-            return args;
-        }
-
-        // Lookup rate
-        var rate = args[0];
-
-        // Initialize net present value
-        var value = 0;
-
-        // Loop on all values
-        for (var j = 1; j < args.length; j++) {
-            value += args[j] / Math.pow(1 + rate, j);
-        }
-
-        // Return net present value
-        return value;
-    };
-
-    exports.ODDFPRICE = null;
-
-    exports.ODDFYIELD = null;
-
-    exports.ODDLPRICE = null;
-
-    exports.ODDLYIELD = null;
-
-    exports.PDURATION = function(rate, present, future) {
-        rate = utils.parseNumber(rate);
-        present = utils.parseNumber(present);
-        future = utils.parseNumber(future);
-        if (utils.anyIsError(rate, present, future)) {
-            return error.value;
-        }
-
-        // Return error if rate <=0
-        if (rate <= 0) {
-            return error.num;
-        }
-
-        // Return number of periods
-        return (Math.log(future) - Math.log(present)) / Math.log(1 + rate);
-    };
-
-    exports.PMT = function(rate, periods, present, future, type) {
-        // Credits: algorithm inspired by Apache OpenOffice
-
-        future = future || 0;
-        type = type || 0;
-
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        present = utils.parseNumber(present);
-        future = utils.parseNumber(future);
-        type = utils.parseNumber(type);
-        if (utils.anyIsError(rate, periods, present, future, type)) {
-            return error.value;
-        }
-
-        // Return payment
-        var result;
-        if (rate === 0) {
-            result = (present + future) / periods;
-        } else {
-            var term = Math.pow(1 + rate, periods);
-            if (type === 1) {
-                result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate);
-            } else {
-                result = future * rate / (term - 1) + present * rate / (1 - 1 / term);
-            }
-        }
-        return -result;
-    };
-
-    exports.PPMT = function(rate, period, periods, present, future, type) {
-        future = future || 0;
-        type = type || 0;
-
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        present = utils.parseNumber(present);
-        future = utils.parseNumber(future);
-        type = utils.parseNumber(type);
-        if (utils.anyIsError(rate, periods, present, future, type)) {
-            return error.value;
-        }
-
-        return exports.PMT(rate, periods, present, future, type) - exports.IPMT(rate, period, periods, present, future, type);
-    };
-
-    exports.PRICE = null;
-
-    exports.PRICEDISC = null;
-
-    exports.PRICEMAT = null;
-
-    exports.PV = function(rate, periods, payment, future, type) {
-        future = future || 0;
-        type = type || 0;
-
-        rate = utils.parseNumber(rate);
-        periods = utils.parseNumber(periods);
-        payment = utils.parseNumber(payment);
-        future = utils.parseNumber(future);
-        type = utils.parseNumber(type);
-        if (utils.anyIsError(rate, periods, payment, future, type)) {
-            return error.value;
-        }
-
-        // Return present value
-        if (rate === 0) {
-            return -payment * periods - future;
-        } else {
-            return (((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 + rate * type) - future) / Math.pow(1 + rate, periods);
-        }
-    };
-
-    exports.RATE = function(periods, payment, present, future, type, guess) {
-        // Credits: rabugento
-
-        guess = (guess === undefined) ? 0.01 : guess;
-        future = (future === undefined) ? 0 : future;
-        type = (type === undefined) ? 0 : type;
-
-        periods = utils.parseNumber(periods);
-        payment = utils.parseNumber(payment);
-        present = utils.parseNumber(present);
-        future = utils.parseNumber(future);
-        type = utils.parseNumber(type);
-        guess = utils.parseNumber(guess);
-        if (utils.anyIsError(periods, payment, present, future, type, guess)) {
-            return error.value;
-        }
-
-        // Set maximum epsilon for end of iteration
-        var epsMax = 1e-6;
-
-        // Set maximum number of iterations
-        var iterMax = 100;
-        var iter = 0;
-        var close = false;
-        var rate = guess;
-
-        while (iter < iterMax && !close) {
-            var t1 = Math.pow(rate + 1, periods);
-            var t2 = Math.pow(rate + 1, periods - 1);
-
-            var f1 = future + t1 * present + payment * (t1 - 1) * (rate * type + 1) / rate;
-            var f2 = periods * t2 * present - payment * (t1 - 1) *(rate * type + 1) / Math.pow(rate,2);
-            var f3 = periods * payment * t2 * (rate * type + 1) / rate + payment * (t1 - 1) * type / rate;
-
-            var newRate = rate - f1 / (f2 + f3);
-
-            if (Math.abs(newRate - rate) < epsMax) close = true;
-            iter++
-            rate = newRate;
-        }
-
-        if (!close) return Number.NaN + rate;
-        return rate;
-    };
-
-    // TODO
-    exports.RECEIVED = null;
-
-    exports.RRI = function(periods, present, future) {
-        periods = utils.parseNumber(periods);
-        present = utils.parseNumber(present);
-        future = utils.parseNumber(future);
-        if (utils.anyIsError(periods, present, future)) {
-            return error.value;
-        }
-
-        // Return error if periods or present is equal to 0 (zero)
-        if (periods === 0 || present === 0) {
-            return error.num;
-        }
-
-        // Return equivalent interest rate
-        return Math.pow(future / present, 1 / periods) - 1;
-    };
-
-    exports.SLN = function(cost, salvage, life) {
-        cost = utils.parseNumber(cost);
-        salvage = utils.parseNumber(salvage);
-        life = utils.parseNumber(life);
-        if (utils.anyIsError(cost, salvage, life)) {
-            return error.value;
-        }
-
-        // Return error if life equal to 0 (zero)
-        if (life === 0) {
-            return error.num;
-        }
-
-        // Return straight-line depreciation
-        return (cost - salvage) / life;
-    };
-
-    exports.SYD = function(cost, salvage, life, period) {
-        // Return error if any of the parameters is not a number
-        cost = utils.parseNumber(cost);
-        salvage = utils.parseNumber(salvage);
-        life = utils.parseNumber(life);
-        period = utils.parseNumber(period);
-        if (utils.anyIsError(cost, salvage, life, period)) {
-            return error.value;
-        }
-
-        // Return error if life equal to 0 (zero)
-        if (life === 0) {
-            return error.num;
-        }
-
-        // Return error if period is lower than 1 or greater than life
-        if (period < 1 || period > life) {
-            return error.num;
-        }
-
-        // Truncate period if it is not an integer
-        period = parseInt(period, 10);
-
-        // Return straight-line depreciation
-        return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1));
-    };
-
-    exports.TBILLEQ = function(settlement, maturity, discount) {
-        settlement = utils.parseDate(settlement);
-        maturity = utils.parseDate(maturity);
-        discount = utils.parseNumber(discount);
-        if (utils.anyIsError(settlement, maturity, discount)) {
-            return error.value;
-        }
-
-        // Return error if discount is lower than or equal to zero
-        if (discount <= 0) {
-            return error.num;
-        }
-
-        // Return error if settlement is greater than maturity
-        if (settlement > maturity) {
-            return error.num;
-        }
-
-        // Return error if maturity is more than one year after settlement
-        if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {
-            return error.num;
-        }
-
-        // Return bond-equivalent yield
-        return (365 * discount) / (360 - discount * DAYS360(settlement, maturity, false));
-    };
-
-    exports.TBILLPRICE = function(settlement, maturity, discount) {
-        settlement = utils.parseDate(settlement);
-        maturity = utils.parseDate(maturity);
-        discount = utils.parseNumber(discount);
-        if (utils.anyIsError(settlement, maturity, discount)) {
-            return error.value;
-        }
-
-        // Return error if discount is lower than or equal to zero
-        if (discount <= 0) {
-            return error.num;
-        }
-
-        // Return error if settlement is greater than maturity
-        if (settlement > maturity) {
-            return error.num;
-        }
-
-        // Return error if maturity is more than one year after settlement
-        if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {
-            return error.num;
-        }
-
-        // Return bond-equivalent yield
-        return 100 * (1 - discount * DAYS360(settlement, maturity, false) / 360);
-    };
-
-    exports.TBILLYIELD = function(settlement, maturity, price) {
-        settlement = utils.parseDate(settlement);
-        maturity = utils.parseDate(maturity);
-        price = utils.parseNumber(price);
-        if (utils.anyIsError(settlement, maturity, price)) {
-            return error.value;
-        }
-
-        // Return error if price is lower than or equal to zero
-        if (price <= 0) {
-            return error.num;
-        }
-
-        // Return error if settlement is greater than maturity
-        if (settlement > maturity) {
-            return error.num;
-        }
-
-        // Return error if maturity is more than one year after settlement
-        if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {
-            return error.num;
-        }
-
-        // Return bond-equivalent yield
-        return (100 - price) * 360 / (price * DAYS360(settlement, maturity, false));
-    };
-
-    exports.VDB = null;
-
-    exports.XIRR = function(values, dates, guess) {
-        // Credits: algorithm inspired by Apache OpenOffice
-
-        values = utils.parseNumberArray(utils.flatten(values));
-        dates = utils.parseDateArray(utils.flatten(dates));
-        guess = utils.parseNumber(guess);
-        if (utils.anyIsError(values, dates, guess)) {
-            return error.value;
-        }
-
-        // Calculates the resulting amount
-        var irrResult = function(values, dates, rate) {
-            var r = rate + 1;
-            var result = values[0];
-            for (var i = 1; i < values.length; i++) {
-                result += values[i] / Math.pow(r, DAYS(dates[i], dates[0]) / 365);
-            }
-            return result;
-        };
-
-        // Calculates the first derivation
-        var irrResultDeriv = function(values, dates, rate) {
-            var r = rate + 1;
-            var result = 0;
-            for (var i = 1; i < values.length; i++) {
-                var frac = DAYS(dates[i], dates[0]) / 365;
-                result -= frac * values[i] / Math.pow(r, frac + 1);
-            }
-            return result;
-        };
-
-        // Check that values contains at least one positive value and one
-            // negative value
-        var positive = false;
-        var negative = false;
-        for (var i = 0; i < values.length; i++) {
-            if (values[i] > 0) {
-                positive = true;
-            }
-            if (values[i] < 0) {
-                negative = true;
-            }
-        }
-
-        // Return error if values does not contain at least one positive value
-            // and one negative value
-        if (!positive || !negative) {
-            return error.num;
-        }
-
-        // Initialize guess and resultRate
-        guess = guess || 0.1;
-        var resultRate = guess;
-
-        // Set maximum epsilon for end of iteration
-        var epsMax = 1e-10;
-
-        // Implement Newton's method
-        var newRate, epsRate, resultValue;
-        var contLoop = true;
-        do {
-            resultValue = irrResult(values, dates, resultRate);
-            newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);
-            epsRate = Math.abs(newRate - resultRate);
-            resultRate = newRate;
-            contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);
-        } while (contLoop);
-
-        // Return internal rate of return
-        return resultRate;
-    };
-
-    exports.XNPV = function(rate, values, dates) {
-        rate = utils.parseNumber(rate);
-        values = utils.parseNumberArray(utils.flatten(values));
-        dates = utils.parseDateArray(utils.flatten(dates));
-        if (utils.anyIsError(rate, values, dates)) {
-            return error.value;
-        }
-
-        var result = 0;
-        for (var i = 0; i < values.length; i++) {
-            result += values[i] / Math.pow(1 + rate, DAYS(dates[i], dates[0]) / 365);
-        }
-        return result;
-    };
-
-    exports.YIELD = null;
-
-    exports.YIELDDISC = null;
-
-    exports.YIELDMAT = null;
-
-    return exports;
-})();
-
-jexcel.methods.information = (function() {
-    var exports = {};
-    exports.CELL = null;
-
-    exports.ERROR = {};
-    exports.ERROR.TYPE = function(error_val) {
-        switch (error_val) {
-            case error.nil: return 1;
-            case error.div0: return 2;
-            case error.value: return 3;
-            case error.ref: return 4;
-            case error.name: return 5;
-            case error.num: return 6;
-            case error.na: return 7;
-            case error.data: return 8;
-        }
-        return error.na;
-    };
-
-    exports.INFO = null;
-
-    exports.ISBLANK = function(value) {
-        return value === null;
-    };
-
-    exports.ISBINARY = function (number) {
-        return (/^[01]{1,10}$/).test(number);
-    };
-
-    exports.ISERR = function(value) {
-        return ([error.value, error.ref, error.div0, error.num, error.name, error.nil]).indexOf(value) >= 0 ||
-            (typeof value === 'number' && (isNaN(value) || !isFinite(value)));
-    };
-
-    exports.ISERROR = function(value) {
-        return exports.ISERR(value) || value === error.na;
-    };
-
-    exports.ISEVEN = function(number) {
-        return (Math.floor(Math.abs(number)) & 1) ? false : true;
-    };
-
-    // TODO
-    exports.ISFORMULA = null;
-
-    exports.ISLOGICAL = function(value) {
-        return value === true || value === false;
-    };
-
-    exports.ISNA = function(value) {
-        return value === error.na;
-    };
-
-    exports.ISNONTEXT = function(value) {
-        return typeof(value) !== 'string';
-    };
-
-    exports.ISNUMBER = function(value) {
-        return typeof(value) === 'number' && !isNaN(value) && isFinite(value);
-    };
-
-    exports.ISODD = function(number) {
-        return (Math.floor(Math.abs(number)) & 1) ? true : false;
-    };
-
-    exports.ISREF = null;
-
-    exports.ISTEXT = function(value) {
-        return typeof(value) === 'string';
-    };
-
-    exports.N = function(value) {
-        if (this.ISNUMBER(value)) {
-            return value;
-        }
-        if (value instanceof Date) {
-            return value.getTime();
-        }
-        if (value === true) {
-            return 1;
-        }
-        if (value === false) {
-            return 0;
-        }
-        if (this.ISERROR(value)) {
-            return value;
-        }
-        return 0;
-    };
-
-    exports.NA = function() {
-        return error.na;
-    };
-
-    exports.SHEET = null;
-
-    exports.SHEETS = null;
-
-    exports.TYPE = function(value) {
-        if (this.ISNUMBER(value)) {
-            return 1;
-        }
-        if (this.ISTEXT(value)) {
-            return 2;
-        }
-        if (this.ISLOGICAL(value)) {
-            return 4;
-        }
-        if (this.ISERROR(value)) {
-            return 16;
-        }
-        if (Array.isArray(value)) {
-            return 64;
-        }
-    };
-
-    return exports;
-})();
-
-jexcel.methods.logical = (function() {
-    var exports = {};
-
-    exports.AND = function() {
-        var args = utils.flatten(arguments);
-        var result = true;
-        for (var i = 0; i < args.length; i++) {
-            if (!args[i]) {
-                result = false;
-            }
-        }
-        return result;
-    };
-
-    exports.CHOOSE = function() {
-        if (arguments.length < 2) {
-            return error.na;
-        }
-
-        var index = arguments[0];
-        if (index < 1 || index > 254) {
-            return error.value;
-        }
-
-        if (arguments.length < index + 1) {
-            return error.value;
-        }
-
-        return arguments[index];
-    };
-
-    exports.FALSE = function() {
-        return false;
-    };
-
-    exports.IF = function(test, then_value, otherwise_value) {
-        return test ? then_value : otherwise_value;
-    };
-
-    exports.IFERROR = function(value, valueIfError) {
-        if (ISERROR(value)) {
-            return valueIfError;
-        }
-        return value;
-    };
-
-    exports.IFNA = function(value, value_if_na) {
-        return value === error.na ? value_if_na : value;
-    };
-
-    exports.NOT = function(logical) {
-        return !logical;
-    };
-
-    exports.OR = function() {
-        var args = utils.flatten(arguments);
-        var result = false;
-        for (var i = 0; i < args.length; i++) {
-            if (args[i]) {
-                result = true;
-            }
-        }
-        return result;
-    };
-
-    exports.TRUE = function() {
-        return true;
-    };
-
-    exports.XOR = function() {
-        var args = utils.flatten(arguments);
-        var result = 0;
-        for (var i = 0; i < args.length; i++) {
-            if (args[i]) {
-                result++;
-            }
-        }
-        return (Math.floor(Math.abs(result)) & 1) ? true : false;
-    };
-
-    exports.SWITCH = function() {
-        var result;
-        if (arguments.length > 0)  {
-            var targetValue = arguments[0];
-            var argc = arguments.length - 1;
-            var switchCount = Math.floor(argc / 2);
-            var switchSatisfied = false;
-            var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1];
-
-            if (switchCount) {
-                for (var index = 0; index < switchCount; index++) {
-                    if (targetValue === arguments[index * 2 + 1]) {
-                      result = arguments[index * 2 + 2];
-                      switchSatisfied = true;
-                      break;
-                    }
-                }
-            }
-
-            if (!switchSatisfied && defaultClause) {
-                result = defaultClause;
-            }
-        }
-
-        return result;
-    };
-
-    return exports;
-})();
-
-jexcel.methods.math = (function() {
-    var exports = {};
-
-    exports.ABS = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.abs(utils.parseNumber(number));
-    };
-
-    exports.ACOS = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.acos(number);
-    };
-
-    exports.ACOSH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.log(number + Math.sqrt(number * number - 1));
-    };
-
-    exports.ACOT = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.atan(1 / number);
-    };
-
-    exports.ACOTH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return 0.5 * Math.log((number + 1) / (number - 1));
-    };
-
-    exports.AGGREGATE = null
-
-    exports.ARABIC = function(text) {
-        // Credits: Rafa? Kukawski
-        if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {
-            return error.value;
-        }
-        var r = 0;
-        text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) {
-            r += {
-                M: 1000,
-                CM: 900,
-                D: 500,
-                CD: 400,
-                C: 100,
-                XC: 90,
-                L: 50,
-                XL: 40,
-                X: 10,
-                IX: 9,
-                V: 5,
-                IV: 4,
-                I: 1
-            }[i];
-        });
-        return r;
-    };
-
-    exports.ASIN = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.asin(number);
-    };
-
-    exports.ASINH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.log(number + Math.sqrt(number * number + 1));
-    };
-
-    exports.ATAN = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.atan(number);
-    };
-
-    exports.ATAN2 = function(number_x, number_y) {
-        number_x = utils.parseNumber(number_x);
-        number_y = utils.parseNumber(number_y);
-        if (utils.anyIsError(number_x, number_y)) {
-            return error.value;
-        }
-        return Math.atan2(number_x, number_y);
-    };
-
-    exports.ATANH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.log((1 + number) / (1 - number)) / 2;
-    };
-
-    exports.BASE = function(number, radix, min_length) {
-        min_length = min_length || 0;
-
-        number = utils.parseNumber(number);
-        radix = utils.parseNumber(radix);
-        min_length = utils.parseNumber(min_length);
-        if (utils.anyIsError(number, radix, min_length)) {
-            return error.value;
-        }
-        min_length = (min_length === undefined) ? 0 : min_length;
-        var result = number.toString(radix);
-        return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result;
-    };
-
-    exports.CEILING = function(number, significance, mode) {
-        significance = (significance === undefined) ? 1 : significance;
-        mode = (mode === undefined) ? 0 : mode;
-
-        number = utils.parseNumber(number);
-        significance = utils.parseNumber(significance);
-        mode = utils.parseNumber(mode);
-        if (utils.anyIsError(number, significance, mode)) {
-            return error.value;
-        }
-        if (significance === 0) {
-            return 0;
-        }
-
-        significance = Math.abs(significance);
-        if (number >= 0) {
-            return Math.ceil(number / significance) * significance;
-        } else {
-            if (mode === 0) {
-                return -1 * Math.floor(Math.abs(number) / significance) * significance;
-            } else {
-                return -1 * Math.ceil(Math.abs(number) / significance) * significance;
-            }
-        }
-    };
-
-    exports.CEILING.MATH = exports.CEILING;
-
-    exports.CEILING.PRECISE = exports.CEILING;
-
-    exports.COMBIN = function(number, number_chosen) {
-        number = utils.parseNumber(number);
-        number_chosen = utils.parseNumber(number_chosen);
-        if (utils.anyIsError(number, number_chosen)) {
-            return error.value;
-        }
-        return exports.FACT(number) / (exports.FACT(number_chosen) * exports.FACT(number - number_chosen));
-    };
-
-    exports.COMBINA = function(number, number_chosen) {
-        number = utils.parseNumber(number);
-        number_chosen = utils.parseNumber(number_chosen);
-        if (utils.anyIsError(number, number_chosen)) {
-            return error.value;
-        }
-        return (number === 0 && number_chosen === 0) ? 1 : exports.COMBIN(number + number_chosen - 1, number - 1);
-    };
-
-    exports.COS = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.cos(number);
-    };
-
-    exports.COSH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return (Math.exp(number) + Math.exp(-number)) / 2;
-    };
-
-    exports.COT = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return 1 / Math.tan(number);
-    };
-
-    exports.COTH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        var e2 = Math.exp(2 * number);
-        return (e2 + 1) / (e2 - 1);
-    };
-
-    exports.CSC = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return 1 / Math.sin(number);
-    };
-
-    exports.CSCH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return 2 / (Math.exp(number) - Math.exp(-number));
-    };
-
-    exports.DECIMAL = function(number, radix) {
-        if (arguments.length < 1) {
-            return error.value;
-        }
-
-
-        return parseInt(number, radix);
-    };
-
-    exports.DEGREES = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return number * 180 / Math.PI;
-    };
-
-    exports.EVEN = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return exports.CEILING(number, -2, -1);
-    };
-
-    exports.EXP = Math.exp;
-
-    var MEMOIZED_FACT = [];
-    exports.FACT = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        var n = Math.floor(number);
-        if (n === 0 || n === 1) {
-            return 1;
-        } else if (MEMOIZED_FACT[n] > 0) {
-            return MEMOIZED_FACT[n];
-        } else {
-            MEMOIZED_FACT[n] = exports.FACT(n - 1) * n;
-            return MEMOIZED_FACT[n];
-        }
-    };
-
-    exports.FACTDOUBLE = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        var n = Math.floor(number);
-        if (n <= 0) {
-            return 1;
-        } else {
-            return n * exports.FACTDOUBLE(n - 2);
-        }
-    };
-
-    exports.FLOOR = function(number, significance, mode) {
-        significance = (significance === undefined) ? 1 : significance;
-        mode = (mode === undefined) ? 0 : mode;
-
-        number = utils.parseNumber(number);
-        significance = utils.parseNumber(significance);
-        mode = utils.parseNumber(mode);
-        if (utils.anyIsError(number, significance, mode)) {
-            return error.value;
-        }
-        if (significance === 0) {
-            return 0;
-        }
-
-        significance = Math.abs(significance);
-        if (number >= 0) {
-            return Math.floor(number / significance) * significance;
-        } else {
-            if (mode === 0) {
-                return -1 * Math.ceil(Math.abs(number) / significance) * significance;
-            } else {
-                return -1 * Math.floor(Math.abs(number) / significance) * significance;
-            }
-        }
-    };
-
-    exports.FLOOR.MATH = exports.FLOOR;
-
-    exports.GCD = null;
-
-    exports.INT = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.floor(number);
-    };
-
-    exports.LCM = function() {
-        // Credits: Jonas Raoni Soares Silva
-        var o = utils.parseNumberArray(utils.flatten(arguments));
-        if (o instanceof Error) {
-            return o;
-        }
-        for (var i, j, n, d, r = 1;
-            (n = o.pop()) !== undefined;) {
-            while (n > 1) {
-                if (n % 2) {
-                    for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) {
-                      // empty
-                    }
-                    d = (i <= j) ? i : n;
-                } else {
-                    d = 2;
-                }
-                for (n /= d, r *= d, i = o.length; i;
-                    (o[--i] % d) === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) {
-                    // empty
-                }
-            }
-        }
-        return r;
-    };
-
-    exports.LN = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.log(number);
-    };
-
-    exports.LOG = function(number, base) {
-        number = utils.parseNumber(number);
-        base = (base === undefined) ? 10 : utils.parseNumber(base);
-
-        if (utils.anyIsError(number, base)) {
-            return error.value;
-        }
-
-        return Math.log(number) / Math.log(base);
-    };
-
-    exports.LOG10 = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.log(number) / Math.log(10);
-    };
-
-    exports.MDETERM = null;
-
-    exports.MINVERSE = null;
-
-    exports.MMULT = null;
-
-    exports.MOD = function(dividend, divisor) {
-        dividend = utils.parseNumber(dividend);
-        divisor = utils.parseNumber(divisor);
-        if (utils.anyIsError(dividend, divisor)) {
-            return error.value;
-        }
-        if (divisor === 0) {
-            return error.div0;
-        }
-        var modulus = Math.abs(dividend % divisor);
-        return (divisor > 0) ? modulus : -modulus;
-    };
-
-    exports.MROUND = function(number, multiple) {
-        number = utils.parseNumber(number);
-        multiple = utils.parseNumber(multiple);
-        if (utils.anyIsError(number, multiple)) {
-            return error.value;
-        }
-        if (number * multiple < 0) {
-            return error.num;
-        }
-
-        return Math.round(number / multiple) * multiple;
-    };
-
-    exports.MULTINOMIAL = function() {
-        var args = utils.parseNumberArray(utils.flatten(arguments));
-        if (args instanceof Error) {
-            return args;
-        }
-        var sum = 0;
-        var divisor = 1;
-        for (var i = 0; i < args.length; i++) {
-            sum += args[i];
-            divisor *= exports.FACT(args[i]);
-        }
-        return exports.FACT(sum) / divisor;
-    };
-
-    exports.MUNIT = null;
-
-    exports.ODD = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        var temp = Math.ceil(Math.abs(number));
-        temp = (temp & 1) ? temp : temp + 1;
-        return (number > 0) ? temp : -temp;
-    };
-
-    exports.PI = function() {
-        return Math.PI;
-    };
-
-    exports.POWER = function(number, power) {
-        number = utils.parseNumber(number);
-        power = utils.parseNumber(power);
-        if (utils.anyIsError(number, power)) {
-            return error.value;
-        }
-        var result = Math.pow(number, power);
-        if (isNaN(result)) {
-            return error.num;
-        }
-
-        return result;
-    };
-
-    exports.PRODUCT = function() {
-        var args = utils.parseNumberArray(utils.flatten(arguments));
-        if (args instanceof Error) {
-            return args;
-        }
-        var result = 1;
-        for (var i = 0; i < args.length; i++) {
-            result *= args[i];
-        }
-        return result;
-    };
-
-    exports.QUOTIENT = function(numerator, denominator) {
-        numerator = utils.parseNumber(numerator);
-        denominator = utils.parseNumber(denominator);
-        if (utils.anyIsError(numerator, denominator)) {
-            return error.value;
-        }
-        return parseInt(numerator / denominator, 10);
-    };
-
-    exports.RADIANS = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return number * Math.PI / 180;
-    };
-
-    exports.RAND = function() {
-        return Math.random();
-    };
-
-    exports.RANDBETWEEN = function(bottom, top) {
-        bottom = utils.parseNumber(bottom);
-        top = utils.parseNumber(top);
-        if (utils.anyIsError(bottom, top)) {
-            return error.value;
-        }
-        // Creative Commons Attribution 3.0 License
-        // Copyright (c) 2012 eqcode
-        return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1;
-    };
-
-    exports.ROMAN = null;
-
-    exports.ROUND = function(number, digits) {
-        number = utils.parseNumber(number);
-        digits = utils.parseNumber(digits);
-        if (utils.anyIsError(number, digits)) {
-            return error.value;
-        }
-        return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits);
-    };
-
-    exports.ROUNDDOWN = function(number, digits) {
-        number = utils.parseNumber(number);
-        digits = utils.parseNumber(digits);
-        if (utils.anyIsError(number, digits)) {
-            return error.value;
-        }
-        var sign = (number > 0) ? 1 : -1;
-        return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);
-    };
-
-    exports.ROUNDUP = function(number, digits) {
-        number = utils.parseNumber(number);
-        digits = utils.parseNumber(digits);
-        if (utils.anyIsError(number, digits)) {
-            return error.value;
-        }
-        var sign = (number > 0) ? 1 : -1;
-        return sign * (Math.ceil(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);
-    };
-
-    exports.SEC = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return 1 / Math.cos(number);
-    };
-
-    exports.SECH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return 2 / (Math.exp(number) + Math.exp(-number));
-    };
-
-    exports.SERIESSUM = function(x, n, m, coefficients) {
-        x = utils.parseNumber(x);
-        n = utils.parseNumber(n);
-        m = utils.parseNumber(m);
-        coefficients = utils.parseNumberArray(coefficients);
-        if (utils.anyIsError(x, n, m, coefficients)) {
-            return error.value;
-        }
-        var result = coefficients[0] * Math.pow(x, n);
-        for (var i = 1; i < coefficients.length; i++) {
-            result += coefficients[i] * Math.pow(x, n + i * m);
-        }
-        return result;
-    };
-
-    exports.SIGN = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        if (number < 0) {
-            return -1;
-        } else if (number === 0) {
-            return 0;
-        } else {
-            return 1;
-        }
-    };
-
-    exports.SIN = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.sin(number);
-    };
-
-    exports.SINH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return (Math.exp(number) - Math.exp(-number)) / 2;
-    };
-
-    exports.SQRT = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        if (number < 0) {
-            return error.num;
-        }
-        return Math.sqrt(number);
-    };
-
-    exports.SQRTPI = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.sqrt(number * Math.PI);
-    };
-
-    exports.SUBTOTAL = null;
-
-    exports.ADD = function (num1, num2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        num1 = utils.parseNumber(num1);
-        num2 = utils.parseNumber(num2);
-        if (utils.anyIsError(num1, num2)) {
-            return error.value;
-        }
-
-        return num1 + num2;
-    };
-
-    exports.MINUS = function (num1, num2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        num1 = utils.parseNumber(num1);
-        num2 = utils.parseNumber(num2);
-        if (utils.anyIsError(num1, num2)) {
-            return error.value;
-        }
-
-        return num1 - num2;
-    };
-
-    exports.DIVIDE = function (dividend, divisor) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        dividend = utils.parseNumber(dividend);
-        divisor = utils.parseNumber(divisor);
-        if (utils.anyIsError(dividend, divisor)) {
-            return error.value;
-        }
-
-        if (divisor === 0) {
-            return error.div0;
-        }
-
-        return dividend / divisor;
-    };
-
-    exports.MULTIPLY = function (factor1, factor2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        factor1 = utils.parseNumber(factor1);
-        factor2 = utils.parseNumber(factor2);
-        if (utils.anyIsError(factor1, factor2)) {
-            return error.value;
-        }
-
-        return factor1 * factor2;
-    };
-
-    exports.GTE = function (num1, num2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        num1 = utils.parseNumber(num1);
-        num2 = utils.parseNumber(num2);
-        if (utils.anyIsError(num1, num2)) {
-            return error.error;
-        }
-
-        return num1 >= num2;
-    };
-
-    exports.LT = function (num1, num2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        num1 = utils.parseNumber(num1);
-        num2 = utils.parseNumber(num2);
-        if (utils.anyIsError(num1, num2)) {
-            return error.error;
-        }
-
-        return num1 < num2;
-    };
-
-    exports.LTE = function (num1, num2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        num1 = utils.parseNumber(num1);
-        num2 = utils.parseNumber(num2);
-        if (utils.anyIsError(num1, num2)) {
-            return error.error;
-        }
-
-        return num1 <= num2;
-    };
-
-    exports.EQ = function (value1, value2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        return value1 === value2;
-    };
-
-    exports.NE = function (value1, value2) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        return value1 !== value2;
-    };
-
-    exports.POW = function (base, exponent) {
-        if (arguments.length !== 2) {
-            return error.na;
-        }
-
-        base = utils.parseNumber(base);
-        exponent = utils.parseNumber(exponent);
-        if (utils.anyIsError(base, exponent)) {
-            return error.error;
-        }
-
-        return exports.POWER(base, exponent);
-    };
-
-    exports.SUM = function() {
-        var result = 0;
-        var argsKeys = Object.keys(arguments);
-        for (var i = 0; i < argsKeys.length; ++i) {
-            var elt = arguments[argsKeys[i]];
-            if (typeof elt === 'number') {
-                result += elt;
-            } else if (typeof elt === 'string') {
-                var parsed = parseFloat(elt);
-                !isNaN(parsed) && (result += parsed);
-            } else if (Array.isArray(elt)) {
-                result += exports.SUM.apply(null, elt);
-            }
-        }
-        return result;
-    };
-
-    exports.SUMIF = function(range, criteria) {
-        range = utils.parseNumberArray(utils.flatten(range));
-        if (range instanceof Error) {
-            return range;
-        }
-        var result = 0;
-        for (var i = 0; i < range.length; i++) {
-            result += (eval(range[i] + criteria)) ? range[i] : 0; // jshint ignore:line
-        }
-        return result;
-    };
-
-    exports.SUMIFS = function() {
-        var args = utils.argsToArray(arguments);
-        var range = utils.parseNumberArray(utils.flatten(args.shift()));
-        if (range instanceof Error) {
-            return range;
-        }
-        var criteria = args;
-
-        var n_range_elements = range.length;
-        var n_criterias = criteria.length;
-
-        var result = 0;
-        for (var i = 0; i < n_range_elements; i++) {
-            var el = range[i];
-            var condition = '';
-            for (var c = 0; c < n_criterias; c++) {
-                condition += el + criteria[c];
-                if (c !== n_criterias - 1) {
-                    condition += '&&';
-                }
-            }
-            if (eval(condition)) { // jshint ignore:line
-                result += el;
-            }
-        }
-        return result;
-    };
-
-    exports.SUMPRODUCT = null;
-
-    exports.SUMSQ = function() {
-        var numbers = utils.parseNumberArray(utils.flatten(arguments));
-        if (numbers instanceof Error) {
-            return numbers;
-        }
-        var result = 0;
-        var length = numbers.length;
-        for (var i = 0; i < length; i++) {
-            result += (ISNUMBER(numbers[i])) ? numbers[i] * numbers[i] : 0;
-        }
-        return result;
-    };
-
-    exports.SUMX2MY2 = function(array_x, array_y) {
-        array_x = utils.parseNumberArray(utils.flatten(array_x));
-        array_y = utils.parseNumberArray(utils.flatten(array_y));
-        if (utils.anyIsError(array_x, array_y)) {
-            return error.value;
-        }
-        var result = 0;
-        for (var i = 0; i < array_x.length; i++) {
-            result += array_x[i] * array_x[i] - array_y[i] * array_y[i];
-        }
-        return result;
-    };
-
-    exports.SUMX2PY2 = function(array_x, array_y) {
-        array_x = utils.parseNumberArray(utils.flatten(array_x));
-        array_y = utils.parseNumberArray(utils.flatten(array_y));
-        if (utils.anyIsError(array_x, array_y)) {
-            return error.value;
-        }
-        var result = 0;
-        array_x = utils.parseNumberArray(utils.flatten(array_x));
-        array_y = utils.parseNumberArray(utils.flatten(array_y));
-        for (var i = 0; i < array_x.length; i++) {
-            result += array_x[i] * array_x[i] + array_y[i] * array_y[i];
-        }
-        return result;
-    };
-
-    exports.SUMXMY2 = function(array_x, array_y) {
-        array_x = utils.parseNumberArray(utils.flatten(array_x));
-        array_y = utils.parseNumberArray(utils.flatten(array_y));
-        if (utils.anyIsError(array_x, array_y)) {
-            return error.value;
-        }
-        var result = 0;
-        array_x = utils.flatten(array_x);
-        array_y = utils.flatten(array_y);
-        for (var i = 0; i < array_x.length; i++) {
-            result += Math.pow(array_x[i] - array_y[i], 2);
-        }
-        return result;
-    };
-
-    exports.TAN = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return Math.tan(number);
-    };
-
-    exports.TANH = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        var e2 = Math.exp(2 * number);
-        return (e2 - 1) / (e2 + 1);
-    };
-
-    exports.TRUNC = function(number, digits) {
-        digits = (digits === undefined) ? 0 : digits;
-        number = utils.parseNumber(number);
-        digits = utils.parseNumber(digits);
-        if (utils.anyIsError(number, digits)) {
-            return error.value;
-        }
-        var sign = (number > 0) ? 1 : -1;
-        return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);
-    };
-
-    return exports;
-})();
-
-jexcel.methods.misc = (function() {
-    var exports = {};
-
-    exports.UNIQUE = function () {
-        var result = [];
-        for (var i = 0; i < arguments.length; ++i) {
-            var hasElement = false;
-            var element = arguments[i];
-
-            // Check if we've already seen this element.
-            for (var j = 0; j < result.length; ++j) {
-                hasElement = result[j] === element;
-                if (hasElement) { break; }
-            }
-
-            // If we did not find it, add it to the result.
-            if (!hasElement) {
-                result.push(element);
-            }
-        }
-        return result;
-    };
-
-    exports.FLATTEN = utils.flatten;
-
-    exports.ARGS2ARRAY = function () {
-        return Array.prototype.slice.call(arguments, 0);
-    };
-
-    exports.REFERENCE = function (context, reference) {
-        try {
-            var path = reference.split('.');
-            var result = context;
-            for (var i = 0; i < path.length; ++i) {
-                var step = path[i];
-                if (step[step.length - 1] === ']') {
-                    var opening = step.indexOf('[');
-                    var index = step.substring(opening + 1, step.length - 1);
-                    result = result[step.substring(0, opening)][index];
-                } else {
-                    result = result[step];
-                }
-            }
-            return result;
-        } catch (error) {}
-    };
-
-    exports.JOIN = function (array, separator) {
-        return array.join(separator);
-    };
-
-    exports.NUMBERS = function () {
-        var possibleNumbers = utils.flatten(arguments);
-        return possibleNumbers.filter(function (el) {
-            return typeof el === 'number';
-        });
-    };
-
-    exports.NUMERAL = null;
-
-    return exports;
-})();
-
-jexcel.methods.text = (function() {
-    var exports = {};
-
-    exports.ASC = null;
-
-    exports.BAHTTEXT = null;
-
-    exports.CHAR = function(number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return String.fromCharCode(number);
-    };
-
-    exports.CLEAN = function(text) {
-        text = text || '';
-        var re = /[\0-\x1F]/g;
-        return text.replace(re, "");
-    };
-
-    exports.CODE = function(text) {
-        text = text || '';
-        return text.charCodeAt(0);
-    };
-
-    exports.CONCATENATE = function() {
-        var args = utils.flatten(arguments);
-
-        var trueFound = 0;
-        while ((trueFound = args.indexOf(true)) > -1) {
-            args[trueFound] = 'TRUE';
-        }
-
-        var falseFound = 0;
-        while ((falseFound = args.indexOf(false)) > -1) {
-            args[falseFound] = 'FALSE';
-        }
-
-        return args.join('');
-    };
-
-    exports.DBCS = null;
-
-    exports.DOLLAR = null;
-
-    exports.EXACT = function(text1, text2) {
-        return text1 === text2;
-    };
-
-    exports.FIND = function(find_text, within_text, position) {
-        position = (position === undefined) ? 0 : position;
-        return within_text ? within_text.indexOf(find_text, position - 1) + 1 : null;
-    };
-
-    exports.FIXED = null;
-
-    exports.HTML2TEXT = function (value) {
-        var result = '';
-
-        if (value) {
-            if (value instanceof Array) {
-                value.forEach(function (line) {
-                    if (result !== '') {
-                      result += '\n';
-                    }
-                    result += (line.replace(/<(?:.|\n)*?>/gm, ''));
-                });
-            } else {
-                result = value.replace(/<(?:.|\n)*?>/gm, '');
-            }
-        }
-
-        return result;
-    };
-
-    exports.LEFT = function(text, number) {
-        number = (number === undefined) ? 1 : number;
-        number = utils.parseNumber(number);
-        if (number instanceof Error || typeof text !== 'string') {
-            return error.value;
-        }
-        return text ? text.substring(0, number) : null;
-    };
-
-    exports.LEN = function(text) {
-        if (arguments.length === 0) {
-            return error.error;
-        }
-
-        if (typeof text === 'string') {
-            return text ? text.length : 0;
-        }
-
-        if (text.length) {
-            return text.length;
-        }
-
-        return error.value;
-    };
-
-    exports.LOWER = function(text) {
-        if (typeof text !== 'string') {
-            return error.value;
-        }
-        return text ? text.toLowerCase() : text;
-    };
-
-    exports.MID = function(text, start, number) {
-        start = utils.parseNumber(start);
-        number = utils.parseNumber(number);
-        if (utils.anyIsError(start, number) || typeof text !== 'string') {
-            return number;
-        }
-
-        var begin = start - 1;
-        var end = begin + number;
-
-        return text.substring(begin, end);
-    };
-
-    exports.NUMBERVALUE = null;
-
-    exports.PRONETIC = null;
-
-    exports.PROPER = function(text) {
-        if (text === undefined || text.length === 0) {
-            return error.value;
-        }
-        if (text === true) {
-            text = 'TRUE';
-        }
-        if (text === false) {
-            text = 'FALSE';
-        }
-        if (isNaN(text) && typeof text === 'number') {
-            return error.value;
-        }
-        if (typeof text === 'number') {
-            text = '' + text;
-        }
-
-        return text.replace(/\w\S*/g, function(txt) {
-            return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
-        });
-    };
-
-    exports.REGEXEXTRACT = function (text, regular_expression) {
-        var match = text.match(new RegExp(regular_expression));
-        return match ? (match[match.length > 1 ? match.length - 1 : 0]) : null;
-    };
-
-    exports.REGEXMATCH = function (text, regular_expression, full) {
-        var match = text.match(new RegExp(regular_expression));
-        return full ? match : !!match;
-    };
-
-    exports.REGEXREPLACE = function (text, regular_expression, replacement) {
-        return text.replace(new RegExp(regular_expression), replacement);
-    };
-
-    exports.REPLACE = function(text, position, length, new_text) {
-        position = utils.parseNumber(position);
-        length = utils.parseNumber(length);
-        if (utils.anyIsError(position, length) ||
-            typeof text !== 'string' ||
-            typeof new_text !== 'string') {
-            return error.value;
-        }
-        return text.substr(0, position - 1) + new_text + text.substr(position - 1 + length);
-    };
-
-    exports.REPT = function(text, number) {
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return new Array(number + 1).join(text);
-    };
-
-    exports.RIGHT = function(text, number) {
-        number = (number === undefined) ? 1 : number;
-        number = utils.parseNumber(number);
-        if (number instanceof Error) {
-            return number;
-        }
-        return text ? text.substring(text.length - number) : null;
-    };
-
-    exports.SEARCH = function(find_text, within_text, position) {
-        var foundAt;
-        if (typeof find_text !== 'string' || typeof within_text !== 'string') {
-            return error.value;
-        }
-        position = (position === undefined) ? 0 : position;
-        foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), position - 1)+1;
-        return (foundAt === 0)?error.value:foundAt;
-    };
-
-    exports.SPLIT = function (text, separator) {
-        return text.split(separator);
-    };
-
-    exports.SUBSTITUTE = function(text, old_text, new_text, occurrence) {
-        if (!text || !old_text || !new_text) {
-            return text;
-        } else if (occurrence === undefined) {
-            return text.replace(new RegExp(old_text, 'g'), new_text);
-        } else {
-            var index = 0;
-            var i = 0;
-            while (text.indexOf(old_text, index) > 0) {
-                index = text.indexOf(old_text, index + 1);
-                i++;
-                if (i === occurrence) {
-                    return text.substring(0, index) + new_text + text.substring(index + old_text.length);
-                }
-            }
-        }
-    };
-
-    exports.T = function(value) {
-        return (typeof value === "string") ? value : '';
-    };
-
-    exports.TEXT = null;
-
-    exports.TRIM = function(text) {
-        if (typeof text !== 'string') {
-            return error.value;
-        }
-        return text.replace(/ +/g, ' ').trim();
-    };
-
-    exports.UNICHAR = exports.CHAR;
-
-    exports.UNICODE = exports.CODE;
-
-    exports.UPPER = function(text) {
-        if (typeof text !== 'string') {
-            return error.value;
-        }
-        return text.toUpperCase();
-    };
-
-    exports.VALUE = null;
-
-    return exports;
-})();
-
-jexcel.methods.stats = (function() {
-    var exports = {};
-
-    var SQRT2PI = 2.5066282746310002;
-
-    exports.AVEDEV = null;
-
-    exports.AVERAGE = function() {
-        var range = utils.numbers(utils.flatten(arguments));
-        var n = range.length;
-        var sum = 0;
-        var count = 0;
-        for (var i = 0; i < n; i++) {
-            sum += range[i];
-            count += 1;
-        }
-        return sum / count;
-    };
-
-    exports.AVERAGEA = function() {
-        var range = utils.flatten(arguments);
-        var n = range.length;
-        var sum = 0;
-        var count = 0;
-        for (var i = 0; i < n; i++) {
-            var el = range[i];
-            if (typeof el === 'number') {
-                sum += el;
-            }
-            if (el === true) {
-                sum++;
-            }
-            if (el !== null) {
-                count++;
-            }
-        }
-        return sum / count;
-    };
-
-    exports.AVERAGEIF = function(range, criteria, average_range) {
-        average_range = average_range || range;
-        range = utils.flatten(range);
-        average_range = utils.parseNumberArray(utils.flatten(average_range));
-        if (average_range instanceof Error) {
-            return average_range;
-        }
-        var average_count = 0;
-        var result = 0;
-        for (var i = 0; i < range.length; i++) {
-            if (eval(range[i] + criteria)) { // jshint ignore:line
-                result += average_range[i];
-                average_count++;
-            }
-        }
-        return result / average_count;
-    };
-
-    exports.AVERAGEIFS = null;
-
-    exports.COUNT = function() {
-        return utils.numbers(utils.flatten(arguments)).length;
-    };
-
-    exports.COUNTA = function() {
-        var range = utils.flatten(arguments);
-        return range.length - exports.COUNTBLANK(range);
-    };
-
-    exports.COUNTIN = function (range, value) {
-        var result = 0;
-        for (var i = 0; i < range.length; i++) {
-            if (range[i] === value) {
-                result++;
-            }
-        }
-        return result;
-    };
-
-    exports.COUNTBLANK = function() {
-        var range = utils.flatten(arguments);
-        var blanks = 0;
-        var element;
-        for (var i = 0; i < range.length; i++) {
-            element = range[i];
-            if (element === null || element === '') {
-                blanks++;
-            }
-        }
-        return blanks;
-    };
-
-    exports.COUNTIF = function(range, criteria) {
-        range = utils.flatten(range);
-        if (!/[<>=!]/.test(criteria)) {
-            criteria = '=="' + criteria + '"';
-        }
-        var matches = 0;
-        for (var i = 0; i < range.length; i++) {
-            if (typeof range[i] !== 'string') {
-                if (eval(range[i] + criteria)) { // jshint ignore:line
-                    matches++;
-                }
-            } else {
-                if (eval('"' + range[i] + '"' + criteria)) { // jshint ignore:line
-                    matches++;
-                }
-            }
-        }
-        return matches;
-    };
-
-    exports.COUNTIFS = function() {
-        var args = utils.argsToArray(arguments);
-        var results = new Array(utils.flatten(args[0]).length);
-        for (var i = 0; i < results.length; i++) {
-            results[i] = true;
-        }
-        for (i = 0; i < args.length; i += 2) {
-            var range = utils.flatten(args[i]);
-            var criteria = args[i + 1];
-            if (!/[<>=!]/.test(criteria)) {
-                criteria = '=="' + criteria + '"';
-            }
-            for (var j = 0; j < range.length; j++) {
-                if (typeof range[j] !== 'string') {
-                    results[j] = results[j] && eval(range[j] + criteria); // jshint ignore:line
-                } else {
-                    results[j] = results[j] && eval('"' + range[j] + '"' + criteria); // jshint ignore:line
-                }
-            }
-        }
-        var result = 0;
-        for (i = 0; i < results.length; i++) {
-            if (results[i]) {
-                result++;
-            }
-        }
-        return result;
-    };
-
-    exports.COUNTUNIQUE = function () {
-        return UNIQUE.apply(null, utils.flatten(arguments)).length;
-    };
-
-    exports.FISHER = function(x) {
-        x = utils.parseNumber(x);
-        if (x instanceof Error) {
-            return x;
-        }
-        return Math.log((1 + x) / (1 - x)) / 2;
-    };
-
-    exports.FISHERINV = function(y) {
-        y = utils.parseNumber(y);
-        if (y instanceof Error) {
-            return y;
-        }
-        var e2y = Math.exp(2 * y);
-        return (e2y - 1) / (e2y + 1);
-    };
-
-    exports.FREQUENCY = function(data, bins) {
-        data = utils.parseNumberArray(utils.flatten(data));
-        bins = utils.parseNumberArray(utils.flatten(bins));
-        if (utils.anyIsError(data, bins)) {
-            return error.value;
-        }
-        var n = data.length;
-        var b = bins.length;
-        var r = [];
-        for (var i = 0; i <= b; i++) {
-            r[i] = 0;
-            for (var j = 0; j < n; j++) {
-                if (i === 0) {
-                    if (data[j] <= bins[0]) {
-                        r[0] += 1;
-                    }
-                } else if (i < b) {
-                    if (data[j] > bins[i - 1] && data[j] <= bins[i]) {
-                        r[i] += 1;
-                    }
-                } else if (i === b) {
-                    if (data[j] > bins[b - 1]) {
-                        r[b] += 1;
-                    }
-                }
-            }
-        }
-        return r;
-    };
-
-    exports.LARGE = function(range, k) {
-        range = utils.parseNumberArray(utils.flatten(range));
-        k = utils.parseNumber(k);
-        if (utils.anyIsError(range, k)) {
-            return range;
-        }
-        return range.sort(function(a, b) {
-            return b - a;
-        })[k - 1];
-    };
-
-    exports.MAX = function() {
-        var range = utils.numbers(utils.flatten(arguments));
-        return (range.length === 0) ? 0 : Math.max.apply(Math, range);
-    };
-
-    exports.MAXA = function() {
-        var range = utils.arrayValuesToNumbers(utils.flatten(arguments));
-        return (range.length === 0) ? 0 : Math.max.apply(Math, range);
-    };
-
-    exports.MIN = function() {
-        var range = utils.numbers(utils.flatten(arguments));
-        return (range.length === 0) ? 0 : Math.min.apply(Math, range);
-    };
-
-    exports.MINA = function() {
-        var range = utils.arrayValuesToNumbers(utils.flatten(arguments));
-        return (range.length === 0) ? 0 : Math.min.apply(Math, range);
-    };
-
-    exports.MODE = {};
-
-    exports.MODE.MULT = function() {
-        // Credits: Roönaän
-        var range = utils.parseNumberArray(utils.flatten(arguments));
-        if (range instanceof Error) {
-            return range;
-        }
-        var n = range.length;
-        var count = {};
-        var maxItems = [];
-        var max = 0;
-        var currentItem;
-
-        for (var i = 0; i < n; i++) {
-            currentItem = range[i];
-            count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;
-            if (count[currentItem] > max) {
-                max = count[currentItem];
-                maxItems = [];
-            }
-            if (count[currentItem] === max) {
-                maxItems[maxItems.length] = currentItem;
-            }
-        }
-        return maxItems;
-    };
-
-    exports.MODE.SNGL = function() {
-        var range = utils.parseNumberArray(utils.flatten(arguments));
-        if (range instanceof Error) {
-            return range;
-        }
-        return exports.MODE.MULT(range).sort(function(a, b) {
-            return a - b;
-        })[0];
-    };
-
-    exports.PERCENTILE = {};
-
-    exports.PERCENTILE.EXC = function(array, k) {
-        array = utils.parseNumberArray(utils.flatten(array));
-        k = utils.parseNumber(k);
-        if (utils.anyIsError(array, k)) {
-            return error.value;
-        }
-        array = array.sort(function(a, b) {
-            {
-                return a - b;
-            }
-        });
-        var n = array.length;
-        if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) {
-            return error.num;
-        }
-        var l = k * (n + 1) - 1;
-        var fl = Math.floor(l);
-        return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));
-    };
-
-    exports.PERCENTILE.INC = function(array, k) {
-        array = utils.parseNumberArray(utils.flatten(array));
-        k = utils.parseNumber(k);
-        if (utils.anyIsError(array, k)) {
-            return error.value;
-        }
-        array = array.sort(function(a, b) {
-            return a - b;
-        });
-        var n = array.length;
-        var l = k * (n - 1);
-        var fl = Math.floor(l);
-        return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));
-    };
-
-    exports.PERCENTRANK = {};
-
-    exports.PERCENTRANK.EXC = function(array, x, significance) {
-        significance = (significance === undefined) ? 3 : significance;
-        array = utils.parseNumberArray(utils.flatten(array));
-        x = utils.parseNumber(x);
-        significance = utils.parseNumber(significance);
-        if (utils.anyIsError(array, x, significance)) {
-            return error.value;
-        }
-        array = array.sort(function(a, b) {
-            return a - b;
-        });
-        var uniques = UNIQUE.apply(null, array);
-        var n = array.length;
-        var m = uniques.length;
-        var power = Math.pow(10, significance);
-        var result = 0;
-        var match = false;
-        var i = 0;
-        while (!match && i < m) {
-            if (x === uniques[i]) {
-                result = (array.indexOf(uniques[i]) + 1) / (n + 1);
-                match = true;
-            } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {
-                result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1);
-                match = true;
-            }
-            i++;
-        }
-        return Math.floor(result * power) / power;
-    };
-
-    exports.PERCENTRANK.INC = function(array, x, significance) {
-        significance = (significance === undefined) ? 3 : significance;
-        array = utils.parseNumberArray(utils.flatten(array));
-        x = utils.parseNumber(x);
-        significance = utils.parseNumber(significance);
-        if (utils.anyIsError(array, x, significance)) {
-            return error.value;
-        }
-        array = array.sort(function(a, b) {
-            return a - b;
-        });
-        var uniques = UNIQUE.apply(null, array);
-        var n = array.length;
-        var m = uniques.length;
-        var power = Math.pow(10, significance);
-        var result = 0;
-        var match = false;
-        var i = 0;
-        while (!match && i < m) {
-            if (x === uniques[i]) {
-                result = array.indexOf(uniques[i]) / (n - 1);
-                match = true;
-            } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {
-                result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1);
-                match = true;
-            }
-            i++;
-        }
-        return Math.floor(result * power) / power;
-    };
-
-    exports.PERMUT = function(number, number_chosen) {
-        number = utils.parseNumber(number);
-        number_chosen = utils.parseNumber(number_chosen);
-        if (utils.anyIsError(number, number_chosen)) {
-            return error.value;
-        }
-        return FACT(number) / FACT(number - number_chosen);
-    };
-
-    exports.PERMUTATIONA = function(number, number_chosen) {
-        number = utils.parseNumber(number);
-        number_chosen = utils.parseNumber(number_chosen);
-        if (utils.anyIsError(number, number_chosen)) {
-            return error.value;
-        }
-        return Math.pow(number, number_chosen);
-    };
-
-    exports.PHI = function(x) {
-        x = utils.parseNumber(x);
-        if (x instanceof Error) {
-            return error.value;
-        }
-        return Math.exp(-0.5 * x * x) / SQRT2PI;
-    };
-
-    exports.PROB = function(range, probability, lower, upper) {
-        if (lower === undefined) {
-            return 0;
-        }
-        upper = (upper === undefined) ? lower : upper;
-
-        range = utils.parseNumberArray(utils.flatten(range));
-        probability = utils.parseNumberArray(utils.flatten(probability));
-        lower = utils.parseNumber(lower);
-        upper = utils.parseNumber(upper);
-        if (utils.anyIsError(range, probability, lower, upper)) {
-            return error.value;
-        }
-
-        if (lower === upper) {
-            return (range.indexOf(lower) >= 0) ? probability[range.indexOf(lower)] : 0;
-        }
-
-        var sorted = range.sort(function(a, b) {
-            return a - b;
-        });
-        var n = sorted.length;
-        var result = 0;
-        for (var i = 0; i < n; i++) {
-            if (sorted[i] >= lower && sorted[i] <= upper) {
-                result += probability[range.indexOf(sorted[i])];
-            }
-        }
-        return result;
-    };
-
-    exports.QUARTILE = {};
-
-    exports.QUARTILE.EXC = function(range, quart) {
-        range = utils.parseNumberArray(utils.flatten(range));
-        quart = utils.parseNumber(quart);
-        if (utils.anyIsError(range, quart)) {
-            return error.value;
-        }
-        switch (quart) {
-            case 1:
-                return exports.PERCENTILE.EXC(range, 0.25);
-            case 2:
-                return exports.PERCENTILE.EXC(range, 0.5);
-            case 3:
-                return exports.PERCENTILE.EXC(range, 0.75);
-            default:
-                return error.num;
-        }
-    };
-
-    exports.QUARTILE.INC = function(range, quart) {
-        range = utils.parseNumberArray(utils.flatten(range));
-        quart = utils.parseNumber(quart);
-        if (utils.anyIsError(range, quart)) {
-            return error.value;
-        }
-        switch (quart) {
-            case 1:
-                return exports.PERCENTILE.INC(range, 0.25);
-            case 2:
-                return exports.PERCENTILE.INC(range, 0.5);
-            case 3:
-                return exports.PERCENTILE.INC(range, 0.75);
-            default:
-                return error.num;
-        }
-    };
-
-    exports.RANK = {};
-
-    exports.RANK.AVG = function(number, range, order) {
-        number = utils.parseNumber(number);
-        range = utils.parseNumberArray(utils.flatten(range));
-        if (utils.anyIsError(number, range)) {
-            return error.value;
-        }
-        range = utils.flatten(range);
-        order = order || false;
-        var sort = (order) ? function(a, b) {
-            return a - b;
-        } : function(a, b) {
-            return b - a;
-        };
-        range = range.sort(sort);
-
-        var length = range.length;
-        var count = 0;
-        for (var i = 0; i < length; i++) {
-            if (range[i] === number) {
-                count++;
-            }
-        }
-
-        return (count > 1) ? (2 * range.indexOf(number) + count + 1) / 2 : range.indexOf(number) + 1;
-    };
-
-    exports.RANK.EQ = function(number, range, order) {
-        number = utils.parseNumber(number);
-        range = utils.parseNumberArray(utils.flatten(range));
-        if (utils.anyIsError(number, range)) {
-            return error.value;
-        }
-        order = order || false;
-        var sort = (order) ? function(a, b) {
-            return a - b;
-        } : function(a, b) {
-            return b - a;
-        };
-        range = range.sort(sort);
-        return range.indexOf(number) + 1;
-    };
-
-    exports.RSQ = function(data_x, data_y) { // no need to flatten here, PEARSON will take care of that
-        data_x = utils.parseNumberArray(utils.flatten(data_x));
-        data_y = utils.parseNumberArray(utils.flatten(data_y));
-        if (utils.anyIsError(data_x, data_y)) {
-            return error.value;
-        }
-        return Math.pow(exports.PEARSON(data_x, data_y), 2);
-    };
-
-    exports.SMALL = function(range, k) {
-        range = utils.parseNumberArray(utils.flatten(range));
-        k = utils.parseNumber(k);
-        if (utils.anyIsError(range, k)) {
-            return range;
-        }
-        return range.sort(function(a, b) {
-            return a - b;
-        })[k - 1];
-    };
-
-    exports.STANDARDIZE = function(x, mean, sd) {
-        x = utils.parseNumber(x);
-        mean = utils.parseNumber(mean);
-        sd = utils.parseNumber(sd);
-        if (utils.anyIsError(x, mean, sd)) {
-            return error.value;
-        }
-        return (x - mean) / sd;
-    };
-
-    exports.STDEV = {};
-
-    exports.STDEV.P = function() {
-        var v = exports.VAR.P.apply(this, arguments);
-        return Math.sqrt(v);
-    };
-
-    exports.STDEV.S = function() {
-        var v = exports.VAR.S.apply(this, arguments);
-        return Math.sqrt(v);
-    };
-
-    exports.STDEVA = function() {
-        var v = exports.VARA.apply(this, arguments);
-        return Math.sqrt(v);
-    };
-
-    exports.STDEVPA = function() {
-        var v = exports.VARPA.apply(this, arguments);
-        return Math.sqrt(v);
-    };
-
-    exports.VAR = {};
-
-    exports.VAR.P = function() {
-        var range = utils.numbers(utils.flatten(arguments));
-        var n = range.length;
-        var sigma = 0;
-        var mean = exports.AVERAGE(range);
-        for (var i = 0; i < n; i++) {
-            sigma += Math.pow(range[i] - mean, 2);
-        }
-        return sigma / n;
-    };
-
-    exports.VAR.S = function() {
-        var range = utils.numbers(utils.flatten(arguments));
-        var n = range.length;
-        var sigma = 0;
-        var mean = exports.AVERAGE(range);
-        for (var i = 0; i < n; i++) {
-            sigma += Math.pow(range[i] - mean, 2);
-        }
-        return sigma / (n - 1);
-    };
-
-    exports.VARA = function() {
-        var range = utils.flatten(arguments);
-        var n = range.length;
-        var sigma = 0;
-        var count = 0;
-        var mean = exports.AVERAGEA(range);
-        for (var i = 0; i < n; i++) {
-            var el = range[i];
-            if (typeof el === 'number') {
-                sigma += Math.pow(el - mean, 2);
-            } else if (el === true) {
-                sigma += Math.pow(1 - mean, 2);
-            } else {
-                sigma += Math.pow(0 - mean, 2);
-            }
-
-            if (el !== null) {
-                count++;
-            }
-        }
-        return sigma / (count - 1);
-    };
-
-    exports.VARPA = function() {
-        var range = utils.flatten(arguments);
-        var n = range.length;
-        var sigma = 0;
-        var count = 0;
-        var mean = exports.AVERAGEA(range);
-        for (var i = 0; i < n; i++) {
-            var el = range[i];
-            if (typeof el === 'number') {
-                sigma += Math.pow(el - mean, 2);
-            } else if (el === true) {
-                sigma += Math.pow(1 - mean, 2);
-            } else {
-                sigma += Math.pow(0 - mean, 2);
-            }
-
-            if (el !== null) {
-                count++;
-            }
-        }
-        return sigma / count;
-    };
-
-    exports.WEIBULL = {};
-
-    exports.WEIBULL.DIST = function(x, alpha, beta, cumulative) {
-        x = utils.parseNumber(x);
-        alpha = utils.parseNumber(alpha);
-        beta = utils.parseNumber(beta);
-        if (utils.anyIsError(x, alpha, beta)) {
-            return error.value;
-        }
-        return (cumulative) ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);
-    };
-
-    exports.Z = {};
-
-    exports.Z.TEST = function(range, x, sd) {
-        range = utils.parseNumberArray(utils.flatten(range));
-        x = utils.parseNumber(x);
-        if (utils.anyIsError(range, x)) {
-            return error.value;
-        }
-
-        sd = sd || exports.STDEV.S(range);
-        var n = range.length;
-        return 1 - exports.NORM.S.DIST((exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), true);
-    };
-
-    return exports;
-})();
-
-for (var i = 0; i < Object.keys(jexcel.methods).length; i++) {
-    var methods = jexcel.methods[Object.keys(jexcel.methods)[i]];
-    for (var j = 0; j < Object.keys(methods).length; j++) {
-        if (typeof(methods[Object.keys(methods)[j]]) == 'function') {
-            window[Object.keys(methods)[j]] = methods[Object.keys(methods)[j]];
-        } else {
-            window[Object.keys(methods)[j]] = function() {
-                return Object.keys(methods)[j] + 'Not implemented';
-            }
-        }
-    }
-}
-
-if (typeof exports === 'object' && typeof module !== 'undefined') {
-    module.exports = jexcel;
-}
+/**
+ * (c) jExcel v3.6.1
+ * 
+ * Author: Paul Hodel <paul.hodel@gmail.com>
+ * Website: https://bossanova.uk/jexcel/
+ * Description: Create amazing web based spreadsheets.
+ * 
+ * This software is distribute under MIT License
+ * 
+ * ROADMAP:
+ * Frozen columns
+ * Meta information
+ */
+
+'use strict';
+
+if (! jSuites && typeof(require) === 'function') {
+    var jSuites = require('jsuites');
+    require('jsuites/dist/jsuites.css');
+}
+
+var jexcel = (function(el, options) {
+    // Create jexcel object
+    var obj = {};
+    obj.options = {};
+
+    // Loading default configuration
+    var defaults = {
+        // External data
+        url:null,
+        // Data
+        data:null,
+        // Copy behavior
+        copyCompatibility:false,
+        // Rows and columns definitions
+        rows:[],
+        columns:[],
+        // Deprected legacy options
+        colHeaders:[],
+        colWidths:[],
+        colAlignments:[],
+        nestedHeaders:null,
+        // Column width that is used by default
+        defaultColWidth:50,
+        defaultColAlign:'center',
+        // Spare rows and columns
+        minSpareRows:0,
+        minSpareCols:0,
+        // Minimal table dimensions
+        minDimensions:[0,0],
+        // Allow Export
+        allowExport:true,
+        // Allow column sorting
+        columnSorting:true,
+        // Allow column dragging
+        columnDrag:false,
+        // Allow column resizing
+        columnResize:true,
+        // Allow row resizing
+        rowResize:false,
+        // Allow row dragging
+        rowDrag:true,
+        // Allow table edition
+        editable:true,
+        // Allow new rows
+        allowInsertRow:true,
+        // Allow new rows
+        allowManualInsertRow:true,
+        // Allow new columns
+        allowInsertColumn:true,
+        // Allow new rows
+        allowManualInsertColumn:true,
+        // Allow row delete
+        allowDeleteRow:true,
+        // Allow deleting of all rows
+        allowDeletingAllRows:false,
+        // Allow column delete
+        allowDeleteColumn:true,
+        // Allow rename column
+        allowRenameColumn:true,
+        // Allow comments
+        allowComments:false,
+        // Global wrap
+        wordWrap:false,
+        // Image options
+        imageOptions: null,
+        // CSV source
+        csv:null,
+        // Filename
+        csvFileName:'jexcel',
+        // Consider first line as header
+        csvHeaders:true,
+        // Delimiters
+        csvDelimiter:',',
+        // Disable corner selection
+        selectionCopy:true,
+        // Merged cells
+        mergeCells:{},
+        // Create toolbar
+        toolbar:null,
+        // Allow search
+        search:false,
+        // Create pagination
+        pagination:false,
+        paginationOptions:null,
+        // Full screen
+        fullscreen:false,
+        // Lazy loading
+        lazyLoading:false,
+        loadingSpin:false,
+        // Table overflow
+        tableOverflow:false,
+        tableHeight:'300px',
+        tableWidth:null,
+        // Meta
+        meta: null,
+        // Style
+        style:null,
+        // Execute formulas
+        parseFormulas:true,
+        autoIncrement:true,
+        // Event handles
+        onundo:null,
+        onredo:null,
+        onload:null,
+        onchange:null,
+        onbeforechange:null,
+        onafterchanges:null,
+        onbeforeinsertrow: null,
+        oninsertrow:null,
+        onbeforeinsertcolumn: null,
+        oninsertcolumn:null,
+        onbeforedeleterow:null,
+        ondeleterow:null,
+        onbeforedeletecolumn:null,
+        ondeletecolumn:null,
+        onmoverow:null,
+        onmovecolumn:null,
+        onresizerow:null,
+        onresizecolumn:null,
+        onsort:null,
+        onselection:null,
+        onpaste:null,
+        onbeforepaste:null,
+        onmerge:null,
+        onfocus:null,
+        onblur:null,
+        onchangeheader:null,
+        oneditionstart:null,
+        oneditionend:null,
+        onchangestyle:null,
+        onchangemeta:null,
+        // Customize any cell behavior
+        updateTable:null,
+        // Texts
+        text:{
+            noRecordsFound: 'No records found',
+            showingPage: 'Showing page {0} of {1} entries',
+            show: 'Show ',
+            search: 'Search',
+            entries: ' entries',
+            columnName: 'Column name',
+            insertANewColumnBefore: 'Insert a new column before',
+            insertANewColumnAfter: 'Insert a new column after',
+            deleteSelectedColumns: 'Delete selected columns',
+            renameThisColumn: 'Rename this column',
+            orderAscending: 'Order ascending',
+            orderDescending: 'Order descending',
+            insertANewRowBefore: 'Insert a new row before',
+            insertANewRowAfter: 'Insert a new row after',
+            deleteSelectedRows: 'Delete selected rows',
+            editComments: 'Edit comments',
+            addComments: 'Add comments',
+            comments: 'Comments',
+            clearComments: 'Clear comments',
+            copy: 'Copy...',
+            paste: 'Paste...',
+            saveAs: 'Save as...',
+            about: 'About',
+            areYouSureToDeleteTheSelectedRows: 'Are you sure to delete the selected rows?',
+            areYouSureToDeleteTheSelectedColumns: 'Are you sure to delete the selected columns?',
+            thisActionWillDestroyAnyExistingMergedCellsAreYouSure: 'This action will destroy any existing merged cells. Are you sure?',
+            thisActionWillClearYourSearchResultsAreYouSure: 'This action will clear your search results. Are you sure?',
+            thereIsAConflictWithAnotherMergedCell: 'There is a conflict with another merged cell',
+            invalidMergeProperties: 'Invalid merged properties',
+            cellAlreadyMerged: 'Cell already merged',
+            noCellsSelected: 'No cells selected',
+        },
+        // About message
+        about:"jExcel CE Spreadsheet\nVersion 3.6.1\nAuthor: Paul Hodel <paul.hodel@gmail.com>\nWebsite: https://bossanova.uk/jexcel/v3",
+    };
+
+    // Loading initial configuration from user
+    for (var property in defaults) {
+        if (options && options.hasOwnProperty(property)) {
+            obj.options[property] = (property == 'text') ? Object.assign(defaults[property], options[property]) :  options[property];
+        } else {
+            obj.options[property] = defaults[property];
+        }
+    }
+
+    // Global elements
+    obj.el = el;
+    obj.corner = null;
+    obj.contextMenu = null;
+    obj.textarea = null;
+    obj.ads = null;
+    obj.content = null;
+    obj.table = null;
+    obj.thead = null;
+    obj.tbody = null;
+    obj.rows = [];
+    obj.results = null;
+    obj.searchInput = null;
+    obj.toolbar = null;
+    obj.pagination = null;
+    obj.pageNumber = null;
+    obj.headerContainer = null;
+    obj.colgroupContainer = null;
+
+    // Containers
+    obj.headers = [];
+    obj.records = [];
+    obj.history = [];
+    obj.formula = [];
+    obj.colgroup = [];
+    obj.selection = [];
+    obj.highlighted  = [];
+    obj.selectedCell = null;
+    obj.selectedContainer = null;
+    obj.style = [];
+    obj.data = null;
+
+    // Internal controllers
+    obj.cursor = null;
+    obj.historyIndex = -1;
+    obj.ignoreEvents = false;
+    obj.ignoreHistory = false;
+    obj.edition = null;
+    obj.hashString = null;
+    obj.resizing = null;
+    obj.dragging = null;
+
+    // Lazy loading
+    if (obj.options.lazyLoading == true && (obj.options.tableOverflow == false && obj.options.fullscreen == false)) {
+        console.error('JEXCEL: The lazyloading only works when tableOverflow = yes or fullscreen = yes');
+        obj.options.lazyLoading = false;
+    }
+    
+    /**
+     * Activate/Disable fullscreen 
+     * use programmatically : table.fullscreen(); or table.fullscreen(true); or table.fullscreen(false);
+     * @Param {boolean} activate
+     */
+    obj.fullscreen = function(activate) {
+        // If activate not defined, get reverse options.fullscreen
+        if (activate == null) {
+            activate = ! obj.options.fullscreen;
+        }
+
+        // If change
+        if (obj.options.fullscreen != activate) {
+            obj.options.fullscreen = activate;
+
+            // Test LazyLoading conflict
+            if (activate == true) {
+                el.classList.add('fullscreen');
+            } else {
+                el.classList.remove('fullscreen');
+            }
+        } 
+    }
+
+    /**
+     * Prepare the jexcel table
+     * 
+     * @Param config
+     */
+    obj.prepareTable = function() {
+        // Loading initial data from remote sources
+        var results = [];
+
+        // Number of columns
+        var size = obj.options.columns.length;
+
+        if (obj.options.data && typeof(obj.options.data[0]) !== 'undefined') {
+            // Data keys
+            var keys = Object.keys(obj.options.data[0]);
+
+            if (keys.length > size) {
+                size = keys.length;
+            }
+        }
+
+        // Minimal dimensions
+        if (obj.options.minDimensions[0] > size) {
+            size = obj.options.minDimensions[0];
+        }
+
+        // Requests
+        var multiple = [];
+
+        // Preparations
+        for (var i = 0; i < size; i++) {
+            // Deprected options. You should use only columns
+            if (! obj.options.colHeaders[i]) {
+                obj.options.colHeaders[i] = '';
+            }
+            if (! obj.options.colWidths[i]) {
+                obj.options.colWidths[i] = obj.options.defaultColWidth;
+            }
+            if (! obj.options.colAlignments[i]) {
+                obj.options.colAlignments[i] = obj.options.defaultColAlign;
+            }
+
+            // Default column description
+            if (! obj.options.columns[i]) {
+                obj.options.columns[i] = { type:'text' };
+            } else if (! obj.options.columns[i].type) {
+                obj.options.columns[i].type = 'text';
+            }
+            if (! obj.options.columns[i].name) {
+                obj.options.columns[i].name = keys && keys[i] ? keys[i] : i;
+            }
+            if (! obj.options.columns[i].source) {
+                obj.options.columns[i].source = [];
+            }
+            if (! obj.options.columns[i].options) {
+                obj.options.columns[i].options = [];
+            }
+            if (! obj.options.columns[i].editor) {
+                obj.options.columns[i].editor = null;
+            }
+            if (! obj.options.columns[i].allowEmpty) {
+                obj.options.columns[i].allowEmpty = false;
+            }
+            if (! obj.options.columns[i].title) {
+                obj.options.columns[i].title = obj.options.colHeaders[i] ? obj.options.colHeaders[i] : '';
+            }
+            if (! obj.options.columns[i].width) {
+                obj.options.columns[i].width = obj.options.colWidths[i] ? obj.options.colWidths[i] : '50';
+            }
+            if (! obj.options.columns[i].align) {
+                obj.options.columns[i].align = obj.options.colAlignments[i] ? obj.options.colAlignments[i] : 'center';
+            }
+
+            // Pre-load initial source for json autocomplete
+            if (obj.options.columns[i].type == 'autocomplete' || obj.options.columns[i].type == 'dropdown') {
+                // if remote content
+                if (obj.options.columns[i].url) {
+                    multiple.push(jSuites.ajax({
+                        url: obj.options.columns[i].url,
+                        index: i,
+                        method: 'GET',
+                        dataType: 'json',
+                        multiple: multiple,
+                        success: function(data) {
+                            var source = [];
+                            for (var i = 0; i < data.length; i++) {
+                                obj.options.columns[this.index].source.push(data[i]);
+                            }
+                        },
+                        complete: function() {
+                            obj.createTable();
+                        }
+                    }));
+                }
+            } else if (obj.options.columns[i].type == 'calendar') {
+                // Default format for date columns
+                if (! obj.options.columns[i].options.format) {
+                    obj.options.columns[i].options.format = 'DD/MM/YYYY';
+                }
+            }
+        }
+
+        // On complete
+        if (! multiple.length) {
+            obj.createTable();
+        }
+    }
+
+    obj.createTable = function() {
+        // Elements
+        obj.table = document.createElement('table');
+        obj.thead = document.createElement('thead');
+        obj.tbody = document.createElement('tbody');
+
+        // Create headers controllers
+        obj.headers = [];
+        obj.colgroup = [];
+
+        // Create table container
+        obj.content = document.createElement('div');
+        obj.content.classList.add('jexcel_content');
+
+        // Create toolbar object
+        obj.toolbar = document.createElement('div');
+        obj.toolbar.classList.add('jexcel_toolbar');
+
+        // Search
+        var searchContainer = document.createElement('div');
+        var searchText = document.createTextNode((obj.options.text.search) + ': ');
+        obj.searchInput = document.createElement('input');
+        obj.searchInput.classList.add('jexcel_search');
+        searchContainer.appendChild(searchText);
+        searchContainer.appendChild(obj.searchInput);
+        obj.searchInput.onfocus = function() {
+            obj.resetSelection();
+        }
+
+        // Pagination select option
+        var paginationUpdateContainer = document.createElement('div');
+
+        if (obj.options.pagination > 0 && obj.options.paginationOptions && obj.options.paginationOptions.length > 0) {
+            obj.paginationDropdown = document.createElement('select');
+            obj.paginationDropdown.classList.add('jexcel_pagination_dropdown');
+            obj.paginationDropdown.onchange = function() {
+                obj.options.pagination = parseInt(this.value);
+                obj.page(0);
+            }
+
+            for (var i = 0; i < obj.options.paginationOptions.length; i++) {
+                var temp = document.createElement('option');
+                temp.value = obj.options.paginationOptions[i];
+                temp.innerHTML = obj.options.paginationOptions[i];
+                obj.paginationDropdown.appendChild(temp);
+            }
+
+            paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.show));
+            paginationUpdateContainer.appendChild(obj.paginationDropdown);
+            paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.entries));
+        }
+
+        // Filter and pagination container
+        obj.filter = document.createElement('div');
+        obj.filter.classList.add('jexcel_filter');
+        obj.filter.appendChild(paginationUpdateContainer);
+        obj.filter.appendChild(searchContainer);
+
+        // Colsgroup
+        obj.colgroupContainer = document.createElement('colgroup');
+        var tempCol = document.createElement('col');
+        tempCol.setAttribute('width', 50);
+        obj.colgroupContainer.appendChild(tempCol);
+
+        // Nested
+        if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
+            // Flexible way to handle nestedheaders
+            if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
+                for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
+                    obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders[j]));
+                }
+            } else {
+                obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders));
+            }
+        }
+
+        // Row
+        obj.headerContainer = document.createElement('tr');
+        var tempCol = document.createElement('td');
+        tempCol.classList.add('jexcel_selectall');
+        obj.headerContainer.appendChild(tempCol);
+
+        for (var i = 0; i < obj.options.columns.length; i++) {
+            // Create header
+            obj.createCellHeader(i);
+            // Append cell to the container
+            obj.headerContainer.appendChild(obj.headers[i]);
+            obj.colgroupContainer.appendChild(obj.colgroup[i]);
+        }
+
+        obj.thead.appendChild(obj.headerContainer);
+
+        // Content table
+        obj.table = document.createElement('table');
+        obj.table.classList.add('jexcel');
+        obj.table.setAttribute('cellpadding', '0');
+        obj.table.setAttribute('cellspacing', '0');
+        obj.table.setAttribute('unselectable', 'yes');
+        obj.table.setAttribute('onselectstart', 'return false');
+        obj.table.appendChild(obj.colgroupContainer);
+        obj.table.appendChild(obj.thead);
+        obj.table.appendChild(obj.tbody);
+
+        // Spreadsheet corner
+        obj.corner = document.createElement('div');
+        obj.corner.className = 'jexcel_corner';
+        obj.corner.setAttribute('unselectable', 'on');
+        obj.corner.setAttribute('onselectstart', 'return false');
+
+        if (obj.options.selectionCopy == false) {
+            obj.corner.style.display = 'none';
+        }
+
+        // Textarea helper
+        obj.textarea = document.createElement('textarea');
+        obj.textarea.className = 'jexcel_textarea';
+        obj.textarea.id = 'jexcel_textarea';
+
+        // Contextmenu container
+        obj.contextMenu = document.createElement('div');
+        obj.contextMenu.className = 'jexcel_contextmenu';
+
+        // Create element
+        jSuites.contextmenu(obj.contextMenu, {
+            onclick:function() {
+                obj.contextMenu.contextmenu.close(false);
+            }
+        });
+
+        // Powered by jExcel
+        var ads = '<a href="https://bossanova.uk/jexcel/"><img src="//bossanova.uk/jexcel/logo.png">jExcel Spreadsheet</a>';
+        obj.ads = document.createElement('div');
+        obj.ads.className = 'jexcel_about';
+        if (typeof(sessionStorage) !== "undefined") {
+            if (! sessionStorage.getItem('jexcel')) {
+                sessionStorage.setItem('jexcel', true);
+                obj.ads.innerHTML = ads;
+            }
+        } else {
+            obj.ads.innerHTML = ads;
+        }
+
+        // Create table container TODO: frozen columns
+        var container = document.createElement('div');
+        container.classList.add('jexcel_table');
+
+        // Pagination
+        obj.pagination = document.createElement('div');
+        obj.pagination.classList.add('jexcel_pagination');
+        var paginationInfo = document.createElement('div');
+        var paginationPages = document.createElement('div');
+        obj.pagination.appendChild(paginationInfo);
+        obj.pagination.appendChild(paginationPages);
+
+        // Append containers to the table
+        if (obj.options.search == true) {
+            el.appendChild(obj.filter);
+        }
+
+        // Elements
+        obj.content.appendChild(obj.table);
+        obj.content.appendChild(obj.corner);
+        obj.content.appendChild(obj.textarea);
+
+        el.appendChild(obj.toolbar);
+        el.appendChild(obj.content);
+        el.appendChild(obj.pagination);
+        el.appendChild(obj.contextMenu);
+        el.appendChild(obj.ads);
+        el.classList.add('jexcel_container');
+
+        // Create toolbar
+        if (obj.options.toolbar && obj.options.toolbar.length) {
+            obj.createToolbar();
+        }
+
+        // Fullscreen
+        if (obj.options.fullscreen == true) {
+            el.classList.add('fullscreen');
+        } else {
+            // Overflow
+            if (obj.options.tableOverflow == true) {
+                if (obj.options.tableHeight) {
+                    obj.content.style['overflow-y'] = 'auto';
+                    obj.content.style.height = obj.options.tableHeight;
+                }
+                if (obj.options.tableWidth) {
+                    obj.content.style['overflow-x'] = 'auto';
+                    obj.content.style.width = obj.options.tableWidth;
+                }
+            }
+        }
+
+        // With toolbars
+        if (obj.options.tableOverflow != true && obj.options.toolbar) {
+            el.classList.add('with-toolbar');
+        }
+
+        // Actions
+        if (obj.options.columnDrag == true) {
+            obj.thead.classList.add('draggable');
+        }
+        if (obj.options.columnResize == true) {
+            obj.thead.classList.add('resizable');
+        }
+        if (obj.options.rowDrag == true) {
+            obj.tbody.classList.add('draggable');
+        }
+        if (obj.options.rowResize == true) {
+            obj.tbody.classList.add('resizable');
+        }
+
+        // Load data
+        obj.setData();
+
+        // Style
+        if (obj.options.style) {
+            obj.setStyle(obj.options.style, null, null, 1, 1);
+        }
+    }
+
+    /**
+     * Set data
+     * 
+     * @param array data In case no data is sent, default is reloaded
+     * @return void
+     */
+    obj.setData = function(data) {
+        // Update data
+        if (data) {
+            if (typeof(data) == 'string') {
+                data = JSON.parse(data);
+            }
+
+            obj.options.data = data;
+        }
+
+        // Data
+        if (! obj.options.data) {
+            obj.options.data = [];
+        }
+
+        // Prepare data
+        if (obj.options.data) {
+            var data = [];
+            for (var j = 0; j < obj.options.data.length; j++) {
+                var row = [];
+                for (var i = 0; i < obj.options.columns.length; i++) {
+                    row[i] = obj.options.data[j][obj.options.columns[i].name];
+                }
+                data.push(row);
+            }
+
+            obj.options.data = data;
+        }
+
+        // Adjust minimal dimensions
+        var j = 0;
+        var i = 0;
+        var size_i = obj.options.columns.length;
+        var size_j = obj.options.data.length;
+        var min_i = obj.options.minDimensions[0];
+        var min_j = obj.options.minDimensions[1];
+        var max_i = min_i > size_i ? min_i : size_i;
+        var max_j = min_j > size_j ? min_j : size_j;
+
+        for (j = 0; j < max_j; j++) {
+            for (i = 0; i < max_i; i++) {
+                if (obj.options.data[j] == undefined) {
+                    obj.options.data[j] = [];
+                }
+
+                if (obj.options.data[j][i] == undefined) {
+                    obj.options.data[j][i] = '';
+                }
+            }
+        }
+
+        // Reset containers
+        obj.rows = [];
+        obj.results = null;
+        obj.records = [];
+        obj.history = [];
+
+        // Reset internal controllers
+        obj.historyIndex = -1;
+
+        // Reset data
+        obj.tbody.innerHTML = '';
+
+        // Lazy loading
+        if (obj.options.lazyLoading == true) {
+            // Load only 100 records
+            var startNumber = 0
+            var finalNumber = obj.options.data.length < 100 ? obj.options.data.length : 100;
+
+            if (obj.options.pagination) {
+                obj.options.pagination = false;
+                console.error('JEXCEL: Pagination will be disable due the lazyLoading');
+            }
+        } else if (obj.options.pagination) {
+            // Pagination
+            if (! obj.pageNumber) {
+                obj.pageNumber = 0;
+            }
+            var quantityPerPage = obj.options.pagination;
+            startNumber = (obj.options.pagination * obj.pageNumber);
+            finalNumber = (obj.options.pagination * obj.pageNumber) + obj.options.pagination;
+
+            if (obj.options.data.length < finalNumber) {
+                finalNumber = obj.options.data.length;
+            }
+        } else {
+            var startNumber = 0;
+            var finalNumber = obj.options.data.length;
+        }
+
+        // Append nodes to the HTML
+        for (j = 0; j < obj.options.data.length; j++) {
+            // Create row
+            var tr = obj.createRow(j, obj.options.data[j]);
+            // Append line to the table
+            if (j >= startNumber && j < finalNumber) {
+                obj.tbody.appendChild(tr);
+            }
+        }
+
+        if (obj.options.lazyLoading == true) {
+            // Do not create pagination with lazyloading activated
+        } else if (obj.options.pagination) {
+            obj.updatePagination();
+        }
+
+        // Merge cells
+        if (obj.options.mergeCells) {
+            var keys = Object.keys(obj.options.mergeCells);
+            for (var i = 0; i < keys.length; i++) {
+                var num = obj.options.mergeCells[keys[i]];
+                obj.setMerge(keys[i], num[0], num[1], 1);
+            }
+        }
+
+        // Updata table with custom configurations if applicable
+        obj.updateTable();
+
+        // Onload
+        if (! obj.ignoreEvents) {
+            if (typeof(obj.options.onload) == 'function') {
+                obj.options.onload(el, obj);
+            }
+        }
+    }
+
+    /**
+     * Get the whole table data
+     * 
+     * @param integer row number
+     * @return string value
+     */
+    obj.getData = function(highlighted) {
+        // Control vars
+        var dataset = [];
+        var px = 0;
+        var py = 0;
+
+        // Column and row length
+        var x = obj.options.columns.length
+        var y = obj.options.data.length
+
+        // Go through the columns to get the data
+        for (var j = 0; j < y; j++) {
+            px = 0;
+            for (var i = 0; i < x; i++) {
+                // Cell selected or fullset
+                if (! highlighted || obj.records[j][i].classList.contains('highlight')) {
+                    // Get value
+                    if (! dataset[py]) {
+                        dataset[py] = [];
+                    }
+                    if (obj.options.copyCompatibility == true) {
+                        dataset[py][px] = obj.records[j][i].innerHTML;
+                    } else {
+                        dataset[py][px] = obj.options.data[j][i];
+                    }
+                    px++;
+                }
+            }
+            if (px > 0) {
+                py++;
+            }
+       }
+
+       return dataset;
+    }
+
+    /**
+     * Get the whole table data
+     * 
+     * @param integer row number
+     * @return string value
+     */
+    obj.getJson = function(highlighted) {
+        // Control vars
+        var data = [];
+
+        // Column and row length
+        var x = obj.options.columns.length
+        var y = obj.options.data.length
+
+        // Go through the columns to get the data
+        for (var j = 0; j < y; j++) {
+            var row = null;
+            for (var i = 0; i < x; i++) {
+                if (! highlighted || obj.records[j][i].classList.contains('highlight')) {
+                    if (row == null) {
+                        row = {};
+                    }
+                    row[obj.options.columns[i].name] = obj.options.data[j][i];
+                }
+            }
+
+            if (row != null) {
+                data.push(row);
+            }
+       }
+
+       return data;
+    }
+
+    /**
+     * Get a row data by rowNumber
+     */
+    obj.getRowData = function(rowNumber) {
+        return obj.options.data[rowNumber];
+    }
+
+    /**
+     * Set a row data by rowNumber
+     */
+    obj.setRowData = function(rowNumber, data) {
+        for (var i = 0; i < obj.headers.length; i++) {
+            // Update cell
+            var columnName = jexcel.getColumnNameFromId([ i, rowNumber ]);
+            // Set value
+            if (data[i] != null) {
+                obj.setValue(columnName, data[i]);
+            }
+        }
+    }
+
+    /**
+     * Get a column data by columnNumber
+     */
+    obj.getColumnData = function(columnNumber) {
+        var dataset = [];
+        // Go through the rows to get the data
+        for (var j = 0; j < obj.options.data.length; j++) {
+            dataset.push(obj.options.data[j][columnNumber]);
+        }
+        return dataset;
+    }
+
+    /**
+     * Set a column data by colNumber
+     */
+    obj.setColumnData = function(colNumber, data) {
+        for (var j = 0; j < obj.rows.length; j++) {
+            // Update cell
+            var columnName = jexcel.getColumnNameFromId([ colNumber, j ]);
+            // Set value
+            if (data[j] != null) {
+                obj.setValue(columnName, data[j]);
+            }
+        }
+    }
+
+    /**
+     * Create row
+     */
+    obj.createRow = function(j, data) {
+        // Create container
+        if (! obj.records[j]) {
+            obj.records[j] = [];
+        }
+        // Default data
+        if (! data) {
+            var data = obj.options.data[j];
+        }
+        // New line of data to be append in the table
+        obj.rows[j] = document.createElement('tr');
+        obj.rows[j].setAttribute('data-y', j);
+        // Definitions
+        if (obj.options.rows[j]) {
+            if (obj.options.rows[j].height) {
+                obj.rows[j].style.height = obj.options.rows[j].height;
+            }
+        }
+        // Row number label
+        var td = document.createElement('td');
+        td.innerHTML = parseInt(j + 1);
+        td.setAttribute('data-y', j);
+        td.className = 'jexcel_row';
+        obj.rows[j].appendChild(td);
+
+        // Data columns
+        for (i = 0; i < obj.options.columns.length; i++) {
+            // New column of data to be append in the line
+            obj.records[j][i] = obj.createCell(i, j, data[i]);
+            // Add column to the row
+            obj.rows[j].appendChild(obj.records[j][i]);
+        }
+
+        // Add row to the table body
+        return obj.rows[j];
+    }
+
+    /**
+     * Create cell
+     */
+    obj.createCell = function(i, j, value) {
+        // Create cell and properties
+        var td = document.createElement('td');
+        td.setAttribute('data-x', i);
+        td.setAttribute('data-y', j);
+        // Hidden column
+        if (obj.options.columns[i].type == 'hidden') {
+            td.style.display = 'none';
+            td.innerHTML = value;
+        } else if (obj.options.columns[i].type == 'checkbox' || obj.options.columns[i].type == 'radio') {
+            // Create input
+            var element = document.createElement('input');
+            element.type = obj.options.columns[i].type;
+            element.name = 'c' + i;
+            element.checked = (value == 1 || value == true || value == 'true') ? true : false;
+            element.onclick = function() {
+                obj.setValue(td, this.checked);
+            }
+
+            if (obj.options.columns[i].readOnly == true) {
+                element.setAttribute('disabled', 'disabled');
+            }
+
+            // Append to the table
+            td.appendChild(element);
+            // Make sure the values are correct
+            obj.options.data[j][i] = element.checked;
+        } else if (obj.options.columns[i].type == 'calendar') {
+            // Try formatted date
+            var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[i].options.format);
+            // Create calendar cell
+            td.innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[i].options.format);
+        } else if (obj.options.columns[i].type == 'dropdown' || obj.options.columns[i].type == 'autocomplete') {
+            // Create dropdown cell
+            td.classList.add('dropdown');
+            td.innerHTML = obj.getDropDownValue(i, value);
+        } else if (obj.options.columns[i].type == 'color') {
+            if (obj.options.columns[i].render == 'square') {
+                var color = document.createElement('div');
+                color.className = 'color';
+                color.style.backgroundColor = value;
+                td.appendChild(color);
+            } else {
+                td.style.color = value;
+                td.innerHTML = value;
+            }
+        } else if (obj.options.columns[i].type == 'image') {
+            if (value && value.substr(0, 10) == 'data:image') {
+                var img = document.createElement('img');
+                img.src = value;
+                td.appendChild(img);
+            }
+        } else {
+            if ((''+value).substr(0,1) == '=' && obj.options.parseFormulas == true) {
+                value = obj.executeFormula(value, i, j)
+            }
+            if (obj.options.columns[i].mask) {
+                var decimal = obj.options.columns[i].decimal || '.';
+                value = '' + jSuites.mask.run(value, obj.options.columns[i].mask, decimal);
+            }
+
+            td.innerHTML = value;
+        }
+
+        // Readonly
+        if (obj.options.columns[i].readOnly == true) {
+            td.className = 'readonly';
+        }
+
+        // Text align
+        var colAlign = obj.options.columns[i].align ? obj.options.columns[i].align : 'center';
+        td.style.textAlign = colAlign;
+
+        // Wrap option
+        if (obj.options.columns[i].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[i].wordWrap == true || td.innerHTML.length > 200)) {
+            td.style.whiteSpace = 'pre-wrap';
+        }
+
+        // Overflow
+        if (i > 0) {
+            if (value || td.innerHTML) {
+                obj.records[j][i-1].style.overflow = 'hidden';
+            } else {
+                if (i == obj.options.columns.length - 1) {
+                    td.style.overflow = 'hidden';
+                }
+            }
+        }
+
+        return td;
+    }
+
+    obj.createCellHeader = function(colNumber) {
+        // Create col global control
+        var colWidth = obj.options.columns[colNumber].width ? obj.options.columns[colNumber].width : obj.options.defaultColWidth;
+        var colAlign = obj.options.columns[colNumber].align ? obj.options.columns[colNumber].align : obj.options.defaultColAlign;
+
+        // Create header cell
+        obj.headers[colNumber] = document.createElement('td');
+        obj.headers[colNumber].innerHTML = obj.options.columns[colNumber].title ? obj.options.columns[colNumber].title : jexcel.getColumnName(colNumber);
+        obj.headers[colNumber].setAttribute('data-x', colNumber);
+        obj.headers[colNumber].style.textAlign = colAlign;
+        if (obj.options.columns[colNumber].title) {
+            obj.headers[colNumber].setAttribute('title', obj.options.columns[colNumber].title);
+        }
+
+        // Width control
+        obj.colgroup[colNumber] = document.createElement('col');
+        obj.colgroup[colNumber].setAttribute('width', colWidth);
+
+        // Hidden column
+        if (obj.options.columns[colNumber].type == 'hidden') {
+            obj.headers[colNumber].style.display = 'none';
+            obj.colgroup[colNumber].style.display = 'none';
+        }
+    }
+
+    obj.createNestedHeader = function(nestedInformation) {
+        var tr = document.createElement('tr');
+        tr.classList.add('jexcel_nested');
+        var td = document.createElement('td');
+        tr.appendChild(td);
+
+        var headerIndex = 0;
+        for (var i = 0; i < nestedInformation.length; i++) {
+            // Default values
+            if (! nestedInformation[i].colspan) {
+                nestedInformation[i].colspan = 1;
+            }
+            if (! nestedInformation[i].align) {
+                nestedInformation[i].align = 'center';
+            }
+            if (! nestedInformation[i].title) {
+                nestedInformation[i].title = '';
+            }
+
+            // Number of columns
+            var numberOfColumns = nestedInformation[i].colspan;
+
+            // Classes container
+            var column = [];
+            // Header classes for this cell
+            for (var x = 0; x < numberOfColumns; x++) {
+                if (obj.options.columns[headerIndex] && obj.options.columns[headerIndex].type == 'hidden') {
+                    numberOfColumns++;
+                }
+                column.push(headerIndex);
+                headerIndex++;
+            }
+
+            // Created the nested cell
+            var td = document.createElement('td');
+            td.setAttribute('data-column', column.join(','));
+            td.setAttribute('colspan', nestedInformation[i].colspan);
+            td.setAttribute('align', nestedInformation[i].align);
+            td.innerHTML = nestedInformation[i].title;
+            tr.appendChild(td);
+        }
+
+        return tr;
+    }
+
+    /**
+     * Create toolbar
+     */
+    obj.createToolbar = function(toolbar) {
+        if (toolbar) {
+            obj.options.toolbar = toolbar;
+        } else {
+            var toolbar = obj.options.toolbar;
+        }
+
+        for (var i = 0; i < toolbar.length; i++) {
+            if (toolbar[i].type == 'i') {
+                var toolbarItem = document.createElement('i');
+                toolbarItem.classList.add('jexcel_toolbar_item');
+                toolbarItem.classList.add('material-icons');
+                toolbarItem.setAttribute('data-k', toolbar[i].k);
+                toolbarItem.setAttribute('data-v', toolbar[i].v);
+                // Tooltip
+                if (toolbar[i].tooltip) {
+                    toolbarItem.setAttribute('title', toolbar[i].tooltip);
+                }
+                // Handle click
+                if (toolbar[i].onclick && typeof(toolbar[i].onclick)) {
+                    toolbarItem.onclick = toolbar[i].onclick;
+                } else {
+                    toolbarItem.onclick = function() {
+                        var k = this.getAttribute('data-k');
+                        var v = this.getAttribute('data-v');
+                        obj.setStyle(obj.highlighted, k, v);
+                    }
+                }
+                // Append element
+                toolbarItem.innerHTML = toolbar[i].content;
+                obj.toolbar.appendChild(toolbarItem);
+            } else if (toolbar[i].type == 'select') {
+               var toolbarItem = document.createElement('select');
+               toolbarItem.classList.add('jexcel_toolbar_item');
+               toolbarItem.setAttribute('data-k', toolbar[i].k);
+               // Tooltip
+               if (toolbar[i].tooltip) {
+                   toolbarItem.setAttribute('title', toolbar[i].tooltip);
+               }
+               // Handle onchange
+               if (toolbar[i].onchange && typeof(toolbar[i].onchange)) {
+                   toolbarItem.onchange = toolbar[i].onchange;
+               } else {
+                   toolbarItem.onchange = function() {
+                       var k = this.getAttribute('data-k');
+                       obj.setStyle(obj.highlighted, k, this.value);
+                   }
+               }
+               // Add options to the dropdown
+               for(var j = 0; j < toolbar[i].v.length; j++) {
+                    var toolbarDropdownOption = document.createElement('option');
+                    toolbarDropdownOption.value = toolbar[i].v[j];
+                    toolbarDropdownOption.innerHTML = toolbar[i].v[j];
+                    toolbarItem.appendChild(toolbarDropdownOption);
+               }
+               obj.toolbar.appendChild(toolbarItem);
+            } else if (toolbar[i].type == 'color') {
+                 var toolbarItem = document.createElement('i');
+                 toolbarItem.classList.add('jexcel_toolbar_item');
+                 toolbarItem.classList.add('material-icons');
+                 toolbarItem.setAttribute('data-k', toolbar[i].k);
+                 toolbarItem.setAttribute('data-v', '');
+                 // Tooltip
+                 if (toolbar[i].tooltip) {
+                     toolbarItem.setAttribute('title', toolbar[i].tooltip);
+                 }
+                 obj.toolbar.appendChild(toolbarItem);
+                 toolbarItem.onclick = function() {
+                     this.color.open();
+                 }
+                 toolbarItem.innerHTML = toolbar[i].content;
+                 jSuites.color(toolbarItem, {
+                     onchange:function(o, v) {
+                         var k = o.getAttribute('data-k');
+                         obj.setStyle(obj.highlighted, k, v);
+                     }
+                 });
+            }
+        }
+    }
+
+    /**
+     * Merge cells
+     * @param cellName
+     * @param colspan
+     * @param rowspan
+     * @param ignoreHistoryAndEvents
+     */
+    obj.setMerge = function(cellName, colspan, rowspan, ignoreHistoryAndEvents) {
+        var test = false;
+
+        if (! cellName) {
+            if (! obj.highlighted.length) {
+                alert(obj.options.text.noCellsSelected);
+                return null;
+            } else {
+                var x1 = parseInt(obj.highlighted[0].getAttribute('data-x'));
+                var y1 = parseInt(obj.highlighted[0].getAttribute('data-y'));
+                var x2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-x'));
+                var y2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-y'));
+                var cellName = jexcel.getColumnNameFromId([ x1, y1 ]);
+                var colspan = (x2 - x1) + 1;
+                var rowspan = (y2 - y1) + 1;
+            }
+        }
+
+        var cell = jexcel.getIdFromColumnName(cellName, true);
+
+        if (obj.options.mergeCells[cellName]) {
+            if (obj.records[cell[1]][cell[0]].getAttribute('data-merged')) {
+                test = obj.options.text.cellAlreadyMerged;
+            }
+        } else if ((! colspan || colspan < 2) && (! rowspan || rowspan < 2)) {
+            test = obj.options.text.invalidMergeProperties;
+        } else {
+            var cells = [];
+            for (var j = cell[1]; j < cell[1] + rowspan; j++) {
+                for (var i = cell[0]; i < cell[0] + colspan; i++) {
+                    var columnName = jexcel.getColumnNameFromId([i, j]);
+                    if (obj.records[j][i].getAttribute('data-merged')) {
+                        test = obj.options.text.thereIsAConflictWithAnotherMergedCell;
+                    }
+                }
+            }
+        }
+
+        if (test) {
+            alert(test);
+        } else {
+            // Add property
+            if (colspan > 1) {
+                obj.records[cell[1]][cell[0]].setAttribute('colspan', colspan);
+            } else {
+                colspan = 1;
+            }
+            if (rowspan > 1) {
+                obj.records[cell[1]][cell[0]].setAttribute('rowspan', rowspan);
+            } else {
+                rowspan = 1;
+            }
+            // Keep links to the existing nodes
+            obj.options.mergeCells[cellName] = [ colspan, rowspan, [] ];
+            // Mark cell as merged
+            obj.records[cell[1]][cell[0]].setAttribute('data-merged', 'true');
+            // Overflow
+            obj.records[cell[1]][cell[0]].style.overflow = 'hidden';
+            // History data
+            var data = [];
+            // Adjust the nodes
+            for (var y = cell[1]; y < cell[1] + rowspan; y++) {
+                for (var x = cell[0]; x < cell[0] + colspan; x++) {
+                    if (! (cell[0] == x && cell[1] == y)) {
+                        data.push(obj.options.data[y][x]);
+                        obj.updateCell(x, y, '', true);
+                        obj.options.mergeCells[cellName][2].push(obj.records[y][x]);
+                        obj.records[y][x].style.display = 'none';
+                        obj.records[y][x] = obj.records[cell[1]][cell[0]];
+                    }
+                }
+            }
+            // In the initialization is not necessary keep the history
+            obj.updateSelection(obj.records[cell[1]][cell[0]]);
+
+            if (! ignoreHistoryAndEvents) {
+                obj.setHistory({
+                    action:'setMerge',
+                    column:cellName,
+                    colspan:colspan,
+                    rowspan:rowspan,
+                    data:data,
+                });
+
+                if (typeof(obj.options.onmerge) == 'function') {
+                    obj.options.onmerge(el, cellName, colspan, rowspan);
+                }
+            }
+        }
+    }
+
+    /**
+     * Merge cells
+     * @param cellName
+     * @param colspan
+     * @param rowspan
+     * @param ignoreHistoryAndEvents
+     */
+    obj.getMerge = function(cellName) {
+        var data = {};
+        if (cellName) {
+            if (obj.options.mergeCells[cellName]) {
+                data = [ obj.options.mergeCells[cellName][0], obj.options.mergeCells[cellName][1] ];
+            } else {
+                data = null;
+            }
+        } else {
+            if (obj.options.mergeCells) {
+                var mergedCells = obj.options.mergeCells;
+                var keys = Object.keys(obj.options.mergeCells);
+                for (var i = 0; i < keys.length; i++) {
+                    data[keys[i]] = [ obj.options.mergeCells[keys[i]][0], obj.options.mergeCells[keys[i]][1] ];
+                }
+            }
+        }
+
+        return data;
+    }
+
+    /**
+     * Remove merge by cellname
+     * @param cellName
+     */
+    obj.removeMerge = function(cellName, data, keepOptions) {
+        if (obj.options.mergeCells[cellName]) {
+            var cell = jexcel.getIdFromColumnName(cellName, true);
+            obj.records[cell[1]][cell[0]].removeAttribute('colspan');
+            obj.records[cell[1]][cell[0]].removeAttribute('rowspan');
+            obj.records[cell[1]][cell[0]].removeAttribute('data-merged');
+            var info = obj.options.mergeCells[cellName];
+
+            var index = 0;
+            for (var j = 0; j < info[1]; j++) {
+                for (var i = 0; i < info[0]; i++) {
+                    if (j > 0 || i > 0) {
+                        obj.records[cell[1]+j][cell[0]+i] = info[2][index];
+                        obj.records[cell[1]+j][cell[0]+i].style.display = '';
+                        // Recover data
+                        if (data && data[index]) {
+                            obj.updateCell(cell[0]+i, cell[1]+j, data[index]);
+                        }
+                        index++;
+                    }
+                }
+            }
+
+            // Update selection
+            obj.updateSelection(obj.records[cell[1]][cell[0]], obj.records[cell[1]+j-1][cell[0]+i-1]);
+
+            if (! keepOptions) {
+                delete(obj.options.mergeCells[cellName]);
+            }
+        }
+    }
+
+    /**
+     * Remove all merged cells
+     */
+    obj.destroyMerged = function(keepOptions) {
+        // Remove any merged cells
+        if (obj.options.mergeCells) {
+            var mergedCells = obj.options.mergeCells;
+            var keys = Object.keys(obj.options.mergeCells);
+            for (var i = 0; i < keys.length; i++) {
+                obj.removeMerge(keys[i], null, keepOptions);
+            }
+        }
+    }
+
+    /**
+     * Is column merged
+     */
+    obj.isColMerged = function(x, insertBefore) {
+        var cols = [];
+        // Remove any merged cells
+        if (obj.options.mergeCells) {
+            var keys = Object.keys(obj.options.mergeCells);
+            for (var i = 0; i < keys.length; i++) {
+                var info = jexcel.getIdFromColumnName(keys[i], true);
+                var colspan = obj.options.mergeCells[keys[i]][0];
+                var x1 = info[0];
+                var x2 = info[0] + (colspan > 1 ? colspan - 1 : 0);
+
+                if (insertBefore == null) {
+                    if ((x1 <= x && x2 >= x)) {
+                        cols.push(keys[i]);
+                    }
+                } else {
+                    if (insertBefore) {
+                        if ((x1 < x && x2 >= x)) {
+                            cols.push(keys[i]);
+                        }
+                    } else {
+                        if ((x1 <= x && x2 > x)) {
+                            cols.push(keys[i]);
+                        }
+                    }
+                }
+            }
+        }
+
+        return cols;
+    }
+
+    /**
+     * Is rows merged
+     */
+    obj.isRowMerged = function(y, insertBefore) {
+        var rows = [];
+        // Remove any merged cells
+        if (obj.options.mergeCells) {
+            var keys = Object.keys(obj.options.mergeCells);
+            for (var i = 0; i < keys.length; i++) {
+                var info = jexcel.getIdFromColumnName(keys[i], true);
+                var rowspan = obj.options.mergeCells[keys[i]][1];
+                var y1 = info[1];
+                var y2 = info[1] + (rowspan > 1 ? rowspan - 1 : 0);
+
+                if (insertBefore == null) {
+                    if ((y1 <= y && y2 >= y)) {
+                        rows.push(keys[i]);
+                    }
+                } else {
+                    if (insertBefore) {
+                        if ((y1 < y && y2 >= y)) {
+                            rows.push(keys[i]);
+                        }
+                    } else {
+                        if ((y1 <= y && y2 > y)) {
+                            rows.push(keys[i]);
+                        }
+                    }
+                }
+            }
+        }
+
+        return rows;
+    }
+
+    /**
+     * Open the editor
+     * 
+     * @param object cell
+     * @return void
+     */
+    obj.openEditor = function(cell, empty, e) {
+        // Get cell position
+        var y = cell.getAttribute('data-y');
+        var x = cell.getAttribute('data-x');
+
+        // On edition start
+        if (! obj.ignoreEvents) {
+            if (typeof(obj.options.oneditionstart) == 'function') {
+                obj.options.oneditionstart(el, cell, x, y);
+            }
+        }
+
+        // Overflow
+        if (x > 0) {
+            obj.records[y][x-1].style.overflow = 'hidden';
+        }
+
+        // Create editor
+        var createEditor = function(type) {
+            // Cell information
+            var info = cell.getBoundingClientRect();
+
+            // Create dropdown
+            var editor = document.createElement(type);
+            editor.style.width = (info.width) + 'px';
+            editor.style.height = (info.height - 2) + 'px';
+            editor.style.minHeight = (info.height - 2) + 'px';
+
+            // Edit cell
+            cell.classList.add('editor');
+            cell.innerHTML = '';
+            cell.appendChild(editor);
+
+            return editor;
+        }
+
+        // Readonly
+        if (cell.classList.contains('readonly') == true) {
+            // Do nothing
+        } else {
+            // Holder
+            obj.edition = [ obj.records[y][x], obj.records[y][x].innerHTML, x, y ];
+
+            // If there is a custom editor for it
+            if (obj.options.columns[x].editor) {
+                // Custom editors
+                obj.options.columns[x].editor.openEditor(cell, el);
+            } else {
+                // Native functions
+                if (obj.options.columns[x].type == 'hidden') {
+                    // Do nothing
+                } else if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {
+                    // Get value
+                    var value = cell.children[0].checked ? false : true;
+                    // Toogle value
+                    obj.setValue(cell, value);
+                    // Do not keep edition open
+                    obj.edition = null;
+                } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
+                    // Get current value
+                    var value = obj.options.data[y][x];
+
+                    // Create dropdown
+                    if (typeof(obj.options.columns[x].filter) == 'function') {
+                        var source = obj.options.columns[x].filter(el, cell, x, y, obj.options.columns[x].source);
+                    } else {
+                        var source = obj.options.columns[x].source;
+                    }
+
+                    // Create editor
+                    var editor = createEditor('div');
+                    var options = {
+                        data: source,
+                        multiple: obj.options.columns[x].multiple ? true : false,
+                        autocomplete: obj.options.columns[x].autocomplete || obj.options.columns[x].type == 'autocomplete' ? true : false,
+                        opened:true,
+                        value: obj.options.columns[x].multiple ? value.split(';') : value,
+                        width:'100%',
+                        height:editor.style.minHeight,
+                        position: (obj.options.tableOverflow == true || obj.options.fullscreen == true) ? true : false,
+                        onclose:function() {
+                            obj.closeEditor(cell, true);
+                        }
+                    };
+                    if (obj.options.columns[x].options && obj.options.columns[x].options.type) {
+                        options.type = obj.options.columns[x].options.type;
+                    }
+                    jSuites.dropdown(editor, options);
+                } else if (obj.options.columns[x].type == 'calendar' || obj.options.columns[x].type == 'color') {
+                    // Value
+                    var value = obj.options.data[y][x];
+                    // Create editor
+                    var editor = createEditor('input');
+                    editor.value = value;
+
+                    if (obj.options.tableOverflow == true || obj.options.fullscreen == true) {
+                        obj.options.columns[x].options.position = true;
+                    }
+                    obj.options.columns[x].options.value = obj.options.data[y][x];
+                    obj.options.columns[x].options.opened = true;
+                    obj.options.columns[x].options.onclose = function(el, value) {
+                        obj.closeEditor(cell, true);
+                    }
+                    // Current value
+                    if (obj.options.columns[x].type == 'color') {
+                        jSuites.color(editor, obj.options.columns[x].options);
+                    } else {
+                        var calendar = jSuites.calendar(editor, obj.options.columns[x].options);
+                        calendar.setValue(value);
+                    }
+                    // Focus on editor
+                    editor.focus();
+                } else if (obj.options.columns[x].type == 'image') {
+                    // Value
+                    var img = cell.children[0];
+                    // Create editor
+                    var editor = createEditor('div');
+                    editor.style.position = 'relative';
+                    var div = document.createElement('div');
+                    div.classList.add('jclose');
+                    if (img && img.src) {
+                        div.appendChild(img);
+                    }
+                    editor.appendChild(div);
+                    jSuites.image(div, obj.options.imageOptions);
+                    const rect = cell.getBoundingClientRect();
+                    const rectContent = div.getBoundingClientRect();
+                    if (window.innerHeight < rect.bottom + rectContent.height) {
+                        div.style.top = (rect.top - (rectContent.height + 2)) + 'px';
+                    } else {
+                        div.style.top = (rect.top) + 'px';
+                    }
+                } else {
+                    // Value
+                    var value = empty == true ? '' : obj.options.data[y][x];
+
+                    // Basic editor
+                    if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true)) {
+                        var editor = createEditor('textarea');
+                    } else {
+                        var editor = createEditor('input');
+                        // Mask
+                        if (obj.options.columns[x].mask) {
+                            editor.setAttribute('data-mask', obj.options.columns[x].mask);
+                        }
+                    }
+
+                    editor.value = value;
+                    editor.onblur = function() {
+                        obj.closeEditor(cell, true);
+                    };
+                    editor.focus();
+                }
+            }
+        }
+    }
+
+    /**
+     * Close the editor and save the information
+     * 
+     * @param object cell
+     * @param boolean save
+     * @return void
+     */
+    obj.closeEditor = function(cell, save) {
+        var x = parseInt(cell.getAttribute('data-x'));
+        var y = parseInt(cell.getAttribute('data-y'));
+
+        // Get cell properties
+        if (save == true) {
+            // If custom editor
+            if (obj.options.columns[x].editor) {
+                // Custom editor
+                var value = obj.options.columns[x].editor.closeEditor(cell, save);
+            } else {
+                // Native functions
+                if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio' || obj.options.columns[x].type == 'hidden') {
+                    // Do nothing
+                } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
+                    var value = cell.children[0].dropdown.close(true);
+                } else if (obj.options.columns[x].type == 'calendar') {
+                    var value = cell.children[0].calendar.close(true);
+                } else if (obj.options.columns[x].type == 'color') {
+                    var value = cell.children[1].color.close(true);
+                } else if (obj.options.columns[x].type == 'image') {
+                    var img = cell.children[0].children[0].children[0];
+                    var value = img && img.tagName == 'IMG' ? img.src : '';
+                } else if (obj.options.columns[x].type == 'numeric') {
+                    var value = cell.children[0].value;
+                    if (value.substr(0,1) != '=') {
+                        if (value == '') {
+                            value = obj.options.columns[x].allowEmpty ? '' : 0;
+                        }
+                    }
+                    cell.children[0].onblur = null;
+                } else {
+                    var value = cell.children[0].value;
+                    cell.children[0].onblur = null;
+                }
+            }
+
+            // Ignore changes if the value is the same
+            if (obj.options.data[y][x] == value) {
+                cell.innerHTML = obj.edition[1];
+            } else {
+                obj.setValue(cell, value);
+            }
+        } else {
+            if (obj.options.columns[x].editor) {
+                // Custom editor
+                obj.options.columns[x].editor.closeEditor(cell, save);
+            } else {
+                if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
+                    cell.children[0].dropdown.close(true);
+                } else if (obj.options.columns[x].type == 'calendar') {
+                    cell.children[0].calendar.close(true);
+                } else if (obj.options.columns[x].type == 'color') {
+                    cell.children[1].color.close(true);
+                } else {
+                    cell.children[0].onblur = null;
+                }
+            }
+
+            // Restore value
+            cell.innerHTML = obj.edition && obj.edition[1] ? obj.edition[1] : '';
+        }
+
+        // On edition end
+        if (! obj.ignoreEvents) {
+            if (typeof(obj.options.oneditionend) == 'function') {
+                obj.options.oneditionend(el, cell, x, y, value, save);
+            }
+        }
+
+        // Remove editor class
+        cell.classList.remove('editor');
+
+        // Finish edition
+        obj.edition = null;
+    }
+
+    /**
+     * Get the cell object
+     * 
+     * @param object cell
+     * @return string value
+     */
+    obj.getCell = function(cell) {
+        // Convert in case name is excel liked ex. A10, BB92
+        cell = jexcel.getIdFromColumnName(cell, true);
+        var x = cell[0];
+        var y = cell[1];
+
+        return obj.records[y][x];
+    }
+
+    /**
+     * Get the cell object from coords
+     * 
+     * @param object cell
+     * @return string value
+     */
+    obj.getCellFromCoords = function(x, y) {
+        return obj.records[y][x].element;
+    }
+
+    /**
+     * Get label
+     * 
+     * @param object cell
+     * @return string value
+     */
+    obj.getLabel = function(cell) {
+        // Convert in case name is excel liked ex. A10, BB92
+        cell = jexcel.getIdFromColumnName(cell, true);
+        var x = cell[0];
+        var y = cell[1];
+
+        return obj.records[y][x].innerHTML;
+    }
+
+    /**
+     * Get labelfrom coords
+     * 
+     * @param object cell
+     * @return string value
+     */
+    obj.getLabelFromCoords = function(x, y) {
+        return obj.records[y][x].element.innerHTML;
+    }
+
+    /**
+     * Get the value from a cell
+     * 
+     * @param object cell
+     * @return string value
+     */
+    obj.getValue = function(cell, processedValue) {
+        if (typeof(cell) == 'object') {
+            var x = cell.getAttribute('data-x');
+            var y = cell.getAttribute('data-y');
+        } else {
+            cell = jexcel.getIdFromColumnName(cell, true);
+            var x = cell[0];
+            var y = cell[1];
+        }
+
+        var value = null;
+
+        if (x != null && y != null) {
+            if (obj.records[y] && obj.records[y][x] && (processedValue || obj.options.copyCompatibility == true)) {
+                value = obj.records[y][x].innerHTML;
+            } else {
+                if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') {
+                    value = obj.options.data[y][x];
+                }
+            }
+        }
+
+        return value;
+    }
+
+    /**
+     * Get the value from a coords
+     * 
+     * @param int x
+     * @param int y
+     * @return string value
+     */
+    obj.getValueFromCoords = function(x, y, processedValue) {
+        var value = null;
+
+        if (x != null && y != null) {
+            if ((obj.records[y] && obj.records[y][x]) && processedValue || obj.options.copyCompatibility == true) {
+                value = obj.records[y][x].innerHTML;
+            } else {
+                if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') {
+                    value = obj.options.data[y][x];
+                }
+            }
+        }
+
+        return value;
+    }
+
+    /**
+     * Set a cell value
+     * 
+     * @param mixed cell destination cell
+     * @param string value value
+     * @return void
+     */
+    obj.setValue = function(cell, value, force) {
+        var records = [];
+
+        if (typeof(cell) == 'string') {
+            var columnId = jexcel.getIdFromColumnName(cell, true);
+            var x = columnId[0];
+            var y = columnId[1];
+
+            // Update cell
+            records.push(obj.updateCell(x, y, value, force));
+
+            // Update all formulas in the chain
+            obj.updateFormulaChain(x, y, records);
+        } else {
+            var x = null;
+            var y = null;
+            if (cell && cell.getAttribute) {
+                var x = cell.getAttribute('data-x');
+                var y = cell.getAttribute('data-y');
+            }
+
+            // Update cell
+            if (x != null && y != null) {
+                records.push(obj.updateCell(x, y, value, force));
+
+                // Update all formulas in the chain
+                obj.updateFormulaChain(x, y, records);
+            } else {
+                var keys = Object.keys(cell);
+                if (keys.length > 0) {
+                    for (var i = 0; i < keys.length; i++) {
+                        if (typeof(cell[i]) == 'string') {
+                            var columnId = jexcel.getIdFromColumnName(cell[i], true);
+                            var x = columnId[0];
+                            var y = columnId[1];
+                        } else {
+                            var x = cell[i].getAttribute('data-x');
+                            var y = cell[i].getAttribute('data-y');
+                        }
+
+                         // Update cell
+                        if (x != null && y != null) {
+                            records.push(obj.updateCell(x, y, value, force));
+
+                            // Update all formulas in the chain
+                            obj.updateFormulaChain(x, y, records);
+                        }
+                    }
+                }
+            }
+        }
+
+        // Update history
+        obj.setHistory({
+            action:'setValue',
+            records:records,
+            selection:obj.selectedCell,
+        });
+
+        // Update table with custom configurations if applicable
+        obj.updateTable();
+
+        // On after changes
+        obj.onafterchanges(el, records);
+    }
+
+    /**
+     * Set a cell value based on coordinates
+     * 
+     * @param int x destination cell
+     * @param int y destination cell
+     * @param string value
+     * @return void
+     */
+    obj.setValueFromCoords = function(x, y, value, force) {
+        var records = [];
+        records.push(obj.updateCell(x, y, value, force));
+
+        // Update all formulas in the chain
+        obj.updateFormulaChain(x, y, records);
+
+        // Update history
+        obj.setHistory({
+            action:'setValue',
+            records:records,
+            selection:obj.selectedCell,
+        });
+
+        // Update table with custom configurations if applicable
+        obj.updateTable();
+
+        // On after changes
+        obj.onafterchanges(el, records);
+    }
+
+    /**
+     * Toogle
+     */
+    obj.setCheckRadioValue = function() {
+        var records = [];
+        var keys = Object.keys(obj.highlighted);
+        for (var i = 0; i < keys.length; i++) {
+            var x = obj.highlighted[i].getAttribute('data-x');
+            var y = obj.highlighted[i].getAttribute('data-y');
+
+            if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {
+                // Update cell
+                records.push(obj.updateCell(x, y, ! obj.options.data[y][x]));
+            }
+        }
+
+        if (records.length) {
+            // Update history
+            obj.setHistory({
+                action:'setValue',
+                records:records,
+                selection:obj.selectedCell,
+            });
+
+            // On after changes
+            obj.onafterchanges(el, records);
+        }
+    }
+
+    /**
+     * Update cell content
+     * 
+     * @param object cell
+     * @return void
+     */
+    obj.updateCell = function(x, y, value, force) {
+        // Changing value depending on the column type
+        if (obj.records[y][x].classList.contains('readonly') == true && ! force) {
+            // Do nothing
+        } else {
+            // On change
+            if (! obj.ignoreEvents) {
+                if (typeof(obj.options.onbeforechange) == 'function') {
+                    // Overwrite a value
+                    var val = obj.options.onbeforechange(el, obj.records[y][x], x, y, value);
+
+                    // If you return something this will overwrite the value
+                    if (val != undefined) {
+                        value = val;
+                    }
+                }
+            }
+
+            // History format
+            var record = {
+                col: x,
+                row: y,
+                newValue: value,
+                oldValue: obj.options.data[y][x],
+            }
+
+            if (obj.options.columns[x].editor) {
+                // Update data and cell
+                obj.options.data[y][x] = value;
+                obj.options.columns[x].editor.setValue(obj.records[y][x], value, force);
+            } else {
+                // Native functions
+                if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {
+                    // Unchecked all options
+                    if (obj.options.columns[x].type == 'radio') {
+                        for (var j = 0; j < obj.options.data.length; j++) {
+                            obj.options.data[j][x] = false;
+                        }
+                    }
+
+                    // Update data and cell
+                    obj.records[y][x].children[0].checked = (value == 1 || value == true || value == 'true' || value == 'TRUE') ? true : false;
+                    obj.options.data[y][x] = obj.records[y][x].children[0].checked;
+                } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {
+                    // Update data and cell
+                    obj.options.data[y][x] = value;
+                    obj.records[y][x].innerHTML = obj.getDropDownValue(x, value);
+                } else if (obj.options.columns[x].type == 'calendar') {
+                    // Update calendar
+                    var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[x].options.format);
+                    // Update data and cell
+                    obj.options.data[y][x] = value;
+                    obj.records[y][x].innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[x].options.format);
+                } else if (obj.options.columns[x].type == 'color') {
+                    // Update color
+                    obj.options.data[y][x] = value;
+                    // Render
+                    if (obj.options.columns[x].render == 'square') {
+                        var color = document.createElement('div');
+                        color.className = 'color';
+                        color.style.backgroundColor = value;
+                        obj.records[y][x].innerHTML = '';
+                        obj.records[y][x].appendChild(color);
+                    } else {
+                    obj.records[y][x].style.color = value;
+                        obj.records[y][x].innerHTML = value;
+                    }
+                } else if (obj.options.columns[x].type == 'image') {
+                    value = ''+value;
+                    obj.options.data[y][x] = value;
+                    obj.records[y][x].innerHTML = '';
+                    if (value && value.substr(0, 10) == 'data:image') {
+                        var img = document.createElement('img');
+                        img.src = value;
+                        obj.records[y][x].appendChild(img);
+                    }
+                } else {
+                    // Update data and cell
+                    obj.options.data[y][x] = value;
+                    // Label
+                    if (('' + value).substr(0,1) == '='  && obj.options.parseFormulas == true) {
+                        value = obj.executeFormula(value, x, y);
+                    }
+                    if (obj.options.columns[x].mask) {
+                        var decimal = obj.options.columns[x].decimal || '.';
+                        value = '' + jSuites.mask.run(value, obj.options.columns[x].mask, decimal);
+                    }
+                    obj.records[y][x].innerHTML = value;
+
+                    // Handle big text inside a cell
+                    if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true || obj.records[y][x].innerHTML.length > 200)) {
+                        obj.records[y][x].style.whiteSpace = 'pre-wrap';
+                    } else {
+                        obj.records[y][x].style.whiteSpace = '';
+                    }
+                }
+            }
+
+            // Overflow
+            if (x > 0) {
+                if (obj.options.data[y][x] || (obj.options.columns[x].type != 'text' && obj.options.columns[x].type != 'number')) {
+                    obj.records[y][x-1].style.overflow = 'hidden';
+                } else {
+                    obj.records[y][x-1].style.overflow = '';
+                }
+            }
+
+            // On change
+            if (! obj.ignoreEvents) {
+                if (typeof(obj.options.onchange) == 'function') {
+                    obj.options.onchange(el, (obj.records[y] && obj.records[y][x] ? obj.records[y][x] : null), x, y, value, record.oldValue);
+                }
+            }
+        }
+
+        return record;
+    }
+
+    /**
+     * Helper function to copy data using the corner icon
+     */
+    obj.copyData = function(o, d) {
+        // Get data from all selected cells
+        var data = obj.getData(true);
+
+        // Selected cells
+        var t0 = obj.selectedContainer[1];
+        var t1 = obj.selectedContainer[3];
+
+        // Cells
+        var x1 = parseInt(o.getAttribute('data-x'));
+        var y1 = parseInt(o.getAttribute('data-y'));
+        var x2 = parseInt(d.getAttribute('data-x'));
+        var y2 = parseInt(d.getAttribute('data-y'));
+
+        // Records
+        var records = [];
+        var lineNumber = 1;
+        var breakControl = false;
+
+        // Copy data procedure
+        var posx = 0;
+        var posy = 0;
+
+        for (var j = y1; j <= y2; j++) {
+            // Skip hidden rows
+            if (obj.rows[j] && obj.rows[j].style.display == 'none') {
+                continue;
+            }
+
+            // Controls
+            if (data[posy] == undefined) {
+                posy = 0;
+            }
+            posx = 0;
+
+            // Data columns
+            for (var i = x1; i <= x2; i++) {
+                // Update non-readonly
+                if (obj.records[j][i] && ! obj.records[j][i].classList.contains('readonly') && obj.records[j][i].style.display != 'none' && breakControl == false) {
+                    // Stop if contains value
+                    if (! obj.selection.length) {
+                        if (obj.options.data[j][i] != '') {
+                            breakControl = true;
+                            continue;
+                        }
+                    }
+
+                    // Column
+                    if (data[posy] == undefined) {
+                        posx = 0;
+                    } else if (data[posy][posx] == undefined) {
+                        posx = 0;
+                    } else {
+                        var value = data[posy][posx];
+                    }
+
+                    if (value && t0 == t1 && obj.options.autoIncrement == true) {
+                        if (obj.options.columns[i].type == 'text' || obj.options.columns[i].type == 'number') {
+                            if ((''+value).substr(0,1) == '=') {
+                                var tokens = value.match(/([A-Z]+[0-9]+)/g);
+
+                                if (tokens) {
+                                    var affectedTokens = [];
+                                    for (var index = 0; index < tokens.length; index++) {
+                                        var position = jexcel.getIdFromColumnName(tokens[index], 1);
+                                        position[1] += lineNumber;
+                                        var token = jexcel.getColumnNameFromId([position[0], position[1]]);
+
+                                        if (token != tokens[index]) {
+                                            affectedTokens[tokens[index]] = token;
+                                        }
+                                    }
+                                    // Update formula
+                                    if (affectedTokens) {
+                                        value = obj.updateFormula(value, affectedTokens)
+                                    }
+                                }
+                            } else {
+                                if (value == Number(value)) {
+                                    value = Number(value) + lineNumber;
+                                }
+                            }
+                        } else if (obj.options.columns[i].type == 'calendar') {
+                            var date = new Date(value);
+                            date.setDate(date.getDate() + lineNumber);
+                            value = date.getFullYear() + '-' + parseInt(date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':00';
+                        }
+                    }
+
+                    records.push(obj.updateCell(i, j, value));
+
+                    // Update all formulas in the chain
+                    obj.updateFormulaChain(i, j, records);
+                }
+                posx++;
+            }
+            posy++;
+            lineNumber++;
+        }
+
+        // Update history
+        obj.setHistory({
+            action:'setValue',
+            records:records,
+            selection:obj.selectedCell,
+        });
+
+        // Update table with custom configuration if applicable
+        obj.updateTable();
+
+        // On after changes
+        obj.onafterchanges(el, records);
+    }
+
+    /**
+     * Refresh current selection
+     */
+    obj.refreshSelection = function() {
+        if (obj.selectedCell) {
+            obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+        }
+    }
+
+    /**
+     * Move coords to A1 in case ovelaps with an excluded cell
+     */
+    obj.conditionalSelectionUpdate = function(type, o, d) {
+        if (type == 1) {
+            if (obj.selectedCell && ((o >= obj.selectedCell[1] && o <= obj.selectedCell[3]) || (d >= obj.selectedCell[1] && d <= obj.selectedCell[3]))) {
+                obj.resetSelection();
+                return;
+            }
+        } else {
+            if (obj.selectedCell && ((o >= obj.selectedCell[0] && o <= obj.selectedCell[2]) || (d >= obj.selectedCell[0] && d <= obj.selectedCell[2]))) {
+                obj.resetSelection();
+                return;
+            }
+        }
+    }
+
+    /**
+     * Clear table selection
+     */
+    obj.resetSelection = function(blur) {
+        // Remove style
+        if (! obj.highlighted.length) {
+            var previousStatus = 0;
+        } else {
+            var previousStatus = 1;
+
+            for (var i = 0; i < obj.highlighted.length; i++) {
+                obj.highlighted[i].classList.remove('highlight');
+                obj.highlighted[i].classList.remove('highlight-left');
+                obj.highlighted[i].classList.remove('highlight-right');
+                obj.highlighted[i].classList.remove('highlight-top');
+                obj.highlighted[i].classList.remove('highlight-bottom');
+                obj.highlighted[i].classList.remove('highlight-selected');
+
+                var px = parseInt(obj.highlighted[i].getAttribute('data-x'));
+                var py = parseInt(obj.highlighted[i].getAttribute('data-y'));
+
+                // Check for merged cells
+                if (obj.highlighted[i].getAttribute('data-merged')) {
+                    var colspan = parseInt(obj.highlighted[i].getAttribute('colspan'));
+                    var rowspan = parseInt(obj.highlighted[i].getAttribute('rowspan'));
+                    var ux = colspan > 0 ? px + (colspan - 1) : px;
+                    var uy = rowspan > 0 ? py + (rowspan - 1): py;
+                } else {
+                    var ux = px;
+                    var uy = py;
+                }
+
+                // Remove selected from headers
+                for (var j = px; j <= ux; j++) {
+                    if (obj.headers[j]) {
+                        obj.headers[j].classList.remove('selected');
+                    }
+                }
+
+                // Remove selected from rows
+                for (var j = py; j <= uy; j++) {
+                    if (obj.rows[j]) {
+                        obj.rows[j].classList.remove('selected');
+                    }
+                }
+            }
+        }
+
+        // Reset highlighed cells
+        obj.highlighted = [];
+
+        // Reset
+        obj.selectedCell = null;
+
+        // Hide corner
+        obj.corner.style.top = '-2000px';
+        obj.corner.style.left = '-2000px';
+
+        if (obj.ignoreEvents != true && blur == true) {
+            if (obj.options.onblur) {
+                if (typeof(obj.options.onblur) == 'function') {
+                    if (previousStatus == 1) {
+                        obj.options.onblur(el);
+                    }
+                }
+            }
+        }
+
+        return previousStatus;
+    }
+
+    /**
+     * Update selection based on two cells
+     */
+    obj.updateSelection = function(el1, el2, origin) {
+        var x1 = el1.getAttribute('data-x');
+        var y1 = el1.getAttribute('data-y');
+        if (el2) {
+            var x2 = el2.getAttribute('data-x');
+            var y2 = el2.getAttribute('data-y');
+        } else {
+            var x2 = x1;
+            var y2 = y1;
+        }
+
+        obj.updateSelectionFromCoords(x1, y1, x2, y2, origin);
+    }
+
+    /**
+     * Update selection from coords
+     */
+    obj.updateSelectionFromCoords = function(x1, y1, x2, y2, origin) {
+        // Reset Selection
+        var updated = null;
+        var previousState = obj.resetSelection();
+
+        // Same element
+        if (x2 == null) {
+            x2 = x1;
+        }
+        if (y2 == null) {
+            y2 = y1;
+        }
+
+        // Selection must be within the existing data
+        if (x1 >= obj.headers.length) {
+            x1 = obj.headers.length - 1;
+        }
+        if (y1 >= obj.rows.length) {
+            y1 = obj.rows.length - 1;
+        }
+        if (x2 >= obj.headers.length) {
+            x2 = obj.headers.length - 1;
+        }
+        if (y2 >= obj.rows.length) {
+            y2 = obj.rows.length - 1;
+        }
+
+        // Keep selected cell
+        obj.selectedCell = [x1, y1, x2, y2];
+
+        // Select cells
+        if (x1 != null) {
+            // Add selected cell
+            if (obj.records[y1][x1]) {
+                obj.records[y1][x1].classList.add('highlight-selected');
+            }
+
+            // Origin & Destination
+            if (parseInt(x1) < parseInt(x2)) {
+                var px = parseInt(x1);
+                var ux = parseInt(x2);
+            } else {
+                var px = parseInt(x2);
+                var ux = parseInt(x1);
+            }
+
+            if (parseInt(y1) < parseInt(y2)) {
+                var py = parseInt(y1);
+                var uy = parseInt(y2);
+            } else {
+                var py = parseInt(y2);
+                var uy = parseInt(y1);
+            }
+
+            // Verify merged columns
+            for (var i = px; i <= ux; i++) {
+                for (var j = py; j <= uy; j++) {
+                    if (obj.records[j][i] && obj.records[j][i].getAttribute('data-merged')) {
+                        var x = parseInt(obj.records[j][i].getAttribute('data-x'));
+                        var y = parseInt(obj.records[j][i].getAttribute('data-y'));
+                        var colspan = parseInt(obj.records[j][i].getAttribute('colspan'));
+                        var rowspan = parseInt(obj.records[j][i].getAttribute('rowspan'));
+
+                        if (colspan > 1) {
+                            if (x < px) {
+                                px = x;
+                            }
+                            if (x + colspan > ux) {
+                                ux = x + colspan - 1;
+                            }
+                        }
+
+                        if (rowspan) {
+                            if (y < py) {
+                                py = y;
+
+                            }
+                            if (y + rowspan > uy) {
+                                uy = y + rowspan - 1;
+                            }
+                        }
+                    }
+                }
+            }
+
+            // Limits
+            var borderLeft = null;
+            var borderRight = null;
+            var borderTop = null;
+            var borderBottom = null;
+
+            // Vertical limits
+            for (var j = py; j <= uy; j++) {
+                if (obj.rows[j].style.display != 'none') {
+                    if (borderTop == null) {
+                        borderTop = j;
+                    }
+                    borderBottom = j;
+                }
+            }
+
+            // Redefining styles
+            for (var i = px; i <= ux; i++) {
+                for (var j = py; j <= uy; j++) {
+                    if (obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') {
+                        obj.records[j][i].classList.add('highlight');
+                        obj.highlighted.push(obj.records[j][i]);
+                    }
+                }
+
+                // Horizontal limits
+                if (obj.options.columns[i].type != 'hidden') {
+                    if (borderLeft == null) {
+                        borderLeft = i;
+                    }
+                    borderRight = i;
+                }
+            }
+
+            // Create borders
+            if (! borderLeft) {
+                borderLeft = 0;
+            }
+            if (! borderRight) {
+                borderRight = 0;
+            }
+            for (var i = borderLeft; i <= borderRight; i++) {
+                if (obj.options.columns[i].type != 'hidden') {
+                    // Top border
+                    if (obj.records[borderTop][i]) {
+                        obj.records[borderTop][i].classList.add('highlight-top');
+                    }
+                    // Bottom border
+                    if (obj.records[borderBottom][i]) {
+                        obj.records[borderBottom][i].classList.add('highlight-bottom');
+                    }
+                    // Add selected from headers
+                    obj.headers[i].classList.add('selected');
+                }
+            }
+
+            for (var j = borderTop; j <= borderBottom; j++) {
+                if (obj.rows[j].style.display != 'none') {
+                    // Left border
+                    obj.records[j][borderLeft].classList.add('highlight-left');
+                    // Right border
+                    obj.records[j][borderRight].classList.add('highlight-right');
+                    // Add selected from rows
+                    obj.rows[j].classList.add('selected');
+                }
+            }
+
+            obj.selectedContainer = [ borderLeft, borderTop, borderRight, borderBottom ];
+        }
+
+        // Handle events
+        if (obj.ignoreEvents != true) {
+            if (obj.options.onfocus) {
+                if (typeof(obj.options.onfocus) == 'function') {
+                    if (previousState == 0) {
+                        obj.options.onfocus(el);
+                    }
+                }
+            }
+
+            if (typeof(obj.options.onselection) == 'function') {
+                obj.options.onselection(el, borderLeft, borderTop, borderRight, borderBottom, origin);
+            }
+        }
+
+        // Find corner cell
+        obj.updateCornerPosition();
+    }
+
+    /**
+     * Remove copy selection
+     * 
+     * @return void
+     */
+    obj.removeCopySelection = function() {
+        // Remove current selection
+        for (var i = 0; i < obj.selection.length; i++) {
+            obj.selection[i].classList.remove('selection');
+            obj.selection[i].classList.remove('selection-left');
+            obj.selection[i].classList.remove('selection-right');
+            obj.selection[i].classList.remove('selection-top');
+            obj.selection[i].classList.remove('selection-bottom');
+        }
+
+        obj.selection = [];
+    }
+
+    /**
+     * Update copy selection
+     * 
+     * @param int x, y
+     * @return void
+     */
+    obj.updateCopySelection = function(x3, y3) {
+        // Remove selection
+        obj.removeCopySelection();
+
+        // Get elements first and last
+        var x1 = obj.selectedContainer[0];
+        var y1 = obj.selectedContainer[1];
+        var x2 = obj.selectedContainer[2];
+        var y2 = obj.selectedContainer[3];
+
+        if (x3 && y3) {
+            if (x3 - x2 > 0) {
+                var px = parseInt(x2) + 1;
+                var ux = parseInt(x3);
+            } else {
+                var px = parseInt(x3);
+                var ux = parseInt(x1) - 1;
+            }
+
+            if (y3 - y2 > 0) {
+                var py = parseInt(y2) + 1;
+                var uy = parseInt(y3);
+            } else {
+                var py = parseInt(y3);
+                var uy = parseInt(y1) - 1;
+            }
+
+            if (ux - px < uy - py) {
+                var px = parseInt(x1);
+                var ux = parseInt(x2);
+            } else {
+                var py = parseInt(y1);
+                var uy = parseInt(y2);
+            }
+
+            for (var j = py; j <= uy; j++) {
+                for (var i = px; i <= ux; i++) {
+                    if (obj.records[j][i] && obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') {
+                        obj.records[j][i].classList.add('selection');
+                        obj.records[py][i].classList.add('selection-top');
+                        obj.records[uy][i].classList.add('selection-bottom');
+                        obj.records[j][px].classList.add('selection-left');
+                        obj.records[j][ux].classList.add('selection-right');
+
+                        // Persist selected elements
+                        obj.selection.push(obj.records[j][i]);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Update corner position
+     * 
+     * @return void
+     */
+    obj.updateCornerPosition = function() {
+        // If any selected cells
+        if (! obj.highlighted.length) {
+            obj.corner.style.top = '-2000px';
+            obj.corner.style.left = '-2000px';
+        } else {
+            // Get last cell
+            var last = obj.highlighted[obj.highlighted.length-1];
+            var x1 = obj.content.getBoundingClientRect().left;
+            var y1 = obj.content.getBoundingClientRect().top;
+
+            var x2 = last.getBoundingClientRect().left;
+            var y2 = last.getBoundingClientRect().top;
+            var w2 = last.getBoundingClientRect().width;
+            var h2 = last.getBoundingClientRect().height;
+
+            var x = (x2 - x1) + obj.content.scrollLeft + w2 - 4;
+            var y = (y2 - y1) + obj.content.scrollTop + h2 - 4;
+
+            // Place the corner in the correct place
+            obj.corner.style.top = y + 'px';
+            obj.corner.style.left = x + 'px';
+        }
+    }
+
+    /**
+     * Update scroll position based on the selection
+     */
+    obj.updateScroll = function(direction) {
+        // jExcel Container information
+        var x1 = obj.content.getBoundingClientRect().left;
+        var y1 = obj.content.getBoundingClientRect().top;
+        var w1 = obj.content.getBoundingClientRect().width;
+        var h1 = obj.content.getBoundingClientRect().height;
+
+        // Direction Left or Up
+        var reference = obj.records[obj.selectedCell[3]][obj.selectedCell[2]];
+
+        var x2 = reference.getBoundingClientRect().left;
+        var y2 = reference.getBoundingClientRect().top;
+        var w2 = reference.getBoundingClientRect().width;
+        var h2 = reference.getBoundingClientRect().height;
+
+        // Direction
+        if (direction == 0 || direction == 1) {
+            var x = (x2 - x1) + obj.content.scrollLeft;
+            var y = (y2 - y1) + obj.content.scrollTop - 2;
+        } else {
+            var x = (x2 - x1) + obj.content.scrollLeft + w2;
+            var y = (y2 - y1) + obj.content.scrollTop + h2;
+        }
+
+        // Top position check
+        if (y > (obj.content.scrollTop + 30) && y < (obj.content.scrollTop + h1)) {
+            // In the viewport
+        } else {
+            // Out of viewport
+            if (y < obj.content.scrollTop + 30) {
+                obj.content.scrollTop = y - h2;
+            } else {
+                obj.content.scrollTop = y - (h1 - 2);
+            }
+        }
+
+        // Left position check - TODO: change that to the bottom border of the element
+        if (x > (obj.content.scrollLeft) && x < (obj.content.scrollLeft + w1)) {
+            // In the viewport
+        } else {
+            // Out of viewport
+            if (x < obj.content.scrollLeft + 30) {
+                obj.content.scrollLeft = x;
+                if (obj.content.scrollLeft < 50) {
+                    obj.content.scrollLeft = 0;
+                }
+            } else {
+                obj.content.scrollLeft = x - (w1 - 20);
+            }
+        }
+    }
+
+    /**
+     * Get the column width
+     * 
+     * @param int column column number (first column is: 0)
+     * @return int current width
+     */
+    obj.getWidth = function(column) {
+        if (! column) {
+            // Get all headers
+            var data = [];
+            for (var i = 0; i < obj.headers.length; i++) {
+                data.push(obj.options.columns[i].width);
+            }
+        } else {
+            // In case the column is an object
+            if (typeof(column) == 'object') {
+                column = $(column).getAttribute('data-x');
+            }
+
+            data = obj.colgroup[column].getAttribute('width')
+        }
+
+        return data;
+    }
+
+    /**
+     * Set the column width
+     * 
+     * @param int column number (first column is: 0)
+     * @param int new column width
+     * @param int old column width
+     */
+    obj.setWidth = function (column, width, oldWidth) {
+        if (width > 0) {
+            // In case the column is an object
+            if (typeof(column) == 'object') {
+                column = $(column).getAttribute('data-x');
+            }
+
+            // Oldwidth
+            if (! oldWidth) {
+                obj.colgroup[column].getAttribute('width');
+            }
+
+            // Set width
+            obj.colgroup[column].setAttribute('width', width);
+            obj.options.columns[column].width = width;
+
+            // Keeping history of changes
+            obj.setHistory({
+                action:'setWidth',
+                column:column,
+                oldValue:oldWidth,
+                newValue:width,
+            });
+
+            // On resize column
+            if (obj.ignoreEvents != true) {
+                if (typeof(obj.options.onresizecolumn) == 'function') {
+                    obj.options.onresizecolumn(el, column, width, oldWidth);
+                }
+            }
+
+            // Update corner position
+            obj.updateCornerPosition();
+        }
+    }
+
+    /**
+     * Set the row height
+     * 
+     * @param row - row number (first row is: 0)
+     * @param height - new row height
+     * @param oldHeight - old row height
+     */
+    obj.setHeight = function (row, height, oldHeight) {
+        if (height > 0) {
+            // In case the column is an object
+            if (typeof(row) == 'object') {
+                row = $(row).getAttribute('data-y');
+            }
+
+            // Oldwidth
+            if (! oldHeight) {
+                obj.rows[row].getAttribute('height');
+            }
+
+            // Set width
+            obj.rows[row].setAttribute('height', height);
+
+            // Keep options updated
+            if (! obj.options.rows[row]) {
+                obj.options.rows[row] = {};
+            }
+            obj.options.rows[row].height = height;
+
+            // Keeping history of changes
+            obj.setHistory({
+                action:'setHeight',
+                row:row,
+                oldValue:oldHeight,
+                newValue:height,
+            });
+
+            // On resize column
+            if (obj.ignoreEvents != true) {
+                if (typeof(obj.options.onresizerow) == 'function') {
+                    obj.options.onresizerow(el, row, height, oldHeight);
+                }
+            }
+
+            // Update corner position
+            obj.updateCornerPosition();
+        }
+    }
+
+    /**
+     * Get the row height
+     * 
+     * @param row - row number (first row is: 0)
+     * @return height - current row height
+     */
+    obj.getHeight = function(row) {
+        if (! row) {
+            // Get height of all rows
+            var data = [];
+            for (var j = 0; j < obj.rows.length; j++) {
+                var h = obj.rows[j].style.height;
+                if (h) {
+                    data[j] = h;
+                }
+            }
+        } else {
+            // In case the row is an object
+            if (typeof(row) == 'object') {
+                row = $(row).getAttribute('data-y');
+            }
+
+            var data = obj.rows[row].style.height;
+        }
+
+        return data;
+    }
+
+    /**
+     * Get the column title
+     * 
+     * @param column - column number (first column is: 0)
+     * @param title - new column title
+     */
+    obj.getHeader = function(column) {
+        return obj.headers[column].innerText;
+    }
+
+    /**
+     * Set the column title
+     * 
+     * @param column - column number (first column is: 0)
+     * @param title - new column title
+     */
+    obj.setHeader = function(column, newValue) {
+        if (obj.headers[column]) {
+            var oldValue = obj.headers[column].innerText;
+
+            if (! newValue) {
+                newValue = prompt(obj.options.text.columnName, oldValue)
+            }
+
+            if (newValue) {
+                obj.headers[column].innerHTML = newValue;
+            }
+
+            obj.setHistory({
+                action: 'setHeader',
+                column: column,
+                oldValue: oldValue,
+                newValue: newValue
+            });
+
+            // On change
+            if (! obj.ignoreEvents) {
+                if (typeof(obj.options.onchangeheader) == 'function') {
+                    obj.options.onchangeheader(el, column, oldValue, newValue);
+                }
+            }
+        }
+    }
+
+    /**
+     * Get the headers
+     * 
+     * @param asArray
+     * @return mixed
+     */
+    obj.getHeaders = function (asArray) {
+        var title = [];
+
+        for (var i = 0; i < obj.headers.length; i++) {
+            title.push(obj.getHeader(i));
+        }
+
+        return asArray ? title : title.join(obj.options.csvDelimiter);
+    }
+
+    /**
+     * Get meta information from cell(s)
+     * 
+     * @return integer
+     */
+    obj.getMeta = function(cell, key) {
+        if (! cell) {
+            return obj.options.meta;
+        } else {
+            if (key) {
+                return obj.options.meta[cell] && obj.options.meta[cell][key] ? obj.options.meta[cell][key] : null;
+            } else {
+                return obj.options.meta[cell] ? obj.options.meta[cell] : null;
+            }
+        }
+    }
+
+    /**
+     * Set meta information to cell(s)
+     * 
+     * @return integer
+     */
+    obj.setMeta = function(o, k, v) {
+        if (! obj.options.meta) {
+            obj.options.meta = {}
+        }
+
+        if (k && v) {
+            // Set data value
+            if (! obj.options.meta[o]) {
+                obj.options.meta[o] = {};
+            }
+            obj.options.meta[o][k] = v;
+        } else {
+            // Apply that for all cells
+            var keys = Object.keys(o);
+            for (var i = 0; i < keys.length; i++) {
+                if (! obj.options.meta[keys[i]]) {
+                    obj.options.meta[keys[i]] = {};
+                }
+
+                var prop = Object.keys(o[keys[i]]);
+                for (var j = 0; j < prop.length; j++) {
+                    obj.options.meta[keys[i]][prop[j]] = o[keys[i]][prop[j]];
+                }
+            }
+        }
+
+        if (obj.ignoreEvents != true) {
+            if (typeof(obj.options.onchangemeta) == 'function') {
+                obj.options.onchangemeta(el, o, k, v);
+            }
+        }
+    }
+
+    /**
+     * Update meta information
+     * 
+     * @return integer
+     */
+    obj.updateMeta = function(affectedCells) {
+        if (obj.options.meta) {
+            var newMeta = {};
+            var keys = Object.keys(obj.options.meta);
+            for (var i = 0; i < keys.length; i++) {
+                if (affectedCells[keys[i]]) {
+                    newMeta[affectedCells[keys[i]]] = obj.options.meta[keys[i]];
+                } else {
+                    newMeta[keys[i]] = obj.options.meta[keys[i]];
+                }
+            }
+            // Update meta information
+            obj.options.meta = newMeta;
+        }
+    }
+
+    /**
+     * Get style information from cell(s)
+     * 
+     * @return integer
+     */
+    obj.getStyle = function(cell, key) {
+        // Cell
+        if (! cell) {
+            // Control vars
+            var data = {};
+
+            // Column and row length
+            var x = obj.options.data[0].length;
+            var y = obj.options.data.length;
+
+            // Go through the columns to get the data
+            for (var j = 0; j < y; j++) {
+                for (var i = 0; i < x; i++) {
+                    // Value
+                    var v = key ? obj.records[j][i].style[key] : obj.records[j][i].getAttribute('style');
+
+                    // Any meta data for this column?
+                    if (v) {
+                        // Column name
+                        var k = jexcel.getColumnNameFromId([i, j]);
+                        // Value
+                        data[k] = v;
+                    }
+                }
+            }
+
+           return data;
+        } else {
+            cell = jexcel.getIdFromColumnName(cell, true);
+
+            return key ? obj.records[cell[1]][cell[0]].style[key] : obj.records[cell[1]][cell[0]].getAttribute('style');
+        }
+    },
+
+    obj.resetStyle = function(o, ignoreHistoryAndEvents) {
+        var keys = Object.keys(o);
+        for (var i = 0; i < keys.length; i++) {
+            // Position
+            var cell = jexcel.getIdFromColumnName(keys[i], true);
+            if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) {
+                obj.records[cell[1]][cell[0]].setAttribute('style', '');
+            }
+        }
+        obj.setStyle(o, null, null, null, ignoreHistoryAndEvents);
+    }
+
+    /**
+     * Set meta information to cell(s)
+     * 
+     * @return integer
+     */
+    obj.setStyle = function(o, k, v, force, ignoreHistoryAndEvents) {
+        var newValue = {};
+        var oldValue = {};
+
+        // Apply style
+        var applyStyle = function(cellId, key, value) {
+            // Position
+            var cell = jexcel.getIdFromColumnName(cellId, true);
+
+            if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) {
+                // Current value
+                var currentValue = obj.records[cell[1]][cell[0]].style[key];
+
+                // Change layout
+                if (currentValue == value && ! force) {
+                    value = '';
+                    obj.records[cell[1]][cell[0]].style[key] = '';
+                } else {
+                    obj.records[cell[1]][cell[0]].style[key] = value;
+                }
+
+                // History
+                if (! oldValue[cellId]) {
+                    oldValue[cellId] = [];
+                }
+                if (! newValue[cellId]) {
+                    newValue[cellId] = [];
+                }
+
+                oldValue[cellId].push([key + ':' + currentValue]);
+                newValue[cellId].push([key + ':' + value]);
+            }
+        }
+
+        if (k && v) {
+            // Get object from string
+            if (typeof(o) == 'string') {
+                applyStyle(o, k, v);
+            } else {
+                // Avoid duplications
+                var oneApplication = [];
+                // Apply that for all cells
+                for (var i = 0; i < o.length; i++) {
+                    var x = o[i].getAttribute('data-x');
+                    var y = o[i].getAttribute('data-y');
+                    var cellName = jexcel.getColumnNameFromId([x, y]);
+                    // This happens when is a merged cell
+                    if (! oneApplication[cellName]) {
+                        applyStyle(cellName, k, v);
+                        oneApplication[cellName] = true;
+                    }
+                }
+            }
+        } else {
+            var keys = Object.keys(o);
+            for (var i = 0; i < keys.length; i++) {
+                var style = o[keys[i]];
+                if (typeof(style) == 'string') {
+                    style = style.split(';');
+                }
+                for (var j = 0; j < style.length; j++) {
+                    if (typeof(style[j]) == 'string') {
+                        style[j] = style[j].split(':');
+                    }
+                    // Apply value
+                    if (style[j][0].trim()) {
+                        applyStyle(keys[i], style[j][0].trim(), style[j][1]);
+                    }
+                }
+            }
+        }
+
+        var keys = Object.keys(oldValue);
+        for (var i = 0; i < keys.length; i++) {
+            oldValue[keys[i]] = oldValue[keys[i]].join(';');
+        }
+        var keys = Object.keys(newValue);
+        for (var i = 0; i < keys.length; i++) {
+            newValue[keys[i]] = newValue[keys[i]].join(';');
+        }
+
+        if (! ignoreHistoryAndEvents) {
+            // Keeping history of changes
+            obj.setHistory({
+                action: 'setStyle',
+                oldValue: oldValue,
+                newValue: newValue,
+            });
+        }
+
+        if (obj.ignoreEvents != true) {
+            if (typeof(obj.options.onchangestyle) == 'function') {
+                obj.options.onchangestyle(el, o, k, v);
+            }
+        }
+    }
+
+    /**
+     * Get cell comments
+     */
+    obj.getComments = function(cell, withAuthor) {
+        if (typeof(cell) == 'string') {
+            var cell = jexcel.getIdFromColumnName(cell, true);
+        }
+
+        if (withAuthor) {
+            return [obj.records[cell[1]][cell[0]].getAttribute('title'), obj.records[cell[1]][cell[0]].getAttribute('author')];
+        } else {
+            return obj.records[cell[1]][cell[0]].getAttribute('title') || '';
+        }
+    }
+
+    /**
+     * Set cell comments
+     */
+    obj.setComments = function(cellId, comments, author) {
+        if (typeof(cellId) == 'string') {
+            var cell = jexcel.getIdFromColumnName(cellId, true);
+        } else {
+            var cell = cellId;
+        }
+
+        // Keep old value
+        var title = obj.records[cell[1]][cell[0]].getAttribute('title');
+        var author = obj.records[cell[1]][cell[0]].getAttribute('data-author');
+        var oldValue = [ title, author ];
+
+        // Set new values
+        obj.records[cell[1]][cell[0]].setAttribute('title', comments ? comments : '');
+        obj.records[cell[1]][cell[0]].setAttribute('data-author', author ? author : '');
+
+        // Remove class if there is no comment
+        if (comments) {
+            obj.records[cell[1]][cell[0]].classList.add('jexcel_comments');
+        } else {
+            obj.records[cell[1]][cell[0]].classList.remove('jexcel_comments');
+        }
+
+        // Save history
+        obj.setHistory({
+            action:'setComments',
+            column: cellId,
+            newValue: [ comments, author ],
+            oldValue: oldValue,
+        });
+    }
+
+    /**
+     * Get table config information
+     */
+    obj.getConfig = function() {
+        var options = obj.options;
+        options.style = obj.getStyle();
+        options.mergeCells = obj.getMerge();
+
+        return options;
+    }
+
+    /**
+     * Sort data and reload table
+     */
+    obj.orderBy = function(column, order) {
+        if (column >= 0) {
+            // Merged cells
+            if (Object.keys(obj.options.mergeCells).length > 0) {
+                if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
+                    return false;
+                } else {
+                    // Remove merged cells
+                    obj.destroyMerged();
+                }
+            }
+
+            // Direction
+            if (order == null) {
+                order = obj.headers[column].classList.contains('arrow-down') ? 1 : 0;
+            } else {
+                order = order ? 1 : 0;
+            }
+
+            // Filter
+            Array.prototype.orderBy = function(p, o) {
+                return this.slice(0).sort(function(a, b) {
+                    var valueA = a[p] == '' ? '' : Number(a[p]) == a[p] ? Number(a[p]) : a[p].toLowerCase();
+                    var valueB = b[p] == '' ? '' : Number(b[p]) == b[p] ? Number(b[p]) : b[p].toLowerCase();
+
+                    if (! o) {
+                        return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? 1 : (valueA < valueB) ? -1 :  0;
+                    } else {
+                        return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? -1 : (valueA < valueB) ? 1 :  0;
+                    }
+                });
+            }
+
+            // Test order
+            var temp = [];
+            if (obj.options.columns[column].type == 'calendar' ||
+                obj.options.columns[column].type == 'checkbox' ||
+                obj.options.columns[column].type == 'radio') {
+                for (var j = 0; j < obj.options.data.length; j++) {
+                    temp[j] = [ j, obj.options.data[j][column] ];
+                }
+            } else {
+                for (var j = 0; j < obj.options.data.length; j++) {
+                    temp[j] = [ j, obj.records[j][column].innerHTML ];
+                }
+            }
+            temp = temp.orderBy(1, order);
+
+            // Save history
+            var newValue = [];
+            for (var j = 0; j < temp.length; j++) {
+                newValue[j] = temp[j][0];
+            }
+
+            // Save history
+            obj.setHistory({
+                action: 'orderBy',
+                rows: newValue,
+                column: column,
+                order: order,
+            });
+
+            // Update order
+            obj.updateOrderArrow(column, order);
+            obj.updateOrder(newValue);
+
+            // On sort event
+            if (obj.ignoreEvents != true) {
+                if (typeof(obj.options.onsort) == 'function') {
+                    obj.options.onsort(el, column, order);
+                }
+            }
+
+            return true;
+        }
+    }
+
+    /**
+     * Update order arrow
+     */
+    obj.updateOrderArrow = function(column, order) {
+        // Remove order
+        for (var i = 0; i < obj.headers.length; i++) {
+            obj.headers[i].classList.remove('arrow-up');
+            obj.headers[i].classList.remove('arrow-down');
+        }
+
+        // No order specified then toggle order
+        if (order) {
+            obj.headers[column].classList.add('arrow-up');
+        } else {
+            obj.headers[column].classList.add('arrow-down');
+        }
+    }
+
+    /**
+     * Update rows position
+     */
+    obj.updateOrder = function(rows) {
+        // History
+        var data = []
+        for (var j = 0; j < rows.length; j++) {
+            data[j] = obj.options.data[rows[j]];
+        }
+        obj.options.data = data;
+
+        var data = []
+        for (var j = 0; j < rows.length; j++) {
+            data[j] = obj.records[rows[j]];
+        }
+        obj.records = data;
+
+        var data = []
+        for (var j = 0; j < rows.length; j++) {
+            data[j] = obj.rows[rows[j]];
+        }
+        obj.rows = data;
+
+        // Update references
+        obj.updateTableReferences();
+
+        // Redo search
+        if (obj.searchInput.value) {
+            obj.search(obj.searchInput.value);
+        } else {
+            // Create page
+            obj.results = null;
+            obj.pageNumber = 0;
+
+            if (obj.options.pagination > 0) {
+                obj.page(0);
+            } else if (obj.options.lazyLoading == true) {
+                obj.loadPage(0);
+            } else {
+                for (var j = 0; j < obj.rows.length; j++) {
+                    obj.tbody.appendChild(obj.rows[j]);
+                }
+            }
+        }
+    }
+
+    /**
+     * Move row
+     * 
+     * @return void
+     */
+    obj.moveRow = function(o, d, ignoreDom) {
+        if (Object.keys(obj.options.mergeCells).length > 0) {
+            if (obj.isRowMerged(d).length) {
+                if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
+                    return false;
+                } else {
+                    obj.destroyMerged();
+                }
+            }
+        }
+
+        if (obj.options.search == true) {
+            if (obj.results && obj.results.length != obj.rows.length) {
+                if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {
+                    obj.resetSearch();
+                } else {
+                    return false;
+                }
+            }
+
+            obj.results = null;
+        }
+
+        if (! ignoreDom) {
+            if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[d]) >= 0) {
+                if (o > d) {
+                    obj.tbody.insertBefore(obj.rows[o], obj.rows[d]);
+                } else {
+                    obj.tbody.insertBefore(obj.rows[o], obj.rows[d].nextSibling);
+                }
+            } else {
+                obj.tbody.removeChild(obj.rows[o]);
+            }
+        }
+
+        // Place references in the correct position
+        obj.rows.splice(d, 0, obj.rows.splice(o, 1)[0]);
+        obj.records.splice(d, 0, obj.records.splice(o, 1)[0]);
+        obj.options.data.splice(d, 0, obj.options.data.splice(o, 1)[0]);
+
+        // Respect pagination
+        if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) {
+            obj.page(obj.pageNumber);
+        }
+
+        // Keeping history of changes
+        obj.setHistory({
+            action:'moveRow',
+            oldValue: o,
+            newValue: d,
+        });
+
+        // Update table references
+        obj.updateTableReferences();
+
+        // Events
+        if (obj.ignoreEvents != true) {
+            if (typeof(obj.options.onmoverow) == 'function') {
+                obj.options.onmoverow(el, o, d);
+            }
+        }
+    }
+
+    /**
+     * Insert a new row
+     * 
+     * @param mixed - number of blank lines to be insert or a single array with the data of the new row
+     * @param rowNumber
+     * @param insertBefore
+     * @return void
+     */
+    obj.insertRow = function(mixed, rowNumber, insertBefore) {
+        // Configuration
+        if (obj.options.allowInsertRow == true) {
+            // Records
+            var records = [];
+
+            // Data to be insert
+            var data = [];
+
+            // The insert could be lead by number of rows or the array of data
+            if (mixed > 0) {
+                var numOfRows = mixed;
+            } else {
+                var numOfRows = 1;
+
+                if (mixed) {
+                    data = mixed;
+                }
+            }
+
+            // Direction
+            var insertBefore = insertBefore ? true : false;
+
+            // Current column number
+            var lastRow = obj.options.data.length - 1;
+
+            if (rowNumber == undefined || rowNumber >= parseInt(lastRow) || rowNumber < 0) {
+                rowNumber = lastRow;
+            }
+
+            // Onbeforeinsertrow
+            if (typeof(obj.options.onbeforeinsertrow) == 'function') {
+                if (! obj.options.onbeforeinsertrow(el, rowNumber, numOfRows, insertBefore)) {
+                    console.log('onbeforeinsertrow returned false');
+
+                    return false;
+                }
+            }
+
+            // Merged cells
+            if (Object.keys(obj.options.mergeCells).length > 0) {
+                if (obj.isRowMerged(rowNumber, insertBefore).length) {
+                    if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
+                        return false;
+                    } else {
+                        obj.destroyMerged();
+                    }
+                }
+            }
+
+            // Clear any search
+            if (obj.options.search == true) {
+                if (obj.results && obj.results.length != obj.rows.length) {
+                    if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {
+                        obj.resetSearch();
+                    } else {
+                        return false;
+                    }
+                }
+
+                obj.results = null;
+            }
+
+            // Insertbefore
+            var rowIndex = (! insertBefore) ? rowNumber + 1 : rowNumber;
+
+            // Keep the current data
+            var currentRecords = obj.records.splice(rowIndex);
+            var currentData = obj.options.data.splice(rowIndex);
+            var currentRows = obj.rows.splice(rowIndex);
+
+            // Adding lines
+            var rowRecords = [];
+            var rowData = [];
+            var rowNode = [];
+
+            for (var row = rowIndex; row < (numOfRows + rowIndex); row++) {
+                // Push data to the data container
+                obj.options.data[row] = [];
+                for (var col = 0; col < obj.options.columns.length; col++) {
+                    obj.options.data[row][col]  = data[col] ? data[col] : '';
+                }
+                // Create row
+                var tr = obj.createRow(row, obj.options.data[row]);
+                // Append node
+                if (! currentRows[0] || Array.prototype.indexOf.call(obj.tbody.children, currentRows[0]) >= 0) {
+                    obj.tbody.insertBefore(tr, currentRows[0]);
+                }
+                // Record History
+                rowRecords.push(obj.records[row]);
+                rowData.push(obj.options.data[row]);
+                rowNode.push(tr);
+            }
+
+            // Copy the data back to the main data
+            Array.prototype.push.apply(obj.records, currentRecords);
+            Array.prototype.push.apply(obj.options.data, currentData);
+            Array.prototype.push.apply(obj.rows, currentRows);
+
+            // Respect pagination
+            if (obj.options.pagination > 0) {
+                obj.page(obj.pageNumber);
+            }
+
+            // Keep history
+            obj.setHistory({
+                action: 'insertRow',
+                rowNumber: rowNumber,
+                numOfRows: numOfRows,
+                insertBefore: insertBefore,
+                rowRecords: rowRecords,
+                rowData: rowData,
+                rowNode: rowNode,
+            });
+
+            // Remove table references
+            obj.updateTableReferences();
+
+            // Events
+            if (obj.ignoreEvents != true) {
+                if (typeof(obj.options.oninsertrow) == 'function') {
+                    obj.options.oninsertrow(el, rowNumber, numOfRows, rowRecords, insertBefore);
+                }
+            }
+        }
+    }
+
+    /**
+     * Delete a row by number
+     * 
+     * @param integer rowNumber - row number to be excluded
+     * @param integer numOfRows - number of lines
+     * @return void
+     */
+    obj.deleteRow = function(rowNumber, numOfRows) {
+        // Global Configuration
+        if (obj.options.allowDeleteRow == true) {
+            if (obj.options.allowDeletingAllRows == true || obj.options.data.length > 1) {
+                // Delete row definitions
+                if (rowNumber == undefined) {
+                    var number = obj.getSelectedRows();
+
+                    if (! number[0]) {
+                        rowNumber = obj.options.data.length - 1;
+                        numOfRows = 1;
+                    } else {
+                        rowNumber = parseInt(number[0].getAttribute('data-y'));
+                        numOfRows = number.length;
+                    }
+                }
+
+                // Last column
+                var lastRow = obj.options.data.length - 1;
+
+                if (rowNumber == undefined || rowNumber > lastRow || rowNumber < 0) {
+                    rowNumber = lastRow;
+                }
+
+                if (! numOfRows) {
+                    numOfRows = 1;
+                }
+
+                // Do not delete more than the number of recoreds
+                if (rowNumber + numOfRows >= obj.options.data.length) {
+                    numOfRows = obj.options.data.length - rowNumber;
+                }
+
+                // Onbeforedeleterow
+                if (typeof(obj.options.onbeforedeleterow) == 'function') {
+                    if (! obj.options.onbeforedeleterow(el, rowNumber, numOfRows)) {
+                        console.log('onbeforedeleterow returned false');
+                        return false;
+                    }
+                }
+
+                if (parseInt(rowNumber) > -1) {
+                    // Merged cells
+                    var mergeExists = false;
+                    if (Object.keys(obj.options.mergeCells).length > 0) {
+                        for (var row = rowNumber; row < rowNumber + numOfRows; row++) {
+                            if (obj.isRowMerged(row, false).length) {
+                                mergeExists = true;
+                            }
+                        }
+                    }
+                    if (mergeExists) {
+                        if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
+                            return false;
+                        } else {
+                            obj.destroyMerged();
+                        }
+                    }
+
+                    // Clear any search
+                    if (obj.options.search == true) {
+                        if (obj.results && obj.results.length != obj.rows.length) {
+                            if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {
+                                obj.resetSearch();
+                            } else {
+                                return false;
+                            }
+                        }
+
+                        obj.results = null;
+                    }
+
+                    // Remove node
+                    for (var row = rowNumber; row < rowNumber + numOfRows; row++) {
+                        if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[row]) >= 0) {
+                            obj.rows[row].className = '';
+                            obj.rows[row].parentNode.removeChild(obj.rows[row]);
+                        }
+                    }
+
+                    // Remove data
+                    var rowRecords = obj.records.splice(rowNumber, numOfRows);
+                    var rowData = obj.options.data.splice(rowNumber, numOfRows);
+                    var rowNode = obj.rows.splice(rowNumber, numOfRows);
+
+                    // Respect pagination
+                    if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) {
+                        obj.page(obj.pageNumber);
+                    }
+
+                    // Remove selection
+                    obj.conditionalSelectionUpdate(1, rowNumber, (rowNumber + numOfRows) - 1);
+
+                    // Keep history
+                    obj.setHistory({
+                        action: 'deleteRow',
+                        rowNumber: rowNumber,
+                        numOfRows: numOfRows,
+                        insertBefore: 1,
+                        rowRecords: rowRecords,
+                        rowData: rowData,
+                        rowNode: rowNode
+                    });
+
+                    // Remove table references
+                    obj.updateTableReferences();
+
+                    // Events
+                    if (obj.ignoreEvents != true) {
+                        if (typeof(obj.options.ondeleterow) == 'function') {
+                            obj.options.ondeleterow(el, rowNumber, numOfRows, rowRecords);
+                        }
+                    }
+                }
+            } else {
+                console.error('JEXCEL. It is not possible to delete the last row');
+            }
+        }
+    }
+
+
+    /**
+     * Move column
+     * 
+     * @return void
+     */
+    obj.moveColumn = function(o, d) {
+        if (Object.keys(obj.options.mergeCells).length > 0) {
+            if (obj.isColMerged(d).length) {
+                if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
+                    return false;
+                } else {
+                    obj.destroyMerged();
+                }
+            }
+        }
+
+        var o = parseInt(o);
+        var d = parseInt(d);
+
+        if (o > d) {
+            obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d]);
+            obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d]);
+
+            for (var j = 0; j < obj.rows.length; j++) {
+                obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d]);
+            }
+        } else {
+            obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d].nextSibling);
+            obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d].nextSibling);
+
+            for (var j = 0; j < obj.rows.length; j++) {
+                obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d].nextSibling);
+            }
+        }
+
+        obj.options.columns.splice(d, 0, obj.options.columns.splice(o, 1)[0]);
+        obj.headers.splice(d, 0, obj.headers.splice(o, 1)[0]);
+        obj.colgroup.splice(d, 0, obj.colgroup.splice(o, 1)[0]);
+
+        for (var j = 0; j < obj.rows.length; j++) {
+            obj.options.data[j].splice(d, 0, obj.options.data[j].splice(o, 1)[0]);
+            obj.records[j].splice(d, 0, obj.records[j].splice(o, 1)[0]);
+        }
+
+        // Keeping history of changes
+        obj.setHistory({
+            action:'moveColumn',
+            oldValue: o,
+            newValue: d,
+        });
+
+        // Update table references
+        obj.updateTableReferences();
+
+        // Events
+        if (obj.ignoreEvents != true) {
+            if (typeof(obj.options.onmovecolumn) == 'function') {
+                obj.options.onmovecolumn(el, o, d);
+            }
+        }
+    }
+
+
+    /**
+     * Insert a new column
+     * 
+     * @param mixed - num of columns to be added or data to be added in one single column
+     * @param int columnNumber - number of columns to be created
+     * @param bool insertBefore
+     * @param object properties - column properties
+     * @return void
+     */
+    obj.insertColumn = function(mixed, columnNumber, insertBefore, properties) {
+        // Configuration
+        if (obj.options.allowInsertColumn == true) {
+            // Records
+            var records = [];
+
+            // Data to be insert
+            var data = [];
+
+            // The insert could be lead by number of rows or the array of data
+            if (mixed > 0) {
+                var numOfColumns = mixed;
+            } else {
+                var numOfColumns = 1;
+
+                if (mixed) {
+                    data = mixed;
+                }
+            }
+
+            // Direction
+            var insertBefore = insertBefore ? true : false;
+
+            // Current column number
+            var lastColumn = obj.options.columns.length - 1;
+
+            // Confirm position
+            if (columnNumber == undefined || columnNumber >= parseInt(lastColumn) || columnNumber < 0) {
+                columnNumber = lastColumn;
+            }
+
+            // Onbeforeinsertcolumn
+            if (typeof(obj.options.onbeforeinsertcolumn) == 'function') {
+                if (! obj.options.onbeforeinsertcolumn(el, columnNumber, numOfColumns, insertBefore)) {
+                    console.log('onbeforeinsertcolumn returned false');
+
+                    return false;
+                }
+            }
+
+            // Merged cells
+            if (Object.keys(obj.options.mergeCells).length > 0) {
+                if (obj.isColMerged(columnNumber, insertBefore).length) {
+                    if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
+                        return false;
+                    } else {
+                        obj.destroyMerged();
+                    }
+                }
+            }
+
+            // Create default properties
+            if (! properties) {
+                properties = [];
+            }
+
+            for (var i = 0; i < numOfColumns; i++) {
+                if (! properties[i]) {
+                    properties[i] = { type:'text', source:[], options:[], width:obj.options.defaultColWidth, align:obj.options.defaultColAlign };
+                }
+            }
+
+            // Insert before
+            var columnIndex = (! insertBefore) ? columnNumber + 1 : columnNumber;
+            obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, properties);
+
+            // Open space in the containers
+            var currentHeaders = obj.headers.splice(columnIndex);
+            var currentColgroup = obj.colgroup.splice(columnIndex);
+
+            // History
+            var historyHeaders = [];
+            var historyColgroup = [];
+            var historyRecords = [];
+            var historyData = [];
+
+            // Add new headers
+            for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) {
+                obj.createCellHeader(col);
+                obj.headerContainer.insertBefore(obj.headers[col], obj.headerContainer.children[col+1]);
+                obj.colgroupContainer.insertBefore(obj.colgroup[col], obj.colgroupContainer.children[col+1]);
+
+                historyHeaders.push(obj.headers[col]);
+                historyColgroup.push(obj.colgroup[col]);
+            }
+
+            // Adding visual columns
+            for (var row = 0; row < obj.options.data.length; row++) {
+                // Keep the current data
+                var currentData = obj.options.data[row].splice(columnIndex);
+                var currentRecord = obj.records[row].splice(columnIndex);
+
+                // History
+                historyData[row] = [];
+                historyRecords[row] = [];
+
+                for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) {
+                    // New value
+                    var value = data[row] ? data[row] : '';
+                    obj.options.data[row][col] = value;
+                    // New cell
+                    var td = obj.createCell(col, row, obj.options.data[row][col]);
+                    obj.records[row][col] = td;
+                    // Add cell to the row
+                    if (obj.rows[row]) {
+                        obj.rows[row].insertBefore(td, obj.rows[row].children[col+1]);
+                    }
+
+                    // Record History
+                    historyData[row].push(value);
+                    historyRecords[row].push(td);
+                }
+
+                // Copy the data back to the main data
+                Array.prototype.push.apply(obj.options.data[row], currentData);
+                Array.prototype.push.apply(obj.records[row], currentRecord);
+            }
+
+            Array.prototype.push.apply(obj.headers, currentHeaders);
+            Array.prototype.push.apply(obj.colgroup, currentColgroup);
+
+            // Adjust nested headers
+            if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
+                // Flexible way to handle nestedheaders
+                if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
+                    for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
+                        var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + numOfColumns;
+                        obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;
+                        obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);
+                    }
+                } else {
+                    var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + numOfColumns;
+                    obj.options.nestedHeaders[0].colspan = colspan;
+                    obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);
+                }
+            }
+
+            // Keep history
+            obj.setHistory({
+                action: 'insertColumn',
+                columnNumber:columnNumber,
+                numOfColumns:numOfColumns,
+                insertBefore:insertBefore,
+                columns:properties,
+                headers:historyHeaders,
+                colgroup:historyColgroup,
+                records:historyRecords,
+                data:historyData,
+            });
+
+            // Remove table references
+            obj.updateTableReferences();
+
+            // Events
+            if (obj.ignoreEvents != true) {
+                if (typeof(obj.options.oninsertcolumn) == 'function') {
+                    obj.options.oninsertcolumn(el, columnNumber, numOfColumns);
+                }
+            }
+        }
+    }
+
+    /**
+     * Delete a column by number
+     * 
+     * @param integer columnNumber - reference column to be excluded
+     * @param integer numOfColumns - number of columns to be excluded from the reference column
+     * @return void
+     */
+    obj.deleteColumn = function(columnNumber, numOfColumns) {
+        // Global Configuration
+        if (obj.options.allowDeleteColumn == true) {
+            if (obj.headers.length > 1) {
+                // Delete column definitions
+                if (columnNumber == undefined) {
+                    var number = obj.getSelectedColumns(true);
+
+                    if (! number.length) {
+                        // Remove last column
+                        columnNumber = obj.headers.length - 1;
+                        numOfColumns = 1;
+                    } else {
+                        // Remove selected
+                        columnNumber = parseInt(number[0]);
+                        numOfColumns = parseInt(number.length);
+                    }
+                }
+
+                // Lasat column
+                var lastColumn = obj.options.data[0].length - 1;
+
+                if (columnNumber == undefined || columnNumber > lastColumn || columnNumber < 0) {
+                    columnNumber = lastColumn;
+                }
+
+                // Minimum of columns to be delete is 1
+                if (! numOfColumns) {
+                    numOfColumns = 1;
+                }
+
+
+
+                // Can't delete more than the limit of the table
+                if (numOfColumns > obj.options.data[0].length - columnNumber) {
+                    numOfColumns = obj.options.data[0].length - columnNumber;
+                }
+
+                // onbeforedeletecolumn
+                if (typeof(obj.options.onbeforedeletecolumn) == 'function') {
+                   if (! obj.options.onbeforedeletecolumn(el, columnNumber, numOfColumns)) {
+                      console.log('onbeforedeletecolumn returned false');
+                      return false;
+                   }
+                }
+
+                // Can't remove the last column
+                if (parseInt(columnNumber) > -1) {
+                    // Merged cells
+                    var mergeExists = false;
+                    if (Object.keys(obj.options.mergeCells).length > 0) {
+                        for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {
+                            if (obj.isColMerged(col, false).length) {
+                                mergeExists = true;
+                            }
+                        }
+                    }
+                    if (mergeExists) {
+                        if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {
+                            return false;
+                        } else {
+                            obj.destroyMerged();
+                        }
+                    }
+
+                    // Delete the column properties
+                    var columns = obj.options.columns.splice(columnNumber, numOfColumns);
+
+                    for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {
+                        obj.colgroup[col].className = '';
+                        obj.headers[col].className = '';
+                        obj.colgroup[col].parentNode.removeChild(obj.colgroup[col]);
+                        obj.headers[col].parentNode.removeChild(obj.headers[col]);
+                    }
+
+                    var historyHeaders = obj.headers.splice(columnNumber, numOfColumns);
+                    var historyColgroup = obj.colgroup.splice(columnNumber, numOfColumns);
+                    var historyRecords = [];
+                    var historyData = [];
+
+                    for (var row = 0; row < obj.options.data.length; row++) {
+                        for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {
+                            obj.records[row][col].className = '';
+                            obj.records[row][col].parentNode.removeChild(obj.records[row][col]);
+                        }
+                    }
+
+                    // Delete headers
+                    for (var row = 0; row < obj.options.data.length; row++) {
+                        // History
+                        historyData[row] = obj.options.data[row].splice(columnNumber, numOfColumns);
+                        historyRecords[row] = obj.records[row].splice(columnNumber, numOfColumns);
+                    }
+
+                    // Remove selection
+                    obj.conditionalSelectionUpdate(0, columnNumber, (columnNumber + numOfColumns) - 1);
+
+                    // Adjust nested headers
+                    if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
+                        // Flexible way to handle nestedheaders
+                        if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
+                            for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
+                                var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - numOfColumns;
+                                obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;
+                                obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);
+                            }
+                        } else {
+                            var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - numOfColumns;
+                            obj.options.nestedHeaders[0].colspan = colspan;
+                            obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);
+                        }
+                    }
+
+                    // Keeping history of changes
+                    obj.setHistory({
+                        action:'deleteColumn',
+                        columnNumber:columnNumber,
+                        numOfColumns:numOfColumns,
+                        insertBefore: 1,
+                        columns:columns,
+                        headers:historyHeaders,
+                        colgroup:historyColgroup,
+                        records:historyRecords,
+                        data:historyData,
+                    });
+
+                    // Update table references
+                    obj.updateTableReferences();
+
+                    // Delete
+                    if (obj.ignoreEvents != true) {
+                        if (typeof(obj.options.ondeletecolumn) == 'function') {
+                            obj.options.ondeletecolumn(el, columnNumber, numOfColumns, historyRecords);
+                        }
+                    }
+                }
+            } else {
+                console.error('JEXCEL. It is not possible to delete the last column');
+            }
+        }
+    }
+
+    /**
+     * Get seleted rows numbers
+     * 
+     * @return array
+     */
+    obj.getSelectedRows = function(asIds) {
+        var rows = [];
+        // Get all selected rows
+        for (var j = 0; j < obj.rows.length; j++) {
+            if (obj.rows[j].classList.contains('selected')) {
+                if (asIds) {
+                    rows.push(j);
+                } else {
+                    rows.push(obj.rows[j]);
+                }
+            }
+        }
+
+        return rows;
+    },
+
+    /**
+     * Get seleted column numbers
+     * 
+     * @return array
+     */
+    obj.getSelectedColumns = function() {
+        var cols = [];
+        // Get all selected cols
+        for (var i = 0; i < obj.headers.length; i++) {
+            if (obj.headers[i].classList.contains('selected')) {
+                cols.push(i);
+            }
+        }
+
+        return cols;
+    }
+
+    /**
+     * Get highlighted
+     * 
+     * @return array
+     */
+    obj.getHighlighted = function() {
+        return obj.highlighted;
+    }
+
+    /**
+     * Update cell references
+     * 
+     * @return void
+     */
+    obj.updateTableReferences = function() {
+        // Update headers
+        for (var i = 0; i < obj.headers.length; i++) {
+            var x = obj.headers[i].getAttribute('data-x');
+
+            if (x != i) {
+                // Update coords
+                obj.headers[i].setAttribute('data-x', i);
+                // Title
+                if (! obj.headers[i].getAttribute('title')) {
+                    obj.headers[i].innerHTML = jexcel.getColumnName(i);
+                }
+            }
+        }
+
+        // Update all rows
+        for (var j = 0; j < obj.rows.length; j++) {
+            if (obj.rows[j]) {
+                var y = obj.rows[j].getAttribute('data-y');
+
+                if (y != j) {
+                    // Update coords
+                    obj.rows[j].setAttribute('data-y', j);
+                    obj.rows[j].children[0].setAttribute('data-y', j);
+                    // Row number
+                    obj.rows[j].children[0].innerHTML = j + 1;
+                }
+            }
+        }
+
+        // Regular cells affected by this change
+        var affectedTokens = [];
+        var mergeCellUpdates = [];
+
+        // Update cell
+        var updatePosition = function(x,y,i,j) {
+            if (x != i) {
+                obj.records[j][i].setAttribute('data-x', i);
+            }
+            if (y != j) {
+                obj.records[j][i].setAttribute('data-y', j);
+            }
+
+            // Other updates
+            if (x != i || y != j) {
+                var columnIdFrom = jexcel.getColumnNameFromId([x, y]);
+                var columnIdTo = jexcel.getColumnNameFromId([i, j]);
+                affectedTokens[columnIdFrom] = columnIdTo;
+            }
+        }
+
+        for (var j = 0; j < obj.records.length; j++) {
+            for (var i = 0; i < obj.records[0].length; i++) {
+                if (obj.records[j][i]) {
+                    // Current values
+                    var x = obj.records[j][i].getAttribute('data-x');
+                    var y = obj.records[j][i].getAttribute('data-y');
+
+                    // Update column
+                    if (obj.records[j][i].getAttribute('data-merged')) {
+                        var columnIdFrom = jexcel.getColumnNameFromId([x, y]);
+                        var columnIdTo = jexcel.getColumnNameFromId([i, j]);
+                        if (mergeCellUpdates[columnIdFrom] == null) {
+                            if (columnIdFrom == columnIdTo) {
+                                mergeCellUpdates[columnIdFrom] = false;
+                            } else {
+                                var totalX = parseInt(i - x);
+                                var totalY = parseInt(j - y);
+                                mergeCellUpdates[columnIdFrom] = [ columnIdTo, totalX, totalY ];
+                            }
+                        }
+                    } else {
+                        updatePosition(x,y,i,j);
+                    }
+                }
+            }
+        }
+
+        // Update merged if applicable
+        var keys = Object.keys(mergeCellUpdates);
+        if (keys.length) {
+            for (var i = 0; i < keys.length; i++) {
+                if (mergeCellUpdates[keys[i]]) {
+                    var info = jexcel.getIdFromColumnName(keys[i], true)
+                    var x = info[0];
+                    var y = info[1];
+                    updatePosition(x,y,x + mergeCellUpdates[keys[i]][1],y + mergeCellUpdates[keys[i]][2]);
+
+                    var columnIdFrom = keys[i];
+                    var columnIdTo = mergeCellUpdates[keys[i]][0];
+                    for (var j = 0; j < obj.options.mergeCells[columnIdFrom][2].length; j++) {
+                        var x = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-x'));
+                        var y = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-y'));
+                        obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-x', x + mergeCellUpdates[keys[i]][1]);
+                        obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-y', y + mergeCellUpdates[keys[i]][2]);
+                    }
+
+                    obj.options.mergeCells[columnIdTo] = obj.options.mergeCells[columnIdFrom];
+                    delete(obj.options.mergeCells[columnIdFrom]);
+                }
+            }
+        }
+
+        // Update formulas
+        obj.updateFormulas(affectedTokens);
+
+        // Update meta data
+        obj.updateMeta(affectedTokens);
+
+        // Refresh selection
+        obj.refreshSelection();
+
+        // Update table with custom configuration if applicable
+        obj.updateTable();
+    }
+
+    /**
+     * Custom settings for the cells
+     */
+    obj.updateTable = function() {
+        // Check for spare
+        if (obj.options.minSpareRows > 0) {
+            var numBlankRows = 0;
+            for (var j = obj.rows.length - 1; j >= 0; j--) {
+                var test = false;
+                for (var i = 0; i < obj.headers.length; i++) {
+                    if (obj.options.data[j][i]) {
+                        test = true;
+                    }
+                }
+                if (test) {
+                    break;
+                } else {
+                    numBlankRows++;
+                }
+            }
+
+            if (obj.options.minSpareRows - numBlankRows > 0) {
+                obj.insertRow(obj.options.minSpareRows - numBlankRows)
+            }
+        }
+
+        if (obj.options.minSpareCols > 0) {
+            var numBlankCols = 0;
+            for (var i = obj.headers.length - 1; i >= 0 ; i--) {
+                var test = false;
+                for (var j = 0; j < obj.rows.length; j++) {
+                    if (obj.options.data[j][i]) {
+                        test = true;
+                    }
+                }
+                if (test) {
+                    break;
+                } else {
+                    numBlankCols++;
+                }
+            }
+
+            if (obj.options.minSpareCols - numBlankCols > 0) {
+                obj.insertColumn(obj.options.minSpareCols - numBlankCols)
+            }
+        }
+
+        // Customizations by the developer
+        if (typeof(obj.options.updateTable) == 'function') {
+            for (var j = 0; j < obj.rows.length; j++) {
+                for (var i = 0; i < obj.headers.length; i++) {
+                    obj.options.updateTable(el, obj.records[j][i], i, j, obj.options.data[j][i], obj.records[j][i].innerText, jexcel.getColumnNameFromId([i, j]));
+                }
+            }
+        }
+
+        // Update corner position
+        setTimeout(function() {
+            obj.updateCornerPosition();
+        },0);
+    }
+
+    /**
+     * Show index column
+     */
+    obj.showIndex = function() {
+        obj.table.classList.remove('jexcel_hidden_index');
+    }
+
+    /**
+     * Hide index column
+     */
+    obj.hideIndex = function() {
+        obj.table.classList.add('jexcel_hidden_index');
+    }
+
+    /**
+     * Update all related cells in the chain
+     */
+    var chainLoopProtection = [];
+
+    obj.updateFormulaChain = function(x, y, records) {
+        var cellId = jexcel.getColumnNameFromId([x, y]);
+        if (obj.formula[cellId] && obj.formula[cellId].length > 0) {
+            if (chainLoopProtection[cellId]) {
+                obj.records[y][x].innerHTML = '#ERROR';
+                obj.formula[cellId] = '';
+            } else {
+                // Protection
+                chainLoopProtection[cellId] = true;
+
+                for (var i = 0; i < obj.formula[cellId].length; i++) {
+                    var cell = jexcel.getIdFromColumnName(obj.formula[cellId][i], true);
+                    // Update cell
+                    var value = ''+obj.options.data[cell[1]][cell[0]];
+                    if (value.substr(0,1) == '=') {
+                        records.push(obj.updateCell(cell[0], cell[1], value, true));
+                    } else {
+                        // No longer a formula, remove from the chain
+                        Object.keys(obj.formula)[i] = null;
+                    }
+                    obj.updateFormulaChain(cell[0], cell[1], records);
+                }
+            }
+        }
+
+        chainLoopProtection = [];
+    }
+
+    /**
+     * Update formulas
+     */
+    obj.updateFormulas = function(referencesToUpdate) {
+        // Update formulas
+        for (var j = 0; j < obj.options.data.length; j++) {
+            for (var i = 0; i < obj.options.data[0].length; i++) {
+                var value = '' + obj.options.data[j][i];
+                // Is formula
+                if (value.substr(0,1) == '=') {
+                    // Replace tokens
+                    var newFormula = obj.updateFormula(value, referencesToUpdate);
+                    if (newFormula != value) {
+                        obj.options.data[j][i] = newFormula;
+                    }
+                }
+            }
+        }
+
+        // Update formula chain
+        var formula = [];
+        var keys = Object.keys(obj.formula);
+        for (var j = 0; j < keys.length; j++) {
+            // Current key and values
+            var key = keys[j];
+            var value = obj.formula[key];
+            // Update key
+            if (referencesToUpdate[key]) {
+                key = referencesToUpdate[key];
+            }
+            // Update values
+            formula[key] = [];
+            for (var i = 0; i < value.length; i++) {
+                var letter = value[i];
+                if (referencesToUpdate[letter]) {
+                    letter = referencesToUpdate[letter];
+                }
+                formula[key].push(letter);
+            }
+        }
+        obj.formula = formula;
+    }
+
+    /**
+     * Update formula
+     */
+    obj.updateFormula = function(formula, referencesToUpdate) {
+        var testLetter = /[A-Z]/;
+        var testNumber = /[0-9]/;
+
+        var newFormula = '';
+        var letter = null;
+        var number = null;
+        var token = '';
+
+        for (var index = 0; index < formula.length; index++) {
+            if (testLetter.exec(formula[index])) {
+                letter = 1;
+                number = 0;
+                token += formula[index];
+            } else if (testNumber.exec(formula[index])) {
+                number = letter ? 1 : 0;
+                token += formula[index];
+            } else {
+                if (letter && number) {
+                    token = referencesToUpdate[token] ? referencesToUpdate[token] : token;
+                }
+                newFormula += token;
+                newFormula += formula[index];
+                letter = 0;
+                number = 0;
+                token = '';
+            }
+        }
+
+        if (token) {
+            if (letter && number) {
+                token = referencesToUpdate[token] ? referencesToUpdate[token] : token;
+            }
+            newFormula += token;
+        }
+
+        return newFormula;
+    }
+
+    /**
+     * Parse formulas
+     */
+    obj.executeFormula = function(expression, x, y) {
+
+        var formulaResults = [];
+        var formulaLoopProtection = [];
+
+        // Execute formula with loop protection
+        var execute = function(expression, x, y) {
+         // Parent column identification
+            var parentId = jexcel.getColumnNameFromId([x, y]);
+
+            // Code protection
+            if (formulaLoopProtection[parentId]) {
+                console.error('Reference loop detected');
+                return '#ERROR';
+            }
+
+            formulaLoopProtection[parentId] = true;
+
+            // Convert range tokens
+            var tokensUpdate = function(tokens) {
+                for (var index = 0; index < tokens.length; index++) {
+                    var f = [];
+                    var token = tokens[index].split(':');
+                    var e1 = jexcel.getIdFromColumnName(token[0], true);
+                    var e2 = jexcel.getIdFromColumnName(token[1], true);
+
+                    if (e1[0] <= e2[0]) {
+                        var x1 = e1[0];
+                        var x2 = e2[0];
+                    } else {
+                        var x1 = e2[0];
+                        var x2 = e1[0];
+                    }
+
+                    if (e1[1] <= e2[1]) {
+                        var y1 = e1[1];
+                        var y2 = e2[1];
+                    } else {
+                        var y1 = e2[1];
+                        var y2 = e1[1];
+                    }
+
+                    for (var j = y1; j <= y2; j++) {
+                        for (var i = x1; i <= x2; i++) {
+                            f.push(jexcel.getColumnNameFromId([i, j]));
+                        }
+                    }
+
+                    expression = expression.replace(tokens[index], f.join(','));
+                }
+            }
+
+            var tokens = expression.match(/([A-Z]+[0-9]+)\:([A-Z]+[0-9]+)/g);
+            if (tokens && tokens.length) {
+                tokensUpdate(tokens);
+            }
+
+            // String
+            var evalstring = '';
+
+            // Get tokens
+            var tokens = expression.match(/([A-Z]+[0-9]+)/g);
+
+            // Direct self-reference protection
+            if (tokens && tokens.indexOf(parentId) > -1) {
+                console.error('Self Reference detected');
+                return '#ERROR';
+            } else {
+                if (tokens) {
+                    for (var i = 0; i < tokens.length; i++) {
+                        // Keep chain
+                        if (! obj.formula[tokens[i]]) {
+                            obj.formula[tokens[i]] = [];
+                        }
+                        // Is already in the register
+                        if (obj.formula[tokens[i]].indexOf(parentId) < 0) {
+                            obj.formula[tokens[i]].push(parentId);
+                        }
+
+                        // Do not calculate again
+                        if (eval('typeof(' + tokens[i] + ') == "undefined"')) {
+                            // Coords
+                            var position = jexcel.getIdFromColumnName(tokens[i], 1);
+                            // Get value
+                            if (typeof(obj.options.data[position[1]]) != 'undefined' && typeof(obj.options.data[position[1]][position[0]]) != 'undefined') {
+                                var value = obj.options.data[position[1]][position[0]];
+                            } else {
+                                var value = '';
+                            }
+                            // Get column data
+                            if ((''+value).substr(0,1) == '=') {
+                                if (formulaResults[tokens[i]]) {
+                                    value = formulaResults[tokens[i]];
+                                } else {
+                                    value = execute(value, position[0], position[1]);
+                                    formulaResults[tokens[i]] = value;
+                                }
+                            }
+                            // Type!
+                            if ((''+value).trim() == '') {
+                                // Null
+                                evalstring += "var " + tokens[i] + " = null;";
+                            } else {
+                                if (value == Number(value)) {
+                                    // Number
+                                    evalstring += "var " + tokens[i] + " = " + value + ";";
+                                } else {
+                                    // Trying any formatted number
+                                    var number = null;
+                                    if (number = obj.parseNumber(value, position[0])) {
+                                        // Render as number
+                                        evalstring += "var " + tokens[i] + " = " + number + ";";
+                                    } else {
+                                        // Render as string
+                                        evalstring += "var " + tokens[i] + " = '" + value + "';";
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+
+                // Convert formula to javascript
+                try {
+                    evalstring += "function COLUMN() { return parseInt(x) + 1; }; function ROW() { return parseInt(y) + 1; }; function CELL() { return parentId; };";
+
+                    var res = eval(evalstring + expression.substr(1));
+                } catch (e) {
+                    var res = '#ERROR';
+                }
+
+                return res;
+            }
+        }
+
+        return execute(expression, x, y);
+    }
+
+    /**
+     * Trying to extract a number from a string
+     */
+    obj.parseNumber = function(value, columnNumber) {
+        // Decimal point
+        var decimal = columnNumber && obj.options.columns[columnNumber].decimal ? obj.options.columns[columnNumber].decimal : '.';
+
+        // Parse both parts of the number
+        var number = ('' + value);
+        number = number.split(decimal);
+        number[0] = number[0].match(/[+-]?[0-9]/g);
+        if (number[0]) {
+            number[0] = number[0].join('');
+        }
+        if (number[1]) {
+            number[1] = number[1].match(/[0-9]*/g).join('');
+        }
+
+        // Is a valid number
+        if (number[0] && Number(number[0]) >= 0) {
+            if (! number[1]) {
+                var value = Number(number[0] + '.00');
+            } else {
+                var value = Number(number[0] + '.' + number[1]);
+            }
+        } else {
+            var value = null;
+        }
+
+        return value;
+    }
+
+    /**
+     * Get row number
+     */
+    obj.row = function(cell) {
+    }
+
+    /**
+     * Get col number
+     */
+    obj.col = function(cell) {
+    }
+
+    obj.up = function(shiftKey, ctrlKey) {
+        if (shiftKey) {
+            if (obj.selectedCell[3] > 0) {
+                obj.up.visible(1, ctrlKey ? 0 : 1)
+            }
+        } else {
+            if (obj.selectedCell[1] > 0) {
+                obj.up.visible(0, ctrlKey ? 0 : 1)
+            }
+            obj.selectedCell[2] = obj.selectedCell[0];
+            obj.selectedCell[3] = obj.selectedCell[1];
+        }
+
+        // Update selection
+        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+
+        // Change page
+        if (obj.options.lazyLoading == true) {
+            if (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0) {
+                obj.loadPage(0);
+                obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+            } else {
+                if (obj.loadValidation()) {
+                    obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+                } else {
+                    var item = parseInt(obj.tbody.firstChild.getAttribute('data-y'));
+                    if (obj.selectedCell[1] - item < 30) {
+                        obj.loadUp();
+                        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+                    }
+                }
+            }
+        } else if (obj.options.pagination > 0) {
+            var pageNumber = obj.whichPage(obj.selectedCell[3]);
+            if (pageNumber != obj.pageNumber) {
+                obj.page(pageNumber);
+            }
+        }
+
+        obj.updateScroll(1);
+    }
+
+    obj.up.visible = function(group, direction) {
+        if (group == 0) {
+            var x = parseInt(obj.selectedCell[0]);
+            var y = parseInt(obj.selectedCell[1]);
+        } else {
+            var x = parseInt(obj.selectedCell[2]);
+            var y = parseInt(obj.selectedCell[3]);
+        }
+
+        if (direction == 0) {
+            for (var j = 0; j < y; j++) {
+                if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
+                    y = j;
+                    break;
+                }
+            }
+        } else {
+            y = obj.up.get(x, y);
+        }
+
+        if (group == 0) {
+            obj.selectedCell[0] = x;
+            obj.selectedCell[1] = y;
+        } else {
+            obj.selectedCell[2] = x;
+            obj.selectedCell[3] = y;
+        }
+    }
+
+    obj.up.get = function(x, y) {
+        var x = parseInt(x);
+        var y = parseInt(y);
+        for (var j = (y - 1); j >= 0; j--) {
+            if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
+                if (obj.records[j][x].getAttribute('data-merged')) {
+                    if (obj.records[j][x] == obj.records[y][x]) {
+                        continue;
+                    }
+                }
+                y = j;
+                break;
+            }
+        }
+
+        return y;
+    }
+
+    obj.down = function(shiftKey, ctrlKey) {
+        if (shiftKey) {
+            if (obj.selectedCell[3] < obj.records.length - 1) {
+                obj.down.visible(1, ctrlKey ? 0 : 1)
+            }
+        } else {
+            if (obj.selectedCell[1] < obj.records.length - 1) {
+                obj.down.visible(0, ctrlKey ? 0 : 1)
+            }
+            obj.selectedCell[2] = obj.selectedCell[0];
+            obj.selectedCell[3] = obj.selectedCell[1];
+        }
+
+        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+
+        // Change page
+        if (obj.options.lazyLoading == true) {
+            if ((obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) {
+                obj.loadPage(-1);
+                obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+            } else {
+                if (obj.loadValidation()) {
+                    obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+                } else {
+                    var item = parseInt(obj.tbody.lastChild.getAttribute('data-y'));
+                    if (item - obj.selectedCell[3] < 30) {
+                        obj.loadDown();
+                        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+                    }
+                }
+            }
+        } else if (obj.options.pagination > 0) {
+            var pageNumber = obj.whichPage(obj.selectedCell[3]);
+            if (pageNumber != obj.pageNumber) {
+                obj.page(pageNumber);
+            }
+        }
+
+        obj.updateScroll(3);
+    }
+
+    obj.down.visible = function(group, direction) {
+        if (group == 0) {
+            var x = parseInt(obj.selectedCell[0]);
+            var y = parseInt(obj.selectedCell[1]);
+        } else {
+            var x = parseInt(obj.selectedCell[2]);
+            var y = parseInt(obj.selectedCell[3]);
+        }
+
+        if (direction == 0) {
+            for (var j = obj.rows.length - 1; j > y; j--) {
+                if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
+                    y = j;
+                    break;
+                }
+            }
+        } else {
+            y = obj.down.get(x, y);
+        }
+
+        if (group == 0) {
+            obj.selectedCell[0] = x;
+            obj.selectedCell[1] = y;
+        } else {
+            obj.selectedCell[2] = x;
+            obj.selectedCell[3] = y;
+        }
+    }
+
+    obj.down.get = function(x, y) {
+        var x = parseInt(x);
+        var y = parseInt(y);
+        for (var j = (y + 1); j < obj.rows.length; j++) {
+            if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {
+                if (obj.records[j][x].getAttribute('data-merged')) {
+                    if (obj.records[j][x] == obj.records[y][x]) {
+                        continue;
+                    }
+                }
+                y = j;
+                break;
+            }
+        }
+
+        return y;
+    }
+
+    obj.right = function(shiftKey, ctrlKey) {
+        if (shiftKey) {
+            if (obj.selectedCell[2] < obj.headers.length - 1) {
+                obj.right.visible(1, ctrlKey ? 0 : 1)
+            }
+        } else {
+            if (obj.selectedCell[0] < obj.headers.length - 1) {
+                obj.right.visible(0, ctrlKey ? 0 : 1)
+            }
+            obj.selectedCell[2] = obj.selectedCell[0];
+            obj.selectedCell[3] = obj.selectedCell[1];
+        }
+
+        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+        obj.updateScroll(2);
+    }
+
+    obj.right.visible = function(group, direction) {
+        if (group == 0) {
+            var x = parseInt(obj.selectedCell[0]);
+            var y = parseInt(obj.selectedCell[1]);
+        } else {
+            var x = parseInt(obj.selectedCell[2]);
+            var y = parseInt(obj.selectedCell[3]);
+        }
+
+        if (direction == 0) {
+            for (var i = obj.headers.length - 1; i > x; i--) {
+                if (obj.records[y][i].style.display != 'none') {
+                    x = i;
+                    break;
+                }
+            }
+        } else {
+            x = obj.right.get(x, y);
+        }
+
+        if (group == 0) {
+            obj.selectedCell[0] = x;
+            obj.selectedCell[1] = y;
+        } else {
+            obj.selectedCell[2] = x;
+            obj.selectedCell[3] = y;
+        }
+    }
+
+    obj.right.get = function(x, y) {
+        var x = parseInt(x);
+        var y = parseInt(y);
+
+        for (var i = (x + 1); i < obj.headers.length; i++) {
+            if (obj.records[y][i].style.display != 'none') {
+                if (obj.records[y][i].getAttribute('data-merged')) {
+                    if (obj.records[y][i] == obj.records[y][x]) {
+                        continue;
+                    }
+                }
+                x = i;
+                break;
+            }
+        }
+
+        return x;
+    }
+
+    obj.left = function(shiftKey, ctrlKey) {
+        if (shiftKey) {
+            if (obj.selectedCell[2] > 0) {
+                obj.left.visible(1, ctrlKey ? 0 : 1)
+            }
+        } else {
+            if (obj.selectedCell[0] > 0) {
+                obj.left.visible(0, ctrlKey ? 0 : 1)
+            }
+            obj.selectedCell[2] = obj.selectedCell[0];
+            obj.selectedCell[3] = obj.selectedCell[1];
+        }
+
+        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+        obj.updateScroll(0);
+    }
+
+    obj.left.visible = function(group, direction) {
+        if (group == 0) {
+            var x = parseInt(obj.selectedCell[0]);
+            var y = parseInt(obj.selectedCell[1]);
+        } else {
+            var x = parseInt(obj.selectedCell[2]);
+            var y = parseInt(obj.selectedCell[3]);
+        }
+
+        if (direction == 0) {
+            for (var i = 0; i < x; i++) {
+                if (obj.records[y][i].style.display != 'none') {
+                    x = i;
+                    break;
+                }
+            }
+        } else {
+            x = obj.left.get(x, y);
+        }
+
+        if (group == 0) {
+            obj.selectedCell[0] = x;
+            obj.selectedCell[1] = y;
+        } else {
+            obj.selectedCell[2] = x;
+            obj.selectedCell[3] = y;
+        }
+    }
+
+    obj.left.get = function(x, y) {
+        var x = parseInt(x);
+        var y = parseInt(y);
+        for (var i = (x - 1); i >= 0; i--) {
+            if (obj.records[y][i].style.display != 'none') {
+                if (obj.records[y][i].getAttribute('data-merged')) {
+                    if (obj.records[y][i] == obj.records[y][x]) {
+                        continue;
+                    }
+                }
+                x = i;
+                break;
+            }
+        }
+
+        return x;
+    }
+
+    obj.first = function(shiftKey, ctrlKey) {
+        if (shiftKey) {
+            if (ctrlKey) {
+                obj.selectedCell[3] = 0;
+            } else {
+                obj.left.visible(1, 0);
+            }
+        } else {
+            if (ctrlKey) {
+                obj.selectedCell[1] = 0;
+            } else {
+                obj.left.visible(0, 0);
+            }
+            obj.selectedCell[2] = obj.selectedCell[0];
+            obj.selectedCell[3] = obj.selectedCell[1];
+        }
+
+        // Change page
+        if (obj.options.lazyLoading == true && (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0)) {
+            obj.loadPage(0);
+        } else if (obj.options.pagination > 0) {
+            var pageNumber = obj.whichPage(obj.selectedCell[3]);
+            if (pageNumber != obj.pageNumber) {
+                obj.page(pageNumber);
+            }
+        }
+
+        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+        obj.updateScroll(1);
+    }
+
+    obj.last = function(shiftKey, ctrlKey) {
+        if (shiftKey) {
+            if (ctrlKey) {
+                obj.selectedCell[3] = obj.records.length - 1;
+            } else {
+                obj.right.visible(1, 0);
+            }
+        } else {
+            if (ctrlKey) {
+                obj.selectedCell[1] = obj.records.length - 1;
+            } else {
+                obj.right.visible(0, 0);
+            }
+            obj.selectedCell[2] = obj.selectedCell[0];
+            obj.selectedCell[3] = obj.selectedCell[1];
+        }
+
+        // Change page
+        if (obj.options.lazyLoading == true && (obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) {
+            obj.loadPage(-1);
+        } else if (obj.options.pagination > 0) {
+            var pageNumber = obj.whichPage(obj.selectedCell[3]);
+            if (pageNumber != obj.pageNumber) {
+                obj.page(pageNumber);
+            }
+        }
+
+        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+        obj.updateScroll(3);
+    }
+
+    obj.selectAll = function() {
+        if (! obj.selectedCell) {
+            obj.selectedCell = [];
+        }
+
+        obj.selectedCell[0] = 0;
+        obj.selectedCell[1] = 0;
+        obj.selectedCell[2] = obj.headers.length - 1;
+        obj.selectedCell[3] = obj.records.length - 1;
+
+        obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);
+    }
+
+    /**
+     * Go to a page in a lazyLoading
+     */
+    obj.loadPage = function(pageNumber) {
+        // Search
+        if (obj.options.search == true && obj.results) {
+            var results = obj.results;
+        } else {
+            var results = obj.rows;
+        }
+
+        // Per page
+        var quantityPerPage = 100;
+
+        // pageNumber
+        if (pageNumber == null || pageNumber == -1) {
+            // Last page
+            pageNumber = Math.ceil(results.length / quantityPerPage); 
+        }
+
+        var startRow = (pageNumber * quantityPerPage);
+        var finalRow = (pageNumber * quantityPerPage) + quantityPerPage;
+        if (finalRow > results.length) {
+            finalRow = results.length;
+        }
+        startRow = finalRow - 100;
+        if (startRow < 0) {
+            startRow = 0;
+        }
+
+        // Appeding items
+        for (var j = startRow; j < finalRow; j++) {
+            if (obj.options.search == true && obj.results) {
+                obj.tbody.appendChild(obj.rows[results[j]]);
+            } else {
+                obj.tbody.appendChild(obj.rows[j]);
+            }
+
+            if (obj.tbody.children.length > quantityPerPage) {
+                obj.tbody.removeChild(obj.tbody.firstChild);
+            }
+        }
+    }
+
+    obj.loadUp = function() {
+        // Search
+        if (obj.options.search == true && obj.results) {
+            var results = obj.results;
+        } else {
+            var results = obj.rows;
+        }
+        var test = 0;
+        if (results.length > 100) {
+            // Get the first element in the page
+            var item = parseInt(obj.tbody.firstChild.getAttribute('data-y'));
+            if (obj.options.search == true && obj.results) {
+                item = results.indexOf(item);
+            }
+            if (item > 0) {
+                for (var j = 0; j < 30; j++) {
+                    item = item - 1;
+                    if (item > -1) {
+                        if (obj.options.search == true && obj.results) {
+                            obj.tbody.insertBefore(obj.rows[results[item]], obj.tbody.firstChild);
+                        } else {
+                            obj.tbody.insertBefore(obj.rows[item], obj.tbody.firstChild);
+                        }
+                        if (obj.tbody.children.length > 100) {
+                            obj.tbody.removeChild(obj.tbody.lastChild);
+                            test = 1;
+                        }
+                    }
+                }
+            }
+        }
+        return test;
+    }
+
+    obj.loadDown = function() {
+        // Search
+        if (obj.options.search == true && obj.results) {
+            var results = obj.results;
+        } else {
+            var results = obj.rows;
+        }
+        var test = 0;
+        if (results.length > 100) {
+            // Get the last element in the page
+            var item = parseInt(obj.tbody.lastChild.getAttribute('data-y'));
+            if (obj.options.search == true && obj.results) {
+                item = results.indexOf(item);
+            }
+            if (item < obj.rows.length - 1) {
+                for (var j = 0; j <= 30; j++) {
+                    if (item < results.length) {
+                        if (obj.options.search == true && obj.results) {
+                            obj.tbody.appendChild(obj.rows[results[item]]);
+                        } else {
+                            obj.tbody.appendChild(obj.rows[item]);
+                        }
+                        if (obj.tbody.children.length > 100) {
+                            obj.tbody.removeChild(obj.tbody.firstChild);
+                            test = 1;
+                        }
+                    }
+                    item = item + 1;
+                }
+            }
+        }
+
+        return test;
+    }
+
+    obj.loadValidation = function() {
+        if (obj.selectedCell) {
+            var currentPage = parseInt(obj.tbody.firstChild.getAttribute('data-y')) / 100;
+            var selectedPage = parseInt(obj.selectedCell[3] / 100);
+            var totalPages = parseInt(obj.rows.length / 100);
+
+            if (currentPage != selectedPage && selectedPage <= totalPages) {
+                if (! Array.prototype.indexOf.call(obj.tbody.children, obj.rows[obj.selectedCell[3]])) {
+                    obj.loadPage(selectedPage);
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Reset search
+     */
+    obj.resetSearch = function() {
+        obj.searchInput.value = '';
+        obj.search('');
+        obj.results = null;
+    }
+
+    /**
+     * Search
+     */
+    obj.search = function(query) {
+        // Query
+        if (query) {
+            var query = query.toLowerCase();
+        }
+
+        // Reset selection
+        obj.resetSelection();
+
+        // Total of results
+        obj.pageNumber = 0;
+        obj.results = [];
+
+        if (query) {
+            // Search filter
+            var search = function(item, query, index) {
+                for (var i = 0; i < item.length; i++) {
+                    if ((''+item[i]).toLowerCase().search(query) >= 0 ||
+                        (''+obj.records[index][i].innerHTML).toLowerCase().search(query) >= 0) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+
+            // Result
+            var addToResult = function(k) {
+                if (obj.results.indexOf(k) == -1) {
+                    obj.results.push(k);
+                }
+            }
+
+            // Filter
+            var data = obj.options.data.filter(function(v, k) {
+                if (search(v, query, k)) {
+                    // Merged rows found
+                    var rows = obj.isRowMerged(k);
+                    if (rows.length) {
+                        for (var i = 0; i < rows.length; i++) {
+                            var row = jexcel.getIdFromColumnName(rows[i], true);
+                            for (var j = 0; j < obj.options.mergeCells[rows[i]][1]; j++) {
+                                addToResult(row[1]+j);
+                            }
+                        }
+                    } else {
+                        // Normal row found
+                        addToResult(k);
+                    }
+                    return true;
+                } else {
+                    return false;
+                }
+            });
+        } else {
+            obj.results = null;
+        }
+
+        var total = 0;
+        var index = 0;
+
+        // Page 1
+        if (obj.options.lazyLoading == true) {
+            total = 100;
+        } else if (obj.options.pagination > 0) {
+            total = obj.options.pagination;
+        } else {
+            if (obj.results) {
+                total = obj.results.length;
+            } else {
+                total = obj.rows.length;
+            }
+        }
+
+        // Reset current nodes
+        while (obj.tbody.firstChild) {
+            obj.tbody.removeChild(obj.tbody.firstChild);
+        }
+
+        // Hide all records from the table
+        for (var j = 0; j < obj.rows.length; j++) {
+            if (! obj.results || obj.results.indexOf(j) > -1) {
+                if (index < total) {
+                    obj.tbody.appendChild(obj.rows[j]);
+                    index++;
+                }
+                obj.rows[j].style.display = '';
+            } else {
+                obj.rows[j].style.display = 'none';
+            }
+        }
+
+        // Update pagination
+        if (obj.options.pagination > 0) {
+            obj.updatePagination();
+        }
+
+        return total;
+    }
+
+    /**
+     * Which page the cell is
+     */
+    obj.whichPage = function(cell) {
+        // Search
+        if (obj.options.search == true && obj.results) {
+            cell = obj.results.indexOf(cell);
+        }
+
+        return (Math.ceil((parseInt(cell) + 1) / parseInt(obj.options.pagination))) - 1;
+    }
+
+    /**
+     * Go to page
+     */
+    obj.page = function(pageNumber) {
+        // Search
+        if (obj.options.search == true && obj.results) {
+            var results = obj.results;
+        } else {
+            var results = obj.rows;
+        }
+
+        // Per page
+        var quantityPerPage = parseInt(obj.options.pagination);
+
+        // pageNumber
+        if (pageNumber == null || pageNumber == -1) {
+            // Last page
+            pageNumber = Math.ceil(results.length / quantityPerPage); 
+        }
+
+        // Page number
+        obj.pageNumber = pageNumber;
+
+        var startRow = (pageNumber * quantityPerPage);
+        var finalRow = (pageNumber * quantityPerPage) + quantityPerPage;
+        if (finalRow > results.length) {
+            finalRow = results.length;
+        }
+        if (startRow < 0) {
+            startRow = 0;
+        }
+
+        // Reset container
+        while (obj.tbody.firstChild) {
+            obj.tbody.removeChild(obj.tbody.firstChild);
+        }
+
+        // Appeding items
+        for (var j = startRow; j < finalRow; j++) {
+            if (obj.options.search == true && obj.results) {
+                obj.tbody.appendChild(obj.rows[results[j]]);
+            } else {
+                obj.tbody.appendChild(obj.rows[j]);
+            }
+        }
+
+        if (obj.options.pagination > 0) {
+            obj.updatePagination();
+        }
+
+        // Update corner position
+        obj.updateCornerPosition();
+    }
+
+    /**
+     * Update the pagination
+     */
+    obj.updatePagination = function() {
+        // Reset container
+        obj.pagination.children[0].innerHTML = '';
+        obj.pagination.children[1].innerHTML = '';
+
+        // Start pagination
+        if (obj.options.pagination) {
+            // Searchable
+            if (obj.options.search == true && obj.results) {
+                var results = obj.results.length;
+            } else {
+                var results = obj.rows.length;
+            }
+
+            if (! results) {
+                // No records found
+                obj.pagination.children[0].innerHTML = obj.options.text.noRecordsFound;
+            } else {
+                // Pagination container
+                var quantyOfPages = Math.ceil(results / obj.options.pagination);
+
+                if (obj.pageNumber < 6) {
+                    var startNumber = 1;
+                    var finalNumber = quantyOfPages < 10 ? quantyOfPages : 10;
+                } else if (quantyOfPages - obj.pageNumber < 5) {
+                    var startNumber = quantyOfPages - 9;
+                    var finalNumber = quantyOfPages;
+                    if (startNumber < 1) {
+                        startNumber = 1;
+                    }
+                } else {
+                    var startNumber = obj.pageNumber - 4;
+                    var finalNumber = obj.pageNumber + 5;
+                }
+
+                // First
+                if (startNumber > 1) {
+                    var paginationItem = document.createElement('div');
+                    paginationItem.className = 'jexcel_page';
+                    paginationItem.innerHTML = '<';
+                    paginationItem.title = 1;
+                    obj.pagination.children[1].appendChild(paginationItem);
+                }
+
+                // Get page links
+                for (var i = startNumber; i <= finalNumber; i++) {
+                    var paginationItem = document.createElement('div');
+                    paginationItem.className = 'jexcel_page';
+                    paginationItem.innerHTML = i;
+                    obj.pagination.children[1].appendChild(paginationItem);
+
+                    if (obj.pageNumber == (i-1)) {
+                        paginationItem.classList.add('jexcel_page_selected');
+                    }
+                }
+
+                // Last
+                if (finalNumber < quantyOfPages) {
+                    var paginationItem = document.createElement('div');
+                    paginationItem.className = 'jexcel_page';
+                    paginationItem.innerHTML = '>';
+                    paginationItem.title = quantyOfPages;
+                    obj.pagination.children[1].appendChild(paginationItem);
+                }
+
+                // Text
+                var format = function(format) {
+                    var args = Array.prototype.slice.call(arguments, 1);
+                    return format.replace(/{(\d+)}/g, function(match, number) {
+                      return typeof args[number] != 'undefined'
+                        ? args[number]
+                        : match
+                      ;
+                    });
+                };
+
+                obj.pagination.children[0].innerHTML = format(obj.options.text.showingPage, obj.pageNumber + 1, quantyOfPages)
+            }
+        }
+    }
+
+    /**
+     * Download CSV table
+     * 
+     * @return null
+     */
+    obj.download = function(includeHeaders) {
+        if (obj.options.allowExport == false) {
+            console.error('Export not allowed');
+        } else {
+            // Data
+            var data = '';
+            if (includeHeaders == true) {
+                data += obj.getHeaders();
+                data += "\r\n";
+            }
+            // Get data
+            data += obj.copy(false, obj.options.csvDelimiter, true);
+            // Download element
+            var pom = document.createElement('a');
+            var blob = new Blob([data], {type: 'text/csv;charset=utf-8;'});
+            var url = URL.createObjectURL(blob);
+            pom.href = url;
+            pom.setAttribute('download', obj.options.csvFileName + '.csv');
+            document.body.appendChild(pom);
+            pom.click();
+            pom.parentNode.removeChild(pom);
+        }
+    }
+
+    /**
+     * Initializes a new history record for undo/redo
+     * 
+     * @return null
+     */
+    obj.setHistory = function(changes) {
+        if (obj.ignoreHistory != true) {
+            // Increment and get the current history index
+            var index = ++obj.historyIndex;
+
+            // Slice the array to discard undone changes
+            obj.history = (obj.history = obj.history.slice(0, index + 1));
+
+            // Keep history
+            obj.history[index] = changes;
+        }
+    }
+
+    /**
+     * Copy method
+     * 
+     * @param bool highlighted - Get only highlighted cells
+     * @param delimiter - \t default to keep compatibility with excel
+     * @return string value
+     */
+    obj.copy = function(highlighted, delimiter, returnData) {
+        if (! delimiter) {
+            delimiter = "\t";
+        }
+
+        // Controls
+        var col = [];
+        var colLabel = [];
+        var row = [];
+        var rowLabel = [];
+        var x = obj.options.data[0].length
+        var y = obj.options.data.length
+        var tmp = '';
+
+        // Reset container
+        obj.style = [];
+
+        // Go through the columns to get the data
+        for (var j = 0; j < y; j++) {
+            col = [];
+            colLabel = [];
+
+            for (var i = 0; i < x; i++) {
+                // If cell is highlighted
+                if (! highlighted || obj.records[j][i].classList.contains('highlight')) {
+                    // Values
+                    var value = obj.options.data[j][i];
+                    if (value.match && (value.match(/,/g) || value.match(/\n/) || value.match(/\"/))) {
+                        value = value.replace(new RegExp('"', 'g'), '""');
+                        value = '"' + value + '"';
+                    }
+                    col.push(value);
+
+                    // Labels
+                    var label = obj.records[j][i].innerHTML;
+                    if (label.match && (label.match(/,/g) || label.match(/\n/) || label.match(/\"/))) {
+                        // Scape double quotes
+                        label = label.replace(new RegExp('"', 'g'), '""');
+                        label = '"' + label + '"';
+                    }
+                    colLabel.push(label);
+
+                    // Get style
+                    tmp = obj.records[j][i].getAttribute('style');
+                    obj.style.push(tmp ? tmp : '');
+                }
+            }
+
+            if (col.length) {
+                row.push(col.join(delimiter));
+            }
+            if (colLabel.length) {
+                rowLabel.push(colLabel.join(delimiter));
+            }
+        }
+
+        // Final string
+        var str = row.join("\n");
+        var strLabel = rowLabel.join("\n");
+
+        // Create a hidden textarea to copy the values
+        if (! returnData) {
+            if (obj.options.copyCompatibility == true) {
+                obj.textarea.value = strLabel;
+            } else {
+                obj.textarea.value = str;
+            }
+            obj.textarea.select();
+            document.execCommand("copy");
+        }
+
+        // Keep data
+        if (obj.options.copyCompatibility == true) {
+            obj.data = strLabel;
+        } else {
+        obj.data = str;
+        }
+        // Keep non visible information
+        obj.hashString = obj.hash(obj.data);
+
+        return obj.data;
+    }
+
+    /**
+     * jExcel paste method
+     * 
+     * @param integer row number
+     * @return string value
+     */
+    obj.paste = function(x, y, data) {
+        // Paste filter
+        if (typeof(obj.options.onbeforepaste) == 'function') {
+            var data = obj.options.onbeforepaste(el, data);
+        }
+
+        // Controls
+        var hash = obj.hash(data);
+        var style = (hash == obj.hashString) ? obj.style : null;
+
+        // Depending on the behavior
+        if (obj.options.copyCompatibility == true && hash == obj.hashString) {
+            var data = obj.data;
+        }
+
+        // Split new line
+        var data = obj.parseCSV(data, "\t");
+
+        if (x != null && y != null && data) {
+            // Records
+            var i = 0;
+            var j = 0;
+            var records = [];
+            var newStyle = {};
+            var oldStyle = {};
+            var styleIndex = 0;
+
+            // Index
+            var colIndex = parseInt(x);
+            var rowIndex = parseInt(y);
+            var row = null;
+
+            // Go through the columns to get the data
+            while (row = data[j]) {
+                i = 0;
+                colIndex = parseInt(x);
+
+                while (row[i] != null) {
+                    // Update and keep history
+                    var record = obj.updateCell(colIndex, rowIndex, row[i]);
+                    // Keep history
+                    records.push(record);
+                    // Update all formulas in the chain
+                    obj.updateFormulaChain(colIndex, rowIndex, records);
+                    // Style
+                    if (style) {
+                        var columnName = jexcel.getColumnNameFromId([colIndex, rowIndex]);
+                        newStyle[columnName] = style[styleIndex];
+                        oldStyle[columnName] = obj.getStyle(columnName);
+                        obj.records[rowIndex][colIndex].setAttribute('style', style[styleIndex]);
+                        styleIndex++
+                    }
+                    i++;
+                    if (row[i] != null) {
+                        if (colIndex >= obj.headers.length - 1) {
+                            obj.insertColumn();
+                        }
+                        colIndex = obj.right.get(colIndex, rowIndex);
+                    }
+                }
+
+                j++;
+                if (data[j]) {
+                    if (rowIndex >= obj.rows.length-1) {
+                        obj.insertRow();
+                    }
+                    rowIndex = obj.down.get(x, rowIndex);
+                }
+            }
+
+            // Select the new cells
+            obj.updateSelectionFromCoords(x, y, colIndex, rowIndex);
+
+            // Update history
+            obj.setHistory({
+                action:'setValue',
+                records:records,
+                selection:obj.selectedCell,
+                newStyle:newStyle,
+                oldStyle:oldStyle,
+            });
+
+            // Update table
+            obj.updateTable();
+
+            // Paste event
+            if (typeof(obj.options.onpaste) == 'function') {
+                obj.options.onpaste(el, records);
+            }
+
+            // On after changes
+            obj.onafterchanges(el, records);
+        }
+    }
+
+    /**
+     * Process row
+     */
+    obj.historyProcessRow = function(type, historyRecord) {
+        var rowIndex = (! historyRecord.insertBefore) ? historyRecord.rowNumber + 1 : historyRecord.rowNumber;
+
+        if (obj.options.search == true) {
+            if (obj.results && obj.results.length != obj.rows.length) {
+                obj.resetSearch();
+            }
+        }
+
+        // Remove row
+        if (type == 1) {
+            var numOfRows = historyRecord.numOfRows;
+            // Remove nodes
+            for (var j = rowIndex; j < (numOfRows + rowIndex); j++) {
+                obj.rows[j].parentNode.removeChild(obj.rows[j]);
+            }
+            // Remove references
+            obj.records.splice(rowIndex, numOfRows);
+            obj.options.data.splice(rowIndex, numOfRows);
+            obj.rows.splice(rowIndex, numOfRows);
+
+            obj.conditionalSelectionUpdate(1, rowIndex, (numOfRows + rowIndex) - 1);
+        } else {
+            // Insert data
+            obj.records = jexcel.injectArray(obj.records, rowIndex, historyRecord.rowRecords);
+            obj.options.data = jexcel.injectArray(obj.options.data, rowIndex, historyRecord.rowData);
+            obj.rows = jexcel.injectArray(obj.rows, rowIndex, historyRecord.rowNode);
+            // Insert nodes
+            var index = 0
+            for (var j = rowIndex; j < (historyRecord.numOfRows + rowIndex); j++) {
+                obj.tbody.insertBefore(historyRecord.rowNode[index], obj.tbody.children[j]);
+                index++;
+            }
+        }
+
+        // Respect pagination
+        if (obj.options.pagination > 0) {
+            obj.page(obj.pageNumber);
+        }
+
+        obj.updateTableReferences();
+    }
+
+    /**
+     * Process column
+     */
+    obj.historyProcessColumn = function(type, historyRecord) {
+        var columnIndex = (! historyRecord.insertBefore) ? historyRecord.columnNumber + 1 : historyRecord.columnNumber;
+
+        // Remove column
+        if (type == 1) {
+            var numOfColumns = historyRecord.numOfColumns;
+
+            obj.options.columns.splice(columnIndex, numOfColumns);
+            for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) {
+                obj.headers[i].parentNode.removeChild(obj.headers[i]);
+                obj.colgroup[i].parentNode.removeChild(obj.colgroup[i]);
+            }
+            obj.headers.splice(columnIndex, numOfColumns);
+            obj.colgroup.splice(columnIndex, numOfColumns);
+            for (var j = 0; j < historyRecord.data.length; j++) {
+                for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) {
+                    obj.records[j][i].parentNode.removeChild(obj.records[j][i]);
+                }
+                obj.records[j].splice(columnIndex, numOfColumns);
+                obj.options.data[j].splice(columnIndex, numOfColumns);
+            }
+
+            obj.conditionalSelectionUpdate(0, columnIndex, (numOfColumns + columnIndex) - 1);
+        } else {
+            // Insert data
+            obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, historyRecord.columns);
+            obj.headers = jexcel.injectArray(obj.headers, columnIndex, historyRecord.headers);
+            obj.colgroup = jexcel.injectArray(obj.colgroup, columnIndex, historyRecord.colgroup);
+
+            var index = 0
+            for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) {
+                obj.headerContainer.insertBefore(historyRecord.headers[index], obj.headerContainer.children[i+1]);
+                obj.colgroupContainer.insertBefore(historyRecord.colgroup[index], obj.colgroupContainer.children[i+1]);
+                index++;
+            }
+
+            for (var j = 0; j < historyRecord.data.length; j++) {
+                obj.options.data[j] = jexcel.injectArray(obj.options.data[j], columnIndex, historyRecord.data[j]);
+                obj.records[j] = jexcel.injectArray(obj.records[j], columnIndex, historyRecord.records[j]);
+                var index = 0
+                for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) {
+                    obj.rows[j].insertBefore(historyRecord.records[j][index], obj.rows[j].children[i+1]);
+                    index++;
+                }
+            }
+        }
+
+        // Adjust nested headers
+        if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {
+            // Flexible way to handle nestedheaders
+            if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {
+                for (var j = 0; j < obj.options.nestedHeaders.length; j++) {
+                    if (type == 1) {
+                        var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - historyRecord.numOfColumns;
+                    } else {
+                        var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + historyRecord.numOfColumns;
+                    }
+                    obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;
+                    obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);
+                }
+            } else {
+                if (type == 1) {
+                    var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - historyRecord.numOfColumns;
+                } else {
+                    var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + historyRecord.numOfColumns;
+                }
+                obj.options.nestedHeaders[0].colspan = colspan;
+                obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);
+            }
+        }
+
+        obj.updateTableReferences();
+    }
+
+    /**
+     * Undo last action
+     */
+    obj.undo = function() {
+        // Ignore events and history
+        var ignoreEvents = obj.ignoreEvents ? true : false;
+        var ignoreHistory = obj.ignoreHistory ? true : false;
+
+        obj.ignoreEvents = true;
+        obj.ignoreHistory = true;
+
+        // Records
+        var records = [];
+
+        // Update cells
+        if (obj.historyIndex >= 0) {
+            // History
+            var historyRecord = obj.history[obj.historyIndex--];
+
+            if (historyRecord.action == 'insertRow') {
+                obj.historyProcessRow(1, historyRecord);
+            } else if (historyRecord.action == 'deleteRow') {
+                obj.historyProcessRow(0, historyRecord);
+            } else if (historyRecord.action == 'insertColumn') {
+                obj.historyProcessColumn(1, historyRecord);
+            } else if (historyRecord.action == 'deleteColumn') {
+                obj.historyProcessColumn(0, historyRecord);
+            } else if (historyRecord.action == 'moveRow') {
+                obj.moveRow(historyRecord.newValue, historyRecord.oldValue);
+            } else if (historyRecord.action == 'moveColumn') {
+                obj.moveColumn(historyRecord.newValue, historyRecord.oldValue);
+            } else if (historyRecord.action == 'setMerge') {
+                obj.removeMerge(historyRecord.column, historyRecord.data);
+            } else if (historyRecord.action == 'setStyle') {
+                obj.setStyle(historyRecord.oldValue, null, null, 1);
+            } else if (historyRecord.action == 'setWidth') {
+                obj.setWidth(historyRecord.column, historyRecord.oldValue);
+            } else if (historyRecord.action == 'setHeight') {
+                obj.setHeight(historyRecord.row, historyRecord.oldValue);
+            } else if (historyRecord.action == 'setHeader') {
+                obj.setHeader(historyRecord.column, historyRecord.oldValue);
+            } else if (historyRecord.action == 'setComments') {
+                obj.setComments(historyRecord.column, historyRecord.oldValue[0], historyRecord.oldValue[1]);
+            } else if (historyRecord.action == 'orderBy') {
+                var rows = [];
+                for (var j = 0; j < historyRecord.rows.length; j++) {
+                    rows[historyRecord.rows[j]] = j;
+                }
+                obj.updateOrderArrow(historyRecord.column, historyRecord.order ? 0 : 1);
+                obj.updateOrder(rows);
+            } else if (historyRecord.action == 'setValue') {
+                // Redo for changes in cells
+                for (var i = 0; i < historyRecord.records.length; i++) {
+                    obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].oldValue);
+                    obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records);
+                    if (historyRecord.oldStyle) {
+                        obj.resetStyle(historyRecord.oldStyle, true);
+                    }
+                }
+                // Update selection
+                if (! historyRecord.selection) {
+                    historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row];
+                }
+                obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]);
+                // Update table
+                obj.updateTable();
+            }
+        }
+        obj.ignoreEvents = ignoreEvents;
+        obj.ignoreHistory = ignoreHistory;
+
+        if (typeof(obj.options.onundo) == 'function') {
+            obj.options.onundo(el, historyRecord);
+        }
+    }
+
+    /**
+     * Redo previously undone action
+     */
+    obj.redo = function() {
+        // Ignore events and history
+        var ignoreEvents = obj.ignoreEvents ? true : false;
+        var ignoreHistory = obj.ignoreHistory ? true : false;
+
+        obj.ignoreEvents = true;
+        obj.ignoreHistory = true;
+
+        // Records
+        var records = [];
+
+        // Update cells
+        if (obj.historyIndex < obj.history.length - 1) {
+            // History
+            var historyRecord = obj.history[++obj.historyIndex];
+
+            if (historyRecord.action == 'insertRow') {
+                obj.historyProcessRow(0, historyRecord);
+            } else if (historyRecord.action == 'deleteRow') {
+                obj.historyProcessRow(1, historyRecord);
+            } else if (historyRecord.action == 'insertColumn') {
+                obj.historyProcessColumn(0, historyRecord);
+            } else if (historyRecord.action == 'deleteColumn') {
+                obj.historyProcessColumn(1, historyRecord);
+            } else if (historyRecord.action == 'moveRow') {
+                obj.moveRow(historyRecord.oldValue, historyRecord.newValue);
+            } else if (historyRecord.action == 'moveColumn') {
+                obj.moveColumn(historyRecord.oldValue, historyRecord.newValue);
+            } else if (historyRecord.action == 'setMerge') {
+                obj.setMerge(historyRecord.column, historyRecord.colspan, historyRecord.rowspan, 1);
+            } else if (historyRecord.action == 'setStyle') {
+                obj.setStyle(historyRecord.newValue, null, null, 1);
+            } else if (historyRecord.action == 'setWidth') {
+                obj.setWidth(historyRecord.column, historyRecord.newValue);
+            } else if (historyRecord.action == 'setHeight') {
+                obj.setHeight(historyRecord.row, historyRecord.newValue);
+            } else if (historyRecord.action == 'setHeader') {
+                obj.setHeader(historyRecord.column, historyRecord.newValue);
+            } else if (historyRecord.action == 'setComments') {
+                obj.setComments(historyRecord.column, historyRecord.newValue[0], historyRecord.newValue[1]);
+            } else if (historyRecord.action == 'orderBy') {
+                obj.updateOrderArrow(historyRecord.column, historyRecord.order);
+                obj.updateOrder(historyRecord.rows);
+            } else if (historyRecord.action == 'setValue') {
+                // Redo for changes in cells
+                for (var i = 0; i < historyRecord.records.length; i++) {
+                    obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].newValue);
+                    obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records);
+                    if (historyRecord.newStyle) {
+                        obj.resetStyle(historyRecord.newStyle, true);
+                    }
+                }
+
+                // Update selection
+                if (! historyRecord.selection) {
+                    historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row];
+                }
+                obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]);
+                // Update table
+                obj.updateTable();
+            }
+        }
+        obj.ignoreEvents = ignoreEvents;
+        obj.ignoreHistory = ignoreHistory;
+
+        if (typeof(obj.options.onredo) == 'function') {
+            obj.options.onredo(el, historyRecord);
+        }
+    }
+
+    /**
+     * Get dropdown value from key
+     */
+    obj.getDropDownValue = function(column, key) {
+        var value = [];
+
+        if (obj.options.columns[column] && obj.options.columns[column].source) {
+            // Create array from source
+            var combo = [];
+            var source = obj.options.columns[column].source;
+
+            for (var i = 0; i < source.length; i++) {
+                if (typeof(source[i]) == 'object') {
+                    combo[source[i].id] = source[i].name;
+                } else {
+                    combo[source[i]] = source[i];
+                }
+            }
+
+            // Garante single multiple compatibily
+            var keys = ('' + key).split(';')
+
+            for (var i = 0; i < keys.length; i++) {
+                if (combo[keys[i]]) {
+                    value.push(combo[keys[i]]);
+                }
+            }
+        } else {
+            console.error('Invalid column');
+        }
+
+        return (value.length > 0) ? value.join('; ') : '';
+    }
+
+    /**
+     * From starckoverflow contributions
+     */
+    obj.parseCSV = function(str, delimiter) {
+        // Remove last line break
+        str = str.replace(/\r?\n$|\r$|\n$/g, "");
+        // Last caracter is the delimiter
+        if (str.charCodeAt(str.length-1) == 9) {
+            str += "\0";
+        }
+        // user-supplied delimeter or default comma
+        delimiter = (delimiter || ",");
+
+        var arr = [];
+        var quote = false;  // true means we're inside a quoted field
+        // iterate over each character, keep track of current row and column (of the returned array)
+        for (var row = 0, col = 0, c = 0; c < str.length; c++) {
+            var cc = str[c], nc = str[c+1];
+            arr[row] = arr[row] || [];
+            arr[row][col] = arr[row][col] || '';
+
+            // If the current character is a quotation mark, and we're inside a quoted field, and the next character is also a quotation mark, add a quotation mark to the current column and skip the next character
+            if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; }  
+
+            // If it's just one quotation mark, begin/end quoted field
+            if (cc == '"') { quote = !quote; continue; }
+
+            // If it's a comma and we're not in a quoted field, move on to the next column
+            if (cc == delimiter && !quote) { ++col; continue; }
+
+            // If it's a newline (CRLF) and we're not in a quoted field, skip the next character and move on to the next row and move to column 0 of that new row
+            if (cc == '\r' && nc == '\n' && !quote) { ++row; col = 0; ++c; continue; }
+
+            // If it's a newline (LF or CR) and we're not in a quoted field, move on to the next row and move to column 0 of that new row
+            if (cc == '\n' && !quote) { ++row; col = 0; continue; }
+            if (cc == '\r' && !quote) { ++row; col = 0; continue; }
+
+            // Otherwise, append the current character to the current column
+            arr[row][col] += cc;
+        }
+        return arr;
+    }
+
+    obj.hash = function(str) {
+        var hash = 0, i, chr;
+
+        if (str.length === 0) {
+            return hash;
+        } else {
+            for (i = 0; i < str.length; i++) {
+              chr = str.charCodeAt(i);
+              hash = ((hash << 5) - hash) + chr;
+              hash |= 0;
+            }
+        }
+        return hash;
+    }
+
+    obj.onafterchanges = function(el, records) {
+        if (! obj.ignoreEvents) {
+            // On after changes
+            if (typeof(obj.options.onafterchanges) == 'function') {
+                obj.options.onafterchanges(el, records);
+            }
+        }
+    }
+
+    /**
+     * Initialization method
+     */
+    obj.init = function() {
+        jexcel.current = obj;
+
+        // Build handlers
+        if (typeof(jexcel.build) == 'function') {
+            jexcel.build();
+            jexcel.build = null;
+        }
+
+        // Load the table data based on an CSV file
+        if (obj.options.csv) {
+            // Loading
+            if (obj.options.loadingSpin == true) {
+                jSuites.loading.show();
+            }
+
+            // Load CSV file
+            jSuites.ajax({
+                url: obj.options.csv,
+                method: 'GET',
+                dataType: 'text',
+                success: function(result) {
+                    // Convert data
+                    var newData = obj.parseCSV(result, obj.options.csvDelimiter)
+
+                    // Headers
+                    if (obj.options.csvHeaders == true && newData.length > 0) {
+                        var headers = newData.shift();
+                        for(var i = 0; i < headers.length; i++) {
+                            if (! obj.options.columns[i]) {
+                                obj.options.columns[i] = { type:'text', align:obj.options.defaultColAlign, width:obj.options.defaultColWidth };
+                            }
+                            // Precedence over pre-configurated titles
+                            if (typeof obj.options.columns[i].title === 'undefined') {
+                              obj.options.columns[i].title = headers[i];
+                            }
+                        }
+                    }
+                    // Data
+                    obj.options.data = newData;
+                    // Prepare table
+                    obj.prepareTable();
+                    // Hide spin
+                    if (obj.options.loadingSpin == true) {
+                        jSuites.loading.hide();
+                    }
+                }
+            });
+        } else if (obj.options.url) {
+            // Loading
+            if (obj.options.loadingSpin == true) {
+                jSuites.loading.show();
+            }
+
+            jSuites.ajax({
+                url: obj.options.url,
+                method: 'GET',
+                dataType: 'json',
+                success: function(result) {
+                    // Data
+                    obj.options.data = (result.data) ? result.data : result;
+                    // Prepare table
+                    obj.prepareTable();
+                    // Hide spin
+                    if (obj.options.loadingSpin == true) {
+                        jSuites.loading.hide();
+                    }
+                }
+            });
+        } else {
+            // Prepare table
+            obj.prepareTable();
+        }
+    }
+
+    // Context menu
+    if (options && options.contextMenu != null) {
+        obj.options.contextMenu = options.contextMenu;
+    } else {
+        obj.options.contextMenu = function(el, x, y, e) {
+            var items = [];
+
+            if (y == null) {
+                // Insert a new column
+                if (obj.options.allowInsertColumn == true) {
+                    items.push({
+                        title:obj.options.text.insertANewColumnBefore,
+                        onclick:function() {
+                            obj.insertColumn(1, parseInt(x), 1);
+                        }
+                    });
+                }
+
+                if (obj.options.allowInsertColumn == true) {
+                    items.push({
+                        title:obj.options.text.insertANewColumnAfter,
+                        onclick:function() {
+                            obj.insertColumn(1, parseInt(x), 0);
+                        }
+                    });
+                }
+
+                // Delete a column
+                if (obj.options.allowDeleteColumn == true) {
+                    items.push({
+                        title:obj.options.text.deleteSelectedColumns,
+                        onclick:function() {
+                            obj.deleteColumn(obj.getSelectedColumns().length ? undefined : parseInt(x));
+                        }
+                    });
+                }
+
+                // Rename column
+                if (obj.options.allowRenameColumn == true) {
+                    items.push({
+                        title:obj.options.text.renameThisColumn,
+                        onclick:function() {
+                            obj.setHeader(x);
+                        }
+                    });
+                }
+
+                // Sorting
+                if (obj.options.columnSorting == true) {
+                    // Line
+                    items.push({ type:'line' });
+
+                    items.push({
+                        title:obj.options.text.orderAscending,
+                        onclick:function() {
+                            obj.orderBy(x, 0);
+                        }
+                    });
+                    items.push({
+                        title:obj.options.text.orderDescending,
+                        onclick:function() {
+                            obj.orderBy(x, 1);
+                        }
+                    });
+                }
+            } else {
+                // Insert new row
+                if (obj.options.allowInsertRow == true) {
+                    items.push({
+                        title:obj.options.text.insertANewRowBefore,
+                        onclick:function() {
+                            obj.insertRow(1, parseInt(y), 1);
+                        }
+                    });
+
+                    items.push({
+                        title:obj.options.text.insertANewRowAfter,
+                        onclick:function() {
+                            obj.insertRow(1, parseInt(y));
+                        }
+                    });
+                }
+
+                if (obj.options.allowDeleteRow == true) {
+                    items.push({
+                        title:obj.options.text.deleteSelectedRows,
+                        onclick:function() {
+                            obj.deleteRow(obj.getSelectedRows().length ? undefined : parseInt(y));
+                        }
+                    });
+                }
+
+                if (x) {
+                    if (obj.options.allowComments == true) {
+                        items.push({ type:'line' });
+
+                        var title = obj.records[y][x].getAttribute('title') || '';
+
+                        items.push({
+                            title: title ? obj.options.text.editComments : obj.options.text.addComments,
+                            onclick:function() {
+                                obj.setComments([ x, y ], prompt(obj.options.text.comments, title));
+                            }
+                        });
+
+                        if (title) {
+                            items.push({
+                                title:obj.options.text.clearComments,
+                                onclick:function() {
+                                    obj.setComments([ x, y ], '');
+                                }
+                            });
+                        }
+                    }
+                }
+            }
+
+            // Line
+            items.push({ type:'line' });
+
+            // Copy
+            items.push({
+                title:obj.options.text.copy,
+                shortcut:'Ctrl + C',
+                onclick:function() {
+                    obj.copy(true);
+                }
+            });
+
+            // Paste
+            if (navigator && navigator.clipboard) {
+                items.push({
+                    title:obj.options.text.paste,
+                    shortcut:'Ctrl + V',
+                    onclick:function() {
+                        if (obj.selectedCell) {
+                            navigator.clipboard.readText().then(function(text) {
+                                if (text) {
+                                    jexcel.current.paste(obj.selectedCell[0], obj.selectedCell[1], text);
+                                }
+                            });
+                        }
+                    }
+                });
+            }
+
+            // Save
+            if (obj.options.allowExport) {
+                items.push({
+                    title: obj.options.text.saveAs,
+                    shortcut: 'Ctrl + S',
+                    onclick: function () {
+                        obj.download();
+                    }
+                });
+            }
+
+            // About
+            if (obj.options.about) {
+                items.push({
+                    title:obj.options.text.about,
+                    onclick:function() {
+                        alert(obj.options.about);
+                    }
+                });
+            }
+
+            return items;
+        }
+    }
+
+    obj.scrollControls = function(e) {
+        if (obj.options.lazyLoading == true) {
+            if (jexcel.timeControlLoading == null) {
+                jexcel.timeControlLoading = setTimeout(function() {
+                    if (obj.content.scrollTop + obj.content.clientHeight >= obj.content.scrollHeight) {
+                        if (obj.loadDown()) {
+                            if (obj.content.scrollTop + obj.content.clientHeight > obj.content.scrollHeight - 10) {
+                                obj.content.scrollTop = obj.content.scrollTop - obj.content.clientHeight;
+                            }
+                            obj.updateCornerPosition();
+                        }
+                    } else if (obj.content.scrollTop <= obj.content.clientHeight) {
+                        if (obj.loadUp()) {
+                            if (obj.content.scrollTop < 10) {
+                                obj.content.scrollTop = obj.content.scrollTop + obj.content.clientHeight;
+                            }
+                            obj.updateCornerPosition();
+                        }
+                    }
+
+                    jexcel.timeControlLoading = null;
+                }, 100);
+            }
+        }
+
+        // Close editor
+        if (obj.options.lazyLoading == true || obj.options.tableOverflow == true) {
+            if (obj.edition && e.target.className.substr(0,9) != 'jdropdown') {
+                obj.closeEditor(obj.edition[0], true);
+            }
+        }
+    }
+
+    el.addEventListener("DOMMouseScroll", obj.scrollControls);
+    el.addEventListener("mousewheel", obj.scrollControls);
+
+    el.jexcel = obj;
+
+    obj.init();
+
+    return obj;
+});
+
+jexcel.current = null;
+jexcel.timeControl = null;
+jexcel.timeControlLoading= null;
+
+jexcel.destroy = function(element, destroyEventHandlers) {
+    if (element.jexcel) {
+        element.jexcel = null;
+        element.innerHTML = '';
+
+        if (destroyEventHandlers) {
+            document.removeEventListener("keydown", jexcel.keyDownControls);
+            document.removeEventListener("mouseup", jexcel.mouseUpControls);
+            document.removeEventListener("mousedown", jexcel.mouseDownControls);
+            document.removeEventListener("mousemove", jexcel.mouseMoveControls);
+            document.removeEventListener("mouseover", jexcel.mouseOverControls);
+            document.removeEventListener("dblclick", jexcel.doubleClickControls);
+            document.removeEventListener("paste", jexcel.pasteControls);
+            document.removeEventListener("contextmenu", jexcel.contextMenuControls);
+            document.removeEventListener("touchstart", jexcel.touchStartControls);
+            document.removeEventListener("touchend", jexcel.touchEndControls);
+            document.removeEventListener("touchcancel", jexcel.touchEndControls);
+            jexcel = null;
+        }
+    }
+}
+
+jexcel.build = function() {
+    document.addEventListener("keydown", jexcel.keyDownControls);
+    document.addEventListener("mouseup", jexcel.mouseUpControls);
+    document.addEventListener("mousedown", jexcel.mouseDownControls);
+    document.addEventListener("mousemove", jexcel.mouseMoveControls);
+    document.addEventListener("mouseover", jexcel.mouseOverControls);
+    document.addEventListener("dblclick", jexcel.doubleClickControls);
+    document.addEventListener("paste", jexcel.pasteControls);
+    document.addEventListener("contextmenu", jexcel.contextMenuControls);
+    document.addEventListener("touchstart", jexcel.touchStartControls);
+    document.addEventListener("touchend", jexcel.touchEndControls);
+    document.addEventListener("touchcancel", jexcel.touchEndControls);
+    document.addEventListener("touchmove", jexcel.touchEndControls);
+}
+
+/**
+ * Valid international letter
+ */
+
+jexcel.validLetter = function (text) {
+    var regex = /([\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+)/g;
+    return text.match(regex) ? 1 : 0;
+}
+
+/**
+ * Helper injectArray
+ */
+jexcel.injectArray = function(o, idx, arr) {
+    return o.slice(0, idx).concat(arr).concat(o.slice(idx));
+}
+
+/**
+ * Get letter based on a number
+ * 
+ * @param integer i
+ * @return string letter
+ */
+jexcel.getColumnName = function(i) {
+    var letter = '';
+    if (i > 701) {
+        letter += String.fromCharCode(64 + parseInt(i / 676));
+        letter += String.fromCharCode(64 + parseInt((i % 676) / 26));
+    } else if (i > 25) {
+        letter += String.fromCharCode(64 + parseInt(i / 26));
+    }
+    letter += String.fromCharCode(65 + (i % 26));
+
+    return letter;
+}
+
+/**
+ * Convert excel like column to jexcel id
+ * 
+ * @param string id
+ * @return string id
+ */
+jexcel.getIdFromColumnName = function (id, arr) {
+    // Get the letters
+    var t = /^[a-zA-Z]+/.exec(id);
+
+    if (t) {
+        // Base 26 calculation
+        var code = 0;
+        for (var i = 0; i < t[0].length; i++) {
+            code += parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, (t[0].length - 1 - i));
+        }
+        code--;
+        // Make sure jexcel starts on zero
+        if (code < 0) {
+            code = 0;
+        }
+
+        // Number
+        var number = parseInt(/[0-9]+$/.exec(id));
+        if (number > 0) {
+            number--;
+        }
+
+        if (arr == true) {
+            id = [ code, number ];
+        } else {
+            id = code + '-' + number;
+        }
+    }
+
+    return id;
+}
+
+/**
+ * Convert jexcel id to excel like column name
+ * 
+ * @param string id
+ * @return string id
+ */
+jexcel.getColumnNameFromId = function (cellId) {
+    if (! Array.isArray(cellId)) {
+        cellId = cellId.split('-');
+    }
+
+    return jexcel.getColumnName(parseInt(cellId[0])) + (parseInt(cellId[1]) + 1);
+}
+
+/**
+ * Inside jexcel table
+ * 
+ * @param string id
+ * @return string id
+ */
+jexcel.getElement = function(element) {
+    var jexcelSection = 0;
+    var jexcelElement = 0;
+
+    function path (element) {
+        if (element.className) {
+            if (element.classList.contains('jexcel_container')) {
+                jexcelElement = element;
+            }
+        }
+
+        if (element.tagName == 'THEAD') {
+            jexcelSection = 1;
+        } else if (element.tagName == 'TBODY') {
+            jexcelSection = 2;
+        }
+
+        if (element.parentNode) {
+            path(element.parentNode);
+        }
+    }
+
+    path(element);
+
+    return [ jexcelElement, jexcelSection ];
+}
+
+/**
+ * Events
+ */
+jexcel.keyDownControls = function(e) {
+    if (jexcel.current) {
+        if (jexcel.current.edition) {
+            if (e.which == 27) {
+                // Escape
+                if (jexcel.current.edition) {
+                    // Exit without saving
+                    jexcel.current.closeEditor(jexcel.current.edition[0], false);
+                }
+                e.preventDefault();
+            } else if (e.which == 13) {
+                // Enter
+                if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') {
+                    jexcel.current.editor[0].children[0].calendar.close(1);
+                } else if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'dropdown' ||
+                           jexcel.current.options.columns[jexcel.current.edition[2]].type == 'autocomplete') {
+                    // Do nothing
+                } else {
+                    // Alt enter -> do not close editor
+                    if ((jexcel.current.options.wordWrap == true ||
+                         jexcel.current.options.columns[jexcel.current.edition[2]].wordWrap == true ||
+                         jexcel.current.options.data[jexcel.current.edition[3]][jexcel.current.edition[2]].length > 200) && e.altKey) {
+                        // Add new line to the editor
+                        var editorTextarea = jexcel.current.edition[0].children[0];
+                        var editorValue = jexcel.current.edition[0].children[0].value;
+                        var editorIndexOf = editorTextarea.selectionStart;
+                        editorValue = editorValue.slice(0, editorIndexOf) + "\n" + editorValue.slice(editorIndexOf);
+                        editorTextarea.value = editorValue;
+                        editorTextarea.focus();
+                        editorTextarea.selectionStart = editorIndexOf + 1;
+                        editorTextarea.selectionEnd = editorIndexOf + 1;
+                    } else {
+                        jexcel.current.edition[0].children[0].blur();
+                    }
+                }
+            } else if (e.which == 9) {
+                // Tab
+                if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') {
+                    jexcel.current.edition[0].children[0].calendar.close(1);
+                } else {
+                    jexcel.current.edition[0].children[0].blur();
+                }
+            }
+        }
+
+        if (! jexcel.current.edition && jexcel.current.selectedCell) {
+            // Which key
+            if (e.which == 37) {
+                jexcel.current.left(e.shiftKey, e.ctrlKey);
+                e.preventDefault();
+            } else if (e.which == 39) {
+                jexcel.current.right(e.shiftKey, e.ctrlKey);
+                e.preventDefault();
+            } else if (e.which == 38) {
+                jexcel.current.up(e.shiftKey, e.ctrlKey);
+                e.preventDefault();
+            } else if (e.which == 40) {
+                jexcel.current.down(e.shiftKey, e.ctrlKey);
+                e.preventDefault();
+            } else if (e.which == 36) {
+                jexcel.current.first(e.shiftKey, e.ctrlKey);
+                e.preventDefault();
+            } else if (e.which == 35) {
+                jexcel.current.last(e.shiftKey, e.ctrlKey);
+                e.preventDefault();
+            } else if (e.which == 32) {
+                if (jexcel.current.options.editable == true) {
+                    jexcel.current.setCheckRadioValue();
+                }
+                e.preventDefault();
+            } else if (e.which == 46) {
+                // Delete
+                if (jexcel.current.options.editable == true) {
+                    if (jexcel.current.selectedRow) {
+                        if (jexcel.current.options.allowDeleteRow == true) {
+                            if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedRows)) {
+                                jexcel.current.deleteRow();
+                            }
+                        }
+                    } else if (jexcel.current.selectedHeader) {
+                        if (jexcel.current.options.allowDeleteColumn == true) {
+                            if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedColumns)) {
+                                jexcel.current.deleteColumn();
+                            }
+                        }
+                    } else {
+                        // Change value
+                        jexcel.current.setValue(jexcel.current.highlighted, '');
+                    }
+                }
+            } else if (e.which == 13) {
+                // Move cursor
+                if (e.shiftKey) {
+                    jexcel.current.up();
+                } else {
+                    if (jexcel.current.options.allowInsertRow == true) {
+                        if (jexcel.current.options.allowManualInsertRow == true) {
+                            if (jexcel.current.selectedCell[1] == jexcel.current.options.data.length - 1) {
+                                // New record in case selectedCell in the last row
+                                jexcel.current.insertRow();
+                            }
+                        }
+                    }
+
+                    jexcel.current.down();
+                }
+                e.preventDefault();
+            } else if (e.which == 9) {
+                // Tab
+                if (e.shiftKey) {
+                    jexcel.current.left();
+                } else {
+                    if (jexcel.current.options.allowInsertColumn == true) {
+                        if (jexcel.current.options.allowManualInsertColumn == true) {
+                            if (jexcel.current.selectedCell[0] == jexcel.current.options.data[0].length - 1) {
+                                // New record in case selectedCell in the last column
+                                jexcel.current.insertColumn();
+                            }
+                        }
+                    }
+
+                    jexcel.current.right();
+                }
+                e.preventDefault();
+            } else {
+                if ((e.ctrlKey || e.metaKey) && ! e.shiftKey) {
+                    if (e.which == 65) {
+                        // Ctrl + A
+                        jexcel.current.selectAll();
+                        e.preventDefault();
+                    } else if (e.which == 83) {
+                        // Ctrl + S
+                        jexcel.current.download();
+                        e.preventDefault();
+                    } else if (e.which == 89) {
+                        // Ctrl + Y
+                        jexcel.current.redo();
+                        e.preventDefault();
+                    } else if (e.which == 90) {
+                        // Ctrl + Z
+                        jexcel.current.undo();
+                        e.preventDefault();
+                    } else if (e.which == 67) {
+                        // Ctrl + C
+                        jexcel.current.copy(true);
+                        e.preventDefault();
+                    } else if (e.which == 67) {
+                        // Ctrl + C
+                        jexcel.current.copy(true);
+                        e.preventDefault();
+                    } else if (e.which == 88) {
+                        // Ctrl + X
+                        if (jexcel.current.options.editable == true) {
+                            jexcel.cutControls();
+                        } else {
+                            jexcel.copyControls();
+                        }
+                        e.preventDefault();
+                    } else if (e.which == 86) {
+                        // Ctrl + V
+                        jexcel.pasteControls();
+                    }
+                } else {
+                    if (jexcel.current.selectedCell) {
+                        if (jexcel.current.options.editable == true) {
+                            var rowId = jexcel.current.selectedCell[1];
+                            var columnId = jexcel.current.selectedCell[0];
+
+                            // If is not readonly
+                            if (jexcel.current.options.columns[columnId].type != 'readonly') {
+                                // Characters able to start a edition
+                                if (e.keyCode == 32) {
+                                    // Space
+                                    if (jexcel.current.options.columns[columnId].type == 'checkbox' ||
+                                        jexcel.current.options.columns[columnId].type == 'radio') {
+                                        e.preventDefault();
+                                    } else {
+                                        // Start edition
+                                        jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true);
+                                    }
+                                } else if (e.keyCode == 113) {
+                                    // Start edition with current content F2
+                                    jexcel.current.openEditor(jexcel.current.records[rowId][columnId], false);
+                                } else if ((e.keyCode == 8) ||
+                                           (e.keyCode >= 48 && e.keyCode <= 57) ||
+                                           (e.keyCode >= 97 && e.keyCode <= 111) ||
+                                           (e.keyCode == 187) ||
+                                           ((String.fromCharCode(e.keyCode) == e.key || String.fromCharCode(e.keyCode).toLowerCase() == e.key.toLowerCase()) && jexcel.validLetter(String.fromCharCode(e.keyCode)))) {
+                                    // Start edition
+                                    jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true);
+                                    // Prevent entries in the calendar
+                                    if (jexcel.current.options.columns[columnId].type == 'calendar') {
+                                        e.preventDefault();
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            if (e.target.classList.contains('jexcel_search')) {
+                if (jexcel.timeControl) {
+                    clearTimeout(jexcel.timeControl);
+                }
+
+                jexcel.timeControl = setTimeout(function() {
+                    jexcel.current.search(e.target.value);
+                }, 200);
+            }
+        }
+    }
+}
+
+jexcel.isMouseAction = false;
+
+jexcel.mouseDownControls = function(e) {
+    e = e || window.event;
+    if (e.buttons) {
+        var mouseButton = e.buttons;
+    } else if (e.button) {
+        var mouseButton = e.button;
+    } else {
+        var mouseButton = e.which;
+    }
+
+    // Get elements
+    var jexcelTable = jexcel.getElement(e.target);
+
+    if (jexcelTable[0]) {
+        if (jexcel.current != jexcelTable[0].jexcel) {
+            if (jexcel.current) {
+                jexcel.current.resetSelection();
+            }
+            jexcel.current = jexcelTable[0].jexcel;
+        }
+    } else {
+        if (jexcel.current) {
+            jexcel.current.resetSelection(true);
+            jexcel.current = null;
+        }
+    }
+
+    if (jexcel.current && mouseButton == 1) {
+        if (e.target.classList.contains('jexcel_selectall')) {
+            if (jexcel.current) {
+                jexcel.current.selectAll();
+            }
+        } else if (e.target.classList.contains('jexcel_corner')) {
+            if (jexcel.current.options.editable == true) {
+                jexcel.current.selectedCorner = true;
+            }
+        } else {
+            // Header found
+            if (jexcelTable[1] == 1) {
+                var columnId = e.target.getAttribute('data-x');
+                if (columnId) {
+                    // Update cursor
+                    var info = e.target.getBoundingClientRect();
+                    if (jexcel.current.options.columnResize == true && info.width - e.offsetX < 6) {
+                        // Resize helper
+                        jexcel.current.resizing = {
+                            mousePosition: e.pageX,
+                            column: columnId,
+                            width: info.width,
+                        };
+
+                        // Border indication
+                        jexcel.current.headers[columnId].classList.add('resizing');
+                        for (var j = 0; j < jexcel.current.records.length; j++) {
+                            if (jexcel.current.records[j][columnId]) {
+                                jexcel.current.records[j][columnId].classList.add('resizing');
+                            }
+                        }
+                    } else if (jexcel.current.options.columnDrag == true && info.height - e.offsetY < 6) {
+                        if (jexcel.current.isColMerged(columnId).length) {
+                            console.error('JEXCEL: This column is part of a merged cell.');
+                        } else {
+                            // Reset selection
+                            jexcel.current.resetSelection();
+                            // Drag helper
+                            jexcel.current.dragging = {
+                                element: e.target,
+                                column:columnId,
+                                destination:columnId,
+                            };
+                            // Border indication
+                            jexcel.current.headers[columnId].classList.add('dragging');
+                            for (var j = 0; j < jexcel.current.records.length; j++) {
+                                if (jexcel.current.records[j][columnId]) {
+                                    jexcel.current.records[j][columnId].classList.add('dragging');
+                                }
+                            }
+                        }
+                    } else {
+                        if (jexcel.current.selectedHeader && (e.shiftKey || e.ctrlKey)) {
+                            var o = jexcel.current.selectedHeader;
+                            var d = columnId;
+                        } else {
+                            // Press to rename
+                            if (jexcel.current.selectedHeader == columnId && jexcel.current.options.allowRenameColumn == true) {
+                                jexcel.timeControl = setTimeout(function() {
+                                    jexcel.current.setHeader(columnId);
+                                }, 800);
+                            }
+
+                            // Keep track of which header was selected first
+                            jexcel.current.selectedHeader = columnId;
+
+                            // Update selection single column
+                            var o = columnId;
+                            var d = columnId;
+                        }
+
+                        // Update selection
+                        jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1);
+                    }
+                } else {
+                    if (e.target.parentNode.classList.contains('jexcel_nested')) {
+                        var column = e.target.getAttribute('data-column').split(',');
+                        var c1 = parseInt(column[0]);
+                        var c2 = parseInt(column[column.length-1]);
+                        jexcel.current.updateSelectionFromCoords(c1, 0, c2, jexcel.current.options.data.length - 1);
+                    }
+                }
+            } else {
+                jexcel.current.selectedHeader = false;
+            }
+
+            // Body found
+            if (jexcelTable[1] == 2) {
+                var rowId = e.target.getAttribute('data-y');
+
+                if (e.target.classList.contains('jexcel_row')) {
+                    var info = e.target.getBoundingClientRect();
+                    if (jexcel.current.options.rowResize == true && info.height - e.offsetY < 6) {
+                        // Resize helper
+                        jexcel.current.resizing = {
+                            element: e.target.parentNode,
+                            mousePosition: e.pageY,
+                            row: rowId,
+                            height: info.height,
+                        };
+                        // Border indication
+                        e.target.parentNode.classList.add('resizing');
+                    } else if (jexcel.current.options.rowDrag == true && info.width - e.offsetX < 6) {
+                        if (jexcel.current.isRowMerged(rowId).length) {
+                            console.error('JEXCEL: This row is part of a merged cell');
+                        } else if (jexcel.current.options.search == true && jexcel.current.results) {
+                            console.error('JEXCEL: Please clear your search before perform this action');
+                        } else {
+                            // Reset selection
+                            jexcel.current.resetSelection();
+                            // Drag helper
+                            jexcel.current.dragging = {
+                                element: e.target.parentNode,
+                                row:rowId,
+                                destination:rowId,
+                            };
+                            // Border indication
+                            e.target.parentNode.classList.add('dragging');
+                        }
+                    } else {
+                        if (jexcel.current.selectedRow && (e.shiftKey || e.ctrlKey)) {
+                            var o = jexcel.current.selectedRow;
+                            var d = rowId;
+                        } else {
+                            // Keep track of which header was selected first
+                            jexcel.current.selectedRow = rowId;
+
+                            // Update selection single column
+                            var o = rowId;
+                            var d = rowId;
+                        }
+
+                        // Update selection
+                        jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d);
+                    }
+                } else {
+                    // Jclose
+                    if (e.target.classList.contains('jclose') && e.target.clientWidth - e.offsetX < 50 && e.offsetY < 50) {
+                        jexcel.current.closeEditor(jexcel.current.edition[0], true);
+                    } else {
+                        var getCellCoords = function(element) {
+                            var x = element.getAttribute('data-x');
+                            var y = element.getAttribute('data-y');
+                            if (x && y) {
+                                return [x, y];
+                            } else {
+                                if (element.parentNode) {
+                                    return getCellCoords(element.parentNode);
+                                }
+                            }
+                        };
+
+                        var position = getCellCoords(e.target);
+                        if (position) {
+                            var columnId = position[0];
+                            var rowId = position[1];
+                            // Close edition
+                            if (jexcel.current.edition) {
+                                if (jexcel.current.edition[2] != columnId || jexcel.current.edition[3] != rowId) {
+                                    jexcel.current.closeEditor(jexcel.current.edition[0], true);
+                                }
+                            }
+
+                            if (! jexcel.current.edition) {
+                                // Update cell selection
+                                if (e.shiftKey) {
+                                    jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId);
+                                } else {
+                                    jexcel.current.updateSelectionFromCoords(columnId, rowId);
+                                }
+                            }
+
+                            // No full row selected
+                            jexcel.current.selectedHeader = null;
+                            jexcel.current.selectedRow = null;
+                        }
+                    }
+                }
+            } else {
+                jexcel.current.selectedRow = false;
+            }
+
+            // Pagination
+            if (e.target.classList.contains('jexcel_page')) {
+                if (e.target.innerText == '<') {
+                    jexcel.current.page(0);
+                } else if (e.target.innerText == '>') {
+                    jexcel.current.page(e.target.getAttribute('title') - 1);
+                } else {
+                    jexcel.current.page(e.target.innerText - 1);
+                }
+            }
+        }
+
+        if (jexcel.current.edition) {
+            jexcel.isMouseAction = false;
+        } else {
+            jexcel.isMouseAction = true;
+        }
+    } else {
+        jexcel.isMouseAction = false;
+    }
+}
+
+jexcel.mouseUpControls = function(e) {
+    if (jexcel.current) {
+        // Update cell size
+        if (jexcel.current.resizing) {
+            // Columns to be updated
+            if (jexcel.current.resizing.column) {
+                // Remove Class
+                jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing');
+                var newWidth = jexcel.current.colgroup[jexcel.current.resizing.column].getAttribute('width');
+                jexcel.current.setWidth(jexcel.current.resizing.column, newWidth, jexcel.current.resizing.width);
+                // Remove border
+                jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing');
+                for (var j = 0; j < jexcel.current.records.length; j++) {
+                    if (jexcel.current.records[j][jexcel.current.resizing.column]){
+                        jexcel.current.records[j][jexcel.current.resizing.column].classList.remove('resizing');
+                    }
+                }
+            } else {
+                // Remove Class
+                jexcel.current.rows[jexcel.current.resizing.row].children[0].classList.remove('resizing');
+                var newHeight = jexcel.current.rows[jexcel.current.resizing.row].getAttribute('height');
+                jexcel.current.setHeight(jexcel.current.resizing.row, newHeight, jexcel.current.resizing.height);
+                // Remove border
+                jexcel.current.resizing.element.classList.remove('resizing');
+            }
+            // Reset resizing helper
+            jexcel.current.resizing = null;
+        } else if (jexcel.current.dragging) {
+            // Reset dragging helper
+            if (jexcel.current.dragging) {
+                if (jexcel.current.dragging.column) {
+                    // Target
+                    var columnId = e.target.getAttribute('data-x');
+                    // Remove move style
+                    jexcel.current.headers[jexcel.current.dragging.column].classList.remove('dragging');
+                    for (var j = 0; j < jexcel.current.rows.length; j++) {
+                        if (jexcel.current.records[j][jexcel.current.dragging.column]) {
+                            jexcel.current.records[j][jexcel.current.dragging.column].classList.remove('dragging');
+                        }
+                    }
+                    for (var i = 0; i < jexcel.current.headers.length; i++) {
+                        jexcel.current.headers[i].classList.remove('dragging-left');
+                        jexcel.current.headers[i].classList.remove('dragging-right');
+                    }
+                    // Update position
+                    if (columnId) {
+                        if (jexcel.current.dragging.column != jexcel.current.dragging.destination) {
+                            jexcel.current.moveColumn(jexcel.current.dragging.column, jexcel.current.dragging.destination);
+                        }
+                    }
+                } else {
+                    var position = Array.prototype.indexOf.call(jexcel.current.dragging.element.parentNode.children, jexcel.current.dragging.element);
+                    if (jexcel.current.dragging.row != position) {
+                        jexcel.current.moveRow(jexcel.current.dragging.row, position, true);
+                    }
+                    jexcel.current.dragging.element.classList.remove('dragging');
+                }
+                jexcel.current.dragging = null;
+            }
+        } else {
+            // Close any corner selection
+            if (jexcel.current.selectedCorner) {
+                jexcel.current.selectedCorner = false;
+
+                // Data to be copied
+                if (jexcel.current.selection.length > 0) {
+                    // Copy data
+                    jexcel.current.copyData(jexcel.current.selection[0], jexcel.current.selection[jexcel.current.selection.length - 1]);
+
+                    // Remove selection
+                    jexcel.current.removeCopySelection();
+                }
+            }
+        }
+    }
+
+    // Clear any time control
+    if (jexcel.timeControl) {
+        clearTimeout(jexcel.timeControl);
+        jexcel.timeControl = null;
+    }
+
+    // Mouse up
+    jexcel.isMouseAction = false;
+}
+
+// Mouse move controls
+jexcel.mouseMoveControls = function(e) {
+    e = e || window.event;
+    if (e.buttons) {
+        var mouseButton = e.buttons;
+    } else if (e.button) {
+        var mouseButton = e.button;
+    } else {
+        var mouseButton = e.which;
+    }
+
+    if (! mouseButton) {
+        jexcel.isMouseAction = false;
+    }
+
+    if (jexcel.current) {
+        if (jexcel.isMouseAction == true) {
+            // Resizing is ongoing
+            if (jexcel.current.resizing) {
+                if (jexcel.current.resizing.column) {
+                    var width = e.pageX - jexcel.current.resizing.mousePosition;
+
+                    if (jexcel.current.resizing.width + width > 0) {
+                        var tempWidth = jexcel.current.resizing.width + width;
+                        jexcel.current.colgroup[jexcel.current.resizing.column].setAttribute('width', tempWidth);
+
+                        jexcel.current.updateCornerPosition();
+                    }
+                } else {
+                    var height = e.pageY - jexcel.current.resizing.mousePosition;
+
+                    if (jexcel.current.resizing.height + height > 0) {
+                        var tempHeight = jexcel.current.resizing.height + height;
+                        jexcel.current.rows[jexcel.current.resizing.row].setAttribute('height', tempHeight);
+
+                        jexcel.current.updateCornerPosition();
+                    }
+                }
+            }
+        } else {
+            var x = e.target.getAttribute('data-x');
+            var y = e.target.getAttribute('data-y');
+            var rect = e.target.getBoundingClientRect();
+
+            if (jexcel.current.cursor) {
+                jexcel.current.cursor.style.cursor = '';
+                jexcel.current.cursor = null;
+            }
+
+            if (e.target.parentNode.parentNode && e.target.parentNode.parentNode.className) {
+                if (e.target.parentNode.parentNode.classList.contains('resizable')) {
+                    if (e.target && x && ! y && (rect.width - (e.clientX - rect.left) < 6)) {
+                        jexcel.current.cursor = e.target;
+                        jexcel.current.cursor.style.cursor = 'col-resize';
+                    } else if (e.target && ! x && y && (rect.height - (e.clientY - rect.top) < 6)) {
+                        jexcel.current.cursor = e.target;
+                        jexcel.current.cursor.style.cursor = 'row-resize';
+                    }
+                }
+
+                if (e.target.parentNode.parentNode.classList.contains('draggable')) {
+                    if (e.target && ! x && y && (rect.width - (e.clientX - rect.left) < 6)) {
+                        jexcel.current.cursor = e.target;
+                        jexcel.current.cursor.style.cursor = 'move';
+                    } else if (e.target && x && ! y && (rect.height - (e.clientY - rect.top) < 6)) {
+                        jexcel.current.cursor = e.target;
+                        jexcel.current.cursor.style.cursor = 'move';
+                    }
+                }
+            }
+        }
+    }
+}
+
+jexcel.mouseOverControls = function(e) {
+    e = e || window.event;
+    if (e.buttons) {
+        var mouseButton = e.buttons;
+    } else if (e.button) {
+        var mouseButton = e.button;
+    } else {
+        var mouseButton = e.which;
+    }
+
+    if (! mouseButton) {
+        jexcel.isMouseAction = false;
+    }
+
+    if (jexcel.current && jexcel.isMouseAction == true) {
+        // Get elements
+        var jexcelTable = jexcel.getElement(e.target);
+
+        if (jexcelTable[0]) {
+            // Avoid cross reference
+            if (jexcel.current != jexcelTable[0].jexcel) {
+                if (jexcel.current) {
+                    return false;
+                }
+            }
+
+            var columnId = e.target.getAttribute('data-x');
+            var rowId = e.target.getAttribute('data-y');
+
+            if (jexcel.current.dragging) {
+                if (jexcel.current.dragging.column) {
+                    if (columnId) {
+                        if (jexcel.current.isColMerged(columnId).length) {
+                            console.error('JEXCEL: This column is part of a merged cell.');
+                        } else {
+                            for (var i = 0; i < jexcel.current.headers.length; i++) {
+                                jexcel.current.headers[i].classList.remove('dragging-left');
+                                jexcel.current.headers[i].classList.remove('dragging-right');
+                            }
+
+                            if (jexcel.current.dragging.column == columnId) {
+                                jexcel.current.dragging.destination = parseInt(columnId);
+                            } else {
+                                if (e.target.clientWidth / 2 > e.offsetX) {
+                                    if (jexcel.current.dragging.column < columnId) {
+                                        jexcel.current.dragging.destination = parseInt(columnId) - 1;
+                                    } else {
+                                        jexcel.current.dragging.destination = parseInt(columnId);
+                                    }
+                                    jexcel.current.headers[columnId].classList.add('dragging-left');
+                                } else {
+                                    if (jexcel.current.dragging.column < columnId) {
+                                        jexcel.current.dragging.destination = parseInt(columnId);
+                                    } else {
+                                        jexcel.current.dragging.destination = parseInt(columnId) + 1;
+                                    }
+                                    jexcel.current.headers[columnId].classList.add('dragging-right');
+                                }
+                            }
+                        }
+                    }
+                } else {
+                    if (rowId) {
+                        if (jexcel.current.isRowMerged(rowId).length) {
+                            console.error('JEXCEL: This row is part of a merged cell.');
+                        } else {
+                            var target = (e.target.clientHeight / 2 > e.offsetY) ? e.target.parentNode.nextSibling : e.target.parentNode;
+                            e.target.parentNode.parentNode.insertBefore(jexcel.current.dragging.element, target);
+                        }
+                    }
+                }
+            } else if (jexcel.current.resizing) {
+            } else {
+                // Header found
+                if (jexcelTable[1] == 1) {
+                    if (jexcel.current.selectedHeader) {
+                        var columnId = e.target.getAttribute('data-x');
+                        var o = jexcel.current.selectedHeader;
+                        var d = columnId;
+                        // Update selection
+                        jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1);
+                    }
+                }
+
+                // Body found
+                if (jexcelTable[1] == 2) {
+                    if (e.target.classList.contains('jexcel_row')) {
+                        if (jexcel.current.selectedRow) {
+                            var o = jexcel.current.selectedRow;
+                            var d = rowId;
+                            // Update selection
+                            jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d);
+                        }
+                    } else {
+                        // Do not select edtion is in progress
+                        if (! jexcel.current.edition) {
+                            if (columnId && rowId) {
+                                if (jexcel.current.selectedCorner) {
+                                    jexcel.current.updateCopySelection(columnId, rowId);
+                                } else {
+                                    if (jexcel.current.selectedCell) {
+                                        jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // Clear any time control
+    if (jexcel.timeControl) {
+        clearTimeout(jexcel.timeControl);
+        jexcel.timeControl = null;
+    }
+}
+
+/**
+ * Double click event handler: controls the double click in the corner, cell edition or column re-ordering.
+ */
+jexcel.doubleClickControls = function(e) {
+    // Jexcel is selected
+    if (jexcel.current) {
+        // Corner action
+        if (e.target.classList.contains('jexcel_corner')) {
+            // Any selected cells
+            if (jexcel.current.highlighted.length > 0) {
+                // Copy from this
+                var x1 = jexcel.current.highlighted[0].getAttribute('data-x');
+                var y1 = parseInt(jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-y')) + 1;
+                // Until this
+                var x2 = jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-x');
+                var y2 = jexcel.current.records.length - 1
+                // Execute copy
+                jexcel.current.copyData(jexcel.current.records[y1][x1], jexcel.current.records[y2][x2]);
+            }
+        } else {
+            // Get table
+            var jexcelTable = jexcel.getElement(e.target);
+
+            // Double click over header
+            if (jexcelTable[1] == 1 && jexcel.current.options.columnSorting == true) {
+                // Check valid column header coords
+                var columnId = e.target.getAttribute('data-x');
+                if (columnId) {
+                    jexcel.current.orderBy(columnId);
+                }
+            }
+
+            // Double click over body
+            if (jexcelTable[1] == 2 && jexcel.current.options.editable == true) {
+                if (! jexcel.current.edition) {
+                    var getCellCoords = function(element) {
+                        if (element.parentNode) {
+                            var x = element.getAttribute('data-x');
+                            var y = element.getAttribute('data-y');
+                            if (x && y) {
+                                return element;
+                            } else {
+                                return getCellCoords(element.parentNode);
+                            }
+                        }
+                    }
+                    var cell = getCellCoords(e.target);
+                    if (cell && cell.classList.contains('highlight')) {
+                        jexcel.current.openEditor(cell);
+                    }
+                }
+            }
+        }
+    }
+}
+
+jexcel.copyControls = function(e) {
+    if (jexcel.current && jexcel.copyControls.enabled) {
+        if (! jexcel.current.edition) {
+            jexcel.current.copy(true);
+        }
+    }
+}
+
+jexcel.cutControls = function(e) {
+    if (jexcel.current) {
+        if (! jexcel.current.edition) {
+            jexcel.current.copy(true);
+            if (jexcel.current.options.editable == true) {
+                jexcel.current.setValue(jexcel.current.highlighted, '');
+            }
+        }
+    }
+}
+
+jexcel.pasteControls = function(e) {
+    if (jexcel.current && jexcel.current.selectedCell) {
+        if (! jexcel.current.edition) {
+            if (jexcel.current.options.editable == true) {
+                if (e && e.clipboardData) {
+                    jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], e.clipboardData.getData('text'));
+                    e.preventDefault();
+                } else if (window.clipboardData) {
+                    jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], window.clipboardData.getData('text'));
+                }
+            }
+        }
+    }
+}
+
+jexcel.contextMenuControls = function(e) {
+    e = e || window.event;
+    if ("buttons" in e) {
+        var mouseButton = e.buttons;
+    } else {
+        var mouseButton = e.which || e.button;
+    }
+
+    if (jexcel.current) {
+        if (jexcel.current.edition) {
+            e.preventDefault();
+        } else if (jexcel.current.options.contextMenu) {
+            jexcel.current.contextMenu.contextmenu.close();
+
+            if (jexcel.current) {
+                var x = e.target.getAttribute('data-x');
+                var y = e.target.getAttribute('data-y');
+
+                if (x || y) {
+                    // Table found
+                    var items = jexcel.current.options.contextMenu(jexcel.current, x, y, e);
+                    // The id is depending on header and body
+                    jexcel.current.contextMenu.contextmenu.open(e, items);
+                    // Avoid the real one
+                    e.preventDefault();
+                }
+            }
+        }
+    }
+}
+
+jexcel.touchStartControls = function(e) {
+    var jexcelTable = jexcel.getElement(e.target);
+
+    if (jexcelTable[0]) {
+        if (jexcel.current != jexcelTable[0].jexcel) {
+            if (jexcel.current) {
+                jexcel.current.resetSelection();
+            }
+            jexcel.current = jexcelTable[0].jexcel;
+        }
+    } else {
+        if (jexcel.current) {
+            jexcel.current.resetSelection();
+            jexcel.current = null;
+        }
+    }
+
+    if (jexcel.current) {
+        if (! jexcel.current.edition) {
+            var columnId = e.target.getAttribute('data-x');
+            var rowId = e.target.getAttribute('data-y');
+
+            if (columnId && rowId) {
+                jexcel.current.updateSelectionFromCoords(columnId, rowId);
+
+                jexcel.timeControl = setTimeout(function() {
+                    jexcel.current.openEditor(e.target, false, e);
+                }, 500);
+            }
+        }
+    }
+}
+
+jexcel.touchEndControls = function(e) {
+    // Clear any time control
+    if (jexcel.timeControl) {
+        clearTimeout(jexcel.timeControl);
+        jexcel.timeControl = null;
+    }
+}
+
+/**
+ * Jquery Support
+ */
+
+if (typeof(jQuery) != 'undefined') {
+    (function($){
+        $.fn.jexcel = function(method) {
+            var spreadsheetContainer = $(this).get(0);
+            if (! spreadsheetContainer.jexcel) {
+                return jexcel($(this).get(0), arguments[0]);
+            } else {
+                return spreadsheetContainer.jexcel[method].apply(this, Array.prototype.slice.call( arguments, 1 ));
+            }
+        };
+
+    })(jQuery);
+}
+
+/**
+ * Jexcel extensions
+ */
+
+jexcel.createTabs = function(tabs, result) {
+    // Create tab container
+    tabs.innerHTML = '';
+    tabs.classList.add('jexcel_tabs');
+    var spreadsheet = []
+    var link = [];
+    for (var i = 0; i < result.length; i++) {
+        // Spreadsheet container
+        spreadsheet[i] = document.createElement('div');
+        spreadsheet[i].classList.add('jexcel_tab');
+        // Tab link
+        link[i] = document.createElement('div');
+        link[i].classList.add('jexcel_tab_link');
+        link[i].setAttribute('data-spreadsheet', i);
+        link[i].innerHTML = result[i].sheetName;
+        link[i].onclick = function() {
+            for (var j = 0; j < spreadsheet.length; j++) {
+                spreadsheet[j].style.display = 'none';
+                link[j].classList.remove('selected');
+            }
+            var i = this.getAttribute('data-spreadsheet');
+            spreadsheet[i].style.display = 'block';
+            link[i].classList.add('selected')
+        }
+        tabs.appendChild(link[i]);
+    }
+
+    // Append spreadsheet
+    for (var i = 0; i < spreadsheet.length - 1; i++) {
+        tabs.appendChild(spreadsheet[i]);
+        jexcel(spreadsheet[i], result[i]);
+    }
+
+    // First tab
+    spreadsheet[0].style.display = 'block';
+    link[0].classList.add('selected')
+}
+
+jexcel.fromSpreadsheet = function(file, __callback) {
+    var convert = function(workbook) {
+        var spreadsheets = [];
+        workbook.SheetNames.forEach(function(sheetName) {
+            var spreadsheet = {};
+            spreadsheet.rows = [];
+            spreadsheet.columns = [];
+            spreadsheet.data = [];
+            spreadsheet.style = {};
+            spreadsheet.sheetName = sheetName;
+
+            // Column widths
+            var temp = workbook.Sheets[sheetName]['!cols'];
+            if (temp && temp.length) {
+                for (var i = 0; i < temp.length; i++) {
+                    spreadsheet.columns[i] = {};
+                    if (temp[i] && temp[i].wpx) {
+                        spreadsheet.columns[i].width = temp[i].wpx + 'px';
+                    }
+                }
+            }
+            // Rows heights
+            var temp = workbook.Sheets[sheetName]['!rows'];
+            if (temp && temp.length) {
+                for (var i = 0; i < temp.length; i++) {
+                    if (temp[i] && temp[i].hpx) {
+                        spreadsheet.rows[i] = {};
+                        spreadsheet.rows[i].height = temp[i].hpx + 'px';
+                    }
+                }
+            }
+            // Merge cells
+            var temp = workbook.Sheets[sheetName]['!merges'];
+            if (temp && temp.length > 0) {
+                spreadsheet.mergeCells = [];
+                for (var i = 0; i < temp.length; i++) {
+                    var x1 = temp[i].s.c;
+                    var y1 = temp[i].s.r;
+                    var x2 = temp[i].e.c;
+                    var y2 = temp[i].e.r;
+                    var key = jexcel.getColumnNameFromId([x1,y1]);
+                    spreadsheet.mergeCells[key] = [ x2-x1+1, y2-y1+1 ];
+                }
+            }
+            // Data container
+            var max_x = 0;
+            var max_y = 0;
+            var temp = Object.keys(workbook.Sheets[sheetName]);
+            for (var i = 0; i < temp.length; i++) {
+                if (temp[i].substr(0,1) != '!') {
+                    var cell = workbook.Sheets[sheetName][temp[i]];
+                    var info = jexcel.getIdFromColumnName(temp[i], true);
+                    if (! spreadsheet.data[info[1]]) {
+                        spreadsheet.data[info[1]] = [];
+                    }
+                    spreadsheet.data[info[1]][info[0]] = cell.f ? '=' + cell.f : cell.w;
+                    if (max_x < info[0]) {
+                        max_x = info[0];
+                    }
+                    if (max_y < info[1]) {
+                        max_y = info[1];
+                    }
+                    // Style
+                    if (cell.style && Object.keys(cell.style).length > 0) {
+                        spreadsheet.style[temp[i]] = cell.style;
+                    }
+                    if (cell.s && cell.s.fgColor) {
+                        if (spreadsheet.style[temp[i]]) {
+                            spreadsheet.style[temp[i]] += ';';
+                        }
+                        spreadsheet.style[temp[i]] += 'background-color:#' + cell.s.fgColor.rgb;
+                    }
+                }
+            }
+            var numColumns = spreadsheet.columns;
+            for (var j = 0; j <= max_y; j++) {
+                for (var i = 0; i <= max_x; i++) {
+                    if (! spreadsheet.data[j]) {
+                        spreadsheet.data[j] = [];
+                    }
+                    if (! spreadsheet.data[j][i]) {
+                        if (numColumns < i) {
+                            spreadsheet.data[j][i] = '';
+                        }
+                    }
+                }
+            }
+            spreadsheets.push(spreadsheet);
+        });
+
+        return spreadsheets;
+    }
+
+    var oReq;
+    oReq = new XMLHttpRequest();
+    oReq.open("GET", file, true);
+
+    if(typeof Uint8Array !== 'undefined') {
+        oReq.responseType = "arraybuffer";
+        oReq.onload = function(e) {
+            var arraybuffer = oReq.response;
+            var data = new Uint8Array(arraybuffer);
+            var wb = XLSX.read(data, {type:"array", cellFormula:true, cellStyles:true });
+            __callback(convert(wb))
+        };
+    } else {
+        oReq.setRequestHeader("Accept-Charset", "x-user-defined");
+        oReq.onreadystatechange = function() { if(oReq.readyState == 4 && oReq.status == 200) {
+            var ff = convertResponseBodyToText(oReq.responseBody);
+            var wb = XLSX.read(ff, {type:"binary", cellFormula:true, cellStyles:true });
+            __callback(convert(wb))
+        }};
+    }
+
+    oReq.send();
+}
+
+// Based on sutoiku work (https://github.com/sutoiku)
+
+var error = (function() {
+    var exports = {};
+
+    exports.nil = new Error('#NULL!');
+    exports.div0 = new Error('#DIV/0!');
+    exports.value = new Error('#VALUE!');
+    exports.ref = new Error('#REF!');
+    exports.name = new Error('#NAME?');
+    exports.num = new Error('#NUM!');
+    exports.na = new Error('#N/A');
+    exports.error = new Error('#ERROR!');
+    exports.data = new Error('#GETTING_DATA');
+
+    return exports;
+})();
+
+var utils = (function() {
+    var exports = {};
+
+    exports.flattenShallow = function(array) {
+        if (!array || !array.reduce) {
+            return array;
+        }
+
+        return array.reduce(function(a, b) {
+            var aIsArray = Array.isArray(a);
+            var bIsArray = Array.isArray(b);
+
+            if (aIsArray && bIsArray) {
+                return a.concat(b);
+            }
+            if (aIsArray) {
+                a.push(b);
+
+                return a;
+            }
+            if (bIsArray) {
+                return [ a ].concat(b);
+            }
+
+            return [ a, b ];
+        });
+    };
+
+    exports.isFlat = function(array) {
+        if (!array) {
+            return false;
+        }
+
+        for (var i = 0; i < array.length; ++i) {
+            if (Array.isArray(array[i])) {
+                return false;
+            }
+        }
+
+        return true;
+    };
+
+    exports.flatten = function() {
+        var result = exports.argsToArray.apply(null, arguments);
+
+        while (!exports.isFlat(result)) {
+            result = exports.flattenShallow(result);
+        }
+
+        return result;
+    };
+
+    exports.argsToArray = function(args) {
+        var result = [];
+
+        exports.arrayEach(args, function(value) {
+            result.push(value);
+        });
+
+        return result;
+    };
+
+    exports.numbers = function() {
+        var possibleNumbers = this.flatten.apply(null, arguments);
+        return possibleNumbers.filter(function(el) {
+            return typeof el === 'number';
+        });
+    };
+
+    exports.cleanFloat = function(number) {
+        var power = 1e14;
+        return Math.round(number * power) / power;
+    };
+
+    exports.parseBool = function(bool) {
+        if (typeof bool === 'boolean') {
+            return bool;
+        }
+
+        if (bool instanceof Error) {
+            return bool;
+        }
+
+        if (typeof bool === 'number') {
+            return bool !== 0;
+        }
+
+        if (typeof bool === 'string') {
+            var up = bool.toUpperCase();
+            if (up === 'TRUE') {
+                return true;
+            }
+
+            if (up === 'FALSE') {
+                return false;
+            }
+        }
+
+        if (bool instanceof Date && !isNaN(bool)) {
+            return true;
+        }
+
+        return error.value;
+    };
+
+    exports.parseNumber = function(string) {
+        if (string === undefined || string === '') {
+            return error.value;
+        }
+        if (!isNaN(string)) {
+            return parseFloat(string);
+        }
+
+        return error.value;
+    };
+
+    exports.parseNumberArray = function(arr) {
+        var len;
+
+        if (!arr || (len = arr.length) === 0) {
+            return error.value;
+        }
+
+        var parsed;
+
+        while (len--) {
+            parsed = exports.parseNumber(arr[len]);
+            if (parsed === error.value) {
+                return parsed;
+            }
+            arr[len] = parsed;
+        }
+
+        return arr;
+    };
+
+    exports.parseMatrix = function(matrix) {
+        var n;
+
+        if (!matrix || (n = matrix.length) === 0) {
+            return error.value;
+        }
+        var pnarr;
+
+        for (var i = 0; i < matrix.length; i++) {
+            pnarr = exports.parseNumberArray(matrix[i]);
+            matrix[i] = pnarr;
+
+            if (pnarr instanceof Error) {
+                return pnarr;
+            }
+        }
+
+        return matrix;
+    };
+
+    var d1900 = new Date(Date.UTC(1900, 0, 1));
+    exports.parseDate = function(date) {
+        if (!isNaN(date)) {
+            if (date instanceof Date) {
+                return new Date(date);
+            }
+            var d = parseInt(date, 10);
+            if (d < 0) {
+                return error.num;
+            }
+            if (d <= 60) {
+                return new Date(d1900.getTime() + (d - 1) * 86400000);
+            }
+            return new Date(d1900.getTime() + (d - 2) * 86400000);
+        }
+        if (typeof date === 'string') {
+            date = new Date(date);
+            if (!isNaN(date)) {
+                return date;
+            }
+        }
+        return error.value;
+    };
+
+    exports.parseDateArray = function(arr) {
+        var len = arr.length;
+        var parsed;
+        while (len--) {
+            parsed = this.parseDate(arr[len]);
+            if (parsed === error.value) {
+                return parsed;
+            }
+            arr[len] = parsed;
+        }
+        return arr;
+    };
+
+    exports.anyIsError = function() {
+        var n = arguments.length;
+        while (n--) {
+            if (arguments[n] instanceof Error) {
+                return true;
+            }
+        }
+        return false;
+    };
+
+    exports.arrayValuesToNumbers = function(arr) {
+        var n = arr.length;
+        var el;
+        while (n--) {
+            el = arr[n];
+            if (typeof el === 'number') {
+                continue;
+            }
+            if (el === true) {
+                arr[n] = 1;
+                continue;
+            }
+            if (el === false) {
+                arr[n] = 0;
+                continue;
+            }
+            if (typeof el === 'string') {
+                var number = this.parseNumber(el);
+                if (number instanceof Error) {
+                    arr[n] = 0;
+                } else {
+                    arr[n] = number;
+                }
+            }
+        }
+        return arr;
+    };
+
+    exports.rest = function(array, idx) {
+        idx = idx || 1;
+        if (!array || typeof array.slice !== 'function') {
+            return array;
+        }
+        return array.slice(idx);
+    };
+
+    exports.initial = function(array, idx) {
+        idx = idx || 1;
+        if (!array || typeof array.slice !== 'function') {
+            return array;
+        }
+        return array.slice(0, array.length - idx);
+    };
+
+    exports.arrayEach = function(array, iteratee) {
+        var index = -1, length = array.length;
+
+        while (++index < length) {
+            if (iteratee(array[index], index, array) === false) {
+                break;
+            }
+        }
+
+        return array;
+    };
+
+    exports.transpose = function(matrix) {
+        if (!matrix) {
+            return error.value;
+        }
+
+        return matrix[0].map(function(col, i) {
+            return matrix.map(function(row) {
+                return row[i];
+            });
+        });
+    };
+
+    return exports;
+})();
+
+jexcel.methods = {};
+
+jexcel.methods.datetime = (function() {
+    var exports = {};
+
+    var d1900 = new Date(1900, 0, 1);
+    var WEEK_STARTS = [
+        undefined,
+        0,
+        1,
+        undefined,
+        undefined,
+        undefined,
+        undefined,
+        undefined,
+        undefined,
+        undefined,
+        undefined,
+        undefined,
+        1,
+        2,
+        3,
+        4,
+        5,
+        6,
+        0
+    ];
+    var WEEK_TYPES = [
+        [],
+        [1, 2, 3, 4, 5, 6, 7],
+        [7, 1, 2, 3, 4, 5, 6],
+        [6, 0, 1, 2, 3, 4, 5],
+        [],
+        [],
+        [],
+        [],
+        [],
+        [],
+        [],
+        [7, 1, 2, 3, 4, 5, 6],
+        [6, 7, 1, 2, 3, 4, 5],
+        [5, 6, 7, 1, 2, 3, 4],
+        [4, 5, 6, 7, 1, 2, 3],
+        [3, 4, 5, 6, 7, 1, 2],
+        [2, 3, 4, 5, 6, 7, 1],
+        [1, 2, 3, 4, 5, 6, 7]
+    ];
+    var WEEKEND_TYPES = [
+        [],
+        [6, 0],
+        [0, 1],
+        [1, 2],
+        [2, 3],
+        [3, 4],
+        [4, 5],
+        [5, 6],
+        undefined,
+        undefined,
+        undefined, [0, 0],
+        [1, 1],
+        [2, 2],
+        [3, 3],
+        [4, 4],
+        [5, 5],
+        [6, 6]
+    ];
+
+    exports.DATE = function(year, month, day) {
+        year = utils.parseNumber(year);
+        month = utils.parseNumber(month);
+        day = utils.parseNumber(day);
+        if (utils.anyIsError(year, month, day)) {
+            return error.value;
+        }
+        if (year < 0 || month < 0 || day < 0) {
+            return error.num;
+        }
+        var date = new Date(year, month - 1, day);
+        return date;
+    };
+
+    exports.DATEVALUE = function(date_text) {
+        if (typeof date_text !== 'string') {
+            return error.value;
+        }
+        var date = Date.parse(date_text);
+        if (isNaN(date)) {
+            return error.value;
+        }
+        if (date <= -2203891200000) {
+            return (date - d1900) / 86400000 + 1;
+        }
+        return (date - d1900) / 86400000 + 2;
+    };
+
+    exports.DAY = function(serial_number) {
+        var date = utils.parseDate(serial_number);
+        if (date instanceof Error) {
+            return date;
+        }
+        return date.getDate();
+    };
+
+    exports.DAYS = function(end_date, start_date) {
+        end_date = utils.parseDate(end_date);
+        start_date = utils.parseDate(start_date);
+        if (end_date instanceof Error) {
+            return end_date;
+        }
+        if (start_date instanceof Error) {
+            return start_date;
+        }
+        return serial(end_date) - serial(start_date);
+    };
+
+    exports.DAYS360 = function(start_date, end_date, method) {
+    };
+
+    exports.EDATE = function(start_date, months) {
+        start_date = utils.parseDate(start_date);
+        if (start_date instanceof Error) {
+            return start_date;
+        }
+        if (isNaN(months)) {
+            return error.value;
+        }
+        months = parseInt(months, 10);
+        start_date.setMonth(start_date.getMonth() + months);
+        return serial(start_date);
+    };
+
+    exports.EOMONTH = function(start_date, months) {
+        start_date = utils.parseDate(start_date);
+        if (start_date instanceof Error) {
+            return start_date;
+        }
+        if (isNaN(months)) {
+            return error.value;
+        }
+        months = parseInt(months, 10);
+        return serial(new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0));
+    };
+
+    exports.HOUR = function(serial_number) {
+        serial_number = utils.parseDate(serial_number);
+        if (serial_number instanceof Error) {
+            return serial_number;
+        }
+        return serial_number.getHours();
+    };
+
+    exports.INTERVAL = function(second) {
+        if (typeof second !== 'number' && typeof second !== 'string') {
+            return error.value;
+        } else {
+            second = parseInt(second, 10);
+        }
+
+        var year  = Math.floor(second/946080000);
+        second    = second%946080000;
+        var month = Math.floor(second/2592000);
+        second    = second%2592000;
+        var day   = Math.floor(second/86400);
+        second    = second%86400;
+
+        var hour  = Math.floor(second/3600);
+        second    = second%3600;
+        var min   = Math.floor(second/60);
+        second    = second%60;
+        var sec   = second;
+
+        year  = (year  > 0) ? year  + 'Y' : '';
+        month = (month > 0) ? month + 'M' : '';
+        day   = (day   > 0) ? day   + 'D' : '';
+        hour  = (hour  > 0) ? hour  + 'H' : '';
+        min   = (min   > 0) ? min   + 'M' : '';
+        sec   = (sec   > 0) ? sec   + 'S' : '';
+
+        return 'P' + year + month + day + 'T' + hour + min + sec;
+    };
+
+    exports.ISOWEEKNUM = function(date) {
+        date = utils.parseDate(date);
+        if (date instanceof Error) {
+            return date;
+        }
+
+        date.setHours(0, 0, 0);
+        date.setDate(date.getDate() + 4 - (date.getDay() || 7));
+        var yearStart = new Date(date.getFullYear(), 0, 1);
+        return Math.ceil((((date - yearStart) / 86400000) + 1) / 7);
+    };
+
+    exports.MINUTE = function(serial_number) {
+        serial_number = utils.parseDate(serial_number);
+        if (serial_number instanceof Error) {
+            return serial_number;
+        }
+        return serial_number.getMinutes();
+    };
+
+    exports.MONTH = function(serial_number) {
+        serial_number = utils.parseDate(serial_number);
+        if (serial_number instanceof Error) {
+            return serial_number;
+        }
+        return serial_number.getMonth() + 1;
+    };
+
+    exports.NETWORKDAYS = function(start_date, end_date, holidays) {
+    };
+
+    exports.NETWORKDAYS.INTL = function(start_date, end_date, weekend, holidays) {
+    };
+
+    exports.NOW = function() {
+        return new Date();
+    };
+
+    exports.SECOND = function(serial_number) {
+        serial_number = utils.parseDate(serial_number);
+        if (serial_number instanceof Error) {
+            return serial_number;
+        }
+        return serial_number.getSeconds();
+    };
+
+    exports.TIME = function(hour, minute, second) {
+        hour = utils.parseNumber(hour);
+        minute = utils.parseNumber(minute);
+        second = utils.parseNumber(second);
+        if (utils.anyIsError(hour, minute, second)) {
+            return error.value;
+        }
+        if (hour < 0 || minute < 0 || second < 0) {
+            return error.num;
+        }
+        return (3600 * hour + 60 * minute + second) / 86400;
+    };
+
+    exports.TIMEVALUE = function(time_text) {
+        time_text = utils.parseDate(time_text);
+        if (time_text instanceof Error) {
+            return time_text;
+        }
+        return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400;
+    };
+
+    exports.TODAY = function() {
+        return new Date();
+    };
+
+    exports.WEEKDAY = function(serial_number, return_type) {
+        serial_number = utils.parseDate(serial_number);
+        if (serial_number instanceof Error) {
+            return serial_number;
+        }
+        if (return_type === undefined) {
+            return_type = 1;
+        }
+        var day = serial_number.getDay();
+        return WEEK_TYPES[return_type][day];
+    };
+
+    exports.WEEKNUM = function(serial_number, return_type) {
+    };
+
+    exports.WORKDAY = function(start_date, days, holidays) {
+    };
+
+    exports.WORKDAY.INTL = function(start_date, days, weekend, holidays) {
+    };
+
+    exports.YEAR = function(serial_number) {
+        serial_number = utils.parseDate(serial_number);
+        if (serial_number instanceof Error) {
+            return serial_number;
+        }
+        return serial_number.getFullYear();
+    };
+
+    function isLeapYear(year) {
+        return new Date(year, 1, 29).getMonth() === 1;
+    }
+
+    exports.YEARFRAC = function(start_date, end_date, basis) {
+    };
+
+    function serial(date) {
+        var addOn = (date > -2203891200000)?2:1;
+        return (date - d1900) / 86400000 + addOn;
+    }
+
+    return exports;
+})();
+
+jexcel.methods.database = (function() {
+    var exports = {};
+
+    function compact(array) {
+        if (!array) {
+            return array;
+        }
+        var result = [];
+        for (var i = 0; i < array.length; ++i) {
+            if (!array[i]) {
+                continue;
+            }
+            result.push(array[i]);
+        }
+        return result;
+    }
+
+    exports.FINDFIELD = function(database, title) {
+        var index = null;
+        for (var i = 0; i < database.length; i++) {
+            if (database[i][0] === title) {
+                index = i;
+                break;
+            }
+        }
+
+        // Return error if the input field title is incorrect
+        if (index == null) {
+            return error.value;
+        }
+        return index;
+    };
+
+    function findResultIndex(database, criterias) {
+        var matches = {};
+        for (var i = 1; i < database[0].length; ++i) {
+            matches[i] = true;
+        }
+        var maxCriteriaLength = criterias[0].length;
+        for (i = 1; i < criterias.length; ++i) {
+            if (criterias[i].length > maxCriteriaLength) {
+                maxCriteriaLength = criterias[i].length;
+            }
+        }
+
+        for (var k = 1; k < database.length; ++k) {
+            for (var l = 1; l < database[k].length; ++l) {
+                var currentCriteriaResult = false;
+                var hasMatchingCriteria = false;
+                for (var j = 0; j < criterias.length; ++j) {
+                    var criteria = criterias[j];
+                    if (criteria.length < maxCriteriaLength) {
+                        continue;
+                    }
+
+                    var criteriaField = criteria[0];
+                    if (database[k][0] !== criteriaField) {
+                        continue;
+                    }
+                    hasMatchingCriteria = true;
+                    for (var p = 1; p < criteria.length; ++p) {
+                        currentCriteriaResult = currentCriteriaResult
+                                || eval(database[k][l] + criteria[p]); // jshint
+                                                                        // ignore:line
+                    }
+                }
+                if (hasMatchingCriteria) {
+                    matches[l] = matches[l] && currentCriteriaResult;
+                }
+            }
+        }
+
+        var result = [];
+        for (var n = 0; n < database[0].length; ++n) {
+            if (matches[n]) {
+                result.push(n - 1);
+            }
+        }
+        return result;
+    }
+
+    // Database functions
+    exports.DAVERAGE = function(database, field, criteria) {
+        // Return error if field is not a number and not a string
+        if (isNaN(field) && (typeof field !== "string")) {
+            return error.value;
+        }
+        var resultIndexes = findResultIndex(database, criteria);
+        var targetFields = [];
+        if (typeof field === "string") {
+            var index = exports.FINDFIELD(database, field);
+            targetFields = utils.rest(database[index]);
+        } else {
+            targetFields = utils.rest(database[field]);
+        }
+        var sum = 0;
+        for (var i = 0; i < resultIndexes.length; i++) {
+            sum += targetFields[resultIndexes[i]];
+        }
+        return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length;
+    };
+
+    exports.DCOUNT = function(database, field, criteria) {
+    };
+
+    exports.DCOUNTA = function(database, field, criteria) {
+    };
+
+    exports.DGET = function(database, field, criteria) {
+        // Return error if field is not a number and not a string
+        if (isNaN(field) && (typeof field !== "string")) {
+            return error.value;
+        }
+        var resultIndexes = findResultIndex(database, criteria);
+        var targetFields = [];
+        if (typeof field === "string") {
+            var index = exports.FINDFIELD(database, field);
+            targetFields = utils.rest(database[index]);
+        } else {
+            targetFields = utils.rest(database[field]);
+        }
+        // Return error if no record meets the criteria
+        if (resultIndexes.length === 0) {
+            return error.value;
+        }
+        // Returns the #NUM! error value because more than one record meets the
+        // criteria
+        if (resultIndexes.length > 1) {
+            return error.num;
+        }
+
+        return targetFields[resultIndexes[0]];
+    };
+
+    exports.DMAX = function(database, field, criteria) {
+        // Return error if field is not a number and not a string
+        if (isNaN(field) && (typeof field !== "string")) {
+            return error.value;
+        }
+        var resultIndexes = findResultIndex(database, criteria);
+        var targetFields = [];
+        if (typeof field === "string") {
+            var index = exports.FINDFIELD(database, field);
+            targetFields = utils.rest(database[index]);
+        } else {
+            targetFields = utils.rest(database[field]);
+        }
+        var maxValue = targetFields[resultIndexes[0]];
+        for (var i = 1; i < resultIndexes.length; i++) {
+            if (maxValue < targetFields[resultIndexes[i]]) {
+                maxValue = targetFields[resultIndexes[i]];
+            }
+        }
+        return maxValue;
+    };
+
+    exports.DMIN = function(database, field, criteria) {
+        // Return error if field is not a number and not a string
+        if (isNaN(field) && (typeof field !== "string")) {
+            return error.value;
+        }
+        var resultIndexes = findResultIndex(database, criteria);
+        var targetFields = [];
+        if (typeof field === "string") {
+            var index = exports.FINDFIELD(database, field);
+            targetFields = utils.rest(database[index]);
+        } else {
+            targetFields = utils.rest(database[field]);
+        }
+        var minValue = targetFields[resultIndexes[0]];
+        for (var i = 1; i < resultIndexes.length; i++) {
+            if (minValue > targetFields[resultIndexes[i]]) {
+                minValue = targetFields[resultIndexes[i]];
+            }
+        }
+        return minValue;
+    };
+
+    exports.DPRODUCT = function(database, field, criteria) {
+        // Return error if field is not a number and not a string
+        if (isNaN(field) && (typeof field !== "string")) {
+            return error.value;
+        }
+        var resultIndexes = findResultIndex(database, criteria);
+        var targetFields = [];
+        if (typeof field === "string") {
+            var index = exports.FINDFIELD(database, field);
+            targetFields = utils.rest(database[index]);
+        } else {
+            targetFields = utils.rest(database[field]);
+        }
+        var targetValues = [];
+        for (var i = 0; i < resultIndexes.length; i++) {
+            targetValues[i] = targetFields[resultIndexes[i]];
+        }
+        targetValues = compact(targetValues);
+        var result = 1;
+        for (i = 0; i < targetValues.length; i++) {
+            result *= targetValues[i];
+        }
+        return result;
+    };
+
+    exports.DSTDEV = function(database, field, criteria) {
+    };
+
+    exports.DSTDEVP = function(database, field, criteria) {
+    };
+
+    exports.DSUM = function(database, field, criteria) {
+    };
+
+    exports.DVAR = function(database, field, criteria) {
+    };
+
+    exports.DVARP = function(database, field, criteria) {
+    };
+
+    exports.MATCH = function(lookupValue, lookupArray, matchType) {
+        if (!lookupValue && !lookupArray) {
+            return error.na;
+        }
+        if (arguments.length === 2) {
+            matchType = 1;
+        }
+        if (!(lookupArray instanceof Array)) {
+            return error.na;
+        }
+        if (matchType !== -1 && matchType !== 0 && matchType !== 1) {
+            return error.na;
+        }
+
+        var index;
+        var indexValue;
+
+        for (var idx = 0; idx < lookupArray.length; idx++) {
+            if (matchType === 1) {
+                if (lookupArray[idx] === lookupValue) {
+                    return idx + 1;
+                } else if (lookupArray[idx] < lookupValue) {
+                    if (!indexValue) {
+                        index = idx + 1;
+                        indexValue = lookupArray[idx];
+                    } else if (lookupArray[idx] > indexValue) {
+                        index = idx + 1;
+                        indexValue = lookupArray[idx];
+                    }
+                }
+            } else if (matchType === 0) {
+                if (typeof lookupValue === 'string') {
+                    lookupValue = lookupValue.replace(/\?/g, '.');
+                    if (lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase())) {
+                        return idx + 1;
+                    }
+                } else {
+                    if (lookupArray[idx] === lookupValue) {
+                        return idx + 1;
+                    }
+                }
+            } else if (matchType === -1) {
+                if (lookupArray[idx] === lookupValue) {
+                    return idx + 1;
+                } else if (lookupArray[idx] > lookupValue) {
+                    if (!indexValue) {
+                        index = idx + 1;
+                        indexValue = lookupArray[idx];
+                    } else if (lookupArray[idx] < indexValue) {
+                        index = idx + 1;
+                        indexValue = lookupArray[idx];
+                    }
+                }
+            }
+        }
+
+        return index ? index : error.na;
+    };
+
+    return exports;
+})();
+
+jexcel.methods.engineering = (function() {
+    var exports = {};
+
+    function isValidBinaryNumber(number) {
+        return (/^[01]{1,10}$/).test(number);
+    }
+
+    exports.BESSELI = function(x, n) {
+    };
+
+    exports.BESSELJ = function(x, n) {
+    };
+
+    exports.BESSELK = function(x, n) {
+    };
+
+    exports.BESSELY = function(x, n) {
+    };
+
+    exports.BIN2DEC = function(number) {
+        // Return error if number is not binary or contains more than 10
+        // characters (10 digits)
+        if (!isValidBinaryNumber(number)) {
+            return error.num;
+        }
+
+        // Convert binary number to decimal
+        var result = parseInt(number, 2);
+
+        // Handle negative numbers
+        var stringified = number.toString();
+        if (stringified.length === 10 && stringified.substring(0, 1) === '1') {
+            return parseInt(stringified.substring(1), 2) - 512;
+        } else {
+            return result;
+        }
+    };
+
+    exports.BIN2HEX = function(number, places) {
+        // Return error if number is not binary or contains more than 10
+        // characters (10 digits)
+        if (!isValidBinaryNumber(number)) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character hexadecimal number if number
+        // is negative
+        var stringified = number.toString();
+        if (stringified.length === 10 && stringified.substring(0, 1) === '1') {
+            return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16);
+        }
+
+        // Convert binary number to hexadecimal
+        var result = parseInt(number, 2).toString(16);
+
+        // Return hexadecimal number using the minimum number of characters
+        // necessary if places is undefined
+        if (places === undefined) {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.BIN2OCT = function(number, places) {
+        // Return error if number is not binary or contains more than 10
+        // characters (10 digits)
+        if (!isValidBinaryNumber(number)) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character octal number if number is
+        // negative
+        var stringified = number.toString();
+        if (stringified.length === 10 && stringified.substring(0, 1) === '1') {
+            return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8);
+        }
+
+        // Convert binary number to octal
+        var result = parseInt(number, 2).toString(8);
+
+        // Return octal number using the minimum number of characters necessary
+        // if places is undefined
+        if (places === undefined) {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.BITAND = function(number1, number2) {
+        // Return error if either number is a non-numeric value
+        number1 = utils.parseNumber(number1);
+        number2 = utils.parseNumber(number2);
+        if (utils.anyIsError(number1, number2)) {
+            return error.value;
+        }
+
+        // Return error if either number is less than 0
+        if (number1 < 0 || number2 < 0) {
+            return error.num;
+        }
+
+        // Return error if either number is a non-integer
+        if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {
+            return error.num;
+        }
+
+        // Return error if either number is greater than (2^48)-1
+        if (number1 > 281474976710655 || number2 > 281474976710655) {
+            return error.num;
+        }
+
+        // Return bitwise AND of two numbers
+        return number1 & number2;
+    };
+
+    exports.BITLSHIFT = function(number, shift) {
+        number = utils.parseNumber(number);
+        shift = utils.parseNumber(shift);
+        if (utils.anyIsError(number, shift)) {
+            return error.value;
+        }
+
+        // Return error if number is less than 0
+        if (number < 0) {
+            return error.num;
+        }
+
+        // Return error if number is a non-integer
+        if (Math.floor(number) !== number) {
+            return error.num;
+        }
+
+        // Return error if number is greater than (2^48)-1
+        if (number > 281474976710655) {
+            return error.num;
+        }
+
+        // Return error if the absolute value of shift is greater than 53
+        if (Math.abs(shift) > 53) {
+            return error.num;
+        }
+
+        // Return number shifted by shift bits to the left or to the right if
+        // shift is negative
+        return (shift >= 0) ? number << shift : number >> -shift;
+    };
+
+    exports.BITOR = function(number1, number2) {
+        number1 = utils.parseNumber(number1);
+        number2 = utils.parseNumber(number2);
+        if (utils.anyIsError(number1, number2)) {
+            return error.value;
+        }
+
+        // Return error if either number is less than 0
+        if (number1 < 0 || number2 < 0) {
+            return error.num;
+        }
+
+        // Return error if either number is a non-integer
+        if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {
+            return error.num;
+        }
+
+        // Return error if either number is greater than (2^48)-1
+        if (number1 > 281474976710655 || number2 > 281474976710655) {
+            return error.num;
+        }
+
+        // Return bitwise OR of two numbers
+        return number1 | number2;
+    };
+
+    exports.BITRSHIFT = function(number, shift) {
+        number = utils.parseNumber(number);
+        shift = utils.parseNumber(shift);
+        if (utils.anyIsError(number, shift)) {
+            return error.value;
+        }
+
+        // Return error if number is less than 0
+        if (number < 0) {
+            return error.num;
+        }
+
+        // Return error if number is a non-integer
+        if (Math.floor(number) !== number) {
+            return error.num;
+        }
+
+        // Return error if number is greater than (2^48)-1
+        if (number > 281474976710655) {
+            return error.num;
+        }
+
+        // Return error if the absolute value of shift is greater than 53
+        if (Math.abs(shift) > 53) {
+            return error.num;
+        }
+
+        // Return number shifted by shift bits to the right or to the left if
+        // shift is negative
+        return (shift >= 0) ? number >> shift : number << -shift;
+    };
+
+    exports.BITXOR = function(number1, number2) {
+        number1 = utils.parseNumber(number1);
+        number2 = utils.parseNumber(number2);
+        if (utils.anyIsError(number1, number2)) {
+            return error.value;
+        }
+
+        // Return error if either number is less than 0
+        if (number1 < 0 || number2 < 0) {
+            return error.num;
+        }
+
+        // Return error if either number is a non-integer
+        if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {
+            return error.num;
+        }
+
+        // Return error if either number is greater than (2^48)-1
+        if (number1 > 281474976710655 || number2 > 281474976710655) {
+            return error.num;
+        }
+
+        // Return bitwise XOR of two numbers
+        return number1 ^ number2;
+    };
+
+    exports.COMPLEX = function(real, imaginary, suffix) {
+        real = utils.parseNumber(real);
+        imaginary = utils.parseNumber(imaginary);
+        if (utils.anyIsError(real, imaginary)) {
+            return real;
+        }
+
+        // Set suffix
+        suffix = (suffix === undefined) ? 'i' : suffix;
+
+        // Return error if suffix is neither "i" nor "j"
+        if (suffix !== 'i' && suffix !== 'j') {
+            return error.value;
+        }
+
+        // Return complex number
+        if (real === 0 && imaginary === 0) {
+            return 0;
+        } else if (real === 0) {
+            return (imaginary === 1) ? suffix : imaginary.toString() + suffix;
+        } else if (imaginary === 0) {
+            return real.toString();
+        } else {
+            var sign = (imaginary > 0) ? '+' : '';
+            return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix);
+        }
+    };
+
+    exports.CONVERT = function(number, from_unit, to_unit) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+
+        // List of units supported by CONVERT and units defined by the
+        // International System of Units
+        // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion
+        // ratio]
+        var units = [
+            ["a.u. of action", "?", null, "action", false, false, 1.05457168181818e-34],
+            ["a.u. of charge", "e", null, "electric_charge", false, false, 1.60217653141414e-19],
+            ["a.u. of energy", "Eh", null, "energy", false, false, 4.35974417757576e-18],
+            ["a.u. of length", "a?", null, "length", false, false, 5.29177210818182e-11],
+            ["a.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31],
+            ["a.u. of time", "?/Eh", null, "time", false, false, 2.41888432650516e-17],
+            ["admiralty knot", "admkn", null, "speed", false, true, 0.514773333],
+            ["ampere", "A", null, "electric_current", true, false, 1],
+            ["ampere per meter", "A/m", null, "magnetic_field_intensity", true, false, 1],
+            ["ångström", "Å", ["ang"], "length", false, true, 1e-10],
+            ["are", "ar", null, "area", false, true, 100],
+            ["astronomical unit", "ua", null, "length", false, false, 1.49597870691667e-11],
+            ["bar", "bar", null, "pressure", false, false, 100000],
+            ["barn", "b", null, "area", false, false, 1e-28],
+            ["becquerel", "Bq", null, "radioactivity", true, false, 1],
+            ["bit", "bit", ["b"], "information", false, true, 1],
+            ["btu", "BTU", ["btu"], "energy", false, true, 1055.05585262],
+            ["byte", "byte", null, "information", false, true, 8],
+            ["candela", "cd", null, "luminous_intensity", true, false, 1],
+            ["candela per square metre", "cd/m?", null, "luminance", true, false, 1],
+            ["coulomb", "C", null, "electric_charge", true, false, 1],
+            ["cubic ångström", "ang3", ["ang^3"], "volume", false, true, 1e-30],
+            ["cubic foot", "ft3", ["ft^3"], "volume", false, true, 0.028316846592],
+            ["cubic inch", "in3", ["in^3"], "volume", false, true, 0.000016387064],
+            ["cubic light-year", "ly3", ["ly^3"], "volume", false, true, 8.46786664623715e-47],
+            ["cubic metre", "m?", null, "volume", true, true, 1],
+            ["cubic mile", "mi3", ["mi^3"], "volume", false, true, 4168181825.44058],
+            ["cubic nautical mile", "Nmi3", ["Nmi^3"], "volume", false, true, 6352182208],
+            ["cubic Pica", "Pica3", ["Picapt3", "Pica^3", "Picapt^3"], "volume", false, true, 7.58660370370369e-8],
+            ["cubic yard", "yd3", ["yd^3"], "volume", false, true, 0.764554857984],
+            ["cup", "cup", null, "volume", false, true, 0.0002365882365],
+            ["dalton", "Da", ["u"], "mass", false, false, 1.66053886282828e-27],
+            ["day", "d", ["day"], "time", false, true, 86400],
+            ["degree", "°", null, "angle", false, false, 0.0174532925199433],
+            ["degrees Rankine", "Rank", null, "temperature", false, true, 0.555555555555556],
+            ["dyne", "dyn", ["dy"], "force", false, true, 0.00001],
+            ["electronvolt", "eV", ["ev"], "energy", false, true, 1.60217656514141],
+            ["ell", "ell", null, "length", false, true, 1.143],
+            ["erg", "erg", ["e"], "energy", false, true, 1e-7],
+            ["farad", "F", null, "electric_capacitance", true, false, 1],
+            ["fluid ounce", "oz", null, "volume", false, true, 0.0000295735295625],
+            ["foot", "ft", null, "length", false, true, 0.3048],
+            ["foot-pound", "flb", null, "energy", false, true, 1.3558179483314],
+            ["gal", "Gal", null, "acceleration", false, false, 0.01],
+            ["gallon", "gal", null, "volume", false, true, 0.003785411784],
+            ["gauss", "G", ["ga"], "magnetic_flux_density", false, true, 1],
+            ["grain", "grain", null, "mass", false, true, 0.0000647989],
+            ["gram", "g", null, "mass", false, true, 0.001],
+            ["gray", "Gy", null, "absorbed_dose", true, false, 1],
+            ["gross registered ton", "GRT", ["regton"], "volume", false, true, 2.8316846592],
+            ["hectare", "ha", null, "area", false, true, 10000],
+            ["henry", "H", null, "inductance", true, false, 1],
+            ["hertz", "Hz", null, "frequency", true, false, 1],
+            ["horsepower", "HP", ["h"], "power", false, true, 745.69987158227],
+            ["horsepower-hour", "HPh", ["hh", "hph"], "energy", false, true, 2684519.538],
+            ["hour", "h", ["hr"], "time", false, true, 3600],
+            ["imperial gallon (U.K.)", "uk_gal", null, "volume", false, true, 0.00454609],
+            ["imperial hundredweight", "lcwt", ["uk_cwt", "hweight"], "mass", false, true, 50.802345],
+            ["imperial quart (U.K)", "uk_qt", null, "volume", false, true, 0.0011365225],
+            ["imperial ton", "brton", ["uk_ton", "LTON"], "mass", false, true, 1016.046909],
+            ["inch", "in", null, "length", false, true, 0.0254],
+            ["international acre", "uk_acre", null, "area", false, true, 4046.8564224],
+            ["IT calorie", "cal", null, "energy", false, true, 4.1868],
+            ["joule", "J", null, "energy", true, true, 1],
+            ["katal", "kat", null, "catalytic_activity", true, false, 1],
+            ["kelvin", "K", ["kel"], "temperature", true, true, 1],
+            ["kilogram", "kg", null, "mass", true, true, 1],
+            ["knot", "kn", null, "speed", false, true, 0.514444444444444],
+            ["light-year", "ly", null, "length", false, true, 9460730472580800],
+            ["litre", "L", ["l", "lt"], "volume", false, true, 0.001],
+            ["lumen", "lm", null, "luminous_flux", true, false, 1],
+            ["lux", "lx", null, "illuminance", true, false, 1],
+            ["maxwell", "Mx", null, "magnetic_flux", false, false, 1e-18],
+            ["measurement ton", "MTON", null, "volume", false, true, 1.13267386368],
+            ["meter per hour", "m/h", ["m/hr"], "speed", false, true, 0.00027777777777778],
+            ["meter per second", "m/s", ["m/sec"], "speed", true, true, 1],
+            ["meter per second squared", "m?s??", null, "acceleration", true, false, 1],
+            ["parsec", "pc", ["parsec"], "length", false, true, 30856775814671900],
+            ["meter squared per second", "m?/s", null, "kinematic_viscosity", true, false, 1],
+            ["metre", "m", null, "length", true, true, 1],
+            ["miles per hour", "mph", null, "speed", false, true, 0.44704],
+            ["millimetre of mercury", "mmHg", null, "pressure", false, false, 133.322],
+            ["minute", "?", null, "angle", false, false, 0.000290888208665722],
+            ["minute", "min", ["mn"], "time", false, true, 60],
+            ["modern teaspoon", "tspm", null, "volume", false, true, 0.000005],
+            ["mole", "mol", null, "amount_of_substance", true, false, 1],
+            ["morgen", "Morgen", null, "area", false, true, 2500],
+            ["n.u. of action", "?", null, "action", false, false, 1.05457168181818e-34],
+            ["n.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31],
+            ["n.u. of speed", "c?", null, "speed", false, false, 299792458],
+            ["n.u. of time", "?/(me?c??)", null, "time", false, false, 1.28808866778687e-21],
+            ["nautical mile", "M", ["Nmi"], "length", false, true, 1852],
+            ["newton", "N", null, "force", true, true, 1],
+            ["œrsted", "Oe ", null, "magnetic_field_intensity", false, false, 79.5774715459477],
+            ["ohm", "Ω", null, "electric_resistance", true, false, 1],
+            ["ounce mass", "ozm", null, "mass", false, true, 0.028349523125],
+            ["pascal", "Pa", null, "pressure", true, false, 1],
+            ["pascal second", "Pa?s", null, "dynamic_viscosity", true, false, 1],
+            ["pferdestärke", "PS", null, "power", false, true, 735.49875],
+            ["phot", "ph", null, "illuminance", false, false, 0.0001],
+            ["pica (1/6 inch)", "pica", null, "length", false, true, 0.00035277777777778],
+            ["pica (1/72 inch)", "Pica", ["Picapt"], "length", false, true, 0.00423333333333333],
+            ["poise", "P", null, "dynamic_viscosity", false, false, 0.1],
+            ["pond", "pond", null, "force", false, true, 0.00980665],
+            ["pound force", "lbf", null, "force", false, true, 4.4482216152605],
+            ["pound mass", "lbm", null, "mass", false, true, 0.45359237],
+            ["quart", "qt", null, "volume", false, true, 0.000946352946],
+            ["radian", "rad", null, "angle", true, false, 1],
+            ["second", "?", null, "angle", false, false, 0.00000484813681109536],
+            ["second", "s", ["sec"], "time", true, true, 1],
+            ["short hundredweight", "cwt", ["shweight"], "mass", false, true, 45.359237],
+            ["siemens", "S", null, "electrical_conductance", true, false, 1],
+            ["sievert", "Sv", null, "equivalent_dose", true, false, 1],
+            ["slug", "sg", null, "mass", false, true, 14.59390294],
+            ["square ångström", "ang2", ["ang^2"], "area", false, true, 1e-20],
+            ["square foot", "ft2", ["ft^2"], "area", false, true, 0.09290304],
+            ["square inch", "in2", ["in^2"], "area", false, true, 0.00064516],
+            ["square light-year", "ly2", ["ly^2"], "area", false, true, 8.95054210748189e+31],
+            ["square meter", "m?", null, "area", true, true, 1],
+            ["square mile", "mi2", ["mi^2"], "area", false, true, 2589988.110336],
+            ["square nautical mile", "Nmi2", ["Nmi^2"], "area", false, true, 3429904],
+            ["square Pica", "Pica2", ["Picapt2", "Pica^2", "Picapt^2"], "area", false, true, 0.00001792111111111],
+            ["square yard", "yd2", ["yd^2"], "area", false, true, 0.83612736],
+            ["statute mile", "mi", null, "length", false, true, 1609.344],
+            ["steradian", "sr", null, "solid_angle", true, false, 1],
+            ["stilb", "sb", null, "luminance", false, false, 0.0001],
+            ["stokes", "St", null, "kinematic_viscosity", false, false, 0.0001],
+            ["stone", "stone", null, "mass", false, true, 6.35029318],
+            ["tablespoon", "tbs", null, "volume", false, true, 0.0000147868],
+            ["teaspoon", "tsp", null, "volume", false, true, 0.00000492892],
+            ["tesla", "T", null, "magnetic_flux_density", true, true, 1],
+            ["thermodynamic calorie", "c", null, "energy", false, true, 4.184],
+            ["ton", "ton", null, "mass", false, true, 907.18474],
+            ["tonne", "t", null, "mass", false, false, 1000],
+            ["U.K. pint", "uk_pt", null, "volume", false, true, 0.00056826125],
+            ["U.S. bushel", "bushel", null, "volume", false, true, 0.03523907],
+            ["U.S. oil barrel", "barrel", null, "volume", false, true, 0.158987295],
+            ["U.S. pint", "pt", ["us_pt"], "volume", false, true, 0.000473176473],
+            ["U.S. survey mile", "survey_mi", null, "length", false, true, 1609.347219],
+            ["U.S. survey/statute acre", "us_acre", null, "area", false, true, 4046.87261],
+            ["volt", "V", null, "voltage", true, false, 1],
+            ["watt", "W", null, "power", true, true, 1],
+            ["watt-hour", "Wh", ["wh"], "energy", false, true, 3600],
+            ["weber", "Wb", null, "magnetic_flux", true, false, 1],
+            ["yard", "yd", null, "length", false, true, 0.9144],
+            ["year", "yr", null, "time", false, true, 31557600]
+        ];
+
+        // Binary prefixes
+        // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived
+        // from]
+        var binary_prefixes = {
+            Yi: ["yobi", 80, 1208925819614629174706176, "Yi", "yotta"],
+            Zi: ["zebi", 70, 1180591620717411303424, "Zi", "zetta"],
+            Ei: ["exbi", 60, 1152921504606846976, "Ei", "exa"],
+            Pi: ["pebi", 50, 1125899906842624, "Pi", "peta"],
+            Ti: ["tebi", 40, 1099511627776, "Ti", "tera"],
+            Gi: ["gibi", 30, 1073741824, "Gi", "giga"],
+            Mi: ["mebi", 20, 1048576, "Mi", "mega"],
+            ki: ["kibi", 10, 1024, "ki", "kilo"]
+        };
+
+        // Unit prefixes
+        // [Name, Multiplier, Abbreviation]
+        var unit_prefixes = {
+            Y: ["yotta", 1e+24, "Y"],
+            Z: ["zetta", 1e+21, "Z"],
+            E: ["exa", 1e+18, "E"],
+            P: ["peta", 1e+15, "P"],
+            T: ["tera", 1e+12, "T"],
+            G: ["giga", 1e+09, "G"],
+            M: ["mega", 1e+06, "M"],
+            k: ["kilo", 1e+03, "k"],
+            h: ["hecto", 1e+02, "h"],
+            e: ["dekao", 1e+01, "e"],
+            d: ["deci", 1e-01, "d"],
+            c: ["centi", 1e-02, "c"],
+            m: ["milli", 1e-03, "m"],
+            u: ["micro", 1e-06, "u"],
+            n: ["nano", 1e-09, "n"],
+            p: ["pico", 1e-12, "p"],
+            f: ["femto", 1e-15, "f"],
+            a: ["atto", 1e-18, "a"],
+            z: ["zepto", 1e-21, "z"],
+            y: ["yocto", 1e-24, "y"]
+        };
+
+        // Initialize units and multipliers
+        var from = null;
+        var to = null;
+        var base_from_unit = from_unit;
+        var base_to_unit = to_unit;
+        var from_multiplier = 1;
+        var to_multiplier = 1;
+        var alt;
+
+        // Lookup from and to units
+        for (var i = 0; i < units.length; i++) {
+            alt = (units[i][2] === null) ? [] : units[i][2];
+            if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {
+              from = units[i];
+            }
+            if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {
+              to = units[i];
+            }
+        }
+
+        // Lookup from prefix
+        if (from === null) {
+            var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)];
+            var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)];
+
+            // Handle dekao unit prefix (only unit prefix with two characters)
+            if (from_unit.substring(0, 2) === 'da') {
+              from_unit_prefix = ["dekao", 1e+01, "da"];
+            }
+
+            // Handle binary prefixes first (so that 'Yi' is processed before
+            // 'Y')
+            if (from_binary_prefix) {
+              from_multiplier = from_binary_prefix[2];
+              base_from_unit = from_unit.substring(2);
+            } else if (from_unit_prefix) {
+              from_multiplier = from_unit_prefix[1];
+              base_from_unit = from_unit.substring(from_unit_prefix[2].length);
+            }
+
+            // Lookup from unit
+            for (var j = 0; j < units.length; j++) {
+              alt = (units[j][2] === null) ? [] : units[j][2];
+              if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {
+                  from = units[j];
+              }
+            }
+        }
+
+        // Lookup to prefix
+        if (to === null) {
+            var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)];
+            var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)];
+
+            // Handle dekao unit prefix (only unit prefix with two characters)
+            if (to_unit.substring(0, 2) === 'da') {
+              to_unit_prefix = ["dekao", 1e+01, "da"];
+            }
+
+            // Handle binary prefixes first (so that 'Yi' is processed before
+            // 'Y')
+            if (to_binary_prefix) {
+              to_multiplier = to_binary_prefix[2];
+              base_to_unit = to_unit.substring(2);
+            } else if (to_unit_prefix) {
+              to_multiplier = to_unit_prefix[1];
+              base_to_unit = to_unit.substring(to_unit_prefix[2].length);
+            }
+
+            // Lookup to unit
+            for (var k = 0; k < units.length; k++) {
+              alt = (units[k][2] === null) ? [] : units[k][2];
+              if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {
+                  to = units[k];
+              }
+            }
+        }
+
+        // Return error if a unit does not exist
+        if (from === null || to === null) {
+            return error.na;
+        }
+
+        // Return error if units represent different quantities
+        if (from[3] !== to[3]) {
+            return error.na;
+        }
+
+        // Return converted number
+        return number * from[6] * from_multiplier / (to[6] * to_multiplier);
+    };
+
+    exports.DEC2BIN = function(number, places) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+
+        // Return error if number is not decimal, is lower than -512, or is
+        // greater than 511
+        if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character binary number if number is
+        // negative
+        if (number < 0) {
+            return '1' + REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2);
+        }
+
+        // Convert decimal number to binary
+        var result = parseInt(number, 10).toString(2);
+
+        // Return binary number using the minimum number of characters necessary
+        // if places is undefined
+        if (typeof places === 'undefined') {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.DEC2HEX = function(number, places) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+
+        // Return error if number is not decimal, is lower than -549755813888,
+        // or is greater than 549755813887
+        if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character hexadecimal number if number
+        // is negative
+        if (number < 0) {
+            return (1099511627776 + number).toString(16);
+        }
+
+        // Convert decimal number to hexadecimal
+        var result = parseInt(number, 10).toString(16);
+
+        // Return hexadecimal number using the minimum number of characters
+        // necessary if places is undefined
+        if (typeof places === 'undefined') {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.DEC2OCT = function(number, places) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+
+        // Return error if number is not decimal, is lower than -549755813888,
+        // or is greater than 549755813887
+        if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character octal number if number is
+        // negative
+        if (number < 0) {
+            return (1073741824 + number).toString(8);
+        }
+
+        // Convert decimal number to octal
+        var result = parseInt(number, 10).toString(8);
+
+        // Return octal number using the minimum number of characters necessary
+        // if places is undefined
+        if (typeof places === 'undefined') {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.DELTA = function(number1, number2) {
+        // Set number2 to zero if undefined
+        number2 = (number2 === undefined) ? 0 : number2;
+        number1 = utils.parseNumber(number1);
+        number2 = utils.parseNumber(number2);
+        if (utils.anyIsError(number1, number2)) {
+            return error.value;
+        }
+
+        // Return delta
+        return (number1 === number2) ? 1 : 0;
+    };
+
+    exports.ERF = function(lower_bound, upper_bound) {
+    };
+
+    exports.ERF.PRECISE = function() {
+    };
+
+    exports.ERFC = function(x) {
+    };
+
+    exports.ERFC.PRECISE = function() {
+    };
+
+    exports.GESTEP = function(number, step) {
+        step = step || 0;
+        number = utils.parseNumber(number);
+        if (utils.anyIsError(step, number)) {
+            return number;
+        }
+
+        // Return delta
+        return (number >= step) ? 1 : 0;
+    };
+
+    exports.HEX2BIN = function(number, places) {
+        // Return error if number is not hexadecimal or contains more than ten
+        // characters (10 digits)
+        if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
+            return error.num;
+        }
+
+        // Check if number is negative
+        var negative = (number.length === 10 && number.substring(0, 1).toLowerCase() === 'f') ? true : false;
+
+        // Convert hexadecimal number to decimal
+        var decimal = (negative) ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);
+
+        // Return error if number is lower than -512 or greater than 511
+        if (decimal < -512 || decimal > 511) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character binary number if number is
+        // negative
+        if (negative) {
+            return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);
+        }
+
+        // Convert decimal number to binary
+        var result = decimal.toString(2);
+
+        // Return binary number using the minimum number of characters necessary
+        // if places is undefined
+        if (places === undefined) {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.HEX2DEC = function(number) {
+        // Return error if number is not hexadecimal or contains more than ten
+        // characters (10 digits)
+        if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
+            return error.num;
+        }
+
+        // Convert hexadecimal number to decimal
+        var decimal = parseInt(number, 16);
+
+        // Return decimal number
+        return (decimal >= 549755813888) ? decimal - 1099511627776 : decimal;
+    };
+
+    exports.HEX2OCT = function(number, places) {
+        // Return error if number is not hexadecimal or contains more than ten
+        // characters (10 digits)
+        if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
+            return error.num;
+        }
+
+        // Convert hexadecimal number to decimal
+        var decimal = parseInt(number, 16);
+
+        // Return error if number is positive and greater than 0x1fffffff
+        // (536870911)
+        if (decimal > 536870911 && decimal < 1098974756864) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character octal number if number is
+        // negative
+        if (decimal >= 1098974756864) {
+            return (decimal - 1098437885952).toString(8);
+        }
+
+        // Convert decimal number to octal
+        var result = decimal.toString(8);
+
+        // Return octal number using the minimum number of characters necessary
+        // if places is undefined
+        if (places === undefined) {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.IMABS = function(inumber) {
+        // Lookup real and imaginary coefficients using exports.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        // Return error if either coefficient is not a number
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Return absolute value of complex number
+        return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
+    };
+
+    exports.IMAGINARY = function(inumber) {
+        if (inumber === undefined || inumber === true || inumber === false) {
+            return error.value;
+        }
+
+        // Return 0 if inumber is equal to 0
+        if (inumber === 0 || inumber === '0') {
+            return 0;
+        }
+
+        // Handle special cases
+        if (['i', 'j'].indexOf(inumber) >= 0) {
+            return 1;
+        }
+
+        // Normalize imaginary coefficient
+        inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j');
+
+        // Lookup sign
+        var plus = inumber.indexOf('+');
+        var minus = inumber.indexOf('-');
+        if (plus === 0) {
+            plus = inumber.indexOf('+', 1);
+        }
+
+        if (minus === 0) {
+            minus = inumber.indexOf('-', 1);
+        }
+
+        // Lookup imaginary unit
+        var last = inumber.substring(inumber.length - 1, inumber.length);
+        var unit = (last === 'i' || last === 'j');
+
+        if (plus >= 0 || minus >= 0) {
+            // Return error if imaginary unit is neither i nor j
+            if (!unit) {
+              return error.num;
+            }
+
+            // Return imaginary coefficient of complex number
+            if (plus >= 0) {
+              return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?
+                  error.num :
+                  Number(inumber.substring(plus + 1, inumber.length - 1));
+            } else {
+              return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?
+                  error.num :
+                  -Number(inumber.substring(minus + 1, inumber.length - 1));
+            }
+        } else {
+            if (unit) {
+              return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : inumber.substring(0, inumber.length - 1);
+            } else {
+              return (isNaN(inumber)) ? error.num : 0;
+            }
+        }
+    };
+
+    exports.IMARGUMENT = function(inumber) {
+        // Lookup real and imaginary coefficients using exports.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        // Return error if either coefficient is not a number
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Return error if inumber is equal to zero
+        if (x === 0 && y === 0) {
+            return error.div0;
+        }
+
+        // Return PI/2 if x is equal to zero and y is positive
+        if (x === 0 && y > 0) {
+            return Math.PI / 2;
+        }
+
+        // Return -PI/2 if x is equal to zero and y is negative
+        if (x === 0 && y < 0) {
+            return -Math.PI / 2;
+        }
+
+        // Return zero if x is negative and y is equal to zero
+        if (y === 0 && x > 0) {
+            return 0;
+        }
+
+        // Return zero if x is negative and y is equal to zero
+        if (y === 0 && x < 0) {
+            return -Math.PI;
+        }
+
+        // Return argument of complex number
+        if (x > 0) {
+            return Math.atan(y / x);
+        } else if (x < 0 && y >= 0) {
+            return Math.atan(y / x) + Math.PI;
+        } else {
+            return Math.atan(y / x) - Math.PI;
+        }
+    };
+
+    exports.IMCONJUGATE = function(inumber) {
+        // Lookup real and imaginary coefficients using exports.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return conjugate of complex number
+        return (y !== 0) ? exports.COMPLEX(x, -y, unit) : inumber;
+    };
+
+    exports.IMCOS = function(inumber) {
+        // Lookup real and imaginary coefficients using exports.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return cosine of complex number
+        return exports.COMPLEX(Math.cos(x) * (Math.exp(y) + Math.exp(-y)) / 2, -Math.sin(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);
+    };
+
+    exports.IMCOSH = function(inumber) {
+        // Lookup real and imaginary coefficients using exports.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return hyperbolic cosine of complex number
+        return exports.COMPLEX(Math.cos(y) * (Math.exp(x) + Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) - Math.exp(-x)) / 2, unit);
+    };
+
+    exports.IMCOT = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Return cotangent of complex number
+        return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber));
+    };
+
+    exports.IMDIV = function(inumber1, inumber2) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var a = exports.IMREAL(inumber1);
+        var b = exports.IMAGINARY(inumber1);
+        var c = exports.IMREAL(inumber2);
+        var d = exports.IMAGINARY(inumber2);
+
+        if (utils.anyIsError(a, b, c, d)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit1 = inumber1.substring(inumber1.length - 1);
+        var unit2 = inumber2.substring(inumber2.length - 1);
+        var unit = 'i';
+        if (unit1 === 'j') {
+            unit = 'j';
+        } else if (unit2 === 'j') {
+            unit = 'j';
+        }
+
+        // Return error if inumber2 is null
+        if (c === 0 && d === 0) {
+            return error.num;
+        }
+
+        // Return exponential of complex number
+        var den = c * c + d * d;
+        return exports.COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit);
+    };
+
+    exports.IMEXP = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return exponential of complex number
+        var e = Math.exp(x);
+        return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit);
+    };
+
+    exports.IMLN = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return exponential of complex number
+        return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit);
+    };
+
+    exports.IMLOG10 = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return exponential of complex number
+        return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit);
+    };
+
+    exports.IMLOG2 = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return exponential of complex number
+        return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit);
+    };
+
+    exports.IMPOWER = function(inumber, number) {
+        number = utils.parseNumber(number);
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+        if (utils.anyIsError(number, x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Calculate power of modulus
+        var p = Math.pow(exports.IMABS(inumber), number);
+
+        // Calculate argument
+        var t = exports.IMARGUMENT(inumber);
+
+        // Return exponential of complex number
+        return exports.COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit);
+    };
+
+    exports.IMPRODUCT = function() {
+        // Initialize result
+        var result = arguments[0];
+
+        // Loop on all numbers
+        for (var i = 1; i < arguments.length; i++) {
+            // Lookup coefficients of two complex numbers
+            var a = exports.IMREAL(result);
+            var b = exports.IMAGINARY(result);
+            var c = exports.IMREAL(arguments[i]);
+            var d = exports.IMAGINARY(arguments[i]);
+
+            if (utils.anyIsError(a, b, c, d)) {
+              return error.value;
+            }
+
+            // Complute product of two complex numbers
+            result = exports.COMPLEX(a * c - b * d, a * d + b * c);
+        }
+
+        // Return product of complex numbers
+        return result;
+    };
+
+    exports.IMREAL = function(inumber) {
+        if (inumber === undefined || inumber === true || inumber === false) {
+            return error.value;
+        }
+
+        // Return 0 if inumber is equal to 0
+        if (inumber === 0 || inumber === '0') {
+            return 0;
+        }
+
+        // Handle special cases
+        if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) {
+            return 0;
+        }
+
+        // Lookup sign
+        var plus = inumber.indexOf('+');
+        var minus = inumber.indexOf('-');
+        if (plus === 0) {
+            plus = inumber.indexOf('+', 1);
+        }
+        if (minus === 0) {
+            minus = inumber.indexOf('-', 1);
+        }
+
+        // Lookup imaginary unit
+        var last = inumber.substring(inumber.length - 1, inumber.length);
+        var unit = (last === 'i' || last === 'j');
+
+        if (plus >= 0 || minus >= 0) {
+            // Return error if imaginary unit is neither i nor j
+            if (!unit) {
+              return error.num;
+            }
+
+            // Return real coefficient of complex number
+            if (plus >= 0) {
+              return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?
+                  error.num :
+                  Number(inumber.substring(0, plus));
+            } else {
+              return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?
+                  error.num :
+                  Number(inumber.substring(0, minus));
+            }
+        } else {
+            if (unit) {
+              return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : 0;
+            } else {
+              return (isNaN(inumber)) ? error.num : inumber;
+            }
+        }
+    };
+
+    exports.IMSEC = function(inumber) {
+        // Return error if inumber is a logical value
+        if (inumber === true || inumber === false) {
+            return error.value;
+        }
+
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Return secant of complex number
+        return exports.IMDIV('1', exports.IMCOS(inumber));
+    };
+
+    exports.IMSECH = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Return hyperbolic secant of complex number
+        return exports.IMDIV('1', exports.IMCOSH(inumber));
+    };
+
+    exports.IMSIN = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return sine of complex number
+        return exports.COMPLEX(Math.sin(x) * (Math.exp(y) + Math.exp(-y)) / 2, Math.cos(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);
+    };
+
+    exports.IMSINH = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Return hyperbolic sine of complex number
+        return exports.COMPLEX(Math.cos(y) * (Math.exp(x) - Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) + Math.exp(-x)) / 2, unit);
+    };
+
+    exports.IMSQRT = function(inumber) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit = inumber.substring(inumber.length - 1);
+        unit = (unit === 'i' || unit === 'j') ? unit : 'i';
+
+        // Calculate power of modulus
+        var s = Math.sqrt(exports.IMABS(inumber));
+
+        // Calculate argument
+        var t = exports.IMARGUMENT(inumber);
+
+        // Return exponential of complex number
+        return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit);
+    };
+
+    exports.IMCSC = function (inumber) {
+        // Return error if inumber is a logical value
+        if (inumber === true || inumber === false) {
+            return error.value;
+        }
+
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        // Return error if either coefficient is not a number
+        if (utils.anyIsError(x, y)) {
+            return error.num;
+        }
+
+        // Return cosecant of complex number
+        return exports.IMDIV('1', exports.IMSIN(inumber));
+    };
+
+    exports.IMCSCH = function (inumber) {
+        // Return error if inumber is a logical value
+        if (inumber === true || inumber === false) {
+            return error.value;
+        }
+
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        // Return error if either coefficient is not a number
+        if (utils.anyIsError(x, y)) {
+            return error.num;
+        }
+
+        // Return hyperbolic cosecant of complex number
+        return exports.IMDIV('1', exports.IMSINH(inumber));
+    };
+
+    exports.IMSUB = function(inumber1, inumber2) {
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var a = this.IMREAL(inumber1);
+        var b = this.IMAGINARY(inumber1);
+        var c = this.IMREAL(inumber2);
+        var d = this.IMAGINARY(inumber2);
+
+        if (utils.anyIsError(a, b, c, d)) {
+            return error.value;
+        }
+
+        // Lookup imaginary unit
+        var unit1 = inumber1.substring(inumber1.length - 1);
+        var unit2 = inumber2.substring(inumber2.length - 1);
+        var unit = 'i';
+        if (unit1 === 'j') {
+            unit = 'j';
+        } else if (unit2 === 'j') {
+            unit = 'j';
+        }
+
+        // Return _ of two complex numbers
+        return this.COMPLEX(a - c, b - d, unit);
+    };
+
+    exports.IMSUM = function() {
+        var args = utils.flatten(arguments);
+
+        // Initialize result
+        var result = args[0];
+
+        // Loop on all numbers
+        for (var i = 1; i < args.length; i++) {
+            // Lookup coefficients of two complex numbers
+            var a = this.IMREAL(result);
+            var b = this.IMAGINARY(result);
+            var c = this.IMREAL(args[i]);
+            var d = this.IMAGINARY(args[i]);
+
+            if (utils.anyIsError(a, b, c, d)) {
+              return error.value;
+            }
+
+            // Complute product of two complex numbers
+            result = this.COMPLEX(a + c, b + d);
+        }
+
+        // Return sum of complex numbers
+        return result;
+    };
+
+    exports.IMTAN = function(inumber) {
+        // Return error if inumber is a logical value
+        if (inumber === true || inumber === false) {
+            return error.value;
+        }
+
+        // Lookup real and imaginary coefficients using Formula.js
+        // [http://formulajs.org]
+        var x = exports.IMREAL(inumber);
+        var y = exports.IMAGINARY(inumber);
+
+        if (utils.anyIsError(x, y)) {
+            return error.value;
+        }
+
+        // Return tangent of complex number
+        return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber));
+    };
+
+    exports.OCT2BIN = function(number, places) {
+        // Return error if number is not hexadecimal or contains more than ten
+        // characters (10 digits)
+        if (!/^[0-7]{1,10}$/.test(number)) {
+            return error.num;
+        }
+
+        // Check if number is negative
+        var negative = (number.length === 10 && number.substring(0, 1) === '7') ? true : false;
+
+        // Convert octal number to decimal
+        var decimal = (negative) ? parseInt(number, 8) - 1073741824 : parseInt(number, 8);
+
+        // Return error if number is lower than -512 or greater than 511
+        if (decimal < -512 || decimal > 511) {
+            return error.num;
+        }
+
+        // Ignore places and return a 10-character binary number if number is
+        // negative
+        if (negative) {
+            return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);
+        }
+
+        // Convert decimal number to binary
+        var result = decimal.toString(2);
+
+        // Return binary number using the minimum number of characters necessary
+        // if places is undefined
+        if (typeof places === 'undefined') {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    exports.OCT2DEC = function(number) {
+        // Return error if number is not octal or contains more than ten
+        // characters (10 digits)
+        if (!/^[0-7]{1,10}$/.test(number)) {
+            return error.num;
+        }
+
+        // Convert octal number to decimal
+        var decimal = parseInt(number, 8);
+
+        // Return decimal number
+        return (decimal >= 536870912) ? decimal - 1073741824 : decimal;
+    };
+
+    exports.OCT2HEX = function(number, places) {
+        // Return error if number is not octal or contains more than ten
+        // characters (10 digits)
+        if (!/^[0-7]{1,10}$/.test(number)) {
+            return error.num;
+        }
+
+        // Convert octal number to decimal
+        var decimal = parseInt(number, 8);
+
+        // Ignore places and return a 10-character octal number if number is
+        // negative
+        if (decimal >= 536870912) {
+            return 'ff' + (decimal + 3221225472).toString(16);
+        }
+
+        // Convert decimal number to hexadecimal
+        var result = decimal.toString(16);
+
+        // Return hexadecimal number using the minimum number of characters
+        // necessary if places is undefined
+        if (places === undefined) {
+            return result;
+        } else {
+            // Return error if places is nonnumeric
+            if (isNaN(places)) {
+              return error.value;
+            }
+
+            // Return error if places is negative
+            if (places < 0) {
+              return error.num;
+            }
+
+            // Truncate places in case it is not an integer
+            places = Math.floor(places);
+
+            // Pad return value with leading 0s (zeros) if necessary (using
+            // Underscore.string)
+            return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;
+        }
+    };
+
+    return exports;
+})();
+
+jexcel.methods.financial = (function() {
+    var exports = {};
+
+    function validDate(d) {
+        return d && d.getTime && !isNaN(d.getTime());
+    }
+
+    function ensureDate(d) {
+        return (d instanceof Date)?d:new Date(d);
+    }
+
+    exports.ACCRINT = function(issue, first, settlement, rate, par, frequency, basis) {
+        // Return error if either date is invalid
+        issue        = ensureDate(issue);
+        first        = ensureDate(first);
+        settlement = ensureDate(settlement);
+        if (!validDate(issue) || !validDate(first) || !validDate(settlement)) {
+            return '#VALUE!';
+        }
+
+        // Return error if either rate or par are lower than or equal to zero
+        if (rate <= 0 || par <= 0) {
+            return '#NUM!';
+        }
+
+        // Return error if frequency is neither 1, 2, or 4
+        if ([1, 2, 4].indexOf(frequency) === -1) {
+            return '#NUM!';
+        }
+
+        // Return error if basis is neither 0, 1, 2, 3, or 4
+        if ([0, 1, 2, 3, 4].indexOf(basis) === -1) {
+            return '#NUM!';
+        }
+
+        // Return error if settlement is before or equal to issue
+        if (settlement <= issue) {
+            return '#NUM!';
+        }
+
+        // Set default values
+        par   = par   || 0;
+        basis = basis || 0;
+
+        // Compute accrued interest
+        return par * rate * YEARFRAC(issue, settlement, basis);
+    };
+
+    exports.ACCRINTM = null;
+
+    exports.AMORDEGRC = null;
+
+    exports.AMORLINC = null;
+
+    exports.COUPDAYBS = null;
+
+    exports.COUPDAYS = null;
+
+    exports.COUPDAYSNC = null;
+
+    exports.COUPNCD = null;
+
+    exports.COUPNUM = null;
+
+    exports.COUPPCD = null;
+
+    exports.CUMIPMT = function(rate, periods, value, start, end, type) {
+        // Credits: algorithm inspired by Apache OpenOffice
+        // Credits: Hannes Stiebitzhofer for the translations of function and
+            // variable names
+        // Requires exports.FV() and exports.PMT() from exports.js
+            // [http://stoic.com/exports/]
+
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        value = utils.parseNumber(value);
+        if (utils.anyIsError(rate, periods, value)) {
+            return error.value;
+        }
+
+        // Return error if either rate, periods, or value are lower than or
+            // equal to zero
+        if (rate <= 0 || periods <= 0 || value <= 0) {
+            return error.num;
+        }
+
+        // Return error if start < 1, end < 1, or start > end
+        if (start < 1 || end < 1 || start > end) {
+            return error.num;
+        }
+
+        // Return error if type is neither 0 nor 1
+        if (type !== 0 && type !== 1) {
+            return error.num;
+        }
+
+        // Compute cumulative interest
+        var payment = exports.PMT(rate, periods, value, 0, type);
+        var interest = 0;
+
+        if (start === 1) {
+            if (type === 0) {
+                interest = -value;
+                start++;
+            }
+        }
+
+        for (var i = start; i <= end; i++) {
+            if (type === 1) {
+                interest += exports.FV(rate, i - 2, payment, value, 1) - payment;
+            } else {
+                interest += exports.FV(rate, i - 1, payment, value, 0);
+            }
+        }
+        interest *= rate;
+
+        // Return cumulative interest
+        return interest;
+    };
+
+    exports.CUMPRINC = function(rate, periods, value, start, end, type) {
+        // Credits: algorithm inspired by Apache OpenOffice
+        // Credits: Hannes Stiebitzhofer for the translations of function and
+            // variable names
+
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        value = utils.parseNumber(value);
+        if (utils.anyIsError(rate, periods, value)) {
+            return error.value;
+        }
+
+        // Return error if either rate, periods, or value are lower than or
+            // equal to zero
+        if (rate <= 0 || periods <= 0 || value <= 0) {
+            return error.num;
+        }
+
+        // Return error if start < 1, end < 1, or start > end
+        if (start < 1 || end < 1 || start > end) {
+            return error.num;
+        }
+
+        // Return error if type is neither 0 nor 1
+        if (type !== 0 && type !== 1) {
+            return error.num;
+        }
+
+        // Compute cumulative principal
+        var payment = exports.PMT(rate, periods, value, 0, type);
+        var principal = 0;
+        if (start === 1) {
+            if (type === 0) {
+                principal = payment + value * rate;
+            } else {
+                principal = payment;
+            }
+            start++;
+        }
+        for (var i = start; i <= end; i++) {
+            if (type > 0) {
+                principal += payment - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate;
+            } else {
+                principal += payment - exports.FV(rate, i - 1, payment, value, 0) * rate;
+            }
+        }
+
+        // Return cumulative principal
+        return principal;
+    };
+
+    exports.DB = function(cost, salvage, life, period, month) {
+        // Initialize month
+        month = (month === undefined) ? 12 : month;
+
+        cost = utils.parseNumber(cost);
+        salvage = utils.parseNumber(salvage);
+        life = utils.parseNumber(life);
+        period = utils.parseNumber(period);
+        month = utils.parseNumber(month);
+        if (utils.anyIsError(cost, salvage, life, period, month)) {
+            return error.value;
+        }
+
+        // Return error if any of the parameters is negative
+        if (cost < 0 || salvage < 0 || life < 0 || period < 0) {
+            return error.num;
+        }
+
+        // Return error if month is not an integer between 1 and 12
+        if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) {
+            return error.num;
+        }
+
+        // Return error if period is greater than life
+        if (period > life) {
+            return error.num;
+        }
+
+        // Return 0 (zero) if salvage is greater than or equal to cost
+        if (salvage >= cost) {
+            return 0;
+        }
+
+        // Rate is rounded to three decimals places
+        var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3);
+
+        // Compute initial depreciation
+        var initial = cost * rate * month / 12;
+
+        // Compute total depreciation
+        var total = initial;
+        var current = 0;
+        var ceiling = (period === life) ? life - 1 : period;
+        for (var i = 2; i <= ceiling; i++) {
+            current = (cost - total) * rate;
+            total += current;
+        }
+
+        // Depreciation for the first and last periods are special cases
+        if (period === 1) {
+            // First period
+            return initial;
+        } else if (period === life) {
+            // Last period
+            return (cost - total) * rate;
+        } else {
+            return current;
+        }
+    };
+
+    exports.DDB = function(cost, salvage, life, period, factor) {
+        // Initialize factor
+        factor = (factor === undefined) ? 2 : factor;
+
+        cost = utils.parseNumber(cost);
+        salvage = utils.parseNumber(salvage);
+        life = utils.parseNumber(life);
+        period = utils.parseNumber(period);
+        factor = utils.parseNumber(factor);
+        if (utils.anyIsError(cost, salvage, life, period, factor)) {
+            return error.value;
+        }
+
+        // Return error if any of the parameters is negative or if factor is
+            // null
+        if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) {
+            return error.num;
+        }
+
+        // Return error if period is greater than life
+        if (period > life) {
+            return error.num;
+        }
+
+        // Return 0 (zero) if salvage is greater than or equal to cost
+        if (salvage >= cost) {
+            return 0;
+        }
+
+        // Compute depreciation
+        var total = 0;
+        var current = 0;
+        for (var i = 1; i <= period; i++) {
+            current = Math.min((cost - total) * (factor / life), (cost - salvage - total));
+            total += current;
+        }
+
+        // Return depreciation
+        return current;
+    };
+
+    exports.DISC = null;
+
+    exports.DOLLARDE = function(dollar, fraction) {
+        // Credits: algorithm inspired by Apache OpenOffice
+
+        dollar = utils.parseNumber(dollar);
+        fraction = utils.parseNumber(fraction);
+        if (utils.anyIsError(dollar, fraction)) {
+            return error.value;
+        }
+
+        // Return error if fraction is negative
+        if (fraction < 0) {
+            return error.num;
+        }
+
+        // Return error if fraction is greater than or equal to 0 and less than
+            // 1
+        if (fraction >= 0 && fraction < 1) {
+            return error.div0;
+        }
+
+        // Truncate fraction if it is not an integer
+        fraction = parseInt(fraction, 10);
+
+        // Compute integer part
+        var result = parseInt(dollar, 10);
+
+        // Add decimal part
+        result += (dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction;
+
+        // Round result
+        var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1);
+        result = Math.round(result * power) / power;
+
+        // Return converted dollar price
+        return result;
+    };
+
+    exports.DOLLARFR = function(dollar, fraction) {
+        // Credits: algorithm inspired by Apache OpenOffice
+
+        dollar = utils.parseNumber(dollar);
+        fraction = utils.parseNumber(fraction);
+        if (utils.anyIsError(dollar, fraction)) {
+            return error.value;
+        }
+
+        // Return error if fraction is negative
+        if (fraction < 0) {
+            return error.num;
+        }
+
+        // Return error if fraction is greater than or equal to 0 and less than
+            // 1
+        if (fraction >= 0 && fraction < 1) {
+            return error.div0;
+        }
+
+        // Truncate fraction if it is not an integer
+        fraction = parseInt(fraction, 10);
+
+        // Compute integer part
+        var result = parseInt(dollar, 10);
+
+        // Add decimal part
+        result += (dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction;
+
+        // Return converted dollar price
+        return result;
+    };
+
+    exports.DURATION = null;
+
+    exports.EFFECT = function(rate, periods) {
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        if (utils.anyIsError(rate, periods)) {
+            return error.value;
+        }
+
+        // Return error if rate <=0 or periods < 1
+        if (rate <= 0 || periods < 1) {
+            return error.num;
+        }
+
+        // Truncate periods if it is not an integer
+        periods = parseInt(periods, 10);
+
+        // Return effective annual interest rate
+        return Math.pow(1 + rate / periods, periods) - 1;
+    };
+
+    exports.FV = function(rate, periods, payment, value, type) {
+        // Credits: algorithm inspired by Apache OpenOffice
+
+        value = value || 0;
+        type = type || 0;
+
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        payment = utils.parseNumber(payment);
+        value = utils.parseNumber(value);
+        type = utils.parseNumber(type);
+        if (utils.anyIsError(rate, periods, payment, value, type)) {
+            return error.value;
+        }
+
+        // Return future value
+        var result;
+        if (rate === 0) {
+            result = value + payment * periods;
+        } else {
+            var term = Math.pow(1 + rate, periods);
+            if (type === 1) {
+                result = value * term + payment * (1 + rate) * (term - 1) / rate;
+            } else {
+                result = value * term + payment * (term - 1) / rate;
+            }
+        }
+        return -result;
+    };
+
+    exports.FVSCHEDULE = function(principal, schedule) {
+        principal = utils.parseNumber(principal);
+        schedule = utils.parseNumberArray(utils.flatten(schedule));
+        if (utils.anyIsError(principal, schedule)) {
+            return error.value;
+        }
+
+        var n = schedule.length;
+        var future = principal;
+
+        // Apply all interests in schedule
+        for (var i = 0; i < n; i++) {
+            // Apply scheduled interest
+            future *= 1 + schedule[i];
+        }
+
+        // Return future value
+        return future;
+    };
+
+    exports.INTRATE = null;
+
+    exports.IPMT = function(rate, period, periods, present, future, type) {
+        // Credits: algorithm inspired by Apache OpenOffice
+
+        future = future || 0;
+        type = type || 0;
+
+        rate = utils.parseNumber(rate);
+        period = utils.parseNumber(period);
+        periods = utils.parseNumber(periods);
+        present = utils.parseNumber(present);
+        future = utils.parseNumber(future);
+        type = utils.parseNumber(type);
+        if (utils.anyIsError(rate, period, periods, present, future, type)) {
+            return error.value;
+        }
+
+        // Compute payment
+        var payment = exports.PMT(rate, periods, present, future, type);
+
+        // Compute interest
+        var interest;
+        if (period === 1) {
+            if (type === 1) {
+                interest = 0;
+            } else {
+                interest = -present;
+            }
+        } else {
+            if (type === 1) {
+                interest = exports.FV(rate, period - 2, payment, present, 1) - payment;
+            } else {
+                interest = exports.FV(rate, period - 1, payment, present, 0);
+            }
+        }
+
+        // Return interest
+        return interest * rate;
+    };
+
+    exports.IRR = function(values, guess) {
+        // Credits: algorithm inspired by Apache OpenOffice
+
+        guess = guess || 0;
+
+        values = utils.parseNumberArray(utils.flatten(values));
+        guess = utils.parseNumber(guess);
+        if (utils.anyIsError(values, guess)) {
+            return error.value;
+        }
+
+        // Calculates the resulting amount
+        var irrResult = function(values, dates, rate) {
+            var r = rate + 1;
+            var result = values[0];
+            for (var i = 1; i < values.length; i++) {
+                result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365);
+            }
+            return result;
+        };
+
+        // Calculates the first derivation
+        var irrResultDeriv = function(values, dates, rate) {
+            var r = rate + 1;
+            var result = 0;
+            for (var i = 1; i < values.length; i++) {
+                var frac = (dates[i] - dates[0]) / 365;
+                result -= frac * values[i] / Math.pow(r, frac + 1);
+            }
+            return result;
+        };
+
+        // Initialize dates and check that values contains at least one positive
+            // value and one negative value
+        var dates = [];
+        var positive = false;
+        var negative = false;
+        for (var i = 0; i < values.length; i++) {
+            dates[i] = (i === 0) ? 0 : dates[i - 1] + 365;
+            if (values[i] > 0) {
+                positive = true;
+            }
+            if (values[i] < 0) {
+                negative = true;
+            }
+        }
+
+        // Return error if values does not contain at least one positive value
+            // and one negative value
+        if (!positive || !negative) {
+            return error.num;
+        }
+
+        // Initialize guess and resultRate
+        guess = (guess === undefined) ? 0.1 : guess;
+        var resultRate = guess;
+
+        // Set maximum epsilon for end of iteration
+        var epsMax = 1e-10;
+
+        // Implement Newton's method
+        var newRate, epsRate, resultValue;
+        var contLoop = true;
+        do {
+            resultValue = irrResult(values, dates, resultRate);
+            newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);
+            epsRate = Math.abs(newRate - resultRate);
+            resultRate = newRate;
+            contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);
+        } while (contLoop);
+
+        // Return internal rate of return
+        return resultRate;
+    };
+
+    exports.ISPMT = function(rate, period, periods, value) {
+        rate = utils.parseNumber(rate);
+        period = utils.parseNumber(period);
+        periods = utils.parseNumber(periods);
+        value = utils.parseNumber(value);
+        if (utils.anyIsError(rate, period, periods, value)) {
+            return error.value;
+        }
+
+        // Return interest
+        return value * rate * (period / periods - 1);
+    };
+
+    exports.MDURATION = null;
+
+    exports.MIRR = function(values, finance_rate, reinvest_rate) {
+        values = utils.parseNumberArray(utils.flatten(values));
+        finance_rate = utils.parseNumber(finance_rate);
+        reinvest_rate = utils.parseNumber(reinvest_rate);
+        if (utils.anyIsError(values, finance_rate, reinvest_rate)) {
+            return error.value;
+        }
+
+        // Initialize number of values
+        var n = values.length;
+
+        // Lookup payments (negative values) and incomes (positive values)
+        var payments = [];
+        var incomes = [];
+        for (var i = 0; i < n; i++) {
+            if (values[i] < 0) {
+                payments.push(values[i]);
+            } else {
+                incomes.push(values[i]);
+            }
+        }
+
+        // Return modified internal rate of return
+        var num = -exports.NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1);
+        var den = exports.NPV(finance_rate, payments) * (1 + finance_rate);
+        return Math.pow(num / den, 1 / (n - 1)) - 1;
+    };
+
+    exports.NOMINAL = function(rate, periods) {
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        if (utils.anyIsError(rate, periods)) {
+            return error.value;
+        }
+
+        // Return error if rate <=0 or periods < 1
+        if (rate <= 0 || periods < 1) {
+            return error.num;
+        }
+
+        // Truncate periods if it is not an integer
+        periods = parseInt(periods, 10);
+
+        // Return nominal annual interest rate
+        return (Math.pow(rate + 1, 1 / periods) - 1) * periods;
+    };
+
+    exports.NPER = function(rate, payment, present, future, type) {
+        type = (type === undefined) ? 0 : type;
+        future = (future === undefined) ? 0 : future;
+
+        rate = utils.parseNumber(rate);
+        payment = utils.parseNumber(payment);
+        present = utils.parseNumber(present);
+        future = utils.parseNumber(future);
+        type = utils.parseNumber(type);
+        if (utils.anyIsError(rate, payment, present, future, type)) {
+            return error.value;
+        }
+
+        // Return number of periods
+        var num = payment * (1 + rate * type) - future * rate;
+        var den = (present * rate + payment * (1 + rate * type));
+        return Math.log(num / den) / Math.log(1 + rate);
+    };
+
+    exports.NPV = function() {
+        var args = utils.parseNumberArray(utils.flatten(arguments));
+        if (args instanceof Error) {
+            return args;
+        }
+
+        // Lookup rate
+        var rate = args[0];
+
+        // Initialize net present value
+        var value = 0;
+
+        // Loop on all values
+        for (var j = 1; j < args.length; j++) {
+            value += args[j] / Math.pow(1 + rate, j);
+        }
+
+        // Return net present value
+        return value;
+    };
+
+    exports.ODDFPRICE = null;
+
+    exports.ODDFYIELD = null;
+
+    exports.ODDLPRICE = null;
+
+    exports.ODDLYIELD = null;
+
+    exports.PDURATION = function(rate, present, future) {
+        rate = utils.parseNumber(rate);
+        present = utils.parseNumber(present);
+        future = utils.parseNumber(future);
+        if (utils.anyIsError(rate, present, future)) {
+            return error.value;
+        }
+
+        // Return error if rate <=0
+        if (rate <= 0) {
+            return error.num;
+        }
+
+        // Return number of periods
+        return (Math.log(future) - Math.log(present)) / Math.log(1 + rate);
+    };
+
+    exports.PMT = function(rate, periods, present, future, type) {
+        // Credits: algorithm inspired by Apache OpenOffice
+
+        future = future || 0;
+        type = type || 0;
+
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        present = utils.parseNumber(present);
+        future = utils.parseNumber(future);
+        type = utils.parseNumber(type);
+        if (utils.anyIsError(rate, periods, present, future, type)) {
+            return error.value;
+        }
+
+        // Return payment
+        var result;
+        if (rate === 0) {
+            result = (present + future) / periods;
+        } else {
+            var term = Math.pow(1 + rate, periods);
+            if (type === 1) {
+                result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate);
+            } else {
+                result = future * rate / (term - 1) + present * rate / (1 - 1 / term);
+            }
+        }
+        return -result;
+    };
+
+    exports.PPMT = function(rate, period, periods, present, future, type) {
+        future = future || 0;
+        type = type || 0;
+
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        present = utils.parseNumber(present);
+        future = utils.parseNumber(future);
+        type = utils.parseNumber(type);
+        if (utils.anyIsError(rate, periods, present, future, type)) {
+            return error.value;
+        }
+
+        return exports.PMT(rate, periods, present, future, type) - exports.IPMT(rate, period, periods, present, future, type);
+    };
+
+    exports.PRICE = null;
+
+    exports.PRICEDISC = null;
+
+    exports.PRICEMAT = null;
+
+    exports.PV = function(rate, periods, payment, future, type) {
+        future = future || 0;
+        type = type || 0;
+
+        rate = utils.parseNumber(rate);
+        periods = utils.parseNumber(periods);
+        payment = utils.parseNumber(payment);
+        future = utils.parseNumber(future);
+        type = utils.parseNumber(type);
+        if (utils.anyIsError(rate, periods, payment, future, type)) {
+            return error.value;
+        }
+
+        // Return present value
+        if (rate === 0) {
+            return -payment * periods - future;
+        } else {
+            return (((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 + rate * type) - future) / Math.pow(1 + rate, periods);
+        }
+    };
+
+    exports.RATE = function(periods, payment, present, future, type, guess) {
+        // Credits: rabugento
+
+        guess = (guess === undefined) ? 0.01 : guess;
+        future = (future === undefined) ? 0 : future;
+        type = (type === undefined) ? 0 : type;
+
+        periods = utils.parseNumber(periods);
+        payment = utils.parseNumber(payment);
+        present = utils.parseNumber(present);
+        future = utils.parseNumber(future);
+        type = utils.parseNumber(type);
+        guess = utils.parseNumber(guess);
+        if (utils.anyIsError(periods, payment, present, future, type, guess)) {
+            return error.value;
+        }
+
+        // Set maximum epsilon for end of iteration
+        var epsMax = 1e-6;
+
+        // Set maximum number of iterations
+        var iterMax = 100;
+        var iter = 0;
+        var close = false;
+        var rate = guess;
+
+        while (iter < iterMax && !close) {
+            var t1 = Math.pow(rate + 1, periods);
+            var t2 = Math.pow(rate + 1, periods - 1);
+
+            var f1 = future + t1 * present + payment * (t1 - 1) * (rate * type + 1) / rate;
+            var f2 = periods * t2 * present - payment * (t1 - 1) *(rate * type + 1) / Math.pow(rate,2);
+            var f3 = periods * payment * t2 * (rate * type + 1) / rate + payment * (t1 - 1) * type / rate;
+
+            var newRate = rate - f1 / (f2 + f3);
+
+            if (Math.abs(newRate - rate) < epsMax) close = true;
+            iter++
+            rate = newRate;
+        }
+
+        if (!close) return Number.NaN + rate;
+        return rate;
+    };
+
+    // TODO
+    exports.RECEIVED = null;
+
+    exports.RRI = function(periods, present, future) {
+        periods = utils.parseNumber(periods);
+        present = utils.parseNumber(present);
+        future = utils.parseNumber(future);
+        if (utils.anyIsError(periods, present, future)) {
+            return error.value;
+        }
+
+        // Return error if periods or present is equal to 0 (zero)
+        if (periods === 0 || present === 0) {
+            return error.num;
+        }
+
+        // Return equivalent interest rate
+        return Math.pow(future / present, 1 / periods) - 1;
+    };
+
+    exports.SLN = function(cost, salvage, life) {
+        cost = utils.parseNumber(cost);
+        salvage = utils.parseNumber(salvage);
+        life = utils.parseNumber(life);
+        if (utils.anyIsError(cost, salvage, life)) {
+            return error.value;
+        }
+
+        // Return error if life equal to 0 (zero)
+        if (life === 0) {
+            return error.num;
+        }
+
+        // Return straight-line depreciation
+        return (cost - salvage) / life;
+    };
+
+    exports.SYD = function(cost, salvage, life, period) {
+        // Return error if any of the parameters is not a number
+        cost = utils.parseNumber(cost);
+        salvage = utils.parseNumber(salvage);
+        life = utils.parseNumber(life);
+        period = utils.parseNumber(period);
+        if (utils.anyIsError(cost, salvage, life, period)) {
+            return error.value;
+        }
+
+        // Return error if life equal to 0 (zero)
+        if (life === 0) {
+            return error.num;
+        }
+
+        // Return error if period is lower than 1 or greater than life
+        if (period < 1 || period > life) {
+            return error.num;
+        }
+
+        // Truncate period if it is not an integer
+        period = parseInt(period, 10);
+
+        // Return straight-line depreciation
+        return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1));
+    };
+
+    exports.TBILLEQ = function(settlement, maturity, discount) {
+        settlement = utils.parseDate(settlement);
+        maturity = utils.parseDate(maturity);
+        discount = utils.parseNumber(discount);
+        if (utils.anyIsError(settlement, maturity, discount)) {
+            return error.value;
+        }
+
+        // Return error if discount is lower than or equal to zero
+        if (discount <= 0) {
+            return error.num;
+        }
+
+        // Return error if settlement is greater than maturity
+        if (settlement > maturity) {
+            return error.num;
+        }
+
+        // Return error if maturity is more than one year after settlement
+        if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {
+            return error.num;
+        }
+
+        // Return bond-equivalent yield
+        return (365 * discount) / (360 - discount * DAYS360(settlement, maturity, false));
+    };
+
+    exports.TBILLPRICE = function(settlement, maturity, discount) {
+        settlement = utils.parseDate(settlement);
+        maturity = utils.parseDate(maturity);
+        discount = utils.parseNumber(discount);
+        if (utils.anyIsError(settlement, maturity, discount)) {
+            return error.value;
+        }
+
+        // Return error if discount is lower than or equal to zero
+        if (discount <= 0) {
+            return error.num;
+        }
+
+        // Return error if settlement is greater than maturity
+        if (settlement > maturity) {
+            return error.num;
+        }
+
+        // Return error if maturity is more than one year after settlement
+        if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {
+            return error.num;
+        }
+
+        // Return bond-equivalent yield
+        return 100 * (1 - discount * DAYS360(settlement, maturity, false) / 360);
+    };
+
+    exports.TBILLYIELD = function(settlement, maturity, price) {
+        settlement = utils.parseDate(settlement);
+        maturity = utils.parseDate(maturity);
+        price = utils.parseNumber(price);
+        if (utils.anyIsError(settlement, maturity, price)) {
+            return error.value;
+        }
+
+        // Return error if price is lower than or equal to zero
+        if (price <= 0) {
+            return error.num;
+        }
+
+        // Return error if settlement is greater than maturity
+        if (settlement > maturity) {
+            return error.num;
+        }
+
+        // Return error if maturity is more than one year after settlement
+        if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {
+            return error.num;
+        }
+
+        // Return bond-equivalent yield
+        return (100 - price) * 360 / (price * DAYS360(settlement, maturity, false));
+    };
+
+    exports.VDB = null;
+
+    exports.XIRR = function(values, dates, guess) {
+        // Credits: algorithm inspired by Apache OpenOffice
+
+        values = utils.parseNumberArray(utils.flatten(values));
+        dates = utils.parseDateArray(utils.flatten(dates));
+        guess = utils.parseNumber(guess);
+        if (utils.anyIsError(values, dates, guess)) {
+            return error.value;
+        }
+
+        // Calculates the resulting amount
+        var irrResult = function(values, dates, rate) {
+            var r = rate + 1;
+            var result = values[0];
+            for (var i = 1; i < values.length; i++) {
+                result += values[i] / Math.pow(r, DAYS(dates[i], dates[0]) / 365);
+            }
+            return result;
+        };
+
+        // Calculates the first derivation
+        var irrResultDeriv = function(values, dates, rate) {
+            var r = rate + 1;
+            var result = 0;
+            for (var i = 1; i < values.length; i++) {
+                var frac = DAYS(dates[i], dates[0]) / 365;
+                result -= frac * values[i] / Math.pow(r, frac + 1);
+            }
+            return result;
+        };
+
+        // Check that values contains at least one positive value and one
+            // negative value
+        var positive = false;
+        var negative = false;
+        for (var i = 0; i < values.length; i++) {
+            if (values[i] > 0) {
+                positive = true;
+            }
+            if (values[i] < 0) {
+                negative = true;
+            }
+        }
+
+        // Return error if values does not contain at least one positive value
+            // and one negative value
+        if (!positive || !negative) {
+            return error.num;
+        }
+
+        // Initialize guess and resultRate
+        guess = guess || 0.1;
+        var resultRate = guess;
+
+        // Set maximum epsilon for end of iteration
+        var epsMax = 1e-10;
+
+        // Implement Newton's method
+        var newRate, epsRate, resultValue;
+        var contLoop = true;
+        do {
+            resultValue = irrResult(values, dates, resultRate);
+            newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);
+            epsRate = Math.abs(newRate - resultRate);
+            resultRate = newRate;
+            contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);
+        } while (contLoop);
+
+        // Return internal rate of return
+        return resultRate;
+    };
+
+    exports.XNPV = function(rate, values, dates) {
+        rate = utils.parseNumber(rate);
+        values = utils.parseNumberArray(utils.flatten(values));
+        dates = utils.parseDateArray(utils.flatten(dates));
+        if (utils.anyIsError(rate, values, dates)) {
+            return error.value;
+        }
+
+        var result = 0;
+        for (var i = 0; i < values.length; i++) {
+            result += values[i] / Math.pow(1 + rate, DAYS(dates[i], dates[0]) / 365);
+        }
+        return result;
+    };
+
+    exports.YIELD = null;
+
+    exports.YIELDDISC = null;
+
+    exports.YIELDMAT = null;
+
+    return exports;
+})();
+
+jexcel.methods.information = (function() {
+    var exports = {};
+    exports.CELL = null;
+
+    exports.ERROR = {};
+    exports.ERROR.TYPE = function(error_val) {
+        switch (error_val) {
+            case error.nil: return 1;
+            case error.div0: return 2;
+            case error.value: return 3;
+            case error.ref: return 4;
+            case error.name: return 5;
+            case error.num: return 6;
+            case error.na: return 7;
+            case error.data: return 8;
+        }
+        return error.na;
+    };
+
+    exports.INFO = null;
+
+    exports.ISBLANK = function(value) {
+        return value === null;
+    };
+
+    exports.ISBINARY = function (number) {
+        return (/^[01]{1,10}$/).test(number);
+    };
+
+    exports.ISERR = function(value) {
+        return ([error.value, error.ref, error.div0, error.num, error.name, error.nil]).indexOf(value) >= 0 ||
+            (typeof value === 'number' && (isNaN(value) || !isFinite(value)));
+    };
+
+    exports.ISERROR = function(value) {
+        return exports.ISERR(value) || value === error.na;
+    };
+
+    exports.ISEVEN = function(number) {
+        return (Math.floor(Math.abs(number)) & 1) ? false : true;
+    };
+
+    // TODO
+    exports.ISFORMULA = null;
+
+    exports.ISLOGICAL = function(value) {
+        return value === true || value === false;
+    };
+
+    exports.ISNA = function(value) {
+        return value === error.na;
+    };
+
+    exports.ISNONTEXT = function(value) {
+        return typeof(value) !== 'string';
+    };
+
+    exports.ISNUMBER = function(value) {
+        return typeof(value) === 'number' && !isNaN(value) && isFinite(value);
+    };
+
+    exports.ISODD = function(number) {
+        return (Math.floor(Math.abs(number)) & 1) ? true : false;
+    };
+
+    exports.ISREF = null;
+
+    exports.ISTEXT = function(value) {
+        return typeof(value) === 'string';
+    };
+
+    exports.N = function(value) {
+        if (this.ISNUMBER(value)) {
+            return value;
+        }
+        if (value instanceof Date) {
+            return value.getTime();
+        }
+        if (value === true) {
+            return 1;
+        }
+        if (value === false) {
+            return 0;
+        }
+        if (this.ISERROR(value)) {
+            return value;
+        }
+        return 0;
+    };
+
+    exports.NA = function() {
+        return error.na;
+    };
+
+    exports.SHEET = null;
+
+    exports.SHEETS = null;
+
+    exports.TYPE = function(value) {
+        if (this.ISNUMBER(value)) {
+            return 1;
+        }
+        if (this.ISTEXT(value)) {
+            return 2;
+        }
+        if (this.ISLOGICAL(value)) {
+            return 4;
+        }
+        if (this.ISERROR(value)) {
+            return 16;
+        }
+        if (Array.isArray(value)) {
+            return 64;
+        }
+    };
+
+    return exports;
+})();
+
+jexcel.methods.logical = (function() {
+    var exports = {};
+
+    exports.AND = function() {
+        var args = utils.flatten(arguments);
+        var result = true;
+        for (var i = 0; i < args.length; i++) {
+            if (!args[i]) {
+                result = false;
+            }
+        }
+        return result;
+    };
+
+    exports.CHOOSE = function() {
+        if (arguments.length < 2) {
+            return error.na;
+        }
+
+        var index = arguments[0];
+        if (index < 1 || index > 254) {
+            return error.value;
+        }
+
+        if (arguments.length < index + 1) {
+            return error.value;
+        }
+
+        return arguments[index];
+    };
+
+    exports.FALSE = function() {
+        return false;
+    };
+
+    exports.IF = function(test, then_value, otherwise_value) {
+        return test ? then_value : otherwise_value;
+    };
+
+    exports.IFERROR = function(value, valueIfError) {
+        if (ISERROR(value)) {
+            return valueIfError;
+        }
+        return value;
+    };
+
+    exports.IFNA = function(value, value_if_na) {
+        return value === error.na ? value_if_na : value;
+    };
+
+    exports.NOT = function(logical) {
+        return !logical;
+    };
+
+    exports.OR = function() {
+        var args = utils.flatten(arguments);
+        var result = false;
+        for (var i = 0; i < args.length; i++) {
+            if (args[i]) {
+                result = true;
+            }
+        }
+        return result;
+    };
+
+    exports.TRUE = function() {
+        return true;
+    };
+
+    exports.XOR = function() {
+        var args = utils.flatten(arguments);
+        var result = 0;
+        for (var i = 0; i < args.length; i++) {
+            if (args[i]) {
+                result++;
+            }
+        }
+        return (Math.floor(Math.abs(result)) & 1) ? true : false;
+    };
+
+    exports.SWITCH = function() {
+        var result;
+        if (arguments.length > 0)  {
+            var targetValue = arguments[0];
+            var argc = arguments.length - 1;
+            var switchCount = Math.floor(argc / 2);
+            var switchSatisfied = false;
+            var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1];
+
+            if (switchCount) {
+                for (var index = 0; index < switchCount; index++) {
+                    if (targetValue === arguments[index * 2 + 1]) {
+                      result = arguments[index * 2 + 2];
+                      switchSatisfied = true;
+                      break;
+                    }
+                }
+            }
+
+            if (!switchSatisfied && defaultClause) {
+                result = defaultClause;
+            }
+        }
+
+        return result;
+    };
+
+    return exports;
+})();
+
+jexcel.methods.math = (function() {
+    var exports = {};
+
+    exports.ABS = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.abs(utils.parseNumber(number));
+    };
+
+    exports.ACOS = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.acos(number);
+    };
+
+    exports.ACOSH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.log(number + Math.sqrt(number * number - 1));
+    };
+
+    exports.ACOT = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.atan(1 / number);
+    };
+
+    exports.ACOTH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return 0.5 * Math.log((number + 1) / (number - 1));
+    };
+
+    exports.AGGREGATE = null
+
+    exports.ARABIC = function(text) {
+        // Credits: Rafa? Kukawski
+        if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {
+            return error.value;
+        }
+        var r = 0;
+        text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) {
+            r += {
+                M: 1000,
+                CM: 900,
+                D: 500,
+                CD: 400,
+                C: 100,
+                XC: 90,
+                L: 50,
+                XL: 40,
+                X: 10,
+                IX: 9,
+                V: 5,
+                IV: 4,
+                I: 1
+            }[i];
+        });
+        return r;
+    };
+
+    exports.ASIN = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.asin(number);
+    };
+
+    exports.ASINH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.log(number + Math.sqrt(number * number + 1));
+    };
+
+    exports.ATAN = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.atan(number);
+    };
+
+    exports.ATAN2 = function(number_x, number_y) {
+        number_x = utils.parseNumber(number_x);
+        number_y = utils.parseNumber(number_y);
+        if (utils.anyIsError(number_x, number_y)) {
+            return error.value;
+        }
+        return Math.atan2(number_x, number_y);
+    };
+
+    exports.ATANH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.log((1 + number) / (1 - number)) / 2;
+    };
+
+    exports.BASE = function(number, radix, min_length) {
+        min_length = min_length || 0;
+
+        number = utils.parseNumber(number);
+        radix = utils.parseNumber(radix);
+        min_length = utils.parseNumber(min_length);
+        if (utils.anyIsError(number, radix, min_length)) {
+            return error.value;
+        }
+        min_length = (min_length === undefined) ? 0 : min_length;
+        var result = number.toString(radix);
+        return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result;
+    };
+
+    exports.CEILING = function(number, significance, mode) {
+        significance = (significance === undefined) ? 1 : significance;
+        mode = (mode === undefined) ? 0 : mode;
+
+        number = utils.parseNumber(number);
+        significance = utils.parseNumber(significance);
+        mode = utils.parseNumber(mode);
+        if (utils.anyIsError(number, significance, mode)) {
+            return error.value;
+        }
+        if (significance === 0) {
+            return 0;
+        }
+
+        significance = Math.abs(significance);
+        if (number >= 0) {
+            return Math.ceil(number / significance) * significance;
+        } else {
+            if (mode === 0) {
+                return -1 * Math.floor(Math.abs(number) / significance) * significance;
+            } else {
+                return -1 * Math.ceil(Math.abs(number) / significance) * significance;
+            }
+        }
+    };
+
+    exports.CEILING.MATH = exports.CEILING;
+
+    exports.CEILING.PRECISE = exports.CEILING;
+
+    exports.COMBIN = function(number, number_chosen) {
+        number = utils.parseNumber(number);
+        number_chosen = utils.parseNumber(number_chosen);
+        if (utils.anyIsError(number, number_chosen)) {
+            return error.value;
+        }
+        return exports.FACT(number) / (exports.FACT(number_chosen) * exports.FACT(number - number_chosen));
+    };
+
+    exports.COMBINA = function(number, number_chosen) {
+        number = utils.parseNumber(number);
+        number_chosen = utils.parseNumber(number_chosen);
+        if (utils.anyIsError(number, number_chosen)) {
+            return error.value;
+        }
+        return (number === 0 && number_chosen === 0) ? 1 : exports.COMBIN(number + number_chosen - 1, number - 1);
+    };
+
+    exports.COS = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.cos(number);
+    };
+
+    exports.COSH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return (Math.exp(number) + Math.exp(-number)) / 2;
+    };
+
+    exports.COT = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return 1 / Math.tan(number);
+    };
+
+    exports.COTH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        var e2 = Math.exp(2 * number);
+        return (e2 + 1) / (e2 - 1);
+    };
+
+    exports.CSC = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return 1 / Math.sin(number);
+    };
+
+    exports.CSCH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return 2 / (Math.exp(number) - Math.exp(-number));
+    };
+
+    exports.DECIMAL = function(number, radix) {
+        if (arguments.length < 1) {
+            return error.value;
+        }
+
+
+        return parseInt(number, radix);
+    };
+
+    exports.DEGREES = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return number * 180 / Math.PI;
+    };
+
+    exports.EVEN = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return exports.CEILING(number, -2, -1);
+    };
+
+    exports.EXP = Math.exp;
+
+    var MEMOIZED_FACT = [];
+    exports.FACT = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        var n = Math.floor(number);
+        if (n === 0 || n === 1) {
+            return 1;
+        } else if (MEMOIZED_FACT[n] > 0) {
+            return MEMOIZED_FACT[n];
+        } else {
+            MEMOIZED_FACT[n] = exports.FACT(n - 1) * n;
+            return MEMOIZED_FACT[n];
+        }
+    };
+
+    exports.FACTDOUBLE = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        var n = Math.floor(number);
+        if (n <= 0) {
+            return 1;
+        } else {
+            return n * exports.FACTDOUBLE(n - 2);
+        }
+    };
+
+    exports.FLOOR = function(number, significance, mode) {
+        significance = (significance === undefined) ? 1 : significance;
+        mode = (mode === undefined) ? 0 : mode;
+
+        number = utils.parseNumber(number);
+        significance = utils.parseNumber(significance);
+        mode = utils.parseNumber(mode);
+        if (utils.anyIsError(number, significance, mode)) {
+            return error.value;
+        }
+        if (significance === 0) {
+            return 0;
+        }
+
+        significance = Math.abs(significance);
+        if (number >= 0) {
+            return Math.floor(number / significance) * significance;
+        } else {
+            if (mode === 0) {
+                return -1 * Math.ceil(Math.abs(number) / significance) * significance;
+            } else {
+                return -1 * Math.floor(Math.abs(number) / significance) * significance;
+            }
+        }
+    };
+
+    exports.FLOOR.MATH = exports.FLOOR;
+
+    exports.GCD = null;
+
+    exports.INT = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.floor(number);
+    };
+
+    exports.LCM = function() {
+        // Credits: Jonas Raoni Soares Silva
+        var o = utils.parseNumberArray(utils.flatten(arguments));
+        if (o instanceof Error) {
+            return o;
+        }
+        for (var i, j, n, d, r = 1;
+            (n = o.pop()) !== undefined;) {
+            while (n > 1) {
+                if (n % 2) {
+                    for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) {
+                      // empty
+                    }
+                    d = (i <= j) ? i : n;
+                } else {
+                    d = 2;
+                }
+                for (n /= d, r *= d, i = o.length; i;
+                    (o[--i] % d) === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) {
+                    // empty
+                }
+            }
+        }
+        return r;
+    };
+
+    exports.LN = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.log(number);
+    };
+
+    exports.LOG = function(number, base) {
+        number = utils.parseNumber(number);
+        base = (base === undefined) ? 10 : utils.parseNumber(base);
+
+        if (utils.anyIsError(number, base)) {
+            return error.value;
+        }
+
+        return Math.log(number) / Math.log(base);
+    };
+
+    exports.LOG10 = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.log(number) / Math.log(10);
+    };
+
+    exports.MDETERM = null;
+
+    exports.MINVERSE = null;
+
+    exports.MMULT = null;
+
+    exports.MOD = function(dividend, divisor) {
+        dividend = utils.parseNumber(dividend);
+        divisor = utils.parseNumber(divisor);
+        if (utils.anyIsError(dividend, divisor)) {
+            return error.value;
+        }
+        if (divisor === 0) {
+            return error.div0;
+        }
+        var modulus = Math.abs(dividend % divisor);
+        return (divisor > 0) ? modulus : -modulus;
+    };
+
+    exports.MROUND = function(number, multiple) {
+        number = utils.parseNumber(number);
+        multiple = utils.parseNumber(multiple);
+        if (utils.anyIsError(number, multiple)) {
+            return error.value;
+        }
+        if (number * multiple < 0) {
+            return error.num;
+        }
+
+        return Math.round(number / multiple) * multiple;
+    };
+
+    exports.MULTINOMIAL = function() {
+        var args = utils.parseNumberArray(utils.flatten(arguments));
+        if (args instanceof Error) {
+            return args;
+        }
+        var sum = 0;
+        var divisor = 1;
+        for (var i = 0; i < args.length; i++) {
+            sum += args[i];
+            divisor *= exports.FACT(args[i]);
+        }
+        return exports.FACT(sum) / divisor;
+    };
+
+    exports.MUNIT = null;
+
+    exports.ODD = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        var temp = Math.ceil(Math.abs(number));
+        temp = (temp & 1) ? temp : temp + 1;
+        return (number > 0) ? temp : -temp;
+    };
+
+    exports.PI = function() {
+        return Math.PI;
+    };
+
+    exports.POWER = function(number, power) {
+        number = utils.parseNumber(number);
+        power = utils.parseNumber(power);
+        if (utils.anyIsError(number, power)) {
+            return error.value;
+        }
+        var result = Math.pow(number, power);
+        if (isNaN(result)) {
+            return error.num;
+        }
+
+        return result;
+    };
+
+    exports.PRODUCT = function() {
+        var args = utils.parseNumberArray(utils.flatten(arguments));
+        if (args instanceof Error) {
+            return args;
+        }
+        var result = 1;
+        for (var i = 0; i < args.length; i++) {
+            result *= args[i];
+        }
+        return result;
+    };
+
+    exports.QUOTIENT = function(numerator, denominator) {
+        numerator = utils.parseNumber(numerator);
+        denominator = utils.parseNumber(denominator);
+        if (utils.anyIsError(numerator, denominator)) {
+            return error.value;
+        }
+        return parseInt(numerator / denominator, 10);
+    };
+
+    exports.RADIANS = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return number * Math.PI / 180;
+    };
+
+    exports.RAND = function() {
+        return Math.random();
+    };
+
+    exports.RANDBETWEEN = function(bottom, top) {
+        bottom = utils.parseNumber(bottom);
+        top = utils.parseNumber(top);
+        if (utils.anyIsError(bottom, top)) {
+            return error.value;
+        }
+        // Creative Commons Attribution 3.0 License
+        // Copyright (c) 2012 eqcode
+        return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1;
+    };
+
+    exports.ROMAN = null;
+
+    exports.ROUND = function(number, digits) {
+        number = utils.parseNumber(number);
+        digits = utils.parseNumber(digits);
+        if (utils.anyIsError(number, digits)) {
+            return error.value;
+        }
+        return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits);
+    };
+
+    exports.ROUNDDOWN = function(number, digits) {
+        number = utils.parseNumber(number);
+        digits = utils.parseNumber(digits);
+        if (utils.anyIsError(number, digits)) {
+            return error.value;
+        }
+        var sign = (number > 0) ? 1 : -1;
+        return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);
+    };
+
+    exports.ROUNDUP = function(number, digits) {
+        number = utils.parseNumber(number);
+        digits = utils.parseNumber(digits);
+        if (utils.anyIsError(number, digits)) {
+            return error.value;
+        }
+        var sign = (number > 0) ? 1 : -1;
+        return sign * (Math.ceil(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);
+    };
+
+    exports.SEC = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return 1 / Math.cos(number);
+    };
+
+    exports.SECH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return 2 / (Math.exp(number) + Math.exp(-number));
+    };
+
+    exports.SERIESSUM = function(x, n, m, coefficients) {
+        x = utils.parseNumber(x);
+        n = utils.parseNumber(n);
+        m = utils.parseNumber(m);
+        coefficients = utils.parseNumberArray(coefficients);
+        if (utils.anyIsError(x, n, m, coefficients)) {
+            return error.value;
+        }
+        var result = coefficients[0] * Math.pow(x, n);
+        for (var i = 1; i < coefficients.length; i++) {
+            result += coefficients[i] * Math.pow(x, n + i * m);
+        }
+        return result;
+    };
+
+    exports.SIGN = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        if (number < 0) {
+            return -1;
+        } else if (number === 0) {
+            return 0;
+        } else {
+            return 1;
+        }
+    };
+
+    exports.SIN = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.sin(number);
+    };
+
+    exports.SINH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return (Math.exp(number) - Math.exp(-number)) / 2;
+    };
+
+    exports.SQRT = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        if (number < 0) {
+            return error.num;
+        }
+        return Math.sqrt(number);
+    };
+
+    exports.SQRTPI = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.sqrt(number * Math.PI);
+    };
+
+    exports.SUBTOTAL = null;
+
+    exports.ADD = function (num1, num2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        num1 = utils.parseNumber(num1);
+        num2 = utils.parseNumber(num2);
+        if (utils.anyIsError(num1, num2)) {
+            return error.value;
+        }
+
+        return num1 + num2;
+    };
+
+    exports.MINUS = function (num1, num2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        num1 = utils.parseNumber(num1);
+        num2 = utils.parseNumber(num2);
+        if (utils.anyIsError(num1, num2)) {
+            return error.value;
+        }
+
+        return num1 - num2;
+    };
+
+    exports.DIVIDE = function (dividend, divisor) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        dividend = utils.parseNumber(dividend);
+        divisor = utils.parseNumber(divisor);
+        if (utils.anyIsError(dividend, divisor)) {
+            return error.value;
+        }
+
+        if (divisor === 0) {
+            return error.div0;
+        }
+
+        return dividend / divisor;
+    };
+
+    exports.MULTIPLY = function (factor1, factor2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        factor1 = utils.parseNumber(factor1);
+        factor2 = utils.parseNumber(factor2);
+        if (utils.anyIsError(factor1, factor2)) {
+            return error.value;
+        }
+
+        return factor1 * factor2;
+    };
+
+    exports.GTE = function (num1, num2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        num1 = utils.parseNumber(num1);
+        num2 = utils.parseNumber(num2);
+        if (utils.anyIsError(num1, num2)) {
+            return error.error;
+        }
+
+        return num1 >= num2;
+    };
+
+    exports.LT = function (num1, num2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        num1 = utils.parseNumber(num1);
+        num2 = utils.parseNumber(num2);
+        if (utils.anyIsError(num1, num2)) {
+            return error.error;
+        }
+
+        return num1 < num2;
+    };
+
+    exports.LTE = function (num1, num2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        num1 = utils.parseNumber(num1);
+        num2 = utils.parseNumber(num2);
+        if (utils.anyIsError(num1, num2)) {
+            return error.error;
+        }
+
+        return num1 <= num2;
+    };
+
+    exports.EQ = function (value1, value2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        return value1 === value2;
+    };
+
+    exports.NE = function (value1, value2) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        return value1 !== value2;
+    };
+
+    exports.POW = function (base, exponent) {
+        if (arguments.length !== 2) {
+            return error.na;
+        }
+
+        base = utils.parseNumber(base);
+        exponent = utils.parseNumber(exponent);
+        if (utils.anyIsError(base, exponent)) {
+            return error.error;
+        }
+
+        return exports.POWER(base, exponent);
+    };
+
+    exports.SUM = function() {
+        var result = 0;
+        var argsKeys = Object.keys(arguments);
+        for (var i = 0; i < argsKeys.length; ++i) {
+            var elt = arguments[argsKeys[i]];
+            if (typeof elt === 'number') {
+                result += elt;
+            } else if (typeof elt === 'string') {
+                var parsed = parseFloat(elt);
+                !isNaN(parsed) && (result += parsed);
+            } else if (Array.isArray(elt)) {
+                result += exports.SUM.apply(null, elt);
+            }
+        }
+        return result;
+    };
+
+    exports.SUMIF = function(range, criteria) {
+        range = utils.parseNumberArray(utils.flatten(range));
+        if (range instanceof Error) {
+            return range;
+        }
+        var result = 0;
+        for (var i = 0; i < range.length; i++) {
+            result += (eval(range[i] + criteria)) ? range[i] : 0; // jshint ignore:line
+        }
+        return result;
+    };
+
+    exports.SUMIFS = function() {
+        var args = utils.argsToArray(arguments);
+        var range = utils.parseNumberArray(utils.flatten(args.shift()));
+        if (range instanceof Error) {
+            return range;
+        }
+        var criteria = args;
+
+        var n_range_elements = range.length;
+        var n_criterias = criteria.length;
+
+        var result = 0;
+        for (var i = 0; i < n_range_elements; i++) {
+            var el = range[i];
+            var condition = '';
+            for (var c = 0; c < n_criterias; c++) {
+                condition += el + criteria[c];
+                if (c !== n_criterias - 1) {
+                    condition += '&&';
+                }
+            }
+            if (eval(condition)) { // jshint ignore:line
+                result += el;
+            }
+        }
+        return result;
+    };
+
+    exports.SUMPRODUCT = null;
+
+    exports.SUMSQ = function() {
+        var numbers = utils.parseNumberArray(utils.flatten(arguments));
+        if (numbers instanceof Error) {
+            return numbers;
+        }
+        var result = 0;
+        var length = numbers.length;
+        for (var i = 0; i < length; i++) {
+            result += (ISNUMBER(numbers[i])) ? numbers[i] * numbers[i] : 0;
+        }
+        return result;
+    };
+
+    exports.SUMX2MY2 = function(array_x, array_y) {
+        array_x = utils.parseNumberArray(utils.flatten(array_x));
+        array_y = utils.parseNumberArray(utils.flatten(array_y));
+        if (utils.anyIsError(array_x, array_y)) {
+            return error.value;
+        }
+        var result = 0;
+        for (var i = 0; i < array_x.length; i++) {
+            result += array_x[i] * array_x[i] - array_y[i] * array_y[i];
+        }
+        return result;
+    };
+
+    exports.SUMX2PY2 = function(array_x, array_y) {
+        array_x = utils.parseNumberArray(utils.flatten(array_x));
+        array_y = utils.parseNumberArray(utils.flatten(array_y));
+        if (utils.anyIsError(array_x, array_y)) {
+            return error.value;
+        }
+        var result = 0;
+        array_x = utils.parseNumberArray(utils.flatten(array_x));
+        array_y = utils.parseNumberArray(utils.flatten(array_y));
+        for (var i = 0; i < array_x.length; i++) {
+            result += array_x[i] * array_x[i] + array_y[i] * array_y[i];
+        }
+        return result;
+    };
+
+    exports.SUMXMY2 = function(array_x, array_y) {
+        array_x = utils.parseNumberArray(utils.flatten(array_x));
+        array_y = utils.parseNumberArray(utils.flatten(array_y));
+        if (utils.anyIsError(array_x, array_y)) {
+            return error.value;
+        }
+        var result = 0;
+        array_x = utils.flatten(array_x);
+        array_y = utils.flatten(array_y);
+        for (var i = 0; i < array_x.length; i++) {
+            result += Math.pow(array_x[i] - array_y[i], 2);
+        }
+        return result;
+    };
+
+    exports.TAN = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return Math.tan(number);
+    };
+
+    exports.TANH = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        var e2 = Math.exp(2 * number);
+        return (e2 - 1) / (e2 + 1);
+    };
+
+    exports.TRUNC = function(number, digits) {
+        digits = (digits === undefined) ? 0 : digits;
+        number = utils.parseNumber(number);
+        digits = utils.parseNumber(digits);
+        if (utils.anyIsError(number, digits)) {
+            return error.value;
+        }
+        var sign = (number > 0) ? 1 : -1;
+        return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);
+    };
+
+    return exports;
+})();
+
+jexcel.methods.misc = (function() {
+    var exports = {};
+
+    exports.UNIQUE = function () {
+        var result = [];
+        for (var i = 0; i < arguments.length; ++i) {
+            var hasElement = false;
+            var element = arguments[i];
+
+            // Check if we've already seen this element.
+            for (var j = 0; j < result.length; ++j) {
+                hasElement = result[j] === element;
+                if (hasElement) { break; }
+            }
+
+            // If we did not find it, add it to the result.
+            if (!hasElement) {
+                result.push(element);
+            }
+        }
+        return result;
+    };
+
+    exports.FLATTEN = utils.flatten;
+
+    exports.ARGS2ARRAY = function () {
+        return Array.prototype.slice.call(arguments, 0);
+    };
+
+    exports.REFERENCE = function (context, reference) {
+        try {
+            var path = reference.split('.');
+            var result = context;
+            for (var i = 0; i < path.length; ++i) {
+                var step = path[i];
+                if (step[step.length - 1] === ']') {
+                    var opening = step.indexOf('[');
+                    var index = step.substring(opening + 1, step.length - 1);
+                    result = result[step.substring(0, opening)][index];
+                } else {
+                    result = result[step];
+                }
+            }
+            return result;
+        } catch (error) {}
+    };
+
+    exports.JOIN = function (array, separator) {
+        return array.join(separator);
+    };
+
+    exports.NUMBERS = function () {
+        var possibleNumbers = utils.flatten(arguments);
+        return possibleNumbers.filter(function (el) {
+            return typeof el === 'number';
+        });
+    };
+
+    exports.NUMERAL = null;
+
+    return exports;
+})();
+
+jexcel.methods.text = (function() {
+    var exports = {};
+
+    exports.ASC = null;
+
+    exports.BAHTTEXT = null;
+
+    exports.CHAR = function(number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return String.fromCharCode(number);
+    };
+
+    exports.CLEAN = function(text) {
+        text = text || '';
+        var re = /[\0-\x1F]/g;
+        return text.replace(re, "");
+    };
+
+    exports.CODE = function(text) {
+        text = text || '';
+        return text.charCodeAt(0);
+    };
+
+    exports.CONCATENATE = function() {
+        var args = utils.flatten(arguments);
+
+        var trueFound = 0;
+        while ((trueFound = args.indexOf(true)) > -1) {
+            args[trueFound] = 'TRUE';
+        }
+
+        var falseFound = 0;
+        while ((falseFound = args.indexOf(false)) > -1) {
+            args[falseFound] = 'FALSE';
+        }
+
+        return args.join('');
+    };
+
+    exports.DBCS = null;
+
+    exports.DOLLAR = null;
+
+    exports.EXACT = function(text1, text2) {
+        return text1 === text2;
+    };
+
+    exports.FIND = function(find_text, within_text, position) {
+        position = (position === undefined) ? 0 : position;
+        return within_text ? within_text.indexOf(find_text, position - 1) + 1 : null;
+    };
+
+    exports.FIXED = null;
+
+    exports.HTML2TEXT = function (value) {
+        var result = '';
+
+        if (value) {
+            if (value instanceof Array) {
+                value.forEach(function (line) {
+                    if (result !== '') {
+                      result += '\n';
+                    }
+                    result += (line.replace(/<(?:.|\n)*?>/gm, ''));
+                });
+            } else {
+                result = value.replace(/<(?:.|\n)*?>/gm, '');
+            }
+        }
+
+        return result;
+    };
+
+    exports.LEFT = function(text, number) {
+        number = (number === undefined) ? 1 : number;
+        number = utils.parseNumber(number);
+        if (number instanceof Error || typeof text !== 'string') {
+            return error.value;
+        }
+        return text ? text.substring(0, number) : null;
+    };
+
+    exports.LEN = function(text) {
+        if (arguments.length === 0) {
+            return error.error;
+        }
+
+        if (typeof text === 'string') {
+            return text ? text.length : 0;
+        }
+
+        if (text.length) {
+            return text.length;
+        }
+
+        return error.value;
+    };
+
+    exports.LOWER = function(text) {
+        if (typeof text !== 'string') {
+            return error.value;
+        }
+        return text ? text.toLowerCase() : text;
+    };
+
+    exports.MID = function(text, start, number) {
+        start = utils.parseNumber(start);
+        number = utils.parseNumber(number);
+        if (utils.anyIsError(start, number) || typeof text !== 'string') {
+            return number;
+        }
+
+        var begin = start - 1;
+        var end = begin + number;
+
+        return text.substring(begin, end);
+    };
+
+    exports.NUMBERVALUE = null;
+
+    exports.PRONETIC = null;
+
+    exports.PROPER = function(text) {
+        if (text === undefined || text.length === 0) {
+            return error.value;
+        }
+        if (text === true) {
+            text = 'TRUE';
+        }
+        if (text === false) {
+            text = 'FALSE';
+        }
+        if (isNaN(text) && typeof text === 'number') {
+            return error.value;
+        }
+        if (typeof text === 'number') {
+            text = '' + text;
+        }
+
+        return text.replace(/\w\S*/g, function(txt) {
+            return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
+        });
+    };
+
+    exports.REGEXEXTRACT = function (text, regular_expression) {
+        var match = text.match(new RegExp(regular_expression));
+        return match ? (match[match.length > 1 ? match.length - 1 : 0]) : null;
+    };
+
+    exports.REGEXMATCH = function (text, regular_expression, full) {
+        var match = text.match(new RegExp(regular_expression));
+        return full ? match : !!match;
+    };
+
+    exports.REGEXREPLACE = function (text, regular_expression, replacement) {
+        return text.replace(new RegExp(regular_expression), replacement);
+    };
+
+    exports.REPLACE = function(text, position, length, new_text) {
+        position = utils.parseNumber(position);
+        length = utils.parseNumber(length);
+        if (utils.anyIsError(position, length) ||
+            typeof text !== 'string' ||
+            typeof new_text !== 'string') {
+            return error.value;
+        }
+        return text.substr(0, position - 1) + new_text + text.substr(position - 1 + length);
+    };
+
+    exports.REPT = function(text, number) {
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return new Array(number + 1).join(text);
+    };
+
+    exports.RIGHT = function(text, number) {
+        number = (number === undefined) ? 1 : number;
+        number = utils.parseNumber(number);
+        if (number instanceof Error) {
+            return number;
+        }
+        return text ? text.substring(text.length - number) : null;
+    };
+
+    exports.SEARCH = function(find_text, within_text, position) {
+        var foundAt;
+        if (typeof find_text !== 'string' || typeof within_text !== 'string') {
+            return error.value;
+        }
+        position = (position === undefined) ? 0 : position;
+        foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), position - 1)+1;
+        return (foundAt === 0)?error.value:foundAt;
+    };
+
+    exports.SPLIT = function (text, separator) {
+        return text.split(separator);
+    };
+
+    exports.SUBSTITUTE = function(text, old_text, new_text, occurrence) {
+        if (!text || !old_text || !new_text) {
+            return text;
+        } else if (occurrence === undefined) {
+            return text.replace(new RegExp(old_text, 'g'), new_text);
+        } else {
+            var index = 0;
+            var i = 0;
+            while (text.indexOf(old_text, index) > 0) {
+                index = text.indexOf(old_text, index + 1);
+                i++;
+                if (i === occurrence) {
+                    return text.substring(0, index) + new_text + text.substring(index + old_text.length);
+                }
+            }
+        }
+    };
+
+    exports.T = function(value) {
+        return (typeof value === "string") ? value : '';
+    };
+
+    exports.TEXT = null;
+
+    exports.TRIM = function(text) {
+        if (typeof text !== 'string') {
+            return error.value;
+        }
+        return text.replace(/ +/g, ' ').trim();
+    };
+
+    exports.UNICHAR = exports.CHAR;
+
+    exports.UNICODE = exports.CODE;
+
+    exports.UPPER = function(text) {
+        if (typeof text !== 'string') {
+            return error.value;
+        }
+        return text.toUpperCase();
+    };
+
+    exports.VALUE = null;
+
+    return exports;
+})();
+
+jexcel.methods.stats = (function() {
+    var exports = {};
+
+    var SQRT2PI = 2.5066282746310002;
+
+    exports.AVEDEV = null;
+
+    exports.AVERAGE = function() {
+        var range = utils.numbers(utils.flatten(arguments));
+        var n = range.length;
+        var sum = 0;
+        var count = 0;
+        for (var i = 0; i < n; i++) {
+            sum += range[i];
+            count += 1;
+        }
+        return sum / count;
+    };
+
+    exports.AVERAGEA = function() {
+        var range = utils.flatten(arguments);
+        var n = range.length;
+        var sum = 0;
+        var count = 0;
+        for (var i = 0; i < n; i++) {
+            var el = range[i];
+            if (typeof el === 'number') {
+                sum += el;
+            }
+            if (el === true) {
+                sum++;
+            }
+            if (el !== null) {
+                count++;
+            }
+        }
+        return sum / count;
+    };
+
+    exports.AVERAGEIF = function(range, criteria, average_range) {
+        average_range = average_range || range;
+        range = utils.flatten(range);
+        average_range = utils.parseNumberArray(utils.flatten(average_range));
+        if (average_range instanceof Error) {
+            return average_range;
+        }
+        var average_count = 0;
+        var result = 0;
+        for (var i = 0; i < range.length; i++) {
+            if (eval(range[i] + criteria)) { // jshint ignore:line
+                result += average_range[i];
+                average_count++;
+            }
+        }
+        return result / average_count;
+    };
+
+    exports.AVERAGEIFS = null;
+
+    exports.COUNT = function() {
+        return utils.numbers(utils.flatten(arguments)).length;
+    };
+
+    exports.COUNTA = function() {
+        var range = utils.flatten(arguments);
+        return range.length - exports.COUNTBLANK(range);
+    };
+
+    exports.COUNTIN = function (range, value) {
+        var result = 0;
+        for (var i = 0; i < range.length; i++) {
+            if (range[i] === value) {
+                result++;
+            }
+        }
+        return result;
+    };
+
+    exports.COUNTBLANK = function() {
+        var range = utils.flatten(arguments);
+        var blanks = 0;
+        var element;
+        for (var i = 0; i < range.length; i++) {
+            element = range[i];
+            if (element === null || element === '') {
+                blanks++;
+            }
+        }
+        return blanks;
+    };
+
+    exports.COUNTIF = function(range, criteria) {
+        range = utils.flatten(range);
+        if (!/[<>=!]/.test(criteria)) {
+            criteria = '=="' + criteria + '"';
+        }
+        var matches = 0;
+        for (var i = 0; i < range.length; i++) {
+            if (typeof range[i] !== 'string') {
+                if (eval(range[i] + criteria)) { // jshint ignore:line
+                    matches++;
+                }
+            } else {
+                if (eval('"' + range[i] + '"' + criteria)) { // jshint ignore:line
+                    matches++;
+                }
+            }
+        }
+        return matches;
+    };
+
+    exports.COUNTIFS = function() {
+        var args = utils.argsToArray(arguments);
+        var results = new Array(utils.flatten(args[0]).length);
+        for (var i = 0; i < results.length; i++) {
+            results[i] = true;
+        }
+        for (i = 0; i < args.length; i += 2) {
+            var range = utils.flatten(args[i]);
+            var criteria = args[i + 1];
+            if (!/[<>=!]/.test(criteria)) {
+                criteria = '=="' + criteria + '"';
+            }
+            for (var j = 0; j < range.length; j++) {
+                if (typeof range[j] !== 'string') {
+                    results[j] = results[j] && eval(range[j] + criteria); // jshint ignore:line
+                } else {
+                    results[j] = results[j] && eval('"' + range[j] + '"' + criteria); // jshint ignore:line
+                }
+            }
+        }
+        var result = 0;
+        for (i = 0; i < results.length; i++) {
+            if (results[i]) {
+                result++;
+            }
+        }
+        return result;
+    };
+
+    exports.COUNTUNIQUE = function () {
+        return UNIQUE.apply(null, utils.flatten(arguments)).length;
+    };
+
+    exports.FISHER = function(x) {
+        x = utils.parseNumber(x);
+        if (x instanceof Error) {
+            return x;
+        }
+        return Math.log((1 + x) / (1 - x)) / 2;
+    };
+
+    exports.FISHERINV = function(y) {
+        y = utils.parseNumber(y);
+        if (y instanceof Error) {
+            return y;
+        }
+        var e2y = Math.exp(2 * y);
+        return (e2y - 1) / (e2y + 1);
+    };
+
+    exports.FREQUENCY = function(data, bins) {
+        data = utils.parseNumberArray(utils.flatten(data));
+        bins = utils.parseNumberArray(utils.flatten(bins));
+        if (utils.anyIsError(data, bins)) {
+            return error.value;
+        }
+        var n = data.length;
+        var b = bins.length;
+        var r = [];
+        for (var i = 0; i <= b; i++) {
+            r[i] = 0;
+            for (var j = 0; j < n; j++) {
+                if (i === 0) {
+                    if (data[j] <= bins[0]) {
+                        r[0] += 1;
+                    }
+                } else if (i < b) {
+                    if (data[j] > bins[i - 1] && data[j] <= bins[i]) {
+                        r[i] += 1;
+                    }
+                } else if (i === b) {
+                    if (data[j] > bins[b - 1]) {
+                        r[b] += 1;
+                    }
+                }
+            }
+        }
+        return r;
+    };
+
+    exports.LARGE = function(range, k) {
+        range = utils.parseNumberArray(utils.flatten(range));
+        k = utils.parseNumber(k);
+        if (utils.anyIsError(range, k)) {
+            return range;
+        }
+        return range.sort(function(a, b) {
+            return b - a;
+        })[k - 1];
+    };
+
+    exports.MAX = function() {
+        var range = utils.numbers(utils.flatten(arguments));
+        return (range.length === 0) ? 0 : Math.max.apply(Math, range);
+    };
+
+    exports.MAXA = function() {
+        var range = utils.arrayValuesToNumbers(utils.flatten(arguments));
+        return (range.length === 0) ? 0 : Math.max.apply(Math, range);
+    };
+
+    exports.MIN = function() {
+        var range = utils.numbers(utils.flatten(arguments));
+        return (range.length === 0) ? 0 : Math.min.apply(Math, range);
+    };
+
+    exports.MINA = function() {
+        var range = utils.arrayValuesToNumbers(utils.flatten(arguments));
+        return (range.length === 0) ? 0 : Math.min.apply(Math, range);
+    };
+
+    exports.MODE = {};
+
+    exports.MODE.MULT = function() {
+        // Credits: Roönaän
+        var range = utils.parseNumberArray(utils.flatten(arguments));
+        if (range instanceof Error) {
+            return range;
+        }
+        var n = range.length;
+        var count = {};
+        var maxItems = [];
+        var max = 0;
+        var currentItem;
+
+        for (var i = 0; i < n; i++) {
+            currentItem = range[i];
+            count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;
+            if (count[currentItem] > max) {
+                max = count[currentItem];
+                maxItems = [];
+            }
+            if (count[currentItem] === max) {
+                maxItems[maxItems.length] = currentItem;
+            }
+        }
+        return maxItems;
+    };
+
+    exports.MODE.SNGL = function() {
+        var range = utils.parseNumberArray(utils.flatten(arguments));
+        if (range instanceof Error) {
+            return range;
+        }
+        return exports.MODE.MULT(range).sort(function(a, b) {
+            return a - b;
+        })[0];
+    };
+
+    exports.PERCENTILE = {};
+
+    exports.PERCENTILE.EXC = function(array, k) {
+        array = utils.parseNumberArray(utils.flatten(array));
+        k = utils.parseNumber(k);
+        if (utils.anyIsError(array, k)) {
+            return error.value;
+        }
+        array = array.sort(function(a, b) {
+            {
+                return a - b;
+            }
+        });
+        var n = array.length;
+        if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) {
+            return error.num;
+        }
+        var l = k * (n + 1) - 1;
+        var fl = Math.floor(l);
+        return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));
+    };
+
+    exports.PERCENTILE.INC = function(array, k) {
+        array = utils.parseNumberArray(utils.flatten(array));
+        k = utils.parseNumber(k);
+        if (utils.anyIsError(array, k)) {
+            return error.value;
+        }
+        array = array.sort(function(a, b) {
+            return a - b;
+        });
+        var n = array.length;
+        var l = k * (n - 1);
+        var fl = Math.floor(l);
+        return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));
+    };
+
+    exports.PERCENTRANK = {};
+
+    exports.PERCENTRANK.EXC = function(array, x, significance) {
+        significance = (significance === undefined) ? 3 : significance;
+        array = utils.parseNumberArray(utils.flatten(array));
+        x = utils.parseNumber(x);
+        significance = utils.parseNumber(significance);
+        if (utils.anyIsError(array, x, significance)) {
+            return error.value;
+        }
+        array = array.sort(function(a, b) {
+            return a - b;
+        });
+        var uniques = UNIQUE.apply(null, array);
+        var n = array.length;
+        var m = uniques.length;
+        var power = Math.pow(10, significance);
+        var result = 0;
+        var match = false;
+        var i = 0;
+        while (!match && i < m) {
+            if (x === uniques[i]) {
+                result = (array.indexOf(uniques[i]) + 1) / (n + 1);
+                match = true;
+            } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {
+                result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1);
+                match = true;
+            }
+            i++;
+        }
+        return Math.floor(result * power) / power;
+    };
+
+    exports.PERCENTRANK.INC = function(array, x, significance) {
+        significance = (significance === undefined) ? 3 : significance;
+        array = utils.parseNumberArray(utils.flatten(array));
+        x = utils.parseNumber(x);
+        significance = utils.parseNumber(significance);
+        if (utils.anyIsError(array, x, significance)) {
+            return error.value;
+        }
+        array = array.sort(function(a, b) {
+            return a - b;
+        });
+        var uniques = UNIQUE.apply(null, array);
+        var n = array.length;
+        var m = uniques.length;
+        var power = Math.pow(10, significance);
+        var result = 0;
+        var match = false;
+        var i = 0;
+        while (!match && i < m) {
+            if (x === uniques[i]) {
+                result = array.indexOf(uniques[i]) / (n - 1);
+                match = true;
+            } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {
+                result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1);
+                match = true;
+            }
+            i++;
+        }
+        return Math.floor(result * power) / power;
+    };
+
+    exports.PERMUT = function(number, number_chosen) {
+        number = utils.parseNumber(number);
+        number_chosen = utils.parseNumber(number_chosen);
+        if (utils.anyIsError(number, number_chosen)) {
+            return error.value;
+        }
+        return FACT(number) / FACT(number - number_chosen);
+    };
+
+    exports.PERMUTATIONA = function(number, number_chosen) {
+        number = utils.parseNumber(number);
+        number_chosen = utils.parseNumber(number_chosen);
+        if (utils.anyIsError(number, number_chosen)) {
+            return error.value;
+        }
+        return Math.pow(number, number_chosen);
+    };
+
+    exports.PHI = function(x) {
+        x = utils.parseNumber(x);
+        if (x instanceof Error) {
+            return error.value;
+        }
+        return Math.exp(-0.5 * x * x) / SQRT2PI;
+    };
+
+    exports.PROB = function(range, probability, lower, upper) {
+        if (lower === undefined) {
+            return 0;
+        }
+        upper = (upper === undefined) ? lower : upper;
+
+        range = utils.parseNumberArray(utils.flatten(range));
+        probability = utils.parseNumberArray(utils.flatten(probability));
+        lower = utils.parseNumber(lower);
+        upper = utils.parseNumber(upper);
+        if (utils.anyIsError(range, probability, lower, upper)) {
+            return error.value;
+        }
+
+        if (lower === upper) {
+            return (range.indexOf(lower) >= 0) ? probability[range.indexOf(lower)] : 0;
+        }
+
+        var sorted = range.sort(function(a, b) {
+            return a - b;
+        });
+        var n = sorted.length;
+        var result = 0;
+        for (var i = 0; i < n; i++) {
+            if (sorted[i] >= lower && sorted[i] <= upper) {
+                result += probability[range.indexOf(sorted[i])];
+            }
+        }
+        return result;
+    };
+
+    exports.QUARTILE = {};
+
+    exports.QUARTILE.EXC = function(range, quart) {
+        range = utils.parseNumberArray(utils.flatten(range));
+        quart = utils.parseNumber(quart);
+        if (utils.anyIsError(range, quart)) {
+            return error.value;
+        }
+        switch (quart) {
+            case 1:
+                return exports.PERCENTILE.EXC(range, 0.25);
+            case 2:
+                return exports.PERCENTILE.EXC(range, 0.5);
+            case 3:
+                return exports.PERCENTILE.EXC(range, 0.75);
+            default:
+                return error.num;
+        }
+    };
+
+    exports.QUARTILE.INC = function(range, quart) {
+        range = utils.parseNumberArray(utils.flatten(range));
+        quart = utils.parseNumber(quart);
+        if (utils.anyIsError(range, quart)) {
+            return error.value;
+        }
+        switch (quart) {
+            case 1:
+                return exports.PERCENTILE.INC(range, 0.25);
+            case 2:
+                return exports.PERCENTILE.INC(range, 0.5);
+            case 3:
+                return exports.PERCENTILE.INC(range, 0.75);
+            default:
+                return error.num;
+        }
+    };
+
+    exports.RANK = {};
+
+    exports.RANK.AVG = function(number, range, order) {
+        number = utils.parseNumber(number);
+        range = utils.parseNumberArray(utils.flatten(range));
+        if (utils.anyIsError(number, range)) {
+            return error.value;
+        }
+        range = utils.flatten(range);
+        order = order || false;
+        var sort = (order) ? function(a, b) {
+            return a - b;
+        } : function(a, b) {
+            return b - a;
+        };
+        range = range.sort(sort);
+
+        var length = range.length;
+        var count = 0;
+        for (var i = 0; i < length; i++) {
+            if (range[i] === number) {
+                count++;
+            }
+        }
+
+        return (count > 1) ? (2 * range.indexOf(number) + count + 1) / 2 : range.indexOf(number) + 1;
+    };
+
+    exports.RANK.EQ = function(number, range, order) {
+        number = utils.parseNumber(number);
+        range = utils.parseNumberArray(utils.flatten(range));
+        if (utils.anyIsError(number, range)) {
+            return error.value;
+        }
+        order = order || false;
+        var sort = (order) ? function(a, b) {
+            return a - b;
+        } : function(a, b) {
+            return b - a;
+        };
+        range = range.sort(sort);
+        return range.indexOf(number) + 1;
+    };
+
+    exports.RSQ = function(data_x, data_y) { // no need to flatten here, PEARSON will take care of that
+        data_x = utils.parseNumberArray(utils.flatten(data_x));
+        data_y = utils.parseNumberArray(utils.flatten(data_y));
+        if (utils.anyIsError(data_x, data_y)) {
+            return error.value;
+        }
+        return Math.pow(exports.PEARSON(data_x, data_y), 2);
+    };
+
+    exports.SMALL = function(range, k) {
+        range = utils.parseNumberArray(utils.flatten(range));
+        k = utils.parseNumber(k);
+        if (utils.anyIsError(range, k)) {
+            return range;
+        }
+        return range.sort(function(a, b) {
+            return a - b;
+        })[k - 1];
+    };
+
+    exports.STANDARDIZE = function(x, mean, sd) {
+        x = utils.parseNumber(x);
+        mean = utils.parseNumber(mean);
+        sd = utils.parseNumber(sd);
+        if (utils.anyIsError(x, mean, sd)) {
+            return error.value;
+        }
+        return (x - mean) / sd;
+    };
+
+    exports.STDEV = {};
+
+    exports.STDEV.P = function() {
+        var v = exports.VAR.P.apply(this, arguments);
+        return Math.sqrt(v);
+    };
+
+    exports.STDEV.S = function() {
+        var v = exports.VAR.S.apply(this, arguments);
+        return Math.sqrt(v);
+    };
+
+    exports.STDEVA = function() {
+        var v = exports.VARA.apply(this, arguments);
+        return Math.sqrt(v);
+    };
+
+    exports.STDEVPA = function() {
+        var v = exports.VARPA.apply(this, arguments);
+        return Math.sqrt(v);
+    };
+
+    exports.VAR = {};
+
+    exports.VAR.P = function() {
+        var range = utils.numbers(utils.flatten(arguments));
+        var n = range.length;
+        var sigma = 0;
+        var mean = exports.AVERAGE(range);
+        for (var i = 0; i < n; i++) {
+            sigma += Math.pow(range[i] - mean, 2);
+        }
+        return sigma / n;
+    };
+
+    exports.VAR.S = function() {
+        var range = utils.numbers(utils.flatten(arguments));
+        var n = range.length;
+        var sigma = 0;
+        var mean = exports.AVERAGE(range);
+        for (var i = 0; i < n; i++) {
+            sigma += Math.pow(range[i] - mean, 2);
+        }
+        return sigma / (n - 1);
+    };
+
+    exports.VARA = function() {
+        var range = utils.flatten(arguments);
+        var n = range.length;
+        var sigma = 0;
+        var count = 0;
+        var mean = exports.AVERAGEA(range);
+        for (var i = 0; i < n; i++) {
+            var el = range[i];
+            if (typeof el === 'number') {
+                sigma += Math.pow(el - mean, 2);
+            } else if (el === true) {
+                sigma += Math.pow(1 - mean, 2);
+            } else {
+                sigma += Math.pow(0 - mean, 2);
+            }
+
+            if (el !== null) {
+                count++;
+            }
+        }
+        return sigma / (count - 1);
+    };
+
+    exports.VARPA = function() {
+        var range = utils.flatten(arguments);
+        var n = range.length;
+        var sigma = 0;
+        var count = 0;
+        var mean = exports.AVERAGEA(range);
+        for (var i = 0; i < n; i++) {
+            var el = range[i];
+            if (typeof el === 'number') {
+                sigma += Math.pow(el - mean, 2);
+            } else if (el === true) {
+                sigma += Math.pow(1 - mean, 2);
+            } else {
+                sigma += Math.pow(0 - mean, 2);
+            }
+
+            if (el !== null) {
+                count++;
+            }
+        }
+        return sigma / count;
+    };
+
+    exports.WEIBULL = {};
+
+    exports.WEIBULL.DIST = function(x, alpha, beta, cumulative) {
+        x = utils.parseNumber(x);
+        alpha = utils.parseNumber(alpha);
+        beta = utils.parseNumber(beta);
+        if (utils.anyIsError(x, alpha, beta)) {
+            return error.value;
+        }
+        return (cumulative) ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);
+    };
+
+    exports.Z = {};
+
+    exports.Z.TEST = function(range, x, sd) {
+        range = utils.parseNumberArray(utils.flatten(range));
+        x = utils.parseNumber(x);
+        if (utils.anyIsError(range, x)) {
+            return error.value;
+        }
+
+        sd = sd || exports.STDEV.S(range);
+        var n = range.length;
+        return 1 - exports.NORM.S.DIST((exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), true);
+    };
+
+    return exports;
+})();
+
+for (var i = 0; i < Object.keys(jexcel.methods).length; i++) {
+    var methods = jexcel.methods[Object.keys(jexcel.methods)[i]];
+    for (var j = 0; j < Object.keys(methods).length; j++) {
+        if (typeof(methods[Object.keys(methods)[j]]) == 'function') {
+            window[Object.keys(methods)[j]] = methods[Object.keys(methods)[j]];
+        } else {
+            window[Object.keys(methods)[j]] = function() {
+                return Object.keys(methods)[j] + 'Not implemented';
+            }
+        }
+    }
+}
+
+if (typeof exports === 'object' && typeof module !== 'undefined') {
+    module.exports = jexcel;
+}
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css
similarity index 95%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css
index 82a0a28e3e686a09f7371514c92e9ec9b489b933..fefeb859790ae33de958b467417709ae8220cdb4 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css
@@ -1,65 +1,65 @@
-/*****************/
-/** jNotify CSS **/
-/*****************/
-#jNotify {
-	position:absolute;
-	background:#d8e6fc  url('../info.png') no-repeat 15px center;
-	color:#35517c;
-	border:1px solid #a7c3f0;
-	padding:10px;
-	padding-left:50px;
-	margin:15px;
-	z-index:9999;
-	-moz-border-radius : 5px;
-	border-radius:5px;
-	-webkit-border-radius:5px;
-}
-#jNotify a {color:#35517c !important;text-decoration:none;}
-
-/******************/
-/** jSuccess CSS **/
-/******************/
-#jSuccess {
-	position:absolute;
-	background:#E6EFC2  url('../success.png') no-repeat 15px center;
-	color:#264409;
-	border:1px solid #C6D880;
-	padding:10px;
-	padding-left:50px;
-	margin:15px;
-	z-index:9999;
-	-moz-border-radius : 5px;
-	border-radius:5px;
-	-webkit-border-radius:5px;
-}
-#jSuccess a {color:#264409 !important;text-decoration:none;}
-
-
-
-/****************/
-/** jError CSS **/
-/****************/
-#jError {
-	position:absolute;
-	background:#FBE3E4  url('../error.png') no-repeat 15px center;
-	color:#8a1f11;
-	border:1px solid #FBC2C4;
-	padding:10px;
-	padding-left:50px;
-	margin:15px;
-	z-index:9999;
-	-moz-border-radius : 5px;
-	border-radius:5px;
-	-webkit-border-radius:5px;
-}
-#jError a {color:#8a1f11 !important;text-decoration:none;}
-
-/** OVERLAY **/
-#jOverlay {
-	width:100%;
-	height:100%;
-	position:fixed;
-	top:0;
-	left:0;
-	z-index:9998
+/*****************/
+/** jNotify CSS **/
+/*****************/
+#jNotify {
+	position:absolute;
+	background:#d8e6fc  url('../info.png') no-repeat 15px center;
+	color:#35517c;
+	border:1px solid #a7c3f0;
+	padding:10px;
+	padding-left:50px;
+	margin:15px;
+	z-index:9999;
+	-moz-border-radius : 5px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+}
+#jNotify a {color:#35517c !important;text-decoration:none;}
+
+/******************/
+/** jSuccess CSS **/
+/******************/
+#jSuccess {
+	position:absolute;
+	background:#E6EFC2  url('../success.png') no-repeat 15px center;
+	color:#264409;
+	border:1px solid #C6D880;
+	padding:10px;
+	padding-left:50px;
+	margin:15px;
+	z-index:9999;
+	-moz-border-radius : 5px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+}
+#jSuccess a {color:#264409 !important;text-decoration:none;}
+
+
+
+/****************/
+/** jError CSS **/
+/****************/
+#jError {
+	position:absolute;
+	background:#FBE3E4  url('../error.png') no-repeat 15px center;
+	color:#8a1f11;
+	border:1px solid #FBC2C4;
+	padding:10px;
+	padding-left:50px;
+	margin:15px;
+	z-index:9999;
+	-moz-border-radius : 5px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+}
+#jError a {color:#8a1f11 !important;text-decoration:none;}
+
+/** OVERLAY **/
+#jOverlay {
+	width:100%;
+	height:100%;
+	position:fixed;
+	top:0;
+	left:0;
+	z-index:9998
 }
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css
similarity index 95%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css
index 75bee502e45eb94912fe06f1039289e2208b8719..5ea21b4ee8ddfb9c58a616bcc384f56ce0e4e431 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css
@@ -1,82 +1,82 @@
-/**********************/
-/** jNotifyImage CSS **/
-/**********************/
-#jNotifyImage {
-	position:absolute;
-	background-color:#ffffff;
-	color:#35517c;
-	border:1px solid #a7c3f0;
-	padding:10px;
-	margin:15px;
-	z-index:9999;
-	-moz-border-radius : 5px;
-	border-radius:5px;
-	-webkit-border-radius:5px;
-}
-#jNotifyImage a {color:#35517c !important;text-decoration:none;}
-
-/*****************/
-/** jNotify CSS **/
-/*****************/
-#jNotify {
-	position:absolute;
-	background:#d8e6fc  url('../img/info.png') no-repeat 15px center;
-	color:#35517c;
-	border:1px solid #a7c3f0;
-	padding:10px;
-	padding-left:50px;
-	margin:15px;
-	z-index:9999;
-	-moz-border-radius : 5px;
-	border-radius:5px;
-	-webkit-border-radius:5px;
-}
-#jNotify a {color:#35517c !important;text-decoration:none;}
-
-/******************/
-/** jSuccess CSS **/
-/******************/
-#jSuccess {
-	position:absolute;
-	background:#E6EFC2  url('../img/success.png') no-repeat 15px center;
-	color:#264409;
-	border:1px solid #C6D880;
-	padding:10px;
-	padding-left:50px;
-	margin:15px;
-	z-index:9999;
-	-moz-border-radius : 5px;
-	border-radius:5px;
-	-webkit-border-radius:5px;
-}
-#jSuccess a {color:#264409 !important;text-decoration:none;}
-
-
-
-/****************/
-/** jError CSS **/
-/****************/
-#jError {
-	position:absolute;
-	background:#FBE3E4  url('../img/error.png') no-repeat 15px center;
-	color:#8a1f11;
-	border:1px solid #FBC2C4;
-	padding:10px;
-	padding-left:50px;
-	margin:15px;
-	z-index:9999;
-	-moz-border-radius : 5px;
-	border-radius:5px;
-	-webkit-border-radius:5px;
-}
-#jError a {color:#8a1f11 !important;text-decoration:none;}
-
-/** OVERLAY **/
-#jOverlay {
-	width:100%;
-	height:100%;
-	position:fixed;
-	top:0;
-	left:0;
-	z-index:9998
+/**********************/
+/** jNotifyImage CSS **/
+/**********************/
+#jNotifyImage {
+	position:absolute;
+	background-color:#ffffff;
+	color:#35517c;
+	border:1px solid #a7c3f0;
+	padding:10px;
+	margin:15px;
+	z-index:9999;
+	-moz-border-radius : 5px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+}
+#jNotifyImage a {color:#35517c !important;text-decoration:none;}
+
+/*****************/
+/** jNotify CSS **/
+/*****************/
+#jNotify {
+	position:absolute;
+	background:#d8e6fc  url('../img/info.png') no-repeat 15px center;
+	color:#35517c;
+	border:1px solid #a7c3f0;
+	padding:10px;
+	padding-left:50px;
+	margin:15px;
+	z-index:9999;
+	-moz-border-radius : 5px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+}
+#jNotify a {color:#35517c !important;text-decoration:none;}
+
+/******************/
+/** jSuccess CSS **/
+/******************/
+#jSuccess {
+	position:absolute;
+	background:#E6EFC2  url('../img/success.png') no-repeat 15px center;
+	color:#264409;
+	border:1px solid #C6D880;
+	padding:10px;
+	padding-left:50px;
+	margin:15px;
+	z-index:9999;
+	-moz-border-radius : 5px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+}
+#jSuccess a {color:#264409 !important;text-decoration:none;}
+
+
+
+/****************/
+/** jError CSS **/
+/****************/
+#jError {
+	position:absolute;
+	background:#FBE3E4  url('../img/error.png') no-repeat 15px center;
+	color:#8a1f11;
+	border:1px solid #FBC2C4;
+	padding:10px;
+	padding-left:50px;
+	margin:15px;
+	z-index:9999;
+	-moz-border-radius : 5px;
+	border-radius:5px;
+	-webkit-border-radius:5px;
+}
+#jError a {color:#8a1f11 !important;text-decoration:none;}
+
+/** OVERLAY **/
+#jOverlay {
+	width:100%;
+	height:100%;
+	position:fixed;
+	top:0;
+	left:0;
+	z-index:9998
 }
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js
similarity index 96%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js
index e2c60f10bab23bd837a1f73d1011315addf8ef05..f12898cbdd4163e6f9da3b879b22ebe72fc0cb21 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js
@@ -1,248 +1,248 @@
-/************************************************************************
-*************************************************************************
-@Name :       	jNotify - jQuery Plugin
-@Revison :    	2.1
-@Date : 		01/2011
-@Author:     	ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr)
-@Support:    	FF, IE7, IE8, MAC Firefox, MAC Safari
-@License :		Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
-
-**************************************************************************
-*************************************************************************/
-(function($){
-
-	$.jNotify = {
-		defaults: {
-			/** VARS - OPTIONS **/
-			autoHide : true,				// Notify box auto-close after 'TimeShown' ms ?
-			clickOverlay : false,			// if 'clickOverlay' = false, close the notice box on the overlay click ?
-			MinWidth : 200,					// min-width CSS property
-			TimeShown : 1500, 				// Box shown during 'TimeShown' ms
-			ShowTimeEffect : 200, 			// duration of the Show Effect
-			HideTimeEffect : 200, 			// duration of the Hide effect
-			LongTrip : 15,					// in pixel, length of the move effect when show and hide
-			HorizontalPosition : 'right', 	// left, center, right
-			VerticalPosition : 'bottom',	 // top, center, bottom
-			ShowOverlay : true,				// show overlay behind the notice ?
-			ColorOverlay : '#000',			// color of the overlay
-			OpacityOverlay : 0.3,			// opacity of the overlay
-			
-			/** METHODS - OPTIONS **/
-			onClosed : null,
-			onCompleted : null
-		},
-
-		/*****************/
-		/** Init Method **/
-		/*****************/
-		init:function(msg, options, id) {
-			opts = $.extend({}, $.jNotify.defaults, options);
-
-			/** Box **/
-			if($("#"+id).length == 0)
-				$Div = $.jNotify._construct(id, msg);
-
-			// Width of the Brower
-			WidthDoc = parseInt($(window).width());
-			HeightDoc = parseInt($(window).height());
-
-			// Scroll Position
-			ScrollTop = parseInt($(window).scrollTop());
-			ScrollLeft = parseInt($(window).scrollLeft());
-
-			// Position of the jNotify Box
-			posTop = $.jNotify.vPos(opts.VerticalPosition);
-			posLeft = $.jNotify.hPos(opts.HorizontalPosition);
-
-			// Show the jNotify Box
-			if(opts.ShowOverlay && $("#jOverlay").length == 0)
-				$.jNotify._showOverlay($Div);
-
-			$.jNotify._show(msg);
-		},
-
-		/*******************/
-		/** Construct DOM **/
-		/*******************/
-		_construct:function(id, msg) {
-			$Div = 
-			$('<div id="'+id+'"/>')
-			.css({opacity : 0,minWidth : opts.MinWidth})
-			.html(msg)
-			.appendTo('body');
-			return $Div;
-		},
-
-		/**********************/
-		/** Postions Methods **/
-		/**********************/
-		vPos:function(pos) {
-			switch(pos) {
-				case 'top':
-					var vPos = ScrollTop + parseInt($Div.outerHeight(true)/2);
-					break;
-				case 'center':
-					var vPos = ScrollTop + (HeightDoc/2) - (parseInt($Div.outerHeight(true))/2);
-					break;
-				case 'bottom':
-					var vPos = ScrollTop + HeightDoc - parseInt($Div.outerHeight(true));
-					break;
-			}
-			return vPos;
-		},
-
-		hPos:function(pos) {
-			switch(pos) {
-				case 'left':
-					var hPos = ScrollLeft;
-					break;
-				case 'center':
-					var hPos = ScrollLeft + (WidthDoc/2) - (parseInt($Div.outerWidth(true))/2);
-					break;
-				case 'right':
-					var hPos = ScrollLeft + WidthDoc - parseInt($Div.outerWidth(true));
-					break;
-			}
-			return hPos;
-		},
-
-		/*********************/
-		/** Show Div Method **/
-		/*********************/
-		_show:function(msg) {
-			$Div
-			.css({
-				top: posTop,
-				left : posLeft
-			});
-			switch (opts.VerticalPosition) {
-				case 'top':
-					$Div.animate({
-						top: posTop + opts.LongTrip,
-						opacity:1
-					},opts.ShowTimeEffect,function(){
-						if(opts.onCompleted) opts.onCompleted();
-					});
-					if(opts.autoHide)
-						$.jNotify._close();
-					else
-						$Div.css('cursor','pointer').click(function(e){
-							$.jNotify._close();
-						});
-					break;
-				case 'center':
-					$Div.animate({
-						opacity:1
-					},opts.ShowTimeEffect,function(){
-						if(opts.onCompleted) opts.onCompleted();
-					});
-					if(opts.autoHide)
-						$.jNotify._close();
-					else
-						$Div.css('cursor','pointer').click(function(e){
-							$.jNotify._close();
-						});
-					break;
-				case 'bottom' :
-					$Div.animate({
-						top: posTop - opts.LongTrip,
-						opacity:1
-					},opts.ShowTimeEffect,function(){
-						if(opts.onCompleted) opts.onCompleted();
-					});
-					if(opts.autoHide)
-						$.jNotify._close();
-					else
-						$Div.css('cursor','pointer').click(function(e){
-							$.jNotify._close();
-						});
-					break;
-			}
-		},
-
-		_showOverlay:function(el){
-			var overlay = 
-			$('<div id="jOverlay" />')
-			.css({
-				backgroundColor : opts.ColorOverlay,
-				opacity: opts.OpacityOverlay
-			})
-			.appendTo('body')
-			.show();
-
-			if(opts.clickOverlay)
-			overlay.click(function(e){
-				e.preventDefault();
-				opts.TimeShown = 0;
-				$.jNotify._close();
-			});
-		},
-
-
-		_close:function(){
-				switch (opts.VerticalPosition) {
-					case 'top':
-						if(!opts.autoHide)
-							opts.TimeShown = 0;
-						$Div.stop(true, true).delay(opts.TimeShown).animate({
-							top: posTop-opts.LongTrip,
-							opacity:0
-						},opts.HideTimeEffect,function(){
-							$(this).remove();
-							if(opts.ShowOverlay && $("#jOverlay").length > 0)
-								$("#jOverlay").remove();
-								if(opts.onClosed) opts.onClosed();
-						});
-						break;
-					case 'center':
-						if(!opts.autoHide)
-							opts.TimeShown = 0;
-						$Div.stop(true, true).delay(opts.TimeShown).animate({
-							opacity:0
-						},opts.HideTimeEffect,function(){
-							$(this).remove();
-							if(opts.ShowOverlay && $("#jOverlay").length > 0)
-								$("#jOverlay").remove();
-								if(opts.onClosed) opts.onClosed();
-						});
-						break;
-					case 'bottom' :
-						if(!opts.autoHide)
-							opts.TimeShown = 0;
-						$Div.stop(true, true).delay(opts.TimeShown).animate({
-							top: posTop+opts.LongTrip,
-							opacity:0
-						},opts.HideTimeEffect,function(){
-							$(this).remove();
-							if(opts.ShowOverlay && $("#jOverlay").length > 0)
-								$("#jOverlay").remove();
-								if(opts.onClosed) opts.onClosed();
-						});
-						break;
-				}
-		},
-
-		_isReadable:function(id){
-			if($('#'+id).length > 0)
-				return false;
-			else
-				return true;
-		}
-	};
-
-	/** Init method **/
-	jNotify = function(msg,options) {
-		if($.jNotify._isReadable('jNotify'))
-			$.jNotify.init(msg,options,'jNotify');
-	};
-
-	jSuccess = function(msg,options) {
-		if($.jNotify._isReadable('jSuccess'))
-			$.jNotify.init(msg,options,'jSuccess');
-	};
-
-	jError = function(msg,options) {
-		if($.jNotify._isReadable('jError'))
-			$.jNotify.init(msg,options,'jError');
-	};
+/************************************************************************
+*************************************************************************
+@Name :       	jNotify - jQuery Plugin
+@Revison :    	2.1
+@Date : 		01/2011
+@Author:     	ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr)
+@Support:    	FF, IE7, IE8, MAC Firefox, MAC Safari
+@License :		Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
+
+**************************************************************************
+*************************************************************************/
+(function($){
+
+	$.jNotify = {
+		defaults: {
+			/** VARS - OPTIONS **/
+			autoHide : true,				// Notify box auto-close after 'TimeShown' ms ?
+			clickOverlay : false,			// if 'clickOverlay' = false, close the notice box on the overlay click ?
+			MinWidth : 200,					// min-width CSS property
+			TimeShown : 1500, 				// Box shown during 'TimeShown' ms
+			ShowTimeEffect : 200, 			// duration of the Show Effect
+			HideTimeEffect : 200, 			// duration of the Hide effect
+			LongTrip : 15,					// in pixel, length of the move effect when show and hide
+			HorizontalPosition : 'right', 	// left, center, right
+			VerticalPosition : 'bottom',	 // top, center, bottom
+			ShowOverlay : true,				// show overlay behind the notice ?
+			ColorOverlay : '#000',			// color of the overlay
+			OpacityOverlay : 0.3,			// opacity of the overlay
+			
+			/** METHODS - OPTIONS **/
+			onClosed : null,
+			onCompleted : null
+		},
+
+		/*****************/
+		/** Init Method **/
+		/*****************/
+		init:function(msg, options, id) {
+			opts = $.extend({}, $.jNotify.defaults, options);
+
+			/** Box **/
+			if($("#"+id).length == 0)
+				$Div = $.jNotify._construct(id, msg);
+
+			// Width of the Brower
+			WidthDoc = parseInt($(window).width());
+			HeightDoc = parseInt($(window).height());
+
+			// Scroll Position
+			ScrollTop = parseInt($(window).scrollTop());
+			ScrollLeft = parseInt($(window).scrollLeft());
+
+			// Position of the jNotify Box
+			posTop = $.jNotify.vPos(opts.VerticalPosition);
+			posLeft = $.jNotify.hPos(opts.HorizontalPosition);
+
+			// Show the jNotify Box
+			if(opts.ShowOverlay && $("#jOverlay").length == 0)
+				$.jNotify._showOverlay($Div);
+
+			$.jNotify._show(msg);
+		},
+
+		/*******************/
+		/** Construct DOM **/
+		/*******************/
+		_construct:function(id, msg) {
+			$Div = 
+			$('<div id="'+id+'"/>')
+			.css({opacity : 0,minWidth : opts.MinWidth})
+			.html(msg)
+			.appendTo('body');
+			return $Div;
+		},
+
+		/**********************/
+		/** Postions Methods **/
+		/**********************/
+		vPos:function(pos) {
+			switch(pos) {
+				case 'top':
+					var vPos = ScrollTop + parseInt($Div.outerHeight(true)/2);
+					break;
+				case 'center':
+					var vPos = ScrollTop + (HeightDoc/2) - (parseInt($Div.outerHeight(true))/2);
+					break;
+				case 'bottom':
+					var vPos = ScrollTop + HeightDoc - parseInt($Div.outerHeight(true));
+					break;
+			}
+			return vPos;
+		},
+
+		hPos:function(pos) {
+			switch(pos) {
+				case 'left':
+					var hPos = ScrollLeft;
+					break;
+				case 'center':
+					var hPos = ScrollLeft + (WidthDoc/2) - (parseInt($Div.outerWidth(true))/2);
+					break;
+				case 'right':
+					var hPos = ScrollLeft + WidthDoc - parseInt($Div.outerWidth(true));
+					break;
+			}
+			return hPos;
+		},
+
+		/*********************/
+		/** Show Div Method **/
+		/*********************/
+		_show:function(msg) {
+			$Div
+			.css({
+				top: posTop,
+				left : posLeft
+			});
+			switch (opts.VerticalPosition) {
+				case 'top':
+					$Div.animate({
+						top: posTop + opts.LongTrip,
+						opacity:1
+					},opts.ShowTimeEffect,function(){
+						if(opts.onCompleted) opts.onCompleted();
+					});
+					if(opts.autoHide)
+						$.jNotify._close();
+					else
+						$Div.css('cursor','pointer').click(function(e){
+							$.jNotify._close();
+						});
+					break;
+				case 'center':
+					$Div.animate({
+						opacity:1
+					},opts.ShowTimeEffect,function(){
+						if(opts.onCompleted) opts.onCompleted();
+					});
+					if(opts.autoHide)
+						$.jNotify._close();
+					else
+						$Div.css('cursor','pointer').click(function(e){
+							$.jNotify._close();
+						});
+					break;
+				case 'bottom' :
+					$Div.animate({
+						top: posTop - opts.LongTrip,
+						opacity:1
+					},opts.ShowTimeEffect,function(){
+						if(opts.onCompleted) opts.onCompleted();
+					});
+					if(opts.autoHide)
+						$.jNotify._close();
+					else
+						$Div.css('cursor','pointer').click(function(e){
+							$.jNotify._close();
+						});
+					break;
+			}
+		},
+
+		_showOverlay:function(el){
+			var overlay = 
+			$('<div id="jOverlay" />')
+			.css({
+				backgroundColor : opts.ColorOverlay,
+				opacity: opts.OpacityOverlay
+			})
+			.appendTo('body')
+			.show();
+
+			if(opts.clickOverlay)
+			overlay.click(function(e){
+				e.preventDefault();
+				opts.TimeShown = 0;
+				$.jNotify._close();
+			});
+		},
+
+
+		_close:function(){
+				switch (opts.VerticalPosition) {
+					case 'top':
+						if(!opts.autoHide)
+							opts.TimeShown = 0;
+						$Div.stop(true, true).delay(opts.TimeShown).animate({
+							top: posTop-opts.LongTrip,
+							opacity:0
+						},opts.HideTimeEffect,function(){
+							$(this).remove();
+							if(opts.ShowOverlay && $("#jOverlay").length > 0)
+								$("#jOverlay").remove();
+								if(opts.onClosed) opts.onClosed();
+						});
+						break;
+					case 'center':
+						if(!opts.autoHide)
+							opts.TimeShown = 0;
+						$Div.stop(true, true).delay(opts.TimeShown).animate({
+							opacity:0
+						},opts.HideTimeEffect,function(){
+							$(this).remove();
+							if(opts.ShowOverlay && $("#jOverlay").length > 0)
+								$("#jOverlay").remove();
+								if(opts.onClosed) opts.onClosed();
+						});
+						break;
+					case 'bottom' :
+						if(!opts.autoHide)
+							opts.TimeShown = 0;
+						$Div.stop(true, true).delay(opts.TimeShown).animate({
+							top: posTop+opts.LongTrip,
+							opacity:0
+						},opts.HideTimeEffect,function(){
+							$(this).remove();
+							if(opts.ShowOverlay && $("#jOverlay").length > 0)
+								$("#jOverlay").remove();
+								if(opts.onClosed) opts.onClosed();
+						});
+						break;
+				}
+		},
+
+		_isReadable:function(id){
+			if($('#'+id).length > 0)
+				return false;
+			else
+				return true;
+		}
+	};
+
+	/** Init method **/
+	jNotify = function(msg,options) {
+		if($.jNotify._isReadable('jNotify'))
+			$.jNotify.init(msg,options,'jNotify');
+	};
+
+	jSuccess = function(msg,options) {
+		if($.jNotify._isReadable('jSuccess'))
+			$.jNotify.init(msg,options,'jSuccess');
+	};
+
+	jError = function(msg,options) {
+		if($.jNotify._isReadable('jError'))
+			$.jNotify.init(msg,options,'jError');
+	};
 })(jQuery);
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js
similarity index 96%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js
index cb4917296bf2fafe262ee86675feef5c7c46bd46..e851c59db9f0ae290b55d90bec658e41c0e4aefa 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js
@@ -1,256 +1,256 @@
-/************************************************************************
-*************************************************************************
-@Name :       	jNotify - jQuery Plugin
-@Revison :    	2.1
-@Date : 		01/2011
-@Author:     	ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr)
-@Support:    	FF, IE7, IE8, MAC Firefox, MAC Safari
-@License :		Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
-
-**************************************************************************
-*************************************************************************/
-(function($){
-
-	$.jNotify = {
-	    sequence : 0,
-
-		defaults: {
-			/** VARS - OPTIONS **/
-			autoHide : true,				// Notify box auto-close after 'TimeShown' ms ?
-			clickOverlay : false,			// if 'clickOverlay' = false, close the notice box on the overlay click ?
-			MinWidth : 200,					// min-width CSS property
-			TimeShown : 1500, 				// Box shown during 'TimeShown' ms
-			ShowTimeEffect : 200, 			// duration of the Show Effect
-			HideTimeEffect : 200, 			// duration of the Hide effect
-			LongTrip : 15,					// in pixel, length of the move effect when show and hide
-			HorizontalPosition : 'right', 	// left, center, right
-			VerticalPosition : 'bottom',	 // top, center, bottom
-			ShowOverlay : true,				// show overlay behind the notice ?
-			ColorOverlay : '#000',			// color of the overlay
-			OpacityOverlay : 0.3,			// opacity of the overlay
-			
-			/** METHODS - OPTIONS **/
-			onClosed : null,
-			onCompleted : null
-		},
-
-        overlay : [], // Empty overlay
-        div : null, //Empty div
-
-		/*****************/
-		/** Init Method **/
-		/*****************/
-		init:function(msg, options, id) {
-			this.opts = $.extend({}, this.defaults, options);
-
-			/** Box **/
-			if($("#"+id).length == 0)
-				this.div = this._construct(id, msg);
-
-			// Width of the Brower
-			WidthDoc = parseInt($(window).width());
-			HeightDoc = parseInt($(window).height());
-
-			// Scroll Position
-			ScrollTop = parseInt($(window).scrollTop());
-			ScrollLeft = parseInt($(window).scrollLeft());
-
-			// Position of the jNotify Box
-			posTop = this.vPos(this.opts.VerticalPosition);
-			posLeft = this.hPos(this.opts.HorizontalPosition);
-
-			// Show the jNotify Box
-			if(this.opts.ShowOverlay && this.overlay.length == 0)
-				this._showOverlay(this.div);
-
-			this._show(msg);
-			return this;
-		},
-
-		/*******************/
-		/** Construct DOM **/
-		/*******************/
-		_construct:function(id, msg) {
-			this.div =
-			$('<div id="'+id+'"/>')
-			.css({opacity : 0,minWidth : this.opts.MinWidth})
-			.html(msg)
-			.appendTo('body');
-			return this.div;
-		},
-
-		/**********************/
-		/** Postions Methods **/
-		/**********************/
-		vPos:function(pos) {
-			switch(pos) {
-				case 'top':
-					var vPos = ScrollTop + parseInt(this.div.outerHeight(true)/2);
-					break;
-				case 'center':
-					var vPos = ScrollTop + (HeightDoc/2) - (parseInt(this.div.outerHeight(true))/2);
-					break;
-				case 'bottom':
-					var vPos = ScrollTop + HeightDoc - parseInt(this.div.outerHeight(true));
-					break;
-			}
-			return vPos;
-		},
-
-		hPos:function(pos) {
-			switch(pos) {
-				case 'left':
-					var hPos = ScrollLeft;
-					break;
-				case 'center':
-					var hPos = ScrollLeft + (WidthDoc/2) - (parseInt(this.div.outerWidth(true))/2);
-					break;
-				case 'right':
-					var hPos = ScrollLeft + WidthDoc - parseInt(this.div.outerWidth(true));
-					break;
-			}
-			return hPos;
-		},
-
-		/*********************/
-		/** Show Div Method **/
-		/*********************/
-		_show:function(msg) {
-		    var opts = this.opts;
-			this.div
-			.css({
-				top: posTop,
-				left : posLeft
-			});
-			switch (opts.VerticalPosition) {
-				case 'top':
-					this.div.animate({
-						top: posTop + opts.LongTrip,
-						opacity:1
-					},opts.ShowTimeEffect,function(){
-						if(opts.onCompleted) opts.onCompleted();
-					});
-					if(opts.autoHide)
-						this._close();
-					else
-						this.div.css('cursor','pointer').click(function(e){
-							// $.jNotify._close();
-						});
-					break;
-				case 'center':
-					this.div.animate({
-						opacity:1
-					},opts.ShowTimeEffect,function(){
-						if(opts.onCompleted) opts.onCompleted();
-					});
-					if(opts.autoHide)
-						this._close();
-					else
-						this.div.css('cursor','pointer').click(function(e){
-							// $.jNotify._close();
-						});
-					break;
-				case 'bottom' :
-					this.div.animate({
-						top: posTop - opts.LongTrip,
-						opacity:1
-					},opts.ShowTimeEffect,function(){
-						if(opts.onCompleted) opts.onCompleted();
-					});
-					if(opts.autoHide)
-						this._close();
-					else
-						this.div.css('cursor','pointer').click(function(e){
-							// $.jNotify._close();
-						});
-					break;
-			}
-		},
-
-		_showOverlay:function(el){
-		    var opts = this.opts;
-			this.overlay =
-			$('<div>')
-			.css({
-				backgroundColor : opts.ColorOverlay,
-				opacity: opts.OpacityOverlay
-			})
-			.appendTo('body')
-			.show();
-
-			if(opts.clickOverlay)
-			this.overlay.click(function(e){
-				e.preventDefault();
-				opts.TimeShown = 0;
-				// $.jNotify._close();
-			});
-		},
-
-
-		_close:function(){
-	    var opts = this.opts;
-		var overlay = this.overlay;
-				switch (opts.VerticalPosition) {
-					case 'top':
-						if(!opts.autoHide)
-							opts.TimeShown = 0;
-						this.div.stop(true, true).delay(opts.TimeShown).animate({
-							top: posTop-opts.LongTrip,
-							opacity:0
-						},opts.HideTimeEffect,function(){
-							$(this).remove();
-							if(opts.ShowOverlay && overlay.length > 0)
-								overlay.remove();
-								if(opts.onClosed) opts.onClosed();
-						});
-						break;
-					case 'center':
-						if(!opts.autoHide)
-							opts.TimeShown = 0;
-						this.div.stop(true, true).delay(opts.TimeShown).animate({
-							opacity:0
-						},opts.HideTimeEffect,function(){
-							$(this).remove();
-							if(opts.ShowOverlay && overlay.length > 0)
-								overlay.remove();
-								if(opts.onClosed) opts.onClosed();
-						});
-						break;
-					case 'bottom' :
-						if(!opts.autoHide)
-							opts.TimeShown = 0;
-						this.div.stop(true, true).delay(opts.TimeShown).animate({
-							top: posTop+opts.LongTrip,
-							opacity:0
-						},opts.HideTimeEffect,function(){
-							$(this).remove();
-							if(opts.ShowOverlay && overlay.length > 0)
-								overlay.remove();
-								if(opts.onClosed) opts.onClosed();
-						});
-						break;
-				}
-		}
-	};
-
-	/** Init method **/
-	jNotify = function(msg,options) {
-	    var jnotify = $.extend({}, $.jNotify);
-		return jnotify.init(msg,options,'jNotify');
-	};
-
-	jNotifyImage = function(msg,options) {
-	    var jnotify = $.extend({}, $.jNotify);
-		return jnotify.init(msg,options,'jNotifyImage');
-	};
-	
-	jSuccess = function(msg,options) {
-	    var jnotify = $.extend({}, $.jNotify);
-		return jnotify.init(msg,options,'jSuccess');
-	};
-
-	jError = function(msg,options) {
-	    var jnotify = $.extend({}, $.jNotify);
-		return jnotify.init(msg,options,'jError');
-	};
+/************************************************************************
+*************************************************************************
+@Name :       	jNotify - jQuery Plugin
+@Revison :    	2.1
+@Date : 		01/2011
+@Author:     	ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr)
+@Support:    	FF, IE7, IE8, MAC Firefox, MAC Safari
+@License :		Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
+
+**************************************************************************
+*************************************************************************/
+(function($){
+
+	$.jNotify = {
+	    sequence : 0,
+
+		defaults: {
+			/** VARS - OPTIONS **/
+			autoHide : true,				// Notify box auto-close after 'TimeShown' ms ?
+			clickOverlay : false,			// if 'clickOverlay' = false, close the notice box on the overlay click ?
+			MinWidth : 200,					// min-width CSS property
+			TimeShown : 1500, 				// Box shown during 'TimeShown' ms
+			ShowTimeEffect : 200, 			// duration of the Show Effect
+			HideTimeEffect : 200, 			// duration of the Hide effect
+			LongTrip : 15,					// in pixel, length of the move effect when show and hide
+			HorizontalPosition : 'right', 	// left, center, right
+			VerticalPosition : 'bottom',	 // top, center, bottom
+			ShowOverlay : true,				// show overlay behind the notice ?
+			ColorOverlay : '#000',			// color of the overlay
+			OpacityOverlay : 0.3,			// opacity of the overlay
+			
+			/** METHODS - OPTIONS **/
+			onClosed : null,
+			onCompleted : null
+		},
+
+        overlay : [], // Empty overlay
+        div : null, //Empty div
+
+		/*****************/
+		/** Init Method **/
+		/*****************/
+		init:function(msg, options, id) {
+			this.opts = $.extend({}, this.defaults, options);
+
+			/** Box **/
+			if($("#"+id).length == 0)
+				this.div = this._construct(id, msg);
+
+			// Width of the Brower
+			WidthDoc = parseInt($(window).width());
+			HeightDoc = parseInt($(window).height());
+
+			// Scroll Position
+			ScrollTop = parseInt($(window).scrollTop());
+			ScrollLeft = parseInt($(window).scrollLeft());
+
+			// Position of the jNotify Box
+			posTop = this.vPos(this.opts.VerticalPosition);
+			posLeft = this.hPos(this.opts.HorizontalPosition);
+
+			// Show the jNotify Box
+			if(this.opts.ShowOverlay && this.overlay.length == 0)
+				this._showOverlay(this.div);
+
+			this._show(msg);
+			return this;
+		},
+
+		/*******************/
+		/** Construct DOM **/
+		/*******************/
+		_construct:function(id, msg) {
+			this.div =
+			$('<div id="'+id+'"/>')
+			.css({opacity : 0,minWidth : this.opts.MinWidth})
+			.html(msg)
+			.appendTo('body');
+			return this.div;
+		},
+
+		/**********************/
+		/** Postions Methods **/
+		/**********************/
+		vPos:function(pos) {
+			switch(pos) {
+				case 'top':
+					var vPos = ScrollTop + parseInt(this.div.outerHeight(true)/2);
+					break;
+				case 'center':
+					var vPos = ScrollTop + (HeightDoc/2) - (parseInt(this.div.outerHeight(true))/2);
+					break;
+				case 'bottom':
+					var vPos = ScrollTop + HeightDoc - parseInt(this.div.outerHeight(true));
+					break;
+			}
+			return vPos;
+		},
+
+		hPos:function(pos) {
+			switch(pos) {
+				case 'left':
+					var hPos = ScrollLeft;
+					break;
+				case 'center':
+					var hPos = ScrollLeft + (WidthDoc/2) - (parseInt(this.div.outerWidth(true))/2);
+					break;
+				case 'right':
+					var hPos = ScrollLeft + WidthDoc - parseInt(this.div.outerWidth(true));
+					break;
+			}
+			return hPos;
+		},
+
+		/*********************/
+		/** Show Div Method **/
+		/*********************/
+		_show:function(msg) {
+		    var opts = this.opts;
+			this.div
+			.css({
+				top: posTop,
+				left : posLeft
+			});
+			switch (opts.VerticalPosition) {
+				case 'top':
+					this.div.animate({
+						top: posTop + opts.LongTrip,
+						opacity:1
+					},opts.ShowTimeEffect,function(){
+						if(opts.onCompleted) opts.onCompleted();
+					});
+					if(opts.autoHide)
+						this._close();
+					else
+						this.div.css('cursor','pointer').click(function(e){
+							// $.jNotify._close();
+						});
+					break;
+				case 'center':
+					this.div.animate({
+						opacity:1
+					},opts.ShowTimeEffect,function(){
+						if(opts.onCompleted) opts.onCompleted();
+					});
+					if(opts.autoHide)
+						this._close();
+					else
+						this.div.css('cursor','pointer').click(function(e){
+							// $.jNotify._close();
+						});
+					break;
+				case 'bottom' :
+					this.div.animate({
+						top: posTop - opts.LongTrip,
+						opacity:1
+					},opts.ShowTimeEffect,function(){
+						if(opts.onCompleted) opts.onCompleted();
+					});
+					if(opts.autoHide)
+						this._close();
+					else
+						this.div.css('cursor','pointer').click(function(e){
+							// $.jNotify._close();
+						});
+					break;
+			}
+		},
+
+		_showOverlay:function(el){
+		    var opts = this.opts;
+			this.overlay =
+			$('<div>')
+			.css({
+				backgroundColor : opts.ColorOverlay,
+				opacity: opts.OpacityOverlay
+			})
+			.appendTo('body')
+			.show();
+
+			if(opts.clickOverlay)
+			this.overlay.click(function(e){
+				e.preventDefault();
+				opts.TimeShown = 0;
+				// $.jNotify._close();
+			});
+		},
+
+
+		_close:function(){
+	    var opts = this.opts;
+		var overlay = this.overlay;
+				switch (opts.VerticalPosition) {
+					case 'top':
+						if(!opts.autoHide)
+							opts.TimeShown = 0;
+						this.div.stop(true, true).delay(opts.TimeShown).animate({
+							top: posTop-opts.LongTrip,
+							opacity:0
+						},opts.HideTimeEffect,function(){
+							$(this).remove();
+							if(opts.ShowOverlay && overlay.length > 0)
+								overlay.remove();
+								if(opts.onClosed) opts.onClosed();
+						});
+						break;
+					case 'center':
+						if(!opts.autoHide)
+							opts.TimeShown = 0;
+						this.div.stop(true, true).delay(opts.TimeShown).animate({
+							opacity:0
+						},opts.HideTimeEffect,function(){
+							$(this).remove();
+							if(opts.ShowOverlay && overlay.length > 0)
+								overlay.remove();
+								if(opts.onClosed) opts.onClosed();
+						});
+						break;
+					case 'bottom' :
+						if(!opts.autoHide)
+							opts.TimeShown = 0;
+						this.div.stop(true, true).delay(opts.TimeShown).animate({
+							top: posTop+opts.LongTrip,
+							opacity:0
+						},opts.HideTimeEffect,function(){
+							$(this).remove();
+							if(opts.ShowOverlay && overlay.length > 0)
+								overlay.remove();
+								if(opts.onClosed) opts.onClosed();
+						});
+						break;
+				}
+		}
+	};
+
+	/** Init method **/
+	jNotify = function(msg,options) {
+	    var jnotify = $.extend({}, $.jNotify);
+		return jnotify.init(msg,options,'jNotify');
+	};
+
+	jNotifyImage = function(msg,options) {
+	    var jnotify = $.extend({}, $.jNotify);
+		return jnotify.init(msg,options,'jNotifyImage');
+	};
+	
+	jSuccess = function(msg,options) {
+	    var jnotify = $.extend({}, $.jNotify);
+		return jnotify.init(msg,options,'jSuccess');
+	};
+
+	jError = function(msg,options) {
+	    var jnotify = $.extend({}, $.jNotify);
+		return jnotify.init(msg,options,'jError');
+	};
 })(jQuery);
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js
similarity index 99%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js
index 71e9b13ba366aaa5f38c4f7ef30c79cb0ee8becc..ad367b1aa4debed388d3e9265d0196a0cec85a0f 100755
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js
@@ -1,3 +1,3 @@
-/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
+/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */
+
 (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sq",[],function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Të lutem fshi "+t+" karakter";return t!=1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Të lutem shkruaj "+t+" ose më shumë karaktere";return n},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var t="Mund të zgjedhësh vetëm "+e.maximum+" element";return e.maximum!=1&&(t+="e"),t},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css
similarity index 98%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css
index 742b3651eb5070986fce54b66811237c38447759..9e140476b32cf8957654a208a07b4981679e8bb0 100755
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css
@@ -229,160 +229,160 @@
 .tooltipster-update-scale {
 	animation: tooltipster-scaling 600ms;
 }
-
-/**
- * DEFAULT STYLE OF THE SIDETIP PLUGIN
- * 
- * All styles are "namespaced" with .tooltipster-sidetip to prevent
- * conflicts between plugins.
- */
-
-/* .tooltipster-box */
-
-.tooltipster-sidetip .tooltipster-box {
-	background: #565656;
-	border: 2px solid black;
-	border-radius: 4px;
-}
-
-.tooltipster-sidetip.tooltipster-bottom .tooltipster-box {
-	margin-top: 8px;
-}
-
-.tooltipster-sidetip.tooltipster-left .tooltipster-box {
-	margin-right: 8px;
-}
-
-.tooltipster-sidetip.tooltipster-right .tooltipster-box {
-	margin-left: 8px;
-}
-
-.tooltipster-sidetip.tooltipster-top .tooltipster-box {
-	margin-bottom: 8px;
-}
-
-/* .tooltipster-content */
-
-.tooltipster-sidetip .tooltipster-content {
-	color: white;
-	line-height: 18px;
-	padding: 6px 14px;
-}
-
-/* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that
-corresponds to the arrow we want to display */
-
-.tooltipster-sidetip .tooltipster-arrow {
-	overflow: hidden;
-	position: absolute;
-}
-
-.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow {
-	height: 10px;
-	/* half the width, for centering */
-	margin-left: -10px;
-	top: 0;
-	width: 20px;
-}
-
-.tooltipster-sidetip.tooltipster-left .tooltipster-arrow {
-	height: 20px;
-	margin-top: -10px;
-	right: 0;
-	/* top 0 to keep the arrow from overflowing .tooltipster-base when it has not
-	been positioned yet */
-	top: 0;
-	width: 10px;
-}
-
-.tooltipster-sidetip.tooltipster-right .tooltipster-arrow {
-	height: 20px;
-	margin-top: -10px;
-	left: 0;
-	/* same as .tooltipster-left .tooltipster-arrow */
-	top: 0;
-	width: 10px;
-}
-
-.tooltipster-sidetip.tooltipster-top .tooltipster-arrow {
-	bottom: 0;
-	height: 10px;
-	margin-left: -10px;
-	width: 20px;
-}
-
-/* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */
-
-.tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border {
-	height: 0;
-	position: absolute;
-	width: 0;
-}
-
-/* .tooltipster-arrow-background */
-
-.tooltipster-sidetip .tooltipster-arrow-background {
-	border: 10px solid transparent;
-}
-
-.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background {
-	border-bottom-color: #565656;
-	left: 0px;
-	top: 3px;
-}
-
-.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background {
-	border-left-color: #565656;
-	left: -3px;
-	top: 0px;
-}
-
-.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background {
-	border-right-color: #565656;
-	left: 3px;
-	top: 0px;
-}
-
-.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {
-	border-top-color: #565656;
-	left: 0px;
-	top: -3px;
-}
-
-/* .tooltipster-arrow-border */
-
-.tooltipster-sidetip .tooltipster-arrow-border {
-	border: 10px solid transparent;
-	left: 0;
-	top: 0;
-}
-
-.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border {
-	border-bottom-color: black;
-}
-
-.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border {
-	border-left-color: black;
-}
-
-.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border {
-	border-right-color: black;
-}
-
-.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border {
-	border-top-color: black;
-}
-
-/* tooltipster-arrow-uncropped */
-
-.tooltipster-sidetip .tooltipster-arrow-uncropped {
-	position: relative;
-}
-
-.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped {
-	top: -10px;
-}
-
-.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped {
-	left: -10px;
-}
+
+/**
+ * DEFAULT STYLE OF THE SIDETIP PLUGIN
+ * 
+ * All styles are "namespaced" with .tooltipster-sidetip to prevent
+ * conflicts between plugins.
+ */
+
+/* .tooltipster-box */
+
+.tooltipster-sidetip .tooltipster-box {
+	background: #565656;
+	border: 2px solid black;
+	border-radius: 4px;
+}
+
+.tooltipster-sidetip.tooltipster-bottom .tooltipster-box {
+	margin-top: 8px;
+}
+
+.tooltipster-sidetip.tooltipster-left .tooltipster-box {
+	margin-right: 8px;
+}
+
+.tooltipster-sidetip.tooltipster-right .tooltipster-box {
+	margin-left: 8px;
+}
+
+.tooltipster-sidetip.tooltipster-top .tooltipster-box {
+	margin-bottom: 8px;
+}
+
+/* .tooltipster-content */
+
+.tooltipster-sidetip .tooltipster-content {
+	color: white;
+	line-height: 18px;
+	padding: 6px 14px;
+}
+
+/* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that
+corresponds to the arrow we want to display */
+
+.tooltipster-sidetip .tooltipster-arrow {
+	overflow: hidden;
+	position: absolute;
+}
+
+.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow {
+	height: 10px;
+	/* half the width, for centering */
+	margin-left: -10px;
+	top: 0;
+	width: 20px;
+}
+
+.tooltipster-sidetip.tooltipster-left .tooltipster-arrow {
+	height: 20px;
+	margin-top: -10px;
+	right: 0;
+	/* top 0 to keep the arrow from overflowing .tooltipster-base when it has not
+	been positioned yet */
+	top: 0;
+	width: 10px;
+}
+
+.tooltipster-sidetip.tooltipster-right .tooltipster-arrow {
+	height: 20px;
+	margin-top: -10px;
+	left: 0;
+	/* same as .tooltipster-left .tooltipster-arrow */
+	top: 0;
+	width: 10px;
+}
+
+.tooltipster-sidetip.tooltipster-top .tooltipster-arrow {
+	bottom: 0;
+	height: 10px;
+	margin-left: -10px;
+	width: 20px;
+}
+
+/* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */
+
+.tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border {
+	height: 0;
+	position: absolute;
+	width: 0;
+}
+
+/* .tooltipster-arrow-background */
+
+.tooltipster-sidetip .tooltipster-arrow-background {
+	border: 10px solid transparent;
+}
+
+.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background {
+	border-bottom-color: #565656;
+	left: 0px;
+	top: 3px;
+}
+
+.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background {
+	border-left-color: #565656;
+	left: -3px;
+	top: 0px;
+}
+
+.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background {
+	border-right-color: #565656;
+	left: 3px;
+	top: 0px;
+}
+
+.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {
+	border-top-color: #565656;
+	left: 0px;
+	top: -3px;
+}
+
+/* .tooltipster-arrow-border */
+
+.tooltipster-sidetip .tooltipster-arrow-border {
+	border: 10px solid transparent;
+	left: 0;
+	top: 0;
+}
+
+.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border {
+	border-bottom-color: black;
+}
+
+.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border {
+	border-left-color: black;
+}
+
+.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border {
+	border-right-color: black;
+}
+
+.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border {
+	border-top-color: black;
+}
+
+/* tooltipster-arrow-uncropped */
+
+.tooltipster-sidetip .tooltipster-arrow-uncropped {
+	position: relative;
+}
+
+.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped {
+	top: -10px;
+}
+
+.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped {
+	left: -10px;
+}
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js
similarity index 99%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js
index 954aa239063d66e2700aaaeab4c72d94ccad171f..cf1758ee700c9c3266123bdc716d200d57a3871e 100755
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js
@@ -1,9 +1,9 @@
-/**
- * tooltipster http://iamceege.github.io/tooltipster/
- * A rockin' custom tooltip jQuery plugin
- * Developed by Caleb Jacob and Louis Ameline
- * MIT license
- */
+/**
+ * tooltipster http://iamceege.github.io/tooltipster/
+ * A rockin' custom tooltip jQuery plugin
+ * Developed by Caleb Jacob and Louis Ameline
+ * MIT license
+ */
 (function (root, factory) {
   if (typeof define === 'function' && define.amd) {
     // AMD. Register as an anonymous module unless amdModuleId is set
@@ -3340,7 +3340,7 @@ function transitionSupport() {
 
 // we'll return jQuery for plugins not to have to declare it as a dependency,
 // but it's done by a build task since it should be included only once at the
-// end when we concatenate the main file with a plugin
+// end when we concatenate the main file with a plugin
 // sideTip is Tooltipster's default plugin.
 // This file will be UMDified by a build task.
 
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js
similarity index 99%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js
index a37a1c9af9b89130d925e9d2b23512492236a156..ba82583fb09b456db08d2dfe8855a4537883ac8b 100755
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js
@@ -1,9 +1,9 @@
-/**
- * tooltipster http://iamceege.github.io/tooltipster/
- * A rockin' custom tooltip jQuery plugin
- * Developed by Caleb Jacob and Louis Ameline
- * MIT license
- */
+/**
+ * tooltipster http://iamceege.github.io/tooltipster/
+ * A rockin' custom tooltip jQuery plugin
+ * Developed by Caleb Jacob and Louis Ameline
+ * MIT license
+ */
 (function (root, factory) {
   if (typeof define === 'function' && define.amd) {
     // AMD. Register as an anonymous module unless amdModuleId is set
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js
similarity index 99%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js
index b1c4edda98b1a5013886e0819c62c759237c88ab..1390398d1049b6dc019cd17deea3380bbe231608 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js
@@ -1,48 +1,48 @@
-
-(function($){$.tsv={version:"0.96-git",options:{formatValue:null,parseValue:null,arrayToObject:null,objectToArray:null,includeHeader:true,stripHeader:false,startRownum:0,___defaults_applied:true,extend:$.extend,syntax:{parserKernel:tsvParserKernel,lexer:/[\t\r\n]|[^\t\r\n]+/g,valueSeparator:"\t",rowSeparator:"\n",formatterKernel:simpleFormatterKernel}},toArray:function toArray(line,options,rownum){var opts=tsvOptions(options);var result=parser(line,true,opts,rownum);switch(result.length){case 0:return[];case 1:return result[0];default:throw new Error("Parser returned too many values.");}},fromArray:function fromArray(array,options,rownum){var opts=tsvOptions(options);opts.includeHeader=(!options||options.includesHeader===undefined)?false:options.includesHeader;return $.tsv.fromArrays([array],opts,rownum);},toArrays:function toArrays(tsv,options){var opts=tsvOptions(options);var array=parser(tsv,false,opts);if(opts.stripHeader){array[-1]=array.shift();}
-return array;},fromArrays:function fromArrays(array,options,startRownum){var opts=tsvOptions(options);var rownum=startRownum||opts.startRownum||0;var syntax=opts.syntax;var cols=tsvColumns(opts,array[0]);syntax.formatterKernel("begin");function doHeaderValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(syntax,col),-1);}
-if(cols&&opts.includeHeader){syntax.formatterKernel("beginHeader");cols.forEach(doHeaderValue);syntax.formatterKernel("endHeader");}
-var header_offset=0;function doRow(rowData,rowIndex){if(rowData===cols){header_offset=-1;}else{var row=rownum+rowIndex+header_offset;function doValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(opts,col),row);}
-syntax.formatterKernel("beginRow");rowData.forEach(doValue);syntax.formatterKernel("endRow");}}
-array.forEach(doRow);return syntax.formatterKernel("end");},arrayToObject:function arrayToObject(row,options,rownum){var opts=tsvOptions(options);rownum=rownum||0;var columns=tsvColumns(opts,row);if(opts.arrayToObject){return opts.arrayToObject(row,opts,rownum);}
-var dict={};for(var j=0;j<columns.length;j++){dict[columns[j]]=row[j];}
-return dict;},arraysToObjects:function arraysToObjects(array,options){var opts=tsvOptions(options);if(!opts.columns){opts.columns=array.shift();}
-var rownum=opts.startRownum||0;return array.map(function convert(row){return $.tsv.arrayToObject(row,opts,rownum++);});},toObjects:function toObjects(tsv,options){var opts=tsvOptions(options);return $.tsv.arraysToObjects($.tsv.toArrays(tsv,opts),opts);},objectToArray:function objectToArray(obj,options,rownum){var opts=tsvOptions(options);var columns=tsvColumns(opts,obj);rownum=rownum||0;if(opts.objectToArray){return opts.objectToArray(obj,opts,rownum);}
-var row=[];for(var j=0;j<columns.length;j++){row.push(obj[columns[j]]);}
-return row;},objectsToArrays:function objectsToArrays(array,options){var opts=tsvOptions(options);var rownum=options.startRownum;var result=array.map(function convert(obj){return $.tsv.objectToArray(obj,opts,rownum++);});return result;},fromObject:function fromObject(object,options){var opts=tsvOptions(options);return $.tsv.fromArray($.tsv.objectToArray(object,opts),opts);},fromObjects:function fromObjects(array,options){var opts=tsvOptions(options);var first=array.length?array[0]:{};tsvColumns(opts,first);return $.tsv.fromArrays($.tsv.objectsToArrays(array,opts),opts);},extend:$.extend,test:{formatValue:formatValue,parseValue:parseValue}};function parseValue(value,options,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.parseValue){return opts.parseValue(value,opts,colnum,colname,rownum);}
-return value;}
-function formatValue(value,options,rownum,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.formatValue){return opts.formatValue(value,opts,colnum,colname,rownum);}
-return String(value);}
-function copyOptions(options){return $.extend({__copy:true},options);}
-function tsvOptions(options){if(options){if(options.__defaults_applied){return options;}
-return $.extend(copyOptions($.tsv.options),options);}
-return copyOptions($.tsv.options);}
-function tsvColumn(options,index){var opts=tsvOptions(options);return String(opts.columns?opts.columns[index]:index);}
-function tsvColumns(options,top){if(options.columns){return options.columns;}else{var cols=Object.keys(top||{}).sort();options.columns=cols;return cols;}}
-function parser(str,single,options,startRow){var opts=tsvOptions(options);var colIdx=0;var rowIdx=startRow||0;function endOfValue(value){value=(value!==undefined)?value:this.value;value=parseValue(value,opts,colIdx,tsvColumn(opts,colIdx),rowIdx);this.row.push(value);this.value="";colIdx++;}
-function endOfRow(row){row=(row!==undefined)?row:this.row;this.array.push(row);this.row=[];if(this.single){this.array=this.endOfTable();}
-rowIdx++;colIdx=0;}
-function endOfHeader(headers){this.headers=(headers||this.headers);}
-function endOfTable(result){result=(result!==undefined)?result:this.array;if(!this.done){this.done=true;if(opts.finalize){return opts.finalize.call(this,result);}}
-return result;}
-var state={options:opts,single:single,state:-1,value:"",row:[],array:[],headers:[],done:false,error:false,endOfValue:endOfValue,endOfRow:endOfRow,endOfTable:endOfTable,endOfHeader:endOfHeader};if(opts.syntax.initializeParser){opts.syntax.initializeParser.call(state,state);}
-opts.syntax.lexer.lastIndex=0;str.replace(opts.syntax.lexer,function transition(m0,m1){if(!state.done){opts.syntax.parserKernel.apply(state,arguments);}
-if(state.error){throw new Error((typeof error==="string")?state.error:"parsing error");}
-return"";});if(!state.done){opts.syntax.parserKernel.apply(state,[]);}
-return state.endOfTable();}
-function tsvParserKernel(m){switch(m){case"\n":case undefined:if(!this.valueSeen){this.endOfValue("");}
-this.endOfRow();this.valueSeen=false;break;case"\r":break;case"\t":if(!this.valueSeen){this.endOfValue("");}
-this.valueSeen=false;break;default:this.endOfValue(m);this.valueSeen=true;}}
-function simpleFormatterKernel(event,param){switch(event){case"begin":this.valueSeen=false;this.rowSeen=false;this.output=[];break;case"beginRow":case"beginHeader":if(this.rowSeen){this.output.push(this.rowSeparator);}
-this.valueSeen=false;break;case"value":if(this.valueSeen){this.output.push(this.valueSeparator);}
-this.output.push(param);this.valueSeen=true;break;case"endRow":case"endHeader":this.rowSeen=true;break;case"end":var result=this.output.join("");delete this.output;return result;default:throw new Error("Unknown formatter event: "+event);}}
-$.tsv.parseRow=$.tsv.toArray;$.tsv.parseRows=$.tsv.toArrays;$.tsv.parseObject=$.tsv.toObject;$.tsv.parseObjects=$.tsv.toObjects;$.tsv.formatRow=$.tsv.fromArray;$.tsv.formatRows=$.tsv.fromArrays;$.tsv.formatObject=$.tsv.fromObject;$.tsv.formatObjects=$.tsv.fromObjects;if(!$.csv){$.csv=$.tsv.extend({},{toArrays:function csvToArrays(csv,options){var opts=tsvOptions(options);var state=0;var value="";var result=[];var row=[];function endOfCell(){row.push(value);value="";state=0;}
-function endOfRow(){row.push(value);result.push(row);row=[];state=0;}
-s.replace(/(\"|,|\n|\r|[^\",\r\n]+)/gm,function(m0,m1){switch(state){case 0:if(m1==="\""){state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(/^\r$/.test(m1)){}else{if(value){throw new Error("Internal error: we have a value already.");}
-value=m1;state=3;}
-break;case 1:if(m1==="\""){state=2;}else if((m1===",")||(m1==="\n")||(m1==="\r")){value+=m1;state=1;}else{value+=m1;state=1;}
-break;case 2:if(m1==="\""){value+=m1;state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Illegal state");}
-break;case 3:if(m1==="\""){throw new Error("Unquoted delimiter in string");}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Two values, no separator?");}
-break;default:throw new Error("Unknown state");}
-return"";});if(state!=0){endOfRow();}
+
+(function($){$.tsv={version:"0.96-git",options:{formatValue:null,parseValue:null,arrayToObject:null,objectToArray:null,includeHeader:true,stripHeader:false,startRownum:0,___defaults_applied:true,extend:$.extend,syntax:{parserKernel:tsvParserKernel,lexer:/[\t\r\n]|[^\t\r\n]+/g,valueSeparator:"\t",rowSeparator:"\n",formatterKernel:simpleFormatterKernel}},toArray:function toArray(line,options,rownum){var opts=tsvOptions(options);var result=parser(line,true,opts,rownum);switch(result.length){case 0:return[];case 1:return result[0];default:throw new Error("Parser returned too many values.");}},fromArray:function fromArray(array,options,rownum){var opts=tsvOptions(options);opts.includeHeader=(!options||options.includesHeader===undefined)?false:options.includesHeader;return $.tsv.fromArrays([array],opts,rownum);},toArrays:function toArrays(tsv,options){var opts=tsvOptions(options);var array=parser(tsv,false,opts);if(opts.stripHeader){array[-1]=array.shift();}
+return array;},fromArrays:function fromArrays(array,options,startRownum){var opts=tsvOptions(options);var rownum=startRownum||opts.startRownum||0;var syntax=opts.syntax;var cols=tsvColumns(opts,array[0]);syntax.formatterKernel("begin");function doHeaderValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(syntax,col),-1);}
+if(cols&&opts.includeHeader){syntax.formatterKernel("beginHeader");cols.forEach(doHeaderValue);syntax.formatterKernel("endHeader");}
+var header_offset=0;function doRow(rowData,rowIndex){if(rowData===cols){header_offset=-1;}else{var row=rownum+rowIndex+header_offset;function doValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(opts,col),row);}
+syntax.formatterKernel("beginRow");rowData.forEach(doValue);syntax.formatterKernel("endRow");}}
+array.forEach(doRow);return syntax.formatterKernel("end");},arrayToObject:function arrayToObject(row,options,rownum){var opts=tsvOptions(options);rownum=rownum||0;var columns=tsvColumns(opts,row);if(opts.arrayToObject){return opts.arrayToObject(row,opts,rownum);}
+var dict={};for(var j=0;j<columns.length;j++){dict[columns[j]]=row[j];}
+return dict;},arraysToObjects:function arraysToObjects(array,options){var opts=tsvOptions(options);if(!opts.columns){opts.columns=array.shift();}
+var rownum=opts.startRownum||0;return array.map(function convert(row){return $.tsv.arrayToObject(row,opts,rownum++);});},toObjects:function toObjects(tsv,options){var opts=tsvOptions(options);return $.tsv.arraysToObjects($.tsv.toArrays(tsv,opts),opts);},objectToArray:function objectToArray(obj,options,rownum){var opts=tsvOptions(options);var columns=tsvColumns(opts,obj);rownum=rownum||0;if(opts.objectToArray){return opts.objectToArray(obj,opts,rownum);}
+var row=[];for(var j=0;j<columns.length;j++){row.push(obj[columns[j]]);}
+return row;},objectsToArrays:function objectsToArrays(array,options){var opts=tsvOptions(options);var rownum=options.startRownum;var result=array.map(function convert(obj){return $.tsv.objectToArray(obj,opts,rownum++);});return result;},fromObject:function fromObject(object,options){var opts=tsvOptions(options);return $.tsv.fromArray($.tsv.objectToArray(object,opts),opts);},fromObjects:function fromObjects(array,options){var opts=tsvOptions(options);var first=array.length?array[0]:{};tsvColumns(opts,first);return $.tsv.fromArrays($.tsv.objectsToArrays(array,opts),opts);},extend:$.extend,test:{formatValue:formatValue,parseValue:parseValue}};function parseValue(value,options,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.parseValue){return opts.parseValue(value,opts,colnum,colname,rownum);}
+return value;}
+function formatValue(value,options,rownum,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.formatValue){return opts.formatValue(value,opts,colnum,colname,rownum);}
+return String(value);}
+function copyOptions(options){return $.extend({__copy:true},options);}
+function tsvOptions(options){if(options){if(options.__defaults_applied){return options;}
+return $.extend(copyOptions($.tsv.options),options);}
+return copyOptions($.tsv.options);}
+function tsvColumn(options,index){var opts=tsvOptions(options);return String(opts.columns?opts.columns[index]:index);}
+function tsvColumns(options,top){if(options.columns){return options.columns;}else{var cols=Object.keys(top||{}).sort();options.columns=cols;return cols;}}
+function parser(str,single,options,startRow){var opts=tsvOptions(options);var colIdx=0;var rowIdx=startRow||0;function endOfValue(value){value=(value!==undefined)?value:this.value;value=parseValue(value,opts,colIdx,tsvColumn(opts,colIdx),rowIdx);this.row.push(value);this.value="";colIdx++;}
+function endOfRow(row){row=(row!==undefined)?row:this.row;this.array.push(row);this.row=[];if(this.single){this.array=this.endOfTable();}
+rowIdx++;colIdx=0;}
+function endOfHeader(headers){this.headers=(headers||this.headers);}
+function endOfTable(result){result=(result!==undefined)?result:this.array;if(!this.done){this.done=true;if(opts.finalize){return opts.finalize.call(this,result);}}
+return result;}
+var state={options:opts,single:single,state:-1,value:"",row:[],array:[],headers:[],done:false,error:false,endOfValue:endOfValue,endOfRow:endOfRow,endOfTable:endOfTable,endOfHeader:endOfHeader};if(opts.syntax.initializeParser){opts.syntax.initializeParser.call(state,state);}
+opts.syntax.lexer.lastIndex=0;str.replace(opts.syntax.lexer,function transition(m0,m1){if(!state.done){opts.syntax.parserKernel.apply(state,arguments);}
+if(state.error){throw new Error((typeof error==="string")?state.error:"parsing error");}
+return"";});if(!state.done){opts.syntax.parserKernel.apply(state,[]);}
+return state.endOfTable();}
+function tsvParserKernel(m){switch(m){case"\n":case undefined:if(!this.valueSeen){this.endOfValue("");}
+this.endOfRow();this.valueSeen=false;break;case"\r":break;case"\t":if(!this.valueSeen){this.endOfValue("");}
+this.valueSeen=false;break;default:this.endOfValue(m);this.valueSeen=true;}}
+function simpleFormatterKernel(event,param){switch(event){case"begin":this.valueSeen=false;this.rowSeen=false;this.output=[];break;case"beginRow":case"beginHeader":if(this.rowSeen){this.output.push(this.rowSeparator);}
+this.valueSeen=false;break;case"value":if(this.valueSeen){this.output.push(this.valueSeparator);}
+this.output.push(param);this.valueSeen=true;break;case"endRow":case"endHeader":this.rowSeen=true;break;case"end":var result=this.output.join("");delete this.output;return result;default:throw new Error("Unknown formatter event: "+event);}}
+$.tsv.parseRow=$.tsv.toArray;$.tsv.parseRows=$.tsv.toArrays;$.tsv.parseObject=$.tsv.toObject;$.tsv.parseObjects=$.tsv.toObjects;$.tsv.formatRow=$.tsv.fromArray;$.tsv.formatRows=$.tsv.fromArrays;$.tsv.formatObject=$.tsv.fromObject;$.tsv.formatObjects=$.tsv.fromObjects;if(!$.csv){$.csv=$.tsv.extend({},{toArrays:function csvToArrays(csv,options){var opts=tsvOptions(options);var state=0;var value="";var result=[];var row=[];function endOfCell(){row.push(value);value="";state=0;}
+function endOfRow(){row.push(value);result.push(row);row=[];state=0;}
+s.replace(/(\"|,|\n|\r|[^\",\r\n]+)/gm,function(m0,m1){switch(state){case 0:if(m1==="\""){state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(/^\r$/.test(m1)){}else{if(value){throw new Error("Internal error: we have a value already.");}
+value=m1;state=3;}
+break;case 1:if(m1==="\""){state=2;}else if((m1===",")||(m1==="\n")||(m1==="\r")){value+=m1;state=1;}else{value+=m1;state=1;}
+break;case 2:if(m1==="\""){value+=m1;state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Illegal state");}
+break;case 3:if(m1==="\""){throw new Error("Unquoted delimiter in string");}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Two values, no separator?");}
+break;default:throw new Error("Unknown state");}
+return"";});if(state!=0){endOfRow();}
 return result;}});}})(jQuery);
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/jquery/js/jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js
similarity index 99%
rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/jquery/js/jquery.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js
index 16bb60874a82ee4b9dc89421e4b851a53ce30cab..0f60b7bd0d9c395e1748cc962810d2dee9bb9fc2 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/jquery/js/jquery.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js
@@ -1,5 +1,5 @@
-/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
-
-return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
-return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.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(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
+/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
+
+return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
+return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.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(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css
similarity index 99%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css
index 5a438518d1142081ff28943b71f439cffe41ea15..f5a52c78569f293096f7b0843a24f573f0a4d265 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css
@@ -1,239 +1,239 @@
-
-/**
- * (c) jSuites Javascript Web Components
- *
- * Author: Paul Hodel <paul.hodel@gmail.com>
- * Website: https://bossanova.uk/jsuites/
- * Description: Create amazing web based applications.
- *
- * MIT License
- *
- */
-
-/** General **/
-
-.jdragging {
-    opacity:0.2;
-    filter: alpha(opacity=20);
-}
-
-.jupload {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7emlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMTItMzFUMjI6NDM6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDEtMDFUMjA6MDM6MjNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0wMVQyMDowMzoyM1o8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowZmM3MWQxMi04NTBlLWNhNDUtOTMxOC1kYWIyOWFmYTJkODI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMTItMzFUMjI6NDM6MzBaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk2MTA5Y2Y0LTEwM2ItNTc0Ny1hZWE3LWI5NDMxOWY0NWFkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wMS0wMVQyMDowMjoyMFo8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTAxVDIwOjAzOjIzWjwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tc8AsgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAGjUlEQVR42uycW2xURRjHf91SoEIBUQpYI8VSVBDExniLERNUJBpQVEDFqE1AEYkX0JCC0YjgBdEYDOIFeVEEFRBilKBogg+KiQoV5Q6Khla8lrZRBLo+zLdazs7ZM2d3zsJu55/sy3dmz5797Vy+y8wWxONxnNJXzCFwAB1AB9ABdHIAHUAH0AF0Cq929fX1ufbMA4HLgSqgHOgPdJJrfwPbgb3AJuBD4KsoH6agrq4uF6CVAncC4wVYGP0ALAVeAva0NYDFwOPARKBzhvc6ArwG1AC/toU5cDSwFXjAAjyAQmACsAOozneATwLLgdMM2/8jLxN1AxYBC/J1CL8F3BjQZhOwCqgFvgd+AuJAT6ACOBMYCVwUcJ91siDlDcC3gRtSXF8IzAe+M7xfOXC3TAOFPm3WA0NzAeDp8oUGASeKrUF60R6Zn6an6CnTgI1pfnYFMAcY43N9GTDueAR4sQylK8RvS0dzgYcsPc9U4Bmfa9XA4uMF4GXypUdkeJ8Z0nNs6hbgdZ9rPcK6OLZX4XbisH5iAd68COABvAHc63NtwbHsgf2B94BKC/faAFwY8Zy8ErhWYx8EbM42wAuAj4ETAtptllh1N9AiC0t/YLCnXV9xT6JUJ6AOKPHYX5HIJ2sAK4BvgQ4+17fJ5LxKIgudzgBGySS/3sAPtKWZwCyPrQk4ydQxtwFwH9BbY4/LIvBEyF5RIF8iG+oC/K7xEUfLEI98EVnsA28/MCQkPIDmLMIDOCDOu1fXZGMVrgJu19gbZCKuJTek62mV2QD4XIoFZT+5o10a2ylRA6wCLtXYp8uikUv6Webr1uoOdIwS4HiNbS/wFLmnZuCgx9Y+hVdhBeBwjW1+BF9uFvBqFiDGDW3a0Cus+gADPLYWVB7PpiaJn5YYZjMigles6W2NskJH0gN1RZ1EJcyWJnvi0hpUbSQK9dRwaDGIqtIGeLbG9o3lnveCT2YmCogVPqvwdpOIKB2A7TU2W+XCiQEZkSggTvGxl8m0NNc2wDKNrcXCF5mASoUFaQYw2xK8Iv4vyvtpmsTxGQHsLPPQLp9frI+FYftyiPY1liAeBs5DZYNS/XgjgTXpApwq4Gaj0k86DbK4YISBmOlwjreaw+8CzvEDJa7bojAATwU+QtUQSg0Wlr4WFwxT2Z4Ta1GZ9Md8rlcDY00ADpFfZViID7/D8oJxrCACPCIjQ6elqOK8ryM9GPg64AM+B1YAW1BJ0r9M/aaQC0YYiAWWne0FQFf0dZnngdsgOaHaXVySLj43XSY3zCRVNclSz9NpTgQRywfAVRr7WcDWmKaxDl4TKuU+LkN4kyOEF1XEMk5GmFf3eOfAKcD5moY/ypy4OsMHeTjDBSPMcF5o8X4NPs70eKAoMYSLJIDuoOl5AwRiJroJWIIq1BwM8DcLDFyPpoAESTEqN/m0aVYlQF1RtRPviB2ZWEQeRJ//Gm0BHqhttieTutJVgkrGBu0FbEbtvmoMgNjLErxEL3yH5L01oxIA79O8aTVqj7ENmWSpGw1DwhZUJTBIf1ieGlZoAFbGxG3pESLIjkolBsMXaVNC9qWrnZTFZJh69SV283v5oHrNlNA9JvGfV0scL+3cm1Q7iaFPKNY6XimTD0fFwuWaRrscqyR11Hgqh2IkZ5gPy7LtdLRKNX7gnzHgkMdYGDIx0FZUrrHVxVBHBLzDup/jlaSrNbbdMWCn5sIAxyspsrlZY18TQ3/mYoxjdpQmkFx8OgKsjAHvat4wlFZZVyce1diWA80x4DOf7Ma8LD+kaYhmGvLZ0ovoa0LP0mpZ1qXXq4Fzs/igiSRBY8BrH3bq0Ca6HlWt82od6iTBfyn9Lj6+Xx2q2nYwSz3Q9FhrE/ZSVX66BPjU51q/RLCR6IEH0KfCe8sQL85SmNRo+Ioa3tgU8Ga2jtS8RaUdPj7gTtQRqS/yfLHogErf+6Xykk52ekOTESm67AbUrvuyPARXAtyPSvz6wduK5myx7pzIcPy3N4D6Z4w3pc0O1IbybAwrWyqSubZUOsYw4DrU4Ro/bUEd3m4wAZjoie8bPtARVNkvVwAWypxu6gqtRW0u0i6kqU4qDUEVUirasANdQ8BhoVSbizai/uRmbhsEtxp1lCPwpJXpWbmBqD++uTWPQ7xm1NaVJeIomzmvIQ8bdpO0zpWozea9Aibf41WHgd9QhaJtqAPia4FfQnv/7l98M5P79zYH0AF0AB1AJwfQAXQAHUCnNPTvAKemiFU6nb96AAAAAElFTkSuQmCC);
-    background-repeat: no-repeat;
-    background-size: 100px;
-    background-position: center;
-    background-color: rgb(230, 230, 230, 0.1);
-    border: 1px dotted #eee;
-    cursor: pointer;
-    box-sizing: border-box;
-}
-
-.jbackdrop {
-    position:fixed;
-    top:0px;
-    left:0px;
-    min-width:100%;
-    min-height:100%;
-    background-color:rgba(0,0,0,0.5);
-    border:0px;
-    padding:0px;
-    z-index:8000;
-    
-  -webkit-touch-callout: none; /* iOS Safari */
-    -webkit-user-select: none; /* Safari */
-     -khtml-user-select: none; /* Konqueror HTML */
-       -moz-user-select: none; /* Firefox */
-        -ms-user-select: none; /* Internet Explorer/Edge */
-            user-select: none; /* Non-prefixed version, currently
-                                  supported by Chrome and Opera */
-}
-
-.jremove {
-    opacity: 0.2;
-    filter: alpha(opacity=20);
-}
-
-/** Animations **/
-.fade-in {
-    animation: fade-in 2s forwards;
-    -webkit-animation: fade-in 2s forwards;
-}
-
-.fade-out {
-    animation: fade-out 1s forwards;
-    -webkit-animation: fade-out 1s forwards;
-}
-
-.slide-left-in {
-    animation: slide-left-in 0.4s forwards;
-    -webkit-animation: slide-left-in 0.4s forwards;
-}
-
-.slide-left-out {
-    animation: slide-left-out 0.4s forwards;
-    -webkit-animation: slide-left-out 0.4s forwards;
-}
-
-.slide-right-in {
-    animation: slide-right-in 0.4s forwards;
-    -webkit-animation: slide-right-in 0.4s forwards;
-}
-
-.slide-right-out {
-    animation: slide-right-out 0.4s forwards;
-    -webkit-animation: slide-right-out 0.4s forwards;
-}
-
-.slide-top-in {
-    animation: slide-top-in 0.4s forwards;
-    -webkit-animation: slide-top-in 0.4s forwards;
-}
-
-.slide-top-out {
-    animation: slide-top-out 0.2s forwards;
-    -webkit-animation: slide-top-out 0.2s forwards;
-}
-
-.slide-bottom-in {
-    animation: slide-bottom-in 0.4s forwards;
-    -webkit-animation: slide-bottom-in 0.4s forwards;
-}
-
-.slide-bottom-out {
-    animation: slide-bottom-out 0.2s forwards;
-    -webkit-animation: slide-bottom-out 0.2s forwards;
-}
-
-/** Fadein and Fadeout **/
-@keyframes fade-in {
-    0% { opacity: 0; }
-    100% { opacity: 100; }
-}
-
-@-webkit-keyframes fade-in {
-    0% { opacity: 0; }
-    100% { opacity: 100; }
-}
-
-@keyframes fade-out {
-    0% { opacity: 100; }
-    100% { opacity: 0; }
-}
-
-@-webkit-keyframes fade-out {
-    0% { opacity: 100; }
-    100% { opacity: 0; }
-}
-
-/** Keyframes Left to Right **/
-@keyframes slide-left-in {
-    0% { transform: translateX(-100%); }
-    100% { transform: translateX(0%); }
-}
-
-@-webkit-keyframes slide-left-in {
-    0% { transform: translateX(-100%); }
-    100% { -webkit-transform: translateX(0%); }
-}
-    
-@keyframes slide-left-out {
-    0% { transform: translateX(0%); }
-    100% { transform: translateX(-100%); }
-}
-
-@-webkit-keyframes slide-left-out {
-    0% { -webkit-transform: translateX(0%); }
-    100% { -webkit-transform: translateX(-100%); }
-}
-
-/** Keyframes Right to Left **/
-@keyframes slide-right-in {
-    0% { transform: translateX(100%); }
-    100% { transform: translateX(0%); }
-}
-
-@-webkit-keyframes slide-right-in
-{
-    0% { transform: translateX(100%); }
-    100% { -webkit-transform: translateX(0%); }
-}
-    
-@keyframes slide-right-out {
-    0% { transform: translateX(0%); }
-    100% { transform: translateX(100%); }
-}
-
-@-webkit-keyframes slide-right-out {
-    0% { -webkit-transform: translateX(0%); }
-    100% { -webkit-transform: translateX(100%); }
-}
-
-/** Keyframes Top to Bottom **/
-@keyframes slide-top-in {
-    0% { transform: translateY(-100%); }
-    100% { transform: translateY(0%); }
-}
-
-@-webkit-keyframes slide-top-in {
-    0% { transform: translateY(-100%); }
-    100% { -webkit-transform: translateY(0%); }
-}
-    
-@keyframes slide-top-out {
-    0% { transform: translateY(0%); }
-    100% { transform: translateY(-100%); }
-}
-
-@-webkit-keyframes slide-top-out {
-    0% { -webkit-transform: translateY(0%); }
-    100% { -webkit-transform: translateY(-100%); }
-}
-
-/** Keyframes Bottom to Top **/
-@keyframes slide-bottom-in {
-    0% { transform: translateY(100%); }
-    100% { transform: translateY(0%); }
-}
-
-@-webkit-keyframes slide-bottom-in {
-    0% { transform: translateY(100%); }
-    100% { -webkit-transform: translateY(0%); }
-}
-    
-@keyframes slide-bottom-out {
-    0% { transform: translateY(0%); }
-    100% { transform: translateY(100%); }
-}
-
-@-webkit-keyframes slide-bottom-out {
-    0% { -webkit-transform: translateY(0%); }
-    100% { -webkit-transform: translateY(100%); }
-}
-
-@supports (-webkit-overflow-scrolling: touch) {
-    .app .options input:checked:before {
-        top:-12px;
-    }
-}
-
-@-webkit-keyframes spin {
-    from {
-        -webkit-transform:rotate(0deg);
-    }
-    to {
-        -webkit-transform:rotate(360deg);
-    }
-}
-
-@keyframes spin {
-    from {
-        transform:rotate(0deg);
-    }
-    to {
-        transform:rotate(360deg);
-    }
-}
-
+
+/**
+ * (c) jSuites Javascript Web Components
+ *
+ * Author: Paul Hodel <paul.hodel@gmail.com>
+ * Website: https://bossanova.uk/jsuites/
+ * Description: Create amazing web based applications.
+ *
+ * MIT License
+ *
+ */
+
+/** General **/
+
+.jdragging {
+    opacity:0.2;
+    filter: alpha(opacity=20);
+}
+
+.jupload {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7emlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMTItMzFUMjI6NDM6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDEtMDFUMjA6MDM6MjNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0wMVQyMDowMzoyM1o8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowZmM3MWQxMi04NTBlLWNhNDUtOTMxOC1kYWIyOWFmYTJkODI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMTItMzFUMjI6NDM6MzBaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk2MTA5Y2Y0LTEwM2ItNTc0Ny1hZWE3LWI5NDMxOWY0NWFkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wMS0wMVQyMDowMjoyMFo8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTAxVDIwOjAzOjIzWjwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tc8AsgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAGjUlEQVR42uycW2xURRjHf91SoEIBUQpYI8VSVBDExniLERNUJBpQVEDFqE1AEYkX0JCC0YjgBdEYDOIFeVEEFRBilKBogg+KiQoV5Q6Khla8lrZRBLo+zLdazs7ZM2d3zsJu55/sy3dmz5797Vy+y8wWxONxnNJXzCFwAB1AB9ABdHIAHUAH0AF0Cq929fX1ufbMA4HLgSqgHOgPdJJrfwPbgb3AJuBD4KsoH6agrq4uF6CVAncC4wVYGP0ALAVeAva0NYDFwOPARKBzhvc6ArwG1AC/toU5cDSwFXjAAjyAQmACsAOozneATwLLgdMM2/8jLxN1AxYBC/J1CL8F3BjQZhOwCqgFvgd+AuJAT6ACOBMYCVwUcJ91siDlDcC3gRtSXF8IzAe+M7xfOXC3TAOFPm3WA0NzAeDp8oUGASeKrUF60R6Zn6an6CnTgI1pfnYFMAcY43N9GTDueAR4sQylK8RvS0dzgYcsPc9U4Bmfa9XA4uMF4GXypUdkeJ8Z0nNs6hbgdZ9rPcK6OLZX4XbisH5iAd68COABvAHc63NtwbHsgf2B94BKC/faAFwY8Zy8ErhWYx8EbM42wAuAj4ETAtptllh1N9AiC0t/YLCnXV9xT6JUJ6AOKPHYX5HIJ2sAK4BvgQ4+17fJ5LxKIgudzgBGySS/3sAPtKWZwCyPrQk4ydQxtwFwH9BbY4/LIvBEyF5RIF8iG+oC/K7xEUfLEI98EVnsA28/MCQkPIDmLMIDOCDOu1fXZGMVrgJu19gbZCKuJTek62mV2QD4XIoFZT+5o10a2ylRA6wCLtXYp8uikUv6Webr1uoOdIwS4HiNbS/wFLmnZuCgx9Y+hVdhBeBwjW1+BF9uFvBqFiDGDW3a0Cus+gADPLYWVB7PpiaJn5YYZjMigles6W2NskJH0gN1RZ1EJcyWJnvi0hpUbSQK9dRwaDGIqtIGeLbG9o3lnveCT2YmCogVPqvwdpOIKB2A7TU2W+XCiQEZkSggTvGxl8m0NNc2wDKNrcXCF5mASoUFaQYw2xK8Iv4vyvtpmsTxGQHsLPPQLp9frI+FYftyiPY1liAeBs5DZYNS/XgjgTXpApwq4Gaj0k86DbK4YISBmOlwjreaw+8CzvEDJa7bojAATwU+QtUQSg0Wlr4WFwxT2Z4Ta1GZ9Md8rlcDY00ADpFfZViID7/D8oJxrCACPCIjQ6elqOK8ryM9GPg64AM+B1YAW1BJ0r9M/aaQC0YYiAWWne0FQFf0dZnngdsgOaHaXVySLj43XSY3zCRVNclSz9NpTgQRywfAVRr7WcDWmKaxDl4TKuU+LkN4kyOEF1XEMk5GmFf3eOfAKcD5moY/ypy4OsMHeTjDBSPMcF5o8X4NPs70eKAoMYSLJIDuoOl5AwRiJroJWIIq1BwM8DcLDFyPpoAESTEqN/m0aVYlQF1RtRPviB2ZWEQeRJ//Gm0BHqhttieTutJVgkrGBu0FbEbtvmoMgNjLErxEL3yH5L01oxIA79O8aTVqj7ENmWSpGw1DwhZUJTBIf1ieGlZoAFbGxG3pESLIjkolBsMXaVNC9qWrnZTFZJh69SV283v5oHrNlNA9JvGfV0scL+3cm1Q7iaFPKNY6XimTD0fFwuWaRrscqyR11Hgqh2IkZ5gPy7LtdLRKNX7gnzHgkMdYGDIx0FZUrrHVxVBHBLzDup/jlaSrNbbdMWCn5sIAxyspsrlZY18TQ3/mYoxjdpQmkFx8OgKsjAHvat4wlFZZVyce1diWA80x4DOf7Ma8LD+kaYhmGvLZ0ovoa0LP0mpZ1qXXq4Fzs/igiSRBY8BrH3bq0Ca6HlWt82od6iTBfyn9Lj6+Xx2q2nYwSz3Q9FhrE/ZSVX66BPjU51q/RLCR6IEH0KfCe8sQL85SmNRo+Ioa3tgU8Ga2jtS8RaUdPj7gTtQRqS/yfLHogErf+6Xykk52ekOTESm67AbUrvuyPARXAtyPSvz6wduK5myx7pzIcPy3N4D6Z4w3pc0O1IbybAwrWyqSubZUOsYw4DrU4Ro/bUEd3m4wAZjoie8bPtARVNkvVwAWypxu6gqtRW0u0i6kqU4qDUEVUirasANdQ8BhoVSbizai/uRmbhsEtxp1lCPwpJXpWbmBqD++uTWPQ7xm1NaVJeIomzmvIQ8bdpO0zpWozea9Aibf41WHgd9QhaJtqAPia4FfQnv/7l98M5P79zYH0AF0AB1AJwfQAXQAHUCnNPTvAKemiFU6nb96AAAAAElFTkSuQmCC);
+    background-repeat: no-repeat;
+    background-size: 100px;
+    background-position: center;
+    background-color: rgb(230, 230, 230, 0.1);
+    border: 1px dotted #eee;
+    cursor: pointer;
+    box-sizing: border-box;
+}
+
+.jbackdrop {
+    position:fixed;
+    top:0px;
+    left:0px;
+    min-width:100%;
+    min-height:100%;
+    background-color:rgba(0,0,0,0.5);
+    border:0px;
+    padding:0px;
+    z-index:8000;
+    
+  -webkit-touch-callout: none; /* iOS Safari */
+    -webkit-user-select: none; /* Safari */
+     -khtml-user-select: none; /* Konqueror HTML */
+       -moz-user-select: none; /* Firefox */
+        -ms-user-select: none; /* Internet Explorer/Edge */
+            user-select: none; /* Non-prefixed version, currently
+                                  supported by Chrome and Opera */
+}
+
+.jremove {
+    opacity: 0.2;
+    filter: alpha(opacity=20);
+}
+
+/** Animations **/
+.fade-in {
+    animation: fade-in 2s forwards;
+    -webkit-animation: fade-in 2s forwards;
+}
+
+.fade-out {
+    animation: fade-out 1s forwards;
+    -webkit-animation: fade-out 1s forwards;
+}
+
+.slide-left-in {
+    animation: slide-left-in 0.4s forwards;
+    -webkit-animation: slide-left-in 0.4s forwards;
+}
+
+.slide-left-out {
+    animation: slide-left-out 0.4s forwards;
+    -webkit-animation: slide-left-out 0.4s forwards;
+}
+
+.slide-right-in {
+    animation: slide-right-in 0.4s forwards;
+    -webkit-animation: slide-right-in 0.4s forwards;
+}
+
+.slide-right-out {
+    animation: slide-right-out 0.4s forwards;
+    -webkit-animation: slide-right-out 0.4s forwards;
+}
+
+.slide-top-in {
+    animation: slide-top-in 0.4s forwards;
+    -webkit-animation: slide-top-in 0.4s forwards;
+}
+
+.slide-top-out {
+    animation: slide-top-out 0.2s forwards;
+    -webkit-animation: slide-top-out 0.2s forwards;
+}
+
+.slide-bottom-in {
+    animation: slide-bottom-in 0.4s forwards;
+    -webkit-animation: slide-bottom-in 0.4s forwards;
+}
+
+.slide-bottom-out {
+    animation: slide-bottom-out 0.2s forwards;
+    -webkit-animation: slide-bottom-out 0.2s forwards;
+}
+
+/** Fadein and Fadeout **/
+@keyframes fade-in {
+    0% { opacity: 0; }
+    100% { opacity: 100; }
+}
+
+@-webkit-keyframes fade-in {
+    0% { opacity: 0; }
+    100% { opacity: 100; }
+}
+
+@keyframes fade-out {
+    0% { opacity: 100; }
+    100% { opacity: 0; }
+}
+
+@-webkit-keyframes fade-out {
+    0% { opacity: 100; }
+    100% { opacity: 0; }
+}
+
+/** Keyframes Left to Right **/
+@keyframes slide-left-in {
+    0% { transform: translateX(-100%); }
+    100% { transform: translateX(0%); }
+}
+
+@-webkit-keyframes slide-left-in {
+    0% { transform: translateX(-100%); }
+    100% { -webkit-transform: translateX(0%); }
+}
+    
+@keyframes slide-left-out {
+    0% { transform: translateX(0%); }
+    100% { transform: translateX(-100%); }
+}
+
+@-webkit-keyframes slide-left-out {
+    0% { -webkit-transform: translateX(0%); }
+    100% { -webkit-transform: translateX(-100%); }
+}
+
+/** Keyframes Right to Left **/
+@keyframes slide-right-in {
+    0% { transform: translateX(100%); }
+    100% { transform: translateX(0%); }
+}
+
+@-webkit-keyframes slide-right-in
+{
+    0% { transform: translateX(100%); }
+    100% { -webkit-transform: translateX(0%); }
+}
+    
+@keyframes slide-right-out {
+    0% { transform: translateX(0%); }
+    100% { transform: translateX(100%); }
+}
+
+@-webkit-keyframes slide-right-out {
+    0% { -webkit-transform: translateX(0%); }
+    100% { -webkit-transform: translateX(100%); }
+}
+
+/** Keyframes Top to Bottom **/
+@keyframes slide-top-in {
+    0% { transform: translateY(-100%); }
+    100% { transform: translateY(0%); }
+}
+
+@-webkit-keyframes slide-top-in {
+    0% { transform: translateY(-100%); }
+    100% { -webkit-transform: translateY(0%); }
+}
+    
+@keyframes slide-top-out {
+    0% { transform: translateY(0%); }
+    100% { transform: translateY(-100%); }
+}
+
+@-webkit-keyframes slide-top-out {
+    0% { -webkit-transform: translateY(0%); }
+    100% { -webkit-transform: translateY(-100%); }
+}
+
+/** Keyframes Bottom to Top **/
+@keyframes slide-bottom-in {
+    0% { transform: translateY(100%); }
+    100% { transform: translateY(0%); }
+}
+
+@-webkit-keyframes slide-bottom-in {
+    0% { transform: translateY(100%); }
+    100% { -webkit-transform: translateY(0%); }
+}
+    
+@keyframes slide-bottom-out {
+    0% { transform: translateY(0%); }
+    100% { transform: translateY(100%); }
+}
+
+@-webkit-keyframes slide-bottom-out {
+    0% { -webkit-transform: translateY(0%); }
+    100% { -webkit-transform: translateY(100%); }
+}
+
+@supports (-webkit-overflow-scrolling: touch) {
+    .app .options input:checked:before {
+        top:-12px;
+    }
+}
+
+@-webkit-keyframes spin {
+    from {
+        -webkit-transform:rotate(0deg);
+    }
+    to {
+        -webkit-transform:rotate(360deg);
+    }
+}
+
+@keyframes spin {
+    from {
+        transform:rotate(0deg);
+    }
+    to {
+        transform:rotate(360deg);
+    }
+}
+
 /**
  * Date & Datetime picker v1.0.1
  * Author: paul.hodel@gmail.com
@@ -435,123 +435,123 @@
 .jcalendar-fullsize .jcalendar-backdrop {
     display:block;
 }
-
-
-/**
- * Color Picker v1.0.1
- * Author: paul.hodel@gmail.com
- * https://github.com/paulhodel/jtools
- */
-
-.jcolor {
-    position:relative;
-    display:none;
-    outline:none;
-}
-
-.jcolor-content {
-    position:absolute;
-    z-index:9000;
-    user-select:none;
-    -webkit-font-smoothing: antialiased;
-    font-size: .875rem;
-    letter-spacing: .2px;
-    -webkit-border-radius: 4px;
-    border-radius: 4px;
-    -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
-    box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
-    padding:10px;
-    background-color:#fff;
-}
-
-.jcolor-focus {
-    display:block;
-}
-
-.jcolor td {
-    border:2px solid #fff;
-}
-
-.jcolor-selected {
-    border:2px solid #000 !important;
-    background-repeat:no-repeat;
-    background-size: cover;
-    background-position:0 0;
-    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z' fill='white'/%3E%3C/svg%3E");
-}
-
-/**
- * Contextmenu v1.0.1
- * Author: paul.hodel@gmail.com
- * https://github.com/paulhodel/jtools
- */
- 
-.jcontextmenu {
-    position:absolute;
-    z-index:10000;
-    background:#fff;
-    color: #555;
-    font-family: sans-serif;
-    font-size: 11px;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    user-select: none;
-    -webkit-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
-    -moz-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
-    box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
-    border: 1px solid #C6C6C6;
-    padding: 0px;
-    padding-top:4px;
-    padding-bottom:4px;
-    margin:0px;
-    outline:none;
-    display:none;
-}
-
-.jcontextmenu.jcontextmenu-focus {
-    display:inline-block;
-}
-
-.jcontextmenu li {
-    box-sizing: border-box;
-    display: block;
-    padding: 8px 8px 8px 30px;
-    width: 250px;
-    position: relative;
-    cursor: default;
-}
-
-.jcontextmenu li a {
-    color: #555;
-    text-decoration: none;
-}
-
-.jcontextmenu li span {
-    float: right;
-    margin-right:10px;
-}
-
-.jcontextmenu .contextmenu-disabled {
-    color: #a1a192;
-}
-
-.jcontextmenu li:not(.contextmenu-line):hover {
-    background: #ebebeb;
-}
-
-.jcontextmenu li.contextmenu-line {
-    border-top: 1px solid #e9e9e9;
-    margin-top:5px;
-    padding:2px;
-}
-
-.jcontextmenu hr {
-    border: 1px solid #e9e9e9;
-    border-bottom: 0;
-    margin-top:5px;
-    margin-bottom:5px;
-}
-
+
+
+/**
+ * Color Picker v1.0.1
+ * Author: paul.hodel@gmail.com
+ * https://github.com/paulhodel/jtools
+ */
+
+.jcolor {
+    position:relative;
+    display:none;
+    outline:none;
+}
+
+.jcolor-content {
+    position:absolute;
+    z-index:9000;
+    user-select:none;
+    -webkit-font-smoothing: antialiased;
+    font-size: .875rem;
+    letter-spacing: .2px;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
+    box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
+    padding:10px;
+    background-color:#fff;
+}
+
+.jcolor-focus {
+    display:block;
+}
+
+.jcolor td {
+    border:2px solid #fff;
+}
+
+.jcolor-selected {
+    border:2px solid #000 !important;
+    background-repeat:no-repeat;
+    background-size: cover;
+    background-position:0 0;
+    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z' fill='white'/%3E%3C/svg%3E");
+}
+
+/**
+ * Contextmenu v1.0.1
+ * Author: paul.hodel@gmail.com
+ * https://github.com/paulhodel/jtools
+ */
+ 
+.jcontextmenu {
+    position:absolute;
+    z-index:10000;
+    background:#fff;
+    color: #555;
+    font-family: sans-serif;
+    font-size: 11px;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    user-select: none;
+    -webkit-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
+    -moz-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
+    box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
+    border: 1px solid #C6C6C6;
+    padding: 0px;
+    padding-top:4px;
+    padding-bottom:4px;
+    margin:0px;
+    outline:none;
+    display:none;
+}
+
+.jcontextmenu.jcontextmenu-focus {
+    display:inline-block;
+}
+
+.jcontextmenu li {
+    box-sizing: border-box;
+    display: block;
+    padding: 8px 8px 8px 30px;
+    width: 250px;
+    position: relative;
+    cursor: default;
+}
+
+.jcontextmenu li a {
+    color: #555;
+    text-decoration: none;
+}
+
+.jcontextmenu li span {
+    float: right;
+    margin-right:10px;
+}
+
+.jcontextmenu .contextmenu-disabled {
+    color: #a1a192;
+}
+
+.jcontextmenu li:not(.contextmenu-line):hover {
+    background: #ebebeb;
+}
+
+.jcontextmenu li.contextmenu-line {
+    border-top: 1px solid #e9e9e9;
+    margin-top:5px;
+    padding:2px;
+}
+
+.jcontextmenu hr {
+    border: 1px solid #e9e9e9;
+    border-bottom: 0;
+    margin-top:5px;
+    margin-bottom:5px;
+}
+
 /**
  * (c) 2013 jDropdown
  * http://www.github.com/paulhodel/jdropdown
@@ -1054,120 +1054,120 @@
     {
         min-width:100%;
     }
-}
-
-/**
- * (c) jLoading
- * https://github.com/paulhodel/jtools
- *
- * @author: Paul Hodel <paul.hodel@gmail.com>
- * @description: Page loading spin
- */
-
-.jloading {
-    position:fixed;
-    z-index:10001;
-    width:100%;
-    left:0;
-    right:0;
-    top:0;
-    bottom:0;
-    background-color: rgba(0,0,0,0.7);
-}
-
-.jloading::after {
-    content:'';
-    display:block;
-    margin:0 auto;
-    margin-top:50vh;
-    width:40px;
-    height:40px;
-    border-style:solid;
-    border-color:white;
-    border-top-color:transparent;
-    border-width:4px;
-    border-radius:50%;
-    -webkit-animation: spin .8s linear infinite;
-    animation: spin .8s linear infinite;
-}
-
-.jloading.spin {
-    background-color:transparent;
-}
-
-.jloading.spin::after {
-    margin:0 auto;
-    margin-top:80px;
-    border-color:#aaa;
-    border-top-color:transparent;
-}
-
-/**
- * (c) jTools Modal page
- * https://github.com/paulhodel/jtools
- *
- * @author: Paul Hodel <paul.hodel@gmail.com>
- * @description: Modal page
- */
-
-.jmodal {
-    position:fixed;
-    top:50%;
-    left:50%;
-    width:60%;
-    height:60%;
-    -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2);
-    -moz-box-shadow: 0 2px 10px rgba(0,0,0,.2);
-    border:1px solid #ccc;
-    background-color:#fff;
-    transform: translate(-50%, -50%);
-    box-sizing: border-box;
-    padding-top:50px;
-    z-index:9002;
-    display:none;
-    border-radius:5px;
-}
-
-.jmodal:before {
-    position:absolute;
-    top:0;
-    left:0;
-    width:100%;
-    content:attr(title);
-    padding:15px;
-    box-sizing: border-box;
-    background: #e3e3e3;
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e3e3e3');
-    background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e3e3e3));
-    background: -moz-linear-gradient(top,  #ededed,  #e3e3e3);
-    font-size:1.2em;
-}
-
-.jmodal > div {
-    padding:20px;
-    overflow-y:auto;
-    max-height:100%;
-}
-.jmodal.no-title {
-    padding-top:0px;
-}
-
-.jmodal.no-title:before {
-    display:none;
-}
-
-.jmodal:after {
-    content:'';
-    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
-    position:absolute;
-    top:0;
-    right:0;
-    margin:14px;
-    font-size:24px;
-    width:24px;
-    height:24px;
-    cursor:pointer;
-    text-shadow: 0px 0px 5px #fff;
-}
-
-
+}
+
+/**
+ * (c) jLoading
+ * https://github.com/paulhodel/jtools
+ *
+ * @author: Paul Hodel <paul.hodel@gmail.com>
+ * @description: Page loading spin
+ */
+
+.jloading {
+    position:fixed;
+    z-index:10001;
+    width:100%;
+    left:0;
+    right:0;
+    top:0;
+    bottom:0;
+    background-color: rgba(0,0,0,0.7);
+}
+
+.jloading::after {
+    content:'';
+    display:block;
+    margin:0 auto;
+    margin-top:50vh;
+    width:40px;
+    height:40px;
+    border-style:solid;
+    border-color:white;
+    border-top-color:transparent;
+    border-width:4px;
+    border-radius:50%;
+    -webkit-animation: spin .8s linear infinite;
+    animation: spin .8s linear infinite;
+}
+
+.jloading.spin {
+    background-color:transparent;
+}
+
+.jloading.spin::after {
+    margin:0 auto;
+    margin-top:80px;
+    border-color:#aaa;
+    border-top-color:transparent;
+}
+
+/**
+ * (c) jTools Modal page
+ * https://github.com/paulhodel/jtools
+ *
+ * @author: Paul Hodel <paul.hodel@gmail.com>
+ * @description: Modal page
+ */
+
+.jmodal {
+    position:fixed;
+    top:50%;
+    left:50%;
+    width:60%;
+    height:60%;
+    -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2);
+    -moz-box-shadow: 0 2px 10px rgba(0,0,0,.2);
+    border:1px solid #ccc;
+    background-color:#fff;
+    transform: translate(-50%, -50%);
+    box-sizing: border-box;
+    padding-top:50px;
+    z-index:9002;
+    display:none;
+    border-radius:5px;
+}
+
+.jmodal:before {
+    position:absolute;
+    top:0;
+    left:0;
+    width:100%;
+    content:attr(title);
+    padding:15px;
+    box-sizing: border-box;
+    background: #e3e3e3;
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e3e3e3');
+    background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e3e3e3));
+    background: -moz-linear-gradient(top,  #ededed,  #e3e3e3);
+    font-size:1.2em;
+}
+
+.jmodal > div {
+    padding:20px;
+    overflow-y:auto;
+    max-height:100%;
+}
+.jmodal.no-title {
+    padding-top:0px;
+}
+
+.jmodal.no-title:before {
+    display:none;
+}
+
+.jmodal:after {
+    content:'';
+    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
+    position:absolute;
+    top:0;
+    right:0;
+    margin:14px;
+    font-size:24px;
+    width:24px;
+    height:24px;
+    cursor:pointer;
+    text-shadow: 0px 0px 5px #fff;
+}
+
+
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js
similarity index 99%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js
index 0de5b9a661e2cb577958171a876e4b5f40b893f1..3f2c8b53babf13953cf77be4388a14ad311c11f5 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js
@@ -1,25 +1,25 @@
-
-/**
- * (c) jSuites Javascript Web Components
- *
- * Author: Paul Hodel <paul.hodel@gmail.com>
- * Website: https://bossanova.uk/jsuites/
- * Description: Create amazing web based applications.
- *
- * MIT License
- *
- */
-;(function (global, factory) {
-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
-    typeof define === 'function' && define.amd ? define(factory) :
-    global.jSuites = factory();
-
-    // Keep compatibility with jtools legacy
-    global.jApp = global.jSuites;
-}(this, (function () {
-
-    'use strict';
-
+
+/**
+ * (c) jSuites Javascript Web Components
+ *
+ * Author: Paul Hodel <paul.hodel@gmail.com>
+ * Website: https://bossanova.uk/jsuites/
+ * Description: Create amazing web based applications.
+ *
+ * MIT License
+ *
+ */
+;(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    global.jSuites = factory();
+
+    // Keep compatibility with jtools legacy
+    global.jApp = global.jSuites;
+}(this, (function () {
+
+    'use strict';
+
     var jSuites = function(options) {
         var obj = {}
     
@@ -333,8 +333,8 @@
     
         return obj;
     }();
-    
-    
+    
+    
     jSuites.calendar = (function(el, options) {
         var obj = {};
         obj.options = {};
@@ -1161,8 +1161,8 @@
                 }
             }
         }
-    }
-    
+    }
+    
     /**
      * Color Picker v1.0.1
      * Author: paul.hodel@gmail.com
@@ -1603,8 +1603,8 @@
         el.color = obj;
     
         return obj;
-    });
-    
+    });
+    
     /**
      * Contextmenu v1.0.1
      * Author: paul.hodel@gmail.com
@@ -1703,8 +1703,8 @@
         el.contextmenu = obj;
     
         return obj;
-    });
-    
+    });
+    
     /**
      * (c) 2013 jDropdown
      * http://www.github.com/paulhodel/jdropdown
@@ -2430,205 +2430,205 @@
                 }
             }
         }
-    }
-    
-    jSuites.image = (function(el, options) {
-        var obj = {};
-        obj.options = {};
-    
-        // Default configuration
-        var defaults = {
-            minWidth:false,
-            onchange:null,
-            singleFile:true,
-            parser:'',
-            text:{
-                extensionNotAllowed:'The extension is not allowed',
-                imageTooSmall:'The resolution is too low, try a image with a better resolution. width > 800px',
-            }
-        };
-    
-        // Loop through our object
-        for (var property in defaults) {
-            if (options && options.hasOwnProperty(property)) {
-                obj.options[property] = options[property];
-            } else {
-                obj.options[property] = defaults[property];
-            }
-        }
-    
-        // Upload icon
-        el.classList.add('jupload');
-    
-        // Add image
-        obj.addImage = function(file) {
-            var img = document.createElement('img');
-            img.setAttribute('data-lastmodified', file.size);
-            img.setAttribute('data-name', file.name);
-            img.setAttribute('data-size', file.size);
-            img.setAttribute('data-thumbs', file.thumbs);
-            img.setAttribute('data-cover', file.cover ? 1 : 0);
-            img.setAttribute('src', file.file);
-            img.className = 'jfile';
-            img.style.width = '100%';
-    
-            return img;
-        }
-    
-        // Add image
-        obj.addImages = function(files) {
-            if (obj.options.singleFile == true) {
-                el.innerHTML = '';
-            }
-    
-            for (var i = 0; i < files.length; i++) {
-                el.appendChild(obj.addImage(files[i]));
-            }
-        }
-    
-        obj.addFromFile = function(file) {
-            if (obj.options.singleFile == true) {
-                el.innerHTML = '';
-            }
-    
-            var type = file.type.split('/');
-            if (type[0] == 'image') {
-                var image = new FileReader();
-                image.addEventListener("load", function (v) {
-    
-                    var img = document.createElement('img');
-                    img.setAttribute('data-lastModified', file.lastModified);
-                    img.setAttribute('data-name', file.name);
-                    img.setAttribute('data-size', file.size);
-                    img.setAttribute('src', v.srcElement.result);
-                    el.appendChild(img);
-    
-                    setTimeout(function() {
-                        if (obj.options.minWidth && (parseInt(img.width) < parseInt(obj.options.minWidth))) {
-                            img.remove();
-                            alert(obj.options.text.imageTooSmall);
-                        } else {
-                            if (typeof(obj.options.onchange) == 'function') {
-                                obj.options.onchange(img);
-                            }
-                        }
-                    }, 0);
-                }, false);
-    
-                image.readAsDataURL(file);
-            } else {
-                alert(text.extentionNotAllowed);
-            }
-        }
-    
-        var attachmentInput = document.createElement('input');
-        attachmentInput.type = 'file';
-        attachmentInput.setAttribute('accept', 'image/*');
-        attachmentInput.onchange = function() {
-            for (var i = 0; i < this.files.length; i++) {
-                obj.addFromFile(this.files[i]);
-            }
-        }
-    
-        el.addEventListener("dblclick", function(e) {
-            var evt = new MouseEvent('click', {
-                bubbles: true,
-                cancelable: true,
-                view: window
-            });
-    
-            attachmentInput.dispatchEvent(evt);
-        });
-    
-        el.addEventListener('dragenter', function(e) {
-            el.style.border = '1px dashed #000';
-        });
-    
-        el.addEventListener('dragleave', function(e) {
-            el.style.border = '1px solid #eee';
-        });
-    
-        el.addEventListener('dragstop', function(e) {
-            el.style.border = '1px solid #eee';
-        });
-    
-        el.addEventListener('dragover', function(e) {
-            e.preventDefault();
-        });
-    
-        el.addEventListener('drop', function(e) {
-            e.preventDefault();  
-            e.stopPropagation();
-    
-            var data = e.dataTransfer.getData('text/html');
-            if (! data) {
-                for (var i = 0; i < e.dataTransfer.files.length; i++) {
-                    obj.addFromFile(e.dataTransfer.files[i]);
-                }
-            } else {
-                if (obj.options.singleFile == true) {
-                    el.innerHTML = '';
-                }
-    
-                var template = document.createElement('template');
-                template.innerHTML = data.trim();
-                data = template.content.firstChild;
-    
-                var img = document.createElement('img');
-                img.setAttribute('data-lastModified', '');
-                img.setAttribute('data-name', '');
-                img.setAttribute('data-size', '');
-                el.appendChild(img);
-    
-                if (data.src.substr(0,4) == 'data') {
-                    img.setAttribute('src', data.src);
-                    img.setAttribute('data-size', data.src.length);
-    
-                    if (typeof(obj.options.onchange) == 'function') {
-                        obj.options.onchange(img);
-                    }
-                } else {
-                    var name = data.src.split('/');
-                    name = name[name.length-1];
-                    img.setAttribute('data-name', name);
-    
-                    const toDataURL = url => fetch(url)
-                        .then(response => response.blob())
-                        .then(blob => new Promise((resolve, reject) => {
-                              const reader = new FileReader();
-                              reader.onloadend = () => resolve(reader.result);
-                              reader.onerror = reject;
-                              reader.readAsDataURL(blob);
-                        }));
-    
-                    toDataURL(obj.options.parser + data.src).then(dataUrl => {
-                        img.setAttribute('src', dataUrl);
-                        img.setAttribute('data-size', dataUrl.length);
-    
-                        setTimeout(function() {
-                            if (parseInt(img.width) < 800) {
-                                img.remove();
-                                alert(obj.options.imageTooSmall);
-                            } else {
-                                if (typeof(obj.options.onchange) == 'function') {
-                                    obj.options.onchange(img);
-                                }
-                            }
-                        }, 0);
-                    });
-                }
-            }
-    
-            el.style.border = '1px solid #eee';
-    
-            return false;
-        });
-    
-        el.image = obj;
-    
-        return obj;
-    });
-    
+    }
+    
+    jSuites.image = (function(el, options) {
+        var obj = {};
+        obj.options = {};
+    
+        // Default configuration
+        var defaults = {
+            minWidth:false,
+            onchange:null,
+            singleFile:true,
+            parser:'',
+            text:{
+                extensionNotAllowed:'The extension is not allowed',
+                imageTooSmall:'The resolution is too low, try a image with a better resolution. width > 800px',
+            }
+        };
+    
+        // Loop through our object
+        for (var property in defaults) {
+            if (options && options.hasOwnProperty(property)) {
+                obj.options[property] = options[property];
+            } else {
+                obj.options[property] = defaults[property];
+            }
+        }
+    
+        // Upload icon
+        el.classList.add('jupload');
+    
+        // Add image
+        obj.addImage = function(file) {
+            var img = document.createElement('img');
+            img.setAttribute('data-lastmodified', file.size);
+            img.setAttribute('data-name', file.name);
+            img.setAttribute('data-size', file.size);
+            img.setAttribute('data-thumbs', file.thumbs);
+            img.setAttribute('data-cover', file.cover ? 1 : 0);
+            img.setAttribute('src', file.file);
+            img.className = 'jfile';
+            img.style.width = '100%';
+    
+            return img;
+        }
+    
+        // Add image
+        obj.addImages = function(files) {
+            if (obj.options.singleFile == true) {
+                el.innerHTML = '';
+            }
+    
+            for (var i = 0; i < files.length; i++) {
+                el.appendChild(obj.addImage(files[i]));
+            }
+        }
+    
+        obj.addFromFile = function(file) {
+            if (obj.options.singleFile == true) {
+                el.innerHTML = '';
+            }
+    
+            var type = file.type.split('/');
+            if (type[0] == 'image') {
+                var image = new FileReader();
+                image.addEventListener("load", function (v) {
+    
+                    var img = document.createElement('img');
+                    img.setAttribute('data-lastModified', file.lastModified);
+                    img.setAttribute('data-name', file.name);
+                    img.setAttribute('data-size', file.size);
+                    img.setAttribute('src', v.srcElement.result);
+                    el.appendChild(img);
+    
+                    setTimeout(function() {
+                        if (obj.options.minWidth && (parseInt(img.width) < parseInt(obj.options.minWidth))) {
+                            img.remove();
+                            alert(obj.options.text.imageTooSmall);
+                        } else {
+                            if (typeof(obj.options.onchange) == 'function') {
+                                obj.options.onchange(img);
+                            }
+                        }
+                    }, 0);
+                }, false);
+    
+                image.readAsDataURL(file);
+            } else {
+                alert(text.extentionNotAllowed);
+            }
+        }
+    
+        var attachmentInput = document.createElement('input');
+        attachmentInput.type = 'file';
+        attachmentInput.setAttribute('accept', 'image/*');
+        attachmentInput.onchange = function() {
+            for (var i = 0; i < this.files.length; i++) {
+                obj.addFromFile(this.files[i]);
+            }
+        }
+    
+        el.addEventListener("dblclick", function(e) {
+            var evt = new MouseEvent('click', {
+                bubbles: true,
+                cancelable: true,
+                view: window
+            });
+    
+            attachmentInput.dispatchEvent(evt);
+        });
+    
+        el.addEventListener('dragenter', function(e) {
+            el.style.border = '1px dashed #000';
+        });
+    
+        el.addEventListener('dragleave', function(e) {
+            el.style.border = '1px solid #eee';
+        });
+    
+        el.addEventListener('dragstop', function(e) {
+            el.style.border = '1px solid #eee';
+        });
+    
+        el.addEventListener('dragover', function(e) {
+            e.preventDefault();
+        });
+    
+        el.addEventListener('drop', function(e) {
+            e.preventDefault();  
+            e.stopPropagation();
+    
+            var data = e.dataTransfer.getData('text/html');
+            if (! data) {
+                for (var i = 0; i < e.dataTransfer.files.length; i++) {
+                    obj.addFromFile(e.dataTransfer.files[i]);
+                }
+            } else {
+                if (obj.options.singleFile == true) {
+                    el.innerHTML = '';
+                }
+    
+                var template = document.createElement('template');
+                template.innerHTML = data.trim();
+                data = template.content.firstChild;
+    
+                var img = document.createElement('img');
+                img.setAttribute('data-lastModified', '');
+                img.setAttribute('data-name', '');
+                img.setAttribute('data-size', '');
+                el.appendChild(img);
+    
+                if (data.src.substr(0,4) == 'data') {
+                    img.setAttribute('src', data.src);
+                    img.setAttribute('data-size', data.src.length);
+    
+                    if (typeof(obj.options.onchange) == 'function') {
+                        obj.options.onchange(img);
+                    }
+                } else {
+                    var name = data.src.split('/');
+                    name = name[name.length-1];
+                    img.setAttribute('data-name', name);
+    
+                    const toDataURL = url => fetch(url)
+                        .then(response => response.blob())
+                        .then(blob => new Promise((resolve, reject) => {
+                              const reader = new FileReader();
+                              reader.onloadend = () => resolve(reader.result);
+                              reader.onerror = reject;
+                              reader.readAsDataURL(blob);
+                        }));
+    
+                    toDataURL(obj.options.parser + data.src).then(dataUrl => {
+                        img.setAttribute('src', dataUrl);
+                        img.setAttribute('data-size', dataUrl.length);
+    
+                        setTimeout(function() {
+                            if (parseInt(img.width) < 800) {
+                                img.remove();
+                                alert(obj.options.imageTooSmall);
+                            } else {
+                                if (typeof(obj.options.onchange) == 'function') {
+                                    obj.options.onchange(img);
+                                }
+                            }
+                        }, 0);
+                    });
+                }
+            }
+    
+            el.style.border = '1px solid #eee';
+    
+            return false;
+        });
+    
+        el.image = obj;
+    
+        return obj;
+    });
+    
     /**
      * (c) jLoading
      * https://github.com/paulhodel/jtools
@@ -2652,620 +2652,620 @@
         };
     
         return obj;
-    })();
-    
-    /**
-     * (c) jTools Input Mask
-     * https://github.com/paulhodel/jtools
-     *
-     * @author: Paul Hodel <paul.hodel@gmail.com>
-     * @description: Input mask
-     */
-    
-    jSuites.mask = (function() {
-        var obj = {};
-        var index = 0;
-        var values = []
-        var pieces = [];
-    
-        obj.run = function(value, mask, decimal) {
-            if (value && mask) {
-                if (! decimal) {
-                    decimal = '.';
-                }
-                if (value == Number(value)) {
-                    var number = (''+value).split('.');
-                    var value = number[0];
-                    var valueDecimal = number[1];
-                } else {
-                    value = '' + value;
-                }
-                index = 0;
-                values = [];
-                // Create mask token
-                obj.prepare(mask);
-                // Current value
-                var currentValue = value;
-                if (currentValue) {
-                    // Checking current value
-                    for (var i = 0; i < currentValue.length; i++) {
-                        if (currentValue[i] != null) {
-                            obj.process(currentValue[i]);
-                        }
-                    }
-                }
-                if (valueDecimal) {
-                    obj.process(decimal);
-                    var currentValue = valueDecimal;
-                    if (currentValue) {
-                        // Checking current value
-                        for (var i = 0; i < currentValue.length; i++) {
-                            if (currentValue[i] != null) {
-                                obj.process(currentValue[i]);
-                            }
-                        }
-                    }
-                }
-                // Formatted value
-                return values.join('');
-            } else {
-                return '';
-            }
-        }
-    
-        obj.apply = function(e) {
-            var mask = e.target.getAttribute('data-mask');
-            if (mask && e.keyCode > 46) {
-                index = 0;
-                values = [];
-                // Create mask token
-                obj.prepare(mask);
-                // Current value
-                var currentValue = e.target.value;
-                if (currentValue) {
-                    // Checking current value
-                    for (var i = 0; i < currentValue.length; i++) {
-                        if (currentValue[i] != null) {
-                            obj.process(currentValue[i]);
-                        }
-                    }
-                }
-                // New input
-                obj.process(obj.fromKeyCode(e));
-                // Update value to the element
-                e.target.value = values.join('');
-                if (pieces.length == values.length && pieces[pieces.length-1].length == values[values.length-1].length) {
-                    e.target.setAttribute('data-completed', 'true');
-                } else {
-                    e.target.setAttribute('data-completed', 'false');
-                }
-                // Prevent default
-                e.preventDefault();
-            }
-        }
-    
-        /**
-         * Process inputs and save to values
-         */
-        obj.process = function(input) {
-            do {
-                if (pieces[index] == 'mm') {
-                    if (values[index] == null || values[index] == '') {
-                        if (parseInt(input) > 1 && parseInt(input) < 10) {
-                            values[index] = '0' + input;
-                            index++;
-                            return true;
-                        } else if (parseInt(input) < 10) {
-                            values[index] = input;
-                            return true;
-                        } else {
-                            return false;
-                        }
-                    } else {
-                        if (values[index] == 1 && values[index] < 2 && parseInt(input) < 3) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else if (values[index] == 0 && values[index] < 10) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else {
-                            return false
-                        }
-                    }
-                } else if (pieces[index] == 'dd') {
-                    if (values[index] == null || values[index] == '') {
-                        if (parseInt(input) > 3 && parseInt(input) < 10) {
-                            values[index] = '0' + input;
-                            index++;
-                            return true;
-                        } else if (parseInt(input) < 10) {
-                            values[index] = input;
-                            return true;
-                        } else {
-                            return false;
-                        }
-                    } else {
-                        if (values[index] == 3 && parseInt(input) < 2) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else if (values[index] < 3 && parseInt(input) < 10) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else {
-                            return false
-                        }
-                    }
-                } else if (pieces[index] == 'hh24') {
-                    if (values[index] == null || values[index] == '') {
-                        if (parseInt(input) > 2 && parseInt(input) < 10) {
-                            values[index] = '0' + input;
-                            index++;
-                            return true;
-                        } else if (parseInt(input) < 10) {
-                            values[index] = input;
-                            return true;
-                        } else {
-                            return false;
-                        }
-                    } else {
-                        if (values[index] == 2 && parseInt(input) < 4) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else if (values[index] < 2 && parseInt(input) < 10) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else {
-                            return false
-                        }
-                    }
-                } else if (pieces[index] == 'hh') {
-                    if (values[index] == null || values[index] == '') {
-                        if (parseInt(input) > 1 && parseInt(input) < 10) {
-                            values[index] = '0' + input;
-                            index++;
-                            return true;
-                        } else if (parseInt(input) < 10) {
-                            values[index] = input;
-                            return true;
-                        } else {
-                            return false;
-                        }
-                    } else {
-                        if (values[index] == 1 && parseInt(input) < 3) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else if (values[index] < 1 && parseInt(input) < 10) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                        } else {
-                            return false
-                        }
-                    }
-                } else if (pieces[index] == 'mi' || pieces[index] == 'ss') {
-                    if (values[index] == null || values[index] == '') {
-                        if (parseInt(input) > 5 && parseInt(input) < 10) {
-                            values[index] = '0' + input;
-                            index++;
-                            return true;
-                        } else if (parseInt(input) < 10) {
-                            values[index] = input;
-                            return true;
-                        } else {
-                            return false;
-                        }
-                    } else {
-                        if (parseInt(input) < 10) {
-                            values[index] += input;
-                            index++;
-                            return true;
-                         } else {
-                            return false
-                        }
-                    }
-                } else if (pieces[index] == 'yy' || pieces[index] == 'yyyy') {
-                    if (parseInt(input) < 10) {
-                        if (values[index] == null || values[index] == '') {
-                            values[index] = input;
-                        } else {
-                            values[index] += input;
-                        }
-                        
-                        if (values[index].length == pieces[index].length) {
-                            index++;
-                        }
-                        return true;
-                    } else {
-                        return false;
-                    }
-                } else if (pieces[index] == '#' || pieces[index] == '#.##' || pieces[index] == '#,##') {
-                    if (input.match(/[0-9]/g)) {
-                        if (pieces[index] == '#.##') {
-                            var separator = '.';
-                        } else if (pieces[index] == '#,##') {
-                            var separator = ',';
-                        } else {
-                            var separator = '';
-                        }
-                        if (values[index] == null || values[index] == '') {
-                            values[index] = input;
-                        } else {
-                            values[index] += input;
-                            if (separator) {
-                                values[index] = values[index].match(/[0-9]/g).join('');
-                                var t = [];
-                                var s = 0;
-                                for (var j = values[index].length - 1; j >= 0 ; j--) {
-                                    t.push(values[index][j]);
-                                    s++;
-                                    if (! (s % 3)) {
-                                        t.push(separator);
-                                    }
-                                }
-                                t = t.reverse();
-                                values[index] = t.join('');
-                                if (values[index].substr(0,1) == separator) {
-                                    values[index] = values[index].substr(1);
-                                } 
-                            }
-                        }
-                        return true;
-                    } else {
-                        if (pieces[index] == '#.##' && input == '.') {
-                            // Do nothing
-                        } else if (pieces[index] == '#,##' && input == ',') {
-                            // Do nothing
-                        } else {
-                            if (values[index]) {
-                                index++;
-                                if (pieces[index]) {
-                                    if (pieces[index] == input) {
-                                        values[index] = input;
-                                        return true;
-                                    } else {
-                                        if (pieces[index] == '0' && pieces[index+1] == input) {
-                                            index++;
-                                            values[index] = input;
-                                            return true;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-    
-                        return false;
-                    }
-                } else if (pieces[index] == '0') {
-                    if (input.match(/[0-9]/g)) {
-                        values[index] = input;
-                        index++;
-                        return true;
-                    } else {
-                        return false;
-                    }
-                } else if (pieces[index] == 'a') {
-                    if (input.match(/[a-zA-Z]/g)) {
-                        values[index] = input;
-                        index++;
-                        return true;
-                    } else {
-                        return false;
-                    }
-                } else {
-                    if (pieces[index] != null) {
-                        if (pieces[index] == '\\a') {
-                            var v = 'a';
-                        } else if (pieces[index] == '\\0') {
-                            var v = '0';
-                        } else {
-                            var v = pieces[index];
-                        }
-                        values[index] = v;
-                        if (input == v) {
-                            index++;
-                            return true;
-                        }
-                    }
-                }
-    
-                index++;
-            } while (pieces[index]);
-        }
-    
-        /**
-         * Create tokens for the mask
-         */
-        obj.prepare = function(mask) {
-            pieces = [];
-            for (var i = 0; i < mask.length; i++) {
-                if (mask[i].match(/[0-9]|[a-z]|\\/g)) {
-                    if (mask[i] == 'y' && mask[i+1] == 'y' && mask[i+2] == 'y' && mask[i+3] == 'y') {
-                        pieces.push('yyyy');
-                        i += 3;
-                    } else if (mask[i] == 'y' && mask[i+1] == 'y') {
-                        pieces.push('yy');
-                        i++;
-                    } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm' && mask[i+3] == 'm') {
-                        pieces.push('mmmm');
-                        i += 3;
-                    } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm') {
-                        pieces.push('mmm');
-                        i += 2;
-                    } else if (mask[i] == 'm' && mask[i+1] == 'm') {
-                        pieces.push('mm');
-                        i++;
-                    } else if (mask[i] == 'd' && mask[i+1] == 'd') {
-                        pieces.push('dd');
-                        i++;
-                    } else if (mask[i] == 'h' && mask[i+1] == 'h' && mask[i+2] == '2' && mask[i+3] == '4') {
-                        pieces.push('hh24');
-                        i += 3;
-                    } else if (mask[i] == 'h' && mask[i+1] == 'h') {
-                        pieces.push('hh');
-                        i++;
-                    } else if (mask[i] == 'm' && mask[i+1] == 'i') {
-                        pieces.push('mi');
-                        i++;
-                    } else if (mask[i] == 's' && mask[i+1] == 's') {
-                        pieces.push('ss');
-                        i++;
-                    } else if (mask[i] == 'a' && mask[i+1] == 'm') {
-                        pieces.push('am');
-                        i++;
-                    } else if (mask[i] == 'p' && mask[i+1] == 'm') {
-                        pieces.push('pm');
-                        i++;
-                    } else if (mask[i] == '\\' && mask[i+1] == '0') {
-                        pieces.push('\\0');
-                        i++;
-                    } else if (mask[i] == '\\' && mask[i+1] == 'a') {
-                        pieces.push('\\a');
-                        i++;
-                    } else {
-                        pieces.push(mask[i]);
-                    }
-                } else {
-                    if (mask[i] == '#' && mask[i+1] == '.' && mask[i+2] == '#' && mask[i+3] == '#') {
-                        pieces.push('#.##');
-                        i += 3;
-                    } else if (mask[i] == '#' && mask[i+1] == ',' && mask[i+2] == '#' && mask[i+3] == '#') {
-                        pieces.push('#,##');
-                        i += 3;
-                    } else {
-                        pieces.push(mask[i]);
-                    }
-                }
-            }
-        }
-    
-        /** 
-         * Thanks for the collaboration
-         */
-        obj.fromKeyCode = function(e) {
-            var _to_ascii = {
-                '188': '44',
-                '109': '45',
-                '190': '46',
-                '191': '47',
-                '192': '96',
-                '220': '92',
-                '222': '39',
-                '221': '93',
-                '219': '91',
-                '173': '45',
-                '187': '61', //IE Key codes
-                '186': '59', //IE Key codes
-                '189': '45'  //IE Key codes
-            }
-    
-            var shiftUps = {
-                "96": "~",
-                "49": "!",
-                "50": "@",
-                "51": "#",
-                "52": "$",
-                "53": "%",
-                "54": "^",
-                "55": "&",
-                "56": "*",
-                "57": "(",
-                "48": ")",
-                "45": "_",
-                "61": "+",
-                "91": "{",
-                "93": "}",
-                "92": "|",
-                "59": ":",
-                "39": "\"",
-                "44": "<",
-                "46": ">",
-                "47": "?"
-            };
-    
-            var c = e.which;
-    
-            if (_to_ascii.hasOwnProperty(c)) {
-                c = _to_ascii[c];
-            }
-    
-            if (!e.shiftKey && (c >= 65 && c <= 90)) {
-                c = String.fromCharCode(c + 32);
-            } else if (e.shiftKey && shiftUps.hasOwnProperty(c)) {
-                c = shiftUps[c];
-            } else if (96 <= c && c <= 105) {
-                c = String.fromCharCode(c - 48);
-            } else {
-                c = String.fromCharCode(c);
-            }
-    
-            return c;
-        }
-    
-        return obj;
-    })();
-    
-    /**
-     * (c) jSuites modal
-     * https://github.com/paulhodel/jsuites
-     *
-     * @author: Paul Hodel <paul.hodel@gmail.com>
-     * @description: Modal
-     */
-    
-    jSuites.modal = (function(el, options) {
-        var obj = {};
-        obj.options = {};
-    
-        // Default configuration
-        var defaults = {
-            // Events
-            onopen:null,
-            onclose:null,
-            closed:false,
-            width:null,
-            height:null,
-            title:null,
-        };
-    
-        // Loop through our object
-        for (var property in defaults) {
-            if (options && options.hasOwnProperty(property)) {
-                obj.options[property] = options[property];
-            } else {
-                obj.options[property] = defaults[property];
-            }
-        }
-    
-        el.classList.add('jmodal');
-    
-        if (obj.options.title) {
-            el.setAttribute('title', obj.options.title);
-        }
-        if (obj.options.width) {
-            el.style.width = obj.options.width;
-        }
-        if (obj.options.height) {
-            el.style.height = obj.options.height;
-        }
-    
-        var container = document.createElement('div');
-        for (var i = 0; i < el.children.length; i++) {
-            container.appendChild(el.children[i]);
-        }
-        el.appendChild(container);
-    
-        // Title
-        if (! el.getAttribute('title')) {
-            el.classList.add('no-title');
-        }
-    
-        if (! obj.options.closed) {
-            el.style.display = 'block';
-        }
-    
-        obj.open = function() {
-            el.style.display = 'block';
-    
-            if (typeof(obj.options.onopen) == 'function') {
-                obj.options.onopen(el);
-            }
-            // Backdrop
-            document.body.appendChild(jSuites.backdrop);
-    
-            // Current
-            jSuites.modal.current = el;
-        }
-    
-        obj.close = function() {
-            el.style.display = 'none';
-    
-            if (typeof(obj.options.onclose) == 'function') {
-                obj.options.onclose(el);
-            }
-            // Backdrop
-            jSuites.backdrop.remove();
-    
-            // Current
-            jSuites.modal.current = null;
-        }
-    
-        if (! jSuites.modal.hasEvents) {
-            jSuites.modal.current = el;
-    
-            document.addEventListener('mousedown', jSuites.modal.mouseDownControls);
-            document.addEventListener('mousemove', jSuites.modal.mouseMoveControls);
-            document.addEventListener('mouseup', jSuites.modal.mouseUpControls);
-    
-            jSuites.modal.hasEvents = true;
-        }
-    
-        // Keep object available from the node
-        el.modal = obj;
-    
-        return obj;
-    });
-    
-    jSuites.modal.current = null;
-    jSuites.modal.position = null;
-    
-    jSuites.modal.mouseUpControls = function(e) {
-        if (jSuites.modal.current) {
-            jSuites.modal.current.style.cursor = 'auto';
-        }
-        jSuites.modal.position = null;
-    }
-    
-    jSuites.modal.mouseMoveControls = function(e) {
-        if (jSuites.modal.current && jSuites.modal.position) {
-            if (e.which == 1 || e.which == 3) {
-                var position = jSuites.modal.position;
-                jSuites.modal.current.style.top = (position[1] + (e.clientY - position[3]) + (position[5] / 2)) + 'px';
-                jSuites.modal.current.style.left = (position[0] + (e.clientX - position[2]) + (position[4] / 2)) + 'px';
-                jSuites.modal.current.style.cursor = 'move';
-            } else {
-                jSuites.modal.current.style.cursor = 'auto';
-            }
-        }
-    }
-    
-    jSuites.modal.mouseDownControls = function(e) {
-        jSuites.modal.position = [];
-    
-        if (e.target.classList.contains('jmodal')) {
-            setTimeout(function() {
-    
-                var rect = e.target.getBoundingClientRect();
-                if (rect.width - (e.clientX - rect.left) < 50 && e.clientY - rect.top < 50) {
-                    e.target.modal.close();
-                } else {
-                    if (e.target.getAttribute('title') && e.clientY - rect.top < 50) {
-                        if (document.selection) {
-                            document.selection.empty();
-                        } else if ( window.getSelection ) {
-                            window.getSelection().removeAllRanges();
-                        }
-    
-                        jSuites.modal.position = [
-                            rect.left,
-                            rect.top,
-                            e.clientX,
-                            e.clientY,
-                            rect.width,
-                            rect.height,
-                        ];
-                    }
-                }
-            }, 100);
-        }
-    }
-
-    return jSuites;
-
+    })();
+    
+    /**
+     * (c) jTools Input Mask
+     * https://github.com/paulhodel/jtools
+     *
+     * @author: Paul Hodel <paul.hodel@gmail.com>
+     * @description: Input mask
+     */
+    
+    jSuites.mask = (function() {
+        var obj = {};
+        var index = 0;
+        var values = []
+        var pieces = [];
+    
+        obj.run = function(value, mask, decimal) {
+            if (value && mask) {
+                if (! decimal) {
+                    decimal = '.';
+                }
+                if (value == Number(value)) {
+                    var number = (''+value).split('.');
+                    var value = number[0];
+                    var valueDecimal = number[1];
+                } else {
+                    value = '' + value;
+                }
+                index = 0;
+                values = [];
+                // Create mask token
+                obj.prepare(mask);
+                // Current value
+                var currentValue = value;
+                if (currentValue) {
+                    // Checking current value
+                    for (var i = 0; i < currentValue.length; i++) {
+                        if (currentValue[i] != null) {
+                            obj.process(currentValue[i]);
+                        }
+                    }
+                }
+                if (valueDecimal) {
+                    obj.process(decimal);
+                    var currentValue = valueDecimal;
+                    if (currentValue) {
+                        // Checking current value
+                        for (var i = 0; i < currentValue.length; i++) {
+                            if (currentValue[i] != null) {
+                                obj.process(currentValue[i]);
+                            }
+                        }
+                    }
+                }
+                // Formatted value
+                return values.join('');
+            } else {
+                return '';
+            }
+        }
+    
+        obj.apply = function(e) {
+            var mask = e.target.getAttribute('data-mask');
+            if (mask && e.keyCode > 46) {
+                index = 0;
+                values = [];
+                // Create mask token
+                obj.prepare(mask);
+                // Current value
+                var currentValue = e.target.value;
+                if (currentValue) {
+                    // Checking current value
+                    for (var i = 0; i < currentValue.length; i++) {
+                        if (currentValue[i] != null) {
+                            obj.process(currentValue[i]);
+                        }
+                    }
+                }
+                // New input
+                obj.process(obj.fromKeyCode(e));
+                // Update value to the element
+                e.target.value = values.join('');
+                if (pieces.length == values.length && pieces[pieces.length-1].length == values[values.length-1].length) {
+                    e.target.setAttribute('data-completed', 'true');
+                } else {
+                    e.target.setAttribute('data-completed', 'false');
+                }
+                // Prevent default
+                e.preventDefault();
+            }
+        }
+    
+        /**
+         * Process inputs and save to values
+         */
+        obj.process = function(input) {
+            do {
+                if (pieces[index] == 'mm') {
+                    if (values[index] == null || values[index] == '') {
+                        if (parseInt(input) > 1 && parseInt(input) < 10) {
+                            values[index] = '0' + input;
+                            index++;
+                            return true;
+                        } else if (parseInt(input) < 10) {
+                            values[index] = input;
+                            return true;
+                        } else {
+                            return false;
+                        }
+                    } else {
+                        if (values[index] == 1 && values[index] < 2 && parseInt(input) < 3) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else if (values[index] == 0 && values[index] < 10) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else {
+                            return false
+                        }
+                    }
+                } else if (pieces[index] == 'dd') {
+                    if (values[index] == null || values[index] == '') {
+                        if (parseInt(input) > 3 && parseInt(input) < 10) {
+                            values[index] = '0' + input;
+                            index++;
+                            return true;
+                        } else if (parseInt(input) < 10) {
+                            values[index] = input;
+                            return true;
+                        } else {
+                            return false;
+                        }
+                    } else {
+                        if (values[index] == 3 && parseInt(input) < 2) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else if (values[index] < 3 && parseInt(input) < 10) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else {
+                            return false
+                        }
+                    }
+                } else if (pieces[index] == 'hh24') {
+                    if (values[index] == null || values[index] == '') {
+                        if (parseInt(input) > 2 && parseInt(input) < 10) {
+                            values[index] = '0' + input;
+                            index++;
+                            return true;
+                        } else if (parseInt(input) < 10) {
+                            values[index] = input;
+                            return true;
+                        } else {
+                            return false;
+                        }
+                    } else {
+                        if (values[index] == 2 && parseInt(input) < 4) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else if (values[index] < 2 && parseInt(input) < 10) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else {
+                            return false
+                        }
+                    }
+                } else if (pieces[index] == 'hh') {
+                    if (values[index] == null || values[index] == '') {
+                        if (parseInt(input) > 1 && parseInt(input) < 10) {
+                            values[index] = '0' + input;
+                            index++;
+                            return true;
+                        } else if (parseInt(input) < 10) {
+                            values[index] = input;
+                            return true;
+                        } else {
+                            return false;
+                        }
+                    } else {
+                        if (values[index] == 1 && parseInt(input) < 3) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else if (values[index] < 1 && parseInt(input) < 10) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                        } else {
+                            return false
+                        }
+                    }
+                } else if (pieces[index] == 'mi' || pieces[index] == 'ss') {
+                    if (values[index] == null || values[index] == '') {
+                        if (parseInt(input) > 5 && parseInt(input) < 10) {
+                            values[index] = '0' + input;
+                            index++;
+                            return true;
+                        } else if (parseInt(input) < 10) {
+                            values[index] = input;
+                            return true;
+                        } else {
+                            return false;
+                        }
+                    } else {
+                        if (parseInt(input) < 10) {
+                            values[index] += input;
+                            index++;
+                            return true;
+                         } else {
+                            return false
+                        }
+                    }
+                } else if (pieces[index] == 'yy' || pieces[index] == 'yyyy') {
+                    if (parseInt(input) < 10) {
+                        if (values[index] == null || values[index] == '') {
+                            values[index] = input;
+                        } else {
+                            values[index] += input;
+                        }
+                        
+                        if (values[index].length == pieces[index].length) {
+                            index++;
+                        }
+                        return true;
+                    } else {
+                        return false;
+                    }
+                } else if (pieces[index] == '#' || pieces[index] == '#.##' || pieces[index] == '#,##') {
+                    if (input.match(/[0-9]/g)) {
+                        if (pieces[index] == '#.##') {
+                            var separator = '.';
+                        } else if (pieces[index] == '#,##') {
+                            var separator = ',';
+                        } else {
+                            var separator = '';
+                        }
+                        if (values[index] == null || values[index] == '') {
+                            values[index] = input;
+                        } else {
+                            values[index] += input;
+                            if (separator) {
+                                values[index] = values[index].match(/[0-9]/g).join('');
+                                var t = [];
+                                var s = 0;
+                                for (var j = values[index].length - 1; j >= 0 ; j--) {
+                                    t.push(values[index][j]);
+                                    s++;
+                                    if (! (s % 3)) {
+                                        t.push(separator);
+                                    }
+                                }
+                                t = t.reverse();
+                                values[index] = t.join('');
+                                if (values[index].substr(0,1) == separator) {
+                                    values[index] = values[index].substr(1);
+                                } 
+                            }
+                        }
+                        return true;
+                    } else {
+                        if (pieces[index] == '#.##' && input == '.') {
+                            // Do nothing
+                        } else if (pieces[index] == '#,##' && input == ',') {
+                            // Do nothing
+                        } else {
+                            if (values[index]) {
+                                index++;
+                                if (pieces[index]) {
+                                    if (pieces[index] == input) {
+                                        values[index] = input;
+                                        return true;
+                                    } else {
+                                        if (pieces[index] == '0' && pieces[index+1] == input) {
+                                            index++;
+                                            values[index] = input;
+                                            return true;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+    
+                        return false;
+                    }
+                } else if (pieces[index] == '0') {
+                    if (input.match(/[0-9]/g)) {
+                        values[index] = input;
+                        index++;
+                        return true;
+                    } else {
+                        return false;
+                    }
+                } else if (pieces[index] == 'a') {
+                    if (input.match(/[a-zA-Z]/g)) {
+                        values[index] = input;
+                        index++;
+                        return true;
+                    } else {
+                        return false;
+                    }
+                } else {
+                    if (pieces[index] != null) {
+                        if (pieces[index] == '\\a') {
+                            var v = 'a';
+                        } else if (pieces[index] == '\\0') {
+                            var v = '0';
+                        } else {
+                            var v = pieces[index];
+                        }
+                        values[index] = v;
+                        if (input == v) {
+                            index++;
+                            return true;
+                        }
+                    }
+                }
+    
+                index++;
+            } while (pieces[index]);
+        }
+    
+        /**
+         * Create tokens for the mask
+         */
+        obj.prepare = function(mask) {
+            pieces = [];
+            for (var i = 0; i < mask.length; i++) {
+                if (mask[i].match(/[0-9]|[a-z]|\\/g)) {
+                    if (mask[i] == 'y' && mask[i+1] == 'y' && mask[i+2] == 'y' && mask[i+3] == 'y') {
+                        pieces.push('yyyy');
+                        i += 3;
+                    } else if (mask[i] == 'y' && mask[i+1] == 'y') {
+                        pieces.push('yy');
+                        i++;
+                    } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm' && mask[i+3] == 'm') {
+                        pieces.push('mmmm');
+                        i += 3;
+                    } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm') {
+                        pieces.push('mmm');
+                        i += 2;
+                    } else if (mask[i] == 'm' && mask[i+1] == 'm') {
+                        pieces.push('mm');
+                        i++;
+                    } else if (mask[i] == 'd' && mask[i+1] == 'd') {
+                        pieces.push('dd');
+                        i++;
+                    } else if (mask[i] == 'h' && mask[i+1] == 'h' && mask[i+2] == '2' && mask[i+3] == '4') {
+                        pieces.push('hh24');
+                        i += 3;
+                    } else if (mask[i] == 'h' && mask[i+1] == 'h') {
+                        pieces.push('hh');
+                        i++;
+                    } else if (mask[i] == 'm' && mask[i+1] == 'i') {
+                        pieces.push('mi');
+                        i++;
+                    } else if (mask[i] == 's' && mask[i+1] == 's') {
+                        pieces.push('ss');
+                        i++;
+                    } else if (mask[i] == 'a' && mask[i+1] == 'm') {
+                        pieces.push('am');
+                        i++;
+                    } else if (mask[i] == 'p' && mask[i+1] == 'm') {
+                        pieces.push('pm');
+                        i++;
+                    } else if (mask[i] == '\\' && mask[i+1] == '0') {
+                        pieces.push('\\0');
+                        i++;
+                    } else if (mask[i] == '\\' && mask[i+1] == 'a') {
+                        pieces.push('\\a');
+                        i++;
+                    } else {
+                        pieces.push(mask[i]);
+                    }
+                } else {
+                    if (mask[i] == '#' && mask[i+1] == '.' && mask[i+2] == '#' && mask[i+3] == '#') {
+                        pieces.push('#.##');
+                        i += 3;
+                    } else if (mask[i] == '#' && mask[i+1] == ',' && mask[i+2] == '#' && mask[i+3] == '#') {
+                        pieces.push('#,##');
+                        i += 3;
+                    } else {
+                        pieces.push(mask[i]);
+                    }
+                }
+            }
+        }
+    
+        /** 
+         * Thanks for the collaboration
+         */
+        obj.fromKeyCode = function(e) {
+            var _to_ascii = {
+                '188': '44',
+                '109': '45',
+                '190': '46',
+                '191': '47',
+                '192': '96',
+                '220': '92',
+                '222': '39',
+                '221': '93',
+                '219': '91',
+                '173': '45',
+                '187': '61', //IE Key codes
+                '186': '59', //IE Key codes
+                '189': '45'  //IE Key codes
+            }
+    
+            var shiftUps = {
+                "96": "~",
+                "49": "!",
+                "50": "@",
+                "51": "#",
+                "52": "$",
+                "53": "%",
+                "54": "^",
+                "55": "&",
+                "56": "*",
+                "57": "(",
+                "48": ")",
+                "45": "_",
+                "61": "+",
+                "91": "{",
+                "93": "}",
+                "92": "|",
+                "59": ":",
+                "39": "\"",
+                "44": "<",
+                "46": ">",
+                "47": "?"
+            };
+    
+            var c = e.which;
+    
+            if (_to_ascii.hasOwnProperty(c)) {
+                c = _to_ascii[c];
+            }
+    
+            if (!e.shiftKey && (c >= 65 && c <= 90)) {
+                c = String.fromCharCode(c + 32);
+            } else if (e.shiftKey && shiftUps.hasOwnProperty(c)) {
+                c = shiftUps[c];
+            } else if (96 <= c && c <= 105) {
+                c = String.fromCharCode(c - 48);
+            } else {
+                c = String.fromCharCode(c);
+            }
+    
+            return c;
+        }
+    
+        return obj;
+    })();
+    
+    /**
+     * (c) jSuites modal
+     * https://github.com/paulhodel/jsuites
+     *
+     * @author: Paul Hodel <paul.hodel@gmail.com>
+     * @description: Modal
+     */
+    
+    jSuites.modal = (function(el, options) {
+        var obj = {};
+        obj.options = {};
+    
+        // Default configuration
+        var defaults = {
+            // Events
+            onopen:null,
+            onclose:null,
+            closed:false,
+            width:null,
+            height:null,
+            title:null,
+        };
+    
+        // Loop through our object
+        for (var property in defaults) {
+            if (options && options.hasOwnProperty(property)) {
+                obj.options[property] = options[property];
+            } else {
+                obj.options[property] = defaults[property];
+            }
+        }
+    
+        el.classList.add('jmodal');
+    
+        if (obj.options.title) {
+            el.setAttribute('title', obj.options.title);
+        }
+        if (obj.options.width) {
+            el.style.width = obj.options.width;
+        }
+        if (obj.options.height) {
+            el.style.height = obj.options.height;
+        }
+    
+        var container = document.createElement('div');
+        for (var i = 0; i < el.children.length; i++) {
+            container.appendChild(el.children[i]);
+        }
+        el.appendChild(container);
+    
+        // Title
+        if (! el.getAttribute('title')) {
+            el.classList.add('no-title');
+        }
+    
+        if (! obj.options.closed) {
+            el.style.display = 'block';
+        }
+    
+        obj.open = function() {
+            el.style.display = 'block';
+    
+            if (typeof(obj.options.onopen) == 'function') {
+                obj.options.onopen(el);
+            }
+            // Backdrop
+            document.body.appendChild(jSuites.backdrop);
+    
+            // Current
+            jSuites.modal.current = el;
+        }
+    
+        obj.close = function() {
+            el.style.display = 'none';
+    
+            if (typeof(obj.options.onclose) == 'function') {
+                obj.options.onclose(el);
+            }
+            // Backdrop
+            jSuites.backdrop.remove();
+    
+            // Current
+            jSuites.modal.current = null;
+        }
+    
+        if (! jSuites.modal.hasEvents) {
+            jSuites.modal.current = el;
+    
+            document.addEventListener('mousedown', jSuites.modal.mouseDownControls);
+            document.addEventListener('mousemove', jSuites.modal.mouseMoveControls);
+            document.addEventListener('mouseup', jSuites.modal.mouseUpControls);
+    
+            jSuites.modal.hasEvents = true;
+        }
+    
+        // Keep object available from the node
+        el.modal = obj;
+    
+        return obj;
+    });
+    
+    jSuites.modal.current = null;
+    jSuites.modal.position = null;
+    
+    jSuites.modal.mouseUpControls = function(e) {
+        if (jSuites.modal.current) {
+            jSuites.modal.current.style.cursor = 'auto';
+        }
+        jSuites.modal.position = null;
+    }
+    
+    jSuites.modal.mouseMoveControls = function(e) {
+        if (jSuites.modal.current && jSuites.modal.position) {
+            if (e.which == 1 || e.which == 3) {
+                var position = jSuites.modal.position;
+                jSuites.modal.current.style.top = (position[1] + (e.clientY - position[3]) + (position[5] / 2)) + 'px';
+                jSuites.modal.current.style.left = (position[0] + (e.clientX - position[2]) + (position[4] / 2)) + 'px';
+                jSuites.modal.current.style.cursor = 'move';
+            } else {
+                jSuites.modal.current.style.cursor = 'auto';
+            }
+        }
+    }
+    
+    jSuites.modal.mouseDownControls = function(e) {
+        jSuites.modal.position = [];
+    
+        if (e.target.classList.contains('jmodal')) {
+            setTimeout(function() {
+    
+                var rect = e.target.getBoundingClientRect();
+                if (rect.width - (e.clientX - rect.left) < 50 && e.clientY - rect.top < 50) {
+                    e.target.modal.close();
+                } else {
+                    if (e.target.getAttribute('title') && e.clientY - rect.top < 50) {
+                        if (document.selection) {
+                            document.selection.empty();
+                        } else if ( window.getSelection ) {
+                            window.getSelection().removeAllRanges();
+                        }
+    
+                        jSuites.modal.position = [
+                            rect.left,
+                            rect.top,
+                            e.clientX,
+                            e.clientY,
+                            rect.width,
+                            rect.height,
+                        ];
+                    }
+                }
+            }, 100);
+        }
+    }
+
+    return jSuites;
+
 })));
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2 b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/core-plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/core-plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/core-plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/core-plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties
diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt
similarity index 97%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt
index 37632244cd498ae2093f51b3ae8c2b975bf9f4e2..6e9a4bd1c0c96614a118cc7df8f371dedd5e2441 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt
@@ -1,34 +1,34 @@
-Copyright (c) 2006-2019, the HTMLCleaner project
-All rights reserved.
-
-Redistribution and use of this software 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.
-
-* The name of HtmlCleaner may not 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.
-
-Report any issues and contact the developers through Sourceforge at
+Copyright (c) 2006-2019, the HTMLCleaner project
+All rights reserved.
+
+Redistribution and use of this software 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.
+
+* The name of HtmlCleaner may not 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.
+
+Report any issues and contact the developers through Sourceforge at
 https://sourceforge.net/projects/htmlcleaner/
\ No newline at end of file
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta
similarity index 98%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta
index 190e2431671ab6769c9d1564b5594ec25a1d5514..ee4455e26b4088ea22fb1d4d8fca9850285e1716 100644
--- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta
@@ -1,72 +1,72 @@
->Act1_mkokappa  (5632 bp)
-GACGTCGAAAGAACGCGGCATTAGCAACATTTGCGAAGCGAACGATTTTGCGAACTGCTATTAATTAActctGGCGCGcc
-actactttttggaactcttgttgttctttggagttcaatgcgtccatctttacagtcctgtcttattgttcttgatttgt
-gccccgtaaaatactgttacttggttctggcgaggtattggatagttcctttttataaaggccatgaagGtttttctttc
-caattttttttttttcgtcattatagaaatcattacgaccgagattcccggCATATGGTAATAACTGATATAATTAAATT
-GAAGCTCTAATTTGTGAGTTTAGTATACATGCATTTACTTATAATACAGTTTTTTAGTTTTGCTGGCCGCATCTTCTCAA
-ATATGCTTCCCAGCCTGCTTTTCTGTAACGTTCACCCTCTACCTTAGCATCCCTTCCCTTTGCAAATAGTCCTCTTCCAA
-CAATAATAATGTCAGATCCTGTAGAGACCACATCATCCACGGTTCTATACTGTTGACCCAATGCGTCTCCCTTGTCATCT
-AAACCCACACCGGGTGTCATAATCAACCAATCGTAACCTTCATCTCTTCCACCCATGTCTCTTTGAGCAATAAAGCCGAT
-AACAAAATCTTTGTCGCTCTTCGCAATGTCAACAGTACCCTTAGTATATTCTCCAGTAGCTAGGGAGCCCTTGCATGACA
-ATTCTGCTAACATCAAAAGGCCTCTAGGTTCCTTTGTTACTTCTTCCGCCGCCTGCTTCAAACCGCTAACAATACCTGGG
-CCCACCACACCGTGTGCATTCGTAATGTCTGCCCATTCTGCTATTCTGTATACACACGCAGAGTACTGCAATTTGACTGT
-ATTACCAATGTCAGCAAATTTTCTGTCTTCGAAGAGTAAAAAATTGTACTTGGCGGATAATGCCTTTAGCGGCTTAACTG
-TGCCCTCCATGGAAAAATCAGTCAAGAGATCCACATGTGTTTTTAGTAAACAAATTTTGGGACCTAATGCTTCAACTAAC
-TCCAGTAATTCCTTGGTGGTACGAACATCCAATGAAGCACACAAGTTTGTTTGCTTTTCGTGCATGATATTAAATAGCTT
-GGCAGCAACAGGACTAGGATGAGTAGCAGCACGTTCCTTATATGTAGCTTTCGACATGATTTATCTTCGTTTCCTGCACG
-TTTTTGTTCTGTGCAGTTGGGTTAAGAATACTGGGCAATTTCATGTTTCTTCAACACCACCTATGCGTATATATACCAAT
-CTAAGTCTGTGCTCCTTCCTTCGTTCTTCCTTCTGCTCGGAGATTACCGAATCAAAAAAATTTCAAAGAAACCGGAATCA
-AAAAAAAGAACAAAAAAAAAAAAGATGAATGAAAAGCGATCGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGG
-TTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAATTGTAATACGACTCACTATAGGGCGAATTGGAGAAACAGAA
-TAATATATAAACCTGTATAATATAACCTTGAAGACTATATTTCTTTTCGCGGCCGCCTATAGGGCGAATTGGAGCTCCAC
-CGCGGTGGCGGCCGCTCTAGAGAAGCGGGTAAGCTGCCACAGCAATTAATGCACAACATTTAACCTACATTCTTCCTTAT
-CGGATCgTCAAAACCCTTAAAAAgATATGCCTCACCCTAACATATTTTCCAATTAACCCTCAATATTTCTCTGTCACCCG
-GCCTCTATTTTCCATTTTCTTCTTTACCCGCCACGCGTTTTTTTCTTTCAAATTTTTTTCTTCCTTCTTCTTTTTCTTCC
-ACGTCCTCTTGCATAAATAAATAAACCGTTTTGAAACCAAACTCGCCTCTCTCTCTCCTTTTTGAAATATTTTTGGGTTT
-GTTTGATCCTTTCCTTCCCAATCTCTCTTGTTTAATATATATTCATTTATATCACGCTCTCTTTTTATCTTCCTTTTTTT
-CCTCTCTCTTGTATTCTTCCTTCCCCTTTCTACTCAAACCAAGAAGAAAAAGAAAAGGTCAATCTTTGTTAAAGAATAGG
-ATCTTCTACTACATCAGCTTTTAGATTTTTCACGCTTACTGCTTTTTTCTTCCCAAGATCGAAAATTTACTGAATTAACA
-ACTAGTGGATCCCCCGGGCTGCAGGAATTCGATATCAagctTATGAGATCTGTTTCTGTTATTAAGCCAGAAATGAAGAT
-GAGATATTACATGGATGGTTCTGTTAATGGTCATGAATTTACTATTGAAGGTGAAGGTACTGGTAGACCATATGAAGGTC
-ATCAAGAAATGACTTTGAGAGTTACTATGGCTGAAGGTGGTCCAATGCCATTTGCTTTTGATTTGGTTTCTCATGTTTTT
-TGTTACGGTCATAGAGTTTTTACAAAGTACCCAGAAGAAATTCCAGATTACTTTAAGCAAGCATTTCCAGAAGGTTTGTC
-TTGGGAAAGATCATTGGAATTTGAAGATGGTGGTTCTGCTTCTGTTTCTGCTCATATTTCTTTGAGAGGTAACACTTTTT
-ACCATAAGTCTAAGTTTACTGGTGTTAATTTTCCAGCTGATGGTCCAATTATGCAAAATCAATCTGTTGATTGGGAACCA
-TCTACTGAAAAGATTACTGCTTCTGATGGTGTTTTGAAAGGTGATGTTACAATGTACTTGAAATTGGAAGGTGGTGGTAA
-TCATAAATGTCAATTCAAGACTACTTATAAAGCTGCTGAAAAGATTTTGGAAATGCCAGGTGATCATTATATTGGTCATA
-GATTGGTTAGAAAGACTGAAGGTAACATTACTGAACAAGTTGAAGATGCTGTTGCTCATTCTGGATCCTAGCtcgaGACA
-GGCCCCTTTTCCTTTGTCtATATCATGTAATTAGTTATGTCACGCTTACATTCACGCCCTCCTCCCACATCCGCTCTAAC
-CGAAAAGGAAGGAGTTAGACAACCTGAAGTCTAGGTCCCTATTTATTTTTTTTAATAGTTATGTTAGTATTAAGAACGTT
-ATTTATATTTCAAATTTTTCTTTTTTTTCTGTACAAACGCGTGTACGCATGTAACATTATACTGAAAACCTTGCTTGAGA
-AGGTTTTGGGACGCTCGAAGGCTTTAATTTGCAAGgTTCGCAGTTTACACTCTCATCGTCGCTCTCATCATCGCTTCCGT
-TGTTGTTTTCCTTAGTAGCGTCTGCTTGGTACCCAGCTTCGGCCGTATTTACAGATAACGATGTCGTTATTATATATATA
-TATATATATTGTCACTTGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTTCGAGCTTGGCGTAATCATGGTCATAG
-CTGTTTCCTGTGTGAAATTGTTATCCGCTCACAACAGCTGgatgaattgaaTagctttatggaccctgaaaccacagcca
-cattaaccttctttgatggtcaaaacttatccttcaccataaatatgcctcgcaaaaaaggtaattaacatatatagaat
-tacattatttatgaaatatcatcactatctcttagcatctttaatccttttctacatcagataacttcggtttgttatca
-tcgtctgtattgtcatcaattggCGCGCCtctcCCTGCAGGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTG
-CGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCA
-CTCAAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGG
-CCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGC
-TCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCC
-TGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCT
-GTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGC
-GCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAG
-GATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGAACAG
-TATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACC
-GCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTT
-TTGTTTAAACCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAG
-GATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACA
-GTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTGACTCCCCGTC
-GTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGC
-TCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCC
-AGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACA
-GGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATC
-CCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATGGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCAC
-TCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCA
-ACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACA
-TAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGAT
-CCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAA
-ACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATA
-TTATTGAAGCATTTATCAGGGTTATTGTCTCATGAGCGGATACATATTTGAATGTATTTAGAAAAATAAACAAATAGGGG
-TTCCGCGCACATTTCCCCGAAAAGTGCCACCT
+>Act1_mkokappa  (5632 bp)
+GACGTCGAAAGAACGCGGCATTAGCAACATTTGCGAAGCGAACGATTTTGCGAACTGCTATTAATTAActctGGCGCGcc
+actactttttggaactcttgttgttctttggagttcaatgcgtccatctttacagtcctgtcttattgttcttgatttgt
+gccccgtaaaatactgttacttggttctggcgaggtattggatagttcctttttataaaggccatgaagGtttttctttc
+caattttttttttttcgtcattatagaaatcattacgaccgagattcccggCATATGGTAATAACTGATATAATTAAATT
+GAAGCTCTAATTTGTGAGTTTAGTATACATGCATTTACTTATAATACAGTTTTTTAGTTTTGCTGGCCGCATCTTCTCAA
+ATATGCTTCCCAGCCTGCTTTTCTGTAACGTTCACCCTCTACCTTAGCATCCCTTCCCTTTGCAAATAGTCCTCTTCCAA
+CAATAATAATGTCAGATCCTGTAGAGACCACATCATCCACGGTTCTATACTGTTGACCCAATGCGTCTCCCTTGTCATCT
+AAACCCACACCGGGTGTCATAATCAACCAATCGTAACCTTCATCTCTTCCACCCATGTCTCTTTGAGCAATAAAGCCGAT
+AACAAAATCTTTGTCGCTCTTCGCAATGTCAACAGTACCCTTAGTATATTCTCCAGTAGCTAGGGAGCCCTTGCATGACA
+ATTCTGCTAACATCAAAAGGCCTCTAGGTTCCTTTGTTACTTCTTCCGCCGCCTGCTTCAAACCGCTAACAATACCTGGG
+CCCACCACACCGTGTGCATTCGTAATGTCTGCCCATTCTGCTATTCTGTATACACACGCAGAGTACTGCAATTTGACTGT
+ATTACCAATGTCAGCAAATTTTCTGTCTTCGAAGAGTAAAAAATTGTACTTGGCGGATAATGCCTTTAGCGGCTTAACTG
+TGCCCTCCATGGAAAAATCAGTCAAGAGATCCACATGTGTTTTTAGTAAACAAATTTTGGGACCTAATGCTTCAACTAAC
+TCCAGTAATTCCTTGGTGGTACGAACATCCAATGAAGCACACAAGTTTGTTTGCTTTTCGTGCATGATATTAAATAGCTT
+GGCAGCAACAGGACTAGGATGAGTAGCAGCACGTTCCTTATATGTAGCTTTCGACATGATTTATCTTCGTTTCCTGCACG
+TTTTTGTTCTGTGCAGTTGGGTTAAGAATACTGGGCAATTTCATGTTTCTTCAACACCACCTATGCGTATATATACCAAT
+CTAAGTCTGTGCTCCTTCCTTCGTTCTTCCTTCTGCTCGGAGATTACCGAATCAAAAAAATTTCAAAGAAACCGGAATCA
+AAAAAAAGAACAAAAAAAAAAAAGATGAATGAAAAGCGATCGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGG
+TTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAATTGTAATACGACTCACTATAGGGCGAATTGGAGAAACAGAA
+TAATATATAAACCTGTATAATATAACCTTGAAGACTATATTTCTTTTCGCGGCCGCCTATAGGGCGAATTGGAGCTCCAC
+CGCGGTGGCGGCCGCTCTAGAGAAGCGGGTAAGCTGCCACAGCAATTAATGCACAACATTTAACCTACATTCTTCCTTAT
+CGGATCgTCAAAACCCTTAAAAAgATATGCCTCACCCTAACATATTTTCCAATTAACCCTCAATATTTCTCTGTCACCCG
+GCCTCTATTTTCCATTTTCTTCTTTACCCGCCACGCGTTTTTTTCTTTCAAATTTTTTTCTTCCTTCTTCTTTTTCTTCC
+ACGTCCTCTTGCATAAATAAATAAACCGTTTTGAAACCAAACTCGCCTCTCTCTCTCCTTTTTGAAATATTTTTGGGTTT
+GTTTGATCCTTTCCTTCCCAATCTCTCTTGTTTAATATATATTCATTTATATCACGCTCTCTTTTTATCTTCCTTTTTTT
+CCTCTCTCTTGTATTCTTCCTTCCCCTTTCTACTCAAACCAAGAAGAAAAAGAAAAGGTCAATCTTTGTTAAAGAATAGG
+ATCTTCTACTACATCAGCTTTTAGATTTTTCACGCTTACTGCTTTTTTCTTCCCAAGATCGAAAATTTACTGAATTAACA
+ACTAGTGGATCCCCCGGGCTGCAGGAATTCGATATCAagctTATGAGATCTGTTTCTGTTATTAAGCCAGAAATGAAGAT
+GAGATATTACATGGATGGTTCTGTTAATGGTCATGAATTTACTATTGAAGGTGAAGGTACTGGTAGACCATATGAAGGTC
+ATCAAGAAATGACTTTGAGAGTTACTATGGCTGAAGGTGGTCCAATGCCATTTGCTTTTGATTTGGTTTCTCATGTTTTT
+TGTTACGGTCATAGAGTTTTTACAAAGTACCCAGAAGAAATTCCAGATTACTTTAAGCAAGCATTTCCAGAAGGTTTGTC
+TTGGGAAAGATCATTGGAATTTGAAGATGGTGGTTCTGCTTCTGTTTCTGCTCATATTTCTTTGAGAGGTAACACTTTTT
+ACCATAAGTCTAAGTTTACTGGTGTTAATTTTCCAGCTGATGGTCCAATTATGCAAAATCAATCTGTTGATTGGGAACCA
+TCTACTGAAAAGATTACTGCTTCTGATGGTGTTTTGAAAGGTGATGTTACAATGTACTTGAAATTGGAAGGTGGTGGTAA
+TCATAAATGTCAATTCAAGACTACTTATAAAGCTGCTGAAAAGATTTTGGAAATGCCAGGTGATCATTATATTGGTCATA
+GATTGGTTAGAAAGACTGAAGGTAACATTACTGAACAAGTTGAAGATGCTGTTGCTCATTCTGGATCCTAGCtcgaGACA
+GGCCCCTTTTCCTTTGTCtATATCATGTAATTAGTTATGTCACGCTTACATTCACGCCCTCCTCCCACATCCGCTCTAAC
+CGAAAAGGAAGGAGTTAGACAACCTGAAGTCTAGGTCCCTATTTATTTTTTTTAATAGTTATGTTAGTATTAAGAACGTT
+ATTTATATTTCAAATTTTTCTTTTTTTTCTGTACAAACGCGTGTACGCATGTAACATTATACTGAAAACCTTGCTTGAGA
+AGGTTTTGGGACGCTCGAAGGCTTTAATTTGCAAGgTTCGCAGTTTACACTCTCATCGTCGCTCTCATCATCGCTTCCGT
+TGTTGTTTTCCTTAGTAGCGTCTGCTTGGTACCCAGCTTCGGCCGTATTTACAGATAACGATGTCGTTATTATATATATA
+TATATATATTGTCACTTGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTTCGAGCTTGGCGTAATCATGGTCATAG
+CTGTTTCCTGTGTGAAATTGTTATCCGCTCACAACAGCTGgatgaattgaaTagctttatggaccctgaaaccacagcca
+cattaaccttctttgatggtcaaaacttatccttcaccataaatatgcctcgcaaaaaaggtaattaacatatatagaat
+tacattatttatgaaatatcatcactatctcttagcatctttaatccttttctacatcagataacttcggtttgttatca
+tcgtctgtattgtcatcaattggCGCGCCtctcCCTGCAGGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTG
+CGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCA
+CTCAAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGG
+CCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGC
+TCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCC
+TGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCT
+GTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGC
+GCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAG
+GATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGAACAG
+TATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACC
+GCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTT
+TTGTTTAAACCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAG
+GATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACA
+GTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTGACTCCCCGTC
+GTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGC
+TCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCC
+AGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACA
+GGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATC
+CCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATGGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCAC
+TCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCA
+ACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACA
+TAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGAT
+CCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAA
+ACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATA
+TTATTGAAGCATTTATCAGGGTTATTGTCTCATGAGCGGATACATATTTGAATGTATTTAGAAAAATAAACAAATAGGGG
+TTCCGCGCACATTTCCCCGAAAAGTGCCACCT
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties
rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/utilities/unfreeze.sql b/ui-eln-lims/src/core-plugins/eln-lims/1/utilities/unfreeze.sql
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/utilities/unfreeze.sql
rename to ui-eln-lims/src/core-plugins/eln-lims/1/utilities/unfreeze.sql
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/10 b/ui-eln-lims/src/core-plugins/eln-lims/10
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/10
rename to ui-eln-lims/src/core-plugins/eln-lims/10
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/2 b/ui-eln-lims/src/core-plugins/eln-lims/2
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/2
rename to ui-eln-lims/src/core-plugins/eln-lims/2
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/3 b/ui-eln-lims/src/core-plugins/eln-lims/3
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/3
rename to ui-eln-lims/src/core-plugins/eln-lims/3
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/4 b/ui-eln-lims/src/core-plugins/eln-lims/4
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/4
rename to ui-eln-lims/src/core-plugins/eln-lims/4
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/5 b/ui-eln-lims/src/core-plugins/eln-lims/5
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/5
rename to ui-eln-lims/src/core-plugins/eln-lims/5
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/6 b/ui-eln-lims/src/core-plugins/eln-lims/6
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/6
rename to ui-eln-lims/src/core-plugins/eln-lims/6
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/7 b/ui-eln-lims/src/core-plugins/eln-lims/7
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/7
rename to ui-eln-lims/src/core-plugins/eln-lims/7
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/8 b/ui-eln-lims/src/core-plugins/eln-lims/8
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/8
rename to ui-eln-lims/src/core-plugins/eln-lims/8
diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/9 b/ui-eln-lims/src/core-plugins/eln-lims/9
similarity index 100%
rename from core-plugin-openbis/dist/core-plugins/eln-lims/9
rename to ui-eln-lims/src/core-plugins/eln-lims/9