diff --git a/last_commit.txt b/last_commit.txt index 016a8423d9..97bdf2694f 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,32 +1,292 @@ -Repository: Products.DateRecurringIndex +Repository: plone.staticresources Branch: refs/heads/master -Date: 2019-10-03T10:09:23-05:00 -Author: T. Kim Nguyen (tkimnguyen) -Commit: https://github.com/collective/Products.DateRecurringIndex/commit/9e9d300e92c960d10fae75938f856baa8ed269cd +Date: 2019-07-16T09:26:23+02:00 +Author: Davi Lima (davilima6) +Commit: https://github.com/plone/plone.staticresources/commit/27947b5e8b839200cb434b3f3b6fbc2e6f587a9d -Preparing release 3.0.1 +Update jQuery from 1.11.3 to 1.12.4 + +Files changed: +A src/plone/staticresources/static/components/jquery/LICENSE.txt +A src/plone/staticresources/static/components/jquery/external/sizzle/LICENSE.txt +A src/plone/staticresources/static/components/jquery/external/sizzle/dist/sizzle.js +A src/plone/staticresources/static/components/jquery/external/sizzle/dist/sizzle.min.js +A src/plone/staticresources/static/components/jquery/src/ajax/var/location.js +A src/plone/staticresources/static/components/jquery/src/css/adjustCSS.js +A src/plone/staticresources/static/components/jquery/src/css/showHide.js +A src/plone/staticresources/static/components/jquery/src/css/var/swap.js +A src/plone/staticresources/static/components/jquery/src/data/var/acceptData.js +A src/plone/staticresources/static/components/jquery/src/manipulation/buildFragment.js +A src/plone/staticresources/static/components/jquery/src/manipulation/createSafeFragment.js +A src/plone/staticresources/static/components/jquery/src/manipulation/getAll.js +A src/plone/staticresources/static/components/jquery/src/manipulation/setGlobalEval.js +A src/plone/staticresources/static/components/jquery/src/manipulation/var/nodeNames.js +A src/plone/staticresources/static/components/jquery/src/manipulation/var/rleadingWhitespace.js +A src/plone/staticresources/static/components/jquery/src/manipulation/var/rscriptType.js +A src/plone/staticresources/static/components/jquery/src/manipulation/var/rtagName.js +A src/plone/staticresources/static/components/jquery/src/manipulation/wrapMap.js +A src/plone/staticresources/static/components/jquery/src/traversing/var/dir.js +A src/plone/staticresources/static/components/jquery/src/traversing/var/siblings.js +A src/plone/staticresources/static/components/jquery/src/var/document.js +A src/plone/staticresources/static/components/jquery/src/var/documentElement.js +A src/plone/staticresources/static/components/jquery/src/var/rcssNum.js +M package.json +M src/plone/staticresources/static/components/jquery/AUTHORS.txt +M src/plone/staticresources/static/components/jquery/dist/jquery.js +M src/plone/staticresources/static/components/jquery/dist/jquery.min.js +M src/plone/staticresources/static/components/jquery/src/ajax.js +M src/plone/staticresources/static/components/jquery/src/ajax/jsonp.js +M src/plone/staticresources/static/components/jquery/src/ajax/load.js +M src/plone/staticresources/static/components/jquery/src/ajax/parseJSON.js +M src/plone/staticresources/static/components/jquery/src/ajax/parseXML.js +M src/plone/staticresources/static/components/jquery/src/ajax/script.js +M src/plone/staticresources/static/components/jquery/src/ajax/var/nonce.js +M src/plone/staticresources/static/components/jquery/src/ajax/var/rquery.js +M src/plone/staticresources/static/components/jquery/src/ajax/xhr.js +M src/plone/staticresources/static/components/jquery/src/attributes.js +M src/plone/staticresources/static/components/jquery/src/attributes/attr.js +M src/plone/staticresources/static/components/jquery/src/attributes/classes.js +M src/plone/staticresources/static/components/jquery/src/attributes/prop.js +M src/plone/staticresources/static/components/jquery/src/attributes/support.js +M src/plone/staticresources/static/components/jquery/src/attributes/val.js +M src/plone/staticresources/static/components/jquery/src/callbacks.js +M src/plone/staticresources/static/components/jquery/src/core.js +M src/plone/staticresources/static/components/jquery/src/core/access.js +M src/plone/staticresources/static/components/jquery/src/core/init.js +M src/plone/staticresources/static/components/jquery/src/core/parseHTML.js +M src/plone/staticresources/static/components/jquery/src/core/ready.js +M src/plone/staticresources/static/components/jquery/src/core/var/rsingleTag.js +M src/plone/staticresources/static/components/jquery/src/css.js +M src/plone/staticresources/static/components/jquery/src/css/addGetHookIf.js +M src/plone/staticresources/static/components/jquery/src/css/curCSS.js +M src/plone/staticresources/static/components/jquery/src/css/defaultDisplay.js +M src/plone/staticresources/static/components/jquery/src/css/hiddenVisibleSelectors.js +M src/plone/staticresources/static/components/jquery/src/css/support.js +M src/plone/staticresources/static/components/jquery/src/css/var/cssExpand.js +M src/plone/staticresources/static/components/jquery/src/css/var/isHidden.js +M src/plone/staticresources/static/components/jquery/src/css/var/rmargin.js +M src/plone/staticresources/static/components/jquery/src/css/var/rnumnonpx.js +M src/plone/staticresources/static/components/jquery/src/data.js +M src/plone/staticresources/static/components/jquery/src/data/support.js +M src/plone/staticresources/static/components/jquery/src/deferred.js +M src/plone/staticresources/static/components/jquery/src/deprecated.js +M src/plone/staticresources/static/components/jquery/src/dimensions.js +M src/plone/staticresources/static/components/jquery/src/effects.js +M src/plone/staticresources/static/components/jquery/src/effects/Tween.js +M src/plone/staticresources/static/components/jquery/src/effects/animatedSelector.js +M src/plone/staticresources/static/components/jquery/src/effects/support.js +M src/plone/staticresources/static/components/jquery/src/event.js +M src/plone/staticresources/static/components/jquery/src/event/ajax.js +M src/plone/staticresources/static/components/jquery/src/event/alias.js +M src/plone/staticresources/static/components/jquery/src/event/support.js +M src/plone/staticresources/static/components/jquery/src/exports/amd.js +M src/plone/staticresources/static/components/jquery/src/exports/global.js +M src/plone/staticresources/static/components/jquery/src/intro.js +M src/plone/staticresources/static/components/jquery/src/jquery.js +M src/plone/staticresources/static/components/jquery/src/manipulation.js +M src/plone/staticresources/static/components/jquery/src/manipulation/_evalUrl.js +M src/plone/staticresources/static/components/jquery/src/manipulation/support.js +M src/plone/staticresources/static/components/jquery/src/manipulation/var/rcheckableType.js +M src/plone/staticresources/static/components/jquery/src/offset.js +M src/plone/staticresources/static/components/jquery/src/outro.js +M src/plone/staticresources/static/components/jquery/src/queue.js +M src/plone/staticresources/static/components/jquery/src/queue/delay.js +M src/plone/staticresources/static/components/jquery/src/selector-sizzle.js +M src/plone/staticresources/static/components/jquery/src/selector.js +M src/plone/staticresources/static/components/jquery/src/serialize.js +M src/plone/staticresources/static/components/jquery/src/support.js +M src/plone/staticresources/static/components/jquery/src/traversing.js +M src/plone/staticresources/static/components/jquery/src/traversing/findFilter.js +M src/plone/staticresources/static/components/jquery/src/traversing/var/rneedsContext.js +M src/plone/staticresources/static/components/jquery/src/var/class2type.js +M src/plone/staticresources/static/components/jquery/src/var/concat.js +M src/plone/staticresources/static/components/jquery/src/var/deletedIds.js +M src/plone/staticresources/static/components/jquery/src/var/hasOwn.js +M src/plone/staticresources/static/components/jquery/src/var/indexOf.js +M src/plone/staticresources/static/components/jquery/src/var/pnum.js +M src/plone/staticresources/static/components/jquery/src/var/push.js +M src/plone/staticresources/static/components/jquery/src/var/rnotwhite.js +M src/plone/staticresources/static/components/jquery/src/var/slice.js +M src/plone/staticresources/static/components/jquery/src/var/support.js +M src/plone/staticresources/static/components/jquery/src/var/toString.js +M src/plone/staticresources/static/components/jquery/src/wrap.js +M yarn.lock +D src/plone/staticresources/static/components/jquery/MIT-LICENSE.txt +D src/plone/staticresources/static/components/jquery/build/release-notes.js +D src/plone/staticresources/static/components/jquery/build/release.js +D src/plone/staticresources/static/components/jquery/build/tasks/build.js +D src/plone/staticresources/static/components/jquery/build/tasks/dist.js +D src/plone/staticresources/static/components/jquery/build/tasks/testswarm.js +D src/plone/staticresources/static/components/jquery/src/css/swap.js +D src/plone/staticresources/static/components/jquery/src/data/accepts.js +D src/plone/staticresources/static/components/jquery/src/sizzle/dist/sizzle.js +D src/plone/staticresources/static/components/jquery/src/sizzle/dist/sizzle.min.js +D src/plone/staticresources/static/components/jquery/src/var/strundefined.js + +b'diff --git a/package.json b/package.json\nindex 7db9dbf..68c8984 100644\n--- a/package.json\n+++ b/package.json\n@@ -5,7 +5,7 @@\n "repository": "git@github.com:plone/plone.staticresources.git",\n "license": "BSD-3-Clause",\n "dependencies": {\n- "jquery": "https://github.com/jquery/jquery-dist.git#1.11.3",\n+ "jquery": "https://github.com/jquery/jquery-dist.git#1.12.4",\n "less": "https://github.com/less/less.git#v2.7.3",\n "mockup": "https://github.com/plone/mockup.git",\n "requirejs": "~2.2.0"\ndiff --git a/src/plone/staticresources/static/components/jquery/AUTHORS.txt b/src/plone/staticresources/static/components/jquery/AUTHORS.txt\nindex 14a0e68..16bc6c9 100644\n--- a/src/plone/staticresources/static/components/jquery/AUTHORS.txt\n+++ b/src/plone/staticresources/static/components/jquery/AUTHORS.txt\n@@ -36,7 +36,7 @@ Justin Meyer \n Ben Alman \n James Padolsey \n David Petersen \n-Batiste Bieler \n+Batiste Bieler \n Alexander Farkas \n Rick Waldron \n Filipe Fortes \n@@ -215,3 +215,52 @@ John Hoven \n Christian Kosmowski \n Liang Peng \n TJ VanToll \n+Senya Pugach \n+Aurelio De Rosa \n+Nazar Mokrynskyi \n+Arthur Verschaeve \n+Dan Hart \n+Scott Gonza\xcc\x81lez \n+Zheming Sun \n+Bin Xin \n+David Corbacho \n+Veaceslav Grimalschi \n+Daniel Husar \n+Jason Bedard \n+Ben Toews \n+Aditya Raghavan \n+Nicolas HENRY \n+Norman Xu \n+Anne-Gaelle Colom \n+Victor Homyakov \n+George Mauer \n+Leonardo Braga \n+Stephen Edgar \n+Thomas Tortorini \n+Winston Howes \n+Jon Hester \n+Alexander O\'Mara \n+Bastian Buchholz \n+Arthur Stolyar \n+Calvin Metcalf \n+Mu Haibao \n+Richard McDaniel \n+Chris Rebert \n+Gilad Peleg \n+Martin Naumann \n+Bruno Pe\xcc\x81rel \n+Reed Loden \n+Daniel Nill \n+Yongwoo Jeon \n+Sean Henderson \n+Adrian Olek \n+Richard Kraaijenhagen \n+Gary Ye \n+Christian Grete \n+Liza Ramo \n+Joelle Fleurantin \n+Julian Alexander Murillo \n+Jun Sun \n+Devin Wilson \n+Todor Prikumov \n+Zack Hall \ndiff --git a/src/plone/staticresources/static/components/jquery/MIT-LICENSE.txt b/src/plone/staticresources/static/components/jquery/LICENSE.txt\nsimilarity index 63%\nrename from src/plone/staticresources/static/components/jquery/MIT-LICENSE.txt\nrename to src/plone/staticresources/static/components/jquery/LICENSE.txt\nindex cdd31b5..5312a4c 100644\n--- a/src/plone/staticresources/static/components/jquery/MIT-LICENSE.txt\n+++ b/src/plone/staticresources/static/components/jquery/LICENSE.txt\n@@ -1,5 +1,13 @@\n-Copyright 2014 jQuery Foundation and other contributors\n-http://jquery.com/\n+Copyright jQuery Foundation and other contributors, https://jquery.org/\n+\n+This software consists of voluntary contributions made by many\n+individuals. For exact contribution history, see the revision history\n+available at https://github.com/jquery/jquery\n+\n+The following license applies to all parts of this software except as\n+documented below:\n+\n+====\n \n Permission is hereby granted, free of charge, to any person obtaining\n a copy of this software and associated documentation files (the\n@@ -19,3 +27,10 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+\n+====\n+\n+All files located in the node_modules and external directories are\n+externally maintained libraries used by this software which have their\n+own licenses; we recommend you read them, as their terms may differ from\n+the terms above.\ndiff --git a/src/plone/staticresources/static/components/jquery/build/release-notes.js b/src/plone/staticresources/static/components/jquery/build/release-notes.js\ndeleted file mode 100644\nindex c9676f2..0000000\n--- a/src/plone/staticresources/static/components/jquery/build/release-notes.js\n+++ /dev/null\n@@ -1,55 +0,0 @@\n-#!/usr/bin/env node\n-/*\n- * jQuery Release Note Generator\n- */\n-\n-var http = require("http"),\n-\textract = /(.*?)<[^"]+"component">\\s*(\\S+)/g,\n-\tversion = process.argv[2];\n-\n-if ( !/^\\d+\\.\\d+/.test( version ) ) {\n-\tconsole.error( "Invalid version number: " + version );\n-\tprocess.exit( 1 );\n-}\n-\n-http.request({\n-\thost: "bugs.jquery.com",\n-\tport: 80,\n-\tmethod: "GET",\n-\tpath: "/query?status=closed&resolution=fixed&max=400&component=!web&order=component&milestone=" + version\n-}, function( res ) {\n-\tvar data = [];\n-\n-\tres.on( "data", function( chunk ) {\n-\t\tdata.push( chunk );\n-\t});\n-\n-\tres.on( "end", function() {\n-\t\tvar match, cur, cat,\n-\t\t\tfile = data.join("");\n-\n-\t\twhile ( (match = extract.exec( file )) ) {\n-\t\t\tif ( "#" + match[1] !== match[2] ) {\n-\t\t\t\tcat = match[3];\n-\n-\t\t\t\tif ( !cur || cur !== cat ) {\n-\t\t\t\t\tif ( cur ) {\n-\t\t\t\t\t\tconsole.log("");\n-\t\t\t\t\t}\n-\t\t\t\t\tcur = cat;\n-\t\t\t\t\tconsole.log( "

" + cat.charAt(0).toUpperCase() + cat.slice(1) + "

