aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-10-23 00:06:47 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-10-23 00:06:47 +0200
commit35830f56bc9a89c7c8c16e2a3b5a381def98ed5c (patch)
tree383af9bf114de2b16566a825c031ac302147198a
parentbashrc: alias for verbose mosh (diff)
downloadlaurent-tools-35830f56bc9a89c7c8c16e2a3b5a381def98ed5c.tar.xz
laurent-tools-35830f56bc9a89c7c8c16e2a3b5a381def98ed5c.zip
jsaccess moved to github
https://github.com/looran/jsaccess git clone https://github.com/looran/jsaccess.git
-rw-r--r--jsaccess/Makefile9
-rw-r--r--jsaccess/README.txt128
-rw-r--r--jsaccess/doc/OLD.txt2
-rw-r--r--jsaccess/doc/RESSOURCES.txt23
-rw-r--r--jsaccess/doc/put_also_not_encrypted_files.txt21
-rw-r--r--jsaccess/doc/put_your_encrypted_files_here.txt15
-rw-r--r--jsaccess/jsa/banner/README.txt8
-rw-r--r--jsaccess/jsa/index.html40
-rw-r--r--jsaccess/jsa/js-contrib/Blob.js177
-rw-r--r--jsaccess/jsa/js-contrib/FileSaver.js216
-rw-r--r--jsaccess/jsa/js-contrib/gibberish-aes.js1017
-rw-r--r--jsaccess/jsa/js-contrib/hashes.min.js7
-rw-r--r--jsaccess/jsa/js-contrib/jquery-1.10.1.min.js6
-rw-r--r--jsaccess/jsa/js-contrib/jquery.base64.js362
-rw-r--r--jsaccess/jsa/jsa.css81
-rw-r--r--jsaccess/jsa/jsa.js205
-rw-r--r--jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/caf3eefc85fc7c4ee06d38ea679318114b21d88d16
-rw-r--r--jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.html0
-rw-r--r--jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt3
-rw-r--r--jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/put_also_not_encrypted_files.txt21
-rw-r--r--jsaccess/jsa/store/index.html2
-rwxr-xr-xjsaccess/jstore.sh406
-rw-r--r--jsaccess/tests/Makefile5
-rw-r--r--jsaccess/tests/example.txt2
-rwxr-xr-xjsaccess/tests/test_store.sh76
25 files changed, 0 insertions, 2848 deletions
diff --git a/jsaccess/Makefile b/jsaccess/Makefile
deleted file mode 100644
index c8f74d9..0000000
--- a/jsaccess/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-PREFIX=/usr/local
-BINDIR=$(PREFIX)/bin
-
-all:
- @echo "Run \"sudo make install\" to install jstore"
- @echo "Run \"scp -r jsa user@webserver:/var/www/htdocs/\" to install jsa on your web server"
-
-install:
- install -m 0755 jstore.sh $(BINDIR)/jstore
diff --git a/jsaccess/README.txt b/jsaccess/README.txt
deleted file mode 100644
index afdc58e..0000000
--- a/jsaccess/README.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-jsaccess - private web file sharing using client side crypto
-2013, Laurent Ghigonis <laurent@gouloum.fr>
-
-Store files encrypted with symetric key (AES-256) and it will seemlessly be
-decrypted in the user web-browser on download.
-Files list cannot be accessed without the correct passphrase.
-It's possible to store files but not encrypt them with jsaccess, for example
-for files already PGP encrypted.
-No htaccess, https, or any server side configuration required, as it will just
-serve static pre-encrypted files.
-
-Note:
-You should still use https to protect against clients targeted attacks like
-mitm on the javascript code or mitm on the encrypted archives.
-
-$ git clone git://git.zx2c4.com/laurent-tools
-$ cd laurent-tools/jsaccess/
-
-
-Local demo
-==========
-
-$ firefox jsa/index.html
-OR $ google-chrome --allow-file-access-from-files jsa/index.html
-# Demo password is 'jsa'
-# Click on 'Get files list' to retrieve the files available for this password
-# In the demo the only file is 'put_your_encrypted_files_here.txt'
-# Click on Download
-# You now have the file decrypted :)
-
-
-Deployment
-==========
-
-There are 2 parts:
-* The jsa/ directory that contains html / javascript files, for the user to
-access files list and download. jsa/store/ is the files store.
-* The jstore script for the web server owner to manage file store.
-It is recomanded to run jstore on your laptop, and then syncronise the
-jsa/store/ with your server.
-
-Put jsa/ directory on your web server, publicly available.
-$ scp -r jsa/ user@myserver:/var/www/htdocs/
-
-Share a file
-============
-
-1. Add the file you want to share to the file store
-On your laptop:
-$ jstore add myfile
-# Then enter the passphase you want to use for encryption.
-# It will tell you something like:
-jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0
-CREATED file jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/065e18a7f246b800242a778a6e8dd07a3321dac6
-UPDATED file jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt
-
-2. Syncronise the file store with you online server
-On your laptop:
-# Set the rsync url (only once)
-jstore rset user@myserver:/var/www/htdocs/jsa/store/
-# push the file store
-jstore push
-
-3. Direct people to the directory jsa/, e.g. http://myserver.com/jsa/
-
-
-How it works
-============
-
-jstore creates a directory jsa/store/<rmd160_hash_of_passphrase>/.
-It encrypts your file using AES256 with the passphrase and stores the result in
-jsa/store/<rmd160_hash_of_passphrase>/<rmd160_hash_of_(passphrase+filename)>.
-It also updates the index of available files per directory called index.txt,
-that contains real file names. The index is also encrypted using AES256 with the
-passphrase.
-
-Web UI generates rmd160 hash from the passphrase and get the list of files
-available for this passphrase (jsa/store/<rmd160_hash_of_passphrase>/index.txt),
-decrypts it and shows the list of files.
-When the user clicks on Download, it fetches the file from the rmd160 name,
-decrypts it with the passphrase and stores it with the real name using the
-Filesaver JS API.
-
-
-Dependencies / Compatibility
-============================
-
-On the host that runs jstore:
-* openssl
-* base64
-* optional: rsync, if you with to use ./store push to deploy your file store
-
-On the web server:
-* Serving static files is enough
-* optional: https, to protect against clients targeted attacks
-
-On the web user machine:
-* Tested with Firefox 21 and Chrome 27
-
-
-Banner
-======
-
-You can set your own banner image / link / text without modifying html.
-See jsa/banner/README.txt
-
-
-Git content
-===========
-
-jsa/ - should be on your webserver, can be renamed
-jsa/store/<password_hash>/ - directory of files to download for a given password
-jsa/store/<password_hash>/index.txt - list of file name available
-jstore - to encrypt the files that will be available for download
-
-
-TODO
-====
-
-* web: remove step 3. and show file list as download links
-this way user can do right-click "save as"
-
-* web: make password field appear as full of dots after validation
-
-* web: download progress
-
-* web: decrypting progress
-Need to modify gibberish-aes
diff --git a/jsaccess/doc/OLD.txt b/jsaccess/doc/OLD.txt
deleted file mode 100644
index ea75f81..0000000
--- a/jsaccess/doc/OLD.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-[user@code jsa]$ ls old/
-base64.js cryptojs_3.1.2/ jrencoding.js jsbase64.js stream-min.js uuencode.js
diff --git a/jsaccess/doc/RESSOURCES.txt b/jsaccess/doc/RESSOURCES.txt
deleted file mode 100644
index 45a10e0..0000000
--- a/jsaccess/doc/RESSOURCES.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-===============================================================================
-Javascript
-
-Filesaver
-https://github.com/eligrey/FileSaver.js
-
-Gibberish AES
-https://github.com/mdp/gibberish-aes
-
-Other crypto, not used
-https://code.google.com/p/crypto-js/#Quick-start_Guide
-http://crypto.stanford.edu/sjcl/
-http://people.eku.edu/styere/Encrypt/JS-AES.html
-http://www.movable-type.co.uk/scripts/aes.html
-
-===============================================================================
-Client encryption
-
-Openssl
-http://stackoverflow.com/questions/10106771/encrypt-a-string-using-openssl-command-line
-
-Other crypto, not used
-https://pypi.python.org/pypi/pycrypto
diff --git a/jsaccess/doc/put_also_not_encrypted_files.txt b/jsaccess/doc/put_also_not_encrypted_files.txt
deleted file mode 100644
index 066da48..0000000
--- a/jsaccess/doc/put_also_not_encrypted_files.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-jsaccess demo file (not encrypted)
-
-Sometimes you want to store files unencrypted
-* because they already are PGP encrypted / signed
-* because they are really big and it would take ages to decrypt
-
-Unencrypted files will be shown in the web page file list with a
-(c) after their name.
-
-
-To a new unencrypted file to download:
-
-$ jstore add-nocrypt Makefile
-Using store "/home/user/code/laurent-tools/jsaccess/jsa/store"
-Enter encryption passphrase
-> jsa
-CREATED file /home/user/code/laurent-tools/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/Makefile
-UPDATED file /home/user/code/laurent-tools/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt
-
-$ jstore rset user@_host:/var/www/htdocs/jsa/ # Only the first time
-$ jstore push
diff --git a/jsaccess/doc/put_your_encrypted_files_here.txt b/jsaccess/doc/put_your_encrypted_files_here.txt
deleted file mode 100644
index 3df1ee1..0000000
--- a/jsaccess/doc/put_your_encrypted_files_here.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-jsaccess demo file:
-decrypted OK !
-
-
-To a new file to download:
-
-$ jstore add README.txt
-Using store "/home/user/code/laurent-tools/jsaccess/jsa/store"
-Enter encryption passphrase
-> jsa
-CREATED file /home/user/code/laurent-tools/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/065e18a7f246b800242a778a6e8dd07a3321dac6
-UPDATED file /home/user/code/laurent-tools/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt
-
-$ jstore rset user@_host:/var/www/htdocs/jsa/ # Only the first time
-$ jstore push
diff --git a/jsaccess/jsa/banner/README.txt b/jsaccess/jsa/banner/README.txt
deleted file mode 100644
index 7886adc..0000000
--- a/jsaccess/jsa/banner/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-jsaccess banner system
-
-Create files in this directory to set you own banner image / link / text,
-without having to modify the html.
-
-banner.png - banner image
-banner-png-href.txt - banner image link
-banner.txt - banner text
diff --git a/jsaccess/jsa/index.html b/jsaccess/jsa/index.html
deleted file mode 100644
index 87d3b1b..0000000
--- a/jsaccess/jsa/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>jsaccess</TITLE>
- <link rel="stylesheet" type="text/css" href="jsa.css"/>
- <script src="jsa.js"></script>
- <script src="js-contrib/Blob.js"></script>
- <script src="js-contrib/FileSaver.js"></script>
- <script src="js-contrib/jquery-1.10.1.min.js"></script>
- <script src="js-contrib/jquery.base64.js" type='text/javascript'></script>
- <script src="js-contrib/gibberish-aes.js"></script>
- <script src="js-contrib/hashes.min.js"></script>
-
-
-</HEAD>
-<BODY onLoad="jsainit()">
- <div id="header">
- <div id="banner"><a href=""><img/></a></div>
- <h1>Restricted access</h1>
- </div>
- <div id="content">
- <div id="forms">
- <form id="form-getlist" onsubmit="return false;">
- <h2>1. Enter password</h2>
- <input type="password" id="password"/><input type="submit" id="getlist" value="Get files list" onclick="jsagetlist()"/>
- </form>
- <form id="form-download" onsubmit="return false;">
- <h2>2. Select file</h2>
- <div id="files"></div>
- <h2>3. Download</h2>
- <input type="submit" id="download" value="Download" onclick="jsadl()"/>
- <input type="button" id="cancel" value="Cancel" onclick="window.location.reload()"/>
- </form>
- </div>
- <div id="status"><p id="status_p">Welcome.</p></div>
- </div>
- <div id="footer">
- <small>Powered by <a href="http://git.zx2c4.com/laurent-tools/tree/jsaccess/README.txt">jsaccess</a></small>
- </div>
-</BODY>
-</HTML>
diff --git a/jsaccess/jsa/js-contrib/Blob.js b/jsaccess/jsa/js-contrib/Blob.js
deleted file mode 100644
index f669f16..0000000
--- a/jsaccess/jsa/js-contrib/Blob.js
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Blob.js
- * A Blob implementation.
- * 2013-01-23
- *
- * By Eli Grey, http://eligrey.com
- * By Devin Samarin, https://github.com/eboyjr
- * License: X11/MIT
- * See LICENSE.md
- */
-
-/*global self, unescape */
-/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
- plusplus: true */
-
-/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
-
-if (typeof Blob !== "function" || typeof URL === "undefined")
-var Blob = (function (view) {
- "use strict";
-
- var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || view.MSBlobBuilder || (function(view) {
- var
- get_class = function(object) {
- return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
- }
- , FakeBlobBuilder = function BlobBuilder() {
- this.data = [];
- }
- , FakeBlob = function Blob(data, type, encoding) {
- this.data = data;
- this.size = data.length;
- this.type = type;
- this.encoding = encoding;
- }
- , FBB_proto = FakeBlobBuilder.prototype
- , FB_proto = FakeBlob.prototype
- , FileReaderSync = view.FileReaderSync
- , FileException = function(type) {
- this.code = this[this.name = type];
- }
- , file_ex_codes = (
- "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
- + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
- ).split(" ")
- , file_ex_code = file_ex_codes.length
- , real_URL = view.URL || view.webkitURL || view
- , real_create_object_URL = real_URL.createObjectURL
- , real_revoke_object_URL = real_URL.revokeObjectURL
- , URL = real_URL
- , btoa = view.btoa
- , atob = view.atob
- , can_apply_typed_arrays = false
- , can_apply_typed_arrays_test = function(pass) {
- can_apply_typed_arrays = !pass;
- }
-
- , ArrayBuffer = view.ArrayBuffer
- , Uint8Array = view.Uint8Array
- ;
- FakeBlob.fake = FB_proto.fake = true;
- while (file_ex_code--) {
- FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
- }
- try {
- if (Uint8Array) {
- can_apply_typed_arrays_test.apply(0, new Uint8Array(1));
- }
- } catch (ex) {}
- if (!real_URL.createObjectURL) {
- URL = view.URL = {};
- }
- URL.createObjectURL = function(blob) {
- var
- type = blob.type
- , data_URI_header
- ;
- if (type === null) {
- type = "application/octet-stream";
- }
- if (blob instanceof FakeBlob) {
- data_URI_header = "data:" + type;
- if (blob.encoding === "base64") {
- return data_URI_header + ";base64," + blob.data;
- } else if (blob.encoding === "URI") {
- return data_URI_header + "," + decodeURIComponent(blob.data);
- } if (btoa) {
- return data_URI_header + ";base64," + btoa(blob.data);
- } else {
- return data_URI_header + "," + encodeURIComponent(blob.data);
- }
- } else if (real_create_object_URL) {
- return real_create_object_URL.call(real_URL, blob);
- }
- };
- URL.revokeObjectURL = function(object_URL) {
- if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
- real_revoke_object_URL.call(real_URL, object_URL);
- }
- };
- FBB_proto.append = function(data/*, endings*/) {
- var bb = this.data;
- // decode data to a binary string
- if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
- if (can_apply_typed_arrays) {
- bb.push(String.fromCharCode.apply(String, new Uint8Array(data)));
- } else {
- var
- str = ""
- , buf = new Uint8Array(data)
- , i = 0
- , buf_len = buf.length
- ;
- for (; i < buf_len; i++) {
- str += String.fromCharCode(buf[i]);
- }
- }
- } else if (get_class(data) === "Blob" || get_class(data) === "File") {
- if (FileReaderSync) {
- var fr = new FileReaderSync;
- bb.push(fr.readAsBinaryString(data));
- } else {
- // async FileReader won't work as BlobBuilder is sync
- throw new FileException("NOT_READABLE_ERR");
- }
- } else if (data instanceof FakeBlob) {
- if (data.encoding === "base64" && atob) {
- bb.push(atob(data.data));
- } else if (data.encoding === "URI") {
- bb.push(decodeURIComponent(data.data));
- } else if (data.encoding === "raw") {
- bb.push(data.data);
- }
- } else {
- if (typeof data !== "string") {
- data += ""; // convert unsupported types to strings
- }
- // decode UTF-16 to binary string
- bb.push(unescape(encodeURIComponent(data)));
- }
- };
- FBB_proto.getBlob = function(type) {
- if (!arguments.length) {
- type = null;
- }
- return new FakeBlob(this.data.join(""), type, "raw");
- };
- FBB_proto.toString = function() {
- return "[object BlobBuilder]";
- };
- FB_proto.slice = function(start, end, type) {
- var args = arguments.length;
- if (args < 3) {
- type = null;
- }
- return new FakeBlob(
- this.data.slice(start, args > 1 ? end : this.data.length)
- , type
- , this.encoding
- );
- };
- FB_proto.toString = function() {
- return "[object Blob]";
- };
- return FakeBlobBuilder;
- }(view));
-
- return function Blob(blobParts, options) {
- var type = options ? (options.type || "") : "";
- var builder = new BlobBuilder();
- if (blobParts) {
- for (var i = 0, len = blobParts.length; i < len; i++) {
- builder.append(blobParts[i]);
- }
- }
- return builder.getBlob(type);
- };
-}(self));
diff --git a/jsaccess/jsa/js-contrib/FileSaver.js b/jsaccess/jsa/js-contrib/FileSaver.js
deleted file mode 100644
index 84826c5..0000000
--- a/jsaccess/jsa/js-contrib/FileSaver.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/* FileSaver.js
- * A saveAs() FileSaver implementation.
- * 2013-01-23
- *
- * By Eli Grey, http://eligrey.com
- * License: X11/MIT
- * See LICENSE.md
- */
-
-/*global self */
-/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
- plusplus: true */
-
-/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
-
-var saveAs = saveAs
- || (navigator.msSaveBlob && navigator.msSaveBlob.bind(navigator))
- || (function(view) {
- "use strict";
- var
- doc = view.document
- // only get URL when necessary in case BlobBuilder.js hasn't overridden it yet
- , get_URL = function() {
- return view.URL || view.webkitURL || view;
- }
- , URL = view.URL || view.webkitURL || view
- , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
- , can_use_save_link = "download" in save_link
- , click = function(node) {
- var event = doc.createEvent("MouseEvents");
- event.initMouseEvent(
- "click", true, false, view, 0, 0, 0, 0, 0
- , false, false, false, false, 0, null
- );
- node.dispatchEvent(event);
- }
- , webkit_req_fs = view.webkitRequestFileSystem
- , req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
- , throw_outside = function (ex) {
- (view.setImmediate || view.setTimeout)(function() {
- throw ex;
- }, 0);
- }
- , force_saveable_type = "application/octet-stream"
- , fs_min_size = 0
- , deletion_queue = []
- , process_deletion_queue = function() {
- var i = deletion_queue.length;
- while (i--) {
- var file = deletion_queue[i];
- if (typeof file === "string") { // file is an object URL
- URL.revokeObjectURL(file);
- } else { // file is a File
- file.remove();
- }
- }
- deletion_queue.length = 0; // clear queue
- }
- , dispatch = function(filesaver, event_types, event) {
- event_types = [].concat(event_types);
- var i = event_types.length;
- while (i--) {
- var listener = filesaver["on" + event_types[i]];
- if (typeof listener === "function") {
- try {
- listener.call(filesaver, event || filesaver);
- } catch (ex) {
- throw_outside(ex);
- }
- }
- }
- }
- , FileSaver = function(blob, name) {
- // First try a.download, then web filesystem, then object URLs
- var
- filesaver = this
- , type = blob.type
- , blob_changed = false
- , object_url
- , target_view
- , get_object_url = function() {
- var object_url = get_URL().createObjectURL(blob);
- deletion_queue.push(object_url);
- return object_url;
- }
- , dispatch_all = function() {
- dispatch(filesaver, "writestart progress write writeend".split(" "));
- }
- // on any filesys errors revert to saving with object URLs
- , fs_error = function() {
- // don't create more object URLs than needed
- if (blob_changed || !object_url) {
- object_url = get_object_url(blob);
- }
- if (target_view) {
- target_view.location.href = object_url;
- }
- filesaver.readyState = filesaver.DONE;
- dispatch_all();
- }
- , abortable = function(func) {
- return function() {
- if (filesaver.readyState !== filesaver.DONE) {
- return func.apply(this, arguments);
- }
- };
- }
- , create_if_not_found = {create: true, exclusive: false}
- , slice
- ;
- filesaver.readyState = filesaver.INIT;
- if (!name) {
- name = "download";
- }
- if (can_use_save_link) {
- object_url = get_object_url(blob);
- save_link.href = object_url;
- save_link.download = name;
- click(save_link);
- filesaver.readyState = filesaver.DONE;
- dispatch_all();
- return;
- }
- // Object and web filesystem URLs have a problem saving in Google Chrome when
- // viewed in a tab, so I force save with application/octet-stream
- // http://code.google.com/p/chromium/issues/detail?id=91158
- if (view.chrome && type && type !== force_saveable_type) {
- slice = blob.slice || blob.webkitSlice;
- blob = slice.call(blob, 0, blob.size, force_saveable_type);
- blob_changed = true;
- }
- // Since I can't be sure that the guessed media type will trigger a download
- // in WebKit, I append .download to the filename.
- // https://bugs.webkit.org/show_bug.cgi?id=65440
- if (webkit_req_fs && name !== "download") {
- name += ".download";
- }
- if (type === force_saveable_type || webkit_req_fs) {
- target_view = view;
- } else {
- target_view = view.open();
- }
- if (!req_fs) {
- fs_error();
- return;
- }
- fs_min_size += blob.size;
- req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
- fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
- var save = function() {
- dir.getFile(name, create_if_not_found, abortable(function(file) {
- file.createWriter(abortable(function(writer) {
- writer.onwriteend = function(event) {
- target_view.location.href = file.toURL();
- deletion_queue.push(file);
- filesaver.readyState = filesaver.DONE;
- dispatch(filesaver, "writeend", event);
- };
- writer.onerror = function() {
- var error = writer.error;
- if (error.code !== error.ABORT_ERR) {
- fs_error();
- }
- };
- "writestart progress write abort".split(" ").forEach(function(event) {
- writer["on" + event] = filesaver["on" + event];
- });
- writer.write(blob);
- filesaver.abort = function() {
- writer.abort();
- filesaver.readyState = filesaver.DONE;
- };
- filesaver.readyState = filesaver.WRITING;
- }), fs_error);
- }), fs_error);
- };
- dir.getFile(name, {create: false}, abortable(function(file) {
- // delete file if it already exists
- file.remove();
- save();
- }), abortable(function(ex) {
- if (ex.code === ex.NOT_FOUND_ERR) {
- save();
- } else {
- fs_error();
- }
- }));
- }), fs_error);
- }), fs_error);
- }
- , FS_proto = FileSaver.prototype
- , saveAs = function(blob, name) {
- return new FileSaver(blob, name);
- }
- ;
- FS_proto.abort = function() {
- var filesaver = this;
- filesaver.readyState = filesaver.DONE;
- dispatch(filesaver, "abort");
- };
- FS_proto.readyState = FS_proto.INIT = 0;
- FS_proto.WRITING = 1;
- FS_proto.DONE = 2;
-
- FS_proto.error =
- FS_proto.onwritestart =
- FS_proto.onprogress =
- FS_proto.onwrite =
- FS_proto.onabort =
- FS_proto.onerror =
- FS_proto.onwriteend =
- null;
-
- view.addEventListener("unload", process_deletion_queue, false);
- return saveAs;
-}(self));
diff --git a/jsaccess/jsa/js-contrib/gibberish-aes.js b/jsaccess/jsa/js-contrib/gibberish-aes.js
deleted file mode 100644
index d2c91d1..0000000
--- a/jsaccess/jsa/js-contrib/gibberish-aes.js
+++ /dev/null
@@ -1,1017 +0,0 @@
-/**
-* @license Gibberish-AES
-* A lightweight Javascript Libray for OpenSSL compatible AES CBC encryption.
-*
-* Author: Mark Percival
-* Email: mark@mpercival.com
-* Copyright: Mark Percival - http://mpercival.com 2008
-*
-* With thanks to:
-* Josh Davis - http://www.josh-davis.org/ecmaScrypt
-* Chris Veness - http://www.movable-type.co.uk/scripts/aes.html
-* Michel I. Gallant - http://www.jensign.com/
-* Jean-Luc Cooke <jlcooke@certainkey.com> 2012-07-12: added strhex + invertArr to compress G2X/G3X/G9X/GBX/GEX/SBox/SBoxInv/Rcon saving over 7KB, and added encString, decString, also made the MD5 routine more easlier compressible using yuicompressor.
-*
-* License: MIT
-*
-* Usage: GibberishAES.enc("secret", "password")
-* Outputs: AES Encrypted text encoded in Base64
-*/
-
-
-(function (root, factory) {
- if (typeof exports === 'object') {
- // Node.
- module.exports = factory();
- } else if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(factory);
- } else {
- // Browser globals (root is window)
- root.GibberishAES = factory();
- }
-}(this, function () {
- 'use strict';
-
- var Nr = 14,
- /* Default to 256 Bit Encryption */
- Nk = 8,
- Decrypt = false,
-
- enc_utf8 = function(s)
- {
- try {
- return unescape(encodeURIComponent(s));
- }
- catch(e) {
- throw 'Error on UTF-8 encode';
- }
- },
-
- dec_utf8 = function(s)
- {
- try {
- return decodeURIComponent(escape(s));
- }
- catch(e) {
- throw ('Bad Key');
- }
- },
-
- padBlock = function(byteArr)
- {
- var array = [], cpad, i;
- if (byteArr.length < 16) {
- cpad = 16 - byteArr.length;
- array = [cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad];
- }
- for (i = 0; i < byteArr.length; i++)
- {
- array[i] = byteArr[i];
- }
- return array;
- },
-
- block2s = function(block, lastBlock)
- {
- var string = '', padding, i;
- if (lastBlock) {
- padding = block[15];
- if (padding > 16) {
- throw ('Decryption error: Maybe bad key');
- }
- if (padding === 16) {
- return '';
- }
- for (i = 0; i < 16 - padding; i++) {
- string += String.fromCharCode(block[i]);
- }
- } else {
- for (i = 0; i < 16; i++) {
- string += String.fromCharCode(block[i]);
- }
- }
- return string;
- },
-
- a2h = function(numArr)
- {
- var string = '', i;
- for (i = 0; i < numArr.length; i++) {
- string += (numArr[i] < 16 ? '0': '') + numArr[i].toString(16);
- }
- return string;
- },
-
- h2a = function(s)
- {
- var ret = [];
- s.replace(/(..)/g,
- function(s) {
- ret.push(parseInt(s, 16));
- });
- return ret;
- },
-
- s2a = function(string, binary) {
- var array = [], i;
-
- if (! binary) {
- string = enc_utf8(string);
- }
-
- for (i = 0; i < string.length; i++)
- {
- array[i] = string.charCodeAt(i);
- }
-
- return array;
- },
-
- size = function(newsize)
- {
- switch (newsize)
- {
- case 128:
- Nr = 10;
- Nk = 4;
- break;
- case 192:
- Nr = 12;
- Nk = 6;
- break;
- case 256:
- Nr = 14;
- Nk = 8;
- break;
- default:
- throw ('Invalid Key Size Specified:' + newsize);
- }
- },
-
- randArr = function(num) {
- var result = [], i;
- for (i = 0; i < num; i++) {
- result = result.concat(Math.floor(Math.random() * 256));
- }
- return result;
- },
-
- openSSLKey = function(passwordArr, saltArr) {
- // Number of rounds depends on the size of the AES in use
- // 3 rounds for 256
- // 2 rounds for the key, 1 for the IV
- // 2 rounds for 128
- // 1 round for the key, 1 round for the IV
- // 3 rounds for 192 since it's not evenly divided by 128 bits
- var rounds = Nr >= 12 ? 3: 2,
- key = [],
- iv = [],
- md5_hash = [],
- result = [],
- data00 = passwordArr.concat(saltArr),
- i;
- md5_hash[0] = MD5(data00);
- result = md5_hash[0];
- for (i = 1; i < rounds; i++) {
- md5_hash[i] = MD5(md5_hash[i - 1].concat(data00));
- result = result.concat(md5_hash[i]);
- }
- key = result.slice(0, 4 * Nk);
- iv = result.slice(4 * Nk, 4 * Nk + 16);
- return {
- key: key,
- iv: iv
- };
- },
-
- rawEncrypt = function(plaintext, key, iv) {
- // plaintext, key and iv as byte arrays
- key = expandKey(key);
- var numBlocks = Math.ceil(plaintext.length / 16),
- blocks = [],
- i,
- cipherBlocks = [];
- for (i = 0; i < numBlocks; i++) {
- blocks[i] = padBlock(plaintext.slice(i * 16, i * 16 + 16));
- }
- if (plaintext.length % 16 === 0) {
- blocks.push([16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16]);
- // CBC OpenSSL padding scheme
- numBlocks++;
- }
- for (i = 0; i < blocks.length; i++) {
- blocks[i] = (i === 0) ? xorBlocks(blocks[i], iv) : xorBlocks(blocks[i], cipherBlocks[i - 1]);
- cipherBlocks[i] = encryptBlock(blocks[i], key);
- }
- return cipherBlocks;
- },
-
- rawDecrypt = function(cryptArr, key, iv, binary) {
- // cryptArr, key and iv as byte arrays
- key = expandKey(key);
- var numBlocks = cryptArr.length / 16,
- cipherBlocks = [],
- i,
- plainBlocks = [],
- string = '';
- for (i = 0; i < numBlocks; i++) {
- cipherBlocks.push(cryptArr.slice(i * 16, (i + 1) * 16));
- }
- for (i = cipherBlocks.length - 1; i >= 0; i--) {
- plainBlocks[i] = decryptBlock(cipherBlocks[i], key);
- plainBlocks[i] = (i === 0) ? xorBlocks(plainBlocks[i], iv) : xorBlocks(plainBlocks[i], cipherBlocks[i - 1]);
- }
- for (i = 0; i < numBlocks - 1; i++) {
- string += block2s(plainBlocks[i]);
- }
- string += block2s(plainBlocks[i], true);
- return binary ? string : dec_utf8(string);
- },
-
- encryptBlock = function(block, words) {
- Decrypt = false;
- var state = addRoundKey(block, words, 0),
- round;
- for (round = 1; round < (Nr + 1); round++) {
- state = subBytes(state);
- state = shiftRows(state);
- if (round < Nr) {
- state = mixColumns(state);
- }
- //last round? don't mixColumns
- state = addRoundKey(state, words, round);
- }
-
- return state;
- },
-
- decryptBlock = function(block, words) {
- Decrypt = true;
- var state = addRoundKey(block, words, Nr),
- round;
- for (round = Nr - 1; round > -1; round--) {
- state = shiftRows(state);
- state = subBytes(state);
- state = addRoundKey(state, words, round);
- if (round > 0) {
- state = mixColumns(state);
- }
- //last round? don't mixColumns
- }
-
- return state;
- },
-
- subBytes = function(state) {
- var S = Decrypt ? SBoxInv: SBox,
- temp = [],
- i;
- for (i = 0; i < 16; i++) {
- temp[i] = S[state[i]];
- }
- return temp;
- },
-
- shiftRows = function(state) {
- var temp = [],
- shiftBy = Decrypt ? [0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3] : [0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11],
- i;
- for (i = 0; i < 16; i++) {
- temp[i] = state[shiftBy[i]];
- }
- return temp;
- },
-
- mixColumns = function(state) {
- var t = [],
- c;
- if (!Decrypt) {
- for (c = 0; c < 4; c++) {
- t[c * 4] = G2X[state[c * 4]] ^ G3X[state[1 + c * 4]] ^ state[2 + c * 4] ^ state[3 + c * 4];
- t[1 + c * 4] = state[c * 4] ^ G2X[state[1 + c * 4]] ^ G3X[state[2 + c * 4]] ^ state[3 + c * 4];
- t[2 + c * 4] = state[c * 4] ^ state[1 + c * 4] ^ G2X[state[2 + c * 4]] ^ G3X[state[3 + c * 4]];
- t[3 + c * 4] = G3X[state[c * 4]] ^ state[1 + c * 4] ^ state[2 + c * 4] ^ G2X[state[3 + c * 4]];
- }
- }else {
- for (c = 0; c < 4; c++) {
- t[c*4] = GEX[state[c*4]] ^ GBX[state[1+c*4]] ^ GDX[state[2+c*4]] ^ G9X[state[3+c*4]];
- t[1+c*4] = G9X[state[c*4]] ^ GEX[state[1+c*4]] ^ GBX[state[2+c*4]] ^ GDX[state[3+c*4]];
- t[2+c*4] = GDX[state[c*4]] ^ G9X[state[1+c*4]] ^ GEX[state[2+c*4]] ^ GBX[state[3+c*4]];
- t[3+c*4] = GBX[state[c*4]] ^ GDX[state[1+c*4]] ^ G9X[state[2+c*4]] ^ GEX[state[3+c*4]];
- }
- }
-
- return t;
- },
-
- addRoundKey = function(state, words, round) {
- var temp = [],
- i;
- for (i = 0; i < 16; i++) {
- temp[i] = state[i] ^ words[round][i];
- }
- return temp;
- },
-
- xorBlocks = function(block1, block2) {
- var temp = [],
- i;
- for (i = 0; i < 16; i++) {
- temp[i] = block1[i] ^ block2[i];
- }
- return temp;
- },
-
- expandKey = function(key) {
- // Expects a 1d number array
- var w = [],
- temp = [],
- i,
- r,
- t,
- flat = [],
- j;
-
- for (i = 0; i < Nk; i++) {
- r = [key[4 * i], key[4 * i + 1], key[4 * i + 2], key[4 * i + 3]];
- w[i] = r;
- }
-
- for (i = Nk; i < (4 * (Nr + 1)); i++) {
- w[i] = [];
- for (t = 0; t < 4; t++) {
- temp[t] = w[i - 1][t];
- }
- if (i % Nk === 0) {
- temp = subWord(rotWord(temp));
- temp[0] ^= Rcon[i / Nk - 1];
- } else if (Nk > 6 && i % Nk === 4) {
- temp = subWord(temp);
- }
- for (t = 0; t < 4; t++) {
- w[i][t] = w[i - Nk][t] ^ temp[t];
- }
- }
- for (i = 0; i < (Nr + 1); i++) {
- flat[i] = [];
- for (j = 0; j < 4; j++) {
- flat[i].push(w[i * 4 + j][0], w[i * 4 + j][1], w[i * 4 + j][2], w[i * 4 + j][3]);
- }
- }
- return flat;
- },
-
- subWord = function(w) {
- // apply SBox to 4-byte word w
- for (var i = 0; i < 4; i++) {
- w[i] = SBox[w[i]];
- }
- return w;
- },
-
- rotWord = function(w) {
- // rotate 4-byte word w left by one byte
- var tmp = w[0],
- i;
- for (i = 0; i < 4; i++) {
- w[i] = w[i + 1];
- }
- w[3] = tmp;
- return w;
- },
-
-// jlcooke: 2012-07-12: added strhex + invertArr to compress G2X/G3X/G9X/GBX/GEX/SBox/SBoxInv/Rcon saving over 7KB, and added encString, decString
- strhex = function(str,size) {
- var i, ret = [];
- for (i=0; i<str.length; i+=size){
- ret[i/size] = parseInt(str.substr(i,size), 16);
- }
- return ret;
- },
- invertArr = function(arr) {
- var i, ret = [];
- for (i=0; i<arr.length; i++){
- ret[arr[i]] = i;
- }
- return ret;
- },
- Gxx = function(a, b) {
- var i, ret;
-
- ret = 0;
- for (i=0; i<8; i++) {
- ret = ((b&1)===1) ? ret^a : ret;
- /* xmult */
- a = (a>0x7f) ? 0x11b^(a<<1) : (a<<1);
- b >>>= 1;
- }
-
- return ret;
- },
- Gx = function(x) {
- var i, r = [];
- for (i=0; i<256; i++){
- r[i] = Gxx(x, i);
- }
- return r;
- },
-
- // S-box
-/*
- SBox = [
- 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171,
- 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164,
- 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113,
- 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226,
- 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214,
- 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203,
- 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69,
- 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245,
- 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68,
- 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42,
- 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73,
- 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109,
- 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37,
- 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62,
- 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225,
- 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
- 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187,
- 22], //*/ SBox = strhex('637c777bf26b6fc53001672bfed7ab76ca82c97dfa5947f0add4a2af9ca472c0b7fd9326363ff7cc34a5e5f171d8311504c723c31896059a071280e2eb27b27509832c1a1b6e5aa0523bd6b329e32f8453d100ed20fcb15b6acbbe394a4c58cfd0efaafb434d338545f9027f503c9fa851a3408f929d38f5bcb6da2110fff3d2cd0c13ec5f974417c4a77e3d645d197360814fdc222a908846eeb814de5e0bdbe0323a0a4906245cc2d3ac629195e479e7c8376d8dd54ea96c56f4ea657aae08ba78252e1ca6b4c6e8dd741f4bbd8b8a703eb5664803f60e613557b986c11d9ee1f8981169d98e949b1e87e9ce5528df8ca1890dbfe6426841992d0fb054bb16',2),
-
- // Precomputed lookup table for the inverse SBox
-/* SBoxInv = [
- 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215,
- 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222,
- 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66,
- 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73,
- 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92,
- 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21,
- 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247,
- 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2,
- 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220,
- 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173,
- 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29,
- 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75,
- 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168,
- 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81,
- 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160,
- 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,
- 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12,
- 125], //*/ SBoxInv = invertArr(SBox),
-
- // Rijndael Rcon
-/*
- Rcon = [1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94,
- 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145],
-//*/ Rcon = strhex('01020408102040801b366cd8ab4d9a2f5ebc63c697356ad4b37dfaefc591',2),
-
-/*
- G2X = [
- 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16,
- 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e,
- 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46,
- 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
- 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76,
- 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e,
- 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6,
- 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
- 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6,
- 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,
- 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x1b, 0x19, 0x1f, 0x1d,
- 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
- 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d,
- 0x23, 0x21, 0x27, 0x25, 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55,
- 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, 0x7b, 0x79, 0x7f, 0x7d,
- 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
- 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d,
- 0x83, 0x81, 0x87, 0x85, 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5,
- 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, 0xdb, 0xd9, 0xdf, 0xdd,
- 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
- 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed,
- 0xe3, 0xe1, 0xe7, 0xe5
- ], //*/ G2X = Gx(2),
-
-/* G3X = [
- 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d,
- 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39,
- 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, 0x60, 0x63, 0x66, 0x65,
- 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
- 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d,
- 0x44, 0x47, 0x42, 0x41, 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9,
- 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, 0xf6, 0xf5,
- 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1,
- 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd,
- 0xb4, 0xb7, 0xb2, 0xb1, 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99,
- 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9b, 0x98, 0x9d, 0x9e,
- 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a,
- 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6,
- 0xbf, 0xbc, 0xb9, 0xba, 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2,
- 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea, 0xcb, 0xc8, 0xcd, 0xce,
- 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda,
- 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46,
- 0x4f, 0x4c, 0x49, 0x4a, 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62,
- 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, 0x3b, 0x38, 0x3d, 0x3e,
- 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
- 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16,
- 0x1f, 0x1c, 0x19, 0x1a
- ], //*/ G3X = Gx(3),
-
-/*
- G9X = [
- 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53,
- 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf,
- 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3b, 0x32, 0x29, 0x20,
- 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
- 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8,
- 0xc7, 0xce, 0xd5, 0xdc, 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49,
- 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, 0xe6, 0xef, 0xf4, 0xfd,
- 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
- 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e,
- 0x21, 0x28, 0x33, 0x3a, 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2,
- 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, 0xec, 0xe5, 0xfe, 0xf7,
- 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
- 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f,
- 0x10, 0x19, 0x02, 0x0b, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8,
- 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, 0x47, 0x4e, 0x55, 0x5c,
- 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
- 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9,
- 0xf6, 0xff, 0xe4, 0xed, 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35,
- 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, 0xa1, 0xa8, 0xb3, 0xba,
- 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
- 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62,
- 0x5d, 0x54, 0x4f, 0x46
- ], //*/ G9X = Gx(9),
-
-/* GBX = [
- 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45,
- 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81,
- 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7b, 0x70, 0x6d, 0x66,
- 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
- 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e,
- 0xbf, 0xb4, 0xa9, 0xa2, 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7,
- 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, 0x46, 0x4d, 0x50, 0x5b,
- 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
- 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8,
- 0xf9, 0xf2, 0xef, 0xe4, 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c,
- 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, 0xf7, 0xfc, 0xe1, 0xea,
- 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
- 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02,
- 0x33, 0x38, 0x25, 0x2e, 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd,
- 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, 0x3c, 0x37, 0x2a, 0x21,
- 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
- 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44,
- 0x75, 0x7e, 0x63, 0x68, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80,
- 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0x7a, 0x71, 0x6c, 0x67,
- 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
- 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f,
- 0xbe, 0xb5, 0xa8, 0xa3
- ], //*/ GBX = Gx(0xb),
-
-/*
- GDX = [
- 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f,
- 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3,
- 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbb, 0xb6, 0xa1, 0xac,
- 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
- 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14,
- 0x37, 0x3a, 0x2d, 0x20, 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e,
- 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0xbd, 0xb0, 0xa7, 0xaa,
- 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
- 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9,
- 0x8a, 0x87, 0x90, 0x9d, 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25,
- 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, 0xda, 0xd7, 0xc0, 0xcd,
- 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
- 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75,
- 0x56, 0x5b, 0x4c, 0x41, 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42,
- 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, 0xb1, 0xbc, 0xab, 0xa6,
- 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
- 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8,
- 0xeb, 0xe6, 0xf1, 0xfc, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44,
- 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0x0c, 0x01, 0x16, 0x1b,
- 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
- 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3,
- 0x80, 0x8d, 0x9a, 0x97
- ], //*/ GDX = Gx(0xd),
-
-/*
- GEX = [
- 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62,
- 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca,
- 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdb, 0xd5, 0xc7, 0xc9,
- 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
- 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59,
- 0x73, 0x7d, 0x6f, 0x61, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87,
- 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0x4d, 0x43, 0x51, 0x5f,
- 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
- 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14,
- 0x3e, 0x30, 0x22, 0x2c, 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc,
- 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, 0x41, 0x4f, 0x5d, 0x53,
- 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
- 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3,
- 0xe9, 0xe7, 0xf5, 0xfb, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0,
- 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x7a, 0x74, 0x66, 0x68,
- 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
- 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e,
- 0xa4, 0xaa, 0xb8, 0xb6, 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26,
- 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, 0x37, 0x39, 0x2b, 0x25,
- 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
- 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5,
- 0x9f, 0x91, 0x83, 0x8d
- ], //*/ GEX = Gx(0xe),
-
- enc = function(string, pass, binary) {
- // string, password in plaintext
- var salt = randArr(8),
- pbe = openSSLKey(s2a(pass, binary), salt),
- key = pbe.key,
- iv = pbe.iv,
- cipherBlocks,
- saltBlock = [[83, 97, 108, 116, 101, 100, 95, 95].concat(salt)];
- string = s2a(string, binary);
- cipherBlocks = rawEncrypt(string, key, iv);
- // Spells out 'Salted__'
- cipherBlocks = saltBlock.concat(cipherBlocks);
- return Base64.encode(cipherBlocks);
- },
-
- dec = function(string, pass, binary) {
- // string, password in plaintext
- var cryptArr = Base64.decode(string),
- salt = cryptArr.slice(8, 16),
- pbe = openSSLKey(s2a(pass, binary), salt),
- key = pbe.key,
- iv = pbe.iv;
- cryptArr = cryptArr.slice(16, cryptArr.length);
- // Take off the Salted__ffeeddcc
- string = rawDecrypt(cryptArr, key, iv, binary);
- return string;
- },
-
- MD5 = function(numArr) {
-
- function rotateLeft(lValue, iShiftBits) {
- return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
- }
-
- function addUnsigned(lX, lY) {
- var lX4,
- lY4,
- lX8,
- lY8,
- lResult;
- lX8 = (lX & 0x80000000);
- lY8 = (lY & 0x80000000);
- lX4 = (lX & 0x40000000);
- lY4 = (lY & 0x40000000);
- lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
- if (lX4 & lY4) {
- return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
- }
- if (lX4 | lY4) {
- if (lResult & 0x40000000) {
- return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
- } else {
- return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
- }
- } else {
- return (lResult ^ lX8 ^ lY8);
- }
- }
-
- function f(x, y, z) {
- return (x & y) | ((~x) & z);
- }
- function g(x, y, z) {
- return (x & z) | (y & (~z));
- }
- function h(x, y, z) {
- return (x ^ y ^ z);
- }
- function funcI(x, y, z) {
- return (y ^ (x | (~z)));
- }
-
- function ff(a, b, c, d, x, s, ac) {
- a = addUnsigned(a, addUnsigned(addUnsigned(f(b, c, d), x), ac));
- return addUnsigned(rotateLeft(a, s), b);
- }
-
- function gg(a, b, c, d, x, s, ac) {
- a = addUnsigned(a, addUnsigned(addUnsigned(g(b, c, d), x), ac));
- return addUnsigned(rotateLeft(a, s), b);
- }
-
- function hh(a, b, c, d, x, s, ac) {
- a = addUnsigned(a, addUnsigned(addUnsigned(h(b, c, d), x), ac));
- return addUnsigned(rotateLeft(a, s), b);
- }
-
- function ii(a, b, c, d, x, s, ac) {
- a = addUnsigned(a, addUnsigned(addUnsigned(funcI(b, c, d), x), ac));
- return addUnsigned(rotateLeft(a, s), b);
- }
-
- function convertToWordArray(numArr) {
- var lWordCount,
- lMessageLength = numArr.length,
- lNumberOfWords_temp1 = lMessageLength + 8,
- lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64,
- lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16,
- lWordArray = [],
- lBytePosition = 0,
- lByteCount = 0;
- while (lByteCount < lMessageLength) {
- lWordCount = (lByteCount - (lByteCount % 4)) / 4;
- lBytePosition = (lByteCount % 4) * 8;
- lWordArray[lWordCount] = (lWordArray[lWordCount] | (numArr[lByteCount] << lBytePosition));
- lByteCount++;
- }
- lWordCount = (lByteCount - (lByteCount % 4)) / 4;
- lBytePosition = (lByteCount % 4) * 8;
- lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
- lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
- lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
- return lWordArray;
- }
-
- function wordToHex(lValue) {
- var lByte,
- lCount,
- wordToHexArr = [];
- for (lCount = 0; lCount <= 3; lCount++) {
- lByte = (lValue >>> (lCount * 8)) & 255;
- wordToHexArr = wordToHexArr.concat(lByte);
- }
- return wordToHexArr;
- }
-
- /*function utf8Encode(string) {
- string = string.replace(/\r\n/g, "\n");
- var utftext = "",
- n,
- c;
-
- for (n = 0; n < string.length; n++) {
-
- c = string.charCodeAt(n);
-
- if (c < 128) {
- utftext += String.fromCharCode(c);
- }
- else if ((c > 127) && (c < 2048)) {
- utftext += String.fromCharCode((c >> 6) | 192);
- utftext += String.fromCharCode((c & 63) | 128);
- }
- else {
- utftext += String.fromCharCode((c >> 12) | 224);
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
- utftext += String.fromCharCode((c & 63) | 128);
- }
-
- }
-
- return utftext;
- }*/
-
- var x = [],
- k,
- AA,
- BB,
- CC,
- DD,
- a,
- b,
- c,
- d,
- rnd = strhex('67452301efcdab8998badcfe10325476d76aa478e8c7b756242070dbc1bdceeef57c0faf4787c62aa8304613fd469501698098d88b44f7afffff5bb1895cd7be6b901122fd987193a679438e49b40821f61e2562c040b340265e5a51e9b6c7aad62f105d02441453d8a1e681e7d3fbc821e1cde6c33707d6f4d50d87455a14eda9e3e905fcefa3f8676f02d98d2a4c8afffa39428771f6816d9d6122fde5380ca4beea444bdecfa9f6bb4b60bebfbc70289b7ec6eaa127fad4ef308504881d05d9d4d039e6db99e51fa27cf8c4ac5665f4292244432aff97ab9423a7fc93a039655b59c38f0ccc92ffeff47d85845dd16fa87e4ffe2ce6e0a30143144e0811a1f7537e82bd3af2352ad7d2bbeb86d391',8);
-
- x = convertToWordArray(numArr);
-
- a = rnd[0];
- b = rnd[1];
- c = rnd[2];
- d = rnd[3];
-
- for (k = 0; k < x.length; k += 16) {
- AA = a;
- BB = b;
- CC = c;
- DD = d;
- a = ff(a, b, c, d, x[k + 0], 7, rnd[4]);
- d = ff(d, a, b, c, x[k + 1], 12, rnd[5]);
- c = ff(c, d, a, b, x[k + 2], 17, rnd[6]);
- b = ff(b, c, d, a, x[k + 3], 22, rnd[7]);
- a = ff(a, b, c, d, x[k + 4], 7, rnd[8]);
- d = ff(d, a, b, c, x[k + 5], 12, rnd[9]);
- c = ff(c, d, a, b, x[k + 6], 17, rnd[10]);
- b = ff(b, c, d, a, x[k + 7], 22, rnd[11]);
- a = ff(a, b, c, d, x[k + 8], 7, rnd[12]);
- d = ff(d, a, b, c, x[k + 9], 12, rnd[13]);
- c = ff(c, d, a, b, x[k + 10], 17, rnd[14]);
- b = ff(b, c, d, a, x[k + 11], 22, rnd[15]);
- a = ff(a, b, c, d, x[k + 12], 7, rnd[16]);
- d = ff(d, a, b, c, x[k + 13], 12, rnd[17]);
- c = ff(c, d, a, b, x[k + 14], 17, rnd[18]);
- b = ff(b, c, d, a, x[k + 15], 22, rnd[19]);
- a = gg(a, b, c, d, x[k + 1], 5, rnd[20]);
- d = gg(d, a, b, c, x[k + 6], 9, rnd[21]);
- c = gg(c, d, a, b, x[k + 11], 14, rnd[22]);
- b = gg(b, c, d, a, x[k + 0], 20, rnd[23]);
- a = gg(a, b, c, d, x[k + 5], 5, rnd[24]);
- d = gg(d, a, b, c, x[k + 10], 9, rnd[25]);
- c = gg(c, d, a, b, x[k + 15], 14, rnd[26]);
- b = gg(b, c, d, a, x[k + 4], 20, rnd[27]);
- a = gg(a, b, c, d, x[k + 9], 5, rnd[28]);
- d = gg(d, a, b, c, x[k + 14], 9, rnd[29]);
- c = gg(c, d, a, b, x[k + 3], 14, rnd[30]);
- b = gg(b, c, d, a, x[k + 8], 20, rnd[31]);
- a = gg(a, b, c, d, x[k + 13], 5, rnd[32]);
- d = gg(d, a, b, c, x[k + 2], 9, rnd[33]);
- c = gg(c, d, a, b, x[k + 7], 14, rnd[34]);
- b = gg(b, c, d, a, x[k + 12], 20, rnd[35]);
- a = hh(a, b, c, d, x[k + 5], 4, rnd[36]);
- d = hh(d, a, b, c, x[k + 8], 11, rnd[37]);
- c = hh(c, d, a, b, x[k + 11], 16, rnd[38]);
- b = hh(b, c, d, a, x[k + 14], 23, rnd[39]);
- a = hh(a, b, c, d, x[k + 1], 4, rnd[40]);
- d = hh(d, a, b, c, x[k + 4], 11, rnd[41]);
- c = hh(c, d, a, b, x[k + 7], 16, rnd[42]);
- b = hh(b, c, d, a, x[k + 10], 23, rnd[43]);
- a = hh(a, b, c, d, x[k + 13], 4, rnd[44]);
- d = hh(d, a, b, c, x[k + 0], 11, rnd[45]);
- c = hh(c, d, a, b, x[k + 3], 16, rnd[46]);
- b = hh(b, c, d, a, x[k + 6], 23, rnd[47]);
- a = hh(a, b, c, d, x[k + 9], 4, rnd[48]);
- d = hh(d, a, b, c, x[k + 12], 11, rnd[49]);
- c = hh(c, d, a, b, x[k + 15], 16, rnd[50]);
- b = hh(b, c, d, a, x[k + 2], 23, rnd[51]);
- a = ii(a, b, c, d, x[k + 0], 6, rnd[52]);
- d = ii(d, a, b, c, x[k + 7], 10, rnd[53]);
- c = ii(c, d, a, b, x[k + 14], 15, rnd[54]);
- b = ii(b, c, d, a, x[k + 5], 21, rnd[55]);
- a = ii(a, b, c, d, x[k + 12], 6, rnd[56]);
- d = ii(d, a, b, c, x[k + 3], 10, rnd[57]);
- c = ii(c, d, a, b, x[k + 10], 15, rnd[58]);
- b = ii(b, c, d, a, x[k + 1], 21, rnd[59]);
- a = ii(a, b, c, d, x[k + 8], 6, rnd[60]);
- d = ii(d, a, b, c, x[k + 15], 10, rnd[61]);
- c = ii(c, d, a, b, x[k + 6], 15, rnd[62]);
- b = ii(b, c, d, a, x[k + 13], 21, rnd[63]);
- a = ii(a, b, c, d, x[k + 4], 6, rnd[64]);
- d = ii(d, a, b, c, x[k + 11], 10, rnd[65]);
- c = ii(c, d, a, b, x[k + 2], 15, rnd[66]);
- b = ii(b, c, d, a, x[k + 9], 21, rnd[67]);
- a = addUnsigned(a, AA);
- b = addUnsigned(b, BB);
- c = addUnsigned(c, CC);
- d = addUnsigned(d, DD);
- }
-
- return wordToHex(a).concat(wordToHex(b), wordToHex(c), wordToHex(d));
- },
-
- encString = function(plaintext, key, iv) {
- var i;
- plaintext = s2a(plaintext);
-
- key = s2a(key);
- for (i=key.length; i<32; i++){
- key[i] = 0;
- }
-
- if (iv === undefined) {
- // TODO: This is not defined anywhere... commented out...
- // iv = genIV();
- } else {
- iv = s2a(iv);
- for (i=iv.length; i<16; i++){
- iv[i] = 0;
- }
- }
-
- var ct = rawEncrypt(plaintext, key, iv);
- var ret = [iv];
- for (i=0; i<ct.length; i++){
- ret[ret.length] = ct[i];
- }
- return Base64.encode(ret);
- },
-
- decString = function(ciphertext, key) {
- var tmp = Base64.decode(ciphertext);
- var iv = tmp.slice(0, 16);
- var ct = tmp.slice(16, tmp.length);
- var i;
-
- key = s2a(key);
- for (i=key.length; i<32; i++){
- key[i] = 0;
- }
-
- var pt = rawDecrypt(ct, key, iv, false);
- return pt;
- },
-
- Base64 = (function(){
- // Takes a Nx16x1 byte array and converts it to Base64
- var _chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
- chars = _chars.split(''),
-
- encode = function(b, withBreaks) {
- var flatArr = [],
- b64 = '',
- i,
- broken_b64,
- totalChunks = Math.floor(b.length * 16 / 3);
- for (i = 0; i < b.length * 16; i++) {
- flatArr.push(b[Math.floor(i / 16)][i % 16]);
- }
- for (i = 0; i < flatArr.length; i = i + 3) {
- b64 += chars[flatArr[i] >> 2];
- b64 += chars[((flatArr[i] & 3) << 4) | (flatArr[i + 1] >> 4)];
- if ( flatArr[i + 1] !== undefined ) {
- b64 += chars[((flatArr[i + 1] & 15) << 2) | (flatArr[i + 2] >> 6)];
- } else {
- b64 += '=';
- }
- if ( flatArr[i + 2] !== undefined ) {
- b64 += chars[flatArr[i + 2] & 63];
- } else {
- b64 += '=';
- }
- }
- // OpenSSL is super particular about line breaks
- broken_b64 = b64.slice(0, 64) + '\n';
- for (i = 1; i < (Math.ceil(b64.length / 64)); i++) {
- broken_b64 += b64.slice(i * 64, i * 64 + 64) + (Math.ceil(b64.length / 64) === i + 1 ? '': '\n');
- }
- return broken_b64;
- },
-
- decode = function(string) {
- string = string.replace(/\n/g, '');
- var flatArr = [],
- c = [],
- b = [],
- i;
- for (i = 0; i < string.length; i = i + 4) {
- c[0] = _chars.indexOf(string.charAt(i));
- c[1] = _chars.indexOf(string.charAt(i + 1));
- c[2] = _chars.indexOf(string.charAt(i + 2));
- c[3] = _chars.indexOf(string.charAt(i + 3));
-
- b[0] = (c[0] << 2) | (c[1] >> 4);
- b[1] = ((c[1] & 15) << 4) | (c[2] >> 2);
- b[2] = ((c[2] & 3) << 6) | c[3];
- flatArr.push(b[0], b[1], b[2]);
- }
- flatArr = flatArr.slice(0, flatArr.length - (flatArr.length % 16));
- return flatArr;
- };
-
- //internet explorer
- if(typeof Array.indexOf === "function") {
- _chars = chars;
- }
-
- /*
- //other way to solve internet explorer problem
- if(!Array.indexOf){
- Array.prototype.indexOf = function(obj){
- for(var i=0; i<this.length; i++){
- if(this[i]===obj){
- return i;
- }
- }
- return -1;
- }
- }
- */
-
-
- return {
- "encode": encode,
- "decode": decode
- };
- })();
-
- return {
- "size": size,
- "h2a":h2a,
- "expandKey":expandKey,
- "encryptBlock":encryptBlock,
- "decryptBlock":decryptBlock,
- "Decrypt":Decrypt,
- "s2a":s2a,
- "rawEncrypt":rawEncrypt,
- "rawDecrypt":rawDecrypt,
- "dec":dec,
- "openSSLKey":openSSLKey,
- "a2h":a2h,
- "enc":enc,
- "Hash":{"MD5":MD5},
- "Base64":Base64
- };
-
-}));
diff --git a/jsaccess/jsa/js-contrib/hashes.min.js b/jsaccess/jsa/js-contrib/hashes.min.js
deleted file mode 100644
index a583fc8..0000000
--- a/jsaccess/jsa/js-contrib/hashes.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- jsHashes (minimized and closure compiled version)
- @version 1.0.3
- @license New BSD License
- @see <https://github.com/h2non/jsHashes>
-*/
-(function(){function u(b){var c,m,d="",a=-1,l;if(b&&b.length)for(l=b.length;(a+=1)<l;)c=b.charCodeAt(a),m=a+1<l?b.charCodeAt(a+1):0,55296<=c&&(56319>=c&&56320<=m&&57343>=m)&&(c=65536+((c&1023)<<10)+(m&1023),a+=1),127>=c?d+=String.fromCharCode(c):2047>=c?d+=String.fromCharCode(192|c>>>6&31,128|c&63):65535>=c?d+=String.fromCharCode(224|c>>>12&15,128|c>>>6&63,128|c&63):2097151>=c&&(d+=String.fromCharCode(240|c>>>18&7,128|c>>>12&63,128|c>>>6&63,128|c&63));return d}function p(b,c){var m=(b&65535)+(c&65535);return(b>>16)+(c>>16)+(m>>16)<<16|m&65535}function F(b,c){return b<<c|b>>>32-c}function y(b,c){for(var m=c?"0123456789ABCDEF":"0123456789abcdef",d="",a,l=0,n=b.length;l<n;l+=1)a=b.charCodeAt(l),d+=m.charAt(a>>>4&15)+m.charAt(a&15);return d}function O(b){var c,m=32*b.length,d="";for(c=0;c<m;c+=8)d+=String.fromCharCode(b[c>>5]>>>24-c%32&255);return d}function V(b){var c,m=32*b.length,d="";for(c=0;c<m;c+=8)d+=String.fromCharCode(b[c>>5]>>>c%32&255);return d}function P(b){var c,m=8*b.length,d=Array(b.length>>2),a=d.length;for(c=0;c<a;c+=1)d[c]=0;for(c=0;c<m;c+=8)d[c>>5]|=(b.charCodeAt(c/8)&255)<<c%32;return d}function z(b){var c,m=8*b.length,d=Array(b.length>>2),a=d.length;for(c=0;c<a;c+=1)d[c]=0;for(c=0;c<m;c+=8)d[c>>5]|=(b.charCodeAt(c/8)&255)<<24-c%32;return d}function B(b,c){var m=c.length,d=[],a,l,n,s,q;q=Array(Math.ceil(b.length/2));l=q.length;for(a=0;a<l;a+=1)q[a]=b.charCodeAt(2*a)<<8|b.charCodeAt(2*a+1);for(;0<q.length;){s=[];for(a=n=0;a<q.length;a+=1)if(n=(n<<16)+q[a],l=Math.floor(n/m),n-=l*m,0<s.length||0<l)s[s.length]=l;d[d.length]=n;q=s}m="";for(a=d.length-1;0<=a;a--)m+=c.charAt(d[a]);d=Math.ceil(8*b.length/(Math.log(c.length)/Math.log(2)));for(a=m.length;a<d;a+=1)m=c[0]+m;return m}function w(b,c){var m="",d=b.length,a,l,n;c=c||"=";for(a=0;a<d;a+=3){n=b.charCodeAt(a)<<16|(a+1<d?b.charCodeAt(a+1)<<8:0)|(a+2<d?b.charCodeAt(a+2):0);for(l=0;4>l;l+=1)m=8*a+6*l>8*b.length?m+c:m+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n>>>6*(3-l)&63)}return m}var S;S={VERSION:"1.0.3",Base64:function(){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c="=",m=!0;this.encode=function(d){var a,l,n,s="",q=d.length;c=c||"=";d=m?u(d):d;for(a=0;a<q;a+=3){n=d.charCodeAt(a)<<16|(a+1<q?d.charCodeAt(a+1)<<8:0)|(a+2<q?d.charCodeAt(a+2):0);for(l=0;4>l;l+=1)s=8*a+6*l>8*q?s+c:s+b.charAt(n>>>6*(3-l)&63)}return s};this.decode=function(d){var a,l,n,s,q,t,v;a="";var f=[];if(!d)return d;a=v=0;d=d.replace(RegExp("\\"+c,"gi"),"");do l=b.indexOf(d.charAt(a+=1)),n=b.indexOf(d.charAt(a+=1)),q=b.indexOf(d.charAt(a+=1)),t=b.indexOf(d.charAt(a+=1)),s=l<<18|n<<12|q<<6|t,l=s>>16&255,n=s>>8&255,s&=255,v+=1,f[v]=64===q?String.fromCharCode(l):64===t?String.fromCharCode(l,n):String.fromCharCode(l,n,s);while(a<d.length);a=f.join("");if(m){d=a;l=[];a=q=0;if(d&&d.length){n=d.length;for(d+="";a<n;)t=d.charCodeAt(a),q+=1,128>t?(l[q]=String.fromCharCode(t),a+=1):191<t&&224>t?(v=d.charCodeAt(a+1),l[q]=String.fromCharCode((t&31)<<6|v&63),a+=2):(v=d.charCodeAt(a+1),f=d.charCodeAt(a+2),l[q]=String.fromCharCode((t&15)<<12|(v&63)<<6|f&63),a+=3)}d=l.join("")}else d=a;return d};this.setPad=function(d){c=d||c;return this};this.setTab=function(d){b=d||b;return this};this.setUTF8=function(d){"boolean"===typeof d&&(m=d);return this}},CRC32:function(b){var c=0,m=0,m=0,d,a;b=u(b);c^=-1;d=0;for(a=b.length;d<a;d+=1)m=(c^b.charCodeAt(d))&255,m="0x"+"00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D".substr(9*m,8),c=c>>>8^m;return(c^-1)>>>0},MD5:function(b){function c(a){a=v?u(a):a;return V(d(P(a),8*a.length))}function m(a,r){var j,A,c,q;a=v?u(a):a;r=v?u(r):r;j=P(a);16<j.length&&(j=d(j,8*a.length));A=Array(16);c=Array(16);for(q=0;16>q;q+=1)A[q]=j[q]^909522486,c[q]=j[q]^1549556828;j=d(A.concat(P(r)),512+8*r.length);return V(d(c.concat(j),640))}function d(f,r){var j,A,d,c,q,k=1732584193,e=-271733879,h=-1732584194,g=271733878;f[r>>5]|=128<<r%32;f[(r+64>>>9<<4)+14]=r;for(j=0;j<f.length;j+=16)A=k,d=e,c=h,q=g,k=l(k,e,h,g,f[j+0],7,-680876936),g=l(g,k,e,h,f[j+1],12,-389564586),h=l(h,g,k,e,f[j+2],17,606105819),e=l(e,h,g,k,f[j+3],22,-1044525330),k=l(k,e,h,g,f[j+4],7,-176418897),g=l(g,k,e,h,f[j+5],12,1200080426),h=l(h,g,k,e,f[j+6],17,-1473231341),e=l(e,h,g,k,f[j+7],22,-45705983),k=l(k,e,h,g,f[j+8],7,1770035416),g=l(g,k,e,h,f[j+9],12,-1958414417),h=l(h,g,k,e,f[j+10],17,-42063),e=l(e,h,g,k,f[j+11],22,-1990404162),k=l(k,e,h,g,f[j+12],7,1804603682),g=l(g,k,e,h,f[j+13],12,-40341101),h=l(h,g,k,e,f[j+14],17,-1502002290),e=l(e,h,g,k,f[j+15],22,1236535329),k=n(k,e,h,g,f[j+1],5,-165796510),g=n(g,k,e,h,f[j+6],9,-1069501632),h=n(h,g,k,e,f[j+11],14,643717713),e=n(e,h,g,k,f[j+0],20,-373897302),k=n(k,e,h,g,f[j+5],5,-701558691),g=n(g,k,e,h,f[j+10],9,38016083),h=n(h,g,k,e,f[j+15],14,-660478335),e=n(e,h,g,k,f[j+4],20,-405537848),k=n(k,e,h,g,f[j+9],5,568446438),g=n(g,k,e,h,f[j+14],9,-1019803690),h=n(h,g,k,e,f[j+3],14,-187363961),e=n(e,h,g,k,f[j+8],20,1163531501),k=n(k,e,h,g,f[j+13],5,-1444681467),g=n(g,k,e,h,f[j+2],9,-51403784),h=n(h,g,k,e,f[j+7],14,1735328473),e=n(e,h,g,k,f[j+12],20,-1926607734),k=a(e^h^g,k,e,f[j+5],4,-378558),g=a(k^e^h,g,k,f[j+8],11,-2022574463),h=a(g^k^e,h,g,f[j+11],16,1839030562),e=a(h^g^k,e,h,f[j+14],23,-35309556),k=a(e^h^g,k,e,f[j+1],4,-1530992060),g=a(k^e^h,g,k,f[j+4],11,1272893353),h=a(g^k^e,h,g,f[j+7],16,-155497632),e=a(h^g^k,e,h,f[j+10],23,-1094730640),k=a(e^h^g,k,e,f[j+13],4,681279174),g=a(k^e^h,g,k,f[j+0],11,-358537222),h=a(g^k^e,h,g,f[j+3],16,-722521979),e=a(h^g^k,e,h,f[j+6],23,76029189),k=a(e^h^g,k,e,f[j+9],4,-640364487),g=a(k^e^h,g,k,f[j+12],11,-421815835),h=a(g^k^e,h,g,f[j+15],16,530742520),e=a(h^g^k,e,h,f[j+2],23,-995338651),k=s(k,e,h,g,f[j+0],6,-198630844),g=s(g,k,e,h,f[j+7],10,1126891415),h=s(h,g,k,e,f[j+14],15,-1416354905),e=s(e,h,g,k,f[j+5],21,-57434055),k=s(k,e,h,g,f[j+12],6,1700485571),g=s(g,k,e,h,f[j+3],10,-1894986606),h=s(h,g,k,e,f[j+10],15,-1051523),e=s(e,h,g,k,f[j+1],21,-2054922799),k=s(k,e,h,g,f[j+8],6,1873313359),g=s(g,k,e,h,f[j+15],10,-30611744),h=s(h,g,k,e,f[j+6],15,-1560198380),e=s(e,h,g,k,f[j+13],21,1309151649),k=s(k,e,h,g,f[j+4],6,-145523070),g=s(g,k,e,h,f[j+11],10,-1120210379),h=s(h,g,k,e,f[j+2],15,718787259),e=s(e,h,g,k,f[j+9],21,-343485551),k=p(k,A),e=p(e,d),h=p(h,c),g=p(g,q);return[k,e,h,g]}function a(a,r,j,A,d,c){return p(F(p(p(r,a),p(A,c)),d),j)}function l(f,r,j,A,d,c,q){return a(r&j|~r&A,f,r,d,c,q)}function n(f,r,j,d,c,q,b){return a(r&d|j&~d,f,r,c,q,b)}function s(f,r,j,d,c,q,b){return a(j^(r|~d),f,r,c,q,b)}var q=b&&"boolean"===typeof b.uppercase?b.uppercase:!1,t=b&&"string"===typeof b.pad?b.pda:"=",v=b&&"boolean"===typeof b.utf8?b.utf8:!0;this.hex=function(a){return y(c(a,v),q)};this.b64=function(a){return w(c(a),t)};this.any=function(a,r){return B(c(a,v),r)};this.hex_hmac=function(a,r){return y(m(a,r),q)};this.b64_hmac=function(a,r){return w(m(a,r),t)};this.any_hmac=function(a,r,j){return B(m(a,r),j)};this.vm_test=function(){return"900150983cd24fb0d6963f7d28e17f72"===hex("abc").toLowerCase()};this.setUpperCase=function(a){"boolean"===typeof a&&(q=a);return this};this.setPad=function(a){t=a||t;return this};this.setUTF8=function(a){"boolean"===typeof a&&(v=a);return this}},SHA1:function(b){function c(a){a=n?u(a):a;return O(d(z(a),8*a.length))}function m(a,c){var b,l,f,r;a=n?u(a):a;c=n?u(c):c;b=z(a);16<b.length&&(b=d(b,8*a.length));l=Array(16);f=Array(16);for(r=0;16>r;r+=1)l[r]=b[r]^909522486,f[r]=b[r]^1549556828;b=d(l.concat(z(c)),512+8*c.length);return O(d(f.concat(b),672))}function d(a,c){var d,b,f,r,j,A,l,n,m=Array(80),k=1732584193,e=-271733879,h=-1732584194,g=271733878,x=-1009589776;a[c>>5]|=128<<24-c%32;a[(c+64>>9<<4)+15]=c;for(d=0;d<a.length;d+=16){r=k;j=e;A=h;l=g;n=x;for(b=0;80>b;b+=1){m[b]=16>b?a[d+b]:F(m[b-3]^m[b-8]^m[b-14]^m[b-16],1);f=F(k,5);var T;T=20>b?e&h|~e&g:40>b?e^h^g:60>b?e&h|e&g|h&g:e^h^g;f=p(p(f,T),p(p(x,m[b]),20>b?1518500249:40>b?1859775393:60>b?-1894007588:-899497514));x=g;g=h;h=F(e,30);e=k;k=f}k=p(k,r);e=p(e,j);h=p(h,A);g=p(g,l);x=p(x,n)}return[k,e,h,g,x]}var a=b&&"boolean"===typeof b.uppercase?b.uppercase:!1,l=b&&"string"===typeof b.pad?b.pda:"=",n=b&&"boolean"===typeof b.utf8?b.utf8:!0;this.hex=function(d){return y(c(d,n),a)};this.b64=function(a){return w(c(a,n),l)};this.any=function(a,d){return B(c(a,n),d)};this.hex_hmac=function(a,c){return y(m(a,c))};this.b64_hmac=function(a,c){return w(m(a,c),l)};this.any_hmac=function(a,c,d){return B(m(a,c),d)};this.vm_test=function(){return"900150983cd24fb0d6963f7d28e17f72"===hex("abc").toLowerCase()};this.setUpperCase=function(c){"boolean"===typeof c&&(a=c);return this};this.setPad=function(a){l=a||l;return this};this.setUTF8=function(a){"boolean"===typeof a&&(n=a);return this}},SHA256:function(b){function c(c,d){c=d?u(c):c;return O(a(z(c),8*c.length))}function m(c,d){c=n?u(c):c;d=n?u(d):d;var b;b=0;var f=z(c),r=Array(16),j=Array(16);for(16<f.length&&(f=a(f,8*c.length));16>b;b+=1)r[b]=f[b]^909522486,j[b]=f[b]^1549556828;b=a(r.concat(z(d)),512+8*d.length);return O(a(j.concat(b),768))}function d(a,c){return a>>>c|a<<32-c}function a(a,c){var b=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],f=Array(64),r,j,A,l,m,n,k,e,h,g,x,T;a[c>>5]|=128<<24-c%32;a[(c+64>>9<<4)+15]=c;for(h=0;h<a.length;h+=16){r=b[0];j=b[1];A=b[2];l=b[3];m=b[4];n=b[5];k=b[6];e=b[7];for(g=0;64>g;g+=1)f[g]=16>g?a[g+h]:p(p(p(d(f[g-2],17)^d(f[g-2],19)^f[g-2]>>>10,f[g-7]),d(f[g-15],7)^d(f[g-15],18)^f[g-15]>>>3),f[g-16]),x=p(p(p(p(e,d(m,6)^d(m,11)^d(m,25)),m&n^~m&k),s[g]),f[g]),T=p(d(r,2)^d(r,13)^d(r,22),r&j^r&A^j&A),e=k,k=n,n=m,m=p(l,x),l=A,A=j,j=r,r=p(x,T);b[0]=p(r,b[0]);b[1]=p(j,b[1]);b[2]=p(A,b[2]);b[3]=p(l,b[3]);b[4]=p(m,b[4]);b[5]=p(n,b[5]);b[6]=p(k,b[6]);b[7]=p(e,b[7])}return b}var l=b&&"string"===typeof b.pad?b.pda:"=",n=b&&"boolean"===typeof b.utf8?b.utf8:!0,s;this.hex=function(a){return y(c(a,n))};this.b64=function(a){return w(c(a,n),l)};this.any=function(a,b){return B(c(a,n),b)};this.hex_hmac=function(a,c){return y(m(a,c))};this.b64_hmac=function(a,c){return w(m(a,c),l)};this.any_hmac=function(a,c,b){return B(m(a,c),b)};this.vm_test=function(){return"900150983cd24fb0d6963f7d28e17f72"===hex("abc").toLowerCase()};this.setUpperCase=function(){return this};this.setPad=function(a){l=a||l;return this};this.setUTF8=function(a){"boolean"===typeof a&&(n=a);return this};s=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998]},SHA512:function(b){function c(a){a=v?u(a):a;return O(d(z(a),8*a.length))}function m(a,j){a=v?u(a):a;j=v?u(j):j;var c;c=0;var b=z(a),f=Array(32),l=Array(32);for(32<b.length&&(b=d(b,8*a.length));32>c;c+=1)f[c]=b[c]^909522486,l[c]=b[c]^1549556828;c=d(f.concat(z(j)),1024+8*j.length);return O(d(l.concat(c),1536))}function d(c,j){var b,d,m,t=Array(80),k=Array(16),e=[new a(1779033703,-205731576),new a(-1150833019,-2067093701),new a(1013904242,-23791573),new a(-1521486534,1595750129),new a(1359893119,-1377402159),new a(-1694144372,725511199),new a(528734635,-79577749),new a(1541459225,327033209)],h=new a(0,0),g=new a(0,0),x=new a(0,0),v=new a(0,0),u=new a(0,0),y=new a(0,0),D=new a(0,0),Q=new a(0,0),R=new a(0,0),G=new a(0,0),E=new a(0,0),C=new a(0,0),J=new a(0,0),B=new a(0,0),K=new a(0,0),L=new a(0,0),M=new a(0,0);void 0===f&&(f=[new a(1116352408,-685199838),new a(1899447441,602891725),new a(-1245643825,-330482897),new a(-373957723,-2121671748),new a(961987163,-213338824),new a(1508970993,-1241133031),new a(-1841331548,-1357295717),new a(-1424204075,-630357736),new a(-670586216,-1560083902),new a(310598401,1164996542),new a(607225278,1323610764),new a(1426881987,-704662302),new a(1925078388,-226784913),new a(-2132889090,991336113),new a(-1680079193,633803317),new a(-1046744716,-815192428),new a(-459576895,-1628353838),new a(-272742522,944711139),new a(264347078,-1953704523),new a(604807628,2007800933),new a(770255983,1495990901),new a(1249150122,1856431235),new a(1555081692,-1119749164),new a(1996064986,-2096016459),new a(-1740746414,-295247957),new a(-1473132947,766784016),new a(-1341970488,-1728372417),new a(-1084653625,-1091629340),new a(-958395405,1034457026),new a(-710438585,-1828018395),new a(113926993,-536640913),new a(338241895,168717936),new a(666307205,1188179964),new a(773529912,1546045734),new a(1294757372,1522805485),new a(1396182291,-1651133473),new a(1695183700,-1951439906),new a(1986661051,1014477480),new a(-2117940946,1206759142),new a(-1838011259,344077627),new a(-1564481375,1290863460),new a(-1474664885,-1136513023),new a(-1035236496,-789014639),new a(-949202525,106217008),new a(-778901479,-688958952),new a(-694614492,1432725776),new a(-200395387,1467031594),new a(275423344,851169720),new a(430227734,-1194143544),new a(506948616,1363258195),new a(659060556,-544281703),new a(883997877,-509917016),new a(958139571,-976659869),new a(1322822218,-482243893),new a(1537002063,2003034995),new a(1747873779,-692930397),new a(1955562222,1575990012),new a(2024104815,1125592928),new a(-2067236844,-1578062990),new a(-1933114872,442776044),new a(-1866530822,593698344),new a(-1538233109,-561857047),new a(-1090935817,-1295615723),new a(-965641998,-479046869),new a(-903397682,-366583396),new a(-779700025,566280711),new a(-354779690,-840897762),new a(-176337025,-294727304),new a(116418474,1914138554),new a(174292421,-1563912026),new a(289380356,-1090974290),new a(460393269,320620315),new a(685471733,587496836),new a(852142971,1086792851),new a(1017036298,365543100),new a(1126000580,-1676669620),new a(1288033470,-885112138),new a(1501505948,-60457430),new a(1607167915,987167468),new a(1816402316,1246189591)]);for(d=0;80>d;d+=1)t[d]=new a(0,0);c[j>>5]|=128<<24-(j&31);c[(j+128>>10<<5)+31]=j;m=c.length;for(d=0;d<m;d+=32){l(x,e[0]);l(v,e[1]);l(u,e[2]);l(y,e[3]);l(D,e[4]);l(Q,e[5]);l(R,e[6]);l(G,e[7]);for(b=0;16>b;b+=1)t[b].h=c[d+2*b],t[b].l=c[d+2*b+1];for(b=16;80>b;b+=1){n(K,t[b-2],19);p(L,t[b-2],29);var N=M,H=t[b-2];N.l=H.l>>>6|H.h<<26;N.h=H.h>>>6;C.l=K.l^L.l^M.l;C.h=K.h^L.h^M.h;n(K,t[b-15],1);n(L,t[b-15],8);N=M;H=t[b-15];N.l=H.l>>>7|H.h<<25;N.h=H.h>>>7;E.l=K.l^L.l^M.l;E.h=K.h^L.h^M.h;var N=t[b],I=t[b-7],w=t[b-16],H=(C.l&65535)+(I.l&65535)+(E.l&65535)+(w.l&65535),z=(C.l>>>16)+(I.l>>>16)+(E.l>>>16)+(w.l>>>16)+(H>>>16),F=(C.h&65535)+(I.h&65535)+(E.h&65535)+(w.h&65535)+(z>>>16),I=(C.h>>>16)+(I.h>>>16)+(E.h>>>16)+(w.h>>>16)+(F>>>16);N.l=H&65535|z<<16;N.h=F&65535|I<<16}for(b=0;80>b;b+=1)J.l=D.l&Q.l^~D.l&R.l,J.h=D.h&Q.h^~D.h&R.h,n(K,D,14),n(L,D,18),p(M,D,9),C.l=K.l^L.l^M.l,C.h=K.h^L.h^M.h,n(K,x,28),p(L,x,2),p(M,x,7),E.l=K.l^L.l^M.l,E.h=K.h^L.h^M.h,B.l=x.l&v.l^x.l&u.l^v.l&u.l,B.h=x.h&v.h^x.h&u.h^v.h&u.h,N=h,I=f[b],w=t[b],H=(G.l&65535)+(C.l&65535)+(J.l&65535)+(I.l&65535)+(w.l&65535),z=(G.l>>>16)+(C.l>>>16)+(J.l>>>16)+(I.l>>>16)+(w.l>>>16)+(H>>>16),F=(G.h&65535)+(C.h&65535)+(J.h&65535)+(I.h&65535)+(w.h&65535)+(z>>>16),I=(G.h>>>16)+(C.h>>>16)+(J.h>>>16)+(I.h>>>16)+(w.h>>>16)+(F>>>16),N.l=H&65535|z<<16,N.h=F&65535|I<<16,q(g,E,B),l(G,R),l(R,Q),l(Q,D),q(D,y,h),l(y,u),l(u,v),l(v,x),q(x,h,g);q(e[0],e[0],x);q(e[1],e[1],v);q(e[2],e[2],u);q(e[3],e[3],y);q(e[4],e[4],D);q(e[5],e[5],Q);q(e[6],e[6],R);q(e[7],e[7],G)}for(d=0;8>d;d+=1)k[2*d]=e[d].h,k[2*d+1]=e[d].l;return k}function a(a,b){this.h=a;this.l=b}function l(a,b){a.h=b.h;a.l=b.l}function n(a,b,c){a.l=b.l>>>c|b.h<<32-c;a.h=b.h>>>c|b.l<<32-c}function p(a,b,c){a.l=b.h>>>c|b.l<<32-c;a.h=b.l>>>c|b.h<<32-c}function q(a,b,c){var d=(b.l&65535)+(c.l&65535),f=(b.l>>>16)+(c.l>>>16)+(d>>>16),l=(b.h&65535)+(c.h&65535)+(f>>>16);b=(b.h>>>16)+(c.h>>>16)+(l>>>16);a.l=d&65535|f<<16;a.h=l&65535|b<<16}var t=b&&"string"===typeof b.pad?b.pda:"=",v=b&&"boolean"===typeof b.utf8?b.utf8:!0,f;this.hex=function(a){return y(c(a))};this.b64=function(a){return w(c(a),t)};this.any=function(a,b){return B(c(a),b)};this.hex_hmac=function(a,b){return y(m(a,b))};this.b64_hmac=function(a,b){return w(m(a,b),t)};this.any_hmac=function(a,b,c){return B(m(a,b),c)};this.vm_test=function(){return"900150983cd24fb0d6963f7d28e17f72"===hex("abc").toLowerCase()};this.setUpperCase=function(){return this};this.setPad=function(a){t=a||t;return this};this.setUTF8=function(a){"boolean"===typeof a&&(v=a);return this}},RMD160:function(b){function c(b){b=s?u(b):b;return d(a(P(b),8*b.length))}function m(b,c){b=s?u(b):b;c=s?u(c):c;var f,l=P(b),m=Array(16),n=Array(16);16<l.length&&(l=a(l,8*b.length));for(f=0;16>f;f+=1)m[f]=l[f]^909522486,n[f]=l[f]^1549556828;f=a(m.concat(P(c)),512+8*c.length);return d(a(n.concat(f),672))}function d(a){var b,c="",d=32*a.length;for(b=0;b<d;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c}function a(a,b){var c,d,m,n,k=1732584193,e=4023233417,h=2562383102,g=271733878,s=3285377520,u,w,y,D,z,B,G,E,C,J;a[b>>5]|=128<<b%32;a[(b+64>>>9<<4)+14]=b;n=a.length;for(m=0;m<n;m+=16){u=B=k;w=G=e;y=E=h;D=C=g;z=J=s;for(d=0;79>=d;d+=1)c=p(u,l(d,w,y,D)),c=p(c,a[m+q[d]]),c=p(c,0<=d&&15>=d?0:16<=d&&31>=d?1518500249:32<=d&&47>=d?1859775393:48<=d&&63>=d?2400959708:64<=d&&79>=d?2840853838:"rmd160_K1: j out of range"),c=p(F(c,v[d]),z),u=z,z=D,D=F(y,10),y=w,w=c,c=p(B,l(79-d,G,E,C)),c=p(c,a[m+t[d]]),c=p(c,0<=d&&15>=d?1352829926:16<=d&&31>=d?1548603684:32<=d&&47>=d?1836072691:48<=d&&63>=d?2053994217:64<=d&&79>=d?0:"rmd160_K2: j out of range"),c=p(F(c,f[d]),J),B=J,J=C,C=F(E,10),E=G,G=c;c=p(e,p(y,C));e=p(h,p(D,J));h=p(g,p(z,B));g=p(s,p(u,G));s=p(k,p(w,E));k=c}return[k,e,h,g,s]}function l(a,b,c,d){return 0<=a&&15>=a?b^c^d:16<=a&&31>=a?b&c|~b&d:32<=a&&47>=a?(b|~c)^d:48<=a&&63>=a?b&d|c&~d:64<=a&&79>=a?b^(c|~d):"rmd160_f: j out of range"}var n=b&&"string"===typeof b.pad?b.pda:"=",s=b&&"boolean"===typeof b.utf8?b.utf8:!0,q=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],t=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],v=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],f=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];this.hex=function(a){return y(c(a,s))};this.b64=function(a){return w(c(a,s),n)};this.any=function(a,b){return B(c(a,s),b)};this.hex_hmac=function(a,b){return y(m(a,b))};this.b64_hmac=function(a,b){return w(m(a,b),n)};this.any_hmac=function(a,b,c){return B(m(a,b),c)};this.vm_test=function(){return"900150983cd24fb0d6963f7d28e17f72"===hex("abc").toLowerCase()};this.setUpperCase=function(){return this};this.setPad=function(a){"undefined"!==typeof a&&(n=a);return this};this.setUTF8=function(a){"boolean"===typeof a&&(s=a);return this}}};var W=this,U=!1;"object"===typeof exports&&(U=exports)&&("object"===typeof global&&global&&global===global.global)&&(W=global);"function"===typeof define&&"object"===typeof define.amd&&define.amd?define(function(){return S}):U?"object"===typeof module&&module&&module.exports===U?module.exports=S:U.Hashes=S:W.Hashes=S})(); \ No newline at end of file
diff --git a/jsaccess/jsa/js-contrib/jquery-1.10.1.min.js b/jsaccess/jsa/js-contrib/jquery-1.10.1.min.js
deleted file mode 100644
index e407e76..0000000
--- a/jsaccess/jsa/js-contrib/jquery-1.10.1.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v1.10.1 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-1.10.1.min.map
-*/
-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.1",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.parentWindow;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.frameElement&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ct(function(e){return e.innerHTML="<a href='#'></a>",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="<input>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)
-}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={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:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
-u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,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":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/jsaccess/jsa/js-contrib/jquery.base64.js b/jsaccess/jsa/js-contrib/jquery.base64.js
deleted file mode 100644
index a643623..0000000
--- a/jsaccess/jsa/js-contrib/jquery.base64.js
+++ /dev/null
@@ -1,362 +0,0 @@
-/**
- * jQuery Plugin - base64 codec
- * @lisence MIT License https://github.com/yatt/jquery.base64/blob/master/license.txt
- * @author yatt/brainfs http://d.hatena.ne.jp/yatt http://twitter.com/brainfs
- * @version 0.0.1
- * @info
- */
-
-(function($){
- var base64module = {};
-
-// *** begin
- /* /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- charset = shift_jis
-
- +++ Base64 Encode / Decode +++
-
-
- LastModified : 2006-11/08
-
- Powered by kerry
- http://202.248.69.143/~goma/
-
- 動作ブラウザ :: IE4+ , NN4.06+ , Gecko , Opera6+
-
-
- * [RFC 2045] Multipurpose Internet Mail Extensions
- (MIME) Part One:
- Format of Internet Message Bodies
- ftp://ftp.isi.edu/in-notes/rfc2045.txt
-
- /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
-
- * Usage:
-
- // エンコード
- b64_string = base64.encode( my_data [, strMode] );
-
- // デコード
- my_data = base64.decode( b64_string [, strMode] );
-
-
- strMode -> 入力データが文字列の場合 1 を
-
- /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */
-
-
-// [yatt] enclose
-//base64 = new function()
-var base64 = new function()
-//
-{
- var utfLibName = "utf";
- var b64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var b64encTable = b64char.split("");
- var b64decTable = [];
- for (var i=0; i<b64char.length; i++) b64decTable[b64char.charAt(i)] = i;
-
- this.encode = function(_dat, _strMode)
- {
- return encoder( _strMode? unpackUTF8(_dat): unpackChar(_dat) );
- }
-
- var encoder = function(_ary)
- {
- var md = _ary.length % 3;
- var b64 = "";
- var i, tmp = 0;
-
- if (md) for (i=3-md; i>0; i--) _ary[_ary.length] = 0;
-
- for (i=0; i<_ary.length; i+=3)
- {
- tmp = (_ary[i]<<16) | (_ary[i+1]<<8) | _ary[i+2];
- b64 += b64encTable[ (tmp >>>18) & 0x3f]
- + b64encTable[ (tmp >>>12) & 0x3f]
- + b64encTable[ (tmp >>> 6) & 0x3f]
- + b64encTable[ tmp & 0x3f];
- }
-
- if (md) // 3の倍数にパディングした 0x0 分 = に置き換え
- {
- md = 3- md;
- b64 = b64.substr(0, b64.length- md);
- while (md--) b64 += "=";
- }
-
- return b64;
- }
-
- this.decode = function(_b64, _strMode)
- {
- var tmp = decoder( _b64 );
- return _strMode? packUTF8(tmp): packChar(tmp);
- }
-
- var decoder = function(_b64)
- {
- _b64 = _b64.replace(/[^A-Za-z0-9\+\/]/g, "");
- var md = _b64.length % 4;
- var j, i, tmp;
- var dat = [];
-
- // replace 時 = も削っている。その = の代わりに 0x0 を補間
- if (md) for (i=0; i<4-md; i++) _b64 += "A";
-
- for (j=i=0; i<_b64.length; i+=4, j+=3)
- {
- tmp = (b64decTable[_b64.charAt( i )] <<18)
- | (b64decTable[_b64.charAt(i+1)] <<12)
- | (b64decTable[_b64.charAt(i+2)] << 6)
- | b64decTable[_b64.charAt(i+3)];
- dat[ j ] = tmp >>> 16;
- dat[j+1] = (tmp >>> 8) & 0xff;
- dat[j+2] = tmp & 0xff;
- }
- // 補完された 0x0 分削る
- if (md) dat.length -= [0,0,2,1][md];
-
- return dat;
- }
-
- var packUTF8 = function(_x){ return utf.packUTF8(_x) };
- var unpackUTF8 = function(_x){ return utf.unpackUTF8(_x) };
- var packChar = function(_x){ return utf.packChar(_x) };
- var unpackChar = function(_x){ return utf.unpackChar(_x) };
-// var packUTF8 = function(_x){ return window[utfLibName].packUTF8(_x) };
-// var unpackUTF8 = function(_x){ return window[utfLibName].unpackUTF8(_x) };
-// var packChar = function(_x){ return window[utfLibName].packChar(_x) };
-// var unpackChar = function(_x){ return window[utfLibName].unpackChar(_x) };
-}
-
-
- /* /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- charset = shift_jis
-
- +++ UTF8/16 ライブラリ +++
-
-
- LastModified : 2006-10/16
-
- Powered by kerry
- http://202.248.69.143/~goma/
-
- 動作ブラウザ :: IE4+ , NN4.06+ , Gecko , Opera6+
-
-
-
- * [RFC 2279] UTF-8, a transformation format of ISO 10646
- ftp://ftp.isi.edu/in-notes/rfc2279.txt
-
- * [RFC 1738] Uniform Resource Locators (URL)
- ftp://ftp.isi.edu/in-notes/rfc1738.txt
-
- /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
-
- Usage:
-
- // 文字列を UTF16 (文字コード) へ
- utf16code_array = utf.unpackUTF16( my_string );
-
- // 文字列を UTF8 (文字コード) へ
- utf8code_array = utf.unpackUTF8( my_string );
-
- // UTF8 (文字コード) から文字列へ。 utf.unpackUTF8() したものを元に戻す
- my_string = utf.packUTF8( utf8code_array );
-
- // UTF8/16 (文字コード) を文字列へ
- my_string = utf.packChar( utfCode_array );
-
- // UTF16 (文字コード) から UTF8 (文字コード) へ
- utf8code_array = utf.toUTF8( utf16code_array );
-
- // UTF8 (文字コード) から UTF16 (文字コード) へ
- utf16code_array = utf.toUTF16( utf8code_array );
-
-
-
- // URL 文字列へエンコード
- url_string = utf.URLencode( my_string );
-
- // URL 文字列からデコード
- my_string = utf.URLdecode( url_string );
-
- /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */
-
-
-// [yatt] enclose
-//utf = new function()
-var utf = new function()
-//
-{
- this.unpackUTF16 = function(_str)
- {
- var i, utf16=[];
- for (i=0; i<_str.length; i++) utf16[i] = _str.charCodeAt(i);
- return utf16;
- }
-
- this.unpackChar = function(_str)
- {
- var utf16 = this.unpackUTF16(_str);
- var i,n, tmp = [];
- for (n=i=0; i<utf16.length; i++) {
- if (utf16[i]<=0xff) tmp[n++] = utf16[i];
- else {
- tmp[n++] = utf16[i] >> 8;
- tmp[n++] = utf16[i] & 0xff;
- }
- }
- return tmp;
- }
-
- this.packChar =
- this.packUTF16 = function(_utf16)
- {
- var i, str = "";
- for (i in _utf16) str += String.fromCharCode(_utf16[i]);
- return str;
- }
-
- this.unpackUTF8 = function(_str)
- {
- return this.toUTF8( this.unpackUTF16(_str) );
- }
-
- this.packUTF8 = function(_utf8)
- {
- return this.packUTF16( this.toUTF16(_utf8) );
- }
-
- this.toUTF8 = function(_utf16)
- {
- var utf8 = [];
- var idx = 0;
- var i, j, c;
- for (i=0; i<_utf16.length; i++)
- {
- c = _utf16[i];
- if (c <= 0x7f) utf8[idx++] = c;
- else if (c <= 0x7ff)
- {
- utf8[idx++] = 0xc0 | (c >>> 6 );
- utf8[idx++] = 0x80 | (c & 0x3f);
- }
- else if (c <= 0xffff)
- {
- utf8[idx++] = 0xe0 | (c >>> 12 );
- utf8[idx++] = 0x80 | ((c >>> 6 ) & 0x3f);
- utf8[idx++] = 0x80 | (c & 0x3f);
- }
- else
- {
- j = 4;
- while (c >> (6*j)) j++;
- utf8[idx++] = ((0xff00 >>> j) & 0xff) | (c >>> (6*--j) );
- while (j--)
- utf8[idx++] = 0x80 | ((c >>> (6*j)) & 0x3f);
- }
- }
- return utf8;
- }
-
- this.toUTF16 = function(_utf8)
- {
- var utf16 = [];
- var idx = 0;
- var i,s;
- for (i=0; i<_utf8.length; i++, idx++)
- {
- if (_utf8[i] <= 0x7f) utf16[idx] = _utf8[i];
- else
- {
- if ( (_utf8[i]>>5) == 0x6)
- {
- utf16[idx] = ( (_utf8[i] & 0x1f) << 6 )
- | ( _utf8[++i] & 0x3f );
- }
- else if ( (_utf8[i]>>4) == 0xe)
- {
- utf16[idx] = ( (_utf8[i] & 0xf) << 12 )
- | ( (_utf8[++i] & 0x3f) << 6 )
- | ( _utf8[++i] & 0x3f );
- }
- else
- {
- s = 1;
- while (_utf8[i] & (0x20 >>> s) ) s++;
- utf16[idx] = _utf8[i] & (0x1f >>> s);
- while (s-->=0) utf16[idx] = (utf16[idx] << 6) ^ (_utf8[++i] & 0x3f);
- }
- }
- }
- return utf16;
- }
-
- this.URLencode = function(_str)
- {
- return _str.replace(/([^a-zA-Z0-9_\-\.])/g, function(_tmp, _c)
- {
- if (_c == "\x20") return "+";
- var tmp = utf.toUTF8( [_c.charCodeAt(0)] );
- var c = "";
- for (var i in tmp)
- {
- i = tmp[i].toString(16);
- if (i.length == 1) i = "0"+ i;
- c += "%"+ i;
- }
- return c;
- } );
- }
-
- this.URLdecode = function(_dat)
- {
- _dat = _dat.replace(/\+/g, "\x20");
- _dat = _dat.replace( /%([a-fA-F0-9][a-fA-F0-9])/g,
- function(_tmp, _hex){ return String.fromCharCode( parseInt(_hex, 16) ) } );
- return this.packChar( this.toUTF16( this.unpackUTF16(_dat) ) );
- }
-}
-
-// *** end
-
- // add functions
- $.extend({
- base64: {
- encode: base64.encode,
- decode: base64.decode,
- codec: typeof atob == 'function' ? 'builtin' : 'alternate'
- }
- })
-
- //
- // override jQuery.ajax:
- // if ajax 'dataType' option value ended by ':b64', then
- // decode base64 string automatically
- //
- $.ajax = (function(ajax){
- return function(option){
- var flg = 0
-
- // dataType string ended by ':b64' or not?
- if (option.dataType && option.dataType.match(/:b64/)){
- option.dataType = option.dataType.replace(':b64', '')
- flg = 1
- }
-
- if (flg){
- option.success = (function(callback){
- return function(data, status, xhr){
- data = $.base64.decode(data)
- callback(data, status, xhr)
- }
- })(option.success || function(data, status, xhr){})
- }
-
- return ajax.apply(this, arguments)
- }
- })($.ajax)
-
-})(jQuery)
diff --git a/jsaccess/jsa/jsa.css b/jsaccess/jsa/jsa.css
deleted file mode 100644
index 713a32d..0000000
--- a/jsaccess/jsa/jsa.css
+++ /dev/null
@@ -1,81 +0,0 @@
-body {
- font-family: monospace;
- background-color:#080808;
- color:#dfdfdf;
-}
-
-h1 {
- margin-top: 40px;
- margin-bottom: 60px;
- text-align: center;
- color: rgb(208, 71, 17);
-}
-
-a {text-decoration: none; color:#9f9f9f;}
-a:hover {text-decoration: underline overline; color: red;}
-
-input {
- vertical-align: bottom;
- margin-right: 10px;
-}
-
-#banner {
- position: absolute;
- top: 20px;
- left: 20px;
-}
-
-#content {
- margin-left: auto;
- margin-right: auto;
- width: 70%;
-}
-
-#forms {
- display: inline;
- float: left;
- width: 50%;
-}
-
-#files {
- color: rgb(208, 71, 17);
-}
-
-#status {
- display: inline;
- width: 50%;
- color:#5fba3d;
-}
-#status_p {
- padding-top: 20px;
-}
-
-#footer {
- position: absolute;
- width: 100%;
- margin-left: auto;
- margin-right: auto;
- bottom: 0;
- left: 0;
- color: #9f9f9f;
-}
-
-#footer small {
- display: block;
- text-align: center;
-}
-
-@media (max-width: 480px) {
- #content {
- display: block;
- width: 100%;
- }
- #forms {
- display: block;
- width: 100%;
- }
- #status {
- display: block;
- width: 100%;
- }
-}
diff --git a/jsaccess/jsa/jsa.js b/jsaccess/jsa/jsa.js
deleted file mode 100644
index 9f1cb9e..0000000
--- a/jsaccess/jsa/jsa.js
+++ /dev/null
@@ -1,205 +0,0 @@
-/* jsaccess - private web file sharing using client side crypto
- * jsa.js: Main javascript file */
-
-/*
- * Copyright (c) 2013 Laurent Ghigonis <laurent@gouloum.fr>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* Reference code */
-//console.log(JSON.stringify(xhr));
-
-/* ===== PUBLIC - called by html ===== */
-
-/* Called on "body" load */
-function jsainit() {
- /* Focus password field */
- $("input:text:visible:first").focus();
-
- /* Banner text */
- $.ajax({
- url: "banner/banner.txt",
- beforeSend: function ( xhr ) {
- xhr.overrideMimeType("text/plain");
- },
- success: function (data) {
- $('#header h1').html(data);
- }
- });
- /* Banner image */
- $.ajax({
- url: "banner/banner.png",
- beforeSend: function ( xhr ) {
- xhr.overrideMimeType("image/png");
- },
- success: function (data) {
- $('#banner img').attr('src', "banner/banner.png");
- /* Banner image link */
- $.ajax({
- url: "banner/banner-png-href.txt",
- beforeSend: function ( xhr ) {
- xhr.overrideMimeType("text/plain");
- },
- success: function (data) {
- $('#banner a').attr('href', data);
- }
- });
- },
- error: function (data) {
- $('#banner img').remove();
- }
- });
-}
-
-/* Called on "Get files list" click */
-function jsagetlist() {
- var pass = document.getElementById('password').value;
- var RMD160 = new Hashes.RMD160;
- var hash = RMD160.hex(pass);
-
- _status("Getting file list ...");
- listreq = $.ajax({
- url: 'store/' + hash + '/index.txt',
- beforeSend: function ( xhr ) {
- xhr.overrideMimeType("application/base64");
- },
- success: function ( data ) {
- _status("We have file list");
- _showfiles(data, pass, hash);
- },
- error: function (xhr, opts, err) {
- // XXX differentiate crypto and permission errors
- _status("Bad password");
- document.getElementById('files').innerHTML = "";
- throw(err);
- }
- });
-}
-
-/* Called on "Download" click */
-function jsadl() {
- var pass = document.getElementById('password').value;
- var file = $('input[name=file]:checked').val();
-
- if (!file)
- _status("You have to select a file");
- else
- obj = _dl(file, pass);
-}
-
-/* ===== PRIVATE - called within this javascript file ===== */
-
-function _index_read(file) {
- var name = file.substring(0, file.lastIndexOf(" "));
- var meta = file.split(" ").pop().replace("(", "").replace(")", "");
- var size = meta.split(",")[0];
- var crypt = meta.split(",")[1];
- return {name: name, size: size, crypt: crypt};
-}
-
-function _showfiles(data, pass, hash) {
- try {
- var decrypted = GibberishAES.dec(data, pass);
- } catch(err) {
- _status(err.toString());
- throw err;
- }
-
- document.getElementById('files').innerHTML = "";
- lines = decrypted.split("\n").filter(function(n){return n});
- $.each(lines,
- function( idx, obj ){
- obj = obj.trim();
- var meta = _index_read(obj);
- console.log(meta);
- extra = "";
- if (meta.crypt == 'nocrypt')
- extra = " (c)";
- var btn = $('<label><input type="radio" name="file" value="'+obj+'">'+meta.name+' ['+meta.size+']'+extra+'</input></label><br/>');
- btn.appendTo('#files');
- });
- $("input:radio[name=file]:first").attr('checked', true);
-}
-
-function _dl(file, pass) {
- var RMD160 = new Hashes.RMD160;
-
- var dirhash = RMD160.hex(pass);
- var meta = _index_read(file);
- _status("Downloading \""+meta.name+"\" ...");
-
- /* File is not encrypted */
- if (meta.crypt == 'nocrypt') {
- var path = 'store/' + dirhash + '/' + meta.name;
- _status("File is in your hands,<br/>Have a good day.<br/>");
- window.location = path;
- return;
- }
-
- /* File is encrypted */
- var path = 'store/' + dirhash + '/' + RMD160.hex(dirhash + meta.name);
- dlreq = $.ajax({
- url: path,
- beforeSend: function ( xhr ) {
- xhr.overrideMimeType("application/base64");
- },
- success: function ( data ) {
- _status("Download complete, decrypting ...",
- function() { _decrypt(data, pass, meta.name); });
- },
- error: function (xhr, opts, err) {
- _status("Dowload failed (status="+xhr.status+")");
- throw(err);
- }
- });
-}
-
-function _decrypt(obj, pass, name) {
- try {
- var decrypted = GibberishAES.dec(obj, pass);
- } catch(err) {
- _status(err.toString());
- throw err;
- }
- out = $.base64.decode(decrypted.toString());
- _status("Decrypted successfuly, saving ...");
- _save(out, name);
-}
-
-function _save(obj, name) {
- var ab = new ArrayBuffer(obj.length);
- var ia = new Uint8Array(ab);
- for (var i = 0; i < obj.length; i++) {
- ia[i] = obj.charCodeAt(i);
- }
- var blob = new Blob([ia], {type:"application/octet-binary"});
- saveAs(blob, name);
- _status("File is in your hands,<br/>Have a good day.<br/>");
-}
-
-function _status(txt, run_func) {
- var div = document.getElementById('status_p');
- div.innerHTML = div.innerHTML + '<br/>' + txt;
- /* force refresh with trick */
- jQuery.fn.redraw = function() {
- return this.hide(0, function() {
- $(this).show();
- });
- };
- $('#status_p').redraw();
- /* force refresh with async execution */
- if (run_func)
- setTimeout(run_func, 100);
-}
-
diff --git a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/caf3eefc85fc7c4ee06d38ea679318114b21d88d b/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/caf3eefc85fc7c4ee06d38ea679318114b21d88d
deleted file mode 100644
index bc864b8..0000000
--- a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/caf3eefc85fc7c4ee06d38ea679318114b21d88d
+++ /dev/null
@@ -1,16 +0,0 @@
-U2FsdGVkX1/Go4t3HMrPPnKLMPLvv+huGMQGEapUVCUI6NQAVl0lOFpVSbMlh8LJ
-gVqoUXbrh0XbhRb/+Kmt73eLmhgtUHbBYCG6SRxKfqEgAZdIwyF93Qfnzr16TIN0
-w9HUYkigssKrHX17YuQC2aKkqgCkLqj5z8/mWqWc3ckSORnjTtWKyGkwU4judUUk
-bCVgpVPs80JxUX37ellJ2CLrGAtzWole/bJTHht3Jtl6+r5jjSCXj9SNtgm8+fiy
-UHJdMImIg63p0GEZVjMb7aQMNdk+nEv7220sHSOd+hizSuU8d2z+Q7xxN+R0/REY
-1q0BUSPKxH23vcj4hDsVm7TWvk4dqHBZvjzbZwZqh2d0X6fBKEptzR93g2I2OgyP
-VbbO1oFFYiwQUZnA59vM6p04VBSCdh7p0A0wCk1muHQOmvmXa31Yttk1+0jMfEth
-4TvaPs09luPXH0lo+RWOG+g9T5OU+NZyB2xFWlzHPJz/tQkGar2qTgyRGm3aT+0P
-MZZkbDBdf385FOZczBYvx1f6CITCA8g37T4Ri1+ctCIlgwS7F/EN3daP/Wx9zoKi
-i/8bBe4yY5eCjS6CrBfB+jhFk3xd5+hiCL69zA9ZeYcRxEc/4fOAF0sU2nG0ld73
-1aEPYgIKq8ry4Wm7Awjg8frtkfuM2oHwMOTaF2gmWxmf8M6kCKxtKuVLHiepfaBy
-nB1uoL/B3COLBqEnLMfnxLYxAEXuDTEEvP3jJ36zi2B2qDxpoSyjkvqlhbsMQZkv
-ErJaXY56+leYlZqZrhn2gZwi2u+lIGe7gVvh6bkuWhXdFoZm8eaNjnzL/f6Xa0X7
-2iBHe3r4DKDmU4id8AgRRZxkwKOslRIu24JMp4KZGbQFwr1/k1+SEV8zUZ6iLVAl
-695rTVgEKF5sa/HnvjmOL8NxwehI7I0QdMooqvFVJmdyGZc0UrK/KGMZBXCjyVSS
-UHgxq29VGRhbrX5CwqUQRg==
diff --git a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.html b/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.html
deleted file mode 100644
index e69de29..0000000
--- a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.html
+++ /dev/null
diff --git a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt b/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt
deleted file mode 100644
index e0bc2ab..0000000
--- a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-U2FsdGVkX19Fh2kgxuosYekOdX+wkpveF6PgNJ2BgV8ecQHOyWcwS9qMjC8tVAZC
-DmSk8V29Brk8zdaXmz3JDLWNh+hO/yl2Cr2x8HddgYwpQzKY9NLtf6cTd8PqZUn/
-NURteBO3tTJwHi5Z1tsvufPbGaG2B2XQ/KbpobXm/Kk=
diff --git a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/put_also_not_encrypted_files.txt b/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/put_also_not_encrypted_files.txt
deleted file mode 100644
index 066da48..0000000
--- a/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/put_also_not_encrypted_files.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-jsaccess demo file (not encrypted)
-
-Sometimes you want to store files unencrypted
-* because they already are PGP encrypted / signed
-* because they are really big and it would take ages to decrypt
-
-Unencrypted files will be shown in the web page file list with a
-(c) after their name.
-
-
-To a new unencrypted file to download:
-
-$ jstore add-nocrypt Makefile
-Using store "/home/user/code/laurent-tools/jsaccess/jsa/store"
-Enter encryption passphrase
-> jsa
-CREATED file /home/user/code/laurent-tools/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/Makefile
-UPDATED file /home/user/code/laurent-tools/jsaccess/jsa/store/af022cd820fdad6cbcac8e15ac565c639a47dab0/index.txt
-
-$ jstore rset user@_host:/var/www/htdocs/jsa/ # Only the first time
-$ jstore push
diff --git a/jsaccess/jsa/store/index.html b/jsaccess/jsa/store/index.html
deleted file mode 100644
index 9146c8e..0000000
--- a/jsaccess/jsa/store/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-The monster has emptied me !
-<!-- DO NOT EDIT THIS FILE, part of jsaccess -->
diff --git a/jsaccess/jstore.sh b/jsaccess/jstore.sh
deleted file mode 100755
index 39b6075..0000000
--- a/jsaccess/jstore.sh
+++ /dev/null
@@ -1,406 +0,0 @@
-#!/bin/sh
-
-# jsaccess - private web file sharing using client side crypto
-# jstore.sh: file store manager for encrypting new files and deploy to server
-
-# Copyright (c) 2013 Laurent Ghigonis <laurent@gouloum.fr>
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-VERSION=0.3
-
-PROHIBITED_FILE_NAMES="index.html index.txt"
-
-usage_exit() {
- echo "jsaccess jstore.sh v$VERSION"
- echo "usage: jstore.sh [-v] [action] [action arguments...] [store]"
- echo
- echo "actions on local store for a given passphrase:"
- echo " ls [store] # default action if no arguments"
- echo " add <file> [store] # default action if one argument"
- echo " add-nocrypt <file> [store]"
- echo " rm <file_in_store> [store]"
- echo " rmall [store]"
- echo " edit [store]"
- echo
- echo "actions on local store for all passphrases:"
- echo " init <store>"
- echo " wipe <store>"
- echo
- echo "actions to deploy local store to remote:"
- echo " push [store]"
- echo " rset <rsync_uri> [store]"
- echo " rget [store]"
- echo " clone <rsync_uri> <store>"
- echo
- echo "actions to get informations:"
- echo " help|-h"
- echo " version|-V"
- echo
- echo "By default store is ./store/ or ./jsa/store/"
- echo "Use \"unset HISTFILE; export JSA_PASS=mypass\" to avoid typing the passphrase"
- echo "Use \"unset JSA_PASS\" to forget the passphrase"
- clean_exit 1
-}
-
-clean_exit() {
- ret=9
- [ X"$1" != X"" ] && ret=$1
- rm -f $tmp
- exit $ret
-}
-
-confirm_exit() {
- if [ X"$JSA_FORCE" = X"" ]; then
- echo -n "Are you sure ? [y/N] "
- read r
- [ X"$r" != X"y" ] && clean_exit 0
- fi
-}
-
-__store_test() {
- dir=$1
- [ ! -d $dir ] && return 1
- [ ! -f $dir/index.html ] && return 1
- [ X"`grep -c "The monster has emptied me" $dir/index.html 2>/dev/null`" != X"1" ] && return 1
- return 0
-}
-
-_store_get() {
- store=$1
- local_tries="./ ./store/ ./jsa/store/"
- if [ X"$store" = X"" ]; then
- for s in $local_tries; do
- __store_test $s && store=$s && break
- done
- else
- __store_test $store
- [ $? -ne 0 ] && echo "ERROR: specified store is invalid !" && \
- clean_exit 1
- fi
- [[ -z $store ]] && echo "ERROR: store not found !" && \
- echo "Not specified as argument and local stores" \
- "$local_tries not found" && clean_exit 1
- store=`readlink -f $store`
- echo "Using store \"$store\""
-}
-
-_pass_read() {
- if [ X"$JSA_PASS" != X"" ]; then
- pass=$JSA_PASS
- else
- echo "Enter encryption passphrase"
- echo -n "> "
- read pass
- fi
- [ -z $pass ] && echo "ERROR: empty passphrase" && clean_exit 1
- enc_dir_hash=`echo -n $pass |openssl rmd160 |cut -d' ' -f2`
- enc_path="$store/$enc_dir_hash"
-}
-
-_index_decrypt() {
- if [ -f $enc_path/index.txt ]; then
- echo -n $pass |openssl enc -d -a -aes-256-cbc -in $enc_path/index.txt -out $tmp -pass stdin ||clean_exit 2
- else
- echo > $tmp
- fi
-}
-
-_index_encrypt() {
- rm -f $enc_path/index.txt
- echo -n $pass |openssl enc -e -a -aes-256-cbc -in $tmp -out $enc_path/index.txt -pass stdin ||clean_exit 2
- echo "UPDATED file $enc_path/index.txt"
-}
-
-_index_read() {
- clear_name=$1
- index_entry=`egrep "^$clear_name .*$" $tmp 2>/dev/null`
- if [ X"$index_entry" = X"" ]; then
- echo "File does not exist for this passphrase"
- clean_exit 1
- fi
- meta=`echo $index_entry |awk '{ print $(NF) }' |sed s/"(\(.*\))"/\\\1/g`
- size=`echo $meta |cut -d',' -f1`
- crypt=`echo $meta |cut -d',' -f2`
-}
-
-_index_check() {
- clear_name=$1
- if [ `egrep -c "^$clear_name .*$" $tmp` -ne 0 ]; then
- echo "File already present with this passphrase"
- clean_exit 1
- fi
-}
-
-_index_add() {
- clear_name=$1
- size=$2
- do_crypt=$3
- if [ $do_crypt -eq 0 ]; then
- index_text="$clear_name ($size,nocrypt)"
- else
- index_text="$clear_name ($size,base64+aes256)"
- fi
- echo $index_text >> $tmp
-}
-
-_index_rm() {
- clear_name=$1
- sed -i /"^$clear_name .*$"/d $tmp
-}
-
-__file_get_encname() {
- clear_name=$1
- enc_name=`echo -n ${enc_dir_hash}${clear_name} |openssl rmd160 |cut -d' ' -f2`
-}
-
-_file_add() {
- clear_path=$1
- clear_name=$2
- do_crypt=$3
- __file_get_encname $clear_name
- if [ ! -d $enc_path ]; then
- mkdir -p $enc_path
- touch $enc_path/index.html
- echo "CREATED directory $enc_path (new passphrase)"
- fi
- if [ $do_crypt -eq 1 ]; then
- base64 -w0 $clear_path > $tmp ||clean_exit 2
- echo -n $pass |openssl enc -e -a -aes-256-cbc -in $tmp -out $enc_path/$enc_name -pass stdin ||clean_exit 2
- echo "CREATED file $enc_path/$enc_name"
- else
- cp $clear_path $enc_path/$clear_name
- echo "CREATED file $enc_path/$clear_name"
- fi
-}
-
-_file_rm() {
- clear_name=$1
- do_crypt=$2
- if [ $do_crypt -eq 1 ]; then
- __file_get_encname $clear_name
- rm $enc_path/$enc_name ||clean_exit 1
- echo "DELETED file $enc_path/$enc_name"
- else
- rm $enc_path/$clear_name ||clean_exit 1
- echo "DELETED file $enc_path/$clear_name"
- fi
-}
-
-_rset() {
- rsync_uri=$1
- if [ -f $store/.rsync_uri ]; then
- echo "This will overwrite existing rsync_uri:"
- cat $store/.rsync_uri
- confirm_exit
- fi
- echo $rsync_uri > $store/.rsync_uri
-}
-
-_rget() {
- [ ! -f $store/.rsync_uri ] && echo "ERROR: no rsync_uri set !" && \
- echo "set it with \"jstore.sh rset <rsync_uri> $store\"" && \
- clean_exit 1
- rsync_uri=`cat $store/.rsync_uri`
-}
-
-action_ls() {
- _pass_read
- _index_decrypt
- [ ! -f $enc_path/index.txt ] && \
- echo "Passphrase not used in store !" && clean_exit 1
- echo "$enc_dir_hash/index.txt:"
- cat $tmp
-}
-
-action_add() {
- clear_path=$1
- do_crypt=$2
- clear_name=`basename $clear_path`
- [ `echo $PROHIBITED_FILE_NAMES |grep -c "\<$clear_name\>"` -ne 0 ] && \
- echo "ERROR: file name $clear_name is prohibited, sorry" && \
- echo -e "Prohibited names list : $PROHIBITED_FILE_NAMES" && \
- clean_exit 1
- _pass_read
- _index_decrypt
- _index_check $clear_name
- _file_add $clear_path $clear_name $do_crypt
- _index_decrypt
- if [ $do_crypt -eq 1 ]; then
- size=`ls -sh $enc_path/$enc_name |cut -d' ' -f1`
- else
- size=`ls -sh $clear_path |cut -d' ' -f1`
- fi
- _index_add $clear_name $size $do_crypt
- _index_encrypt
-}
-
-action_rm() {
- clear_name=$1
- _pass_read
- _index_decrypt
- _index_read $clear_name
- [ $crypt = "nocrypt" ] && do_crypt=0 || do_crypt=1
- _file_rm $clear_name $do_crypt
- _index_decrypt
- _index_rm $clear_name
- _index_encrypt
-}
-
-action_rmall() {
- _pass_read
- echo "This will delete all file encrypted with this passphrase"
- confirm_exit
- rm -rf $enc_path
- echo "DELETED directory $enc_path"
-}
-
-action_edit() {
- _pass_read
- _index_decrypt
- vim $tmp
- _index_encrypt
-}
-
-action_init() {
- store=$1
- mkdir $store ||clean_exit 1
- echo "The monster has emptied me !" > $store/index.html
- echo "<!-- DO NOT EDIT THIS FILE, part of jsaccess -->" >> $store/index.html
- echo "CREATED store \"$store\""
-}
-
-action_wipe() {
- echo "This will delete all file encrypted with all passphrases"
- confirm_exit
- rm -rf $store
- echo "DELETED store \"$store\""
-}
-
-action_push() {
- _rget
- rm -f $tmp
- cmd="rsync -rvzP --delete-after $store/ $rsync_uri"
- echo "Running \"$cmd\""
- $cmd
-}
-
-action_rset() {
- _rset $1
-}
-
-action_rget() {
- _rget
- echo "rsync_uri: $rsync_uri"
-}
-
-action_clone() {
- rsync_uri=$1
- store=$2
- [ -e $store ] && echo "ERROR: $store already exists" && clean_exit 1
- cmd="rsync -rvzP --delete-after $rsync_uri $store"
- echo "Running \"$cmd\""
- $cmd
- echo "CREATED store \"store\""
-}
-
-# Check for dependencies
-if [ X"`which base64`" == X"" \
- -o X"`which openssl`" == X"" ]; then
- echo "You need to have openssl and base64 available in your path !"
- clean_exit 1
-fi
-
-# Initialize temporary stuff
-sumask=$(umask)
-umask 077
-tmp=`mktemp ./jsaXXXXXXXX` # Used for storing index / new files
-umask $sumask
-trap clean_exit INT TERM
-
-# Run action
-case $1 in
-ls)
- [ $# -ne 1 -a $# -ne 2 ] && usage_exit
- _store_get $2
- action_ls
- ;;
-add)
- [ $# -ne 2 -a $# -ne 3 ] && usage_exit
- _store_get $3
- action_add $2 1
- ;;
-add-nocrypt)
- [ $# -ne 2 -a $# -ne 3 ] && usage_exit
- _store_get $3
- action_add $2 0
- ;;
-rm)
- [ $# -ne 2 -a $# -ne 3 ] && usage_exit
- _store_get $3
- action_rm $2
- ;;
-rmall)
- [ $# -ne 1 -a $# -ne 2 ] && usage_exit
- _store_get $2
- action_rmall
- ;;
-edit)
- [ $# -ne 1 -a $# -ne 2 ] && usage_exit
- _store_get $2
- action_edit
- ;;
-init)
- [ $# -ne 2 ] && usage_exit
- action_init $2
- ;;
-wipe)
- [ $# -ne 2 ] && usage_exit
- _store_get $2
- action_wipe
- ;;
-push)
- [ $# -ne 1 -a $# -ne 2 ] && usage_exit
- _store_get $2
- action_push
- ;;
-rset)
- [ $# -ne 2 -a $# -ne 3 ] && usage_exit
- _store_get $3
- action_rset $2
- ;;
-rget)
- [ $# -ne 1 -a $# -ne 2 ] && usage_exit
- _store_get $2
- action_rget
- ;;
-clone)
- [ $# -ne 3 ] && usage_exit
- action_clone $2 $3
- ;;
-help|-h|version|-V)
- usage_exit
- ;;
-"")
- [ $# -ne 0 ] && usage_exit
- _store_get
- action_ls
- ;;
-*)
- [ $# -ne 1 ] && usage_exit
- _store_get $2
- action_add $1
-esac
-
-clean_exit 0
-
diff --git a/jsaccess/tests/Makefile b/jsaccess/tests/Makefile
deleted file mode 100644
index 836929c..0000000
--- a/jsaccess/tests/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-all:
- rm -rf store/ store_clone/ store_push/
- ./test_store.sh
- @echo
- @echo "ALL TESTS OK"
diff --git a/jsaccess/tests/example.txt b/jsaccess/tests/example.txt
deleted file mode 100644
index 475f789..0000000
--- a/jsaccess/tests/example.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-I am an example.
-Don't laugh and follow me.
diff --git a/jsaccess/tests/test_store.sh b/jsaccess/tests/test_store.sh
deleted file mode 100755
index 653c6e8..0000000
--- a/jsaccess/tests/test_store.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/sh
-
-# Unittests for jsaccess jstore.sh
-
-jstoresh=../jstore.sh
-TMP=test_store.tmp
-export JSA_PASS=jsa_unittest_passphrase
-export JSA_FORCE=1
-
-echo
-echo "=== INIT ==="
-
-$jstoresh init store ||exit 1
-[ -d store ] ||exit 2
-
-echo
-echo "=== LOCAL ==="
-
-$jstoresh add example.txt ||exit 10
-[ -d ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/ ] ||exit 11
-[ -f ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/8e895f3f4317fb442747a40b9025d6ad8c9c8cf3 ] ||exit 12
-$jstoresh ls > $TMP ||exit 20
-[ `grep -c "example.txt" $TMP` -eq 1 ] || exit 21
-rm $TMP
-$jstoresh rm example.txt ||exit 30
-[ ! -f ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/8e895f3f4317fb442747a40b9025d6ad8c9c8cf3 ] ||exit 31
-$jstoresh ls > $TMP ||exit 40
-[ `grep -c "example.txt" $TMP` -eq 0 ] || exit 41
-rm $TMP
-
-$jstoresh add example.txt ||exit 50
-[ -d ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/ ] ||exit 51
-[ -f ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/8e895f3f4317fb442747a40b9025d6ad8c9c8cf3 ] ||exit 52
-$jstoresh rmall ||exit 60
-[ ! -d ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/ ] ||exit 61
-
-$jstoresh add-nocrypt example.txt ||exit 70
-[ -d ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/ ] ||exit 71
-[ -f ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/example.txt ] ||exit 72
-$jstoresh rm example.txt ||exit 80
-[ ! -f ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/example.txt ] ||exit 81
-$jstoresh ls > $TMP ||exit 90
-[ `grep -c "example.txt" $TMP` -eq 0 ] || exit 91
-rm $TMP
-
-$jstoresh add example.txt ||exit 95
-[ -d ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/ ] ||exit 96
-[ -f ./store/ad2c5eb7c4fca722235f5df80e11fa619adbd533/8e895f3f4317fb442747a40b9025d6ad8c9c8cf3 ] ||exit 97
-
-echo
-echo "=== DEPLOY ==="
-
-$jstoresh rset store_push ||exit 100
-echo store_push |diff -u - ./store/.rsync_uri ||exit 101
-
-$jstoresh rget > $TMP ||exit 110
-[ `grep -c "rsync_uri: store_push" $TMP` -eq 1 ] || exit 21
-
-$jstoresh push ||exit 120
-[ -f ./store_push/ad2c5eb7c4fca722235f5df80e11fa619adbd533/8e895f3f4317fb442747a40b9025d6ad8c9c8cf3 ] ||exit 121
-
-$jstoresh clone store/ store_clone ||exit 130
-[ -f ./store_clone/ad2c5eb7c4fca722235f5df80e11fa619adbd533/8e895f3f4317fb442747a40b9025d6ad8c9c8cf3 ] ||exit 131
-
-echo
-echo "=== WIPE ==="
-
-$jstoresh wipe store ||exit 200
-[ ! -d store ] ||exit 201
-
-rm -rf ./store_clone/ ./store_push/
-rm $TMP
-
-echo
-echo TEST OK
-exit 0