" );\n-\t\t\t\t\tconsole.log("
");\n-\t\t}\n-\n-\t});\n-}).end();\ndiff --git a/src/plone/staticresources/static/components/jquery/build/release.js b/src/plone/staticresources/static/components/jquery/build/release.js\ndeleted file mode 100644\nindex 75d482b..0000000\n--- a/src/plone/staticresources/static/components/jquery/build/release.js\n+++ /dev/null\n@@ -1,163 +0,0 @@\n-module.exports = function( Release ) {\n-\n-\tvar\n-\t\tfs = require( "fs" ),\n-\t\tshell = require( "shelljs" ),\n-\n-\t\tdevFile = "dist/jquery.js",\n-\t\tminFile = "dist/jquery.min.js",\n-\t\tmapFile = "dist/jquery.min.map",\n-\n-\t\tcdnFolder = "dist/cdn",\n-\n-\t\treleaseFiles = {\n-\t\t\t"jquery-VER.js": devFile,\n-\t\t\t"jquery-VER.min.js": minFile,\n-\t\t\t"jquery-VER.min.map": mapFile\n-\t\t},\n-\n-\t\tgoogleFilesCDN = [\n-\t\t\t"jquery.js", "jquery.min.js", "jquery.min.map"\n-\t\t],\n-\n-\t\tmsFilesCDN = [\n-\t\t\t"jquery-VER.js", "jquery-VER.min.js", "jquery-VER.min.map"\n-\t\t],\n-\n-\t\t_complete = Release.complete;\n-\n-\t/**\n-\t * Generates copies for the CDNs\n-\t */\n-\tfunction makeReleaseCopies() {\n-\t\tshell.mkdir( "-p", cdnFolder );\n-\n-\t\tObject.keys( releaseFiles ).forEach(function( key ) {\n-\t\t\tvar text,\n-\t\t\t\tbuiltFile = releaseFiles[ key ],\n-\t\t\t\tunpathedFile = key.replace( /VER/g, Release.newVersion ),\n-\t\t\t\treleaseFile = cdnFolder + "/" + unpathedFile;\n-\n-\t\t\tif ( /\\.map$/.test( releaseFile ) ) {\n-\t\t\t\t// Map files need to reference the new uncompressed name;\n-\t\t\t\t// assume that all files reside in the same directory.\n-\t\t\t\t// "file":"jquery.min.js","sources":["jquery.js"]\n-\t\t\t\ttext = fs.readFileSync( builtFile, "utf8" )\n-\t\t\t\t\t.replace( /"file":"([^"]+)","sources":\\["([^"]+)"\\]/,\n-\t\t\t\t\t\t"\\"file\\":\\"" + unpathedFile.replace( /\\.min\\.map/, ".min.js" ) +\n-\t\t\t\t\t\t"\\",\\"sources\\":[\\"" + unpathedFile.replace( /\\.min\\.map/, ".js" ) + "\\"]" );\n-\t\t\t\tfs.writeFileSync( releaseFile, text );\n-\t\t\t} else if ( /\\.min\\.js$/.test( releaseFile ) ) {\n-\t\t\t\t// Remove the source map comment; it causes way too many problems.\n-\t\t\t\t// Keep the map file in case DevTools allow manual association.\n-\t\t\t\ttext = fs.readFileSync( builtFile, "utf8" )\n-\t\t\t\t\t.replace( /\\/\\/# sourceMappingURL=\\S+/, "" );\n-\t\t\t\tfs.writeFileSync( releaseFile, text );\n-\t\t\t} else if ( builtFile !== releaseFile ) {\n-\t\t\t\tshell.cp( "-f", builtFile, releaseFile );\n-\t\t\t}\n-\t\t});\n-\t}\n-\n-\tfunction buildGoogleCDN() {\n-\t\tmakeArchive( "googlecdn", googleFilesCDN );\n-\t}\n-\n-\tfunction buildMicrosoftCDN() {\n-\t\tmakeArchive( "mscdn", msFilesCDN );\n-\t}\n-\n-\tfunction makeArchive( cdn, files ) {\n-\t\tif ( Release.preRelease ) {\n-\t\t\tconsole.log( "Skipping archive creation for " + cdn + "; this is a beta release." );\n-\t\t\treturn;\n-\t\t}\n-\n-\t\tconsole.log( "Creating production archive for " + cdn );\n-\n-\t\tvar archiver = require( "archiver" )( "zip" ),\n-\t\t\tmd5file = cdnFolder + "/" + cdn + "-md5.txt",\n-\t\t\toutput = fs.createWriteStream( cdnFolder + "/" + cdn + "-jquery-" + Release.newVersion + ".zip" );\n-\n-\t\toutput.on( "error", function( err ) {\n-\t\t\tthrow err;\n-\t\t});\n-\n-\t\tarchiver.pipe( output );\n-\n-\t\tfiles = files.map(function( item ) {\n-\t\t\treturn cdnFolder + "/" + item.replace( /VER/g, Release.newVersion );\n-\t\t});\n-\n-\t\tshell.exec( "md5sum", files, function( code, stdout ) {\n-\t\t\tfs.writeFileSync( md5file, stdout );\n-\t\t\tfiles.push( md5file );\n-\n-\t\t\tfiles.forEach(function( file ) {\n-\t\t\t\tarchiver.append( fs.createReadStream( file ), { name: file } );\n-\t\t\t});\n-\n-\t\t\tarchiver.finalize();\n-\t\t});\n-\t}\n-\n-\tRelease.define({\n-\t\tnpmPublish: true,\n-\t\tnpmTags: function() {\n-\t\t\treturn [ "1.x" ];\n-\t\t},\n-\t\tissueTracker: "trac",\n-\t\tcontributorReportId: 508,\n-\t\t/**\n-\t\t * Generates any release artifacts that should be included in the release.\n-\t\t * The callback must be invoked with an array of files that should be\n-\t\t * committed before creating the tag.\n-\t\t * @param {Function} callback\n-\t\t */\n-\t\tgenerateArtifacts: function( callback ) {\n-\t\t\tRelease.exec( "grunt", "Grunt command failed" );\n-\t\t\tmakeReleaseCopies();\n-\t\t\tcallback([ "dist/jquery.js", "dist/jquery.min.js", "dist/jquery.min.map" ]);\n-\t\t},\n-\t\t/**\n-\t\t * Release completion\n-\t\t */\n-\t\tcomplete: function() {\n-\t\t\t// Build CDN archives async\n-\t\t\tbuildGoogleCDN();\n-\t\t\tbuildMicrosoftCDN();\n-\t\t\t_complete();\n-\t\t},\n-\t\t/**\n-\t\t * Our trac milestones are different than the new version\n-\t\t * @example\n-\t\t *\n-\t\t * // For Release.newVersion equal to 2.1.0 or 1.11.0\n-\t\t * Release._tracMilestone();\n-\t\t * // => 1.11/2.1\n-\t\t *\n-\t\t * // For Release.newVersion equal to 2.1.1 or 1.11.1\n-\t\t * Release._tracMilestone();\n-\t\t * // => 1.11.1/2.1.1\n-\t\t */\n-\t\ttracMilestone: function() {\n-\t\t\tvar otherVersion,\n-\t\t\t\tm = Release.newVersion.split( "." ),\n-\t\t\t\tmajor = m[0] | 0,\n-\t\t\t\tminor = m[1] | 0,\n-\t\t\t\tpatch = m[2] | 0 ? "." + m[2] : "",\n-\t\t\t\tversion = major + "." + minor + patch;\n-\t\t\tif ( major === 1) {\n-\t\t\t\totherVersion = "2." + ( minor - 10 ) + patch;\n-\t\t\t\treturn version + "/" + otherVersion;\n-\t\t\t}\n-\t\t\totherVersion = "1." + ( minor + 10 ) + patch;\n-\t\t\treturn otherVersion + "/" + version;\n-\t\t}\n-\t});\n-};\n-\n-module.exports.dependencies = [\n-\t"archiver@0.5.2",\n-\t"shelljs@0.2.6"\n-];\ndiff --git a/src/plone/staticresources/static/components/jquery/build/tasks/build.js b/src/plone/staticresources/static/components/jquery/build/tasks/build.js\ndeleted file mode 100644\nindex 4d51766..0000000\n--- a/src/plone/staticresources/static/components/jquery/build/tasks/build.js\n+++ /dev/null\n@@ -1,271 +0,0 @@\n-/**\n- * Special concat/build task to handle various jQuery build requirements\n- * Concats AMD modules, removes their definitions, and includes/excludes specified modules\n- */\n-\n-module.exports = function( grunt ) {\n-\n-\t"use strict";\n-\n-\tvar fs = require( "fs" ),\n-\t\trequirejs = require( "requirejs" ),\n-\t\tsrcFolder = __dirname + "/../../src/",\n-\t\trdefineEnd = /\\}\\);[^}\\w]*$/,\n-\t\tconfig = {\n-\t\t\tbaseUrl: "src",\n-\t\t\tname: "jquery",\n-\t\t\tout: "dist/jquery.js",\n-\t\t\t// We have multiple minify steps\n-\t\t\toptimize: "none",\n-\t\t\t// Include dependencies loaded with require\n-\t\t\tfindNestedDependencies: true,\n-\t\t\t// Avoid breaking semicolons inserted by r.js\n-\t\t\tskipSemiColonInsertion: true,\n-\t\t\twrap: {\n-\t\t\t\tstartFile: "src/intro.js",\n-\t\t\t\tendFile: "src/outro.js"\n-\t\t\t},\n-\t\t\tpaths: {\n-\t\t\t\tsizzle: "sizzle/dist/sizzle"\n-\t\t\t},\n-\t\t\trawText: {},\n-\t\t\tonBuildWrite: convert\n-\t\t};\n-\n-\t/**\n-\t * Strip all definitions generated by requirejs\n-\t * Convert "var" modules to var declarations\n-\t * "var module" means the module only contains a return statement that should be converted to a var declaration\n-\t * This is indicated by including the file in any "var" folder\n-\t * @param {String} name\n-\t * @param {String} path\n-\t * @param {String} contents The contents to be written (including their AMD wrappers)\n-\t */\n-\tfunction convert( name, path, contents ) {\n-\t\tvar amdName;\n-\t\t// Convert var modules\n-\t\tif ( /.\\/var\\//.test( path ) ) {\n-\t\t\tcontents = contents\n-\t\t\t\t.replace( /define\\([\\w\\W]*?return/, "var " + (/var\\/([\\w-]+)/.exec(name)[1]) + " =" )\n-\t\t\t\t.replace( rdefineEnd, "" );\n-\n-\t\t// Sizzle treatment\n-\t\t} else if ( /^sizzle$/.test( name ) ) {\n-\t\t\tcontents = "var Sizzle =\\n" + contents\n-\t\t\t\t// Remove EXPOSE lines from Sizzle\n-\t\t\t\t.replace( /\\/\\/\\s*EXPOSE[\\w\\W]*\\/\\/\\s*EXPOSE/, "return Sizzle;" );\n-\n-\t\t} else {\n-\n-\t\t\t// Ignore jQuery\'s exports (the only necessary one)\n-\t\t\tif ( name !== "jquery" ) {\n-\t\t\t\tcontents = contents\n-\t\t\t\t\t.replace( /\\s*return\\s+[^\\}]+(\\}\\);[^\\w\\}]*)$/, "$1" )\n-\t\t\t\t\t// Multiple exports\n-\t\t\t\t\t.replace( /\\s*exports\\.\\w+\\s*=\\s*\\w+;/g, "" );\n-\t\t\t}\n-\n-\t\t\t// Remove define wrappers, closure ends, and empty declarations\n-\t\t\tcontents = contents\n-\t\t\t\t.replace( /define\\([^{]*?{/, "" )\n-\t\t\t\t.replace( rdefineEnd, "" );\n-\n-\t\t\t// Remove anything wrapped with\n-\t\t\t// /* ExcludeStart */ /* ExcludeEnd */\n-\t\t\t// or a single line directly after a // BuildExclude comment\n-\t\t\tcontents = contents\n-\t\t\t\t.replace( /\\/\\*\\s*ExcludeStart\\s*\\*\\/[\\w\\W]*?\\/\\*\\s*ExcludeEnd\\s*\\*\\//ig, "" )\n-\t\t\t\t.replace( /\\/\\/\\s*BuildExclude\\n\\r?[\\w\\W]*?\\n\\r?/ig, "" );\n-\n-\t\t\t// Remove empty definitions\n-\t\t\tcontents = contents\n-\t\t\t\t.replace( /define\\(\\[[^\\]]+\\]\\)[\\W\\n]+$/, "" );\n-\t\t}\n-\t\t// AMD Name\n-\t\tif ( (amdName = grunt.option( "amd" )) != null && /^exports\\/amd$/.test( name ) ) {\n-\t\t\tif (amdName) {\n-\t\t\t\tgrunt.log.writeln( "Naming jQuery with AMD name: " + amdName );\n-\t\t\t} else {\n-\t\t\t\tgrunt.log.writeln( "AMD name now anonymous" );\n-\t\t\t}\n-\t\t\t// Remove the comma for anonymous defines\n-\t\t\tcontents = contents\n-\t\t\t\t.replace( /(\\s*)"jquery"(\\,\\s*)/, amdName ? "$1\\"" + amdName + "\\"$2" : "" );\n-\n-\t\t}\n-\t\treturn contents;\n-\t}\n-\n-\tgrunt.registerMultiTask(\n-\t\t"build",\n-\t\t"Concatenate source, remove sub AMD definitions, (include/exclude modules with +/- flags), embed date/version",\n-\tfunction() {\n-\t\tvar flag, index,\n-\t\t\tdone = this.async(),\n-\t\t\tflags = this.flags,\n-\t\t\toptIn = flags[ "*" ],\n-\t\t\tname = this.data.dest,\n-\t\t\tminimum = this.data.minimum,\n-\t\t\tremoveWith = this.data.removeWith,\n-\t\t\texcluded = [],\n-\t\t\tincluded = [],\n-\t\t\tversion = grunt.config( "pkg.version" ),\n-\t\t\t/**\n-\t\t\t * Recursively calls the excluder to remove on all modules in the list\n-\t\t\t * @param {Array} list\n-\t\t\t * @param {String} [prepend] Prepend this to the module name. Indicates we\'re walking a directory\n-\t\t\t */\n-\t\t\texcludeList = function( list, prepend ) {\n-\t\t\t\tif ( list ) {\n-\t\t\t\t\tprepend = prepend ? prepend + "/" : "";\n-\t\t\t\t\tlist.forEach(function( module ) {\n-\t\t\t\t\t\t// Exclude var modules as well\n-\t\t\t\t\t\tif ( module === "var" ) {\n-\t\t\t\t\t\t\texcludeList( fs.readdirSync( srcFolder + prepend + module ), prepend + module );\n-\t\t\t\t\t\t\treturn;\n-\t\t\t\t\t\t}\n-\t\t\t\t\t\tif ( prepend ) {\n-\t\t\t\t\t\t\t// Skip if this is not a js file and we\'re walking files in a dir\n-\t\t\t\t\t\t\tif ( !(module = /([\\w-\\/]+)\\.js$/.exec( module )) ) {\n-\t\t\t\t\t\t\t\treturn;\n-\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t// Prepend folder name if passed\n-\t\t\t\t\t\t\t// Remove .js extension\n-\t\t\t\t\t\t\tmodule = prepend + module[1];\n-\t\t\t\t\t\t}\n-\n-\t\t\t\t\t\t// Avoid infinite recursion\n-\t\t\t\t\t\tif ( excluded.indexOf( module ) === -1 ) {\n-\t\t\t\t\t\t\texcluder( "-" + module );\n-\t\t\t\t\t\t}\n-\t\t\t\t\t});\n-\t\t\t\t}\n-\t\t\t},\n-\t\t\t/**\n-\t\t\t * Adds the specified module to the excluded or included list, depending on the flag\n-\t\t\t * @param {String} flag A module path relative to the src directory starting with + or - to indicate whether it should included or excluded\n-\t\t\t */\n-\t\t\texcluder = function( flag ) {\n-\t\t\t\tvar m = /^(\\+|\\-|)([\\w\\/-]+)$/.exec( flag ),\n-\t\t\t\t\texclude = m[ 1 ] === "-",\n-\t\t\t\t\tmodule = m[ 2 ];\n-\n-\t\t\t\tif ( exclude ) {\n-\t\t\t\t\t// Can\'t exclude certain modules\n-\t\t\t\t\tif ( minimum.indexOf( module ) === -1 ) {\n-\t\t\t\t\t\t// Add to excluded\n-\t\t\t\t\t\tif ( excluded.indexOf( module ) === -1 ) {\n-\t\t\t\t\t\t\tgrunt.log.writeln( flag );\n-\t\t\t\t\t\t\texcluded.push( module );\n-\t\t\t\t\t\t\t// Exclude all files in the folder of the same name\n-\t\t\t\t\t\t\t// These are the removable dependencies\n-\t\t\t\t\t\t\t// It\'s fine if the directory is not there\n-\t\t\t\t\t\t\ttry {\n-\t\t\t\t\t\t\t\texcludeList( fs.readdirSync( srcFolder + module ), module );\n-\t\t\t\t\t\t\t} catch( e ) {\n-\t\t\t\t\t\t\t\tgrunt.verbose.writeln( e );\n-\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t}\n-\t\t\t\t\t\t// Check removeWith list\n-\t\t\t\t\t\texcludeList( removeWith[ module ] );\n-\t\t\t\t\t} else {\n-\t\t\t\t\t\tgrunt.log.error( "Module \\"" + module + "\\" is a mimimum requirement.");\n-\t\t\t\t\t}\n-\t\t\t\t} else {\n-\t\t\t\t\tgrunt.log.writeln( flag );\n-\t\t\t\t\tincluded.push( module );\n-\t\t\t\t}\n-\t\t\t};\n-\n-\t\t// append commit id to version\n-\t\tif ( process.env.COMMIT ) {\n-\t\t\tversion += " " + process.env.COMMIT;\n-\t\t}\n-\n-\t\t// figure out which files to exclude based on these rules in this order:\n-\t\t// dependency explicit exclude\n-\t\t// > explicit exclude\n-\t\t// > explicit include\n-\t\t// > dependency implicit exclude\n-\t\t// > implicit exclude\n-\t\t// examples:\n-\t\t// * none (implicit exclude)\n-\t\t// *:* all (implicit include)\n-\t\t// *:*:-css all except css and dependents (explicit > implicit)\n-\t\t// *:*:-css:+effects same (excludes effects because explicit include is trumped by explicit exclude of dependency)\n-\t\t// *:+effects none except effects and its dependencies (explicit include trumps implicit exclude of dependency)\n-\t\tdelete flags[ "*" ];\n-\t\tfor ( flag in flags ) {\n-\t\t\texcluder( flag );\n-\t\t}\n-\n-\t\t// Replace exports/global with a noop noConflict\n-\t\tif ( (index = excluded.indexOf( "exports/global" )) > -1 ) {\n-\t\t\tconfig.rawText[ "exports/global" ] = "define([\'../core\']," +\n-\t\t\t\t"function( jQuery ) {\\njQuery.noConflict = function() {};\\n});";\n-\t\t\texcluded.splice( index, 1 );\n-\t\t}\n-\n-\t\tgrunt.verbose.writeflags( excluded, "Excluded" );\n-\t\tgrunt.verbose.writeflags( included, "Included" );\n-\n-\t\t// append excluded modules to version\n-\t\tif ( excluded.length ) {\n-\t\t\tversion += " -" + excluded.join( ",-" );\n-\t\t\t// set pkg.version to version with excludes, so minified file picks it up\n-\t\t\tgrunt.config.set( "pkg.version", version );\n-\t\t\tgrunt.verbose.writeln( "Version changed to " + version );\n-\t\t\t// Have to use shallow or core will get excluded since it is a dependency\n-\t\t\tconfig.excludeShallow = excluded;\n-\t\t}\n-\t\tconfig.include = included;\n-\n-\t\t/**\n-\t\t * Handle Final output from the optimizer\n-\t\t * @param {String} compiled\n-\t\t */\n-\t\tconfig.out = function( compiled ) {\n-\t\t\tcompiled = compiled\n-\t\t\t\t// Embed Version\n-\t\t\t\t.replace( /@VERSION/g, version )\n-\t\t\t\t// Embed Date\n-\t\t\t\t// yyyy-mm-ddThh:mmZ\n-\t\t\t\t.replace( /@DATE/g, ( new Date() ).toISOString().replace( /:\\d+\\.\\d+Z$/, "Z" ) );\n-\n-\t\t\t// Write concatenated source to file\n-\t\t\tgrunt.file.write( name, compiled );\n-\t\t};\n-\n-\t\t// Turn off opt-in if necessary\n-\t\tif ( !optIn ) {\n-\t\t\t// Overwrite the default inclusions with the explicit ones provided\n-\t\t\tconfig.rawText.jquery = "define([" + (included.length ? included.join(",") : "") + "]);";\n-\t\t}\n-\n-\t\t// Trace dependencies and concatenate files\n-\t\trequirejs.optimize( config, function( response ) {\n-\t\t\tgrunt.verbose.writeln( response );\n-\t\t\tgrunt.log.ok( "File \'" + name + "\' created." );\n-\t\t\tdone();\n-\t\t}, function( err ) {\n-\t\t\tdone( err );\n-\t\t});\n-\t});\n-\n-\t// Special "alias" task to make custom build creation less grawlix-y\n-\t// Translation example\n-\t//\n-\t// grunt custom:+ajax,-dimensions,-effects,-offset\n-\t//\n-\t// Becomes:\n-\t//\n-\t// grunt build:*:*:+ajax:-dimensions:-effects:-offset\n-\tgrunt.registerTask( "custom", function() {\n-\t\tvar args = this.args,\n-\t\t\tmodules = args.length ? args[ 0 ].replace( /,/g, ":" ) : "";\n-\n-\t\tgrunt.log.writeln( "Creating custom build...\\n" );\n-\n-\t\tgrunt.task.run([ "build:*:*" + (modules ? ":" + modules : ""), "uglify", "dist" ]);\n-\t});\n-};\ndiff --git a/src/plone/staticresources/static/components/jquery/build/tasks/dist.js b/src/plone/staticresources/static/components/jquery/build/tasks/dist.js\ndeleted file mode 100644\nindex 13e5633..0000000\n--- a/src/plone/staticresources/static/components/jquery/build/tasks/dist.js\n+++ /dev/null\n@@ -1,71 +0,0 @@\n-module.exports = function( grunt ) {\n-\n-\t"use strict";\n-\n-\tvar fs = require( "fs" ),\n-\t\tdistpaths = [\n-\t\t\t"dist/jquery.js",\n-\t\t\t"dist/jquery.min.map",\n-\t\t\t"dist/jquery.min.js"\n-\t\t];\n-\n-\t// Process files for distribution\n-\tgrunt.registerTask( "dist", function() {\n-\t\tvar stored, flags, paths, nonascii;\n-\n-\t\t// Check for stored destination paths\n-\t\t// ( set in dist/.destination.json )\n-\t\tstored = Object.keys( grunt.config( "dst" ) );\n-\n-\t\t// Allow command line input as well\n-\t\tflags = Object.keys( this.flags );\n-\n-\t\t// Combine all output target paths\n-\t\tpaths = [].concat( stored, flags ).filter(function( path ) {\n-\t\t\treturn path !== "*";\n-\t\t});\n-\n-\t\t// Ensure the dist files are pure ASCII\n-\t\tnonascii = false;\n-\n-\t\tdistpaths.forEach(function( filename ) {\n-\t\t\tvar i, c,\n-\t\t\t\ttext = fs.readFileSync( filename, "utf8" );\n-\n-\t\t\t// Ensure files use only \\n for line endings, not \\r\\n\n-\t\t\tif ( /\\x0d\\x0a/.test( text ) ) {\n-\t\t\t\tgrunt.log.writeln( filename + ": Incorrect line endings (\\\\r\\\\n)" );\n-\t\t\t\tnonascii = true;\n-\t\t\t}\n-\n-\t\t\t// Ensure only ASCII chars so script tags don\'t need a charset attribute\n-\t\t\tif ( text.length !== Buffer.byteLength( text, "utf8" ) ) {\n-\t\t\t\tgrunt.log.writeln( filename + ": Non-ASCII characters detected:" );\n-\t\t\t\tfor ( i = 0; i < text.length; i++ ) {\n-\t\t\t\t\tc = text.charCodeAt( i );\n-\t\t\t\t\tif ( c > 127 ) {\n-\t\t\t\t\t\tgrunt.log.writeln( "- position " + i + ": " + c );\n-\t\t\t\t\t\tgrunt.log.writeln( "-- " + text.substring( i - 20, i + 20 ) );\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\t}\n-\t\t\t\t}\n-\t\t\t\tnonascii = true;\n-\t\t\t}\n-\n-\t\t\t// Optionally copy dist files to other locations\n-\t\t\tpaths.forEach(function( path ) {\n-\t\t\t\tvar created;\n-\n-\t\t\t\tif ( !/\\/$/.test( path ) ) {\n-\t\t\t\t\tpath += "/";\n-\t\t\t\t}\n-\n-\t\t\t\tcreated = path + filename.replace( "dist/", "" );\n-\t\t\t\tgrunt.file.write( created, text );\n-\t\t\t\tgrunt.log.writeln( "File \'" + created + "\' created." );\n-\t\t\t});\n-\t\t});\n-\n-\t\treturn !nonascii;\n-\t});\n-};\ndiff --git a/src/plone/staticresources/static/components/jquery/build/tasks/testswarm.js b/src/plone/staticresources/static/components/jquery/build/tasks/testswarm.js\ndeleted file mode 100644\nindex 473bc9e..0000000\n--- a/src/plone/staticresources/static/components/jquery/build/tasks/testswarm.js\n+++ /dev/null\n@@ -1,58 +0,0 @@\n-module.exports = function( grunt ) {\n-\n-\t"use strict";\n-\n-\tgrunt.registerTask( "testswarm", function( commit, configFile, projectName, browserSets,\n-\t\t\ttimeout ) {\n-\t\tvar jobName, config, tests,\n-\t\t\ttestswarm = require( "testswarm" ),\n-\t\t\truns = {},\n-\t\t\tdone = this.async(),\n-\t\t\tpull = /PR-(\\d+)/.exec( commit );\n-\n-\t\tprojectName = projectName || "jquery";\n-\t\tconfig = grunt.file.readJSON( configFile )[ projectName ];\n-\t\tbrowserSets = browserSets || config.browserSets;\n-\t\tif ( browserSets[ 0 ] === "[" ) {\n-\t\t\t// We got an array, parse it\n-\t\t\tbrowserSets = JSON.parse( browserSets );\n-\t\t}\n-\t\ttimeout = timeout || 1000 * 60 * 15;\n-\t\ttests = grunt.config([ this.name, "tests" ]);\n-\n-\t\tif ( pull ) {\n-\t\t\tjobName = "Pull #" + pull[ 1 ] + "";\n-\t\t} else {\n-\t\t\tjobName = "Commit " + commit.substr( 0, 10 ) + "";\n-\t\t}\n-\n-\t\ttests.forEach(function( test ) {\n-\t\t\truns[ test ] = config.testUrl + commit + "/test/index.html?module=" + test;\n-\t\t});\n-\n-\t\ttestswarm.createClient({\n-\t\t\turl: config.swarmUrl\n-\t\t} )\n-\t\t.addReporter( testswarm.reporters.cli )\n-\t\t.auth( {\n-\t\t\tid: config.authUsername,\n-\t\t\ttoken: config.authToken\n-\t\t})\n-\t\t.addjob(\n-\t\t\t{\n-\t\t\t\tname: jobName,\n-\t\t\t\truns: runs,\n-\t\t\t\trunMax: config.runMax,\n-\t\t\t\tbrowserSets: browserSets,\n-\t\t\t\ttimeout: timeout\n-\t\t\t}, function( err, passed ) {\n-\t\t\t\tif ( err ) {\n-\t\t\t\t\tgrunt.log.error( err );\n-\t\t\t\t}\n-\t\t\t\tdone( passed );\n-\t\t\t}\n-\t\t);\n-\t});\n-};\ndiff --git a/src/plone/staticresources/static/components/jquery/dist/jquery.js b/src/plone/staticresources/static/components/jquery/dist/jquery.js\nindex 6feb110..7fc60fc 100644\n--- a/src/plone/staticresources/static/components/jquery/dist/jquery.js\n+++ b/src/plone/staticresources/static/components/jquery/dist/jquery.js\n@@ -1,27 +1,27 @@\n /*!\n- * jQuery JavaScript Library v1.11.3\n+ * jQuery JavaScript Library v1.12.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n+ * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n- * Date: 2015-04-28T16:19Z\n+ * Date: 2016-05-20T17:17Z\n */\n \n (function( global, factory ) {\n \n \tif ( typeof module === "object" && typeof module.exports === "object" ) {\n-\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n-\t\t// execute the factory and get jQuery\n-\t\t// For environments that do not inherently posses a window with a document\n-\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n-\t\t// This accentuates the need for the creation of a real window\n+\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n+\t\t// is present, execute the factory and get jQuery.\n+\t\t// For environments that do not have a `window` with a `document`\n+\t\t// (such as Node.js), expose a factory as module.exports.\n+\t\t// This accentuates the need for the creation of a real `window`.\n \t\t// e.g. var jQuery = require("jquery")(window);\n-\t\t// See ticket #14549 for more info\n+\t\t// See ticket #14549 for more info.\n \t\tmodule.exports = global.document ?\n \t\t\tfactory( global, true ) :\n \t\t\tfunction( w ) {\n@@ -37,14 +37,15 @@\n // Pass this if window is not defined yet\n }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {\n \n-// Can\'t do this because several apps including ASP.NET trace\n+// Support: Firefox 18+\n+// Can\'t be in strict mode, several libs including ASP.NET trace\n // the stack via arguments.caller.callee and Firefox dies if\n // you try to trace through "use strict" call chains. (#13335)\n-// Support: Firefox 18+\n-//\n-\n+//"use strict";\n var deletedIds = [];\n \n+var document = window.document;\n+\n var slice = deletedIds.slice;\n \n var concat = deletedIds.concat;\n@@ -64,10 +65,11 @@ var support = {};\n \n \n var\n-\tversion = "1.11.3",\n+\tversion = "1.12.4",\n \n \t// Define a local copy of jQuery\n \tjQuery = function( selector, context ) {\n+\n \t\t// The jQuery object is actually just the init constructor \'enhanced\'\n \t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n \t\treturn new jQuery.fn.init( selector, context );\n@@ -87,6 +89,7 @@ var\n \t};\n \n jQuery.fn = jQuery.prototype = {\n+\n \t// The current version of jQuery being used\n \tjquery: version,\n \n@@ -130,16 +133,14 @@ jQuery.fn = jQuery.prototype = {\n \t},\n \n \t// Execute a callback for every element in the matched set.\n-\t// (You can seed the arguments with an array of args, but this is\n-\t// only used internally.)\n-\teach: function( callback, args ) {\n-\t\treturn jQuery.each( this, callback, args );\n+\teach: function( callback ) {\n+\t\treturn jQuery.each( this, callback );\n \t},\n \n \tmap: function( callback ) {\n-\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n+\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n \t\t\treturn callback.call( elem, i, elem );\n-\t\t}));\n+\t\t} ) );\n \t},\n \n \tslice: function() {\n@@ -157,11 +158,11 @@ jQuery.fn = jQuery.prototype = {\n \teq: function( i ) {\n \t\tvar len = this.length,\n \t\t\tj = +i + ( i < 0 ? len : 0 );\n-\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n+\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n \t},\n \n \tend: function() {\n-\t\treturn this.prevObject || this.constructor(null);\n+\t\treturn this.prevObject || this.constructor();\n \t},\n \n \t// For internal use only.\n@@ -173,7 +174,7 @@ jQuery.fn = jQuery.prototype = {\n \n jQuery.extend = jQuery.fn.extend = function() {\n \tvar src, copyIsArray, copy, name, options, clone,\n-\t\ttarget = arguments[0] || {},\n+\t\ttarget = arguments[ 0 ] || {},\n \t\ti = 1,\n \t\tlength = arguments.length,\n \t\tdeep = false;\n@@ -188,7 +189,7 @@ jQuery.extend = jQuery.fn.extend = function() {\n \t}\n \n \t// Handle case when target is a string or something (possible in deep copy)\n-\tif ( typeof target !== "object" && !jQuery.isFunction(target) ) {\n+\tif ( typeof target !== "object" && !jQuery.isFunction( target ) ) {\n \t\ttarget = {};\n \t}\n \n@@ -199,8 +200,10 @@ jQuery.extend = jQuery.fn.extend = function() {\n \t}\n \n \tfor ( ; i < length; i++ ) {\n+\n \t\t// Only deal with non-null/undefined values\n-\t\tif ( (options = arguments[ i ]) != null ) {\n+\t\tif ( ( options = arguments[ i ] ) != null ) {\n+\n \t\t\t// Extend the base object\n \t\t\tfor ( name in options ) {\n \t\t\t\tsrc = target[ name ];\n@@ -212,13 +215,15 @@ jQuery.extend = jQuery.fn.extend = function() {\n \t\t\t\t}\n \n \t\t\t\t// Recurse if we\'re merging plain objects or arrays\n-\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n+\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n+\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n+\n \t\t\t\t\tif ( copyIsArray ) {\n \t\t\t\t\t\tcopyIsArray = false;\n-\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n+\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n \n \t\t\t\t\t} else {\n-\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n+\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n \t\t\t\t\t}\n \n \t\t\t\t\t// Never move original objects, clone them\n@@ -236,7 +241,8 @@ jQuery.extend = jQuery.fn.extend = function() {\n \treturn target;\n };\n \n-jQuery.extend({\n+jQuery.extend( {\n+\n \t// Unique for each copy of jQuery on the page\n \texpando: "jQuery" + ( version + Math.random() ).replace( /\\D/g, "" ),\n \n@@ -253,11 +259,11 @@ jQuery.extend({\n \t// Since version 1.3, DOM methods and functions like alert\n \t// aren\'t supported. They return false on IE (#2968).\n \tisFunction: function( obj ) {\n-\t\treturn jQuery.type(obj) === "function";\n+\t\treturn jQuery.type( obj ) === "function";\n \t},\n \n \tisArray: Array.isArray || function( obj ) {\n-\t\treturn jQuery.type(obj) === "array";\n+\t\treturn jQuery.type( obj ) === "array";\n \t},\n \n \tisWindow: function( obj ) {\n@@ -266,11 +272,13 @@ jQuery.extend({\n \t},\n \n \tisNumeric: function( obj ) {\n+\n \t\t// parseFloat NaNs numeric-cast false positives (null|true|false|"")\n \t\t// ...but misinterprets leading-number strings, particularly hex literals ("0x...")\n \t\t// subtraction forces infinities to NaN\n \t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n-\t\treturn !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;\n+\t\tvar realStringObj = obj && obj.toString();\n+\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n \t},\n \n \tisEmptyObject: function( obj ) {\n@@ -287,25 +295,27 @@ jQuery.extend({\n \t\t// Must be an Object.\n \t\t// Because of IE, we also have to check the presence of the constructor property.\n \t\t// Make sure that DOM nodes and window objects don\'t pass through, as well\n-\t\tif ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {\n+\t\tif ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {\n \t\t\treturn false;\n \t\t}\n \n \t\ttry {\n+\n \t\t\t// Not own constructor property must be Object\n \t\t\tif ( obj.constructor &&\n-\t\t\t\t!hasOwn.call(obj, "constructor") &&\n-\t\t\t\t!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {\n+\t\t\t\t!hasOwn.call( obj, "constructor" ) &&\n+\t\t\t\t!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {\n \t\t\t\treturn false;\n \t\t\t}\n \t\t} catch ( e ) {\n+\n \t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n \t\t\treturn false;\n \t\t}\n \n \t\t// Support: IE<9\n \t\t// Handle iteration over inherited properties before own properties.\n-\t\tif ( support.ownLast ) {\n+\t\tif ( !support.ownFirst ) {\n \t\t\tfor ( key in obj ) {\n \t\t\t\treturn hasOwn.call( obj, key );\n \t\t\t}\n@@ -323,20 +333,20 @@ jQuery.extend({\n \t\t\treturn obj + "";\n \t\t}\n \t\treturn typeof obj === "object" || typeof obj === "function" ?\n-\t\t\tclass2type[ toString.call(obj) ] || "object" :\n+\t\t\tclass2type[ toString.call( obj ) ] || "object" :\n \t\t\ttypeof obj;\n \t},\n \n-\t// Evaluates a script in a global context\n \t// Workarounds based on findings by Jim Driscoll\n \t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n \tglobalEval: function( data ) {\n \t\tif ( data && jQuery.trim( data ) ) {\n+\n \t\t\t// We use execScript on Internet Explorer\n \t\t\t// We use an anonymous function so that context is window\n \t\t\t// rather than jQuery in Firefox\n \t\t\t( window.execScript || function( data ) {\n-\t\t\t\twindow[ "eval" ].call( window, data );\n+\t\t\t\twindow[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation\n \t\t\t} )( data );\n \t\t}\n \t},\n@@ -351,49 +361,20 @@ jQuery.extend({\n \t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n \t},\n \n-\t// args is for internal usage only\n-\teach: function( obj, callback, args ) {\n-\t\tvar value,\n-\t\t\ti = 0,\n-\t\t\tlength = obj.length,\n-\t\t\tisArray = isArraylike( obj );\n-\n-\t\tif ( args ) {\n-\t\t\tif ( isArray ) {\n-\t\t\t\tfor ( ; i < length; i++ ) {\n-\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n-\n-\t\t\t\t\tif ( value === false ) {\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\t}\n-\t\t\t\t}\n-\t\t\t} else {\n-\t\t\t\tfor ( i in obj ) {\n-\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n+\teach: function( obj, callback ) {\n+\t\tvar length, i = 0;\n \n-\t\t\t\t\tif ( value === false ) {\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\t}\n+\t\tif ( isArrayLike( obj ) ) {\n+\t\t\tlength = obj.length;\n+\t\t\tfor ( ; i < length; i++ ) {\n+\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n+\t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t}\n-\n-\t\t// A special, fast, case for the most common use of each\n \t\t} else {\n-\t\t\tif ( isArray ) {\n-\t\t\t\tfor ( ; i < length; i++ ) {\n-\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n-\n-\t\t\t\t\tif ( value === false ) {\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\t}\n-\t\t\t\t}\n-\t\t\t} else {\n-\t\t\t\tfor ( i in obj ) {\n-\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n-\n-\t\t\t\t\tif ( value === false ) {\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\t}\n+\t\t\tfor ( i in obj ) {\n+\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n+\t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t}\n \t\t}\n@@ -413,7 +394,7 @@ jQuery.extend({\n \t\tvar ret = results || [];\n \n \t\tif ( arr != null ) {\n-\t\t\tif ( isArraylike( Object(arr) ) ) {\n+\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n \t\t\t\tjQuery.merge( ret,\n \t\t\t\t\ttypeof arr === "string" ?\n \t\t\t\t\t[ arr ] : arr\n@@ -438,6 +419,7 @@ jQuery.extend({\n \t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n \n \t\t\tfor ( ; i < len; i++ ) {\n+\n \t\t\t\t// Skip accessing in sparse arrays\n \t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n \t\t\t\t\treturn i;\n@@ -460,7 +442,7 @@ jQuery.extend({\n \t\t// Support: IE<9\n \t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n \t\tif ( len !== len ) {\n-\t\t\twhile ( second[j] !== undefined ) {\n+\t\t\twhile ( second[ j ] !== undefined ) {\n \t\t\t\tfirst[ i++ ] = second[ j++ ];\n \t\t\t}\n \t\t}\n@@ -491,14 +473,13 @@ jQuery.extend({\n \n \t// arg is for internal usage only\n \tmap: function( elems, callback, arg ) {\n-\t\tvar value,\n+\t\tvar length, value,\n \t\t\ti = 0,\n-\t\t\tlength = elems.length,\n-\t\t\tisArray = isArraylike( elems ),\n \t\t\tret = [];\n \n \t\t// Go through the array, translating each of the items to their new values\n-\t\tif ( isArray ) {\n+\t\tif ( isArrayLike( elems ) ) {\n+\t\t\tlength = elems.length;\n \t\t\tfor ( ; i < length; i++ ) {\n \t\t\t\tvalue = callback( elems[ i ], i, arg );\n \n@@ -561,43 +542,50 @@ jQuery.extend({\n \t// jQuery.support is not used in Core but other projects attach their\n \t// properties to it so it needs to exist.\n \tsupport: support\n-});\n+} );\n+\n+// JSHint would error on this code due to the Symbol not being defined in ES5.\n+// Defining this global in .jshintrc would create a danger of using the global\n+// unguarded in another place, it seems safer to just disable JSHint for these\n+// three lines.\n+/* jshint ignore: start */\n+if ( typeof Symbol === "function" ) {\n+\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\n+}\n+/* jshint ignore: end */\n \n // Populate the class2type map\n-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {\n+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),\n+function( i, name ) {\n \tclass2type[ "[object " + name + "]" ] = name.toLowerCase();\n-});\n+} );\n \n-function isArraylike( obj ) {\n+function isArrayLike( obj ) {\n \n \t// Support: iOS 8.2 (not reproducible in simulator)\n \t// `in` check used to prevent JIT error (gh-2145)\n \t// hasOwn isn\'t used here due to false negatives\n \t// regarding Nodelist length in IE\n-\tvar length = "length" in obj && obj.length,\n+\tvar length = !!obj && "length" in obj && obj.length,\n \t\ttype = jQuery.type( obj );\n \n \tif ( type === "function" || jQuery.isWindow( obj ) ) {\n \t\treturn false;\n \t}\n \n-\tif ( obj.nodeType === 1 && length ) {\n-\t\treturn true;\n-\t}\n-\n \treturn type === "array" || length === 0 ||\n \t\ttypeof length === "number" && length > 0 && ( length - 1 ) in obj;\n }\n var Sizzle =\n /*!\n- * Sizzle CSS Selector Engine v2.2.0-pre\n+ * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n- * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors\n+ * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n- * Date: 2014-12-16\n+ * Date: 2015-10-17\n */\n (function( window ) {\n \n@@ -665,25 +653,21 @@ var i,\n \n \t// Regular expressions\n \n-\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n+\t// http://www.w3.org/TR/css3-selectors/#whitespace\n \twhitespace = "[\\\\x20\\\\t\\\\r\\\\n\\\\f]",\n-\t// http://www.w3.org/TR/css3-syntax/#characters\n-\tcharacterEncoding = "(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+",\n \n-\t// Loosely modeled on CSS identifier characters\n-\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n-\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n-\tidentifier = characterEncoding.replace( "w", "w#" ),\n+\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n+\tidentifier = "(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+",\n \n \t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n-\tattributes = "\\\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +\n+\tattributes = "\\\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +\n \t\t// Operator (capture 2)\n \t\t"*([*^$|!~]?=)" + whitespace +\n \t\t// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"\n \t\t"*(?:\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\"|(" + identifier + "))|)" + whitespace +\n \t\t"*\\\\]",\n \n-\tpseudos = ":(" + characterEncoding + ")(?:\\\\((" +\n+\tpseudos = ":(" + identifier + ")(?:\\\\((" +\n \t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n \t\t// 1. quoted (capture 3; capture 4 or capture 5)\n \t\t"(\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\")|" +\n@@ -706,9 +690,9 @@ var i,\n \tridentifier = new RegExp( "^" + identifier + "$" ),\n \n \tmatchExpr = {\n-\t\t"ID": new RegExp( "^#(" + characterEncoding + ")" ),\n-\t\t"CLASS": new RegExp( "^\\\\.(" + characterEncoding + ")" ),\n-\t\t"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),\n+\t\t"ID": new RegExp( "^#(" + identifier + ")" ),\n+\t\t"CLASS": new RegExp( "^\\\\.(" + identifier + ")" ),\n+\t\t"TAG": new RegExp( "^(" + identifier + "|[*])" ),\n \t\t"ATTR": new RegExp( "^" + attributes ),\n \t\t"PSEUDO": new RegExp( "^" + pseudos ),\n \t\t"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(" + whitespace +\n@@ -786,103 +770,129 @@ try {\n }\n \n function Sizzle( selector, context, results, seed ) {\n-\tvar match, elem, m, nodeType,\n-\t\t// QSA vars\n-\t\ti, groups, old, nid, newContext, newSelector;\n+\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n+\t\tnewContext = context && context.ownerDocument,\n \n-\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n-\t\tsetDocument( context );\n-\t}\n+\t\t// nodeType defaults to 9, since context defaults to document\n+\t\tnodeType = context ? context.nodeType : 9;\n \n-\tcontext = context || document;\n \tresults = results || [];\n-\tnodeType = context.nodeType;\n \n+\t// Return early from calls with invalid selector or context\n \tif ( typeof selector !== "string" || !selector ||\n \t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n \n \t\treturn results;\n \t}\n \n-\tif ( !seed && documentIsHTML ) {\n+\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n+\tif ( !seed ) {\n \n-\t\t// Try to shortcut find operations when possible (e.g., not under DocumentFragment)\n-\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n-\t\t\t// Speed-up: Sizzle("#ID")\n-\t\t\tif ( (m = match[1]) ) {\n-\t\t\t\tif ( nodeType === 9 ) {\n-\t\t\t\t\telem = context.getElementById( m );\n-\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n-\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n-\t\t\t\t\tif ( elem && elem.parentNode ) {\n-\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n-\t\t\t\t\t\t// by name instead of ID\n-\t\t\t\t\t\tif ( elem.id === m ) {\n-\t\t\t\t\t\t\tresults.push( elem );\n+\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n+\t\t\tsetDocument( context );\n+\t\t}\n+\t\tcontext = context || document;\n+\n+\t\tif ( documentIsHTML ) {\n+\n+\t\t\t// If the selector is sufficiently simple, try using a "get*By*" DOM method\n+\t\t\t// (excepting DocumentFragment context, where the methods don\'t exist)\n+\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n+\n+\t\t\t\t// ID selector\n+\t\t\t\tif ( (m = match[1]) ) {\n+\n+\t\t\t\t\t// Document context\n+\t\t\t\t\tif ( nodeType === 9 ) {\n+\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n+\n+\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n+\t\t\t\t\t\t\t// TODO: identify versions\n+\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n+\t\t\t\t\t\t\tif ( elem.id === m ) {\n+\t\t\t\t\t\t\t\tresults.push( elem );\n+\t\t\t\t\t\t\t\treturn results;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n \t\t\t\t\t\t\treturn results;\n \t\t\t\t\t\t}\n+\n+\t\t\t\t\t// Element context\n \t\t\t\t\t} else {\n-\t\t\t\t\t\treturn results;\n-\t\t\t\t\t}\n-\t\t\t\t} else {\n-\t\t\t\t\t// Context is not a document\n-\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n-\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n-\t\t\t\t\t\tresults.push( elem );\n-\t\t\t\t\t\treturn results;\n+\n+\t\t\t\t\t\t// Support: IE, Opera, Webkit\n+\t\t\t\t\t\t// TODO: identify versions\n+\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n+\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n+\t\t\t\t\t\t\tcontains( context, elem ) &&\n+\t\t\t\t\t\t\telem.id === m ) {\n+\n+\t\t\t\t\t\t\tresults.push( elem );\n+\t\t\t\t\t\t\treturn results;\n+\t\t\t\t\t\t}\n \t\t\t\t\t}\n-\t\t\t\t}\n \n-\t\t\t// Speed-up: Sizzle("TAG")\n-\t\t\t} else if ( match[2] ) {\n-\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n-\t\t\t\treturn results;\n+\t\t\t\t// Type selector\n+\t\t\t\t} else if ( match[2] ) {\n+\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n+\t\t\t\t\treturn results;\n \n-\t\t\t// Speed-up: Sizzle(".CLASS")\n-\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName ) {\n-\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n-\t\t\t\treturn results;\n+\t\t\t\t// Class selector\n+\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n+\t\t\t\t\tcontext.getElementsByClassName ) {\n+\n+\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n+\t\t\t\t\treturn results;\n+\t\t\t\t}\n \t\t\t}\n-\t\t}\n \n-\t\t// QSA path\n-\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n-\t\t\tnid = old = expando;\n-\t\t\tnewContext = context;\n-\t\t\tnewSelector = nodeType !== 1 && selector;\n+\t\t\t// Take advantage of querySelectorAll\n+\t\t\tif ( support.qsa &&\n+\t\t\t\t!compilerCache[ selector + " " ] &&\n+\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n \n-\t\t\t// qSA works strangely on Element-rooted queries\n-\t\t\t// We can work around this by specifying an extra ID on the root\n-\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n-\t\t\t// IE 8 doesn\'t work on object elements\n-\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {\n-\t\t\t\tgroups = tokenize( selector );\n+\t\t\t\tif ( nodeType !== 1 ) {\n+\t\t\t\t\tnewContext = context;\n+\t\t\t\t\tnewSelector = selector;\n \n-\t\t\t\tif ( (old = context.getAttribute("id")) ) {\n-\t\t\t\t\tnid = old.replace( rescape, "\\\\$&" );\n-\t\t\t\t} else {\n-\t\t\t\t\tcontext.setAttribute( "id", nid );\n-\t\t\t\t}\n-\t\t\t\tnid = "[id=\'" + nid + "\'] ";\n+\t\t\t\t// qSA looks outside Element context, which is not what we want\n+\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n+\t\t\t\t// Support: IE <=8\n+\t\t\t\t// Exclude object elements\n+\t\t\t\t} else if ( context.nodeName.toLowerCase() !== "object" ) {\n \n-\t\t\t\ti = groups.length;\n-\t\t\t\twhile ( i-- ) {\n-\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n+\t\t\t\t\t// Capture the context ID, setting it first if necessary\n+\t\t\t\t\tif ( (nid = context.getAttribute( "id" )) ) {\n+\t\t\t\t\t\tnid = nid.replace( rescape, "\\\\$&" );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tcontext.setAttribute( "id", (nid = expando) );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t// Prefix every selector in the list\n+\t\t\t\t\tgroups = tokenize( selector );\n+\t\t\t\t\ti = groups.length;\n+\t\t\t\t\tnidselect = ridentifier.test( nid ) ? "#" + nid : "[id=\'" + nid + "\']";\n+\t\t\t\t\twhile ( i-- ) {\n+\t\t\t\t\t\tgroups[i] = nidselect + " " + toSelector( groups[i] );\n+\t\t\t\t\t}\n+\t\t\t\t\tnewSelector = groups.join( "," );\n+\n+\t\t\t\t\t// Expand context for sibling selectors\n+\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n+\t\t\t\t\t\tcontext;\n \t\t\t\t}\n-\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n-\t\t\t\tnewSelector = groups.join(",");\n-\t\t\t}\n \n-\t\t\tif ( newSelector ) {\n-\t\t\t\ttry {\n-\t\t\t\t\tpush.apply( results,\n-\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n-\t\t\t\t\t);\n-\t\t\t\t\treturn results;\n-\t\t\t\t} catch(qsaError) {\n-\t\t\t\t} finally {\n-\t\t\t\t\tif ( !old ) {\n-\t\t\t\t\t\tcontext.removeAttribute("id");\n+\t\t\t\tif ( newSelector ) {\n+\t\t\t\t\ttry {\n+\t\t\t\t\t\tpush.apply( results,\n+\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\treturn results;\n+\t\t\t\t\t} catch ( qsaError ) {\n+\t\t\t\t\t} finally {\n+\t\t\t\t\t\tif ( nid === expando ) {\n+\t\t\t\t\t\t\tcontext.removeAttribute( "id" );\n+\t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n@@ -895,7 +905,7 @@ function Sizzle( selector, context, results, seed ) {\n \n /**\n * Create key-value caches of limited size\n- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n+ * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\n@@ -950,7 +960,7 @@ function assert( fn ) {\n */\n function addHandle( attrs, handler ) {\n \tvar arr = attrs.split("|"),\n-\t\ti = attrs.length;\n+\t\ti = arr.length;\n \n \twhile ( i-- ) {\n \t\tExpr.attrHandle[ arr[i] ] = handler;\n@@ -1063,33 +1073,29 @@ setDocument = Sizzle.setDocument = function( node ) {\n \tvar hasCompare, parent,\n \t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n \n-\t// If no document and documentElement is available, return\n+\t// Return early if doc is invalid or already selected\n \tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n \t\treturn document;\n \t}\n \n-\t// Set our document\n+\t// Update global variables\n \tdocument = doc;\n-\tdocElem = doc.documentElement;\n-\tparent = doc.defaultView;\n-\n-\t// Support: IE>8\n-\t// If iframe document is assigned to "document" variable and if iframe has been reloaded,\n-\t// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936\n-\t// IE6-8 do not support the defaultView property so parent will be undefined\n-\tif ( parent && parent !== parent.top ) {\n-\t\t// IE11 does not have attachEvent, so all must suffer\n+\tdocElem = document.documentElement;\n+\tdocumentIsHTML = !isXML( document );\n+\n+\t// Support: IE 9-11, Edge\n+\t// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)\n+\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n+\t\t// Support: IE 11\n \t\tif ( parent.addEventListener ) {\n \t\t\tparent.addEventListener( "unload", unloadHandler, false );\n+\n+\t\t// Support: IE 9 - 10 only\n \t\t} else if ( parent.attachEvent ) {\n \t\t\tparent.attachEvent( "onunload", unloadHandler );\n \t\t}\n \t}\n \n-\t/* Support tests\n-\t---------------------------------------------------------------------- */\n-\tdocumentIsHTML = !isXML( doc );\n-\n \t/* Attributes\n \t---------------------------------------------------------------------- */\n \n@@ -1106,12 +1112,12 @@ setDocument = Sizzle.setDocument = function( node ) {\n \n \t// Check if getElementsByTagName("*") returns only elements\n \tsupport.getElementsByTagName = assert(function( div ) {\n-\t\tdiv.appendChild( doc.createComment("") );\n+\t\tdiv.appendChild( document.createComment("") );\n \t\treturn !div.getElementsByTagName("*").length;\n \t});\n \n \t// Support: IE<9\n-\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName );\n+\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n \n \t// Support: IE<10\n \t// Check if getElementById returns elements by name\n@@ -1119,7 +1125,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t// so use a roundabout getElementsByName test\n \tsupport.getById = assert(function( div ) {\n \t\tdocElem.appendChild( div ).id = expando;\n-\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n+\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n \t});\n \n \t// ID find and filter\n@@ -1127,9 +1133,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t\tExpr.find["ID"] = function( id, context ) {\n \t\t\tif ( typeof context.getElementById !== "undefined" && documentIsHTML ) {\n \t\t\t\tvar m = context.getElementById( id );\n-\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n-\t\t\t\t// nodes that are no longer in the document #6963\n-\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n+\t\t\t\treturn m ? [ m ] : [];\n \t\t\t}\n \t\t};\n \t\tExpr.filter["ID"] = function( id ) {\n@@ -1146,7 +1150,8 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t\tExpr.filter["ID"] = function( id ) {\n \t\t\tvar attrId = id.replace( runescape, funescape );\n \t\t\treturn function( elem ) {\n-\t\t\t\tvar node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");\n+\t\t\t\tvar node = typeof elem.getAttributeNode !== "undefined" &&\n+\t\t\t\t\telem.getAttributeNode("id");\n \t\t\t\treturn node && node.value === attrId;\n \t\t\t};\n \t\t};\n@@ -1186,7 +1191,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \n \t// Class\n \tExpr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {\n-\t\tif ( documentIsHTML ) {\n+\t\tif ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {\n \t\t\treturn context.getElementsByClassName( className );\n \t\t}\n \t};\n@@ -1206,7 +1211,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t// See http://bugs.jquery.com/ticket/13378\n \trbuggyQSA = [];\n \n-\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n+\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n \t\t// Build QSA regex\n \t\t// Regex strategy adopted from Diego Perini\n \t\tassert(function( div ) {\n@@ -1216,7 +1221,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t\t\t// since its presence should be enough\n \t\t\t// http://bugs.jquery.com/ticket/12359\n \t\t\tdocElem.appendChild( div ).innerHTML = "" +\n-\t\t\t\t"" +\n \t\t\t\t"";\n \n \t\t\t// Support: IE8, Opera 11-12.16\n@@ -1233,7 +1238,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t\t\t\trbuggyQSA.push( "\\\\[" + whitespace + "*(?:value|" + booleans + ")" );\n \t\t\t}\n \n-\t\t\t// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+\n+\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n \t\t\tif ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {\n \t\t\t\trbuggyQSA.push("~=");\n \t\t\t}\n@@ -1256,7 +1261,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t\tassert(function( div ) {\n \t\t\t// Support: Windows 8 Native Apps\n \t\t\t// The type and name attributes are restricted during .innerHTML assignment\n-\t\t\tvar input = doc.createElement("input");\n+\t\t\tvar input = document.createElement("input");\n \t\t\tinput.setAttribute( "type", "hidden" );\n \t\t\tdiv.appendChild( input ).setAttribute( "name", "D" );\n \n@@ -1304,7 +1309,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \thasCompare = rnative.test( docElem.compareDocumentPosition );\n \n \t// Element contains another\n-\t// Purposefully does not implement inclusive descendent\n+\t// Purposefully self-exclusive\n \t// As in, an element does not contain itself\n \tcontains = hasCompare || rnative.test( docElem.contains ) ?\n \t\tfunction( a, b ) {\n@@ -1358,10 +1363,10 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n \n \t\t\t// Choose the first element that is related to our preferred document\n-\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n+\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n \t\t\t\treturn -1;\n \t\t\t}\n-\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n+\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n \t\t\t\treturn 1;\n \t\t\t}\n \n@@ -1389,8 +1394,8 @@ setDocument = Sizzle.setDocument = function( node ) {\n \n \t\t// Parentless nodes are either documents or disconnected\n \t\tif ( !aup || !bup ) {\n-\t\t\treturn a === doc ? -1 :\n-\t\t\t\tb === doc ? 1 :\n+\t\t\treturn a === document ? -1 :\n+\t\t\t\tb === document ? 1 :\n \t\t\t\taup ? -1 :\n \t\t\t\tbup ? 1 :\n \t\t\t\tsortInput ?\n@@ -1427,7 +1432,7 @@ setDocument = Sizzle.setDocument = function( node ) {\n \t\t\t0;\n \t};\n \n-\treturn doc;\n+\treturn document;\n };\n \n Sizzle.matches = function( expr, elements ) {\n@@ -1444,6 +1449,7 @@ Sizzle.matchesSelector = function( elem, expr ) {\n \texpr = expr.replace( rattributeQuotes, "=\'$1\']" );\n \n \tif ( support.matchesSelector && documentIsHTML &&\n+\t\t!compilerCache[ expr + " " ] &&\n \t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n \t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n \n@@ -1717,11 +1723,12 @@ Expr = Sizzle.selectors = {\n \t\t\t\t} :\n \n \t\t\t\tfunction( elem, context, xml ) {\n-\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n+\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n \t\t\t\t\t\tdir = simple !== forward ? "nextSibling" : "previousSibling",\n \t\t\t\t\t\tparent = elem.parentNode,\n \t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n-\t\t\t\t\t\tuseCache = !xml && !ofType;\n+\t\t\t\t\t\tuseCache = !xml && !ofType,\n+\t\t\t\t\t\tdiff = false;\n \n \t\t\t\t\tif ( parent ) {\n \n@@ -1730,7 +1737,10 @@ Expr = Sizzle.selectors = {\n \t\t\t\t\t\t\twhile ( dir ) {\n \t\t\t\t\t\t\t\tnode = elem;\n \t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n-\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n+\t\t\t\t\t\t\t\t\tif ( ofType ?\n+\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n+\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n+\n \t\t\t\t\t\t\t\t\t\treturn false;\n \t\t\t\t\t\t\t\t\t}\n \t\t\t\t\t\t\t\t}\n@@ -1744,11 +1754,21 @@ Expr = Sizzle.selectors = {\n \n \t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n \t\t\t\t\t\tif ( forward && useCache ) {\n+\n \t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n-\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n-\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n-\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n-\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n+\n+\t\t\t\t\t\t\t// ...in a gzip-friendly way\n+\t\t\t\t\t\t\tnode = parent;\n+\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n+\n+\t\t\t\t\t\t\t// Support: IE <9 only\n+\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n+\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n+\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n+\n+\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n+\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n+\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n \t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n \n \t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n@@ -1758,29 +1778,55 @@ Expr = Sizzle.selectors = {\n \n \t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n \t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n-\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n+\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n \t\t\t\t\t\t\t\t\tbreak;\n \t\t\t\t\t\t\t\t}\n \t\t\t\t\t\t\t}\n \n-\t\t\t\t\t\t// Use previously-cached element index if available\n-\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n-\t\t\t\t\t\t\tdiff = cache[1];\n-\n-\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n \t\t\t\t\t\t} else {\n-\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n-\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n-\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n+\t\t\t\t\t\t\t// Use previously-cached element index if available\n+\t\t\t\t\t\t\tif ( useCache ) {\n+\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n+\t\t\t\t\t\t\t\tnode = elem;\n+\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n \n-\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n-\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n-\t\t\t\t\t\t\t\t\tif ( useCache ) {\n-\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n-\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t// Support: IE <9 only\n+\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n+\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n+\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n+\n+\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n+\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n+\t\t\t\t\t\t\t\tdiff = nodeIndex;\n+\t\t\t\t\t\t\t}\n \n-\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n-\t\t\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\t// xml :nth-child(...)\n+\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n+\t\t\t\t\t\t\tif ( diff === false ) {\n+\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n+\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n+\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n+\n+\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n+\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n+\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n+\t\t\t\t\t\t\t\t\t\t++diff ) {\n+\n+\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n+\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n+\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n+\n+\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n+\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n+\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n+\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n+\n+\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n+\t\t\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n+\t\t\t\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\t\t\t\t}\n \t\t\t\t\t\t\t\t\t}\n \t\t\t\t\t\t\t\t}\n \t\t\t\t\t\t\t}\n@@ -2142,10 +2188,10 @@ function addCombinator( matcher, combinator, base ) {\n \n \t\t// Check against all ancestor/preceding elements\n \t\tfunction( elem, context, xml ) {\n-\t\t\tvar oldCache, outerCache,\n+\t\t\tvar oldCache, uniqueCache, outerCache,\n \t\t\t\tnewCache = [ dirruns, doneName ];\n \n-\t\t\t// We can\'t set arbitrary data on XML nodes, so they don\'t benefit from dir caching\n+\t\t\t// We can\'t set arbitrary data on XML nodes, so they don\'t benefit from combinator caching\n \t\t\tif ( xml ) {\n \t\t\t\twhile ( (elem = elem[ dir ]) ) {\n \t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n@@ -2158,14 +2204,19 @@ function addCombinator( matcher, combinator, base ) {\n \t\t\t\twhile ( (elem = elem[ dir ]) ) {\n \t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n \t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n-\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n+\n+\t\t\t\t\t\t// Support: IE <9 only\n+\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n+\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n+\n+\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n \t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n \n \t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n \t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n \t\t\t\t\t\t} else {\n \t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n-\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n+\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n \n \t\t\t\t\t\t\t// A match means we\'re done; a fail means we have to keep checking\n \t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n@@ -2390,18 +2441,21 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n \t\t\t\tlen = elems.length;\n \n \t\t\tif ( outermost ) {\n-\t\t\t\toutermostContext = context !== document && context;\n+\t\t\t\toutermostContext = context === document || context || outermost;\n \t\t\t}\n \n \t\t\t// Add elements passing elementMatchers directly to results\n-\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be "00" below\n \t\t\t// Support: IE<9, Safari\n \t\t\t// Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id\n \t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n \t\t\t\tif ( byElement && elem ) {\n \t\t\t\t\tj = 0;\n+\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n+\t\t\t\t\t\tsetDocument( elem );\n+\t\t\t\t\t\txml = !documentIsHTML;\n+\t\t\t\t\t}\n \t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n-\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n+\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n \t\t\t\t\t\t\tresults.push( elem );\n \t\t\t\t\t\t\tbreak;\n \t\t\t\t\t\t}\n@@ -2425,8 +2479,17 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n \t\t\t\t}\n \t\t\t}\n \n-\t\t\t// Apply set filters to unmatched elements\n+\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n+\t\t\t// makes the latter nonnegative.\n \t\t\tmatchedCount += i;\n+\n+\t\t\t// Apply set filters to unmatched elements\n+\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n+\t\t\t// equals `i`), unless we didn\'t visit _any_ elements in the above loop because we have\n+\t\t\t// no element matchers and no seed.\n+\t\t\t// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that\n+\t\t\t// case, which will result in a "00" `matchedCount` that differs from `i` but is also\n+\t\t\t// numerically zero.\n \t\t\tif ( bySet && i !== matchedCount ) {\n \t\t\t\tj = 0;\n \t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n@@ -2518,10 +2581,11 @@ select = Sizzle.select = function( selector, context, results, seed ) {\n \n \tresults = results || [];\n \n-\t// Try to minimize operations if there is no seed and only one group\n+\t// Try to minimize operations if there is only one selector in the list and no seed\n+\t// (the latter of which guarantees us context)\n \tif ( match.length === 1 ) {\n \n-\t\t// Take a shortcut and set the context if the root selector is an ID\n+\t\t// Reduce context if the leading compound selector is an ID\n \t\ttokens = match[0] = match[0].slice( 0 );\n \t\tif ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&\n \t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n@@ -2576,7 +2640,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {\n \t\tcontext,\n \t\t!documentIsHTML,\n \t\tresults,\n-\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n+\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n \t);\n \treturn results;\n };\n@@ -2652,17 +2716,46 @@ return Sizzle;\n \n jQuery.find = Sizzle;\n jQuery.expr = Sizzle.selectors;\n-jQuery.expr[":"] = jQuery.expr.pseudos;\n-jQuery.unique = Sizzle.uniqueSort;\n+jQuery.expr[ ":" ] = jQuery.expr.pseudos;\n+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n jQuery.text = Sizzle.getText;\n jQuery.isXMLDoc = Sizzle.isXML;\n jQuery.contains = Sizzle.contains;\n \n \n \n+var dir = function( elem, dir, until ) {\n+\tvar matched = [],\n+\t\ttruncate = until !== undefined;\n+\n+\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n+\t\tif ( elem.nodeType === 1 ) {\n+\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tmatched.push( elem );\n+\t\t}\n+\t}\n+\treturn matched;\n+};\n+\n+\n+var siblings = function( n, elem ) {\n+\tvar matched = [];\n+\n+\tfor ( ; n; n = n.nextSibling ) {\n+\t\tif ( n.nodeType === 1 && n !== elem ) {\n+\t\t\tmatched.push( n );\n+\t\t}\n+\t}\n+\n+\treturn matched;\n+};\n+\n+\n var rneedsContext = jQuery.expr.match.needsContext;\n \n-var rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n+var rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n \n \n \n@@ -2674,14 +2767,14 @@ function winnow( elements, qualifier, not ) {\n \t\treturn jQuery.grep( elements, function( elem, i ) {\n \t\t\t/* jshint -W018 */\n \t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n-\t\t});\n+\t\t} );\n \n \t}\n \n \tif ( qualifier.nodeType ) {\n \t\treturn jQuery.grep( elements, function( elem ) {\n \t\t\treturn ( elem === qualifier ) !== not;\n-\t\t});\n+\t\t} );\n \n \t}\n \n@@ -2694,8 +2787,8 @@ function winnow( elements, qualifier, not ) {\n \t}\n \n \treturn jQuery.grep( elements, function( elem ) {\n-\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n-\t});\n+\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\n+\t} );\n }\n \n jQuery.filter = function( expr, elems, not ) {\n@@ -2709,10 +2802,10 @@ jQuery.filter = function( expr, elems, not ) {\n \t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n \t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n \t\t\treturn elem.nodeType === 1;\n-\t\t}));\n+\t\t} ) );\n };\n \n-jQuery.fn.extend({\n+jQuery.fn.extend( {\n \tfind: function( selector ) {\n \t\tvar i,\n \t\t\tret = [],\n@@ -2720,13 +2813,13 @@ jQuery.fn.extend({\n \t\t\tlen = self.length;\n \n \t\tif ( typeof selector !== "string" ) {\n-\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n+\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n \t\t\t\tfor ( i = 0; i < len; i++ ) {\n \t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n \t\t\t\t\t\treturn true;\n \t\t\t\t\t}\n \t\t\t\t}\n-\t\t\t}) );\n+\t\t\t} ) );\n \t\t}\n \n \t\tfor ( i = 0; i < len; i++ ) {\n@@ -2739,10 +2832,10 @@ jQuery.fn.extend({\n \t\treturn ret;\n \t},\n \tfilter: function( selector ) {\n-\t\treturn this.pushStack( winnow(this, selector || [], false) );\n+\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n \t},\n \tnot: function( selector ) {\n-\t\treturn this.pushStack( winnow(this, selector || [], true) );\n+\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n \t},\n \tis: function( selector ) {\n \t\treturn !!winnow(\n@@ -2756,7 +2849,7 @@ jQuery.fn.extend({\n \t\t\tfalse\n \t\t).length;\n \t}\n-});\n+} );\n \n \n // Initialize a jQuery object\n@@ -2765,15 +2858,12 @@ jQuery.fn.extend({\n // A central reference to the root jQuery(document)\n var rootjQuery,\n \n-\t// Use the correct document accordingly with window argument (sandbox)\n-\tdocument = window.document,\n-\n \t// A simple way to check for HTML strings\n \t// Prioritize #id over to avoid XSS via location.hash (#9521)\n \t// Strict HTML recognition (#11290: must start with <)\n \trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n \n-\tinit = jQuery.fn.init = function( selector, context ) {\n+\tinit = jQuery.fn.init = function( selector, context, root ) {\n \t\tvar match, elem;\n \n \t\t// HANDLE: $(""), $(null), $(undefined), $(false)\n@@ -2781,9 +2871,16 @@ var rootjQuery,\n \t\t\treturn this;\n \t\t}\n \n+\t\t// init accepts an alternate rootjQuery\n+\t\t// so migrate can support jQuery.sub (gh-2101)\n+\t\troot = root || rootjQuery;\n+\n \t\t// Handle HTML strings\n \t\tif ( typeof selector === "string" ) {\n-\t\t\tif ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {\n+\t\t\tif ( selector.charAt( 0 ) === "<" &&\n+\t\t\t\tselector.charAt( selector.length - 1 ) === ">" &&\n+\t\t\t\tselector.length >= 3 ) {\n+\n \t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n \t\t\t\tmatch = [ null, selector, null ];\n \n@@ -2792,23 +2889,24 @@ var rootjQuery,\n \t\t\t}\n \n \t\t\t// Match html or make sure no context is specified for #id\n-\t\t\tif ( match && (match[1] || !context) ) {\n+\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n \n \t\t\t\t// HANDLE: $(html) -> $(array)\n-\t\t\t\tif ( match[1] ) {\n-\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n+\t\t\t\tif ( match[ 1 ] ) {\n+\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n \n \t\t\t\t\t// scripts is true for back-compat\n \t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n \t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n-\t\t\t\t\t\tmatch[1],\n+\t\t\t\t\t\tmatch[ 1 ],\n \t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n \t\t\t\t\t\ttrue\n \t\t\t\t\t) );\n \n \t\t\t\t\t// HANDLE: $(html, props)\n-\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n+\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n \t\t\t\t\t\tfor ( match in context ) {\n+\n \t\t\t\t\t\t\t// Properties of context are called as methods if possible\n \t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n \t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n@@ -2824,20 +2922,21 @@ var rootjQuery,\n \n \t\t\t\t// HANDLE: $(#id)\n \t\t\t\t} else {\n-\t\t\t\t\telem = document.getElementById( match[2] );\n+\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n \n \t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n \t\t\t\t\t// nodes that are no longer in the document #6963\n \t\t\t\t\tif ( elem && elem.parentNode ) {\n+\n \t\t\t\t\t\t// Handle the case where IE and Opera return items\n \t\t\t\t\t\t// by name instead of ID\n-\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n+\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\n \t\t\t\t\t\t\treturn rootjQuery.find( selector );\n \t\t\t\t\t\t}\n \n \t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n \t\t\t\t\t\tthis.length = 1;\n-\t\t\t\t\t\tthis[0] = elem;\n+\t\t\t\t\t\tthis[ 0 ] = elem;\n \t\t\t\t\t}\n \n \t\t\t\t\tthis.context = document;\n@@ -2847,7 +2946,7 @@ var rootjQuery,\n \n \t\t\t// HANDLE: $(expr, $(...))\n \t\t\t} else if ( !context || context.jquery ) {\n-\t\t\t\treturn ( context || rootjQuery ).find( selector );\n+\t\t\t\treturn ( context || root ).find( selector );\n \n \t\t\t// HANDLE: $(expr, context)\n \t\t\t// (which is just equivalent to: $(context).find(expr)\n@@ -2857,15 +2956,16 @@ var rootjQuery,\n \n \t\t// HANDLE: $(DOMElement)\n \t\t} else if ( selector.nodeType ) {\n-\t\t\tthis.context = this[0] = selector;\n+\t\t\tthis.context = this[ 0 ] = selector;\n \t\t\tthis.length = 1;\n \t\t\treturn this;\n \n \t\t// HANDLE: $(function)\n \t\t// Shortcut for document ready\n \t\t} else if ( jQuery.isFunction( selector ) ) {\n-\t\t\treturn typeof rootjQuery.ready !== "undefined" ?\n-\t\t\t\trootjQuery.ready( selector ) :\n+\t\t\treturn typeof root.ready !== "undefined" ?\n+\t\t\t\troot.ready( selector ) :\n+\n \t\t\t\t// Execute immediately if ready is not present\n \t\t\t\tselector( jQuery );\n \t\t}\n@@ -2886,6 +2986,7 @@ rootjQuery = jQuery( document );\n \n \n var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n+\n \t// methods guaranteed to produce a unique set when starting from a unique set\n \tguaranteedUnique = {\n \t\tchildren: true,\n@@ -2894,46 +2995,19 @@ var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n \t\tprev: true\n \t};\n \n-jQuery.extend({\n-\tdir: function( elem, dir, until ) {\n-\t\tvar matched = [],\n-\t\t\tcur = elem[ dir ];\n-\n-\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n-\t\t\tif ( cur.nodeType === 1 ) {\n-\t\t\t\tmatched.push( cur );\n-\t\t\t}\n-\t\t\tcur = cur[dir];\n-\t\t}\n-\t\treturn matched;\n-\t},\n-\n-\tsibling: function( n, elem ) {\n-\t\tvar r = [];\n-\n-\t\tfor ( ; n; n = n.nextSibling ) {\n-\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n-\t\t\t\tr.push( n );\n-\t\t\t}\n-\t\t}\n-\n-\t\treturn r;\n-\t}\n-});\n-\n-jQuery.fn.extend({\n+jQuery.fn.extend( {\n \thas: function( target ) {\n \t\tvar i,\n \t\t\ttargets = jQuery( target, this ),\n \t\t\tlen = targets.length;\n \n-\t\treturn this.filter(function() {\n+\t\treturn this.filter( function() {\n \t\t\tfor ( i = 0; i < len; i++ ) {\n-\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n+\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n \t\t\t\t\treturn true;\n \t\t\t\t}\n \t\t\t}\n-\t\t});\n+\t\t} );\n \t},\n \n \tclosest: function( selectors, context ) {\n@@ -2946,14 +3020,15 @@ jQuery.fn.extend({\n \t\t\t\t0;\n \n \t\tfor ( ; i < l; i++ ) {\n-\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n+\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n+\n \t\t\t\t// Always skip document fragments\n-\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n-\t\t\t\t\tpos.index(cur) > -1 :\n+\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n+\t\t\t\t\tpos.index( cur ) > -1 :\n \n \t\t\t\t\t// Don\'t pass non-elements to Sizzle\n \t\t\t\t\tcur.nodeType === 1 &&\n-\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n+\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n \n \t\t\t\t\tmatched.push( cur );\n \t\t\t\t\tbreak;\n@@ -2961,7 +3036,7 @@ jQuery.fn.extend({\n \t\t\t}\n \t\t}\n \n-\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n+\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n \t},\n \n \t// Determine the position of an element within\n@@ -2970,23 +3045,24 @@ jQuery.fn.extend({\n \n \t\t// No argument, return index in parent\n \t\tif ( !elem ) {\n-\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n+\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n \t\t}\n \n \t\t// index in selector\n \t\tif ( typeof elem === "string" ) {\n-\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n+\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\n \t\t}\n \n \t\t// Locate the position of the desired element\n \t\treturn jQuery.inArray(\n+\n \t\t\t// If it receives a jQuery object, the first element is used\n-\t\t\telem.jquery ? elem[0] : elem, this );\n+\t\t\telem.jquery ? elem[ 0 ] : elem, this );\n \t},\n \n \tadd: function( selector, context ) {\n \t\treturn this.pushStack(\n-\t\t\tjQuery.unique(\n+\t\t\tjQuery.uniqueSort(\n \t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n \t\t\t)\n \t\t);\n@@ -2994,10 +3070,10 @@ jQuery.fn.extend({\n \n \taddBack: function( selector ) {\n \t\treturn this.add( selector == null ?\n-\t\t\tthis.prevObject : this.prevObject.filter(selector)\n+\t\t\tthis.prevObject : this.prevObject.filter( selector )\n \t\t);\n \t}\n-});\n+} );\n \n function sibling( cur, dir ) {\n \tdo {\n@@ -3007,16 +3083,16 @@ function sibling( cur, dir ) {\n \treturn cur;\n }\n \n-jQuery.each({\n+jQuery.each( {\n \tparent: function( elem ) {\n \t\tvar parent = elem.parentNode;\n \t\treturn parent && parent.nodeType !== 11 ? parent : null;\n \t},\n \tparents: function( elem ) {\n-\t\treturn jQuery.dir( elem, "parentNode" );\n+\t\treturn dir( elem, "parentNode" );\n \t},\n \tparentsUntil: function( elem, i, until ) {\n-\t\treturn jQuery.dir( elem, "parentNode", until );\n+\t\treturn dir( elem, "parentNode", until );\n \t},\n \tnext: function( elem ) {\n \t\treturn sibling( elem, "nextSibling" );\n@@ -3025,22 +3101,22 @@ jQuery.each({\n \t\treturn sibling( elem, "previousSibling" );\n \t},\n \tnextAll: function( elem ) {\n-\t\treturn jQuery.dir( elem, "nextSibling" );\n+\t\treturn dir( elem, "nextSibling" );\n \t},\n \tprevAll: function( elem ) {\n-\t\treturn jQuery.dir( elem, "previousSibling" );\n+\t\treturn dir( elem, "previousSibling" );\n \t},\n \tnextUntil: function( elem, i, until ) {\n-\t\treturn jQuery.dir( elem, "nextSibling", until );\n+\t\treturn dir( elem, "nextSibling", until );\n \t},\n \tprevUntil: function( elem, i, until ) {\n-\t\treturn jQuery.dir( elem, "previousSibling", until );\n+\t\treturn dir( elem, "previousSibling", until );\n \t},\n \tsiblings: function( elem ) {\n-\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n+\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n \t},\n \tchildren: function( elem ) {\n-\t\treturn jQuery.sibling( elem.firstChild );\n+\t\treturn siblings( elem.firstChild );\n \t},\n \tcontents: function( elem ) {\n \t\treturn jQuery.nodeName( elem, "iframe" ) ?\n@@ -3060,9 +3136,10 @@ jQuery.each({\n \t\t}\n \n \t\tif ( this.length > 1 ) {\n+\n \t\t\t// Remove duplicates\n \t\t\tif ( !guaranteedUnique[ name ] ) {\n-\t\t\t\tret = jQuery.unique( ret );\n+\t\t\t\tret = jQuery.uniqueSort( ret );\n \t\t\t}\n \n \t\t\t// Reverse order for parents* and prev-derivatives\n@@ -3073,20 +3150,17 @@ jQuery.each({\n \n \t\treturn this.pushStack( ret );\n \t};\n-});\n-var rnotwhite = (/\\S+/g);\n+} );\n+var rnotwhite = ( /\\S+/g );\n \n \n \n-// String to Object options format cache\n-var optionsCache = {};\n-\n-// Convert String-formatted options into Object-formatted ones and store in cache\n+// Convert String-formatted options into Object-formatted ones\n function createOptions( options ) {\n-\tvar object = optionsCache[ options ] = {};\n+\tvar object = {};\n \tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n \t\tobject[ flag ] = true;\n-\t});\n+\t} );\n \treturn object;\n }\n \n@@ -3117,156 +3191,186 @@ jQuery.Callbacks = function( options ) {\n \t// Convert options from String-formatted to Object-formatted if needed\n \t// (we check in cache first)\n \toptions = typeof options === "string" ?\n-\t\t( optionsCache[ options ] || createOptions( options ) ) :\n+\t\tcreateOptions( options ) :\n \t\tjQuery.extend( {}, options );\n \n \tvar // Flag to know if list is currently firing\n \t\tfiring,\n-\t\t// Last fire value (for non-forgettable lists)\n+\n+\t\t// Last fire value for non-forgettable lists\n \t\tmemory,\n+\n \t\t// Flag to know if list was already fired\n \t\tfired,\n-\t\t// End of the loop when firing\n-\t\tfiringLength,\n-\t\t// Index of currently firing callback (modified by remove if needed)\n-\t\tfiringIndex,\n-\t\t// First callback to fire (used internally by add and fireWith)\n-\t\tfiringStart,\n+\n+\t\t// Flag to prevent firing\n+\t\tlocked,\n+\n \t\t// Actual callback list\n \t\tlist = [],\n-\t\t// Stack of fire calls for repeatable lists\n-\t\tstack = !options.once && [],\n+\n+\t\t// Queue of execution data for repeatable lists\n+\t\tqueue = [],\n+\n+\t\t// Index of currently firing callback (modified by add/remove as needed)\n+\t\tfiringIndex = -1,\n+\n \t\t// Fire callbacks\n-\t\tfire = function( data ) {\n-\t\t\tmemory = options.memory && data;\n-\t\t\tfired = true;\n-\t\t\tfiringIndex = firingStart || 0;\n-\t\t\tfiringStart = 0;\n-\t\t\tfiringLength = list.length;\n-\t\t\tfiring = true;\n-\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n-\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n-\t\t\t\t\tmemory = false; // To prevent further calls using add\n-\t\t\t\t\tbreak;\n+\t\tfire = function() {\n+\n+\t\t\t// Enforce single-firing\n+\t\t\tlocked = options.once;\n+\n+\t\t\t// Execute callbacks for all pending executions,\n+\t\t\t// respecting firingIndex overrides and runtime changes\n+\t\t\tfired = firing = true;\n+\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n+\t\t\t\tmemory = queue.shift();\n+\t\t\t\twhile ( ++firingIndex < list.length ) {\n+\n+\t\t\t\t\t// Run callback and check for early termination\n+\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n+\t\t\t\t\t\toptions.stopOnFalse ) {\n+\n+\t\t\t\t\t\t// Jump to end and forget the data so .add doesn\'t re-fire\n+\t\t\t\t\t\tfiringIndex = list.length;\n+\t\t\t\t\t\tmemory = false;\n+\t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n+\n+\t\t\t// Forget the data if we\'re done with it\n+\t\t\tif ( !options.memory ) {\n+\t\t\t\tmemory = false;\n+\t\t\t}\n+\n \t\t\tfiring = false;\n-\t\t\tif ( list ) {\n-\t\t\t\tif ( stack ) {\n-\t\t\t\t\tif ( stack.length ) {\n-\t\t\t\t\t\tfire( stack.shift() );\n-\t\t\t\t\t}\n-\t\t\t\t} else if ( memory ) {\n+\n+\t\t\t// Clean up if we\'re done firing for good\n+\t\t\tif ( locked ) {\n+\n+\t\t\t\t// Keep an empty list if we have data for future add calls\n+\t\t\t\tif ( memory ) {\n \t\t\t\t\tlist = [];\n+\n+\t\t\t\t// Otherwise, this object is spent\n \t\t\t\t} else {\n-\t\t\t\t\tself.disable();\n+\t\t\t\t\tlist = "";\n \t\t\t\t}\n \t\t\t}\n \t\t},\n+\n \t\t// Actual Callbacks object\n \t\tself = {\n+\n \t\t\t// Add a callback or a collection of callbacks to the list\n \t\t\tadd: function() {\n \t\t\t\tif ( list ) {\n-\t\t\t\t\t// First, we save the current length\n-\t\t\t\t\tvar start = list.length;\n-\t\t\t\t\t(function add( args ) {\n+\n+\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n+\t\t\t\t\tif ( memory && !firing ) {\n+\t\t\t\t\t\tfiringIndex = list.length - 1;\n+\t\t\t\t\t\tqueue.push( memory );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t( function add( args ) {\n \t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n-\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n-\t\t\t\t\t\t\tif ( type === "function" ) {\n+\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n \t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n \t\t\t\t\t\t\t\t\tlist.push( arg );\n \t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== "string" ) {\n+\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {\n+\n \t\t\t\t\t\t\t\t// Inspect recursively\n \t\t\t\t\t\t\t\tadd( arg );\n \t\t\t\t\t\t\t}\n-\t\t\t\t\t\t});\n-\t\t\t\t\t})( arguments );\n-\t\t\t\t\t// Do we need to add the callbacks to the\n-\t\t\t\t\t// current firing batch?\n-\t\t\t\t\tif ( firing ) {\n-\t\t\t\t\t\tfiringLength = list.length;\n-\t\t\t\t\t// With memory, if we\'re not firing then\n-\t\t\t\t\t// we should call right away\n-\t\t\t\t\t} else if ( memory ) {\n-\t\t\t\t\t\tfiringStart = start;\n-\t\t\t\t\t\tfire( memory );\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t} )( arguments );\n+\n+\t\t\t\t\tif ( memory && !firing ) {\n+\t\t\t\t\t\tfire();\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\treturn this;\n \t\t\t},\n+\n \t\t\t// Remove a callback from the list\n \t\t\tremove: function() {\n-\t\t\t\tif ( list ) {\n-\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n-\t\t\t\t\t\tvar index;\n-\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n-\t\t\t\t\t\t\tlist.splice( index, 1 );\n-\t\t\t\t\t\t\t// Handle firing indexes\n-\t\t\t\t\t\t\tif ( firing ) {\n-\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n-\t\t\t\t\t\t\t\t\tfiringLength--;\n-\t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n-\t\t\t\t\t\t\t\t\tfiringIndex--;\n-\t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t}\n+\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n+\t\t\t\t\tvar index;\n+\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n+\t\t\t\t\t\tlist.splice( index, 1 );\n+\n+\t\t\t\t\t\t// Handle firing indexes\n+\t\t\t\t\t\tif ( index <= firingIndex ) {\n+\t\t\t\t\t\t\tfiringIndex--;\n \t\t\t\t\t\t}\n-\t\t\t\t\t});\n-\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} );\n \t\t\t\treturn this;\n \t\t\t},\n+\n \t\t\t// Check if a given callback is in the list.\n \t\t\t// If no argument is given, return whether or not list has callbacks attached.\n \t\t\thas: function( fn ) {\n-\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n+\t\t\t\treturn fn ?\n+\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n+\t\t\t\t\tlist.length > 0;\n \t\t\t},\n+\n \t\t\t// Remove all callbacks from the list\n \t\t\tempty: function() {\n-\t\t\t\tlist = [];\n-\t\t\t\tfiringLength = 0;\n+\t\t\t\tif ( list ) {\n+\t\t\t\t\tlist = [];\n+\t\t\t\t}\n \t\t\t\treturn this;\n \t\t\t},\n-\t\t\t// Have the list do nothing anymore\n+\n+\t\t\t// Disable .fire and .add\n+\t\t\t// Abort any current/pending executions\n+\t\t\t// Clear all callbacks and values\n \t\t\tdisable: function() {\n-\t\t\t\tlist = stack = memory = undefined;\n+\t\t\t\tlocked = queue = [];\n+\t\t\t\tlist = memory = "";\n \t\t\t\treturn this;\n \t\t\t},\n-\t\t\t// Is it disabled?\n \t\t\tdisabled: function() {\n \t\t\t\treturn !list;\n \t\t\t},\n-\t\t\t// Lock the list in its current state\n+\n+\t\t\t// Disable .fire\n+\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n+\t\t\t// Abort any pending executions\n \t\t\tlock: function() {\n-\t\t\t\tstack = undefined;\n+\t\t\t\tlocked = true;\n \t\t\t\tif ( !memory ) {\n \t\t\t\t\tself.disable();\n \t\t\t\t}\n \t\t\t\treturn this;\n \t\t\t},\n-\t\t\t// Is it locked?\n \t\t\tlocked: function() {\n-\t\t\t\treturn !stack;\n+\t\t\t\treturn !!locked;\n \t\t\t},\n+\n \t\t\t// Call all callbacks with the given context and arguments\n \t\t\tfireWith: function( context, args ) {\n-\t\t\t\tif ( list && ( !fired || stack ) ) {\n+\t\t\t\tif ( !locked ) {\n \t\t\t\t\targs = args || [];\n \t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n-\t\t\t\t\tif ( firing ) {\n-\t\t\t\t\t\tstack.push( args );\n-\t\t\t\t\t} else {\n-\t\t\t\t\t\tfire( args );\n+\t\t\t\t\tqueue.push( args );\n+\t\t\t\t\tif ( !firing ) {\n+\t\t\t\t\t\tfire();\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\treturn this;\n \t\t\t},\n+\n \t\t\t// Call all the callbacks with the given arguments\n \t\t\tfire: function() {\n \t\t\t\tself.fireWith( this, arguments );\n \t\t\t\treturn this;\n \t\t\t},\n+\n \t\t\t// To know if the callbacks have already been called at least once\n \t\t\tfired: function() {\n \t\t\t\treturn !!fired;\n@@ -3277,14 +3381,15 @@ jQuery.Callbacks = function( options ) {\n };\n \n \n-jQuery.extend({\n+jQuery.extend( {\n \n \tDeferred: function( func ) {\n \t\tvar tuples = [\n+\n \t\t\t\t// action, add listener, listener list, final state\n-\t\t\t\t[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],\n-\t\t\t\t[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],\n-\t\t\t\t[ "notify", "progress", jQuery.Callbacks("memory") ]\n+\t\t\t\t[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],\n+\t\t\t\t[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],\n+\t\t\t\t[ "notify", "progress", jQuery.Callbacks( "memory" ) ]\n \t\t\t],\n \t\t\tstate = "pending",\n \t\t\tpromise = {\n@@ -3297,25 +3402,30 @@ jQuery.extend({\n \t\t\t\t},\n \t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n \t\t\t\t\tvar fns = arguments;\n-\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n+\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n \t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n \t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n+\n \t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n-\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n+\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n \t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n \t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n \t\t\t\t\t\t\t\t\treturned.promise()\n+\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n \t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n-\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n-\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n+\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n \t\t\t\t\t\t\t\t} else {\n-\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n+\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + "With" ](\n+\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n+\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n+\t\t\t\t\t\t\t\t\t);\n \t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t});\n-\t\t\t\t\t\t});\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} );\n \t\t\t\t\t\tfns = null;\n-\t\t\t\t\t}).promise();\n+\t\t\t\t\t} ).promise();\n \t\t\t\t},\n+\n \t\t\t\t// Get a promise for this deferred\n \t\t\t\t// If obj is provided, the promise aspect is added to the object\n \t\t\t\tpromise: function( obj ) {\n@@ -3333,11 +3443,12 @@ jQuery.extend({\n \t\t\t\tstateString = tuple[ 3 ];\n \n \t\t\t// promise[ done | fail | progress ] = list.add\n-\t\t\tpromise[ tuple[1] ] = list.add;\n+\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n \n \t\t\t// Handle state\n \t\t\tif ( stateString ) {\n-\t\t\t\tlist.add(function() {\n+\t\t\t\tlist.add( function() {\n+\n \t\t\t\t\t// state = [ resolved | rejected ]\n \t\t\t\t\tstate = stateString;\n \n@@ -3346,12 +3457,12 @@ jQuery.extend({\n \t\t\t}\n \n \t\t\t// deferred[ resolve | reject | notify ]\n-\t\t\tdeferred[ tuple[0] ] = function() {\n-\t\t\t\tdeferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );\n+\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n+\t\t\t\tdeferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );\n \t\t\t\treturn this;\n \t\t\t};\n-\t\t\tdeferred[ tuple[0] + "With" ] = list.fireWith;\n-\t\t});\n+\t\t\tdeferred[ tuple[ 0 ] + "With" ] = list.fireWith;\n+\t\t} );\n \n \t\t// Make the deferred a promise\n \t\tpromise.promise( deferred );\n@@ -3372,9 +3483,11 @@ jQuery.extend({\n \t\t\tlength = resolveValues.length,\n \n \t\t\t// the count of uncompleted subordinates\n-\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n+\t\t\tremaining = length !== 1 ||\n+\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n \n-\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n+\t\t\t// the master Deferred.\n+\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n \t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n \n \t\t\t// Update function for both resolve and progress values\n@@ -3385,7 +3498,7 @@ jQuery.extend({\n \t\t\t\t\tif ( values === progressValues ) {\n \t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n \n-\t\t\t\t\t} else if ( !(--remaining) ) {\n+\t\t\t\t\t} else if ( !( --remaining ) ) {\n \t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n \t\t\t\t\t}\n \t\t\t\t};\n@@ -3401,9 +3514,9 @@ jQuery.extend({\n \t\t\tfor ( ; i < length; i++ ) {\n \t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n \t\t\t\t\tresolveValues[ i ].promise()\n+\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n \t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n-\t\t\t\t\t\t.fail( deferred.reject )\n-\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n+\t\t\t\t\t\t.fail( deferred.reject );\n \t\t\t\t} else {\n \t\t\t\t\t--remaining;\n \t\t\t\t}\n@@ -3417,20 +3530,22 @@ jQuery.extend({\n \n \t\treturn deferred.promise();\n \t}\n-});\n+} );\n \n \n // The deferred used on DOM ready\n var readyList;\n \n jQuery.fn.ready = function( fn ) {\n+\n \t// Add the callback\n \tjQuery.ready.promise().done( fn );\n \n \treturn this;\n };\n \n-jQuery.extend({\n+jQuery.extend( {\n+\n \t// Is the DOM ready to be used? Set to true once it occurs.\n \tisReady: false,\n \n@@ -3455,11 +3570,6 @@ jQuery.extend({\n \t\t\treturn;\n \t\t}\n \n-\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n-\t\tif ( !document.body ) {\n-\t\t\treturn setTimeout( jQuery.ready );\n-\t\t}\n-\n \t\t// Remember that the DOM is ready\n \t\tjQuery.isReady = true;\n \n@@ -3477,15 +3587,15 @@ jQuery.extend({\n \t\t\tjQuery( document ).off( "ready" );\n \t\t}\n \t}\n-});\n+} );\n \n /**\n * Clean-up method for dom ready events\n */\n function detach() {\n \tif ( document.addEventListener ) {\n-\t\tdocument.removeEventListener( "DOMContentLoaded", completed, false );\n-\t\twindow.removeEventListener( "load", completed, false );\n+\t\tdocument.removeEventListener( "DOMContentLoaded", completed );\n+\t\twindow.removeEventListener( "load", completed );\n \n \t} else {\n \t\tdocument.detachEvent( "onreadystatechange", completed );\n@@ -3497,8 +3607,12 @@ function detach() {\n * The ready event handler and self cleanup method\n */\n function completed() {\n+\n \t// readyState === "complete" is good enough for us to call the dom ready in oldIE\n-\tif ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {\n+\tif ( document.addEventListener ||\n+\t\twindow.event.type === "load" ||\n+\t\tdocument.readyState === "complete" ) {\n+\n \t\tdetach();\n \t\tjQuery.ready();\n \t}\n@@ -3509,23 +3623,28 @@ jQuery.ready.promise = function( obj ) {\n \n \t\treadyList = jQuery.Deferred();\n \n-\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n-\t\t// we once tried to use readyState "interactive" here, but it caused issues like the one\n-\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n-\t\tif ( document.readyState === "complete" ) {\n+\t\t// Catch cases where $(document).ready() is called\n+\t\t// after the browser event has already occurred.\n+\t\t// Support: IE6-10\n+\t\t// Older IE sometimes signals "interactive" too soon\n+\t\tif ( document.readyState === "complete" ||\n+\t\t\t( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {\n+\n \t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n-\t\t\tsetTimeout( jQuery.ready );\n+\t\t\twindow.setTimeout( jQuery.ready );\n \n \t\t// Standards-based browsers support DOMContentLoaded\n \t\t} else if ( document.addEventListener ) {\n+\n \t\t\t// Use the handy event callback\n-\t\t\tdocument.addEventListener( "DOMContentLoaded", completed, false );\n+\t\t\tdocument.addEventListener( "DOMContentLoaded", completed );\n \n \t\t\t// A fallback to window.onload, that will always work\n-\t\t\twindow.addEventListener( "load", completed, false );\n+\t\t\twindow.addEventListener( "load", completed );\n \n \t\t// If IE event model is used\n \t\t} else {\n+\n \t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n \t\t\tdocument.attachEvent( "onreadystatechange", completed );\n \n@@ -3538,18 +3657,19 @@ jQuery.ready.promise = function( obj ) {\n \n \t\t\ttry {\n \t\t\t\ttop = window.frameElement == null && document.documentElement;\n-\t\t\t} catch(e) {}\n+\t\t\t} catch ( e ) {}\n \n \t\t\tif ( top && top.doScroll ) {\n-\t\t\t\t(function doScrollCheck() {\n+\t\t\t\t( function doScrollCheck() {\n \t\t\t\t\tif ( !jQuery.isReady ) {\n \n \t\t\t\t\t\ttry {\n+\n \t\t\t\t\t\t\t// Use the trick by Diego Perini\n \t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n-\t\t\t\t\t\t\ttop.doScroll("left");\n-\t\t\t\t\t\t} catch(e) {\n-\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n+\t\t\t\t\t\t\ttop.doScroll( "left" );\n+\t\t\t\t\t\t} catch ( e ) {\n+\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\n \t\t\t\t\t\t}\n \n \t\t\t\t\t\t// detach all dom ready events\n@@ -3558,15 +3678,16 @@ jQuery.ready.promise = function( obj ) {\n \t\t\t\t\t\t// and execute any waiting functions\n \t\t\t\t\t\tjQuery.ready();\n \t\t\t\t\t}\n-\t\t\t\t})();\n+\t\t\t\t} )();\n \t\t\t}\n \t\t}\n \t}\n \treturn readyList.promise( obj );\n };\n \n+// Kick off the DOM ready check even if the user does not\n+jQuery.ready.promise();\n \n-var strundefined = typeof undefined;\n \n \n \n@@ -3576,19 +3697,21 @@ var i;\n for ( i in jQuery( support ) ) {\n \tbreak;\n }\n-support.ownLast = i !== "0";\n+support.ownFirst = i === "0";\n \n // Note: most support tests are defined in their respective modules.\n // false until the test is run\n support.inlineBlockNeedsLayout = false;\n \n // Execute ASAP in case we need to set body.style.zoom\n-jQuery(function() {\n+jQuery( function() {\n+\n \t// Minified: var a,b,c,d\n \tvar val, div, body, container;\n \n \tbody = document.getElementsByTagName( "body" )[ 0 ];\n \tif ( !body || !body.style ) {\n+\n \t\t// Return for frameset docs that don\'t have a body\n \t\treturn;\n \t}\n@@ -3599,7 +3722,8 @@ jQuery(function() {\n \tcontainer.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";\n \tbody.appendChild( container ).appendChild( div );\n \n-\tif ( typeof div.style.zoom !== strundefined ) {\n+\tif ( typeof div.style.zoom !== "undefined" ) {\n+\n \t\t// Support: IE<8\n \t\t// Check if natively block-level elements act like inline-block\n \t\t// elements when setting their display to \'inline\' and giving\n@@ -3608,6 +3732,7 @@ jQuery(function() {\n \n \t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\n \t\tif ( val ) {\n+\n \t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n \t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n \t\t\t// Support: IE<8\n@@ -3616,35 +3741,25 @@ jQuery(function() {\n \t}\n \n \tbody.removeChild( container );\n-});\n-\n+} );\n \n \n-\n-(function() {\n+( function() {\n \tvar div = document.createElement( "div" );\n \n-\t// Execute the test only if not already executed in another module.\n-\tif (support.deleteExpando == null) {\n-\t\t// Support: IE<9\n-\t\tsupport.deleteExpando = true;\n-\t\ttry {\n-\t\t\tdelete div.test;\n-\t\t} catch( e ) {\n-\t\t\tsupport.deleteExpando = false;\n-\t\t}\n+\t// Support: IE<9\n+\tsupport.deleteExpando = true;\n+\ttry {\n+\t\tdelete div.test;\n+\t} catch ( e ) {\n+\t\tsupport.deleteExpando = false;\n \t}\n \n \t// Null elements to avoid leaks in IE.\n \tdiv = null;\n-})();\n-\n-\n-/**\n- * Determines whether an object can have data\n- */\n-jQuery.acceptData = function( elem ) {\n-\tvar noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],\n+} )();\n+var acceptData = function( elem ) {\n+\tvar noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ],\n \t\tnodeType = +elem.nodeType || 1;\n \n \t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\n@@ -3652,14 +3767,17 @@ jQuery.acceptData = function( elem ) {\n \t\tfalse :\n \n \t\t// Nodes accept data unless otherwise specified; rejection can be conditional\n-\t\t!noData || noData !== true && elem.getAttribute("classid") === noData;\n+\t\t!noData || noData !== true && elem.getAttribute( "classid" ) === noData;\n };\n \n \n+\n+\n var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n \trmultiDash = /([A-Z])/g;\n \n function dataAttr( elem, key, data ) {\n+\n \t// If nothing was found internally, try to fetch any\n \t// data from the HTML5 data-* attribute\n \tif ( data === undefined && elem.nodeType === 1 ) {\n@@ -3673,11 +3791,12 @@ function dataAttr( elem, key, data ) {\n \t\t\t\tdata = data === "true" ? true :\n \t\t\t\t\tdata === "false" ? false :\n \t\t\t\t\tdata === "null" ? null :\n+\n \t\t\t\t\t// Only convert to a number if it doesn\'t change the string\n \t\t\t\t\t+data + "" === data ? +data :\n \t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n \t\t\t\t\tdata;\n-\t\t\t} catch( e ) {}\n+\t\t\t} catch ( e ) {}\n \n \t\t\t// Make sure we set the data so it isn\'t changed later\n \t\t\tjQuery.data( elem, key, data );\n@@ -3696,7 +3815,7 @@ function isEmptyDataObject( obj ) {\n \tfor ( name in obj ) {\n \n \t\t// if the public data object is empty, the private is still empty\n-\t\tif ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {\n+\t\tif ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) {\n \t\t\tcontinue;\n \t\t}\n \t\tif ( name !== "toJSON" ) {\n@@ -3708,7 +3827,7 @@ function isEmptyDataObject( obj ) {\n }\n \n function internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n-\tif ( !jQuery.acceptData( elem ) ) {\n+\tif ( !acceptData( elem ) ) {\n \t\treturn;\n \t}\n \n@@ -3729,11 +3848,13 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n \n \t// Avoid doing any more work than we need to when trying to get data on an\n \t// object that has no data at all\n-\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {\n+\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\n+\t\tdata === undefined && typeof name === "string" ) {\n \t\treturn;\n \t}\n \n \tif ( !id ) {\n+\n \t\t// Only DOM nodes need a new unique ID for each element since their data\n \t\t// ends up in the global cache\n \t\tif ( isNode ) {\n@@ -3744,6 +3865,7 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n \t}\n \n \tif ( !cache[ id ] ) {\n+\n \t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n \t\t// is serialized using JSON.stringify\n \t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n@@ -3797,7 +3919,7 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n }\n \n function internalRemoveData( elem, name, pvt ) {\n-\tif ( !jQuery.acceptData( elem ) ) {\n+\tif ( !acceptData( elem ) ) {\n \t\treturn;\n \t}\n \n@@ -3833,10 +3955,11 @@ function internalRemoveData( elem, name, pvt ) {\n \t\t\t\t\tif ( name in thisCache ) {\n \t\t\t\t\t\tname = [ name ];\n \t\t\t\t\t} else {\n-\t\t\t\t\t\tname = name.split(" ");\n+\t\t\t\t\t\tname = name.split( " " );\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t} else {\n+\n \t\t\t\t// If "name" is an array of keys...\n \t\t\t\t// When data is initially created, via ("key", "val") signature,\n \t\t\t\t// keys will be converted to camelCase.\n@@ -3848,12 +3971,12 @@ function internalRemoveData( elem, name, pvt ) {\n \n \t\t\ti = name.length;\n \t\t\twhile ( i-- ) {\n-\t\t\t\tdelete thisCache[ name[i] ];\n+\t\t\t\tdelete thisCache[ name[ i ] ];\n \t\t\t}\n \n \t\t\t// If there is no data left in the cache, we want to continue\n \t\t\t// and let the cache object itself get destroyed\n-\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n+\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\n \t\t\t\treturn;\n \t\t\t}\n \t\t}\n@@ -3880,13 +4003,13 @@ function internalRemoveData( elem, name, pvt ) {\n \t\t/* jshint eqeqeq: true */\n \t\tdelete cache[ id ];\n \n-\t// When all else fails, null\n+\t// When all else fails, undefined\n \t} else {\n-\t\tcache[ id ] = null;\n+\t\tcache[ id ] = undefined;\n \t}\n }\n \n-jQuery.extend({\n+jQuery.extend( {\n \tcache: {},\n \n \t// The following elements (space-suffixed to avoid Object.prototype collisions)\n@@ -3894,12 +4017,13 @@ jQuery.extend({\n \tnoData: {\n \t\t"applet ": true,\n \t\t"embed ": true,\n+\n \t\t// ...but Flash objects (which have this classid) *can* handle expandos\n \t\t"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\n \t},\n \n \thasData: function( elem ) {\n-\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n+\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\n \t\treturn !!elem && !isEmptyDataObject( elem );\n \t},\n \n@@ -3919,12 +4043,12 @@ jQuery.extend({\n \t_removeData: function( elem, name ) {\n \t\treturn internalRemoveData( elem, name, true );\n \t}\n-});\n+} );\n \n-jQuery.fn.extend({\n+jQuery.fn.extend( {\n \tdata: function( key, value ) {\n \t\tvar i, name, data,\n-\t\t\telem = this[0],\n+\t\t\telem = this[ 0 ],\n \t\t\tattrs = elem && elem.attributes;\n \n \t\t// Special expections of .data basically thwart jQuery.access,\n@@ -3944,7 +4068,7 @@ jQuery.fn.extend({\n \t\t\t\t\t\tif ( attrs[ i ] ) {\n \t\t\t\t\t\t\tname = attrs[ i ].name;\n \t\t\t\t\t\t\tif ( name.indexOf( "data-" ) === 0 ) {\n-\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n+\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n \t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\n@@ -3958,17 +4082,17 @@ jQuery.fn.extend({\n \n \t\t// Sets multiple values\n \t\tif ( typeof key === "object" ) {\n-\t\t\treturn this.each(function() {\n+\t\t\treturn this.each( function() {\n \t\t\t\tjQuery.data( this, key );\n-\t\t\t});\n+\t\t\t} );\n \t\t}\n \n \t\treturn arguments.length > 1 ?\n \n \t\t\t// Sets one value\n-\t\t\tthis.each(function() {\n+\t\t\tthis.each( function() {\n \t\t\t\tjQuery.data( this, key, value );\n-\t\t\t}) :\n+\t\t\t} ) :\n \n \t\t\t// Gets one value\n \t\t\t// Try to fetch any internally stored data first\n@@ -3976,14 +4100,14 @@ jQuery.fn.extend({\n \t},\n \n \tremoveData: function( key ) {\n-\t\treturn this.each(function() {\n+\t\treturn this.each( function() {\n \t\t\tjQuery.removeData( this, key );\n-\t\t});\n+\t\t} );\n \t}\n-});\n+} );\n \n \n-jQuery.extend({\n+jQuery.extend( {\n \tqueue: function( elem, type, data ) {\n \t\tvar queue;\n \n@@ -3993,8 +4117,8 @@ jQuery.extend({\n \n \t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n \t\t\tif ( data ) {\n-\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n-\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n+\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n+\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\n \t\t\t\t} else {\n \t\t\t\t\tqueue.push( data );\n \t\t\t\t}\n@@ -4038,19 +4162,20 @@ jQuery.extend({\n \t\t}\n \t},\n \n-\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n+\t// not intended for public consumption - generates a queueHooks object,\n+\t// or returns the current one\n \t_queueHooks: function( elem, type ) {\n \t\tvar key = type + "queueHooks";\n \t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n-\t\t\tempty: jQuery.Callbacks("once memory").add(function() {\n+\t\t\tempty: jQuery.Callbacks( "once memory" ).add( function() {\n \t\t\t\tjQuery._removeData( elem, type + "queue" );\n \t\t\t\tjQuery._removeData( elem, key );\n-\t\t\t})\n-\t\t});\n+\t\t\t} )\n+\t\t} );\n \t}\n-});\n+} );\n \n-jQuery.fn.extend({\n+jQuery.fn.extend( {\n \tqueue: function( type, data ) {\n \t\tvar setter = 2;\n \n@@ -4061,30 +4186,31 @@ jQuery.fn.extend({\n \t\t}\n \n \t\tif ( arguments.length < setter ) {\n-\t\t\treturn jQuery.queue( this[0], type );\n+\t\t\treturn jQuery.queue( this[ 0 ], type );\n \t\t}\n \n \t\treturn data === undefined ?\n \t\t\tthis :\n-\t\t\tthis.each(function() {\n+\t\t\tthis.each( function() {\n \t\t\t\tvar queue = jQuery.queue( this, type, data );\n \n \t\t\t\t// ensure a hooks for this queue\n \t\t\t\tjQuery._queueHooks( this, type );\n \n-\t\t\t\tif ( type === "fx" && queue[0] !== "inprogress" ) {\n+\t\t\t\tif ( type === "fx" && queue[ 0 ] !== "inprogress" ) {\n \t\t\t\t\tjQuery.dequeue( this, type );\n \t\t\t\t}\n-\t\t\t});\n+\t\t\t} );\n \t},\n \tdequeue: function( type ) {\n-\t\treturn this.each(function() {\n+\t\treturn this.each( function() {\n \t\t\tjQuery.dequeue( this, type );\n-\t\t});\n+\t\t} );\n \t},\n \tclearQueue: function( type ) {\n \t\treturn this.queue( type || "fx", [] );\n \t},\n+\n \t// Get a promise resolved when queues of a certain type\n \t// are emptied (fx is the type by default)\n \tpromise: function( type, obj ) {\n@@ -4115,23 +4241,138 @@ jQuery.fn.extend({\n \t\tresolve();\n \t\treturn defer.promise( obj );\n \t}\n-});\n-var pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n+} );\n+\n+\n+( function() {\n+\tvar shrinkWrapBlocksVal;\n+\n+\tsupport.shrinkWrapBlocks = function() {\n+\t\tif ( shrinkWrapBlocksVal != null ) {\n+\t\t\treturn shrinkWrapBlocksVal;\n+\t\t}\n+\n+\t\t// Will be changed later if needed.\n+\t\tshrinkWrapBlocksVal = false;\n+\n+\t\t// Minified: var b,c,d\n+\t\tvar div, body, container;\n+\n+\t\tbody = document.getElementsByTagName( "body" )[ 0 ];\n+\t\tif ( !body || !body.style ) {\n+\n+\t\t\t// Test fired too early or in an unsupported environment, exit.\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t// Setup\n+\t\tdiv = document.createElement( "div" );\n+\t\tcontainer = document.createElement( "div" );\n+\t\tcontainer.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";\n+\t\tbody.appendChild( container ).appendChild( div );\n+\n+\t\t// Support: IE6\n+\t\t// Check if elements with layout shrink-wrap their children\n+\t\tif ( typeof div.style.zoom !== "undefined" ) {\n+\n+\t\t\t// Reset CSS: box-sizing; display; margin; border\n+\t\t\tdiv.style.cssText =\n+\n+\t\t\t\t// Support: Firefox<29, Android 2.3\n+\t\t\t\t// Vendor-prefix box-sizing\n+\t\t\t\t"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +\n+\t\t\t\t"box-sizing:content-box;display:block;margin:0;border:0;" +\n+\t\t\t\t"padding:1px;width:1px;zoom:1";\n+\t\t\tdiv.appendChild( document.createElement( "div" ) ).style.width = "5px";\n+\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\n+\t\t}\n+\n+\t\tbody.removeChild( container );\n+\n+\t\treturn shrinkWrapBlocksVal;\n+\t};\n+\n+} )();\n+var pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n+\n+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );\n+\n \n var cssExpand = [ "Top", "Right", "Bottom", "Left" ];\n \n var isHidden = function( elem, el ) {\n+\n \t\t// isHidden might be called from jQuery#filter function;\n \t\t// in that case, element will be second argument\n \t\telem = el || elem;\n-\t\treturn jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );\n+\t\treturn jQuery.css( elem, "display" ) === "none" ||\n+\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n \t};\n \n \n \n+function adjustCSS( elem, prop, valueParts, tween ) {\n+\tvar adjusted,\n+\t\tscale = 1,\n+\t\tmaxIterations = 20,\n+\t\tcurrentValue = tween ?\n+\t\t\tfunction() { return tween.cur(); } :\n+\t\t\tfunction() { return jQuery.css( elem, prop, "" ); },\n+\t\tinitial = currentValue(),\n+\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),\n+\n+\t\t// Starting value computation is required for potential unit mismatches\n+\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&\n+\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n+\n+\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n+\n+\t\t// Trust units reported by jQuery.css\n+\t\tunit = unit || initialInUnit[ 3 ];\n+\n+\t\t// Make sure we update the tween properties later on\n+\t\tvalueParts = valueParts || [];\n+\n+\t\t// Iteratively approximate from a nonzero starting point\n+\t\tinitialInUnit = +initial || 1;\n+\n+\t\tdo {\n+\n+\t\t\t// If previous iteration zeroed out, double until we get *something*.\n+\t\t\t// Use string for doubling so we don\'t accidentally see scale as unchanged below\n+\t\t\tscale = scale || ".5";\n+\n+\t\t\t// Adjust and apply\n+\t\t\tinitialInUnit = initialInUnit / scale;\n+\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n+\n+\t\t// Update scale, tolerating zero or NaN from tween.cur()\n+\t\t// Break the loop if scale is unchanged or perfect, or if we\'ve just had enough.\n+\t\t} while (\n+\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n+\t\t);\n+\t}\n+\n+\tif ( valueParts ) {\n+\t\tinitialInUnit = +initialInUnit || +initial || 0;\n+\n+\t\t// Apply relative offset (+=/-=) if specified\n+\t\tadjusted = valueParts[ 1 ] ?\n+\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n+\t\t\t+valueParts[ 2 ];\n+\t\tif ( tween ) {\n+\t\t\ttween.unit = unit;\n+\t\t\ttween.start = initialInUnit;\n+\t\t\ttween.end = adjusted;\n+\t\t}\n+\t}\n+\treturn adjusted;\n+}\n+\n+\n // Multifunctional method to get and set values of a collection\n // The value/s can optionally be executed if it\'s a function\n-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n \tvar i = 0,\n \t\tlength = elems.length,\n \t\tbulk = key == null;\n@@ -4140,7 +4381,7 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe\n \tif ( jQuery.type( key ) === "object" ) {\n \t\tchainable = true;\n \t\tfor ( i in key ) {\n-\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n+\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n \t\t}\n \n \t// Sets one value\n@@ -4152,6 +4393,7 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe\n \t\t}\n \n \t\tif ( bulk ) {\n+\n \t\t\t// Bulk operations run against the entire set\n \t\t\tif ( raw ) {\n \t\t\t\tfn.call( elems, value );\n@@ -4168,7 +4410,11 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe\n \n \t\tif ( fn ) {\n \t\t\tfor ( ; i < length; i++ ) {\n-\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n+\t\t\t\tfn(\n+\t\t\t\t\telems[ i ],\n+\t\t\t\t\tkey,\n+\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\n+\t\t\t\t);\n \t\t\t}\n \t\t}\n \t}\n@@ -4179,17 +4425,41 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe\n \t\t// Gets\n \t\tbulk ?\n \t\t\tfn.call( elems ) :\n-\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n+\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\n };\n-var rcheckableType = (/^(?:checkbox|radio)$/i);\n+var rcheckableType = ( /^(?:checkbox|radio)$/i );\n \n+var rtagName = ( /<([\\w:-]+)/ );\n \n+var rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n \n-(function() {\n-\t// Minified: var a,b,c\n-\tvar input = document.createElement( "input" ),\n-\t\tdiv = document.createElement( "div" ),\n-\t\tfragment = document.createDocumentFragment();\n+var rleadingWhitespace = ( /^\\s+/ );\n+\n+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" +\n+\t\t"details|dialog|figcaption|figure|footer|header|hgroup|main|" +\n+\t\t"mark|meter|nav|output|picture|progress|section|summary|template|time|video";\n+\n+\n+\n+function createSafeFragment( document ) {\n+\tvar list = nodeNames.split( "|" ),\n+\t\tsafeFrag = document.createDocumentFragment();\n+\n+\tif ( safeFrag.createElement ) {\n+\t\twhile ( list.length ) {\n+\t\t\tsafeFrag.createElement(\n+\t\t\t\tlist.pop()\n+\t\t\t);\n+\t\t}\n+\t}\n+\treturn safeFrag;\n+}\n+\n+\n+( function() {\n+\tvar div = document.createElement( "div" ),\n+\t\tfragment = document.createDocumentFragment(),\n+\t\tinput = document.createElement( "input" );\n \n \t// Setup\n \tdiv.innerHTML = "
a";\n@@ -4224,62 +4494,267 @@ var rcheckableType = (/^(?:checkbox|radio)$/i);\n \n \t// #11217 - WebKit loses check when the name is after the checked attribute\n \tfragment.appendChild( div );\n-\tdiv.innerHTML = "";\n+\n+\t// Support: Windows Web Apps (WWA)\n+\t// `name` and `type` must use .setAttribute for WWA (#14901)\n+\tinput = document.createElement( "input" );\n+\tinput.setAttribute( "type", "radio" );\n+\tinput.setAttribute( "checked", "checked" );\n+\tinput.setAttribute( "name", "t" );\n+\n+\tdiv.appendChild( input );\n \n \t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n \t// old WebKit doesn\'t clone checked state correctly in fragments\n \tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n \n \t// Support: IE<9\n-\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n-\t// IE9-10 clones events bound via attachEvent, but they don\'t trigger with .click()\n-\tsupport.noCloneEvent = true;\n-\tif ( div.attachEvent ) {\n-\t\tdiv.attachEvent( "onclick", function() {\n-\t\t\tsupport.noCloneEvent = false;\n-\t\t});\n+\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\n+\tsupport.noCloneEvent = !!div.addEventListener;\n+\n+\t// Support: IE<9\n+\t// Since attributes and properties are the same in IE,\n+\t// cleanData must set properties to undefined rather than use removeAttribute\n+\tdiv[ jQuery.expando ] = 1;\n+\tsupport.attributes = !div.getAttribute( jQuery.expando );\n+} )();\n+\n+\n+// We have to close these tags to support XHTML (#13200)\n+var wrapMap = {\n+\toption: [ 1, "" ],\n+\tlegend: [ 1, "
", "
" ],\n+\tarea: [ 1, "", "" ],\n+\n+\t// Support: IE8\n+\tparam: [ 1, "", "" ],\n+\tthead: [ 1, "", "
" ],\n+\ttr: [ 2, "", "
" ],\n+\tcol: [ 2, "", "
" ],\n+\ttd: [ 3, "", "
" ],\n+\n+\t// IE6-8 can\'t serialize link, script, style, or any html5 (NoScope) tags,\n+\t// unless wrapped in a div with non-breaking characters in front of it.\n+\t_default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ]\n+};\n+\n+// Support: IE8-IE9\n+wrapMap.optgroup = wrapMap.option;\n+\n+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n+wrapMap.th = wrapMap.td;\n+\n+\n+function getAll( context, tag ) {\n+\tvar elems, elem,\n+\t\ti = 0,\n+\t\tfound = typeof context.getElementsByTagName !== "undefined" ?\n+\t\t\tcontext.getElementsByTagName( tag || "*" ) :\n+\t\t\ttypeof context.querySelectorAll !== "undefined" ?\n+\t\t\t\tcontext.querySelectorAll( tag || "*" ) :\n+\t\t\t\tundefined;\n \n-\t\tdiv.cloneNode( true ).click();\n+\tif ( !found ) {\n+\t\tfor ( found = [], elems = context.childNodes || context;\n+\t\t\t( elem = elems[ i ] ) != null;\n+\t\t\ti++\n+\t\t) {\n+\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n+\t\t\t\tfound.push( elem );\n+\t\t\t} else {\n+\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n+\t\t\t}\n+\t\t}\n \t}\n \n-\t// Execute the test only if not already executed in another module.\n-\tif (support.deleteExpando == null) {\n-\t\t// Support: IE<9\n-\t\tsupport.deleteExpando = true;\n-\t\ttry {\n-\t\t\tdelete div.test;\n-\t\t} catch( e ) {\n-\t\t\tsupport.deleteExpando = false;\n+\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n+\t\tjQuery.merge( [ context ], found ) :\n+\t\tfound;\n+}\n+\n+\n+// Mark scripts as having already been evaluated\n+function setGlobalEval( elems, refElements ) {\n+\tvar elem,\n+\t\ti = 0;\n+\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n+\t\tjQuery._data(\n+\t\t\telem,\n+\t\t\t"globalEval",\n+\t\t\t!refElements || jQuery._data( refElements[ i ], "globalEval" )\n+\t\t);\n+\t}\n+}\n+\n+\n+var rhtml = /<|&#?\\w+;/,\n+\trtbody = / from table fragments\n+\t\t\t\tif ( !support.tbody ) {\n+\n+\t\t\t\t\t// String was a , *may* have spurious \n+\t\t\t\t\telem = tag === "table" && !rtbody.test( elem ) ?\n+\t\t\t\t\t\ttmp.firstChild :\n+\n+\t\t\t\t\t\t// String was a bare or \n+\t\t\t\t\t\twrap[ 1 ] === "
" && !rtbody.test( elem ) ?\n+\t\t\t\t\t\t\ttmp :\n+\t\t\t\t\t\t\t0;\n+\n+\t\t\t\t\tj = elem && elem.childNodes.length;\n+\t\t\t\t\twhile ( j-- ) {\n+\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) &&\n+\t\t\t\t\t\t\t!tbody.childNodes.length ) {\n+\n+\t\t\t\t\t\t\telem.removeChild( tbody );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n+\n+\t\t\t\t// Fix #12392 for WebKit and IE > 9\n+\t\t\t\ttmp.textContent = "";\n+\n+\t\t\t\t// Fix #12392 for oldIE\n+\t\t\t\twhile ( tmp.firstChild ) {\n+\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n+\t\t\t\t}\n+\n+\t\t\t\t// Remember the top-level container for proper cleanup\n+\t\t\t\ttmp = safe.lastChild;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t// Fix #11356: Clear elements from fragment\n+\tif ( tmp ) {\n+\t\tsafe.removeChild( tmp );\n+\t}\n+\n+\t// Reset defaultChecked for any radios and checkboxes\n+\t// about to be appended to the DOM in IE 6/7 (#8060)\n+\tif ( !support.appendChecked ) {\n+\t\tjQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );\n+\t}\n+\n+\ti = 0;\n+\twhile ( ( elem = nodes[ i++ ] ) ) {\n+\n+\t\t// Skip elements already in the context collection (trac-4087)\n+\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n+\t\t\tif ( ignored ) {\n+\t\t\t\tignored.push( elem );\n+\t\t\t}\n+\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n+\n+\t\t// Append to fragment\n+\t\ttmp = getAll( safe.appendChild( elem ), "script" );\n+\n+\t\t// Preserve script evaluation history\n+\t\tif ( contains ) {\n+\t\t\tsetGlobalEval( tmp );\n+\t\t}\n+\n+\t\t// Capture executables\n+\t\tif ( scripts ) {\n+\t\t\tj = 0;\n+\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n+\t\t\t\tif ( rscriptType.test( elem.type || "" ) ) {\n+\t\t\t\t\tscripts.push( elem );\n+\t\t\t\t}\n+\t\t\t}\n \t\t}\n \t}\n-})();\n+\n+\ttmp = null;\n+\n+\treturn safe;\n+}\n \n \n-(function() {\n+( function() {\n \tvar i, eventName,\n \t\tdiv = document.createElement( "div" );\n \n-\t// Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)\n-\tfor ( i in { submit: true, change: true, focusin: true }) {\n+\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\n+\tfor ( i in { submit: true, change: true, focusin: true } ) {\n \t\teventName = "on" + i;\n \n-\t\tif ( !(support[ i + "Bubbles" ] = eventName in window) ) {\n+\t\tif ( !( support[ i ] = eventName in window ) ) {\n+\n \t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n \t\t\tdiv.setAttribute( eventName, "t" );\n-\t\t\tsupport[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;\n+\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\n \t\t}\n \t}\n \n \t// Null elements to avoid leaks in IE.\n \tdiv = null;\n-})();\n+} )();\n \n \n var rformElems = /^(?:input|select|textarea)$/i,\n \trkeyEvent = /^key/,\n-\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n+\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n \trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n-\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n+\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n \n function returnTrue() {\n \treturn true;\n@@ -4289,12 +4764,75 @@ function returnFalse() {\n \treturn false;\n }\n \n+// Support: IE9\n+// See #13393 for more info\n function safeActiveElement() {\n \ttry {\n \t\treturn document.activeElement;\n \t} catch ( err ) { }\n }\n \n+function on( elem, types, selector, data, fn, one ) {\n+\tvar origFn, type;\n+\n+\t// Types can be a map of types/handlers\n+\tif ( typeof types === "object" ) {\n+\n+\t\t// ( types-Object, selector, data )\n+\t\tif ( typeof selector !== "string" ) {\n+\n+\t\t\t// ( types-Object, data )\n+\t\t\tdata = data || selector;\n+\t\t\tselector = undefined;\n+\t\t}\n+\t\tfor ( type in types ) {\n+\t\t\ton( elem, type, selector, data, types[ type ], one );\n+\t\t}\n+\t\treturn elem;\n+\t}\n+\n+\tif ( data == null && fn == null ) {\n+\n+\t\t// ( types, fn )\n+\t\tfn = selector;\n+\t\tdata = selector = undefined;\n+\t} else if ( fn == null ) {\n+\t\tif ( typeof selector === "string" ) {\n+\n+\t\t\t// ( types, selector, fn )\n+\t\t\tfn = data;\n+\t\t\tdata = undefined;\n+\t\t} else {\n+\n+\t\t\t// ( types, data, fn )\n+\t\t\tfn = data;\n+\t\t\tdata = selector;\n+\t\t\tselector = undefined;\n+\t\t}\n+\t}\n+\tif ( fn === false ) {\n+\t\tfn = returnFalse;\n+\t} else if ( !fn ) {\n+\t\treturn elem;\n+\t}\n+\n+\tif ( one === 1 ) {\n+\t\torigFn = fn;\n+\t\tfn = function( event ) {\n+\n+\t\t\t// Can use an empty set, since event contains the info\n+\t\t\tjQuery().off( event );\n+\t\t\treturn origFn.apply( this, arguments );\n+\t\t};\n+\n+\t\t// Use same guid so caller can remove using origFn\n+\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n+\t}\n+\treturn elem.each( function() {\n+\t\tjQuery.event.add( this, types, fn, data, selector );\n+\t} );\n+}\n+\n /*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards\' addEvent library for many of the ideas.\n@@ -4327,18 +4865,22 @@ jQuery.event = {\n \t\t}\n \n \t\t// Init the element\'s event structure and main handler, if this is the first\n-\t\tif ( !(events = elemData.events) ) {\n+\t\tif ( !( events = elemData.events ) ) {\n \t\t\tevents = elemData.events = {};\n \t\t}\n-\t\tif ( !(eventHandle = elemData.handle) ) {\n+\t\tif ( !( eventHandle = elemData.handle ) ) {\n \t\t\teventHandle = elemData.handle = function( e ) {\n+\n \t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n \t\t\t\t// when an event is called after a page has unloaded\n-\t\t\t\treturn typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?\n+\t\t\t\treturn typeof jQuery !== "undefined" &&\n+\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\n \t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n \t\t\t\t\tundefined;\n \t\t\t};\n-\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n+\n+\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\n+\t\t\t// with IE non-native events\n \t\t\teventHandle.elem = elem;\n \t\t}\n \n@@ -4346,9 +4888,9 @@ jQuery.event = {\n \t\ttypes = ( types || "" ).match( rnotwhite ) || [ "" ];\n \t\tt = types.length;\n \t\twhile ( t-- ) {\n-\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n-\t\t\ttype = origType = tmp[1];\n-\t\t\tnamespaces = ( tmp[2] || "" ).split( "." ).sort();\n+\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n+\t\t\ttype = origType = tmp[ 1 ];\n+\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n \n \t\t\t// There *must* be a type, no attaching namespace-only handlers\n \t\t\tif ( !type ) {\n@@ -4365,7 +4907,7 @@ jQuery.event = {\n \t\t\tspecial = jQuery.event.special[ type ] || {};\n \n \t\t\t// handleObj is passed to all event handlers\n-\t\t\thandleObj = jQuery.extend({\n+\t\t\thandleObj = jQuery.extend( {\n \t\t\t\ttype: type,\n \t\t\t\torigType: origType,\n \t\t\t\tdata: data,\n@@ -4373,16 +4915,18 @@ jQuery.event = {\n \t\t\t\tguid: handler.guid,\n \t\t\t\tselector: selector,\n \t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n-\t\t\t\tnamespace: namespaces.join(".")\n+\t\t\t\tnamespace: namespaces.join( "." )\n \t\t\t}, handleObjIn );\n \n \t\t\t// Init the event handler queue if we\'re the first\n-\t\t\tif ( !(handlers = events[ type ]) ) {\n+\t\t\tif ( !( handlers = events[ type ] ) ) {\n \t\t\t\thandlers = events[ type ] = [];\n \t\t\t\thandlers.delegateCount = 0;\n \n \t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n-\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n+\t\t\t\tif ( !special.setup ||\n+\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n+\n \t\t\t\t\t// Bind the global event handler to the element\n \t\t\t\t\tif ( elem.addEventListener ) {\n \t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n@@ -4424,7 +4968,7 @@ jQuery.event = {\n \t\t\tnamespaces, origType,\n \t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n \n-\t\tif ( !elemData || !(events = elemData.events) ) {\n+\t\tif ( !elemData || !( events = elemData.events ) ) {\n \t\t\treturn;\n \t\t}\n \n@@ -4432,9 +4976,9 @@ jQuery.event = {\n \t\ttypes = ( types || "" ).match( rnotwhite ) || [ "" ];\n \t\tt = types.length;\n \t\twhile ( t-- ) {\n-\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n-\t\t\ttype = origType = tmp[1];\n-\t\t\tnamespaces = ( tmp[2] || "" ).split( "." ).sort();\n+\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n+\t\t\ttype = origType = tmp[ 1 ];\n+\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n \n \t\t\t// Unbind all events (on this namespace, if provided) for the element\n \t\t\tif ( !type ) {\n@@ -4447,7 +4991,8 @@ jQuery.event = {\n \t\t\tspecial = jQuery.event.special[ type ] || {};\n \t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n \t\t\thandlers = events[ type ] || [];\n-\t\t\ttmp = tmp[2] && new RegExp( "(^|\\\\.)" + namespaces.join("\\\\.(?:.*\\\\.|)") + "(\\\\.|$)" );\n+\t\t\ttmp = tmp[ 2 ] &&\n+\t\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" );\n \n \t\t\t// Remove matching events\n \t\t\torigCount = j = handlers.length;\n@@ -4457,7 +5002,8 @@ jQuery.event = {\n \t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n \t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n \t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n-\t\t\t\t\t( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {\n+\t\t\t\t\t( !selector || selector === handleObj.selector ||\n+\t\t\t\t\t\tselector === "**" && handleObj.selector ) ) {\n \t\t\t\t\thandlers.splice( j, 1 );\n \n \t\t\t\t\tif ( handleObj.selector ) {\n@@ -4472,7 +5018,9 @@ jQuery.event = {\n \t\t\t// Remove generic event handler if we removed something and no more handlers exist\n \t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n \t\t\tif ( origCount && !handlers.length ) {\n-\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n+\t\t\t\tif ( !special.teardown ||\n+\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n+\n \t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n \t\t\t\t}\n \n@@ -4495,7 +5043,7 @@ jQuery.event = {\n \t\t\tbubbleType, special, tmp, i,\n \t\t\teventPath = [ elem || document ],\n \t\t\ttype = hasOwn.call( event, "type" ) ? event.type : event,\n-\t\t\tnamespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];\n+\t\t\tnamespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];\n \n \t\tcur = tmp = elem = elem || document;\n \n@@ -4509,13 +5057,14 @@ jQuery.event = {\n \t\t\treturn;\n \t\t}\n \n-\t\tif ( type.indexOf(".") >= 0 ) {\n+\t\tif ( type.indexOf( "." ) > -1 ) {\n+\n \t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n-\t\t\tnamespaces = type.split(".");\n+\t\t\tnamespaces = type.split( "." );\n \t\t\ttype = namespaces.shift();\n \t\t\tnamespaces.sort();\n \t\t}\n-\t\tontype = type.indexOf(":") < 0 && "on" + type;\n+\t\tontype = type.indexOf( ":" ) < 0 && "on" + type;\n \n \t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n \t\tevent = event[ jQuery.expando ] ?\n@@ -4524,9 +5073,9 @@ jQuery.event = {\n \n \t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n \t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n-\t\tevent.namespace = namespaces.join(".");\n-\t\tevent.namespace_re = event.namespace ?\n-\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join("\\\\.(?:.*\\\\.|)") + "(\\\\.|$)" ) :\n+\t\tevent.namespace = namespaces.join( "." );\n+\t\tevent.rnamespace = event.namespace ?\n+\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" ) :\n \t\t\tnull;\n \n \t\t// Clean up the event in case it is being reused\n@@ -4560,28 +5109,30 @@ jQuery.event = {\n \t\t\t}\n \n \t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n-\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n+\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n \t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n \t\t\t}\n \t\t}\n \n \t\t// Fire handlers on the event path\n \t\ti = 0;\n-\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n+\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n \n \t\t\tevent.type = i > 1 ?\n \t\t\t\tbubbleType :\n \t\t\t\tspecial.bindType || type;\n \n \t\t\t// jQuery handler\n-\t\t\thandle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );\n+\t\t\thandle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] &&\n+\t\t\t\tjQuery._data( cur, "handle" );\n+\n \t\t\tif ( handle ) {\n \t\t\t\thandle.apply( cur, data );\n \t\t\t}\n \n \t\t\t// Native handler\n \t\t\thandle = ontype && cur[ ontype ];\n-\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n+\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n \t\t\t\tevent.result = handle.apply( cur, data );\n \t\t\t\tif ( event.result === false ) {\n \t\t\t\t\tevent.preventDefault();\n@@ -4593,8 +5144,11 @@ jQuery.event = {\n \t\t// If nobody prevented the default action, do it now\n \t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n \n-\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n-\t\t\t\tjQuery.acceptData( elem ) ) {\n+\t\t\tif (\n+\t\t\t\t( !special._default ||\n+\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\n+\t\t\t\t) && acceptData( elem )\n+\t\t\t) {\n \n \t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n \t\t\t\t// Can\'t use an .isFunction() check here because IE6/7 fails that test.\n@@ -4613,6 +5167,7 @@ jQuery.event = {\n \t\t\t\t\ttry {\n \t\t\t\t\t\telem[ type ]();\n \t\t\t\t\t} catch ( e ) {\n+\n \t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n \t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n \t\t\t\t\t}\n@@ -4633,14 +5188,14 @@ jQuery.event = {\n \t\t// Make a writable jQuery.Event from the native event object\n \t\tevent = jQuery.event.fix( event );\n \n-\t\tvar i, ret, handleObj, matched, j,\n+\t\tvar i, j, ret, matched, handleObj,\n \t\t\thandlerQueue = [],\n \t\t\targs = slice.call( arguments ),\n \t\t\thandlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],\n \t\t\tspecial = jQuery.event.special[ event.type ] || {};\n \n \t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n-\t\targs[0] = event;\n+\t\targs[ 0 ] = event;\n \t\tevent.delegateTarget = this;\n \n \t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n@@ -4653,24 +5208,25 @@ jQuery.event = {\n \n \t\t// Run delegates first; they may want to stop propagation beneath us\n \t\ti = 0;\n-\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n+\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n \t\t\tevent.currentTarget = matched.elem;\n \n \t\t\tj = 0;\n-\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n+\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n+\t\t\t\t!event.isImmediatePropagationStopped() ) {\n \n-\t\t\t\t// Triggered event must either 1) have no namespace, or\n-\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n-\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n+\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n+\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n+\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n \n \t\t\t\t\tevent.handleObj = handleObj;\n \t\t\t\t\tevent.data = handleObj.data;\n \n-\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n-\t\t\t\t\t\t\t.apply( matched.elem, args );\n+\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n+\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n \n \t\t\t\t\tif ( ret !== undefined ) {\n-\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n+\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n \t\t\t\t\t\t\tevent.preventDefault();\n \t\t\t\t\t\t\tevent.stopPropagation();\n \t\t\t\t\t\t}\n@@ -4688,15 +5244,19 @@ jQuery.event = {\n \t},\n \n \thandlers: function( event, handlers ) {\n-\t\tvar sel, handleObj, matches, i,\n+\t\tvar i, matches, sel, handleObj,\n \t\t\thandlerQueue = [],\n \t\t\tdelegateCount = handlers.delegateCount,\n \t\t\tcur = event.target;\n \n+\t\t// Support (at least): Chrome, IE9\n \t\t// Find delegate handlers\n \t\t// Black-hole SVG instance trees (#13180)\n-\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n-\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {\n+\t\t//\n+\t\t// Support: Firefox<=42+\n+\t\t// Avoid non-left-click in FF but don\'t block IE radio events (#3861, gh-2343)\n+\t\tif ( delegateCount && cur.nodeType &&\n+\t\t\t( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {\n \n \t\t\t/* jshint eqeqeq: false */\n \t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n@@ -4704,7 +5264,7 @@ jQuery.event = {\n \n \t\t\t\t// Don\'t check non-elements (#13208)\n \t\t\t\t// Don\'t process clicks on disabled elements (#6911, #8165, #11382, #11764)\n-\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {\n+\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {\n \t\t\t\t\tmatches = [];\n \t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n \t\t\t\t\t\thandleObj = handlers[ i ];\n@@ -4714,7 +5274,7 @@ jQuery.event = {\n \n \t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n \t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n-\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n+\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n \t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif ( matches[ sel ] ) {\n@@ -4722,7 +5282,7 @@ jQuery.event = {\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t\tif ( matches.length ) {\n-\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n+\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n@@ -4730,7 +5290,7 @@ jQuery.event = {\n \n \t\t// Add the remaining (directly-bound) handlers\n \t\tif ( delegateCount < handlers.length ) {\n-\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n+\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n \t\t}\n \n \t\treturn handlerQueue;\n@@ -4769,7 +5329,7 @@ jQuery.event = {\n \t\t\tevent.target = originalEvent.srcElement || document;\n \t\t}\n \n-\t\t// Support: Chrome 23+, Safari?\n+\t\t// Support: Safari 6-8+\n \t\t// Target should not be a text node (#504, #13143)\n \t\tif ( event.target.nodeType === 3 ) {\n \t\t\tevent.target = event.target.parentNode;\n@@ -4783,12 +5343,13 @@ jQuery.event = {\n \t},\n \n \t// Includes some event props shared by KeyEvent and MouseEvent\n-\tprops: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),\n+\tprops: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +\n+\t\t"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),\n \n \tfixHooks: {},\n \n \tkeyHooks: {\n-\t\tprops: "char charCode key keyCode".split(" "),\n+\t\tprops: "char charCode key keyCode".split( " " ),\n \t\tfilter: function( event, original ) {\n \n \t\t\t// Add which for key events\n@@ -4801,7 +5362,8 @@ jQuery.event = {\n \t},\n \n \tmouseHooks: {\n-\t\tprops: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),\n+\t\tprops: ( "button buttons clientX clientY fromElement offsetX offsetY " +\n+\t\t\t"pageX pageY screenX screenY toElement" ).split( " " ),\n \t\tfilter: function( event, original ) {\n \t\t\tvar body, eventDoc, doc,\n \t\t\t\tbutton = original.button,\n@@ -4813,13 +5375,19 @@ jQuery.event = {\n \t\t\t\tdoc = eventDoc.documentElement;\n \t\t\t\tbody = eventDoc.body;\n \n-\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n-\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n+\t\t\t\tevent.pageX = original.clientX +\n+\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n+\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n+\t\t\t\tevent.pageY = original.clientY +\n+\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n+\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n \t\t\t}\n \n \t\t\t// Add relatedTarget, if necessary\n \t\t\tif ( !event.relatedTarget && fromElement ) {\n-\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n+\t\t\t\tevent.relatedTarget = fromElement === event.target ?\n+\t\t\t\t\toriginal.toElement :\n+\t\t\t\t\tfromElement;\n \t\t\t}\n \n \t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n@@ -4834,10 +5402,12 @@ jQuery.event = {\n \n \tspecial: {\n \t\tload: {\n+\n \t\t\t// Prevent triggered image.load events from bubbling to window.load\n \t\t\tnoBubble: true\n \t\t},\n \t\tfocus: {\n+\n \t\t\t// Fire native event if possible so blur/focus sequence is correct\n \t\t\ttrigger: function() {\n \t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n@@ -4845,6 +5415,7 @@ jQuery.event = {\n \t\t\t\t\t\tthis.focus();\n \t\t\t\t\t\treturn false;\n \t\t\t\t\t} catch ( e ) {\n+\n \t\t\t\t\t\t// Support: IE<9\n \t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n \t\t\t\t\t\t// let .trigger() run the handlers\n@@ -4863,6 +5434,7 @@ jQuery.event = {\n \t\t\tdelegateType: "focusout"\n \t\t},\n \t\tclick: {\n+\n \t\t\t// For checkbox, fire native event so checked state will be right\n \t\t\ttrigger: function() {\n \t\t\t\tif ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {\n@@ -4889,24 +5461,28 @@ jQuery.event = {\n \t\t}\n \t},\n \n-\tsimulate: function( type, elem, event, bubble ) {\n-\t\t// Piggyback on a donor event to simulate a different one.\n-\t\t// Fake originalEvent to avoid donor\'s stopPropagation, but if the\n-\t\t// simulated event prevents default then we do the same on the donor.\n+\t// Piggyback on a donor event to simulate a different one\n+\tsimulate: function( type, elem, event ) {\n \t\tvar e = jQuery.extend(\n \t\t\tnew jQuery.Event(),\n \t\t\tevent,\n \t\t\t{\n \t\t\t\ttype: type,\n-\t\t\t\tisSimulated: true,\n-\t\t\t\toriginalEvent: {}\n+\t\t\t\tisSimulated: true\n+\n+\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n+\t\t\t\t// would not be triggered on donor event, since in our own\n+\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n+\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n+\t\t\t\t//\n+\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\n+\t\t\t\t// since `originalEvent` should point to the original event for the\n+\t\t\t\t// constancy with other events and for more focused logic\n \t\t\t}\n \t\t);\n-\t\tif ( bubble ) {\n-\t\t\tjQuery.event.trigger( e, null, elem );\n-\t\t} else {\n-\t\t\tjQuery.event.dispatch.call( elem, e );\n-\t\t}\n+\n+\t\tjQuery.event.trigger( e, null, elem );\n+\n \t\tif ( e.isDefaultPrevented() ) {\n \t\t\tevent.preventDefault();\n \t\t}\n@@ -4915,8 +5491,10 @@ jQuery.event = {\n \n jQuery.removeEvent = document.removeEventListener ?\n \tfunction( elem, type, handle ) {\n+\n+\t\t// This "if" is needed for plain objects\n \t\tif ( elem.removeEventListener ) {\n-\t\t\telem.removeEventListener( type, handle, false );\n+\t\t\telem.removeEventListener( type, handle );\n \t\t}\n \t} :\n \tfunction( elem, type, handle ) {\n@@ -4925,8 +5503,9 @@ jQuery.removeEvent = document.removeEventListener ?\n \t\tif ( elem.detachEvent ) {\n \n \t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n-\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n-\t\t\tif ( typeof elem[ name ] === strundefined ) {\n+\t\t\t// detachEvent needed property on element, by name of that event,\n+\t\t\t// to properly expose it to GC\n+\t\t\tif ( typeof elem[ name ] === "undefined" ) {\n \t\t\t\telem[ name ] = null;\n \t\t\t}\n \n@@ -4935,8 +5514,9 @@ jQuery.removeEvent = document.removeEventListener ?\n \t};\n \n jQuery.Event = function( src, props ) {\n+\n \t// Allow instantiation without the \'new\' keyword\n-\tif ( !(this instanceof jQuery.Event) ) {\n+\tif ( !( this instanceof jQuery.Event ) ) {\n \t\treturn new jQuery.Event( src, props );\n \t}\n \n@@ -4949,6 +5529,7 @@ jQuery.Event = function( src, props ) {\n \t\t// by a handler lower down the tree; reflect the correct value.\n \t\tthis.isDefaultPrevented = src.defaultPrevented ||\n \t\t\t\tsrc.defaultPrevented === undefined &&\n+\n \t\t\t\t// Support: IE < 9, Android < 4.0\n \t\t\t\tsrc.returnValue === false ?\n \t\t\treturnTrue :\n@@ -4974,6 +5555,7 @@ jQuery.Event = function( src, props ) {\n // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n jQuery.Event.prototype = {\n+\tconstructor: jQuery.Event,\n \tisDefaultPrevented: returnFalse,\n \tisPropagationStopped: returnFalse,\n \tisImmediatePropagationStopped: returnFalse,\n@@ -5000,9 +5582,11 @@ jQuery.Event.prototype = {\n \t\tvar e = this.originalEvent;\n \n \t\tthis.isPropagationStopped = returnTrue;\n-\t\tif ( !e ) {\n+\n+\t\tif ( !e || this.isSimulated ) {\n \t\t\treturn;\n \t\t}\n+\n \t\t// If stopPropagation exists, run it on the original event\n \t\tif ( e.stopPropagation ) {\n \t\t\te.stopPropagation();\n@@ -5026,7 +5610,14 @@ jQuery.Event.prototype = {\n };\n \n // Create mouseenter/leave events using mouseover/out and event-time checks\n-jQuery.each({\n+// so that event delegation works in jQuery.\n+// Do the same for pointerenter/pointerleave and pointerover/pointerout\n+//\n+// Support: Safari 7 only\n+// Safari sends mouseenter too often; see:\n+// https://code.google.com/p/chromium/issues/detail?id=470258\n+// for the description of the bug (it existed in older Chrome versions as well).\n+jQuery.each( {\n \tmouseenter: "mouseover",\n \tmouseleave: "mouseout",\n \tpointerenter: "pointerover",\n@@ -5042,9 +5633,9 @@ jQuery.each({\n \t\t\t\trelated = event.relatedTarget,\n \t\t\t\thandleObj = event.handleObj;\n \n-\t\t\t// For mousenter/leave call the handler if related is outside the target.\n+\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n \t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n-\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n+\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n \t\t\t\tevent.type = handleObj.origType;\n \t\t\t\tret = handleObj.handler.apply( this, arguments );\n \t\t\t\tevent.type = fix;\n@@ -5052,13 +5643,14 @@ jQuery.each({\n \t\t\treturn ret;\n \t\t}\n \t};\n-});\n+} );\n \n // IE submit delegation\n-if ( !support.submitBubbles ) {\n+if ( !support.submit ) {\n \n \tjQuery.event.special.submit = {\n \t\tsetup: function() {\n+\n \t\t\t// Only need this for delegated form submit events\n \t\t\tif ( jQuery.nodeName( this, "form" ) ) {\n \t\t\t\treturn false;\n@@ -5066,30 +5658,42 @@ if ( !support.submitBubbles ) {\n \n \t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n \t\t\tjQuery.event.add( this, "click._submit keypress._submit", function( e ) {\n+\n \t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n \t\t\t\tvar elem = e.target,\n-\t\t\t\t\tform = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;\n-\t\t\t\tif ( form && !jQuery._data( form, "submitBubbles" ) ) {\n+\t\t\t\t\tform = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ?\n+\n+\t\t\t\t\t\t// Support: IE <=8\n+\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\n+\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\n+\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\n+\t\t\t\t\t\tjQuery.prop( elem, "form" ) :\n+\t\t\t\t\t\tundefined;\n+\n+\t\t\t\tif ( form && !jQuery._data( form, "submit" ) ) {\n \t\t\t\t\tjQuery.event.add( form, "submit._submit", function( event ) {\n-\t\t\t\t\t\tevent._submit_bubble = true;\n-\t\t\t\t\t});\n-\t\t\t\t\tjQuery._data( form, "submitBubbles", true );\n+\t\t\t\t\t\tevent._submitBubble = true;\n+\t\t\t\t\t} );\n+\t\t\t\t\tjQuery._data( form, "submit", true );\n \t\t\t\t}\n-\t\t\t});\n+\t\t\t} );\n+\n \t\t\t// return undefined since we don\'t need an event listener\n \t\t},\n \n \t\tpostDispatch: function( event ) {\n+\n \t\t\t// If form was submitted by the user, bubble the event up the tree\n-\t\t\tif ( event._submit_bubble ) {\n-\t\t\t\tdelete event._submit_bubble;\n+\t\t\tif ( event._submitBubble ) {\n+\t\t\t\tdelete event._submitBubble;\n \t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n-\t\t\t\t\tjQuery.event.simulate( "submit", this.parentNode, event, true );\n+\t\t\t\t\tjQuery.event.simulate( "submit", this.parentNode, event );\n \t\t\t\t}\n \t\t\t}\n \t\t},\n \n \t\tteardown: function() {\n+\n \t\t\t// Only need this for delegated form submit events\n \t\t\tif ( jQuery.nodeName( this, "form" ) ) {\n \t\t\t\treturn false;\n@@ -5102,52 +5706,57 @@ if ( !support.submitBubbles ) {\n }\n \n // IE change delegation and checkbox/radio fix\n-if ( !support.changeBubbles ) {\n+if ( !support.change ) {\n \n \tjQuery.event.special.change = {\n \n \t\tsetup: function() {\n \n \t\t\tif ( rformElems.test( this.nodeName ) ) {\n+\n \t\t\t\t// IE doesn\'t fire change on a check/radio until blur; trigger it on click\n \t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n \t\t\t\t// This still fires onchange a second time for check/radio after blur.\n \t\t\t\tif ( this.type === "checkbox" || this.type === "radio" ) {\n \t\t\t\t\tjQuery.event.add( this, "propertychange._change", function( event ) {\n \t\t\t\t\t\tif ( event.originalEvent.propertyName === "checked" ) {\n-\t\t\t\t\t\t\tthis._just_changed = true;\n+\t\t\t\t\t\t\tthis._justChanged = true;\n \t\t\t\t\t\t}\n-\t\t\t\t\t});\n+\t\t\t\t\t} );\n \t\t\t\t\tjQuery.event.add( this, "click._change", function( event ) {\n-\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n-\t\t\t\t\t\t\tthis._just_changed = false;\n+\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\n+\t\t\t\t\t\t\tthis._justChanged = false;\n \t\t\t\t\t\t}\n+\n \t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n-\t\t\t\t\t\tjQuery.event.simulate( "change", this, event, true );\n-\t\t\t\t\t});\n+\t\t\t\t\t\tjQuery.event.simulate( "change", this, event );\n+\t\t\t\t\t} );\n \t\t\t\t}\n \t\t\t\treturn false;\n \t\t\t}\n+\n \t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n \t\t\tjQuery.event.add( this, "beforeactivate._change", function( e ) {\n \t\t\t\tvar elem = e.target;\n \n-\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {\n+\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) {\n \t\t\t\t\tjQuery.event.add( elem, "change._change", function( event ) {\n \t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n-\t\t\t\t\t\t\tjQuery.event.simulate( "change", this.parentNode, event, true );\n+\t\t\t\t\t\t\tjQuery.event.simulate( "change", this.parentNode, event );\n \t\t\t\t\t\t}\n-\t\t\t\t\t});\n-\t\t\t\t\tjQuery._data( elem, "changeBubbles", true );\n+\t\t\t\t\t} );\n+\t\t\t\t\tjQuery._data( elem, "change", true );\n \t\t\t\t}\n-\t\t\t});\n+\t\t\t} );\n \t\t},\n \n \t\thandle: function( event ) {\n \t\t\tvar elem = event.target;\n \n \t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n-\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {\n+\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\n+\t\t\t\t( elem.type !== "radio" && elem.type !== "checkbox" ) ) {\n+\n \t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n \t\t\t}\n \t\t},\n@@ -5160,14 +5769,21 @@ if ( !support.changeBubbles ) {\n \t};\n }\n \n-// Create "bubbling" focus and blur events\n-if ( !support.focusinBubbles ) {\n-\tjQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {\n+// Support: Firefox\n+// Firefox doesn\'t have focus(in | out) events\n+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n+//\n+// Support: Chrome, Safari\n+// focus(in | out) events fire after focus & blur events,\n+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n+// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\n+if ( !support.focusin ) {\n+\tjQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {\n \n \t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n \t\tvar handler = function( event ) {\n-\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n-\t\t\t};\n+\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n+\t\t};\n \n \t\tjQuery.event.special[ fix ] = {\n \t\t\tsetup: function() {\n@@ -5191,80 +5807,34 @@ if ( !support.focusinBubbles ) {\n \t\t\t\t}\n \t\t\t}\n \t\t};\n-\t});\n+\t} );\n }\n \n-jQuery.fn.extend({\n-\n-\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n-\t\tvar type, origFn;\n-\n-\t\t// Types can be a map of types/handlers\n-\t\tif ( typeof types === "object" ) {\n-\t\t\t// ( types-Object, selector, data )\n-\t\t\tif ( typeof selector !== "string" ) {\n-\t\t\t\t// ( types-Object, data )\n-\t\t\t\tdata = data || selector;\n-\t\t\t\tselector = undefined;\n-\t\t\t}\n-\t\t\tfor ( type in types ) {\n-\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n-\t\t\t}\n-\t\t\treturn this;\n-\t\t}\n-\n-\t\tif ( data == null && fn == null ) {\n-\t\t\t// ( types, fn )\n-\t\t\tfn = selector;\n-\t\t\tdata = selector = undefined;\n-\t\t} else if ( fn == null ) {\n-\t\t\tif ( typeof selector === "string" ) {\n-\t\t\t\t// ( types, selector, fn )\n-\t\t\t\tfn = data;\n-\t\t\t\tdata = undefined;\n-\t\t\t} else {\n-\t\t\t\t// ( types, data, fn )\n-\t\t\t\tfn = data;\n-\t\t\t\tdata = selector;\n-\t\t\t\tselector = undefined;\n-\t\t\t}\n-\t\t}\n-\t\tif ( fn === false ) {\n-\t\t\tfn = returnFalse;\n-\t\t} else if ( !fn ) {\n-\t\t\treturn this;\n-\t\t}\n+jQuery.fn.extend( {\n \n-\t\tif ( one === 1 ) {\n-\t\t\torigFn = fn;\n-\t\t\tfn = function( event ) {\n-\t\t\t\t// Can use an empty set, since event contains the info\n-\t\t\t\tjQuery().off( event );\n-\t\t\t\treturn origFn.apply( this, arguments );\n-\t\t\t};\n-\t\t\t// Use same guid so caller can remove using origFn\n-\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n-\t\t}\n-\t\treturn this.each( function() {\n-\t\t\tjQuery.event.add( this, types, fn, data, selector );\n-\t\t});\n+\ton: function( types, selector, data, fn ) {\n+\t\treturn on( this, types, selector, data, fn );\n \t},\n \tone: function( types, selector, data, fn ) {\n-\t\treturn this.on( types, selector, data, fn, 1 );\n+\t\treturn on( this, types, selector, data, fn, 1 );\n \t},\n \toff: function( types, selector, fn ) {\n \t\tvar handleObj, type;\n \t\tif ( types && types.preventDefault && types.handleObj ) {\n+\n \t\t\t// ( event ) dispatched jQuery.Event\n \t\t\thandleObj = types.handleObj;\n \t\t\tjQuery( types.delegateTarget ).off(\n-\t\t\t\thandleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,\n+\t\t\t\thandleObj.namespace ?\n+\t\t\t\t\thandleObj.origType + "." + handleObj.namespace :\n+\t\t\t\t\thandleObj.origType,\n \t\t\t\thandleObj.selector,\n \t\t\t\thandleObj.handler\n \t\t\t);\n \t\t\treturn this;\n \t\t}\n \t\tif ( typeof types === "object" ) {\n+\n \t\t\t// ( types-object [, selector] )\n \t\t\tfor ( type in types ) {\n \t\t\t\tthis.off( type, selector, types[ type ] );\n@@ -5272,6 +5842,7 @@ jQuery.fn.extend({\n \t\t\treturn this;\n \t\t}\n \t\tif ( selector === false || typeof selector === "function" ) {\n+\n \t\t\t// ( types [, fn] )\n \t\t\tfn = selector;\n \t\t\tselector = undefined;\n@@ -5279,105 +5850,40 @@ jQuery.fn.extend({\n \t\tif ( fn === false ) {\n \t\t\tfn = returnFalse;\n \t\t}\n-\t\treturn this.each(function() {\n+\t\treturn this.each( function() {\n \t\t\tjQuery.event.remove( this, types, fn, selector );\n-\t\t});\n+\t\t} );\n \t},\n \n \ttrigger: function( type, data ) {\n-\t\treturn this.each(function() {\n+\t\treturn this.each( function() {\n \t\t\tjQuery.event.trigger( type, data, this );\n-\t\t});\n+\t\t} );\n \t},\n \ttriggerHandler: function( type, data ) {\n-\t\tvar elem = this[0];\n+\t\tvar elem = this[ 0 ];\n \t\tif ( elem ) {\n \t\t\treturn jQuery.event.trigger( type, data, elem, true );\n \t\t}\n \t}\n-});\n+} );\n \n \n-function createSafeFragment( document ) {\n-\tvar list = nodeNames.split( "|" ),\n-\t\tsafeFrag = document.createDocumentFragment();\n+var rinlinejQuery = / jQuery\\d+="(?:null|\\d+)"/g,\n+\trnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\\\s/>]", "i" ),\n+\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n \n-\tif ( safeFrag.createElement ) {\n-\t\twhile ( list.length ) {\n-\t\t\tsafeFrag.createElement(\n-\t\t\t\tlist.pop()\n-\t\t\t);\n-\t\t}\n-\t}\n-\treturn safeFrag;\n-}\n+\t// Support: IE 10-11, Edge 10240+\n+\t// In IE/Edge using regex groups here causes severe slowdowns.\n+\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n+\trnoInnerhtml = /]", "i"),\n-\trleadingWhitespace = /^\\s+/,\n-\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n-\trtagName = /<([\\w:]+)/,\n-\trtbody = /\\s*$/g,\n-\n-\t// We have to close these tags to support XHTML (#13200)\n-\twrapMap = {\n-\t\toption: [ 1, "" ],\n-\t\tlegend: [ 1, "
", "
" ],\n-\t\tarea: [ 1, "", "" ],\n-\t\tparam: [ 1, "", "" ],\n-\t\tthead: [ 1, "
", "
" ],\n-\t\ttr: [ 2, "", "
" ],\n-\t\tcol: [ 2, "", "
" ],\n-\t\ttd: [ 3, "", "
" ],\n-\n-\t\t// IE6-8 can\'t serialize link, script, style, or any html5 (NoScope) tags,\n-\t\t// unless wrapped in a div with non-breaking characters in front of it.\n-\t\t_default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ]\n-\t},\n \tsafeFragment = createSafeFragment( document ),\n-\tfragmentDiv = safeFragment.appendChild( document.createElement("div") );\n-\n-wrapMap.optgroup = wrapMap.option;\n-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n-wrapMap.th = wrapMap.td;\n-\n-function getAll( context, tag ) {\n-\tvar elems, elem,\n-\t\ti = 0,\n-\t\tfound = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :\n-\t\t\ttypeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :\n-\t\t\tundefined;\n-\n-\tif ( !found ) {\n-\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n-\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n-\t\t\t\tfound.push( elem );\n-\t\t\t} else {\n-\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n-\t\t\t}\n-\t\t}\n-\t}\n-\n-\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n-\t\tjQuery.merge( [ context ], found ) :\n-\t\tfound;\n-}\n-\n-// Used in buildFragment, fixes the defaultChecked property\n-function fixDefaultChecked( elem ) {\n-\tif ( rcheckableType.test( elem.type ) ) {\n-\t\telem.defaultChecked = elem.checked;\n-\t}\n-}\n+\tfragmentDiv = safeFragment.appendChild( document.createElement( "div" ) );\n \n // Support: IE<8\n // Manipulating tables requires a tbody\n@@ -5385,37 +5891,27 @@ function manipulationTarget( elem, content ) {\n \treturn jQuery.nodeName( elem, "table" ) &&\n \t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?\n \n-\t\telem.getElementsByTagName("tbody")[0] ||\n-\t\t\telem.appendChild( elem.ownerDocument.createElement("tbody") ) :\n+\t\telem.getElementsByTagName( "tbody" )[ 0 ] ||\n+\t\t\telem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :\n \t\telem;\n }\n \n // Replace/restore the type attribute of script elements for safe DOM manipulation\n function disableScript( elem ) {\n-\telem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;\n+\telem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type;\n \treturn elem;\n }\n function restoreScript( elem ) {\n \tvar match = rscriptTypeMasked.exec( elem.type );\n \tif ( match ) {\n-\t\telem.type = match[1];\n+\t\telem.type = match[ 1 ];\n \t} else {\n-\t\telem.removeAttribute("type");\n+\t\telem.removeAttribute( "type" );\n \t}\n \treturn elem;\n }\n \n-// Mark scripts as having already been evaluated\n-function setGlobalEval( elems, refElements ) {\n-\tvar elem,\n-\t\ti = 0;\n-\tfor ( ; (elem = elems[i]) != null; i++ ) {\n-\t\tjQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );\n-\t}\n-}\n-\n function cloneCopyEvent( src, dest ) {\n-\n \tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n \t\treturn;\n \t}\n@@ -5480,11 +5976,12 @@ function fixCloneNodeIssues( src, dest ) {\n \t\t// element in IE9, the outerHTML strategy above is not sufficient.\n \t\t// If the src has innerHTML and the destination does not,\n \t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n-\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n+\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\n \t\t\tdest.innerHTML = src.innerHTML;\n \t\t}\n \n \t} else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {\n+\n \t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n \t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n \t\t// a checked appearance if the defaultChecked value isn\'t also set\n@@ -5509,12 +6006,137 @@ function fixCloneNodeIssues( src, dest ) {\n \t}\n }\n \n-jQuery.extend({\n+function domManip( collection, args, callback, ignored ) {\n+\n+\t// Flatten any nested arrays\n+\targs = concat.apply( [], args );\n+\n+\tvar first, node, hasScripts,\n+\t\tscripts, doc, fragment,\n+\t\ti = 0,\n+\t\tl = collection.length,\n+\t\tiNoClone = l - 1,\n+\t\tvalue = args[ 0 ],\n+\t\tisFunction = jQuery.isFunction( value );\n+\n+\t// We can\'t cloneNode fragments that contain checked, in WebKit\n+\tif ( isFunction ||\n+\t\t\t( l > 1 && typeof value === "string" &&\n+\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n+\t\treturn collection.each( function( index ) {\n+\t\t\tvar self = collection.eq( index );\n+\t\t\tif ( isFunction ) {\n+\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n+\t\t\t}\n+\t\t\tdomManip( self, args, callback, ignored );\n+\t\t} );\n+\t}\n+\n+\tif ( l ) {\n+\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n+\t\tfirst = fragment.firstChild;\n+\n+\t\tif ( fragment.childNodes.length === 1 ) {\n+\t\t\tfragment = first;\n+\t\t}\n+\n+\t\t// Require either new content or an interest in ignored elements to invoke the callback\n+\t\tif ( first || ignored ) {\n+\t\t\tscripts = jQuery.map( getAll( fragment, "script" ), disableScript );\n+\t\t\thasScripts = scripts.length;\n+\n+\t\t\t// Use the original fragment for the last item\n+\t\t\t// instead of the first because it can end up\n+\t\t\t// being emptied incorrectly in certain situations (#8070).\n+\t\t\tfor ( ; i < l; i++ ) {\n+\t\t\t\tnode = fragment;\n+\n+\t\t\t\tif ( i !== iNoClone ) {\n+\t\t\t\t\tnode = jQuery.clone( node, true, true );\n+\n+\t\t\t\t\t// Keep references to cloned scripts for later restoration\n+\t\t\t\t\tif ( hasScripts ) {\n+\n+\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n+\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n+\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, "script" ) );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tcallback.call( collection[ i ], node, i );\n+\t\t\t}\n+\n+\t\t\tif ( hasScripts ) {\n+\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n+\n+\t\t\t\t// Reenable scripts\n+\t\t\t\tjQuery.map( scripts, restoreScript );\n+\n+\t\t\t\t// Evaluate executable scripts on first document insertion\n+\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n+\t\t\t\t\tnode = scripts[ i ];\n+\t\t\t\t\tif ( rscriptType.test( node.type || "" ) &&\n+\t\t\t\t\t\t!jQuery._data( node, "globalEval" ) &&\n+\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n+\n+\t\t\t\t\t\tif ( node.src ) {\n+\n+\t\t\t\t\t\t\t// Optional AJAX dependency, but won\'t run scripts if not present\n+\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n+\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tjQuery.globalEval(\n+\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || "" )\n+\t\t\t\t\t\t\t\t\t.replace( rcleanScript, "" )\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t// Fix #11809: Avoid leaking memory\n+\t\t\tfragment = first = null;\n+\t\t}\n+\t}\n+\n+\treturn collection;\n+}\n+\n+function remove( elem, selector, keepData ) {\n+\tvar node,\n+\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\n+\t\ti = 0;\n+\n+\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\n+\n+\t\tif ( !keepData && node.nodeType === 1 ) {\n+\t\t\tjQuery.cleanData( getAll( node ) );\n+\t\t}\n+\n+\t\tif ( node.parentNode ) {\n+\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n+\t\t\t\tsetGlobalEval( getAll( node, "script" ) );\n+\t\t\t}\n+\t\t\tnode.parentNode.removeChild( node );\n+\t\t}\n+\t}\n+\n+\treturn elem;\n+}\n+\n+jQuery.extend( {\n+\thtmlPrefilter: function( html ) {\n+\t\treturn html.replace( rxhtmlTag, "<$1>" );\n+\t},\n+\n \tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n \t\tvar destElements, node, clone, i, srcElements,\n \t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n \n-\t\tif ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {\n+\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\n+\t\t\t!rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {\n+\n \t\t\tclone = elem.cloneNode( true );\n \n \t\t// IE<=8 does not properly clone detached, unknown element nodes\n@@ -5523,18 +6145,19 @@ jQuery.extend({\n \t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n \t\t}\n \n-\t\tif ( (!support.noCloneEvent || !support.noCloneChecked) &&\n-\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n+\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\n+\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\n \n \t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n \t\t\tdestElements = getAll( clone );\n \t\t\tsrcElements = getAll( elem );\n \n \t\t\t// Fix all IE cloning issues\n-\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n+\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\n+\n \t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n-\t\t\t\tif ( destElements[i] ) {\n-\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n+\t\t\t\tif ( destElements[ i ] ) {\n+\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\n \t\t\t\t}\n \t\t\t}\n \t\t}\n@@ -5545,8 +6168,8 @@ jQuery.extend({\n \t\t\t\tsrcElements = srcElements || getAll( elem );\n \t\t\t\tdestElements = destElements || getAll( clone );\n \n-\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n-\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n+\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\n+\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\n \t\t\t\t}\n \t\t\t} else {\n \t\t\t\tcloneCopyEvent( elem, clone );\n@@ -5565,143 +6188,16 @@ jQuery.extend({\n \t\treturn clone;\n \t},\n \n-\tbuildFragment: function( elems, context, scripts, selection ) {\n-\t\tvar j, elem, contains,\n-\t\t\ttmp, tag, tbody, wrap,\n-\t\t\tl = elems.length,\n-\n-\t\t\t// Ensure a safe fragment\n-\t\t\tsafe = createSafeFragment( context ),\n-\n-\t\t\tnodes = [],\n-\t\t\ti = 0;\n-\n-\t\tfor ( ; i < l; i++ ) {\n-\t\t\telem = elems[ i ];\n-\n-\t\t\tif ( elem || elem === 0 ) {\n-\n-\t\t\t\t// Add nodes directly\n-\t\t\t\tif ( jQuery.type( elem ) === "object" ) {\n-\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n-\n-\t\t\t\t// Convert non-html into a text node\n-\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n-\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n-\n-\t\t\t\t// Convert html into DOM nodes\n-\t\t\t\t} else {\n-\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement("div") );\n-\n-\t\t\t\t\t// Deserialize a standard representation\n-\t\t\t\t\ttag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();\n-\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n-\n-\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2];\n-\n-\t\t\t\t\t// Descend through wrappers to the right content\n-\t\t\t\t\tj = wrap[0];\n-\t\t\t\t\twhile ( j-- ) {\n-\t\t\t\t\t\ttmp = tmp.lastChild;\n-\t\t\t\t\t}\n-\n-\t\t\t\t\t// Manually add leading whitespace removed by IE\n-\t\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n-\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n-\t\t\t\t\t}\n-\n-\t\t\t\t\t// Remove IE\'s autoinserted from table fragments\n-\t\t\t\t\tif ( !support.tbody ) {\n-\n-\t\t\t\t\t\t// String was a , *may* have spurious \n-\t\t\t\t\t\telem = tag === "table" && !rtbody.test( elem ) ?\n-\t\t\t\t\t\t\ttmp.firstChild :\n-\n-\t\t\t\t\t\t\t// String was a bare or \n-\t\t\t\t\t\t\twrap[1] === "
" && !rtbody.test( elem ) ?\n-\t\t\t\t\t\t\t\ttmp :\n-\t\t\t\t\t\t\t\t0;\n-\n-\t\t\t\t\t\tj = elem && elem.childNodes.length;\n-\t\t\t\t\t\twhile ( j-- ) {\n-\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {\n-\t\t\t\t\t\t\t\telem.removeChild( tbody );\n-\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t}\n-\t\t\t\t\t}\n-\n-\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n-\n-\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n-\t\t\t\t\ttmp.textContent = "";\n-\n-\t\t\t\t\t// Fix #12392 for oldIE\n-\t\t\t\t\twhile ( tmp.firstChild ) {\n-\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n-\t\t\t\t\t}\n-\n-\t\t\t\t\t// Remember the top-level container for proper cleanup\n-\t\t\t\t\ttmp = safe.lastChild;\n-\t\t\t\t}\n-\t\t\t}\n-\t\t}\n-\n-\t\t// Fix #11356: Clear elements from fragment\n-\t\tif ( tmp ) {\n-\t\t\tsafe.removeChild( tmp );\n-\t\t}\n-\n-\t\t// Reset defaultChecked for any radios and checkboxes\n-\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n-\t\tif ( !support.appendChecked ) {\n-\t\t\tjQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );\n-\t\t}\n-\n-\t\ti = 0;\n-\t\twhile ( (elem = nodes[ i++ ]) ) {\n-\n-\t\t\t// #4087 - If origin and destination elements are the same, and this is\n-\t\t\t// that element, do not do anything\n-\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n-\t\t\t\tcontinue;\n-\t\t\t}\n-\n-\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n-\n-\t\t\t// Append to fragment\n-\t\t\ttmp = getAll( safe.appendChild( elem ), "script" );\n-\n-\t\t\t// Preserve script evaluation history\n-\t\t\tif ( contains ) {\n-\t\t\t\tsetGlobalEval( tmp );\n-\t\t\t}\n-\n-\t\t\t// Capture executables\n-\t\t\tif ( scripts ) {\n-\t\t\t\tj = 0;\n-\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n-\t\t\t\t\tif ( rscriptType.test( elem.type || "" ) ) {\n-\t\t\t\t\t\tscripts.push( elem );\n-\t\t\t\t\t}\n-\t\t\t\t}\n-\t\t\t}\n-\t\t}\n-\n-\t\ttmp = null;\n-\n-\t\treturn safe;\n-\t},\n-\n-\tcleanData: function( elems, /* internal */ acceptData ) {\n+\tcleanData: function( elems, /* internal */ forceAcceptData ) {\n \t\tvar elem, type, id, data,\n \t\t\ti = 0,\n \t\t\tinternalKey = jQuery.expando,\n \t\t\tcache = jQuery.cache,\n-\t\t\tdeleteExpando = support.deleteExpando,\n+\t\t\tattributes = support.attributes,\n \t\t\tspecial = jQuery.event.special;\n \n-\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n-\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n+\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n+\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\n \n \t\t\t\tid = elem[ internalKey ];\n \t\t\t\tdata = id && cache[ id ];\n@@ -5724,17 +6220,18 @@ jQuery.extend({\n \n \t\t\t\t\t\tdelete cache[ id ];\n \n-\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n-\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n-\t\t\t\t\t\t// we must handle all of these cases\n-\t\t\t\t\t\tif ( deleteExpando ) {\n-\t\t\t\t\t\t\tdelete elem[ internalKey ];\n-\n-\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== strundefined ) {\n+\t\t\t\t\t\t// Support: IE<9\n+\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\n+\t\t\t\t\t\t// IE creates expando attributes along with the property\n+\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\n+\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== "undefined" ) {\n \t\t\t\t\t\t\telem.removeAttribute( internalKey );\n \n+\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n+\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\n+\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n \t\t\t\t\t\t} else {\n-\t\t\t\t\t\t\telem[ internalKey ] = null;\n+\t\t\t\t\t\t\telem[ internalKey ] = undefined;\n \t\t\t\t\t\t}\n \n \t\t\t\t\t\tdeletedIds.push( id );\n@@ -5743,78 +6240,71 @@ jQuery.extend({\n \t\t\t}\n \t\t}\n \t}\n-});\n+} );\n+\n+jQuery.fn.extend( {\n+\n+\t// Keep domManip exposed until 3.0 (gh-2225)\n+\tdomManip: domManip,\n+\n+\tdetach: function( selector ) {\n+\t\treturn remove( this, selector, true );\n+\t},\n+\n+\tremove: function( selector ) {\n+\t\treturn remove( this, selector );\n+\t},\n \n-jQuery.fn.extend({\n \ttext: function( value ) {\n \t\treturn access( this, function( value ) {\n \t\t\treturn value === undefined ?\n \t\t\t\tjQuery.text( this ) :\n-\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n+\t\t\t\tthis.empty().append(\n+\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\n+\t\t\t\t);\n \t\t}, null, value, arguments.length );\n \t},\n \n \tappend: function() {\n-\t\treturn this.domManip( arguments, function( elem ) {\n+\t\treturn domManip( this, arguments, function( elem ) {\n \t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n \t\t\t\tvar target = manipulationTarget( this, elem );\n \t\t\t\ttarget.appendChild( elem );\n \t\t\t}\n-\t\t});\n+\t\t} );\n \t},\n \n \tprepend: function() {\n-\t\treturn this.domManip( arguments, function( elem ) {\n+\t\treturn domManip( this, arguments, function( elem ) {\n \t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n \t\t\t\tvar target = manipulationTarget( this, elem );\n \t\t\t\ttarget.insertBefore( elem, target.firstChild );\n \t\t\t}\n-\t\t});\n+\t\t} );\n \t},\n \n \tbefore: function() {\n-\t\treturn this.domManip( arguments, function( elem ) {\n+\t\treturn domManip( this, arguments, function( elem ) {\n \t\t\tif ( this.parentNode ) {\n \t\t\t\tthis.parentNode.insertBefore( elem, this );\n \t\t\t}\n-\t\t});\n+\t\t} );\n \t},\n \n \tafter: function() {\n-\t\treturn this.domManip( arguments, function( elem ) {\n+\t\treturn domManip( this, arguments, function( elem ) {\n \t\t\tif ( this.parentNode ) {\n \t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n \t\t\t}\n-\t\t});\n-\t},\n-\n-\tremove: function( selector, keepData /* Internal Use Only */ ) {\n-\t\tvar elem,\n-\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n-\t\t\ti = 0;\n-\n-\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n-\n-\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n-\t\t\t\tjQuery.cleanData( getAll( elem ) );\n-\t\t\t}\n-\n-\t\t\tif ( elem.parentNode ) {\n-\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n-\t\t\t\t\tsetGlobalEval( getAll( elem, "script" ) );\n-\t\t\t\t}\n-\t\t\t\telem.parentNode.removeChild( elem );\n-\t\t\t}\n-\t\t}\n-\n-\t\treturn this;\n+\t\t} );\n \t},\n \n \tempty: function() {\n \t\tvar elem,\n \t\t\ti = 0;\n \n-\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n+\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n+\n \t\t\t// Remove element nodes and prevent memory leaks\n \t\t\tif ( elem.nodeType === 1 ) {\n \t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n@@ -5839,9 +6329,9 @@ jQuery.fn.extend({\n \t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n \t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n \n-\t\treturn this.map(function() {\n+\t\treturn this.map( function() {\n \t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n-\t\t});\n+\t\t} );\n \t},\n \n \thtml: function( value ) {\n@@ -5860,14 +6350,15 @@ jQuery.fn.extend({\n \t\t\tif ( typeof value === "string" && !rnoInnerhtml.test( value ) &&\n \t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value ) ) &&\n \t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n-\t\t\t\t!wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {\n+\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {\n \n-\t\t\t\tvalue = value.replace( rxhtmlTag, "<$1>" );\n+\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n \n \t\t\t\ttry {\n-\t\t\t\t\tfor (; i < l; i++ ) {\n+\t\t\t\t\tfor ( ; i < l; i++ ) {\n+\n \t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n-\t\t\t\t\t\telem = this[i] || {};\n+\t\t\t\t\t\telem = this[ i ] || {};\n \t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n \t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n \t\t\t\t\t\t\telem.innerHTML = value;\n@@ -5877,7 +6368,7 @@ jQuery.fn.extend({\n \t\t\t\t\telem = 0;\n \n \t\t\t\t// If using innerHTML throws an exception, use the fallback method\n-\t\t\t\t} catch(e) {}\n+\t\t\t\t} catch ( e ) {}\n \t\t\t}\n \n \t\t\tif ( elem ) {\n@@ -5887,117 +6378,25 @@ jQuery.fn.extend({\n \t},\n \n \treplaceWith: function() {\n-\t\tvar arg = arguments[ 0 ];\n-\n-\t\t// Make the changes, replacing each context element with the new content\n-\t\tthis.domManip( arguments, function( elem ) {\n-\t\t\targ = this.parentNode;\n-\n-\t\t\tjQuery.cleanData( getAll( this ) );\n+\t\tvar ignored = [];\n \n-\t\t\tif ( arg ) {\n-\t\t\t\targ.replaceChild( elem, this );\n-\t\t\t}\n-\t\t});\n-\n-\t\t// Force removal if there was no new content (e.g., from empty arguments)\n-\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n-\t},\n-\n-\tdetach: function( selector ) {\n-\t\treturn this.remove( selector, true );\n-\t},\n-\n-\tdomManip: function( args, callback ) {\n+\t\t// Make the changes, replacing each non-ignored context element with the new content\n+\t\treturn domManip( this, arguments, function( elem ) {\n+\t\t\tvar parent = this.parentNode;\n \n-\t\t// Flatten any nested arrays\n-\t\targs = concat.apply( [], args );\n-\n-\t\tvar first, node, hasScripts,\n-\t\t\tscripts, doc, fragment,\n-\t\t\ti = 0,\n-\t\t\tl = this.length,\n-\t\t\tset = this,\n-\t\t\tiNoClone = l - 1,\n-\t\t\tvalue = args[0],\n-\t\t\tisFunction = jQuery.isFunction( value );\n-\n-\t\t// We can\'t cloneNode fragments that contain checked, in WebKit\n-\t\tif ( isFunction ||\n-\t\t\t\t( l > 1 && typeof value === "string" &&\n-\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n-\t\t\treturn this.each(function( index ) {\n-\t\t\t\tvar self = set.eq( index );\n-\t\t\t\tif ( isFunction ) {\n-\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n+\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n+\t\t\t\tjQuery.cleanData( getAll( this ) );\n+\t\t\t\tif ( parent ) {\n+\t\t\t\t\tparent.replaceChild( elem, this );\n \t\t\t\t}\n-\t\t\t\tself.domManip( args, callback );\n-\t\t\t});\n-\t\t}\n-\n-\t\tif ( l ) {\n-\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n-\t\t\tfirst = fragment.firstChild;\n-\n-\t\t\tif ( fragment.childNodes.length === 1 ) {\n-\t\t\t\tfragment = first;\n \t\t\t}\n \n-\t\t\tif ( first ) {\n-\t\t\t\tscripts = jQuery.map( getAll( fragment, "script" ), disableScript );\n-\t\t\t\thasScripts = scripts.length;\n-\n-\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n-\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n-\t\t\t\tfor ( ; i < l; i++ ) {\n-\t\t\t\t\tnode = fragment;\n-\n-\t\t\t\t\tif ( i !== iNoClone ) {\n-\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n-\n-\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n-\t\t\t\t\t\tif ( hasScripts ) {\n-\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, "script" ) );\n-\t\t\t\t\t\t}\n-\t\t\t\t\t}\n-\n-\t\t\t\t\tcallback.call( this[i], node, i );\n-\t\t\t\t}\n-\n-\t\t\t\tif ( hasScripts ) {\n-\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n-\n-\t\t\t\t\t// Reenable scripts\n-\t\t\t\t\tjQuery.map( scripts, restoreScript );\n-\n-\t\t\t\t\t// Evaluate executable scripts on first document insertion\n-\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n-\t\t\t\t\t\tnode = scripts[ i ];\n-\t\t\t\t\t\tif ( rscriptType.test( node.type || "" ) &&\n-\t\t\t\t\t\t\t!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {\n-\n-\t\t\t\t\t\t\tif ( node.src ) {\n-\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won\'t run scripts if not present\n-\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n-\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n-\t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t} else {\n-\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );\n-\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t}\n-\t\t\t\t\t}\n-\t\t\t\t}\n-\n-\t\t\t\t// Fix #11809: Avoid leaking memory\n-\t\t\t\tfragment = first = null;\n-\t\t\t}\n-\t\t}\n-\n-\t\treturn this;\n+\t\t// Force callback invocation\n+\t\t}, ignored );\n \t}\n-});\n+} );\n \n-jQuery.each({\n+jQuery.each( {\n \tappendTo: "append",\n \tprependTo: "prepend",\n \tinsertBefore: "before",\n@@ -6012,8 +6411,8 @@ jQuery.each({\n \t\t\tlast = insert.length - 1;\n \n \t\tfor ( ; i <= last; i++ ) {\n-\t\t\telems = i === last ? this : this.clone(true);\n-\t\t\tjQuery( insert[i] )[ original ]( elems );\n+\t\t\telems = i === last ? this : this.clone( true );\n+\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n \n \t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n \t\t\tpush.apply( ret, elems.get() );\n@@ -6021,28 +6420,29 @@ jQuery.each({\n \n \t\treturn this.pushStack( ret );\n \t};\n-});\n+} );\n \n \n var iframe,\n-\telemdisplay = {};\n+\telemdisplay = {\n+\n+\t\t// Support: Firefox\n+\t\t// We have to pre-define these values for FF (#10227)\n+\t\tHTML: "block",\n+\t\tBODY: "block"\n+\t};\n \n /**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n+\n // Called only from within defaultDisplay\n function actualDisplay( name, doc ) {\n-\tvar style,\n-\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n-\n-\t\t// getDefaultComputedStyle might be reliably used only on attached element\n-\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n+\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n \n-\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\n-\t\t\t// since it was removed from specification and supported only in FF\n-\t\t\tstyle.display : jQuery.css( elem[ 0 ], "display" );\n+\t\tdisplay = jQuery.css( elem[ 0 ], "display" );\n \n \t// We don\'t have any data stored on the element,\n \t// so use "detach" method as fast way to get rid of the element\n@@ -6066,7 +6466,8 @@ function defaultDisplay( nodeName ) {\n \t\tif ( display === "none" || !display ) {\n \n \t\t\t// Use the already-created iframe if possible\n-\t\t\tiframe = (iframe || jQuery( "