summaryrefslogtreecommitdiffhomepage
path: root/sites
diff options
context:
space:
mode:
authorJeff Forcier <jeff@bitprophet.org>2016-12-05 16:46:08 -0800
committerJeff Forcier <jeff@bitprophet.org>2016-12-05 16:46:08 -0800
commitf58bf03e5b500ee0db7ff5dc45c1454b82523d4e (patch)
treea343651ee1c3b75db7363ca4da705a5f5cca443d /sites
parentd2f83a1fd84222692ae779492ef50b82b3837e67 (diff)
Grump at whenever this snuck in
Diffstat (limited to 'sites')
-rw-r--r--sites/www/_build.orig/.buildinfo4
-rw-r--r--sites/www/_build.orig/.doctrees/changelog.doctreebin474897 -> 0 bytes
-rw-r--r--sites/www/_build.orig/.doctrees/contact.doctreebin5423 -> 0 bytes
-rw-r--r--sites/www/_build.orig/.doctrees/contributing.doctreebin6852 -> 0 bytes
-rw-r--r--sites/www/_build.orig/.doctrees/environment.picklebin1075557 -> 0 bytes
-rw-r--r--sites/www/_build.orig/.doctrees/faq.doctreebin8864 -> 0 bytes
-rw-r--r--sites/www/_build.orig/.doctrees/index.doctreebin11072 -> 0 bytes
-rw-r--r--sites/www/_build.orig/.doctrees/installing-1.x.doctreebin26282 -> 0 bytes
-rw-r--r--sites/www/_build.orig/.doctrees/installing.doctreebin31070 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_sources/changelog.txt513
-rw-r--r--sites/www/_build.orig/_sources/contact.txt12
-rw-r--r--sites/www/_build.orig/_sources/contributing.txt26
-rw-r--r--sites/www/_build.orig/_sources/faq.txt36
-rw-r--r--sites/www/_build.orig/_sources/index.txt33
-rw-r--r--sites/www/_build.orig/_sources/installing-1.x.txt94
-rw-r--r--sites/www/_build.orig/_sources/installing.txt122
-rw-r--r--sites/www/_build.orig/_static/ajax-loader.gifbin673 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/alabaster.css607
-rw-r--r--sites/www/_build.orig/_static/basic.css604
-rw-r--r--sites/www/_build.orig/_static/comment-bright.pngbin3500 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/comment-close.pngbin3578 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/comment.pngbin3445 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/custom.css1
-rw-r--r--sites/www/_build.orig/_static/doctools.js287
-rw-r--r--sites/www/_build.orig/_static/down-pressed.pngbin347 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/down.pngbin347 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/file.pngbin358 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/jquery-1.11.1.js10308
-rw-r--r--sites/www/_build.orig/_static/jquery.js4
-rw-r--r--sites/www/_build.orig/_static/minus.pngbin173 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/plus.pngbin173 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/pygments.css73
-rw-r--r--sites/www/_build.orig/_static/searchtools.js651
-rw-r--r--sites/www/_build.orig/_static/underscore-1.3.1.js999
-rw-r--r--sites/www/_build.orig/_static/underscore.js31
-rw-r--r--sites/www/_build.orig/_static/up-pressed.pngbin345 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/up.pngbin345 -> 0 bytes
-rw-r--r--sites/www/_build.orig/_static/websupport.js808
-rw-r--r--sites/www/_build.orig/changelog.html1250
-rw-r--r--sites/www/_build.orig/contact.html154
-rw-r--r--sites/www/_build.orig/contributing.html165
-rw-r--r--sites/www/_build.orig/faq.html179
-rw-r--r--sites/www/_build.orig/genindex.html176
-rw-r--r--sites/www/_build.orig/index.html167
-rw-r--r--sites/www/_build.orig/installing-1.x.html248
-rw-r--r--sites/www/_build.orig/installing.html263
-rw-r--r--sites/www/_build.orig/objects.inv8
-rw-r--r--sites/www/_build.orig/search.html159
-rw-r--r--sites/www/_build.orig/searchindex.js1
49 files changed, 0 insertions, 17983 deletions
diff --git a/sites/www/_build.orig/.buildinfo b/sites/www/_build.orig/.buildinfo
deleted file mode 100644
index 0aa809e3..00000000
--- a/sites/www/_build.orig/.buildinfo
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 31b209d8608f6a86cbd404c03cda8690
-tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/sites/www/_build.orig/.doctrees/changelog.doctree b/sites/www/_build.orig/.doctrees/changelog.doctree
deleted file mode 100644
index a31affe9..00000000
--- a/sites/www/_build.orig/.doctrees/changelog.doctree
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/.doctrees/contact.doctree b/sites/www/_build.orig/.doctrees/contact.doctree
deleted file mode 100644
index 8e20df0c..00000000
--- a/sites/www/_build.orig/.doctrees/contact.doctree
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/.doctrees/contributing.doctree b/sites/www/_build.orig/.doctrees/contributing.doctree
deleted file mode 100644
index 2d90ae62..00000000
--- a/sites/www/_build.orig/.doctrees/contributing.doctree
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/.doctrees/environment.pickle b/sites/www/_build.orig/.doctrees/environment.pickle
deleted file mode 100644
index 8023153e..00000000
--- a/sites/www/_build.orig/.doctrees/environment.pickle
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/.doctrees/faq.doctree b/sites/www/_build.orig/.doctrees/faq.doctree
deleted file mode 100644
index f373613c..00000000
--- a/sites/www/_build.orig/.doctrees/faq.doctree
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/.doctrees/index.doctree b/sites/www/_build.orig/.doctrees/index.doctree
deleted file mode 100644
index 87e1b84e..00000000
--- a/sites/www/_build.orig/.doctrees/index.doctree
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/.doctrees/installing-1.x.doctree b/sites/www/_build.orig/.doctrees/installing-1.x.doctree
deleted file mode 100644
index 013cd015..00000000
--- a/sites/www/_build.orig/.doctrees/installing-1.x.doctree
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/.doctrees/installing.doctree b/sites/www/_build.orig/.doctrees/installing.doctree
deleted file mode 100644
index e9f4392c..00000000
--- a/sites/www/_build.orig/.doctrees/installing.doctree
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_sources/changelog.txt b/sites/www/_build.orig/_sources/changelog.txt
deleted file mode 100644
index efc97810..00000000
--- a/sites/www/_build.orig/_sources/changelog.txt
+++ /dev/null
@@ -1,513 +0,0 @@
-=========
-Changelog
-=========
-
-* :bug:`758 (1.16+)` Apply type definitions to ``_winapi`` module from
- `jaraco.windows <https://github.com/jaraco/jaraco.windows>`_ 3.6.1. This
- should address issues on Windows platforms that often result in errors like
- ``ArgumentError: [...] int too long to convert``. Thanks to ``@swohlerLL``
- for the report and Jason R. Coombs for the patch.
-* :release:`2.0.1 <2016-06-21>`
-* :release:`1.17.1 <2016-06-21>`
-* :release:`1.16.2 <2016-06-21>`
-* :bug:`520 (1.16+)` (Partial fix) Fix at least one instance of race condition
- driven threading hangs at end of the Python interpreter session. (Includes a
- docs update as well - always make sure to ``.close()`` your clients!)
-* :bug:`537 (1.16+)` Fix a bug in `BufferedPipe.set_event
- <paramiko.buffered_pipe.BufferedPipe.set_event>` which could cause
- deadlocks/hangs when one uses `select.select` against
- `~paramiko.channel.Channel` objects (or otherwise calls `Channel.fileno
- <paramiko.channel.Channel.fileno>` after the channel has closed). Thanks to
- Przemysław Strzelczak for the report & reproduction case, and to Krzysztof
- Rusek for the fix.
-* :release:`2.0.0 <2016-04-28>`
-* :release:`1.17.0 <2016-04-28>`
-* :release:`1.16.1 <2016-04-28>`
-* :release:`1.15.5 <2016-04-28>`
-* :feature:`731` (working off the earlier :issue:`611`) Add support for 384-
- and 512-bit elliptic curve groups in ECDSA key types (aka
- ``ecdsa-sha2-nistp384`` / ``ecdsa-sha2-nistp521``). Thanks to Michiel Tiller
- and ``@CrazyCasta`` for the patches.
-* :bug:`670` Due to an earlier bugfix, less-specific ``Host`` blocks'
- ``ProxyCommand`` values were overriding ``ProxyCommand none`` in
- more-specific ``Host`` blocks. This has been fixed in a backwards compatible
- manner (i.e. ``ProxyCommand none`` continues to appear as a total lack of any
- ``proxycommand`` key in parsed config structures). Thanks to Pat Brisbin for
- the catch.
-* :bug:`676` (via :issue:`677`) Fix a backwards incompatibility issue that
- cropped up in `SFTPFile.prefetch <~paramiko.sftp_file.prefetch>` re: the
- erroneously non-optional ``file_size`` parameter. Should only affect users
- who manually call ``prefetch``. Thanks to ``@stevevanhooser`` for catch &
- patch.
-* :feature:`394` Replace PyCrypto with the Python Cryptographic Authority
- (PyCA) 'Cryptography' library suite. This improves security, installability,
- and performance; adds PyPy support; and much more.
-
- There aren't enough ways to thank Alex Gaynor for all of his work on this,
- and then his patience while the maintainer let his PR grow moss for a year
- and change. Paul Kehrer came in with an assist, and I think I saw Olle
- Lundberg, ``@techtonik`` and ``@johnthagen`` supplying backup as well. Thanks
- to all!
-
- .. warning::
- **This is a backwards incompatible change.**
-
- However, **it should only affect installation** requirements; **no API
- changes are intended or expected**. Please report any such breakages as
- bugs.
-
- See our updated :doc:`installation docs <installing>` for details on what
- is now required to install Paramiko; many/most users should be able to
- simply ``pip install -U paramiko`` (especially if you **upgrade to pip
- 8**).
-
-* :bug:`577` (via :issue:`578`; should also fix :issue:`718`, :issue:`560`) Fix
- stalled/hung SFTP downloads by cleaning up some threading lock issues. Thanks
- to Stephen C. Pope for the patch.
-* :bug:`716` Fix a Python 3 compatibility issue when handling two-factor
- authentication. Thanks to Mateusz Kowalski for the catch & original patch.
-* :support:`729 backported (>=1.15,<2.0)` Clean up ``setup.py`` to always use
- ``setuptools``, not doing so was a historical artifact from bygone days.
- Thanks to Alex Gaynor.
-* :bug:`649 major (==1.17)` Update the module in charge of handling SSH moduli
- so it's consistent with OpenSSH behavior re: prime number selection. Thanks
- to Damien Tournoud for catch & patch.
-* :bug:`617` (aka `fabric/fabric#1429
- <https://github.com/fabric/fabric/issues/1429>`_; via :issue:`679`; related:
- :issue:`678`, :issue:`685`, :issue:`615` & :issue:`616`) Fix up
- `~paramiko.ssh_exception.NoValidConnectionsError` so it pickles correctly,
- and fix a related Python 3 compatibility issue. Thanks to Rebecca Schlussel
- for the report & Marius Gedminas for the patch.
-* :bug:`613` (via :issue:`619`) Update to ``jaraco.windows`` 3.4.1 to fix some
- errors related to ``ctypes`` on Windows platforms. Credit to Jason R. Coombs.
-* :support:`621 backported (>=1.15,<2.0)` Annotate some public attributes on
- `~paramiko.channel.Channel` such as ``.closed``. Thanks to Sergey Vasilyev
- for the report.
-* :bug:`632` Fix logic bug in the SFTP client's callback-calling functionality;
- previously there was a chance the given callback would fire twice at the end
- of a transfer. Thanks to ``@ab9-er`` for catch & original patch.
-* :support:`612 backported (>=1.15,<2.0)` Identify & work around a race
- condition in the test for handshake timeouts, which was causing frequent test
- failures for a subset of contributors as well as Travis-CI (usually, but not
- always, limited to Python 3.5). Props to Ed Kellett for assistance during
- some of the troubleshooting.
-* :support:`697 backported (>=1.15,<2.0)` Remove whitespace in our
- ``setup.py``'s ``install_requires`` as it triggers occasional bugs in some
- versions of ``setuptools``. Thanks to Justin Lecher for catch & original
- patch.
-* :bug:`499` Strip trailing/leading whitespace from lines when parsing SSH
- config files - this brings things in line with OpenSSH behavior. Thanks to
- Alfredo Esteban for the original report and Nick Pillitteri for the patch.
-* :bug:`652` Fix behavior of ``gssapi-with-mic`` auth requests so they fail
- gracefully (allowing followup via other auth methods) instead of raising an
- exception. Patch courtesy of ``@jamercee``.
-* :feature:`588 (==1.17)` Add missing file-like object methods for
- `~paramiko.file.BufferedFile` and `~paramiko.sftp_file.SFTPFile`. Thanks to
- Adam Meily for the patch.
-* :support:`636 backported (>=1.15,<2.0)` Clean up and enhance the README (and
- rename it to ``README.rst`` from just ``README``). Thanks to ``@LucasRMehl``.
-* :release:`1.16.0 <2015-11-04>`
-* :bug:`194 major` (also :issue:`562`, :issue:`530`, :issue:`576`) Streamline
- use of ``stat`` when downloading SFTP files via `SFTPClient.get
- <paramiko.sftp_client.SFTPClient.get>`; this avoids triggering bugs in some
- off-spec SFTP servers such as IBM Sterling. Thanks to ``@muraleee`` for the
- initial report and to Torkil Gustavsen for the patch.
-* :feature:`467` (also :issue:`139`, :issue:`412`) Fully enable two-factor
- authentication (e.g. when a server requires ``AuthenticationMethods
- pubkey,keyboard-interactive``). Thanks to ``@perryjrandall`` for the patch
- and to ``@nevins-b`` and Matt Robenolt for additional support.
-* :bug:`502 major` Fix 'exec' requests in server mode to use ``get_string``
- instead of ``get_text`` to avoid ``UnicodeDecodeError`` on non-UTF-8 input.
- Thanks to Anselm Kruis for the patch & discussion.
-* :bug:`401` Fix line number reporting in log output regarding invalid
- ``known_hosts`` line entries. Thanks to Dylan Thacker-Smith for catch &
- patch.
-* :support:`525 backported` Update the vendored Windows API addon to a more
- recent edition. Also fixes :issue:`193`, :issue:`488`, :issue:`498`. Thanks
- to Jason Coombs.
-* :release:`1.15.4 <2015-11-02>`
-* :release:`1.14.3 <2015-11-02>`
-* :release:`1.13.4 <2015-11-02>`
-* :bug:`366` Fix `~paramiko.sftp_attributes.SFTPAttributes` so its string
- representation doesn't raise exceptions on empty/initialized instances. Patch
- by Ulrich Petri.
-* :bug:`359` Use correct attribute name when trying to use Python 3's
- ``int.bit_length`` method; prior to fix, the Python 2 custom fallback
- implementation was always used, even on Python 3. Thanks to Alex Gaynor.
-* :support:`594 backported` Correct some post-Python3-port docstrings to
- specify ``bytes`` type instead of ``str``. Credit to ``@redixin``.
-* :bug:`565` Don't explode with ``IndexError`` when reading private key files
- lacking an ``-----END <type> PRIVATE KEY-----`` footer. Patch courtesy of
- Prasanna Santhanam.
-* :feature:`604` Add support for the ``aes192-ctr`` and ``aes192-cbc`` ciphers.
- Thanks to Michiel Tiller for noticing it was as easy as tweaking some key
- sizes :D
-* :feature:`356` (also :issue:`596`, :issue:`365`, :issue:`341`, :issue:`164`,
- :issue:`581`, and a bunch of other duplicates besides) Add support for SHA-2
- based key exchange (kex) algorithm ``diffie-hellman-group-exchange-sha256``
- and (H)MAC algorithms ``hmac-sha2-256`` and ``hmac-sha2-512``.
-
- This change includes tweaks to debug-level logging regarding
- algorithm-selection handshakes; the old all-in-one log line is now multiple
- easier-to-read, printed-at-handshake-time log lines.
-
- Thanks to the many people who submitted patches for this functionality and/or
- assisted in testing those patches. That list includes but is not limited to,
- and in no particular order: Matthias Witte, Dag Wieers, Ash Berlin, Etienne
- Perot, Gert van Dijk, ``@GuyShaanan``, Aaron Bieber, ``@cyphase``, and Eric
- Brown.
-* :release:`1.15.3 <2015-10-02>`
-* :support:`554 backported` Fix inaccuracies in the docstring for the ECDSA key
- class. Thanks to Jared Hance for the patch.
-* :support:`516 backported` Document `~paramiko.agent.AgentRequestHandler`.
- Thanks to ``@toejough`` for report & suggestions.
-* :bug:`496 (1.15+)` Fix a handful of small but critical bugs in Paramiko's
- GSSAPI support (note: this includes switching from PyCrypo's Random to
- `os.urandom`). Thanks to Anselm Kruis for catch & patch.
-* :bug:`491` (combines :issue:`62` and :issue:`439`) Implement timeout
- functionality to address hangs from dropped network connections and/or failed
- handshakes. Credit to ``@vazir`` and ``@dacut`` for the original patches and
- to Olle Lundberg for reimplementation.
-* :bug:`490` Skip invalid/unparseable lines in ``known_hosts`` files, instead
- of raising `~paramiko.ssh_exception.SSHException`. This brings Paramiko's
- behavior more in line with OpenSSH, which silently ignores such input. Catch
- & patch courtesy of Martin Topholm.
-* :bug:`404` Print details when displaying
- `~paramiko.ssh_exception.BadHostKeyException` objects (expected vs received
- data) instead of just "hey shit broke". Patch credit: Loic Dachary.
-* :bug:`469` (also :issue:`488`, :issue:`461` and like a dozen others) Fix a
- typo introduced in the 1.15 release which broke WinPageant support. Thanks to
- everyone who submitted patches, and to Steve Cohen who was the lucky winner
- of the cherry-pick lottery.
-* :bug:`353` (via :issue:`482`) Fix a bug introduced in the Python 3 port
- which caused ``OverFlowError`` (and other symptoms) in SFTP functionality.
- Thanks to ``@dboreham`` for leading the troubleshooting charge, and to
- Scott Maxwell for the final patch.
-* :support:`582` Fix some old ``setup.py`` related helper code which was
- breaking ``bdist_dumb`` on Mac OS X. Thanks to Peter Odding for the patch.
-* :bug:`22 major` Try harder to connect to multiple network families (e.g. IPv4
- vs IPv6) in case of connection issues; this helps with problems such as hosts
- which resolve both IPv4 and IPv6 addresses but are only listening on IPv4.
- Thanks to Dries Desmet for original report and Torsten Landschoff for the
- foundational patchset.
-* :bug:`402` Check to see if an SSH agent is actually present before trying to
- forward it to the remote end. This replaces what was usually a useless
- ``TypeError`` with a human-readable
- `~paramiko.ssh_exception.AuthenticationException`. Credit to Ken Jordan for
- the fix and Yvan Marques for original report.
-* :release:`1.15.2 <2014-12-19>`
-* :release:`1.14.2 <2014-12-19>`
-* :release:`1.13.3 <2014-12-19>`
-* :bug:`413` (also :issue:`414`, :issue:`420`, :issue:`454`) Be significantly
- smarter about polling & timing behavior when running proxy commands, to avoid
- unnecessary (often 100%!) CPU usage. Major thanks to Jason Dunsmore for
- report & initial patchset and to Chris Adams & John Morrissey for followup
- improvements.
-* :bug:`455` Tweak packet size handling to conform better to the OpenSSH RFCs;
- this helps address issues with interactive program cursors. Courtesy of Jeff
- Quast.
-* :bug:`428` Fix an issue in `~paramiko.file.BufferedFile` (primarily used in
- the SFTP modules) concerning incorrect behavior by
- `~paramiko.file.BufferedFile.readlines` on files whose size exceeds the
- buffer size. Thanks to ``@achapp`` for catch & patch.
-* :bug:`415` Fix ``ssh_config`` parsing to correctly interpret ``ProxyCommand
- none`` as the lack of a proxy command, instead of as a literal command string
- of ``"none"``. Thanks to Richard Spiers for the catch & Sean Johnson for the
- fix.
-* :support:`431 backported` Replace handrolled ``ssh_config`` parsing code with
- use of the ``shlex`` module. Thanks to Yan Kalchevskiy.
-* :support:`422 backported` Clean up some unused imports. Courtesy of Olle
- Lundberg.
-* :support:`421 backported` Modernize threading calls to use newer API. Thanks
- to Olle Lundberg.
-* :support:`419 backported` Modernize a bunch of the codebase internals to
- leverage decorators. Props to ``@beckjake`` for realizing we're no longer on
- Python 2.2 :D
-* :bug:`266` Change numbering of `~paramiko.transport.Transport` channels to
- start at 0 instead of 1 for better compatibility with OpenSSH & certain
- server implementations which break on 1-indexed channels. Thanks to
- ``@egroeper`` for catch & patch.
-* :bug:`459` Tighten up agent connection closure behavior to avoid spurious
- ``ResourceWarning`` display in some situations. Thanks to ``@tkrapp`` for the
- catch.
-* :bug:`429` Server-level debug message logging was overlooked during the
- Python 3 compatibility update; Python 3 clients attempting to log SSH debug
- packets encountered type errors. This is now fixed. Thanks to ``@mjmaenpaa``
- for the catch.
-* :bug:`320` Update our win_pageant module to be Python 3 compatible. Thanks to
- ``@sherbang`` and ``@adamkerz`` for the patches.
-* :release:`1.15.1 <2014-09-22>`
-* :bug:`399` SSH agent forwarding (potentially other functionality as
- well) would hang due to incorrect values passed into the new window size
- arguments for `.Transport` (thanks to a botched merge). This has been
- corrected. Thanks to Dylan Thacker-Smith for the report & patch.
-* :feature:`167` Add `~paramiko.config.SSHConfig.get_hostnames` for easier
- introspection of a loaded SSH config file or object. Courtesy of Søren
- Løvborg.
-* :release:`1.15.0 <2014-09-18>`
-* :support:`393` Replace internal use of PyCrypto's ``SHA.new`` with the
- stdlib's ``hashlib.sha1``. Thanks to Alex Gaynor.
-* :feature:`267` (also :issue:`250`, :issue:`241`, :issue:`228`) Add GSS-API /
- SSPI (e.g. Kerberos) key exchange and authentication support
- (:ref:`installation docs here <gssapi>`). Mega thanks to Sebastian Deiß, with
- assist by Torsten Landschoff.
-
- .. note::
- Unix users should be aware that the ``python-gssapi`` library (a
- requirement for using this functionality) only appears to support
- Python 2.7 and up at this time.
-
-* :bug:`346 major` Fix an issue in private key files' encryption salts that
- could cause tracebacks and file corruption if keys were re-encrypted. Credit
- to Xavier Nunn.
-* :feature:`362` Allow users to control the SSH banner timeout. Thanks to Cory
- Benfield.
-* :feature:`372` Update default window & packet sizes to more closely adhere to
- the pertinent RFC; also expose these settings in the public API so they may
- be overridden by client code. This should address some general speed issues
- such as :issue:`175`. Big thanks to Olle Lundberg for the update.
-* :bug:`373 major` Attempt to fix a handful of issues (such as :issue:`354`)
- related to infinite loops and threading deadlocks. Thanks to Olle Lundberg as
- well as a handful of community members who provided advice & feedback via
- IRC.
-* :support:`374` (also :issue:`375`) Old code cleanup courtesy of Olle
- Lundberg.
-* :support:`377` Factor `~paramiko.channel.Channel` openness sanity check into
- a decorator. Thanks to Olle Lundberg for original patch.
-* :bug:`298 major` Don't perform point validation on ECDSA keys in
- ``known_hosts`` files, since a) this can cause significant slowdown when such
- keys exist, and b) ``known_hosts`` files are implicitly trustworthy. Thanks
- to Kieran Spear for catch & patch.
-
- .. note::
- This change bumps up the version requirement for the ``ecdsa`` library to
- ``0.11``.
-
-* :bug:`234 major` Lower logging levels for a few overly-noisy log messages
- about secure channels. Thanks to David Pursehouse for noticing & contributing
- the fix.
-* :feature:`218` Add support for ECDSA private keys on the client side. Thanks
- to ``@aszlig`` for the patch.
-* :bug:`335 major` Fix ECDSA key generation (generation of brand new ECDSA keys
- was broken previously). Thanks to ``@solarw`` for catch & patch.
-* :feature:`184` Support quoted values in SSH config file parsing. Credit to
- Yan Kalchevskiy.
-* :feature:`131` Add a `~paramiko.sftp_client.SFTPClient.listdir_iter` method
- to `~paramiko.sftp_client.SFTPClient` allowing for more efficient,
- async/generator based file listings. Thanks to John Begeman.
-* :support:`378 backported` Minor code cleanup in the SSH config module
- courtesy of Olle Lundberg.
-* :support:`249 backported` Consolidate version information into one spot.
- Thanks to Gabi Davar for the reminder.
-* :release:`1.14.1 <2014-08-25>`
-* :release:`1.13.2 <2014-08-25>`
-* :bug:`376` Be less aggressive about expanding variables in ``ssh_config``
- files, which results in a speedup of SSH config parsing. Credit to Olle
- Lundberg.
-* :support:`324 backported` A bevvy of documentation typo fixes, courtesy of Roy
- Wellington.
-* :bug:`312` `paramiko.transport.Transport` had a bug in its ``__repr__`` which
- surfaces during errors encountered within its ``__init__``, causing
- problematic tracebacks in such situations. Thanks to Simon Percivall for
- catch & patch.
-* :bug:`272` Fix a bug where ``known_hosts`` parsing hashed the input hostname
- as well as the hostnames from the ``known_hosts`` file, on every comparison.
- Thanks to ``@sigmunau`` for final patch and ``@ostacey`` for the original
- report.
-* :bug:`239` Add Windows-style CRLF support to SSH config file parsing. Props
- to Christopher Swenson.
-* :support:`229 backported` Fix a couple of incorrectly-copied docstrings' ``..
- versionadded::`` RST directives. Thanks to Aarni Koskela for the catch.
-* :support:`169 backported` Minor refactor of
- `paramiko.sftp_client.SFTPClient.put` thanks to Abhinav Upadhyay.
-* :bug:`285` (also :issue:`352`) Update our Python 3 ``b()`` compatibility shim
- to handle ``buffer`` objects correctly; this fixes a frequently reported
- issue affecting many users, including users of the ``bzr`` software suite.
- Thanks to ``@basictheprogram`` for the initial report, Jelmer Vernooij for
- the fix and Andrew Starr-Bochicchio & Jeremy T. Bouse (among others) for
- discussion & feedback.
-* :support:`371` Add Travis support & docs update for Python 3.4. Thanks to
- Olle Lundberg.
-* :release:`1.14.0 <2014-05-07>`
-* :release:`1.13.1 <2014-05-07>`
-* :release:`1.12.4 <2014-05-07>`
-* :release:`1.11.6 <2014-05-07>`
-* :bug:`-` `paramiko.file.BufferedFile.read` incorrectly returned text strings
- after the Python 3 migration, despite bytes being more appropriate for file
- contents (which may be binary or of an unknown encoding.) This has been
- addressed.
-
- .. note::
- `paramiko.file.BufferedFile.readline` continues to return strings, not
- bytes, as "lines" only make sense for textual data. It assumes UTF-8 by
- default.
-
- This should fix `this issue raised on the Obnam mailing list
- <http://comments.gmane.org/gmane.comp.sysutils.backup.obnam/252>`_. Thanks
- to Antoine Brenner for the patch.
-* :bug:`-` Added self.args for exception classes. Used for unpickling. Related
- to (`Fabric #986 <https://github.com/fabric/fabric/issues/986>`_, `Fabric
- #714 <https://github.com/fabric/fabric/issues/714>`_). Thanks to Alex
- Plugaru.
-* :bug:`-` Fix logging error in sftp_client for filenames containing the '%'
- character. Thanks to Antoine Brenner.
-* :bug:`308` Fix regression in dsskey.py that caused sporadic signature
- verification failures. Thanks to Chris Rose.
-* :support:`299` Use deterministic signatures for ECDSA keys for improved
- security. Thanks to Alex Gaynor.
-* :support:`297` Replace PyCrypto's ``Random`` with `os.urandom` for improved
- speed and security. Thanks again to Alex.
-* :support:`295` Swap out a bunch of PyCrypto hash functions with use of
- `hashlib`. Thanks to Alex Gaynor.
-* :support:`290` (also :issue:`292`) Add support for building universal
- (Python 2+3 compatible) wheel files during the release process. Courtesy of
- Alex Gaynor.
-* :support:`284` Add Python language trove identifiers to ``setup.py``. Thanks
- to Alex Gaynor for catch & patch.
-* :bug:`235` Improve string type testing in a handful of spots (e.g. ``s/if
- type(x) is str/if isinstance(x, basestring)/g``.) Thanks to ``@ksamuel`` for
- the report.
-* :release:`1.13.0 <2014-03-13>`
-* :release:`1.12.3 <2014-03-13>`
-* :release:`1.11.5 <2014-03-13>`
-* :release:`1.10.7 <2014-03-13>`
-* :feature:`16` **Python 3 support!** Our test suite passes under Python 3, and
- it (& Fabric's test suite) continues to pass under Python 2. **Python 2.5 is
- no longer supported with this change!**
-
- The merged code was built on many contributors' efforts, both code &
- feedback. In no particular order, we thank Daniel Goertzen, Ivan Kolodyazhny,
- Tomi Pieviläinen, Jason R. Coombs, Jan N. Schulze, ``@Lazik``, Dorian Pula,
- Scott Maxwell, Tshepang Lekhonkhobe, Aaron Meurer, and Dave Halter.
-* :support:`256 backported` Convert API documentation to Sphinx, yielding a new
- API docs website to replace the old Epydoc one. Thanks to Olle Lundberg for
- the initial conversion work.
-* :bug:`-` Use constant-time hash comparison operations where possible, to
- protect against `timing-based attacks
- <http://codahale.com/a-lesson-in-timing-attacks/>`_. Thanks to Alex Gaynor
- for the patch.
-* :release:`1.12.2 <2014-02-14>`
-* :release:`1.11.4 <2014-02-14>`
-* :release:`1.10.6 <2014-02-14>`
-* :feature:`58` Allow client code to access the stored SSH server banner via
- `Transport.get_banner <paramiko.transport.Transport.get_banner>`. Thanks to
- ``@Jhoanor`` for the patch.
-* :bug:`252` (`Fabric #1020 <https://github.com/fabric/fabric/issues/1020>`_)
- Enhanced the implementation of ``ProxyCommand`` to avoid a deadlock/hang
- condition that frequently occurs at ``Transport`` shutdown time. Thanks to
- Mateusz Kobos, Matthijs van der Vleuten and Guillaume Zitta for the original
- reports and to Marius Gedminas for helping test nontrivial use cases.
-* :bug:`268` Fix some missed renames of ``ProxyCommand`` related error classes.
- Thanks to Marius Gedminas for catch & patch.
-* :bug:`34` (PR :issue:`35`) Fix SFTP prefetching incompatibility with some
- SFTP servers regarding request/response ordering. Thanks to Richard
- Kettlewell.
-* :bug:`193` (and its attentant PRs :issue:`230` & :issue:`253`) Fix SSH agent
- problems present on Windows. Thanks to David Hobbs for initial report and to
- Aarni Koskela & Olle Lundberg for the patches.
-* :release:`1.12.1 <2014-01-08>`
-* :release:`1.11.3 <2014-01-08>`
-* :release:`1.10.5 <2014-01-08>`
-* :bug:`225 (1.12+)` Note ecdsa requirement in README. Thanks to Amaury
- Rodriguez for the catch.
-* :bug:`176` Fix AttributeError bugs in known_hosts file (re)loading. Thanks
- to Nathan Scowcroft for the patch & Martin Blumenstingl for the initial test
- case.
-* :release:`1.12.0 <2013-09-27>`
-* :release:`1.11.2 <2013-09-27>`
-* :release:`1.10.4 <2013-09-27>`
-* :feature:`152` Add tentative support for ECDSA keys. **This adds the ecdsa
- module as a new dependency of Paramiko.** The module is available at
- `warner/python-ecdsa on Github <https://github.com/warner/python-ecdsa>`_ and
- `ecdsa on PyPI <https://pypi.python.org/pypi/ecdsa>`_.
-
- * Note that you might still run into problems with key negotiation --
- Paramiko picks the first key that the server offers, which might not be
- what you have in your known_hosts file.
- * Mega thanks to Ethan Glasser-Camp for the patch.
-
-* :feature:`136` Add server-side support for the SSH protocol's 'env' command.
- Thanks to Benjamin Pollack for the patch.
-* :bug:`156 (1.11+)` Fix potential deadlock condition when using Channel
- objects as sockets (e.g. when using SSH gatewaying). Thanks to Steven Noonan
- and Frank Arnold for catch & patch.
-* :bug:`179` Fix a missing variable causing errors when an ssh_config file has
- a non-default AddressFamily set. Thanks to Ed Marshall & Tomaz Muraus for
- catch & patch.
-* :bug:`200` Fix an exception-causing typo in ``demo_simple.py``. Thanks to Alex
- Buchanan for catch & Dave Foster for patch.
-* :bug:`199` Typo fix in the license header cross-project. Thanks to Armin
- Ronacher for catch & patch.
-* :release:`1.11.1 <2013-09-20>`
-* :release:`1.10.3 <2013-09-20>`
-* :bug:`162` Clean up HMAC module import to avoid deadlocks in certain uses of
- SSHClient. Thanks to Gernot Hillier for the catch & suggested fix.
-* :bug:`36` Fix the port-forwarding demo to avoid file descriptor errors.
- Thanks to Jonathan Halcrow for catch & patch.
-* :bug:`168` Update config handling to properly handle multiple 'localforward'
- and 'remoteforward' keys. Thanks to Emre Yılmaz for the patch.
-* :release:`1.11.0 <2013-07-26>`
-* :release:`1.10.2 <2013-07-26>`
-* :bug:`98 major` On Windows, when interacting with the PuTTY PAgeant, Paramiko
- now creates the shared memory map with explicit Security Attributes of the
- user, which is the same technique employed by the canonical PuTTY library to
- avoid permissions issues when Paramiko is running under a different UAC
- context than the PuTTY Ageant process. Thanks to Jason R. Coombs for the
- patch.
-* :support:`100` Remove use of PyWin32 in ``win_pageant`` module. Module was
- already dependent on ctypes for constructing appropriate structures and had
- ctypes implementations of all functionality. Thanks to Jason R. Coombs for
- the patch.
-* :bug:`87 major` Ensure updates to ``known_hosts`` files account for any
- updates to said files after Paramiko initially read them. (Includes related
- fix to guard against duplicate entries during subsequent ``known_hosts``
- loads.) Thanks to ``@sunweaver`` for the contribution.
-* :bug:`153` (also :issue:`67`) Warn on parse failure when reading known_hosts
- file. Thanks to ``@glasserc`` for patch.
-* :bug:`146` Indentation fixes for readability. Thanks to Abhinav Upadhyay for
- catch & patch.
-* :release:`1.10.1 <2013-04-05>`
-* :bug:`142` (`Fabric #811 <https://github.com/fabric/fabric/issues/811>`_)
- SFTP put of empty file will still return the attributes of the put file.
- Thanks to Jason R. Coombs for the patch.
-* :bug:`154` (`Fabric #876 <https://github.com/fabric/fabric/issues/876>`_)
- Forwarded SSH agent connections left stale local pipes lying around, which
- could cause local (and sometimes remote or network) resource starvation when
- running many agent-using remote commands. Thanks to Kevin Tegtmeier for catch
- & patch.
-* :release:`1.10.0 <2013-03-01>`
-* :feature:`66` Batch SFTP writes to help speed up file transfers. Thanks to
- Olle Lundberg for the patch.
-* :bug:`133 major` Fix handling of window-change events to be on-spec and not
- attempt to wait for a response from the remote sshd; this fixes problems with
- less common targets such as some Cisco devices. Thanks to Phillip Heller for
- catch & patch.
-* :feature:`93` Overhaul SSH config parsing to be in line with ``man
- ssh_config`` (& the behavior of ``ssh`` itself), including addition of parameter
- expansion within config values. Thanks to Olle Lundberg for the patch.
-* :feature:`110` Honor SSH config ``AddressFamily`` setting when looking up
- local host's FQDN. Thanks to John Hensley for the patch.
-* :feature:`128` Defer FQDN resolution until needed, when parsing SSH config
- files. Thanks to Parantapa Bhattacharya for catch & patch.
-* :bug:`102 major` Forego random padding for packets when running under
- ``*-ctr`` ciphers. This corrects some slowdowns on platforms where random
- byte generation is inefficient (e.g. Windows). Thanks to ``@warthog618`` for
- catch & patch, and Michael van der Kolff for code/technique review.
-* :feature:`127` Turn ``SFTPFile`` into a context manager. Thanks to Michael
- Williamson for the patch.
-* :feature:`116` Limit ``Message.get_bytes`` to an upper bound of 1MB to protect
- against potential DoS vectors. Thanks to ``@mvschaik`` for catch & patch.
-* :feature:`115` Add convenience ``get_pty`` kwarg to ``Client.exec_command`` so
- users not manually controlling a channel object can still toggle PTY
- creation. Thanks to Michael van der Kolff for the patch.
-* :feature:`71` Add ``SFTPClient.putfo`` and ``.getfo`` methods to allow direct
- uploading/downloading of file-like objects. Thanks to Eric Buehl for the
- patch.
-* :feature:`113` Add ``timeout`` parameter to ``SSHClient.exec_command`` for
- easier setting of the command's internal channel object's timeout. Thanks to
- Cernov Vladimir for the patch.
-* :support:`94` Remove duplication of SSH port constant. Thanks to Olle
- Lundberg for the catch.
-* :feature:`80` Expose the internal "is closed" property of the file transfer
- class ``BufferedFile`` as ``.closed``, better conforming to Python's file
- interface. Thanks to ``@smunaut`` and James Hiscock for catch & patch.
diff --git a/sites/www/_build.orig/_sources/contact.txt b/sites/www/_build.orig/_sources/contact.txt
deleted file mode 100644
index 7e6c947e..00000000
--- a/sites/www/_build.orig/_sources/contact.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-=======
-Contact
-=======
-
-You can get in touch with the developer & user community in any of the
-following ways:
-
-* IRC: ``#paramiko`` on Freenode
-* Mailing list: ``paramiko@librelist.com`` (see `the LibreList homepage
- <http://librelist.com>`_ for usage details).
-* This website - a blog section is forthcoming.
-* Submit contributions on Github - see the :doc:`contributing` page.
diff --git a/sites/www/_build.orig/_sources/contributing.txt b/sites/www/_build.orig/_sources/contributing.txt
deleted file mode 100644
index a44414e8..00000000
--- a/sites/www/_build.orig/_sources/contributing.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-============
-Contributing
-============
-
-How to get the code
-===================
-
-Our primary Git repository is on Github at `paramiko/paramiko`_;
-please follow their instructions for cloning to your local system. (If you
-intend to submit patches/pull requests, we recommend forking first, then
-cloning your fork. Github has excellent documentation for all this.)
-
-
-How to submit bug reports or new code
-=====================================
-
-Please see `this project-agnostic contribution guide
-<http://contribution-guide.org>`_ - we follow it explicitly. Again, our code
-repository and bug tracker is `on Github`_.
-
-Our current changelog is located in ``sites/www/changelog.rst`` - the top
-level files like ``ChangeLog.*`` and ``NEWS`` are historical only.
-
-
-.. _paramiko/paramiko:
-.. _on Github: https://github.com/paramiko/paramiko
diff --git a/sites/www/_build.orig/_sources/faq.txt b/sites/www/_build.orig/_sources/faq.txt
deleted file mode 100644
index 74b7501e..00000000
--- a/sites/www/_build.orig/_sources/faq.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-===================================
-Frequently Asked/Answered Questions
-===================================
-
-Which version should I use? I see multiple active releases.
-===========================================================
-
-Please see :ref:`the installation docs <release-lines>` which have an explicit
-section about this topic.
-
-Paramiko doesn't work with my Cisco, Windows or other non-Unix system!
-======================================================================
-
-In an ideal world, the developers would love to support every possible target
-system. Unfortunately, volunteer development time and access to non-mainstream
-platforms are limited, meaning that we can only fully support standard OpenSSH
-implementations such as those found on the average Linux distribution (as well
-as on Mac OS X and \*BSD.)
-
-Because of this, **we typically close bug reports for nonstandard SSH
-implementations or host systems**.
-
-However, **closed does not imply locked** - affected users can still post
-comments on such tickets - and **we will always consider actual patch
-submissions for these issues**, provided they can get +1s from similarly
-affected users and are proven to not break existing functionality.
-
-I'm having strange issues with my code hanging at shutdown!
-===========================================================
-
-Make sure you explicitly ``.close()`` your connection objects (usually
-``SSHClient``) if you're having any sort of hang/freeze at shutdown time!
-
-Doing so isn't strictly necessary 100% of the time, but it is almost always the
-right solution if you run into the various corner cases that cause race
-conditions, etc.
diff --git a/sites/www/_build.orig/_sources/index.txt b/sites/www/_build.orig/_sources/index.txt
deleted file mode 100644
index b09ab589..00000000
--- a/sites/www/_build.orig/_sources/index.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-Welcome to Paramiko!
-====================
-
-Paramiko is a Python (2.6+, 3.3+) implementation of the SSHv2 protocol [#]_,
-providing both client and server functionality. While it leverages a Python C
-extension for low level cryptography
-(`Cryptography <https://cryptography.io>`_), Paramiko itself is a pure Python
-interface around SSH networking concepts.
-
-This website covers project information for Paramiko such as the changelog,
-contribution guidelines, development roadmap, news/blog, and so forth. Detailed
-usage and API documentation can be found at our code documentation site,
-`docs.paramiko.org <http://docs.paramiko.org>`_.
-
-Please see the sidebar to the left to begin.
-
-.. toctree::
- :hidden:
-
- changelog
- FAQs <faq>
- installing
- contributing
- contact
-
-
-.. rubric:: Footnotes
-
-.. [#]
- SSH is defined in :rfc:`4251`, :rfc:`4252`, :rfc:`4253` and :rfc:`4254`. The
- primary working implementation of the protocol is the `OpenSSH project
- <http://openssh.org>`_. Paramiko implements a large portion of the SSH
- feature set, but there are occasional gaps.
diff --git a/sites/www/_build.orig/_sources/installing-1.x.txt b/sites/www/_build.orig/_sources/installing-1.x.txt
deleted file mode 100644
index 0c2424bb..00000000
--- a/sites/www/_build.orig/_sources/installing-1.x.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-Installing (1.x)
-================
-
-.. note:: Installing Paramiko 2.0 or above? See :doc:`installing` instead.
-
-This document includes legacy notes on installing Paramiko 1.x (specifically,
-1.13 and up). Users are strongly encouraged to upgrade to 2.0 when possible;
-PyCrypto (the dependency covered below) is no longer maintained and contains
-security vulnerabilities.
-
-General install notes
-=====================
-
-* Python 2.6+ and 3.3+ are supported; Python <=2.5 and 3.0-3.2 are **not
- supported**.
-* See the note in the main install doc about :ref:`release-lines` for details
- on specific versions you may want to install.
-
- .. note:: 1.x will eventually be entirely end-of-lifed.
-* Paramiko 1.7-1.14 have only one dependency: :ref:`pycrypto`.
-* Paramiko 1.15+ (not including 2.x and above) add a second, pure-Python
- dependency: the ``ecdsa`` module, trivially installable via PyPI.
-* Paramiko 1.15+ (again, not including 2.x and up) also allows you to
- optionally install a few more dependencies to gain support for
- :ref:`GSS-API/Kerberos <gssapi-on-1x>`.
-* Users on Windows may want to opt for the :ref:`pypm` approach.
-
-
-.. _pycrypto:
-
-PyCrypto
-========
-
-`PyCrypto <https://www.dlitz.net/software/pycrypto/>`__ provides the low-level
-(C-based) encryption algorithms we need to implement the SSH protocol. There
-are a couple gotchas associated with installing PyCrypto: its compatibility
-with Python's package tools, and the fact that it is a C-based extension.
-
-C extension
------------
-
-Unless you are installing from a precompiled source such as a Debian apt
-repository or RedHat RPM, or using :ref:`pypm <pypm>`, you will also need the
-ability to build Python C-based modules from source in order to install
-PyCrypto. Users on **Unix-based platforms** such as Ubuntu or Mac OS X will
-need the traditional C build toolchain installed (e.g. Developer Tools / XCode
-Tools on the Mac, or the ``build-essential`` package on Ubuntu or Debian Linux
--- basically, anything with ``gcc``, ``make`` and so forth) as well as the
-Python development libraries, often named ``python-dev`` or similar.
-
-For **Windows** users we recommend using :ref:`pypm`, installing a C
-development environment such as `Cygwin <http://cygwin.com>`_ or obtaining a
-precompiled Win32 PyCrypto package from `voidspace's Python modules page
-<http://www.voidspace.org.uk/python/modules.shtml#pycrypto>`_.
-
-.. note::
- Some Windows users whose Python is 64-bit have found that the PyCrypto
- dependency ``winrandom`` may not install properly, leading to ImportErrors.
- In this scenario, you'll probably need to compile ``winrandom`` yourself
- via e.g. MS Visual Studio. See `Fabric #194
- <https://github.com/fabric/fabric/issues/194>`_ for info.
-
-
-.. _pypm:
-
-ActivePython and PyPM
-=====================
-
-Windows users who already have ActiveState's `ActivePython
-<http://www.activestate.com/activepython/downloads>`_ distribution installed
-may find Paramiko is best installed with `its package manager, PyPM
-<http://code.activestate.com/pypm/>`_. Below is example output from an
-installation of Paramiko via ``pypm``::
-
- C:\> pypm install paramiko
- The following packages will be installed into "%APPDATA%\Python" (2.7):
- paramiko-1.7.8 pycrypto-2.4
- Get: [pypm-free.activestate.com] paramiko 1.7.8
- Get: [pypm-free.activestate.com] pycrypto 2.4
- Installing paramiko-1.7.8
- Installing pycrypto-2.4
- C:\>
-
-
-.. _gssapi-on-1x:
-
-Optional dependencies for GSS-API / SSPI / Kerberos
-===================================================
-
-First, see the main install doc's notes: :ref:`gssapi` - everything there is
-required for Paramiko 1.x as well.
-
-Additionally, users of Paramiko 1.x, on all platforms, need a final dependency:
-`pyasn1 <https://pypi.python.org/pypi/pyasn1>`_ ``0.1.7`` or better.
diff --git a/sites/www/_build.orig/_sources/installing.txt b/sites/www/_build.orig/_sources/installing.txt
deleted file mode 100644
index 5a41a76b..00000000
--- a/sites/www/_build.orig/_sources/installing.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-==========
-Installing
-==========
-
-
-.. note::
- These instructions cover Paramiko 2.0 and above. If you're looking to
- install Paramiko 1.x, see :doc:`installing-1.x`. However, **the 1.x line
- relies on insecure dependencies** so upgrading is strongly encouraged.
-
-
-.. _paramiko-itself:
-
-Paramiko itself
-===============
-
-The recommended way to get Paramiko is to **install the latest stable release**
-via `pip <http://pip-installer.org>`_::
-
- $ pip install paramiko
-
-.. note::
- Users who want the bleeding edge can install the development version via
- ``pip install paramiko==dev``.
-
-We currently support **Python 2.6, 2.7, 3.3+, and PyPy**. Users on Python 2.5
-or older (or 3.2 or older) are urged to upgrade.
-
-Paramiko has only one direct hard dependency: the Cryptography library. See
-:ref:`cryptography`.
-
-If you need GSS-API / SSPI support, see :ref:`the below subsection on it
-<gssapi>` for details on its optional dependencies.
-
-
-.. _release-lines:
-
-Release lines
--------------
-
-Users desiring stability may wish to pin themselves to a specific release line
-once they first start using Paramiko; to assist in this, we guarantee bugfixes
-for the last 2-3 releases including the latest stable one.
-
-This typically spans major & minor versions, so even if e.g. 3.1 is the latest
-stable release, it's likely that bugfixes will occasionally come out for the
-latest 2.x and perhaps even 1.x releases, as well as for 3.0. New feature
-releases for previous major-version lines are less likely but not unheard of.
-
-If you're unsure which version to install:
-
-* **Completely new users** should always default to the **latest stable
- release** (as above, whatever is newest / whatever shows up with ``pip
- install paramiko``.)
-* **Users upgrading from a much older version** (e.g. 1.7.x through 1.10.x)
- should probably get the **oldest actively supported line** (check the
- :doc:`changelog` for recent releases).
-* **Everybody else** is hopefully already "on" a given version and can
- carefully upgrade to whichever version they care to, when their release line
- stops being supported.
-
-
-.. _cryptography:
-
-Cryptography
-============
-
-`Cryptography <https://cryptography.io>`__ provides the low-level (C-based)
-encryption algorithms we need to implement the SSH protocol. It has detailed
-`installation instructions`_ (and an `FAQ
-<https://cryptography.io/en/latest/faq/>`_) which you should read carefully.
-
-In general, you'll need one of the following setups:
-
-* On Windows or Mac OS X, provided your ``pip`` is modern (8.x+): nothing else
- is required. ``pip`` will install statically compiled binary archives of
- Cryptography & its dependencies.
-* On Linux, or on other platforms with older versions of ``pip``: you'll need a
- C build toolchain, plus development headers for Python, OpenSSL and
- ``libffi``. Again, see `Cryptography's install docs`_; these requirements may
- occasionally change.
-
- .. warning::
- If you go this route, note that **OpenSSL 1.0.1 or newer is effectively
- required**. Cryptography 1.3 and older technically allow OpenSSL 0.9.8, but
- 1.4 and newer - which Paramiko will gladly install or upgrade, if you e.g.
- ``pip install -U`` - drop that support.
-
-.. _installation instructions:
-.. _Cryptography's install docs: https://cryptography.io/en/latest/installation/
-
-
-.. _gssapi:
-
-Optional dependencies for GSS-API / SSPI / Kerberos
-===================================================
-
-In order to use GSS-API/Kerberos & related functionality, a couple of
-additional dependencies are required (these are not listed in our ``setup.py``
-due to their infrequent utility & non-platform-agnostic requirements):
-
-* It hopefully goes without saying but **all platforms** need **a working
- installation of GSS-API itself**, e.g. Heimdal.
-* **Unix** needs `python-gssapi <https://pypi.python.org/pypi/python-gssapi/>`_
- ``0.6.1`` or better.
-
- .. note:: This library appears to only function on Python 2.7 and up.
-
-* **Windows** needs `pywin32 <https://pypi.python.org/pypi/pywin32>`_ ``2.1.8``
- or better.
-
-.. note::
- If you use Microsoft SSPI for kerberos authentication and credential
- delegation, make sure that the target host is trusted for delegation in the
- active directory configuration. For details see:
- http://technet.microsoft.com/en-us/library/cc738491%28v=ws.10%29.aspx
-
-
-.. toctree::
- :hidden:
-
- installing-1.x
diff --git a/sites/www/_build.orig/_static/ajax-loader.gif b/sites/www/_build.orig/_static/ajax-loader.gif
deleted file mode 100644
index 61faf8ca..00000000
--- a/sites/www/_build.orig/_static/ajax-loader.gif
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/alabaster.css b/sites/www/_build.orig/_static/alabaster.css
deleted file mode 100644
index 517cb43e..00000000
--- a/sites/www/_build.orig/_static/alabaster.css
+++ /dev/null
@@ -1,607 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
- font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif;
- font-size: 17px;
- background-color: white;
- color: #000;
- margin: 0;
- padding: 0;
-}
-
-
-div.document {
- width: 940px;
- margin: 30px auto 0 auto;
-}
-
-div.documentwrapper {
- float: left;
- width: 100%;
-}
-
-div.bodywrapper {
- margin: 0 0 0 220px;
-}
-
-div.sphinxsidebar {
- width: 220px;
- font-size: 14px;
- line-height: 1.5;
-}
-
-hr {
- border: 1px solid #B1B4B6;
-}
-
-div.body {
- background-color: #ffffff;
- color: #3E4349;
- padding: 0 30px 0 30px;
-}
-
-div.body > .section {
- text-align: left;
-}
-
-div.footer {
- width: 940px;
- margin: 20px auto 30px auto;
- font-size: 14px;
- color: #888;
- text-align: right;
-}
-
-div.footer a {
- color: #888;
-}
-
-p.caption {
- font-family: ;
- font-size: inherit;
-}
-
-
-div.relations {
- display: none;
-}
-
-
-div.sphinxsidebar a {
- color: #444;
- text-decoration: none;
- border-bottom: 1px dotted #999;
-}
-
-div.sphinxsidebar a:hover {
- border-bottom: 1px solid #999;
-}
-
-div.sphinxsidebarwrapper {
- padding: 18px 10px;
-}
-
-div.sphinxsidebarwrapper p.logo {
- padding: 0;
- margin: -10px 0 0 0px;
- text-align: center;
-}
-
-div.sphinxsidebarwrapper h1.logo {
- margin-top: -10px;
- text-align: center;
- margin-bottom: 5px;
- text-align: left;
-}
-
-div.sphinxsidebarwrapper h1.logo-name {
- margin-top: 0px;
-}
-
-div.sphinxsidebarwrapper p.blurb {
- margin-top: 0;
- font-style: normal;
-}
-
-div.sphinxsidebar h3,
-div.sphinxsidebar h4 {
- font-family: 'Garamond', 'Georgia', serif;
- color: #444;
- font-size: 24px;
- font-weight: normal;
- margin: 0 0 5px 0;
- padding: 0;
-}
-
-div.sphinxsidebar h4 {
- font-size: 20px;
-}
-
-div.sphinxsidebar h3 a {
- color: #444;
-}
-
-div.sphinxsidebar p.logo a,
-div.sphinxsidebar h3 a,
-div.sphinxsidebar p.logo a:hover,
-div.sphinxsidebar h3 a:hover {
- border: none;
-}
-
-div.sphinxsidebar p {
- color: #555;
- margin: 10px 0;
-}
-
-div.sphinxsidebar ul {
- margin: 10px 0;
- padding: 0;
- color: #000;
-}
-
-div.sphinxsidebar ul li.toctree-l1 > a {
- font-size: 120%;
-}
-
-div.sphinxsidebar ul li.toctree-l2 > a {
- font-size: 110%;
-}
-
-div.sphinxsidebar input {
- border: 1px solid #CCC;
- font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif;
- font-size: 1em;
-}
-
-div.sphinxsidebar hr {
- border: none;
- height: 1px;
- color: #AAA;
- background: #AAA;
-
- text-align: left;
- margin-left: 0;
- width: 50%;
-}
-
-/* -- body styles ----------------------------------------------------------- */
-
-a {
- color: #004B6B;
- text-decoration: underline;
-}
-
-a:hover {
- color: #6D4100;
- text-decoration: underline;
-}
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
- font-family: 'Garamond', 'Georgia', serif;
- font-weight: normal;
- margin: 30px 0px 10px 0px;
- padding: 0;
-}
-
-div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
-div.body h2 { font-size: 180%; }
-div.body h3 { font-size: 150%; }
-div.body h4 { font-size: 130%; }
-div.body h5 { font-size: 100%; }
-div.body h6 { font-size: 100%; }
-
-a.headerlink {
- color: #DDD;
- padding: 0 4px;
- text-decoration: none;
-}
-
-a.headerlink:hover {
- color: #444;
- background: #EAEAEA;
-}
-
-div.body p, div.body dd, div.body li {
- line-height: 1.4em;
-}
-
-div.admonition {
- margin: 20px 0px;
- padding: 10px 30px;
- background-color: #FCC;
- border: 1px solid #FAA;
-}
-
-div.admonition tt.xref, div.admonition a tt {
- border-bottom: 1px solid #fafafa;
-}
-
-dd div.admonition {
- margin-left: -60px;
- padding-left: 60px;
-}
-
-div.admonition p.admonition-title {
- font-family: 'Garamond', 'Georgia', serif;
- font-weight: normal;
- font-size: 24px;
- margin: 0 0 10px 0;
- padding: 0;
- line-height: 1;
-}
-
-div.admonition p.last {
- margin-bottom: 0;
-}
-
-div.highlight {
- background-color: white;
-}
-
-dt:target, .highlight {
- background: #FAF3E8;
-}
-
-div.note {
- background-color: #EEE;
- border: 1px solid #CCC;
-}
-
-div.seealso {
- background-color: #EEE;
- border: 1px solid #CCC;
-}
-
-div.topic {
- background-color: #eee;
-}
-
-p.admonition-title {
- display: inline;
-}
-
-p.admonition-title:after {
- content: ":";
-}
-
-pre, tt, code {
- font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
- font-size: 0.9em;
-}
-
-.hll {
- background-color: #FFC;
- margin: 0 -12px;
- padding: 0 12px;
- display: block;
-}
-
-img.screenshot {
-}
-
-tt.descname, tt.descclassname, code.descname, code.descclassname {
- font-size: 0.95em;
-}
-
-tt.descname, code.descname {
- padding-right: 0.08em;
-}
-
-img.screenshot {
- -moz-box-shadow: 2px 2px 4px #eee;
- -webkit-box-shadow: 2px 2px 4px #eee;
- box-shadow: 2px 2px 4px #eee;
-}
-
-table.docutils {
- border: 1px solid #888;
- -moz-box-shadow: 2px 2px 4px #eee;
- -webkit-box-shadow: 2px 2px 4px #eee;
- box-shadow: 2px 2px 4px #eee;
-}
-
-table.docutils td, table.docutils th {
- border: 1px solid #888;
- padding: 0.25em 0.7em;
-}
-
-table.field-list, table.footnote {
- border: none;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-table.footnote {
- margin: 15px 0;
- width: 100%;
- border: 1px solid #EEE;
- background: #FDFDFD;
- font-size: 0.9em;
-}
-
-table.footnote + table.footnote {
- margin-top: -15px;
- border-top: none;
-}
-
-table.field-list th {
- padding: 0 0.8em 0 0;
-}
-
-table.field-list td {
- padding: 0;
-}
-
-table.field-list p {
- margin-bottom: 0.8em;
-}
-
-table.footnote td.label {
- width: .1px;
- padding: 0.3em 0 0.3em 0.5em;
-}
-
-table.footnote td {
- padding: 0.3em 0.5em;
-}
-
-dl {
- margin: 0;
- padding: 0;
-}
-
-dl dd {
- margin-left: 30px;
-}
-
-blockquote {
- margin: 0 0 0 30px;
- padding: 0;
-}
-
-ul, ol {
- /* Matches the 30px from the narrow-screen "li > ul" selector below */
- margin: 10px 0 10px 30px;
- padding: 0;
-}
-
-pre {
- background: #EEE;
- padding: 7px 30px;
- margin: 15px 0px;
- line-height: 1.3em;
-}
-
-dl pre, blockquote pre, li pre {
- margin-left: 0;
- padding-left: 30px;
-}
-
-dl dl pre {
- margin-left: -90px;
- padding-left: 90px;
-}
-
-tt, code {
- background-color: #ecf0f3;
- color: #222;
- /* padding: 1px 2px; */
-}
-
-tt.xref, code.xref, a tt {
- background-color: #FBFBFB;
- border-bottom: 1px solid white;
-}
-
-a.reference {
- text-decoration: none;
- border-bottom: 1px dotted #004B6B;
-}
-
-/* Don't put an underline on images */
-a.image-reference, a.image-reference:hover {
- border-bottom: none;
-}
-
-a.reference:hover {
- border-bottom: 1px solid #6D4100;
-}
-
-a.footnote-reference {
- text-decoration: none;
- font-size: 0.7em;
- vertical-align: top;
- border-bottom: 1px dotted #004B6B;
-}
-
-a.footnote-reference:hover {
- border-bottom: 1px solid #6D4100;
-}
-
-a:hover tt, a:hover code {
- background: #EEE;
-}
-
-
-@media screen and (max-width: 870px) {
-
- div.sphinxsidebar {
- display: none;
- }
-
- div.document {
- width: 100%;
-
- }
-
- div.documentwrapper {
- margin-left: 0;
- margin-top: 0;
- margin-right: 0;
- margin-bottom: 0;
- }
-
- div.bodywrapper {
- margin-top: 0;
- margin-right: 0;
- margin-bottom: 0;
- margin-left: 0;
- }
-
- ul {
- margin-left: 0;
- }
-
- li > ul {
- /* Matches the 30px from the "ul, ol" selector above */
- margin-left: 30px;
- }
-
- .document {
- width: auto;
- }
-
- .footer {
- width: auto;
- }
-
- .bodywrapper {
- margin: 0;
- }
-
- .footer {
- width: auto;
- }
-
- .github {
- display: none;
- }
-
-
-
-}
-
-
-
-@media screen and (max-width: 875px) {
-
- body {
- margin: 0;
- padding: 20px 30px;
- }
-
- div.documentwrapper {
- float: none;
- background: white;
- }
-
- div.sphinxsidebar {
- display: block;
- float: none;
- width: 102.5%;
- margin: 50px -30px -20px -30px;
- padding: 10px 20px;
- background: #333;
- color: #FFF;
- }
-
- div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
- div.sphinxsidebar h3 a {
- color: white;
- }
-
- div.sphinxsidebar a {
- color: #AAA;
- }
-
- div.sphinxsidebar p.logo {
- display: none;
- }
-
- div.document {
- width: 100%;
- margin: 0;
- }
-
- div.footer {
- display: none;
- }
-
- div.bodywrapper {
- margin: 0;
- }
-
- div.body {
- min-height: 0;
- padding: 0;
- }
-
- .rtd_doc_footer {
- display: none;
- }
-
- .document {
- width: auto;
- }
-
- .footer {
- width: auto;
- }
-
- .footer {
- width: auto;
- }
-
- .github {
- display: none;
- }
-}
-
-
-/* misc. */
-
-.revsys-inline {
- display: none!important;
-}
-
-/* Make nested-list/multi-paragraph items look better in Releases changelog
- * pages. Without this, docutils' magical list fuckery causes inconsistent
- * formatting between different release sub-lists.
- */
-div#changelog > div.section > ul > li > p:only-child {
- margin-bottom: 0;
-}
-
-/* Hide fugly table cell borders in ..bibliography:: directive output */
-table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
- border: none;
- /* Below needed in some edge cases; if not applied, bottom shadows appear */
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-} \ No newline at end of file
diff --git a/sites/www/_build.orig/_static/basic.css b/sites/www/_build.orig/_static/basic.css
deleted file mode 100644
index 2b513f0c..00000000
--- a/sites/www/_build.orig/_static/basic.css
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
- * basic.css
- * ~~~~~~~~~
- *
- * Sphinx stylesheet -- basic theme.
- *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/* -- main layout ----------------------------------------------------------- */
-
-div.clearer {
- clear: both;
-}
-
-/* -- relbar ---------------------------------------------------------------- */
-
-div.related {
- width: 100%;
- font-size: 90%;
-}
-
-div.related h3 {
- display: none;
-}
-
-div.related ul {
- margin: 0;
- padding: 0 0 0 10px;
- list-style: none;
-}
-
-div.related li {
- display: inline;
-}
-
-div.related li.right {
- float: right;
- margin-right: 5px;
-}
-
-/* -- sidebar --------------------------------------------------------------- */
-
-div.sphinxsidebarwrapper {
- padding: 10px 5px 0 10px;
-}
-
-div.sphinxsidebar {
- float: left;
- width: 230px;
- margin-left: -100%;
- font-size: 90%;
- word-wrap: break-word;
- overflow-wrap : break-word;
-}
-
-div.sphinxsidebar ul {
- list-style: none;
-}
-
-div.sphinxsidebar ul ul,
-div.sphinxsidebar ul.want-points {
- margin-left: 20px;
- list-style: square;
-}
-
-div.sphinxsidebar ul ul {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-div.sphinxsidebar form {
- margin-top: 10px;
-}
-
-div.sphinxsidebar input {
- border: 1px solid #98dbcc;
- font-family: sans-serif;
- font-size: 1em;
-}
-
-div.sphinxsidebar #searchbox input[type="text"] {
- width: 170px;
-}
-
-img {
- border: 0;
- max-width: 100%;
-}
-
-/* -- search page ----------------------------------------------------------- */
-
-ul.search {
- margin: 10px 0 0 20px;
- padding: 0;
-}
-
-ul.search li {
- padding: 5px 0 5px 20px;
- background-image: url(file.png);
- background-repeat: no-repeat;
- background-position: 0 7px;
-}
-
-ul.search li a {
- font-weight: bold;
-}
-
-ul.search li div.context {
- color: #888;
- margin: 2px 0 0 30px;
- text-align: left;
-}
-
-ul.keywordmatches li.goodmatch a {
- font-weight: bold;
-}
-
-/* -- index page ------------------------------------------------------------ */
-
-table.contentstable {
- width: 90%;
-}
-
-table.contentstable p.biglink {
- line-height: 150%;
-}
-
-a.biglink {
- font-size: 1.3em;
-}
-
-span.linkdescr {
- font-style: italic;
- padding-top: 5px;
- font-size: 90%;
-}
-
-/* -- general index --------------------------------------------------------- */
-
-table.indextable {
- width: 100%;
-}
-
-table.indextable td {
- text-align: left;
- vertical-align: top;
-}
-
-table.indextable dl, table.indextable dd {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-table.indextable tr.pcap {
- height: 10px;
-}
-
-table.indextable tr.cap {
- margin-top: 10px;
- background-color: #f2f2f2;
-}
-
-img.toggler {
- margin-right: 3px;
- margin-top: 3px;
- cursor: pointer;
-}
-
-div.modindex-jumpbox {
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
- margin: 1em 0 1em 0;
- padding: 0.4em;
-}
-
-div.genindex-jumpbox {
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
- margin: 1em 0 1em 0;
- padding: 0.4em;
-}
-
-/* -- general body styles --------------------------------------------------- */
-
-div.body p, div.body dd, div.body li, div.body blockquote {
- -moz-hyphens: auto;
- -ms-hyphens: auto;
- -webkit-hyphens: auto;
- hyphens: auto;
-}
-
-a.headerlink {
- visibility: hidden;
-}
-
-h1:hover > a.headerlink,
-h2:hover > a.headerlink,
-h3:hover > a.headerlink,
-h4:hover > a.headerlink,
-h5:hover > a.headerlink,
-h6:hover > a.headerlink,
-dt:hover > a.headerlink,
-caption:hover > a.headerlink,
-p.caption:hover > a.headerlink,
-div.code-block-caption:hover > a.headerlink {
- visibility: visible;
-}
-
-div.body p.caption {
- text-align: inherit;
-}
-
-div.body td {
- text-align: left;
-}
-
-.field-list ul {
- padding-left: 1em;
-}
-
-.first {
- margin-top: 0 !important;
-}
-
-p.rubric {
- margin-top: 30px;
- font-weight: bold;
-}
-
-img.align-left, .figure.align-left, object.align-left {
- clear: left;
- float: left;
- margin-right: 1em;
-}
-
-img.align-right, .figure.align-right, object.align-right {
- clear: right;
- float: right;
- margin-left: 1em;
-}
-
-img.align-center, .figure.align-center, object.align-center {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.align-left {
- text-align: left;
-}
-
-.align-center {
- text-align: center;
-}
-
-.align-right {
- text-align: right;
-}
-
-/* -- sidebars -------------------------------------------------------------- */
-
-div.sidebar {
- margin: 0 0 0.5em 1em;
- border: 1px solid #ddb;
- padding: 7px 7px 0 7px;
- background-color: #ffe;
- width: 40%;
- float: right;
-}
-
-p.sidebar-title {
- font-weight: bold;
-}
-
-/* -- topics ---------------------------------------------------------------- */
-
-div.topic {
- border: 1px solid #ccc;
- padding: 7px 7px 0 7px;
- margin: 10px 0 10px 0;
-}
-
-p.topic-title {
- font-size: 1.1em;
- font-weight: bold;
- margin-top: 10px;
-}
-
-/* -- admonitions ----------------------------------------------------------- */
-
-div.admonition {
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 7px;
-}
-
-div.admonition dt {
- font-weight: bold;
-}
-
-div.admonition dl {
- margin-bottom: 0;
-}
-
-p.admonition-title {
- margin: 0px 10px 5px 0px;
- font-weight: bold;
-}
-
-div.body p.centered {
- text-align: center;
- margin-top: 25px;
-}
-
-/* -- tables ---------------------------------------------------------------- */
-
-table.docutils {
- border: 0;
- border-collapse: collapse;
-}
-
-table caption span.caption-number {
- font-style: italic;
-}
-
-table caption span.caption-text {
-}
-
-table.docutils td, table.docutils th {
- padding: 1px 8px 1px 5px;
- border-top: 0;
- border-left: 0;
- border-right: 0;
- border-bottom: 1px solid #aaa;
-}
-
-table.field-list td, table.field-list th {
- border: 0 !important;
-}
-
-table.footnote td, table.footnote th {
- border: 0 !important;
-}
-
-th {
- text-align: left;
- padding-right: 5px;
-}
-
-table.citation {
- border-left: solid 1px gray;
- margin-left: 1px;
-}
-
-table.citation td {
- border-bottom: none;
-}
-
-/* -- figures --------------------------------------------------------------- */
-
-div.figure {
- margin: 0.5em;
- padding: 0.5em;
-}
-
-div.figure p.caption {
- padding: 0.3em;
-}
-
-div.figure p.caption span.caption-number {
- font-style: italic;
-}
-
-div.figure p.caption span.caption-text {
-}
-
-
-/* -- other body styles ----------------------------------------------------- */
-
-ol.arabic {
- list-style: decimal;
-}
-
-ol.loweralpha {
- list-style: lower-alpha;
-}
-
-ol.upperalpha {
- list-style: upper-alpha;
-}
-
-ol.lowerroman {
- list-style: lower-roman;
-}
-
-ol.upperroman {
- list-style: upper-roman;
-}
-
-dl {
- margin-bottom: 15px;
-}
-
-dd p {
- margin-top: 0px;
-}
-
-dd ul, dd table {
- margin-bottom: 10px;
-}
-
-dd {
- margin-top: 3px;
- margin-bottom: 10px;
- margin-left: 30px;
-}
-
-dt:target, .highlighted {
- background-color: #fbe54e;
-}
-
-dl.glossary dt {
- font-weight: bold;
- font-size: 1.1em;
-}
-
-.field-list ul {
- margin: 0;
- padding-left: 1em;
-}
-
-.field-list p {
- margin: 0;
-}
-
-.optional {
- font-size: 1.3em;
-}
-
-.sig-paren {
- font-size: larger;
-}
-
-.versionmodified {
- font-style: italic;
-}
-
-.system-message {
- background-color: #fda;
- padding: 5px;
- border: 3px solid red;
-}
-
-.footnote:target {
- background-color: #ffa;
-}
-
-.line-block {
- display: block;
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
-.line-block .line-block {
- margin-top: 0;
- margin-bottom: 0;
- margin-left: 1.5em;
-}
-
-.guilabel, .menuselection {
- font-family: sans-serif;
-}
-
-.accelerator {
- text-decoration: underline;
-}
-
-.classifier {
- font-style: oblique;
-}
-
-abbr, acronym {
- border-bottom: dotted 1px;
- cursor: help;
-}
-
-/* -- code displays --------------------------------------------------------- */
-
-pre {
- overflow: auto;
- overflow-y: hidden; /* fixes display issues on Chrome browsers */
-}
-
-td.linenos pre {
- padding: 5px 0px;
- border: 0;
- background-color: transparent;
- color: #aaa;
-}
-
-table.highlighttable {
- margin-left: 0.5em;
-}
-
-table.highlighttable td {
- padding: 0 0.5em 0 0.5em;
-}
-
-div.code-block-caption {
- padding: 2px 5px;
- font-size: small;
-}
-
-div.code-block-caption code {
- background-color: transparent;
-}
-
-div.code-block-caption + div > div.highlight > pre {
- margin-top: 0;
-}
-
-div.code-block-caption span.caption-number {
- padding: 0.1em 0.3em;
- font-style: italic;
-}
-
-div.code-block-caption span.caption-text {
-}
-
-div.literal-block-wrapper {
- padding: 1em 1em 0;
-}
-
-div.literal-block-wrapper div.highlight {
- margin: 0;
-}
-
-code.descname {
- background-color: transparent;
- font-weight: bold;
- font-size: 1.2em;
-}
-
-code.descclassname {
- background-color: transparent;
-}
-
-code.xref, a code {
- background-color: transparent;
- font-weight: bold;
-}
-
-h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
- background-color: transparent;
-}
-
-.viewcode-link {
- float: right;
-}
-
-.viewcode-back {
- float: right;
- font-family: sans-serif;
-}
-
-div.viewcode-block:target {
- margin: -1px -10px;
- padding: 0 10px;
-}
-
-/* -- math display ---------------------------------------------------------- */
-
-img.math {
- vertical-align: middle;
-}
-
-div.body div.math p {
- text-align: center;
-}
-
-span.eqno {
- float: right;
-}
-
-/* -- printout stylesheet --------------------------------------------------- */
-
-@media print {
- div.document,
- div.documentwrapper,
- div.bodywrapper {
- margin: 0 !important;
- width: 100%;
- }
-
- div.sphinxsidebar,
- div.related,
- div.footer,
- #top-link {
- display: none;
- }
-} \ No newline at end of file
diff --git a/sites/www/_build.orig/_static/comment-bright.png b/sites/www/_build.orig/_static/comment-bright.png
deleted file mode 100644
index 551517b8..00000000
--- a/sites/www/_build.orig/_static/comment-bright.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/comment-close.png b/sites/www/_build.orig/_static/comment-close.png
deleted file mode 100644
index 09b54be4..00000000
--- a/sites/www/_build.orig/_static/comment-close.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/comment.png b/sites/www/_build.orig/_static/comment.png
deleted file mode 100644
index 92feb52b..00000000
--- a/sites/www/_build.orig/_static/comment.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/custom.css b/sites/www/_build.orig/_static/custom.css
deleted file mode 100644
index 2a924f1d..00000000
--- a/sites/www/_build.orig/_static/custom.css
+++ /dev/null
@@ -1 +0,0 @@
-/* This file intentionally left blank. */
diff --git a/sites/www/_build.orig/_static/doctools.js b/sites/www/_build.orig/_static/doctools.js
deleted file mode 100644
index 81634956..00000000
--- a/sites/www/_build.orig/_static/doctools.js
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * doctools.js
- * ~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for all documentation.
- *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/**
- * select a different prefix for underscore
- */
-$u = _.noConflict();
-
-/**
- * make the code below compatible with browsers without
- * an installed firebug like debugger
-if (!window.console || !console.firebug) {
- var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
- "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
- "profile", "profileEnd"];
- window.console = {};
- for (var i = 0; i < names.length; ++i)
- window.console[names[i]] = function() {};
-}
- */
-
-/**
- * small helper function to urldecode strings
- */
-jQuery.urldecode = function(x) {
- return decodeURIComponent(x).replace(/\+/g, ' ');
-};
-
-/**
- * small helper function to urlencode strings
- */
-jQuery.urlencode = encodeURIComponent;
-
-/**
- * This function returns the parsed url parameters of the
- * current request. Multiple values per key are supported,
- * it will always return arrays of strings for the value parts.
- */
-jQuery.getQueryParameters = function(s) {
- if (typeof s == 'undefined')
- s = document.location.search;
- var parts = s.substr(s.indexOf('?') + 1).split('&');
- var result = {};
- for (var i = 0; i < parts.length; i++) {
- var tmp = parts[i].split('=', 2);
- var key = jQuery.urldecode(tmp[0]);
- var value = jQuery.urldecode(tmp[1]);
- if (key in result)
- result[key].push(value);
- else
- result[key] = [value];
- }
- return result;
-};
-
-/**
- * highlight a given string on a jquery object by wrapping it in
- * span elements with the given class name.
- */
-jQuery.fn.highlightText = function(text, className) {
- function highlight(node) {
- if (node.nodeType == 3) {
- var val = node.nodeValue;
- var pos = val.toLowerCase().indexOf(text);
- if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
- var span = document.createElement("span");
- span.className = className;
- span.appendChild(document.createTextNode(val.substr(pos, text.length)));
- node.parentNode.insertBefore(span, node.parentNode.insertBefore(
- document.createTextNode(val.substr(pos + text.length)),
- node.nextSibling));
- node.nodeValue = val.substr(0, pos);
- }
- }
- else if (!jQuery(node).is("button, select, textarea")) {
- jQuery.each(node.childNodes, function() {
- highlight(this);
- });
- }
- }
- return this.each(function() {
- highlight(this);
- });
-};
-
-/*
- * backward compatibility for jQuery.browser
- * This will be supported until firefox bug is fixed.
- */
-if (!jQuery.browser) {
- jQuery.uaMatch = function(ua) {
- ua = ua.toLowerCase();
-
- var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
- /(webkit)[ \/]([\w.]+)/.exec(ua) ||
- /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
- /(msie) ([\w.]+)/.exec(ua) ||
- ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
- [];
-
- return {
- browser: match[ 1 ] || "",
- version: match[ 2 ] || "0"
- };
- };
- jQuery.browser = {};
- jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
-}
-
-/**
- * Small JavaScript module for the documentation.
- */
-var Documentation = {
-
- init : function() {
- this.fixFirefoxAnchorBug();
- this.highlightSearchWords();
- this.initIndexTable();
-
- },
-
- /**
- * i18n support
- */
- TRANSLATIONS : {},
- PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
- LOCALE : 'unknown',
-
- // gettext and ngettext don't access this so that the functions
- // can safely bound to a different name (_ = Documentation.gettext)
- gettext : function(string) {
- var translated = Documentation.TRANSLATIONS[string];
- if (typeof translated == 'undefined')
- return string;
- return (typeof translated == 'string') ? translated : translated[0];
- },
-
- ngettext : function(singular, plural, n) {
- var translated = Documentation.TRANSLATIONS[singular];
- if (typeof translated == 'undefined')
- return (n == 1) ? singular : plural;
- return translated[Documentation.PLURALEXPR(n)];
- },
-
- addTranslations : function(catalog) {
- for (var key in catalog.messages)
- this.TRANSLATIONS[key] = catalog.messages[key];
- this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
- this.LOCALE = catalog.locale;
- },
-
- /**
- * add context elements like header anchor links
- */
- addContextElements : function() {
- $('div[id] > :header:first').each(function() {
- $('<a class="headerlink">\u00B6</a>').
- attr('href', '#' + this.id).
- attr('title', _('Permalink to this headline')).
- appendTo(this);
- });
- $('dt[id]').each(function() {
- $('<a class="headerlink">\u00B6</a>').
- attr('href', '#' + this.id).
- attr('title', _('Permalink to this definition')).
- appendTo(this);
- });
- },
-
- /**
- * workaround a firefox stupidity
- * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
- */
- fixFirefoxAnchorBug : function() {
- if (document.location.hash)
- window.setTimeout(function() {
- document.location.href += '';
- }, 10);
- },
-
- /**
- * highlight the search words provided in the url in the text
- */
- highlightSearchWords : function() {
- var params = $.getQueryParameters();
- var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
- if (terms.length) {
- var body = $('div.body');
- if (!body.length) {
- body = $('body');
- }
- window.setTimeout(function() {
- $.each(terms, function() {
- body.highlightText(this.toLowerCase(), 'highlighted');
- });
- }, 10);
- $('<p class="highlight-link"><a href="javascript:Documentation.' +
- 'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
- .appendTo($('#searchbox'));
- }
- },
-
- /**
- * init the domain index toggle buttons
- */
- initIndexTable : function() {
- var togglers = $('img.toggler').click(function() {
- var src = $(this).attr('src');
- var idnum = $(this).attr('id').substr(7);
- $('tr.cg-' + idnum).toggle();
- if (src.substr(-9) == 'minus.png')
- $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
- else
- $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
- }).css('display', '');
- if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
- togglers.click();
- }
- },
-
- /**
- * helper function to hide the search marks again
- */
- hideSearchWords : function() {
- $('#searchbox .highlight-link').fadeOut(300);
- $('span.highlighted').removeClass('highlighted');
- },
-
- /**
- * make the url absolute
- */
- makeURL : function(relativeURL) {
- return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
- },
-
- /**
- * get the current relative url
- */
- getCurrentURL : function() {
- var path = document.location.pathname;
- var parts = path.split(/\//);
- $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
- if (this == '..')
- parts.pop();
- });
- var url = parts.join('/');
- return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
- },
-
- initOnKeyListeners: function() {
- $(document).keyup(function(event) {
- var activeElementType = document.activeElement.tagName;
- // don't navigate when in search box or textarea
- if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
- switch (event.keyCode) {
- case 37: // left
- var prevHref = $('link[rel="prev"]').prop('href');
- if (prevHref) {
- window.location.href = prevHref;
- return false;
- }
- case 39: // right
- var nextHref = $('link[rel="next"]').prop('href');
- if (nextHref) {
- window.location.href = nextHref;
- return false;
- }
- }
- }
- });
- }
-};
-
-// quick alias for translations
-_ = Documentation.gettext;
-
-$(document).ready(function() {
- Documentation.init();
-}); \ No newline at end of file
diff --git a/sites/www/_build.orig/_static/down-pressed.png b/sites/www/_build.orig/_static/down-pressed.png
deleted file mode 100644
index 7c30d004..00000000
--- a/sites/www/_build.orig/_static/down-pressed.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/down.png b/sites/www/_build.orig/_static/down.png
deleted file mode 100644
index f48098a4..00000000
--- a/sites/www/_build.orig/_static/down.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/file.png b/sites/www/_build.orig/_static/file.png
deleted file mode 100644
index 254c60bf..00000000
--- a/sites/www/_build.orig/_static/file.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/jquery-1.11.1.js b/sites/www/_build.orig/_static/jquery-1.11.1.js
deleted file mode 100644
index d4b67f7e..00000000
--- a/sites/www/_build.orig/_static/jquery-1.11.1.js
+++ /dev/null
@@ -1,10308 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.11.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-05-01T17:42Z
- */
-
-(function( global, factory ) {
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
- // For CommonJS and CommonJS-like environments where a proper window is present,
- // execute the factory and get jQuery
- // For environments that do not inherently posses a window with a document
- // (such as Node.js), expose a jQuery-making factory as module.exports
- // This accentuates the need for the creation of a real window
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//
-
-var deletedIds = [];
-
-var slice = deletedIds.slice;
-
-var concat = deletedIds.concat;
-
-var push = deletedIds.push;
-
-var indexOf = deletedIds.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
- version = "1.11.1",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android<4.1, IE<9
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num != null ?
-
- // Return just the one element from the set
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- // Return all the elements in a clean array
- slice.call( this );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: deletedIds.sort,
- splice: deletedIds.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var src, copyIsArray, copy, name, options, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- isWindow: function( obj ) {
- /* jshint eqeqeq: false */
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
- // parseFloat NaNs numeric-cast false positives (null|true|false|"")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- isPlainObject: function( obj ) {
- var key;
-
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Support: IE<9
- // Handle iteration over inherited properties before own properties.
- if ( support.ownLast ) {
- for ( key in obj ) {
- return hasOwn.call( obj, key );
- }
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call(obj) ] || "object" :
- typeof obj;
- },
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- // args is for internal usage only
- each: function( obj, callback, args ) {
- var value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
-
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android<4.1, IE<9
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- var len;
-
- if ( arr ) {
- if ( indexOf ) {
- return indexOf.call( arr, elem, i );
- }
-
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- while ( j < len ) {
- first[ i++ ] = second[ j++ ];
- }
-
- // Support: IE<9
- // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
- if ( len !== len ) {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var args, proxy, tmp;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: function() {
- return +( new Date() );
- },
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
- var length = obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v1.10.19
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-04-18
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + -(new Date()),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // General-purpose constants
- strundefined = typeof undefined,
- MAX_NEGATIVE = 1 << 31,
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf if we can't use a native one
- indexOf = arr.indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
- // http://www.w3.org/TR/css3-syntax/#characters
- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
- // Loosely modeled on CSS identifier characters
- // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = characterEncoding.replace( "w", "w#" ),
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + characterEncoding + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- };
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
- // QSA vars
- i, groups, old, nid, newContext, newSelector;
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
-
- context = context || document;
- results = results || [];
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
- }
-
- if ( documentIsHTML && !seed ) {
-
- // Shortcuts
- if ( (match = rquickExpr.exec( selector )) ) {
- // Speed-up: Sizzle("#ID")
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document (jQuery #6963)
- if ( elem && elem.parentNode ) {
- // Handle the case where IE, Opera, and Webkit return items
- // by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
- // Context is not a document
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- // Speed-up: Sizzle("TAG")
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // QSA path
- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- nid = old = expando;
- newContext = context;
- newSelector = nodeType === 9 && selector;
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
-
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
-
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
- // release memory in IE
- div = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = attrs.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== strundefined && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare,
- doc = node ? node.ownerDocument || node : preferredDoc,
- parent = doc.defaultView;
-
- // If no document and documentElement is available, return
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Set our document
- document = doc;
- docElem = doc.documentElement;
-
- // Support tests
- documentIsHTML = !isXML( doc );
-
- // Support: IE>8
- // If iframe document is assigned to "document" variable and if iframe has been reloaded,
- // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
- // IE6-8 do not support the defaultView property so parent will be undefined
- if ( parent && parent !== parent.top ) {
- // IE11 does not have attachEvent, so all must suffer
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", function() {
- setDocument();
- }, false );
- } else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", function() {
- setDocument();
- });
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
- support.attributes = assert(function( div ) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Check if getElementsByClassName can be trusted
- support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
- div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
- // Support: Safari<4
- // Catch class over-caching
- div.firstChild.className = "i";
- // Support: Opera<10
- // Catch gEBCN failure to find non-leading classes
- return div.getElementsByClassName("i").length === 2;
- });
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
- var m = context.getElementById( id );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [ m ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowclip^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
-
- assert(function( div ) {
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = doc.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( div.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully does not implement inclusive descendent
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
- // Seek `elem` from a previously-cached index
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- // Use previously-cached element index if available
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
- } else {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
- // Cache the index of each encountered element
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (oldCache = outerCache[ dir ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- outerCache[ dir ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- }
-
- // Add elements passing elementMatchers directly to results
- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is no seed and only one group
- if ( match.length === 1 ) {
-
- // Take a shortcut and set the context if the root selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome<14
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
- div.innerHTML = "<input/>";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
- return div.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- /* jshint -W018 */
- return !!qualifier.call( elem, i, elem ) !== not;
- });
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- });
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
- });
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- }));
-};
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i,
- ret = [],
- self = this,
- len = self.length;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector || [], false) );
- },
- not: function( selector ) {
- return this.pushStack( winnow(this, selector || [], true) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- init = jQuery.fn.init = function( selector, context ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
- // scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return typeof rootjQuery.ready !== "undefined" ?
- rootjQuery.ready( selector ) :
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.extend({
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-jQuery.fn.extend({
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
-
- return this.filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
- // Always skip document fragments
- if ( cur.nodeType < 11 && (pos ?
- pos.index(cur) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector(cur, selectors)) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.unique(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
-
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- if ( this.length > 1 ) {
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- ret = jQuery.unique( ret );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
- }
-
- return this.pushStack( ret );
- };
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = !options.once && [],
- // Fire callbacks
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false; // To prevent further calls using add
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- // First, we save the current length
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
- // Inspect recursively
- add( arg );
- }
- });
- })( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
- // Handle firing indexes
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- firingLength = 0;
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( list && ( !fired || stack ) ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-jQuery.extend({
-
- Deferred: function( func ) {
- var tuples = [
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- fns = null;
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[1] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(function() {
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( values === progressValues ) {
- deferred.notifyWith( contexts, values );
-
- } else if ( !(--remaining) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
-};
-
-jQuery.extend({
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- jQuery( document ).off( "ready" );
- }
- }
-});
-
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
-
- } else {
- document.detachEvent( "onreadystatechange", completed );
- window.detachEvent( "onload", completed );
- }
-}
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
- // readyState === "complete" is good enough for us to call the dom ready in oldIE
- if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
- detach();
- jQuery.ready();
- }
-}
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called after the browser event has already occurred.
- // we once tried to use readyState "interactive" here, but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- setTimeout( jQuery.ready );
-
- // Standards-based browsers support DOMContentLoaded
- } else if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed, false );
-
- // If IE event model is used
- } else {
- // Ensure firing before onload, maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", completed );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", completed );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var top = false;
-
- try {
- top = window.frameElement == null && document.documentElement;
- } catch(e) {}
-
- if ( top && top.doScroll ) {
- (function doScrollCheck() {
- if ( !jQuery.isReady ) {
-
- try {
- // Use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll("left");
- } catch(e) {
- return setTimeout( doScrollCheck, 50 );
- }
-
- // detach all dom ready events
- detach();
-
- // and execute any waiting functions
- jQuery.ready();
- }
- })();
- }
- }
- }
- return readyList.promise( obj );
-};
-
-
-var strundefined = typeof undefined;
-
-
-
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
- break;
-}
-support.ownLast = i !== "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery(function() {
- // Minified: var a,b,c,d
- var val, div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- if ( typeof div.style.zoom !== strundefined ) {
- // Support: IE<8
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
-
- support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
- if ( val ) {
- // Prevent IE 6 from affecting layout for positioned elements #11048
- // Prevent IE from shrinking the body in IE 7 mode #12869
- // Support: IE<8
- body.style.zoom = 1;
- }
- }
-
- body.removeChild( container );
-});
-
-
-
-
-(function() {
- var div = document.createElement( "div" );
-
- // Execute the test only if not already executed in another module.
- if (support.deleteExpando == null) {
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-})();
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( elem ) {
- var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
- nodeType = +elem.nodeType || 1;
-
- // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
- return nodeType !== 1 && nodeType !== 9 ?
- false :
-
- // Nodes accept data unless otherwise specified; rejection can be conditional
- !noData || noData !== true && elem.getAttribute("classid") === noData;
-};
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var ret, thisCache,
- internalKey = jQuery.expando,
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- // Avoid exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( typeof name === "string" ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i,
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split(" ");
- }
- }
- } else {
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = name.concat( jQuery.map( name, jQuery.camelCase ) );
- }
-
- i = name.length;
- while ( i-- ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- // Destroy the cache
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
- /* jshint eqeqeq: false */
- } else if ( support.deleteExpando || cache != cache.window ) {
- /* jshint eqeqeq: true */
- delete cache[ id ];
-
- // When all else fails, null
- } else {
- cache[ id ] = null;
- }
-}
-
-jQuery.extend({
- cache: {},
-
- // The following elements (space-suffixed to avoid Object.prototype collisions)
- // throw uncatchable exceptions if you attempt to set expando properties
- noData: {
- "applet ": true,
- "embed ": true,
- // ...but Flash objects (which have this classid) *can* handle expandos
- "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data ) {
- return internalData( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- return internalRemoveData( elem, name );
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return internalData( elem, name, data, true );
- },
-
- _removeData: function( elem, name ) {
- return internalRemoveData( elem, name, true );
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var i, name, data,
- elem = this[0],
- attrs = elem && elem.attributes;
-
- // Special expections of .data basically thwart jQuery.access,
- // so implement the relevant behavior ourselves
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE11+
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice(5) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- return arguments.length > 1 ?
-
- // Sets one value
- this.each(function() {
- jQuery.data( this, key, value );
- }) :
-
- // Gets one value
- // Try to fetch any internally stored data first
- elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray(data) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object, or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- jQuery._removeData( elem, type + "queue" );
- jQuery._removeData( elem, key );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
- };
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- length = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < length; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
-};
-var rcheckableType = (/^(?:checkbox|radio)$/i);
-
-
-
-(function() {
- // Minified: var a,b,c
- var input = document.createElement( "input" ),
- div = document.createElement( "div" ),
- fragment = document.createDocumentFragment();
-
- // Setup
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
- // IE strips leading whitespace when .innerHTML is used
- support.leadingWhitespace = div.firstChild.nodeType === 3;
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- support.html5Clone =
- document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- input.type = "checkbox";
- input.checked = true;
- fragment.appendChild( input );
- support.appendChecked = input.checked;
-
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- // Support: IE6-IE11+
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- fragment.appendChild( div );
- div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
-
- // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
- // old WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE<9
- // Opera does not clone events (and typeof div.attachEvent === undefined).
- // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
- support.noCloneEvent = true;
- if ( div.attachEvent ) {
- div.attachEvent( "onclick", function() {
- support.noCloneEvent = false;
- });
-
- div.cloneNode( true ).click();
- }
-
- // Execute the test only if not already executed in another module.
- if (support.deleteExpando == null) {
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
-})();
-
-
-(function() {
- var i, eventName,
- div = document.createElement( "div" );
-
- // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
- for ( i in { submit: true, change: true, focusin: true }) {
- eventName = "on" + i;
-
- if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
- // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
- div.setAttribute( eventName, "t" );
- support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
- }
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-})();
-
-
-var rformElems = /^(?:input|select|textarea)$/i,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
- var tmp, events, t, handleObjIn,
- special, eventHandle, handleObj,
- handlers, type, namespaces, origType,
- elemData = jQuery._data( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
- var j, handleObj, tmp,
- origCount, t, events,
- special, handlers, type,
- namespaces, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery._removeData( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- var handle, ontype, cur,
- bubbleType, special, tmp, i,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
- jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- try {
- elem[ type ]();
- } catch ( e ) {
- // IE<9 dies on focus/blur to hidden element (#1486,#12518)
- // only reproducible on winXP IE8 native, not IE9 in IE8 mode
- }
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, ret, handleObj, matched, j,
- handlerQueue = [],
- args = slice.call( arguments ),
- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var sel, handleObj, matches, i,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- /* jshint eqeqeq: false */
- for ( ; cur != this; cur = cur.parentNode || this ) {
- /* jshint eqeqeq: true */
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
-
- return handlerQueue;
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: IE<9
- // Fix target property (#1925)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Support: Chrome 23+, Safari?
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Support: IE<9
- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
- event.metaKey = !!event.metaKey;
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var body, eventDoc, doc,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- try {
- this.focus();
- return false;
- } catch ( e ) {
- // Support: IE<9
- // If we error on focus to hidden element (#1486, #12518),
- // let .trigger() run the handlers
- }
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
-
- if ( elem.detachEvent ) {
-
- // #8545, #7054, preventing memory leaks for custom events in IE6-8
- // detachEvent needed property on element, by name of that event, to properly expose it to GC
- if ( typeof elem[ name ] === strundefined ) {
- elem[ name ] = null;
- }
-
- elem.detachEvent( name, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
- // Support: IE < 9, Android < 4.0
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
- if ( !e ) {
- return;
- }
-
- // If preventDefault exists, run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // Support: IE
- // Otherwise set the returnValue property of the original event to false
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
- if ( !e ) {
- return;
- }
- // If stopPropagation exists, run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
-
- // Support: IE
- // Set the cancelBubble property of the original event to true
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && e.stopImmediatePropagation ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !jQuery._data( form, "submitBubbles" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- jQuery._data( form, "submitBubbles", true );
- }
- });
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- }
- // Allow triggered, simulated change events (#11500)
- jQuery.event.simulate( "change", this, event, true );
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- jQuery._data( elem, "changeBubbles", true );
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return !rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- jQuery._removeData( doc, fix );
- } else {
- jQuery._data( doc, fix, attaches );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var type, origFn;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-});
-
-
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
- // We have to close these tags to support XHTML (#13200)
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- area: [ 1, "<map>", "</map>" ],
- param: [ 1, "<object>", "</object>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
- // unless wrapped in a div with non-breaking characters in front of it.
- _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
- },
- safeFragment = createSafeFragment( document ),
- fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
- undefined;
-
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( rcheckableType.test( elem.type ) ) {
- elem.defaultChecked = elem.checked;
- }
-}
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
- return jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
- elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
- elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
- if ( match ) {
- elem.type = match[1];
- } else {
- elem.removeAttribute("type");
- }
- return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; (elem = elems[i]) != null; i++ ) {
- jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
- }
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function fixCloneNodeIssues( src, dest ) {
- var nodeName, e, data;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 copies events bound via attachEvent when using cloneNode.
- if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
- data = jQuery._data( dest );
-
- for ( e in data.events ) {
- jQuery.removeEvent( dest, e, data.handle );
- }
-
- // Event data gets referenced instead of copied if the expando gets copied too
- dest.removeAttribute( jQuery.expando );
- }
-
- // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
- if ( nodeName === "script" && dest.text !== src.text ) {
- disableScript( dest ).text = src.text;
- restoreScript( dest );
-
- // IE6-10 improperly clones children of object elements using classid.
- // IE10 throws NoModificationAllowedError if parent is null, #12132.
- } else if ( nodeName === "object" ) {
- if ( dest.parentNode ) {
- dest.outerHTML = src.outerHTML;
- }
-
- // This path appears unavoidable for IE9. When cloning an object
- // element in IE9, the outerHTML strategy above is not sufficient.
- // If the src has innerHTML and the destination does not,
- // copy the src.innerHTML into the dest.innerHTML. #10324
- if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
- dest.innerHTML = src.innerHTML;
- }
-
- } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
-
- dest.defaultChecked = dest.checked = src.checked;
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.defaultSelected = dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var destElements, node, clone, i, srcElements,
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
- clone = elem.cloneNode( true );
-
- // IE<=8 does not properly clone detached, unknown element nodes
- } else {
- fragmentDiv.innerHTML = elem.outerHTML;
- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
- }
-
- if ( (!support.noCloneEvent || !support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- // Fix all IE cloning issues
- for ( i = 0; (node = srcElements[i]) != null; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- fixCloneNodeIssues( node, destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0; (node = srcElements[i]) != null; i++ ) {
- cloneCopyEvent( node, destElements[i] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- destElements = srcElements = node = null;
-
- // Return the cloned set
- return clone;
- },
-
- buildFragment: function( elems, context, scripts, selection ) {
- var j, elem, contains,
- tmp, tag, tbody, wrap,
- l = elems.length,
-
- // Ensure a safe fragment
- safe = createSafeFragment( context ),
-
- nodes = [],
- i = 0;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || safe.appendChild( context.createElement("div") );
-
- // Deserialize a standard representation
- tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
-
- tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
- // Descend through wrappers to the right content
- j = wrap[0];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Manually add leading whitespace removed by IE
- if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !rtbody.test( elem ) ?
- tmp :
- 0;
-
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
- elem.removeChild( tbody );
- }
- }
- }
-
- jQuery.merge( nodes, tmp.childNodes );
-
- // Fix #12392 for WebKit and IE > 9
- tmp.textContent = "";
-
- // Fix #12392 for oldIE
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- // Remember the top-level container for proper cleanup
- tmp = safe.lastChild;
- }
- }
- }
-
- // Fix #11356: Clear elements from fragment
- if ( tmp ) {
- safe.removeChild( tmp );
- }
-
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
- }
-
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
- // #4087 - If origin and destination elements are the same, and this is
- // that element, do not do anything
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- tmp = null;
-
- return safe;
- },
-
- cleanData: function( elems, /* internal */ acceptData ) {
- var elem, type, id, data,
- i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
- deleteExpando = support.deleteExpando,
- special = jQuery.event.special;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( acceptData || jQuery.acceptData( elem ) ) {
-
- id = elem[ internalKey ];
- data = id && cache[ id ];
-
- if ( data ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Remove cache only if it was not already removed by jQuery.event.remove
- if ( cache[ id ] ) {
-
- delete cache[ id ];
-
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( deleteExpando ) {
- delete elem[ internalKey ];
-
- } else if ( typeof elem.removeAttribute !== strundefined ) {
- elem.removeAttribute( internalKey );
-
- } else {
- elem[ internalKey ] = null;
- }
-
- deletedIds.push( id );
- }
- }
- }
- }
- }
-});
-
-jQuery.fn.extend({
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- });
- },
-
- before: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
-
- after: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
-
- remove: function( selector, keepData /* Internal Use Only */ ) {
- var elem,
- elems = selector ? jQuery.filter( selector, this ) : this,
- i = 0;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
-
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
-
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
-
- // If this is a select, ensure that it displays empty (#12336)
- // Support: IE<9
- if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
- elem.options.length = 0;
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map(function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- undefined;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( support.htmlSerialize || !rnoshimcache.test( value ) ) &&
- ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for (; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var arg = arguments[ 0 ];
-
- // Make the changes, replacing each context element with the new content
- this.domManip( arguments, function( elem ) {
- arg = this.parentNode;
-
- jQuery.cleanData( getAll( this ) );
-
- if ( arg ) {
- arg.replaceChild( elem, this );
- }
- });
-
- // Force removal if there was no new content (e.g., from empty arguments)
- return arg && (arg.length || arg.nodeType) ? this : this.remove();
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, callback ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var first, node, hasScripts,
- scripts, doc, fragment,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[0],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[0] = value.call( this, index, self.html() );
- }
- self.domManip( args, callback );
- });
- }
-
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( this[i], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
- }
- }
- }
- }
-
- // Fix #11809: Avoid leaking memory
- fragment = first = null;
- }
- }
-
- return this;
- }
-});
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- i = 0,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone(true);
- jQuery( insert[i] )[ original ]( elems );
-
- // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-});
-
-
-var iframe,
- elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
- var style,
- elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
- // getDefaultComputedStyle might be reliably used only on attached element
- display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
- // Use of this method is a temporary fix (more like optmization) until something better comes along,
- // since it was removed from specification and supported only in FF
- style.display : jQuery.css( elem[ 0 ], "display" );
-
- // We don't have any data stored on the element,
- // so use "detach" method as fast way to get rid of the element
- elem.detach();
-
- return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
-
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- // If the simple way fails, read from inside an iframe
- if ( display === "none" || !display ) {
-
- // Use the already-created iframe if possible
- iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
-
- // Support: IE
- doc.write();
- doc.close();
-
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return display;
-}
-
-
-(function() {
- var shrinkWrapBlocksVal;
-
- support.shrinkWrapBlocks = function() {
- if ( shrinkWrapBlocksVal != null ) {
- return shrinkWrapBlocksVal;
- }
-
- // Will be changed later if needed.
- shrinkWrapBlocksVal = false;
-
- // Minified: var b,c,d
- var div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- // Support: IE6
- // Check if elements with layout shrink-wrap their children
- if ( typeof div.style.zoom !== strundefined ) {
- // Reset CSS: box-sizing; display; margin; border
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;" +
- "padding:1px;width:1px;zoom:1";
- div.appendChild( document.createElement( "div" ) ).style.width = "5px";
- shrinkWrapBlocksVal = div.offsetWidth !== 3;
- }
-
- body.removeChild( container );
-
- return shrinkWrapBlocksVal;
- };
-
-})();
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-
-
-var getStyles, curCSS,
- rposition = /^(top|right|bottom|left)$/;
-
-if ( window.getComputedStyle ) {
- getStyles = function( elem ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
- };
-
- curCSS = function( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // getPropertyValue is only needed for .css('filter') in IE9, see #12537
- ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
-
- if ( computed ) {
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
- // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- // Support: IE
- // IE returns zIndex value as an integer.
- return ret === undefined ?
- ret :
- ret + "";
- };
-} else if ( document.documentElement.currentStyle ) {
- getStyles = function( elem ) {
- return elem.currentStyle;
- };
-
- curCSS = function( elem, name, computed ) {
- var left, rs, rsLeft, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
- ret = computed ? computed[ name ] : undefined;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret == null && style && style[ name ] ) {
- ret = style[ name ];
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- // but not position css attributes, as those are proportional to the parent element instead
- // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
- // Remember the original values
- left = style.left;
- rs = elem.runtimeStyle;
- rsLeft = rs && rs.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- rs.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- rs.left = rsLeft;
- }
- }
-
- // Support: IE
- // IE returns zIndex value as an integer.
- return ret === undefined ?
- ret :
- ret + "" || "auto";
- };
-}
-
-
-
-
-function addGetHookIf( conditionFn, hookFn ) {
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- var condition = conditionFn();
-
- if ( condition == null ) {
- // The test was not ready at this point; screw the hook this time
- // but check again when needed next time.
- return;
- }
-
- if ( condition ) {
- // Hook not needed (or it's not possible to use it due to missing dependency),
- // remove it.
- // Since there are no other hooks for marginRight, remove the whole object.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
-
- return (this.get = hookFn).apply( this, arguments );
- }
- };
-}
-
-
-(function() {
- // Minified: var b,c,d,e,f,g, h,i
- var div, style, a, pixelPositionVal, boxSizingReliableVal,
- reliableHiddenOffsetsVal, reliableMarginRightVal;
-
- // Setup
- div = document.createElement( "div" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName( "a" )[ 0 ];
- style = a && a.style;
-
- // Finish early in limited (non-browser) environments
- if ( !style ) {
- return;
- }
-
- style.cssText = "float:left;opacity:.5";
-
- // Support: IE<9
- // Make sure that element opacity exists (as opposed to filter)
- support.opacity = style.opacity === "0.5";
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- support.cssFloat = !!style.cssFloat;
-
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
- style.WebkitBoxSizing === "";
-
- jQuery.extend(support, {
- reliableHiddenOffsets: function() {
- if ( reliableHiddenOffsetsVal == null ) {
- computeStyleTests();
- }
- return reliableHiddenOffsetsVal;
- },
-
- boxSizingReliable: function() {
- if ( boxSizingReliableVal == null ) {
- computeStyleTests();
- }
- return boxSizingReliableVal;
- },
-
- pixelPosition: function() {
- if ( pixelPositionVal == null ) {
- computeStyleTests();
- }
- return pixelPositionVal;
- },
-
- // Support: Android 2.3
- reliableMarginRight: function() {
- if ( reliableMarginRightVal == null ) {
- computeStyleTests();
- }
- return reliableMarginRightVal;
- }
- });
-
- function computeStyleTests() {
- // Minified: var b,c,d,j
- var div, body, container, contents;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
- "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
- "border:1px;padding:1px;width:4px;position:absolute";
-
- // Support: IE<9
- // Assume reasonable values in the absence of getComputedStyle
- pixelPositionVal = boxSizingReliableVal = false;
- reliableMarginRightVal = true;
-
- // Check for getComputedStyle so that this code is not run in IE<9.
- if ( window.getComputedStyle ) {
- pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
- boxSizingReliableVal =
- ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
- // Support: Android 2.3
- // Div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container (#3333)
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- contents = div.appendChild( document.createElement( "div" ) );
-
- // Reset CSS: box-sizing; display; margin; border; padding
- contents.style.cssText = div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
- contents.style.marginRight = contents.style.width = "0";
- div.style.width = "1px";
-
- reliableMarginRightVal =
- !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
- }
-
- // Support: IE8
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
- contents = div.getElementsByTagName( "td" );
- contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- if ( reliableHiddenOffsetsVal ) {
- contents[ 0 ].style.display = "";
- contents[ 1 ].style.display = "none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- }
-
- body.removeChild( container );
- }
-
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-var
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity\s*=\s*([^)]*)/,
-
- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
-
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
- // shortcut for names that are not vendor prefixed
- if ( name in style ) {
- return name;
- }
-
- // check for vendor prefixed names
- var capName = name.charAt(0).toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
-
- return origName;
-}
-
-function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- values[ index ] = jQuery._data( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && display === "none" ) {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- } else {
- hidden = isHidden( elem );
-
- if ( display && display !== "none" || !hidden ) {
- jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
-
- return elements;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
- // If we already have the right measurement, avoid augmentation
- 4 :
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
- // both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // at this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
- // at this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // at this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // we need the check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set. See: #7116
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
- // but it would mean to define eight (for every problematic property) identical functions
- if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
- // Support: IE
- // Swallow errors from 'invalid' CSS values (#5509)
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var num, val, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- //convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Return, converting to number if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- }
-});
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- // certain elements can have dimension info if we invisibly show them
- // however, it must have a current display style that would benefit from this
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
-});
-
-if ( !support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- // if value === "", then remove inline opacity #12685
- if ( ( value >= 1 || value === "" ) &&
- jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
- style.removeAttribute ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there is no filter style applied in a css rule or unset inline opacity, we are done
- if ( value === "" || currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
- function( elem, computed ) {
- if ( computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each(function() {
- if ( isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails
- // so, simple values such as "10px" are parsed to Float.
- // complex values such as "rotate(1rad)" are returned as is.
- result = jQuery.css( tween.elem, tween.prop, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // use step hook for back compat - use cssHook if its there - use .style if its
- // available and use plain properties where available
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- }
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value ),
- target = tween.cur(),
- parts = rfxnum.exec( value ),
- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
- rfxnum.exec( jQuery.css( tween.elem, prop ) ),
- scale = 1,
- maxIterations = 20;
-
- if ( start && start[ 3 ] !== unit ) {
- // Trust units reported by jQuery.css
- unit = unit || start[ 3 ];
-
- // Make sure we update the tween properties later on
- parts = parts || [];
-
- // Iteratively approximate from a nonzero starting point
- start = +target || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*
- // Use a string for doubling factor so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- // Update tween properties
- if ( parts ) {
- start = tween.start = +start || +target || 0;
- tween.unit = unit;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[ 1 ] ?
- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
- +parts[ 2 ];
- }
-
- return tween;
- } ]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- attrs = { height: type },
- i = 0;
-
- // if we include width, step value is 1 to do all cssExpand values,
- // if we don't include width, step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
- // we're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- /* jshint validthis: true */
- var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden( elem ),
- dataShow = jQuery._data( elem, "fxshow" );
-
- // handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // doing this makes sure that the complete handler will be called
- // before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- display = jQuery.css( elem, "display" );
-
- // Test default display if display is currently "none"
- checkDisplay = display === "none" ?
- jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
- if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
- style.display = "inline-block";
- } else {
- style.zoom = 1;
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- if ( !support.shrinkWrapBlocks() ) {
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
- }
-
- // show/hide pass
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
- // Any non-fx value stops us from restoring the original display value
- } else {
- display = undefined;
- }
- }
-
- if ( !jQuery.isEmptyObject( orig ) ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = jQuery._data( elem, "fxshow", {} );
- }
-
- // store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
- jQuery._removeData( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( prop in orig ) {
- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
-
- // If this is a noop like .hide().hide(), restore an overwritten display value
- } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
- style.display = display;
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'index' from above because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // if we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // resolve when we played the last frame
- // otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || jQuery._data( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = jQuery._data( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // enable finishing flag on private data
- data.finish = true;
-
- // empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // turn off finishing flag
- delete data.finish;
- });
- }
-});
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
-};
-
-
-(function() {
- // Minified: var a,b,c,d,e
- var input, div, select, a, opt;
-
- // Setup
- div = document.createElement( "div" );
- div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName("a")[ 0 ];
-
- // First batch of tests.
- select = document.createElement("select");
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName("input")[ 0 ];
-
- a.style.cssText = "top:1px";
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- support.getSetAttribute = div.className !== "t";
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- support.style = /top/.test( a.getAttribute("style") );
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- support.hrefNormalized = a.getAttribute("href") === "/a";
-
- // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
- support.checkOn = !!input.value;
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- support.optSelected = opt.selected;
-
- // Tests for enctype support on a form (#6743)
- support.enctype = !!document.createElement("form").enctype;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Support: IE8 only
- // Check if we can trust getAttribute("value")
- input = document.createElement( "input" );
- input.setAttribute( "value", "" );
- support.input = input.getAttribute( "value" ) === "";
-
- // Check if an input maintains its value after becoming a radio
- input.value = "t";
- input.setAttribute( "type", "radio" );
- support.radioValue = input.value === "t";
-})();
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
- // Support: IE10-11+
- // option.text throws exceptions (#14686, #14858)
- jQuery.trim( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // oldIE doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
-
- if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
- // Support: IE6
- // When new option element is added to select box we need to
- // force reflow of newly added node in order to workaround delay
- // of initialization properties
- try {
- option.selected = optionSet = true;
-
- } catch ( _ ) {
-
- // Will be executed only in IE6
- option.scrollHeight;
- }
-
- } else {
- option.selected = false;
- }
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
-
- return options;
- }
- }
- }
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- // Support: Webkit
- // "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
-});
-
-
-
-
-var nodeHook, boolHook,
- attrHandle = jQuery.expr.attrHandle,
- ruseDefault = /^(?:checked|selected)$/i,
- getSetAttribute = support.getSetAttribute,
- getSetInput = support.input;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- }
-});
-
-jQuery.extend({
- attr: function( elem, name, value ) {
- var hooks, ret,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
-
- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- // Boolean attributes get special treatment (#10870)
- if ( jQuery.expr.match.bool.test( name ) ) {
- // Set corresponding property to false
- if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- elem[ propName ] = false;
- // Support: IE<9
- // Also clear defaultChecked/defaultSelected (if appropriate)
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] =
- elem[ propName ] = false;
- }
-
- // See #9699 for explanation of this approach (setting first, then removal)
- } else {
- jQuery.attr( elem, name, "" );
- }
-
- elem.removeAttribute( getSetAttribute ? name : propName );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to default in case type is set after value during creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- }
-});
-
-// Hook for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- // IE<8 needs the *property* name
- elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
- // Use defaultChecked and defaultSelected for oldIE
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
- }
-
- return name;
- }
-};
-
-// Retrieve booleans specially
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
- function( elem, name, isXML ) {
- var ret, handle;
- if ( !isXML ) {
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ name ];
- attrHandle[ name ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- name.toLowerCase() :
- null;
- attrHandle[ name ] = handle;
- }
- return ret;
- } :
- function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem[ jQuery.camelCase( "default-" + name ) ] ?
- name.toLowerCase() :
- null;
- }
- };
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
- jQuery.attrHooks.value = {
- set: function( elem, value, name ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- // Does not return so that setAttribute is also used
- elem.defaultValue = value;
- } else {
- // Use nodeHook if defined (#1954); otherwise setAttribute is fine
- return nodeHook && nodeHook.set( elem, value, name );
- }
- }
- };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = {
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- elem.setAttributeNode(
- (ret = elem.ownerDocument.createAttribute( name ))
- );
- }
-
- ret.value = value += "";
-
- // Break association with cloned elements by also using setAttribute (#9646)
- if ( name === "value" || value === elem.getAttribute( name ) ) {
- return value;
- }
- }
- };
-
- // Some attributes are constructed with empty-string values when not defined
- attrHandle.id = attrHandle.name = attrHandle.coords =
- function( elem, name, isXML ) {
- var ret;
- if ( !isXML ) {
- return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
- ret.value :
- null;
- }
- };
-
- // Fixing value retrieval on a button requires this module
- jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret = elem.getAttributeNode( name );
- if ( ret && ret.specified ) {
- return ret.value;
- }
- },
- set: nodeHook.set
- };
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- set: function( elem, value, name ) {
- nodeHook.set( elem, value === "" ? false : value, name );
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- };
- });
-}
-
-if ( !support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Note: IE uppercases css property names, but if we were to .toLowerCase()
- // .cssText, that would destroy case senstitivity in URL's, like in "background"
- return elem.style.cssText || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = value + "" );
- }
- };
-}
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button|object)$/i,
- rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend({
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- }
-});
-
-jQuery.extend({
- propFix: {
- "for": "htmlFor",
- "class": "className"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
- ret :
- ( elem[ name ] = value );
-
- } else {
- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
- ret :
- elem[ name ];
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- return tabindex ?
- parseInt( tabindex, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- -1;
- }
- }
- }
-});
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !support.hrefNormalized ) {
- // href/src property should get the full normalized URL (#10299/#12915)
- jQuery.each([ "href", "src" ], function( i, name ) {
- jQuery.propHooks[ name ] = {
- get: function( elem ) {
- return elem.getAttribute( name, 4 );
- }
- };
- });
-}
-
-// Support: Safari, IE9+
-// mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- };
-}
-
-jQuery.each([
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-// IE6/7 call enctype encoding
-if ( !support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-jQuery.fn.extend({
- addClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
-
- if ( proceed ) {
- // The disjunction here is for better compressibility (see removeClass)
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim( cur );
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = arguments.length === 0 || typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = value ? jQuery.trim( cur ) : "";
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
-
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- classNames = value.match( rnotwhite ) || [];
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( type === strundefined || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // If the element has a class name or if we're passed "false",
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
-
- return false;
- }
-});
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-});
-
-jQuery.fn.extend({
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- }
-});
-
-
-var nonce = jQuery.now();
-
-var rquery = (/\?/);
-
-
-
-var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
-
-jQuery.parseJSON = function( data ) {
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- // Support: Android 2.3
- // Workaround failure to string-cast null input
- return window.JSON.parse( data + "" );
- }
-
- var requireNonComma,
- depth = null,
- str = jQuery.trim( data + "" );
-
- // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
- // after removing valid tokens
- return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
-
- // Force termination if we see a misplaced comma
- if ( requireNonComma && comma ) {
- depth = 0;
- }
-
- // Perform no more replacements after returning to outermost depth
- if ( depth === 0 ) {
- return token;
- }
-
- // Commas must not follow "[", "{", or ","
- requireNonComma = open || comma;
-
- // Determine new depth
- // array/object open ("[" or "{"): depth += true - false (increment)
- // array/object close ("]" or "}"): depth += false - true (decrement)
- // other cases ("," or primitive): depth += true - true (numeric cast)
- depth += !close - !open;
-
- // Remove this token
- return "";
- }) ) ?
- ( Function( "return " + str ) )() :
- jQuery.error( "Invalid JSON: " + data );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data, "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- // Document location
- ajaxLocParts,
- ajaxLocation,
-
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- while ( (dataType = dataTypes[i++]) ) {
- // Prepend if requested
- if ( dataType.charAt( 0 ) === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- // Otherwise append
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var deep, key,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
- var firstDataType, ct, finalDataType, type,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s[ "throws" ] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Cross-domain detection vars
- parts,
- // Loop variable
- i,
- // URL without anti-cache param
- cacheURL,
- // Response headers as string
- responseHeadersString,
- // timeout handle
- timeoutTimer,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- transport,
- // Response headers
- responseHeaders,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
- // Lazy-add the new callback in a way that preserves old ones
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
- // Otherwise add one to the end
- cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-});
-
-
-jQuery._evalUrl = function( url ) {
- return jQuery.ajax({
- url: url,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
-};
-
-
-jQuery.fn.extend({
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- }
-});
-
-
-jQuery.expr.filters.hidden = function( elem ) {
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
- (!support.reliableHiddenOffsets() &&
- ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-};
-
-jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
-};
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function() {
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function() {
- var type = this.type;
- // Use .is(":disabled") so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- })
- .map(function( i, elem ) {
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
- // Support: IE6+
- function() {
-
- // XHR cannot access local files, always use ActiveX for that case
- return !this.isLocal &&
-
- // Support: IE7-8
- // oldIE XHR does not support non-RFC2616 methods (#13240)
- // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
- // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
- // Although this check for six methods instead of eight
- // since IE also does not support "trace" and "connect"
- /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
-
- createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-var xhrId = 0,
- xhrCallbacks = {},
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE<10
-// Open requests must be manually aborted on unload (#5280)
-if ( window.ActiveXObject ) {
- jQuery( window ).on( "unload", function() {
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( undefined, true );
- }
- });
-}
-
-// Determine support properties
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
- jQuery.ajaxTransport(function( options ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !options.crossDomain || support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr(),
- id = ++xhrId;
-
- // Open the socket
- xhr.open( options.type, options.url, options.async, options.username, options.password );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- // Support: IE<9
- // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
- // request header to a null-value.
- //
- // To keep consistent with other XHR implementations, cast the value
- // to string and ignore `undefined`.
- if ( headers[ i ] !== undefined ) {
- xhr.setRequestHeader( i, headers[ i ] + "" );
- }
- }
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( options.hasContent && options.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
- var status, statusText, responses;
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
- // Clean up
- delete xhrCallbacks[ id ];
- callback = undefined;
- xhr.onreadystatechange = jQuery.noop;
-
- // Abort manually if needed
- if ( isAbort ) {
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- responses = {};
- status = xhr.status;
-
- // Support: IE<10
- // Accessing binary-data responseText throws an exception
- // (#11426)
- if ( typeof xhr.responseText === "string" ) {
- responses.text = xhr.responseText;
- }
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && options.isLocal && !options.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, xhr.getAllResponseHeaders() );
- }
- };
-
- if ( !options.async ) {
- // if we're in sync mode we fire the callback
- callback();
- } else if ( xhr.readyState === 4 ) {
- // (IE6 & IE7) if it's in cache and has been
- // retrieved directly we need to fire the callback
- setTimeout( callback );
- } else {
- // Add to the list of active xhr callbacks
- xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback( undefined, true );
- }
- }
- };
- }
- });
-}
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || jQuery("head")[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement("script");
-
- script.async = true;
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( script.parentNode ) {
- script.parentNode.removeChild( script );
- }
-
- // Dereference the script
- script = null;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
-
- // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( undefined, true );
- }
- }
- };
- }
-});
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function() {
- // Restore preexisting value
- window[ callbackName ] = overwritten;
-
- // Save back as free
- if ( s[ callbackName ] ) {
- // make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// data: string of html
-// context (optional): If specified, the fragment will be created in this context, defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
-
- var selector, response, type,
- self = this,
- off = url.indexOf(" ");
-
- if ( off >= 0 ) {
- selector = jQuery.trim( url.slice( off, url.length ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax({
- url: url,
-
- // if "type" variable is undefined, then "GET" method will be used
- type: type,
- dataType: "html",
- data: params
- }).done(function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- }).complete( callback && function( jqXHR, status ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- });
- }
-
- return this;
-};
-
-
-
-
-jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
-};
-
-
-
-
-
-var docElem = window.document.documentElement;
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend({
- offset: function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var docElem, win,
- box = { top: 0, left: 0 },
- elem = this[ 0 ],
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return;
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
- // If we don't have gBCR, just use 0,0 rather than error
- // BlackBerry 5, iOS 3 (original iPhone)
- if ( typeof elem.getBoundingClientRect !== strundefined ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- return {
- top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
- left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
- };
- },
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- parentOffset = { top: 0, left: 0 },
- elem = this[ 0 ];
-
- // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
- // we assume that getBoundingClientRect is available when computed position is fixed
- offset = elem.getBoundingClientRect();
- } else {
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
- }
-
- // Subtract parent offsets and element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || docElem;
-
- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent || docElem;
- });
- }
-});
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = /Y/.test( prop );
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- win.document.documentElement[ method ] :
- elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-});
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
- // margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
- // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
-});
-
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
- return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- });
-}
-
-
-
-
-var
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === strundefined ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-
-}));
diff --git a/sites/www/_build.orig/_static/jquery.js b/sites/www/_build.orig/_static/jquery.js
deleted file mode 100644
index ab28a247..00000000
--- a/sites/www/_build.orig/_static/jquery.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
-if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
-},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/sites/www/_build.orig/_static/minus.png b/sites/www/_build.orig/_static/minus.png
deleted file mode 100644
index 0f22b16b..00000000
--- a/sites/www/_build.orig/_static/minus.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/plus.png b/sites/www/_build.orig/_static/plus.png
deleted file mode 100644
index 0cfe084c..00000000
--- a/sites/www/_build.orig/_static/plus.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/pygments.css b/sites/www/_build.orig/_static/pygments.css
deleted file mode 100644
index 9606cfae..00000000
--- a/sites/www/_build.orig/_static/pygments.css
+++ /dev/null
@@ -1,73 +0,0 @@
-.highlight .hll { background-color: #ffffcc }
-.highlight { background: #f8f8f8; }
-.highlight .c { color: #8f5902; font-style: italic } /* Comment */
-.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
-.highlight .g { color: #000000 } /* Generic */
-.highlight .k { color: #004461; font-weight: bold } /* Keyword */
-.highlight .l { color: #000000 } /* Literal */
-.highlight .n { color: #000000 } /* Name */
-.highlight .o { color: #582800 } /* Operator */
-.highlight .x { color: #000000 } /* Other */
-.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
-.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #8f5902 } /* Comment.Preproc */
-.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #a40000 } /* Generic.Deleted */
-.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #ef2929 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #888888 } /* Generic.Output */
-.highlight .gp { color: #745334 } /* Generic.Prompt */
-.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
-.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
-.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
-.highlight .ld { color: #000000 } /* Literal.Date */
-.highlight .m { color: #990000 } /* Literal.Number */
-.highlight .s { color: #4e9a06 } /* Literal.String */
-.highlight .na { color: #c4a000 } /* Name.Attribute */
-.highlight .nb { color: #004461 } /* Name.Builtin */
-.highlight .nc { color: #000000 } /* Name.Class */
-.highlight .no { color: #000000 } /* Name.Constant */
-.highlight .nd { color: #888888 } /* Name.Decorator */
-.highlight .ni { color: #ce5c00 } /* Name.Entity */
-.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #000000 } /* Name.Function */
-.highlight .nl { color: #f57900 } /* Name.Label */
-.highlight .nn { color: #000000 } /* Name.Namespace */
-.highlight .nx { color: #000000 } /* Name.Other */
-.highlight .py { color: #000000 } /* Name.Property */
-.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #000000 } /* Name.Variable */
-.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
-.highlight .mb { color: #990000 } /* Literal.Number.Bin */
-.highlight .mf { color: #990000 } /* Literal.Number.Float */
-.highlight .mh { color: #990000 } /* Literal.Number.Hex */
-.highlight .mi { color: #990000 } /* Literal.Number.Integer */
-.highlight .mo { color: #990000 } /* Literal.Number.Oct */
-.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
-.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
-.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
-.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
-.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
-.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
-.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
-.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
-.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
-.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
-.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #000000 } /* Name.Variable.Class */
-.highlight .vg { color: #000000 } /* Name.Variable.Global */
-.highlight .vi { color: #000000 } /* Name.Variable.Instance */
-.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file
diff --git a/sites/www/_build.orig/_static/searchtools.js b/sites/www/_build.orig/_static/searchtools.js
deleted file mode 100644
index 066857ce..00000000
--- a/sites/www/_build.orig/_static/searchtools.js
+++ /dev/null
@@ -1,651 +0,0 @@
-/*
- * searchtools.js_t
- * ~~~~~~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for the full-text search.
- *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-
-/* Non-minified version JS is _stemmer.js if file is provided */
-/**
- * Porter Stemmer
- */
-var Stemmer = function() {
-
- var step2list = {
- ational: 'ate',
- tional: 'tion',
- enci: 'ence',
- anci: 'ance',
- izer: 'ize',
- bli: 'ble',
- alli: 'al',
- entli: 'ent',
- eli: 'e',
- ousli: 'ous',
- ization: 'ize',
- ation: 'ate',
- ator: 'ate',
- alism: 'al',
- iveness: 'ive',
- fulness: 'ful',
- ousness: 'ous',
- aliti: 'al',
- iviti: 'ive',
- biliti: 'ble',
- logi: 'log'
- };
-
- var step3list = {
- icate: 'ic',
- ative: '',
- alize: 'al',
- iciti: 'ic',
- ical: 'ic',
- ful: '',
- ness: ''
- };
-
- var c = "[^aeiou]"; // consonant
- var v = "[aeiouy]"; // vowel
- var C = c + "[^aeiouy]*"; // consonant sequence
- var V = v + "[aeiou]*"; // vowel sequence
-
- var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
- var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
- var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
- var s_v = "^(" + C + ")?" + v; // vowel in stem
-
- this.stemWord = function (w) {
- var stem;
- var suffix;
- var firstch;
- var origword = w;
-
- if (w.length < 3)
- return w;
-
- var re;
- var re2;
- var re3;
- var re4;
-
- firstch = w.substr(0,1);
- if (firstch == "y")
- w = firstch.toUpperCase() + w.substr(1);
-
- // Step 1a
- re = /^(.+?)(ss|i)es$/;
- re2 = /^(.+?)([^s])s$/;
-
- if (re.test(w))
- w = w.replace(re,"$1$2");
- else if (re2.test(w))
- w = w.replace(re2,"$1$2");
-
- // Step 1b
- re = /^(.+?)eed$/;
- re2 = /^(.+?)(ed|ing)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- re = new RegExp(mgr0);
- if (re.test(fp[1])) {
- re = /.$/;
- w = w.replace(re,"");
- }
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1];
- re2 = new RegExp(s_v);
- if (re2.test(stem)) {
- w = stem;
- re2 = /(at|bl|iz)$/;
- re3 = new RegExp("([^aeiouylsz])\\1$");
- re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re2.test(w))
- w = w + "e";
- else if (re3.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
- else if (re4.test(w))
- w = w + "e";
- }
- }
-
- // Step 1c
- re = /^(.+?)y$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(s_v);
- if (re.test(stem))
- w = stem + "i";
- }
-
- // Step 2
- re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step2list[suffix];
- }
-
- // Step 3
- re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step3list[suffix];
- }
-
- // Step 4
- re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
- re2 = /^(.+?)(s|t)(ion)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- if (re.test(stem))
- w = stem;
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1] + fp[2];
- re2 = new RegExp(mgr1);
- if (re2.test(stem))
- w = stem;
- }
-
- // Step 5
- re = /^(.+?)e$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- re2 = new RegExp(meq1);
- re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
- w = stem;
- }
- re = /ll$/;
- re2 = new RegExp(mgr1);
- if (re.test(w) && re2.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
-
- // and turn initial Y back to y
- if (firstch == "y")
- w = firstch.toLowerCase() + w.substr(1);
- return w;
- }
-}
-
-
-
-/**
- * Simple result scoring code.
- */
-var Scorer = {
- // Implement the following function to further tweak the score for each result
- // The function takes a result array [filename, title, anchor, descr, score]
- // and returns the new score.
- /*
- score: function(result) {
- return result[4];
- },
- */
-
- // query matches the full name of an object
- objNameMatch: 11,
- // or matches in the last dotted part of the object name
- objPartialMatch: 6,
- // Additive scores depending on the priority of the object
- objPrio: {0: 15, // used to be importantResults
- 1: 5, // used to be objectResults
- 2: -5}, // used to be unimportantResults
- // Used when the priority is not in the mapping.
- objPrioDefault: 0,
-
- // query found in title
- title: 15,
- // query found in terms
- term: 5
-};
-
-
-/**
- * Search Module
- */
-var Search = {
-
- _index : null,
- _queued_query : null,
- _pulse_status : -1,
-
- init : function() {
- var params = $.getQueryParameters();
- if (params.q) {
- var query = params.q[0];
- $('input[name="q"]')[0].value = query;
- this.performSearch(query);
- }
- },
-
- loadIndex : function(url) {
- $.ajax({type: "GET", url: url, data: null,
- dataType: "script", cache: true,
- complete: function(jqxhr, textstatus) {
- if (textstatus != "success") {
- document.getElementById("searchindexloader").src = url;
- }
- }});
- },
-
- setIndex : function(index) {
- var q;
- this._index = index;
- if ((q = this._queued_query) !== null) {
- this._queued_query = null;
- Search.query(q);
- }
- },
-
- hasIndex : function() {
- return this._index !== null;
- },
-
- deferQuery : function(query) {
- this._queued_query = query;
- },
-
- stopPulse : function() {
- this._pulse_status = 0;
- },
-
- startPulse : function() {
- if (this._pulse_status >= 0)
- return;
- function pulse() {
- var i;
- Search._pulse_status = (Search._pulse_status + 1) % 4;
- var dotString = '';
- for (i = 0; i < Search._pulse_status; i++)
- dotString += '.';
- Search.dots.text(dotString);
- if (Search._pulse_status > -1)
- window.setTimeout(pulse, 500);
- }
- pulse();
- },
-
- /**
- * perform a search for something (or wait until index is loaded)
- */
- performSearch : function(query) {
- // create the required interface elements
- this.out = $('#search-results');
- this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
- this.dots = $('<span></span>').appendTo(this.title);
- this.status = $('<p style="display: none"></p>').appendTo(this.out);
- this.output = $('<ul class="search"/>').appendTo(this.out);
-
- $('#search-progress').text(_('Preparing search...'));
- this.startPulse();
-
- // index already loaded, the browser was quick!
- if (this.hasIndex())
- this.query(query);
- else
- this.deferQuery(query);
- },
-
- /**
- * execute search (requires search index to be loaded)
- */
- query : function(query) {
- var i;
- var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
-
- // stem the searchterms and add them to the correct list
- var stemmer = new Stemmer();
- var searchterms = [];
- var excluded = [];
- var hlterms = [];
- var tmp = query.split(/\s+/);
- var objectterms = [];
- for (i = 0; i < tmp.length; i++) {
- if (tmp[i] !== "") {
- objectterms.push(tmp[i].toLowerCase());
- }
-
- if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
- tmp[i] === "") {
- // skip this "word"
- continue;
- }
- // stem the word
- var word = stemmer.stemWord(tmp[i].toLowerCase());
- var toAppend;
- // select the correct list
- if (word[0] == '-') {
- toAppend = excluded;
- word = word.substr(1);
- }
- else {
- toAppend = searchterms;
- hlterms.push(tmp[i].toLowerCase());
- }
- // only add if not already in the list
- if (!$u.contains(toAppend, word))
- toAppend.push(word);
- }
- var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
-
- // console.debug('SEARCH: searching for:');
- // console.info('required: ', searchterms);
- // console.info('excluded: ', excluded);
-
- // prepare search
- var terms = this._index.terms;
- var titleterms = this._index.titleterms;
-
- // array of [filename, title, anchor, descr, score]
- var results = [];
- $('#search-progress').empty();
-
- // lookup as object
- for (i = 0; i < objectterms.length; i++) {
- var others = [].concat(objectterms.slice(0, i),
- objectterms.slice(i+1, objectterms.length));
- results = results.concat(this.performObjectSearch(objectterms[i], others));
- }
-
- // lookup as search terms in fulltext
- results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
-
- // let the scorer override scores with a custom scoring function
- if (Scorer.score) {
- for (i = 0; i < results.length; i++)
- results[i][4] = Scorer.score(results[i]);
- }
-
- // now sort the results by score (in opposite order of appearance, since the
- // display function below uses pop() to retrieve items) and then
- // alphabetically
- results.sort(function(a, b) {
- var left = a[4];
- var right = b[4];
- if (left > right) {
- return 1;
- } else if (left < right) {
- return -1;
- } else {
- // same score: sort alphabetically
- left = a[1].toLowerCase();
- right = b[1].toLowerCase();
- return (left > right) ? -1 : ((left < right) ? 1 : 0);
- }
- });
-
- // for debugging
- //Search.lastresults = results.slice(); // a copy
- //console.info('search results:', Search.lastresults);
-
- // print the results
- var resultCount = results.length;
- function displayNextItem() {
- // results left, load the summary and display it
- if (results.length) {
- var item = results.pop();
- var listItem = $('<li style="display:none"></li>');
- if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
- // dirhtml builder
- var dirname = item[0] + '/';
- if (dirname.match(/\/index\/$/)) {
- dirname = dirname.substring(0, dirname.length-6);
- } else if (dirname == 'index/') {
- dirname = '';
- }
- listItem.append($('<a/>').attr('href',
- DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
- highlightstring + item[2]).html(item[1]));
- } else {
- // normal html builders
- listItem.append($('<a/>').attr('href',
- item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
- highlightstring + item[2]).html(item[1]));
- }
- if (item[3]) {
- listItem.append($('<span> (' + item[3] + ')</span>'));
- Search.output.append(listItem);
- listItem.slideDown(5, function() {
- displayNextItem();
- });
- } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
- $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
- dataType: "text",
- complete: function(jqxhr, textstatus) {
- var data = jqxhr.responseText;
- if (data !== '' && data !== undefined) {
- listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
- }
- Search.output.append(listItem);
- listItem.slideDown(5, function() {
- displayNextItem();
- });
- }});
- } else {
- // no source available, just display title
- Search.output.append(listItem);
- listItem.slideDown(5, function() {
- displayNextItem();
- });
- }
- }
- // search finished, update title and status message
- else {
- Search.stopPulse();
- Search.title.text(_('Search Results'));
- if (!resultCount)
- Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
- else
- Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
- Search.status.fadeIn(500);
- }
- }
- displayNextItem();
- },
-
- /**
- * search for object names
- */
- performObjectSearch : function(object, otherterms) {
- var filenames = this._index.filenames;
- var objects = this._index.objects;
- var objnames = this._index.objnames;
- var titles = this._index.titles;
-
- var i;
- var results = [];
-
- for (var prefix in objects) {
- for (var name in objects[prefix]) {
- var fullname = (prefix ? prefix + '.' : '') + name;
- if (fullname.toLowerCase().indexOf(object) > -1) {
- var score = 0;
- var parts = fullname.split('.');
- // check for different match types: exact matches of full name or
- // "last name" (i.e. last dotted part)
- if (fullname == object || parts[parts.length - 1] == object) {
- score += Scorer.objNameMatch;
- // matches in last name
- } else if (parts[parts.length - 1].indexOf(object) > -1) {
- score += Scorer.objPartialMatch;
- }
- var match = objects[prefix][name];
- var objname = objnames[match[1]][2];
- var title = titles[match[0]];
- // If more than one term searched for, we require other words to be
- // found in the name/title/description
- if (otherterms.length > 0) {
- var haystack = (prefix + ' ' + name + ' ' +
- objname + ' ' + title).toLowerCase();
- var allfound = true;
- for (i = 0; i < otherterms.length; i++) {
- if (haystack.indexOf(otherterms[i]) == -1) {
- allfound = false;
- break;
- }
- }
- if (!allfound) {
- continue;
- }
- }
- var descr = objname + _(', in ') + title;
-
- var anchor = match[3];
- if (anchor === '')
- anchor = fullname;
- else if (anchor == '-')
- anchor = objnames[match[1]][1] + '-' + fullname;
- // add custom score for some objects according to scorer
- if (Scorer.objPrio.hasOwnProperty(match[2])) {
- score += Scorer.objPrio[match[2]];
- } else {
- score += Scorer.objPrioDefault;
- }
- results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
- }
- }
- }
-
- return results;
- },
-
- /**
- * search for full-text terms in the index
- */
- performTermsSearch : function(searchterms, excluded, terms, titleterms) {
- var filenames = this._index.filenames;
- var titles = this._index.titles;
-
- var i, j, file;
- var fileMap = {};
- var scoreMap = {};
- var results = [];
-
- // perform the search on the required terms
- for (i = 0; i < searchterms.length; i++) {
- var word = searchterms[i];
- var files = [];
- var _o = [
- {files: terms[word], score: Scorer.term},
- {files: titleterms[word], score: Scorer.title}
- ];
-
- // no match but word was a required one
- if ($u.every(_o, function(o){return o.files === undefined;})) {
- break;
- }
- // found search word in contents
- $u.each(_o, function(o) {
- var _files = o.files;
- if (_files === undefined)
- return
-
- if (_files.length === undefined)
- _files = [_files];
- files = files.concat(_files);
-
- // set score for the word in each file to Scorer.term
- for (j = 0; j < _files.length; j++) {
- file = _files[j];
- if (!(file in scoreMap))
- scoreMap[file] = {}
- scoreMap[file][word] = o.score;
- }
- });
-
- // create the mapping
- for (j = 0; j < files.length; j++) {
- file = files[j];
- if (file in fileMap)
- fileMap[file].push(word);
- else
- fileMap[file] = [word];
- }
- }
-
- // now check if the files don't contain excluded terms
- for (file in fileMap) {
- var valid = true;
-
- // check if all requirements are matched
- if (fileMap[file].length != searchterms.length)
- continue;
-
- // ensure that none of the excluded terms is in the search result
- for (i = 0; i < excluded.length; i++) {
- if (terms[excluded[i]] == file ||
- titleterms[excluded[i]] == file ||
- $u.contains(terms[excluded[i]] || [], file) ||
- $u.contains(titleterms[excluded[i]] || [], file)) {
- valid = false;
- break;
- }
- }
-
- // if we have still a valid result we can add it to the result list
- if (valid) {
- // select one (max) score for the file.
- // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
- var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
- results.push([filenames[file], titles[file], '', null, score]);
- }
- }
- return results;
- },
-
- /**
- * helper function to return a node containing the
- * search summary for a given text. keywords is a list
- * of stemmed words, hlwords is the list of normal, unstemmed
- * words. the first one is used to find the occurrence, the
- * latter for highlighting it.
- */
- makeSearchSummary : function(text, keywords, hlwords) {
- var textLower = text.toLowerCase();
- var start = 0;
- $.each(keywords, function() {
- var i = textLower.indexOf(this.toLowerCase());
- if (i > -1)
- start = i;
- });
- start = Math.max(start - 120, 0);
- var excerpt = ((start > 0) ? '...' : '') +
- $.trim(text.substr(start, 240)) +
- ((start + 240 - text.length) ? '...' : '');
- var rv = $('<div class="context"></div>').text(excerpt);
- $.each(hlwords, function() {
- rv = rv.highlightText(this, 'highlighted');
- });
- return rv;
- }
-};
-
-$(document).ready(function() {
- Search.init();
-}); \ No newline at end of file
diff --git a/sites/www/_build.orig/_static/underscore-1.3.1.js b/sites/www/_build.orig/_static/underscore-1.3.1.js
deleted file mode 100644
index 208d4cd8..00000000
--- a/sites/www/_build.orig/_static/underscore-1.3.1.js
+++ /dev/null
@@ -1,999 +0,0 @@
-// Underscore.js 1.3.1
-// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-
-(function() {
-
- // Baseline setup
- // --------------
-
- // Establish the root object, `window` in the browser, or `global` on the server.
- var root = this;
-
- // Save the previous value of the `_` variable.
- var previousUnderscore = root._;
-
- // Establish the object that gets returned to break out of a loop iteration.
- var breaker = {};
-
- // Save bytes in the minified (but not gzipped) version:
- var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
-
- // Create quick reference variables for speed access to core prototypes.
- var slice = ArrayProto.slice,
- unshift = ArrayProto.unshift,
- toString = ObjProto.toString,
- hasOwnProperty = ObjProto.hasOwnProperty;
-
- // All **ECMAScript 5** native function implementations that we hope to use
- // are declared here.
- var
- nativeForEach = ArrayProto.forEach,
- nativeMap = ArrayProto.map,
- nativeReduce = ArrayProto.reduce,
- nativeReduceRight = ArrayProto.reduceRight,
- nativeFilter = ArrayProto.filter,
- nativeEvery = ArrayProto.every,
- nativeSome = ArrayProto.some,
- nativeIndexOf = ArrayProto.indexOf,
- nativeLastIndexOf = ArrayProto.lastIndexOf,
- nativeIsArray = Array.isArray,
- nativeKeys = Object.keys,
- nativeBind = FuncProto.bind;
-
- // Create a safe reference to the Underscore object for use below.
- var _ = function(obj) { return new wrapper(obj); };
-
- // Export the Underscore object for **Node.js**, with
- // backwards-compatibility for the old `require()` API. If we're in
- // the browser, add `_` as a global object via a string identifier,
- // for Closure Compiler "advanced" mode.
- if (typeof exports !== 'undefined') {
- if (typeof module !== 'undefined' && module.exports) {
- exports = module.exports = _;
- }
- exports._ = _;
- } else {
- root['_'] = _;
- }
-
- // Current version.
- _.VERSION = '1.3.1';
-
- // Collection Functions
- // --------------------
-
- // The cornerstone, an `each` implementation, aka `forEach`.
- // Handles objects with the built-in `forEach`, arrays, and raw objects.
- // Delegates to **ECMAScript 5**'s native `forEach` if available.
- var each = _.each = _.forEach = function(obj, iterator, context) {
- if (obj == null) return;
- if (nativeForEach && obj.forEach === nativeForEach) {
- obj.forEach(iterator, context);
- } else if (obj.length === +obj.length) {
- for (var i = 0, l = obj.length; i < l; i++) {
- if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
- }
- } else {
- for (var key in obj) {
- if (_.has(obj, key)) {
- if (iterator.call(context, obj[key], key, obj) === breaker) return;
- }
- }
- }
- };
-
- // Return the results of applying the iterator to each element.
- // Delegates to **ECMAScript 5**'s native `map` if available.
- _.map = _.collect = function(obj, iterator, context) {
- var results = [];
- if (obj == null) return results;
- if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
- each(obj, function(value, index, list) {
- results[results.length] = iterator.call(context, value, index, list);
- });
- if (obj.length === +obj.length) results.length = obj.length;
- return results;
- };
-
- // **Reduce** builds up a single result from a list of values, aka `inject`,
- // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
- _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
- var initial = arguments.length > 2;
- if (obj == null) obj = [];
- if (nativeReduce && obj.reduce === nativeReduce) {
- if (context) iterator = _.bind(iterator, context);
- return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
- }
- each(obj, function(value, index, list) {
- if (!initial) {
- memo = value;
- initial = true;
- } else {
- memo = iterator.call(context, memo, value, index, list);
- }
- });
- if (!initial) throw new TypeError('Reduce of empty array with no initial value');
- return memo;
- };
-
- // The right-associative version of reduce, also known as `foldr`.
- // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
- _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
- var initial = arguments.length > 2;
- if (obj == null) obj = [];
- if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
- if (context) iterator = _.bind(iterator, context);
- return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
- }
- var reversed = _.toArray(obj).reverse();
- if (context && !initial) iterator = _.bind(iterator, context);
- return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);
- };
-
- // Return the first value which passes a truth test. Aliased as `detect`.
- _.find = _.detect = function(obj, iterator, context) {
- var result;
- any(obj, function(value, index, list) {
- if (iterator.call(context, value, index, list)) {
- result = value;
- return true;
- }
- });
- return result;
- };
-
- // Return all the elements that pass a truth test.
- // Delegates to **ECMAScript 5**'s native `filter` if available.
- // Aliased as `select`.
- _.filter = _.select = function(obj, iterator, context) {
- var results = [];
- if (obj == null) return results;
- if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
- each(obj, function(value, index, list) {
- if (iterator.call(context, value, index, list)) results[results.length] = value;
- });
- return results;
- };
-
- // Return all the elements for which a truth test fails.
- _.reject = function(obj, iterator, context) {
- var results = [];
- if (obj == null) return results;
- each(obj, function(value, index, list) {
- if (!iterator.call(context, value, index, list)) results[results.length] = value;
- });
- return results;
- };
-
- // Determine whether all of the elements match a truth test.
- // Delegates to **ECMAScript 5**'s native `every` if available.
- // Aliased as `all`.
- _.every = _.all = function(obj, iterator, context) {
- var result = true;
- if (obj == null) return result;
- if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
- each(obj, function(value, index, list) {
- if (!(result = result && iterator.call(context, value, index, list))) return breaker;
- });
- return result;
- };
-
- // Determine if at least one element in the object matches a truth test.
- // Delegates to **ECMAScript 5**'s native `some` if available.
- // Aliased as `any`.
- var any = _.some = _.any = function(obj, iterator, context) {
- iterator || (iterator = _.identity);
- var result = false;
- if (obj == null) return result;
- if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
- each(obj, function(value, index, list) {
- if (result || (result = iterator.call(context, value, index, list))) return breaker;
- });
- return !!result;
- };
-
- // Determine if a given value is included in the array or object using `===`.
- // Aliased as `contains`.
- _.include = _.contains = function(obj, target) {
- var found = false;
- if (obj == null) return found;
- if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
- found = any(obj, function(value) {
- return value === target;
- });
- return found;
- };
-
- // Invoke a method (with arguments) on every item in a collection.
- _.invoke = function(obj, method) {
- var args = slice.call(arguments, 2);
- return _.map(obj, function(value) {
- return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
- });
- };
-
- // Convenience version of a common use case of `map`: fetching a property.
- _.pluck = function(obj, key) {
- return _.map(obj, function(value){ return value[key]; });
- };
-
- // Return the maximum element or (element-based computation).
- _.max = function(obj, iterator, context) {
- if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
- if (!iterator && _.isEmpty(obj)) return -Infinity;
- var result = {computed : -Infinity};
- each(obj, function(value, index, list) {
- var computed = iterator ? iterator.call(context, value, index, list) : value;
- computed >= result.computed && (result = {value : value, computed : computed});
- });
- return result.value;
- };
-
- // Return the minimum element (or element-based computation).
- _.min = function(obj, iterator, context) {
- if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
- if (!iterator && _.isEmpty(obj)) return Infinity;
- var result = {computed : Infinity};
- each(obj, function(value, index, list) {
- var computed = iterator ? iterator.call(context, value, index, list) : value;
- computed < result.computed && (result = {value : value, computed : computed});
- });
- return result.value;
- };
-
- // Shuffle an array.
- _.shuffle = function(obj) {
- var shuffled = [], rand;
- each(obj, function(value, index, list) {
- if (index == 0) {
- shuffled[0] = value;
- } else {
- rand = Math.floor(Math.random() * (index + 1));
- shuffled[index] = shuffled[rand];
- shuffled[rand] = value;
- }
- });
- return shuffled;
- };
-
- // Sort the object's values by a criterion produced by an iterator.
- _.sortBy = function(obj, iterator, context) {
- return _.pluck(_.map(obj, function(value, index, list) {
- return {
- value : value,
- criteria : iterator.call(context, value, index, list)
- };
- }).sort(function(left, right) {
- var a = left.criteria, b = right.criteria;
- return a < b ? -1 : a > b ? 1 : 0;
- }), 'value');
- };
-
- // Groups the object's values by a criterion. Pass either a string attribute
- // to group by, or a function that returns the criterion.
- _.groupBy = function(obj, val) {
- var result = {};
- var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
- each(obj, function(value, index) {
- var key = iterator(value, index);
- (result[key] || (result[key] = [])).push(value);
- });
- return result;
- };
-
- // Use a comparator function to figure out at what index an object should
- // be inserted so as to maintain order. Uses binary search.
- _.sortedIndex = function(array, obj, iterator) {
- iterator || (iterator = _.identity);
- var low = 0, high = array.length;
- while (low < high) {
- var mid = (low + high) >> 1;
- iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
- }
- return low;
- };
-
- // Safely convert anything iterable into a real, live array.
- _.toArray = function(iterable) {
- if (!iterable) return [];
- if (iterable.toArray) return iterable.toArray();
- if (_.isArray(iterable)) return slice.call(iterable);
- if (_.isArguments(iterable)) return slice.call(iterable);
- return _.values(iterable);
- };
-
- // Return the number of elements in an object.
- _.size = function(obj) {
- return _.toArray(obj).length;
- };
-
- // Array Functions
- // ---------------
-
- // Get the first element of an array. Passing **n** will return the first N
- // values in the array. Aliased as `head`. The **guard** check allows it to work
- // with `_.map`.
- _.first = _.head = function(array, n, guard) {
- return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
- };
-
- // Returns everything but the last entry of the array. Especcialy useful on
- // the arguments object. Passing **n** will return all the values in
- // the array, excluding the last N. The **guard** check allows it to work with
- // `_.map`.
- _.initial = function(array, n, guard) {
- return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
- };
-
- // Get the last element of an array. Passing **n** will return the last N
- // values in the array. The **guard** check allows it to work with `_.map`.
- _.last = function(array, n, guard) {
- if ((n != null) && !guard) {
- return slice.call(array, Math.max(array.length - n, 0));
- } else {
- return array[array.length - 1];
- }
- };
-
- // Returns everything but the first entry of the array. Aliased as `tail`.
- // Especially useful on the arguments object. Passing an **index** will return
- // the rest of the values in the array from that index onward. The **guard**
- // check allows it to work with `_.map`.
- _.rest = _.tail = function(array, index, guard) {
- return slice.call(array, (index == null) || guard ? 1 : index);
- };
-
- // Trim out all falsy values from an array.
- _.compact = function(array) {
- return _.filter(array, function(value){ return !!value; });
- };
-
- // Return a completely flattened version of an array.
- _.flatten = function(array, shallow) {
- return _.reduce(array, function(memo, value) {
- if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
- memo[memo.length] = value;
- return memo;
- }, []);
- };
-
- // Return a version of the array that does not contain the specified value(s).
- _.without = function(array) {
- return _.difference(array, slice.call(arguments, 1));
- };
-
- // Produce a duplicate-free version of the array. If the array has already
- // been sorted, you have the option of using a faster algorithm.
- // Aliased as `unique`.
- _.uniq = _.unique = function(array, isSorted, iterator) {
- var initial = iterator ? _.map(array, iterator) : array;
- var result = [];
- _.reduce(initial, function(memo, el, i) {
- if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
- memo[memo.length] = el;
- result[result.length] = array[i];
- }
- return memo;
- }, []);
- return result;
- };
-
- // Produce an array that contains the union: each distinct element from all of
- // the passed-in arrays.
- _.union = function() {
- return _.uniq(_.flatten(arguments, true));
- };
-
- // Produce an array that contains every item shared between all the
- // passed-in arrays. (Aliased as "intersect" for back-compat.)
- _.intersection = _.intersect = function(array) {
- var rest = slice.call(arguments, 1);
- return _.filter(_.uniq(array), function(item) {
- return _.every(rest, function(other) {
- return _.indexOf(other, item) >= 0;
- });
- });
- };
-
- // Take the difference between one array and a number of other arrays.
- // Only the elements present in just the first array will remain.
- _.difference = function(array) {
- var rest = _.flatten(slice.call(arguments, 1));
- return _.filter(array, function(value){ return !_.include(rest, value); });
- };
-
- // Zip together multiple lists into a single array -- elements that share
- // an index go together.
- _.zip = function() {
- var args = slice.call(arguments);
- var length = _.max(_.pluck(args, 'length'));
- var results = new Array(length);
- for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
- return results;
- };
-
- // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
- // we need this function. Return the position of the first occurrence of an
- // item in an array, or -1 if the item is not included in the array.
- // Delegates to **ECMAScript 5**'s native `indexOf` if available.
- // If the array is large and already in sort order, pass `true`
- // for **isSorted** to use binary search.
- _.indexOf = function(array, item, isSorted) {
- if (array == null) return -1;
- var i, l;
- if (isSorted) {
- i = _.sortedIndex(array, item);
- return array[i] === item ? i : -1;
- }
- if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
- for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
- return -1;
- };
-
- // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
- _.lastIndexOf = function(array, item) {
- if (array == null) return -1;
- if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
- var i = array.length;
- while (i--) if (i in array && array[i] === item) return i;
- return -1;
- };
-
- // Generate an integer Array containing an arithmetic progression. A port of
- // the native Python `range()` function. See
- // [the Python documentation](http://docs.python.org/library/functions.html#range).
- _.range = function(start, stop, step) {
- if (arguments.length <= 1) {
- stop = start || 0;
- start = 0;
- }
- step = arguments[2] || 1;
-
- var len = Math.max(Math.ceil((stop - start) / step), 0);
- var idx = 0;
- var range = new Array(len);
-
- while(idx < len) {
- range[idx++] = start;
- start += step;
- }
-
- return range;
- };
-
- // Function (ahem) Functions
- // ------------------
-
- // Reusable constructor function for prototype setting.
- var ctor = function(){};
-
- // Create a function bound to a given object (assigning `this`, and arguments,
- // optionally). Binding with arguments is also known as `curry`.
- // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
- // We check for `func.bind` first, to fail fast when `func` is undefined.
- _.bind = function bind(func, context) {
- var bound, args;
- if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
- if (!_.isFunction(func)) throw new TypeError;
- args = slice.call(arguments, 2);
- return bound = function() {
- if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
- ctor.prototype = func.prototype;
- var self = new ctor;
- var result = func.apply(self, args.concat(slice.call(arguments)));
- if (Object(result) === result) return result;
- return self;
- };
- };
-
- // Bind all of an object's methods to that object. Useful for ensuring that
- // all callbacks defined on an object belong to it.
- _.bindAll = function(obj) {
- var funcs = slice.call(arguments, 1);
- if (funcs.length == 0) funcs = _.functions(obj);
- each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
- return obj;
- };
-
- // Memoize an expensive function by storing its results.
- _.memoize = function(func, hasher) {
- var memo = {};
- hasher || (hasher = _.identity);
- return function() {
- var key = hasher.apply(this, arguments);
- return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
- };
- };
-
- // Delays a function for the given number of milliseconds, and then calls
- // it with the arguments supplied.
- _.delay = function(func, wait) {
- var args = slice.call(arguments, 2);
- return setTimeout(function(){ return func.apply(func, args); }, wait);
- };
-
- // Defers a function, scheduling it to run after the current call stack has
- // cleared.
- _.defer = function(func) {
- return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
- };
-
- // Returns a function, that, when invoked, will only be triggered at most once
- // during a given window of time.
- _.throttle = function(func, wait) {
- var context, args, timeout, throttling, more;
- var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
- return function() {
- context = this; args = arguments;
- var later = function() {
- timeout = null;
- if (more) func.apply(context, args);
- whenDone();
- };
- if (!timeout) timeout = setTimeout(later, wait);
- if (throttling) {
- more = true;
- } else {
- func.apply(context, args);
- }
- whenDone();
- throttling = true;
- };
- };
-
- // Returns a function, that, as long as it continues to be invoked, will not
- // be triggered. The function will be called after it stops being called for
- // N milliseconds.
- _.debounce = function(func, wait) {
- var timeout;
- return function() {
- var context = this, args = arguments;
- var later = function() {
- timeout = null;
- func.apply(context, args);
- };
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- };
- };
-
- // Returns a function that will be executed at most one time, no matter how
- // often you call it. Useful for lazy initialization.
- _.once = function(func) {
- var ran = false, memo;
- return function() {
- if (ran) return memo;
- ran = true;
- return memo = func.apply(this, arguments);
- };
- };
-
- // Returns the first function passed as an argument to the second,
- // allowing you to adjust arguments, run code before and after, and
- // conditionally execute the original function.
- _.wrap = function(func, wrapper) {
- return function() {
- var args = [func].concat(slice.call(arguments, 0));
- return wrapper.apply(this, args);
- };
- };
-
- // Returns a function that is the composition of a list of functions, each
- // consuming the return value of the function that follows.
- _.compose = function() {
- var funcs = arguments;
- return function() {
- var args = arguments;
- for (var i = funcs.length - 1; i >= 0; i--) {
- args = [funcs[i].apply(this, args)];
- }
- return args[0];
- };
- };
-
- // Returns a function that will only be executed after being called N times.
- _.after = function(times, func) {
- if (times <= 0) return func();
- return function() {
- if (--times < 1) { return func.apply(this, arguments); }
- };
- };
-
- // Object Functions
- // ----------------
-
- // Retrieve the names of an object's properties.
- // Delegates to **ECMAScript 5**'s native `Object.keys`
- _.keys = nativeKeys || function(obj) {
- if (obj !== Object(obj)) throw new TypeError('Invalid object');
- var keys = [];
- for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
- return keys;
- };
-
- // Retrieve the values of an object's properties.
- _.values = function(obj) {
- return _.map(obj, _.identity);
- };
-
- // Return a sorted list of the function names available on the object.
- // Aliased as `methods`
- _.functions = _.methods = function(obj) {
- var names = [];
- for (var key in obj) {
- if (_.isFunction(obj[key])) names.push(key);
- }
- return names.sort();
- };
-
- // Extend a given object with all the properties in passed-in object(s).
- _.extend = function(obj) {
- each(slice.call(arguments, 1), function(source) {
- for (var prop in source) {
- obj[prop] = source[prop];
- }
- });
- return obj;
- };
-
- // Fill in a given object with default properties.
- _.defaults = function(obj) {
- each(slice.call(arguments, 1), function(source) {
- for (var prop in source) {
- if (obj[prop] == null) obj[prop] = source[prop];
- }
- });
- return obj;
- };
-
- // Create a (shallow-cloned) duplicate of an object.
- _.clone = function(obj) {
- if (!_.isObject(obj)) return obj;
- return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
- };
-
- // Invokes interceptor with the obj, and then returns obj.
- // The primary purpose of this method is to "tap into" a method chain, in
- // order to perform operations on intermediate results within the chain.
- _.tap = function(obj, interceptor) {
- interceptor(obj);
- return obj;
- };
-
- // Internal recursive comparison function.
- function eq(a, b, stack) {
- // Identical objects are equal. `0 === -0`, but they aren't identical.
- // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
- if (a === b) return a !== 0 || 1 / a == 1 / b;
- // A strict comparison is necessary because `null == undefined`.
- if (a == null || b == null) return a === b;
- // Unwrap any wrapped objects.
- if (a._chain) a = a._wrapped;
- if (b._chain) b = b._wrapped;
- // Invoke a custom `isEqual` method if one is provided.
- if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);
- if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);
- // Compare `[[Class]]` names.
- var className = toString.call(a);
- if (className != toString.call(b)) return false;
- switch (className) {
- // Strings, numbers, dates, and booleans are compared by value.
- case '[object String]':
- // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
- // equivalent to `new String("5")`.
- return a == String(b);
- case '[object Number]':
- // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
- // other numeric values.
- return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
- case '[object Date]':
- case '[object Boolean]':
- // Coerce dates and booleans to numeric primitive values. Dates are compared by their
- // millisecond representations. Note that invalid dates with millisecond representations
- // of `NaN` are not equivalent.
- return +a == +b;
- // RegExps are compared by their source patterns and flags.
- case '[object RegExp]':
- return a.source == b.source &&
- a.global == b.global &&
- a.multiline == b.multiline &&
- a.ignoreCase == b.ignoreCase;
- }
- if (typeof a != 'object' || typeof b != 'object') return false;
- // Assume equality for cyclic structures. The algorithm for detecting cyclic
- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
- var length = stack.length;
- while (length--) {
- // Linear search. Performance is inversely proportional to the number of
- // unique nested structures.
- if (stack[length] == a) return true;
- }
- // Add the first object to the stack of traversed objects.
- stack.push(a);
- var size = 0, result = true;
- // Recursively compare objects and arrays.
- if (className == '[object Array]') {
- // Compare array lengths to determine if a deep comparison is necessary.
- size = a.length;
- result = size == b.length;
- if (result) {
- // Deep compare the contents, ignoring non-numeric properties.
- while (size--) {
- // Ensure commutative equality for sparse arrays.
- if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
- }
- }
- } else {
- // Objects with different constructors are not equivalent.
- if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;
- // Deep compare objects.
- for (var key in a) {
- if (_.has(a, key)) {
- // Count the expected number of properties.
- size++;
- // Deep compare each member.
- if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
- }
- }
- // Ensure that both objects contain the same number of properties.
- if (result) {
- for (key in b) {
- if (_.has(b, key) && !(size--)) break;
- }
- result = !size;
- }
- }
- // Remove the first object from the stack of traversed objects.
- stack.pop();
- return result;
- }
-
- // Perform a deep comparison to check if two objects are equal.
- _.isEqual = function(a, b) {
- return eq(a, b, []);
- };
-
- // Is a given array, string, or object empty?
- // An "empty" object has no enumerable own-properties.
- _.isEmpty = function(obj) {
- if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
- for (var key in obj) if (_.has(obj, key)) return false;
- return true;
- };
-
- // Is a given value a DOM element?
- _.isElement = function(obj) {
- return !!(obj && obj.nodeType == 1);
- };
-
- // Is a given value an array?
- // Delegates to ECMA5's native Array.isArray
- _.isArray = nativeIsArray || function(obj) {
- return toString.call(obj) == '[object Array]';
- };
-
- // Is a given variable an object?
- _.isObject = function(obj) {
- return obj === Object(obj);
- };
-
- // Is a given variable an arguments object?
- _.isArguments = function(obj) {
- return toString.call(obj) == '[object Arguments]';
- };
- if (!_.isArguments(arguments)) {
- _.isArguments = function(obj) {
- return !!(obj && _.has(obj, 'callee'));
- };
- }
-
- // Is a given value a function?
- _.isFunction = function(obj) {
- return toString.call(obj) == '[object Function]';
- };
-
- // Is a given value a string?
- _.isString = function(obj) {
- return toString.call(obj) == '[object String]';
- };
-
- // Is a given value a number?
- _.isNumber = function(obj) {
- return toString.call(obj) == '[object Number]';
- };
-
- // Is the given value `NaN`?
- _.isNaN = function(obj) {
- // `NaN` is the only value for which `===` is not reflexive.
- return obj !== obj;
- };
-
- // Is a given value a boolean?
- _.isBoolean = function(obj) {
- return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
- };
-
- // Is a given value a date?
- _.isDate = function(obj) {
- return toString.call(obj) == '[object Date]';
- };
-
- // Is the given value a regular expression?
- _.isRegExp = function(obj) {
- return toString.call(obj) == '[object RegExp]';
- };
-
- // Is a given value equal to null?
- _.isNull = function(obj) {
- return obj === null;
- };
-
- // Is a given variable undefined?
- _.isUndefined = function(obj) {
- return obj === void 0;
- };
-
- // Has own property?
- _.has = function(obj, key) {
- return hasOwnProperty.call(obj, key);
- };
-
- // Utility Functions
- // -----------------
-
- // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
- // previous owner. Returns a reference to the Underscore object.
- _.noConflict = function() {
- root._ = previousUnderscore;
- return this;
- };
-
- // Keep the identity function around for default iterators.
- _.identity = function(value) {
- return value;
- };
-
- // Run a function **n** times.
- _.times = function (n, iterator, context) {
- for (var i = 0; i < n; i++) iterator.call(context, i);
- };
-
- // Escape a string for HTML interpolation.
- _.escape = function(string) {
- return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
- };
-
- // Add your own custom functions to the Underscore object, ensuring that
- // they're correctly added to the OOP wrapper as well.
- _.mixin = function(obj) {
- each(_.functions(obj), function(name){
- addToWrapper(name, _[name] = obj[name]);
- });
- };
-
- // Generate a unique integer id (unique within the entire client session).
- // Useful for temporary DOM ids.
- var idCounter = 0;
- _.uniqueId = function(prefix) {
- var id = idCounter++;
- return prefix ? prefix + id : id;
- };
-
- // By default, Underscore uses ERB-style template delimiters, change the
- // following template settings to use alternative delimiters.
- _.templateSettings = {
- evaluate : /<%([\s\S]+?)%>/g,
- interpolate : /<%=([\s\S]+?)%>/g,
- escape : /<%-([\s\S]+?)%>/g
- };
-
- // When customizing `templateSettings`, if you don't want to define an
- // interpolation, evaluation or escaping regex, we need one that is
- // guaranteed not to match.
- var noMatch = /.^/;
-
- // Within an interpolation, evaluation, or escaping, remove HTML escaping
- // that had been previously added.
- var unescape = function(code) {
- return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
- };
-
- // JavaScript micro-templating, similar to John Resig's implementation.
- // Underscore templating handles arbitrary delimiters, preserves whitespace,
- // and correctly escapes quotes within interpolated code.
- _.template = function(str, data) {
- var c = _.templateSettings;
- var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
- 'with(obj||{}){__p.push(\'' +
- str.replace(/\\/g, '\\\\')
- .replace(/'/g, "\\'")
- .replace(c.escape || noMatch, function(match, code) {
- return "',_.escape(" + unescape(code) + "),'";
- })
- .replace(c.interpolate || noMatch, function(match, code) {
- return "'," + unescape(code) + ",'";
- })
- .replace(c.evaluate || noMatch, function(match, code) {
- return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
- })
- .replace(/\r/g, '\\r')
- .replace(/\n/g, '\\n')
- .replace(/\t/g, '\\t')
- + "');}return __p.join('');";
- var func = new Function('obj', '_', tmpl);
- if (data) return func(data, _);
- return function(data) {
- return func.call(this, data, _);
- };
- };
-
- // Add a "chain" function, which will delegate to the wrapper.
- _.chain = function(obj) {
- return _(obj).chain();
- };
-
- // The OOP Wrapper
- // ---------------
-
- // If Underscore is called as a function, it returns a wrapped object that
- // can be used OO-style. This wrapper holds altered versions of all the
- // underscore functions. Wrapped objects may be chained.
- var wrapper = function(obj) { this._wrapped = obj; };
-
- // Expose `wrapper.prototype` as `_.prototype`
- _.prototype = wrapper.prototype;
-
- // Helper function to continue chaining intermediate results.
- var result = function(obj, chain) {
- return chain ? _(obj).chain() : obj;
- };
-
- // A method to easily add functions to the OOP wrapper.
- var addToWrapper = function(name, func) {
- wrapper.prototype[name] = function() {
- var args = slice.call(arguments);
- unshift.call(args, this._wrapped);
- return result(func.apply(_, args), this._chain);
- };
- };
-
- // Add all of the Underscore functions to the wrapper object.
- _.mixin(_);
-
- // Add all mutator Array functions to the wrapper.
- each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
- var method = ArrayProto[name];
- wrapper.prototype[name] = function() {
- var wrapped = this._wrapped;
- method.apply(wrapped, arguments);
- var length = wrapped.length;
- if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
- return result(wrapped, this._chain);
- };
- });
-
- // Add all accessor Array functions to the wrapper.
- each(['concat', 'join', 'slice'], function(name) {
- var method = ArrayProto[name];
- wrapper.prototype[name] = function() {
- return result(method.apply(this._wrapped, arguments), this._chain);
- };
- });
-
- // Start chaining a wrapped Underscore object.
- wrapper.prototype.chain = function() {
- this._chain = true;
- return this;
- };
-
- // Extracts the result from a wrapped and chained object.
- wrapper.prototype.value = function() {
- return this._wrapped;
- };
-
-}).call(this);
diff --git a/sites/www/_build.orig/_static/underscore.js b/sites/www/_build.orig/_static/underscore.js
deleted file mode 100644
index 5b55f32b..00000000
--- a/sites/www/_build.orig/_static/underscore.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Underscore.js 1.3.1
-// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
-b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
-null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
-function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
-e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
-function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
-return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
-c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
-b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);
-return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,
-d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
-b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
-b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
-b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
-function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
-u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
-function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
-true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/sites/www/_build.orig/_static/up-pressed.png b/sites/www/_build.orig/_static/up-pressed.png
deleted file mode 100644
index 99e72109..00000000
--- a/sites/www/_build.orig/_static/up-pressed.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/up.png b/sites/www/_build.orig/_static/up.png
deleted file mode 100644
index 26de002e..00000000
--- a/sites/www/_build.orig/_static/up.png
+++ /dev/null
Binary files differ
diff --git a/sites/www/_build.orig/_static/websupport.js b/sites/www/_build.orig/_static/websupport.js
deleted file mode 100644
index 98e7f40b..00000000
--- a/sites/www/_build.orig/_static/websupport.js
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
- * websupport.js
- * ~~~~~~~~~~~~~
- *
- * sphinx.websupport utilities for all documentation.
- *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-(function($) {
- $.fn.autogrow = function() {
- return this.each(function() {
- var textarea = this;
-
- $.fn.autogrow.resize(textarea);
-
- $(textarea)
- .focus(function() {
- textarea.interval = setInterval(function() {
- $.fn.autogrow.resize(textarea);
- }, 500);
- })
- .blur(function() {
- clearInterval(textarea.interval);
- });
- });
- };
-
- $.fn.autogrow.resize = function(textarea) {
- var lineHeight = parseInt($(textarea).css('line-height'), 10);
- var lines = textarea.value.split('\n');
- var columns = textarea.cols;
- var lineCount = 0;
- $.each(lines, function() {
- lineCount += Math.ceil(this.length / columns) || 1;
- });
- var height = lineHeight * (lineCount + 1);
- $(textarea).css('height', height);
- };
-})(jQuery);
-
-(function($) {
- var comp, by;
-
- function init() {
- initEvents();
- initComparator();
- }
-
- function initEvents() {
- $(document).on("click", 'a.comment-close', function(event) {
- event.preventDefault();
- hide($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.vote', function(event) {
- event.preventDefault();
- handleVote($(this));
- });
- $(document).on("click", 'a.reply', function(event) {
- event.preventDefault();
- openReply($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.close-reply', function(event) {
- event.preventDefault();
- closeReply($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.sort-option', function(event) {
- event.preventDefault();
- handleReSort($(this));
- });
- $(document).on("click", 'a.show-proposal', function(event) {
- event.preventDefault();
- showProposal($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.hide-proposal', function(event) {
- event.preventDefault();
- hideProposal($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.show-propose-change', function(event) {
- event.preventDefault();
- showProposeChange($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.hide-propose-change', function(event) {
- event.preventDefault();
- hideProposeChange($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.accept-comment', function(event) {
- event.preventDefault();
- acceptComment($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.delete-comment', function(event) {
- event.preventDefault();
- deleteComment($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.comment-markup', function(event) {
- event.preventDefault();
- toggleCommentMarkupBox($(this).attr('id').substring(2));
- });
- }
-
- /**
- * Set comp, which is a comparator function used for sorting and
- * inserting comments into the list.
- */
- function setComparator() {
- // If the first three letters are "asc", sort in ascending order
- // and remove the prefix.
- if (by.substring(0,3) == 'asc') {
- var i = by.substring(3);
- comp = function(a, b) { return a[i] - b[i]; };
- } else {
- // Otherwise sort in descending order.
- comp = function(a, b) { return b[by] - a[by]; };
- }
-
- // Reset link styles and format the selected sort option.
- $('a.sel').attr('href', '#').removeClass('sel');
- $('a.by' + by).removeAttr('href').addClass('sel');
- }
-
- /**
- * Create a comp function. If the user has preferences stored in
- * the sortBy cookie, use those, otherwise use the default.
- */
- function initComparator() {
- by = 'rating'; // Default to sort by rating.
- // If the sortBy cookie is set, use that instead.
- if (document.cookie.length > 0) {
- var start = document.cookie.indexOf('sortBy=');
- if (start != -1) {
- start = start + 7;
- var end = document.cookie.indexOf(";", start);
- if (end == -1) {
- end = document.cookie.length;
- by = unescape(document.cookie.substring(start, end));
- }
- }
- }
- setComparator();
- }
-
- /**
- * Show a comment div.
- */
- function show(id) {
- $('#ao' + id).hide();
- $('#ah' + id).show();
- var context = $.extend({id: id}, opts);
- var popup = $(renderTemplate(popupTemplate, context)).hide();
- popup.find('textarea[name="proposal"]').hide();
- popup.find('a.by' + by).addClass('sel');
- var form = popup.find('#cf' + id);
- form.submit(function(event) {
- event.preventDefault();
- addComment(form);
- });
- $('#s' + id).after(popup);
- popup.slideDown('fast', function() {
- getComments(id);
- });
- }
-
- /**
- * Hide a comment div.
- */
- function hide(id) {
- $('#ah' + id).hide();
- $('#ao' + id).show();
- var div = $('#sc' + id);
- div.slideUp('fast', function() {
- div.remove();
- });
- }
-
- /**
- * Perform an ajax request to get comments for a node
- * and insert the comments into the comments tree.
- */
- function getComments(id) {
- $.ajax({
- type: 'GET',
- url: opts.getCommentsURL,
- data: {node: id},
- success: function(data, textStatus, request) {
- var ul = $('#cl' + id);
- var speed = 100;
- $('#cf' + id)
- .find('textarea[name="proposal"]')
- .data('source', data.source);
-
- if (data.comments.length === 0) {
- ul.html('<li>No comments yet.</li>');
- ul.data('empty', true);
- } else {
- // If there are comments, sort them and put them in the list.
- var comments = sortComments(data.comments);
- speed = data.comments.length * 100;
- appendComments(comments, ul);
- ul.data('empty', false);
- }
- $('#cn' + id).slideUp(speed + 200);
- ul.slideDown(speed);
- },
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem retrieving the comments.');
- },
- dataType: 'json'
- });
- }
-
- /**
- * Add a comment via ajax and insert the comment into the comment tree.
- */
- function addComment(form) {
- var node_id = form.find('input[name="node"]').val();
- var parent_id = form.find('input[name="parent"]').val();
- var text = form.find('textarea[name="comment"]').val();
- var proposal = form.find('textarea[name="proposal"]').val();
-
- if (text == '') {
- showError('Please enter a comment.');
- return;
- }
-
- // Disable the form that is being submitted.
- form.find('textarea,input').attr('disabled', 'disabled');
-
- // Send the comment to the server.
- $.ajax({
- type: "POST",
- url: opts.addCommentURL,
- dataType: 'json',
- data: {
- node: node_id,
- parent: parent_id,
- text: text,
- proposal: proposal
- },
- success: function(data, textStatus, error) {
- // Reset the form.
- if (node_id) {
- hideProposeChange(node_id);
- }
- form.find('textarea')
- .val('')
- .add(form.find('input'))
- .removeAttr('disabled');
- var ul = $('#cl' + (node_id || parent_id));
- if (ul.data('empty')) {
- $(ul).empty();
- ul.data('empty', false);
- }
- insertComment(data.comment);
- var ao = $('#ao' + node_id);
- ao.find('img').attr({'src': opts.commentBrightImage});
- if (node_id) {
- // if this was a "root" comment, remove the commenting box
- // (the user can get it back by reopening the comment popup)
- $('#ca' + node_id).slideUp();
- }
- },
- error: function(request, textStatus, error) {
- form.find('textarea,input').removeAttr('disabled');
- showError('Oops, there was a problem adding the comment.');
- }
- });
- }
-
- /**
- * Recursively append comments to the main comment list and children
- * lists, creating the comment tree.
- */
- function appendComments(comments, ul) {
- $.each(comments, function() {
- var div = createCommentDiv(this);
- ul.append($(document.createElement('li')).html(div));
- appendComments(this.children, div.find('ul.comment-children'));
- // To avoid stagnating data, don't store the comments children in data.
- this.children = null;
- div.data('comment', this);
- });
- }
-
- /**
- * After adding a new comment, it must be inserted in the correct
- * location in the comment tree.
- */
- function insertComment(comment) {
- var div = createCommentDiv(comment);
-
- // To avoid stagnating data, don't store the comments children in data.
- comment.children = null;
- div.data('comment', comment);
-
- var ul = $('#cl' + (comment.node || comment.parent));
- var siblings = getChildren(ul);
-
- var li = $(document.createElement('li'));
- li.hide();
-
- // Determine where in the parents children list to insert this comment.
- for(i=0; i < siblings.length; i++) {
- if (comp(comment, siblings[i]) <= 0) {
- $('#cd' + siblings[i].id)
- .parent()
- .before(li.html(div));
- li.slideDown('fast');
- return;
- }
- }
-
- // If we get here, this comment rates lower than all the others,
- // or it is the only comment in the list.
- ul.append(li.html(div));
- li.slideDown('fast');
- }
-
- function acceptComment(id) {
- $.ajax({
- type: 'POST',
- url: opts.acceptCommentURL,
- data: {id: id},
- success: function(data, textStatus, request) {
- $('#cm' + id).fadeOut('fast');
- $('#cd' + id).removeClass('moderate');
- },
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem accepting the comment.');
- }
- });
- }
-
- function deleteComment(id) {
- $.ajax({
- type: 'POST',
- url: opts.deleteCommentURL,
- data: {id: id},
- success: function(data, textStatus, request) {
- var div = $('#cd' + id);
- if (data == 'delete') {
- // Moderator mode: remove the comment and all children immediately
- div.slideUp('fast', function() {
- div.remove();
- });
- return;
- }
- // User mode: only mark the comment as deleted
- div
- .find('span.user-id:first')
- .text('[deleted]').end()
- .find('div.comment-text:first')
- .text('[deleted]').end()
- .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
- ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
- .remove();
- var comment = div.data('comment');
- comment.username = '[deleted]';
- comment.text = '[deleted]';
- div.data('comment', comment);
- },
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem deleting the comment.');
- }
- });
- }
-
- function showProposal(id) {
- $('#sp' + id).hide();
- $('#hp' + id).show();
- $('#pr' + id).slideDown('fast');
- }
-
- function hideProposal(id) {
- $('#hp' + id).hide();
- $('#sp' + id).show();
- $('#pr' + id).slideUp('fast');
- }
-
- function showProposeChange(id) {
- $('#pc' + id).hide();
- $('#hc' + id).show();
- var textarea = $('#pt' + id);
- textarea.val(textarea.data('source'));
- $.fn.autogrow.resize(textarea[0]);
- textarea.slideDown('fast');
- }
-
- function hideProposeChange(id) {
- $('#hc' + id).hide();
- $('#pc' + id).show();
- var textarea = $('#pt' + id);
- textarea.val('').removeAttr('disabled');
- textarea.slideUp('fast');
- }
-
- function toggleCommentMarkupBox(id) {
- $('#mb' + id).toggle();
- }
-
- /** Handle when the user clicks on a sort by link. */
- function handleReSort(link) {
- var classes = link.attr('class').split(/\s+/);
- for (var i=0; i<classes.length; i++) {
- if (classes[i] != 'sort-option') {
- by = classes[i].substring(2);
- }
- }
- setComparator();
- // Save/update the sortBy cookie.
- var expiration = new Date();
- expiration.setDate(expiration.getDate() + 365);
- document.cookie= 'sortBy=' + escape(by) +
- ';expires=' + expiration.toUTCString();
- $('ul.comment-ul').each(function(index, ul) {
- var comments = getChildren($(ul), true);
- comments = sortComments(comments);
- appendComments(comments, $(ul).empty());
- });
- }
-
- /**
- * Function to process a vote when a user clicks an arrow.
- */
- function handleVote(link) {
- if (!opts.voting) {
- showError("You'll need to login to vote.");
- return;
- }
-
- var id = link.attr('id');
- if (!id) {
- // Didn't click on one of the voting arrows.
- return;
- }
- // If it is an unvote, the new vote value is 0,
- // Otherwise it's 1 for an upvote, or -1 for a downvote.
- var value = 0;
- if (id.charAt(1) != 'u') {
- value = id.charAt(0) == 'u' ? 1 : -1;
- }
- // The data to be sent to the server.
- var d = {
- comment_id: id.substring(2),
- value: value
- };
-
- // Swap the vote and unvote links.
- link.hide();
- $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
- .show();
-
- // The div the comment is displayed in.
- var div = $('div#cd' + d.comment_id);
- var data = div.data('comment');
-
- // If this is not an unvote, and the other vote arrow has
- // already been pressed, unpress it.
- if ((d.value !== 0) && (data.vote === d.value * -1)) {
- $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
- $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
- }
-
- // Update the comments rating in the local data.
- data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
- data.vote = d.value;
- div.data('comment', data);
-
- // Change the rating text.
- div.find('.rating:first')
- .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
-
- // Send the vote information to the server.
- $.ajax({
- type: "POST",
- url: opts.processVoteURL,
- data: d,
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem casting that vote.');
- }
- });
- }
-
- /**
- * Open a reply form used to reply to an existing comment.
- */
- function openReply(id) {
- // Swap out the reply link for the hide link
- $('#rl' + id).hide();
- $('#cr' + id).show();
-
- // Add the reply li to the children ul.
- var div = $(renderTemplate(replyTemplate, {id: id})).hide();
- $('#cl' + id)
- .prepend(div)
- // Setup the submit handler for the reply form.
- .find('#rf' + id)
- .submit(function(event) {
- event.preventDefault();
- addComment($('#rf' + id));
- closeReply(id);
- })
- .find('input[type=button]')
- .click(function() {
- closeReply(id);
- });
- div.slideDown('fast', function() {
- $('#rf' + id).find('textarea').focus();
- });
- }
-
- /**
- * Close the reply form opened with openReply.
- */
- function closeReply(id) {
- // Remove the reply div from the DOM.
- $('#rd' + id).slideUp('fast', function() {
- $(this).remove();
- });
-
- // Swap out the hide link for the reply link
- $('#cr' + id).hide();
- $('#rl' + id).show();
- }
-
- /**
- * Recursively sort a tree of comments using the comp comparator.
- */
- function sortComments(comments) {
- comments.sort(comp);
- $.each(comments, function() {
- this.children = sortComments(this.children);
- });
- return comments;
- }
-
- /**
- * Get the children comments from a ul. If recursive is true,
- * recursively include childrens' children.
- */
- function getChildren(ul, recursive) {
- var children = [];
- ul.children().children("[id^='cd']")
- .each(function() {
- var comment = $(this).data('comment');
- if (recursive)
- comment.children = getChildren($(this).find('#cl' + comment.id), true);
- children.push(comment);
- });
- return children;
- }
-
- /** Create a div to display a comment in. */
- function createCommentDiv(comment) {
- if (!comment.displayed && !opts.moderator) {
- return $('<div class="moderate">Thank you! Your comment will show up '
- + 'once it is has been approved by a moderator.</div>');
- }
- // Prettify the comment rating.
- comment.pretty_rating = comment.rating + ' point' +
- (comment.rating == 1 ? '' : 's');
- // Make a class (for displaying not yet moderated comments differently)
- comment.css_class = comment.displayed ? '' : ' moderate';
- // Create a div for this comment.
- var context = $.extend({}, opts, comment);
- var div = $(renderTemplate(commentTemplate, context));
-
- // If the user has voted on this comment, highlight the correct arrow.
- if (comment.vote) {
- var direction = (comment.vote == 1) ? 'u' : 'd';
- div.find('#' + direction + 'v' + comment.id).hide();
- div.find('#' + direction + 'u' + comment.id).show();
- }
-
- if (opts.moderator || comment.text != '[deleted]') {
- div.find('a.reply').show();
- if (comment.proposal_diff)
- div.find('#sp' + comment.id).show();
- if (opts.moderator && !comment.displayed)
- div.find('#cm' + comment.id).show();
- if (opts.moderator || (opts.username == comment.username))
- div.find('#dc' + comment.id).show();
- }
- return div;
- }
-
- /**
- * A simple template renderer. Placeholders such as <%id%> are replaced
- * by context['id'] with items being escaped. Placeholders such as <#id#>
- * are not escaped.
- */
- function renderTemplate(template, context) {
- var esc = $(document.createElement('div'));
-
- function handle(ph, escape) {
- var cur = context;
- $.each(ph.split('.'), function() {
- cur = cur[this];
- });
- return escape ? esc.text(cur || "").html() : cur;
- }
-
- return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
- return handle(arguments[2], arguments[1] == '%' ? true : false);
- });
- }
-
- /** Flash an error message briefly. */
- function showError(message) {
- $(document.createElement('div')).attr({'class': 'popup-error'})
- .append($(document.createElement('div'))
- .attr({'class': 'error-message'}).text(message))
- .appendTo('body')
- .fadeIn("slow")
- .delay(2000)
- .fadeOut("slow");
- }
-
- /** Add a link the user uses to open the comments popup. */
- $.fn.comment = function() {
- return this.each(function() {
- var id = $(this).attr('id').substring(1);
- var count = COMMENT_METADATA[id];
- var title = count + ' comment' + (count == 1 ? '' : 's');
- var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
- var addcls = count == 0 ? ' nocomment' : '';
- $(this)
- .append(
- $(document.createElement('a')).attr({
- href: '#',
- 'class': 'sphinx-comment-open' + addcls,
- id: 'ao' + id
- })
- .append($(document.createElement('img')).attr({
- src: image,
- alt: 'comment',
- title: title
- }))
- .click(function(event) {
- event.preventDefault();
- show($(this).attr('id').substring(2));
- })
- )
- .append(
- $(document.createElement('a')).attr({
- href: '#',
- 'class': 'sphinx-comment-close hidden',
- id: 'ah' + id
- })
- .append($(document.createElement('img')).attr({
- src: opts.closeCommentImage,
- alt: 'close',
- title: 'close'
- }))
- .click(function(event) {
- event.preventDefault();
- hide($(this).attr('id').substring(2));
- })
- );
- });
- };
-
- var opts = {
- processVoteURL: '/_process_vote',
- addCommentURL: '/_add_comment',
- getCommentsURL: '/_get_comments',
- acceptCommentURL: '/_accept_comment',
- deleteCommentURL: '/_delete_comment',
- commentImage: '/static/_static/comment.png',
- closeCommentImage: '/static/_static/comment-close.png',
- loadingImage: '/static/_static/ajax-loader.gif',
- commentBrightImage: '/static/_static/comment-bright.png',
- upArrow: '/static/_static/up.png',
- downArrow: '/static/_static/down.png',
- upArrowPressed: '/static/_static/up-pressed.png',
- downArrowPressed: '/static/_static/down-pressed.png',
- voting: false,
- moderator: false
- };
-
- if (typeof COMMENT_OPTIONS != "undefined") {
- opts = jQuery.extend(opts, COMMENT_OPTIONS);
- }
-
- var popupTemplate = '\
- <div class="sphinx-comments" id="sc<%id%>">\
- <p class="sort-options">\
- Sort by:\
- <a href="#" class="sort-option byrating">best rated</a>\
- <a href="#" class="sort-option byascage">newest</a>\
- <a href="#" class="sort-option byage">oldest</a>\
- </p>\
- <div class="comment-header">Comments</div>\
- <div class="comment-loading" id="cn<%id%>">\
- loading comments... <img src="<%loadingImage%>" alt="" /></div>\
- <ul id="cl<%id%>" class="comment-ul"></ul>\
- <div id="ca<%id%>">\
- <p class="add-a-comment">Add a comment\
- (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
- <div class="comment-markup-box" id="mb<%id%>">\
- reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
- <code>``code``</code>, \
- code blocks: <code>::</code> and an indented block after blank line</div>\
- <form method="post" id="cf<%id%>" class="comment-form" action="">\
- <textarea name="comment" cols="80"></textarea>\
- <p class="propose-button">\
- <a href="#" id="pc<%id%>" class="show-propose-change">\
- Propose a change &#9657;\
- </a>\
- <a href="#" id="hc<%id%>" class="hide-propose-change">\
- Propose a change &#9663;\
- </a>\
- </p>\
- <textarea name="proposal" id="pt<%id%>" cols="80"\
- spellcheck="false"></textarea>\
- <input type="submit" value="Add comment" />\
- <input type="hidden" name="node" value="<%id%>" />\
- <input type="hidden" name="parent" value="" />\
- </form>\
- </div>\
- </div>';
-
- var commentTemplate = '\
- <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
- <div class="vote">\
- <div class="arrow">\
- <a href="#" id="uv<%id%>" class="vote" title="vote up">\
- <img src="<%upArrow%>" />\
- </a>\
- <a href="#" id="uu<%id%>" class="un vote" title="vote up">\
- <img src="<%upArrowPressed%>" />\
- </a>\
- </div>\
- <div class="arrow">\
- <a href="#" id="dv<%id%>" class="vote" title="vote down">\
- <img src="<%downArrow%>" id="da<%id%>" />\
- </a>\
- <a href="#" id="du<%id%>" class="un vote" title="vote down">\
- <img src="<%downArrowPressed%>" />\
- </a>\
- </div>\
- </div>\
- <div class="comment-content">\
- <p class="tagline comment">\
- <span class="user-id"><%username%></span>\
- <span class="rating"><%pretty_rating%></span>\
- <span class="delta"><%time.delta%></span>\
- </p>\
- <div class="comment-text comment"><#text#></div>\
- <p class="comment-opts comment">\
- <a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
- <a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
- <a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
- <a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
- <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
- <span id="cm<%id%>" class="moderation hidden">\
- <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
- </span>\
- </p>\
- <pre class="proposal" id="pr<%id%>">\
-<#proposal_diff#>\
- </pre>\
- <ul class="comment-children" id="cl<%id%>"></ul>\
- </div>\
- <div class="clearleft"></div>\
- </div>\
- </div>';
-
- var replyTemplate = '\
- <li>\
- <div class="reply-div" id="rd<%id%>">\
- <form id="rf<%id%>">\
- <textarea name="comment" cols="80"></textarea>\
- <input type="submit" value="Add reply" />\
- <input type="button" value="Cancel" />\
- <input type="hidden" name="parent" value="<%id%>" />\
- <input type="hidden" name="node" value="" />\
- </form>\
- </div>\
- </li>';
-
- $(document).ready(function() {
- init();
- });
-})(jQuery);
-
-$(document).ready(function() {
- // add comment anchors for all paragraphs that are commentable
- $('.sphinx-has-comment').comment();
-
- // highlight search words in search results
- $("div.context").each(function() {
- var params = $.getQueryParameters();
- var terms = (params.q) ? params.q[0].split(/\s+/) : [];
- var result = $(this);
- $.each(terms, function() {
- result.highlightText(this.toLowerCase(), 'highlighted');
- });
- });
-
- // directly open comment window if requested
- var anchor = document.location.hash;
- if (anchor.substring(0, 9) == '#comment-') {
- $('#ao' + anchor.substring(9)).click();
- document.location.hash = '#s' + anchor.substring(9);
- }
-});
diff --git a/sites/www/_build.orig/changelog.html b/sites/www/_build.orig/changelog.html
deleted file mode 100644
index a759a104..00000000
--- a/sites/www/_build.orig/changelog.html
+++ /dev/null
@@ -1,1250 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Changelog &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
- <link rel="next" title="Frequently Asked/Answered Questions" href="faq.html" />
- <link rel="prev" title="Welcome to Paramiko!" href="index.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="changelog">
-<h1>Changelog<a class="headerlink" href="#changelog" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="Next 2.x bugfix release">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/master">Next 2.x bugfix release</a></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/758">#758</a><span>:</span> Apply type definitions to <code class="docutils literal"><span class="pre">_winapi</span></code> module from
-<a class="reference external" href="https://github.com/jaraco/jaraco.windows">jaraco.windows</a> 3.6.1. This
-should address issues on Windows platforms that often result in errors like
-<code class="docutils literal"><span class="pre">ArgumentError:</span> <span class="pre">[...]</span> <span class="pre">int</span> <span class="pre">too</span> <span class="pre">long</span> <span class="pre">to</span> <span class="pre">convert</span></code>. Thanks to <code class="docutils literal"><span class="pre">&#64;swohlerLL</span></code>
-for the report and Jason R. Coombs for the patch.</li>
-</ul>
-</div>
-<div class="section" id="Next 1.x bugfix release">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/master">Next 1.x bugfix release</a></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/758">#758</a><span>:</span> Apply type definitions to <code class="docutils literal"><span class="pre">_winapi</span></code> module from
-<a class="reference external" href="https://github.com/jaraco/jaraco.windows">jaraco.windows</a> 3.6.1. This
-should address issues on Windows platforms that often result in errors like
-<code class="docutils literal"><span class="pre">ArgumentError:</span> <span class="pre">[...]</span> <span class="pre">int</span> <span class="pre">too</span> <span class="pre">long</span> <span class="pre">to</span> <span class="pre">convert</span></code>. Thanks to <code class="docutils literal"><span class="pre">&#64;swohlerLL</span></code>
-for the report and Jason R. Coombs for the patch.</li>
-</ul>
-</div>
-<div class="section" id="2.0.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/2.0.1">2.0.1</a> <span style="font-size: 75%;">2016-06-21</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/537">#537</a><span>:</span> Fix a bug in <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/buffered_pipe.html#paramiko.buffered_pipe.BufferedPipe.set_event" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BufferedPipe.set_event</span></code></a> which could cause
-deadlocks/hangs when one uses <a class="reference external" href="https://docs.python.org/2.6/library/select.html#select.select" title="(in Python v2.6)"><code class="xref py py-obj docutils literal"><span class="pre">select.select</span></code></a> against
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel</span></code></a> objects (or otherwise calls <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel.fileno" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel.fileno</span></code></a> after the channel has closed). Thanks to
-Przemysław Strzelczak for the report &amp; reproduction case, and to Krzysztof
-Rusek for the fix.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/520">#520</a><span>:</span> (Partial fix) Fix at least one instance of race condition
-driven threading hangs at end of the Python interpreter session. (Includes a
-docs update as well - always make sure to <code class="docutils literal"><span class="pre">.close()</span></code> your clients!)</li>
-</ul>
-</div>
-<div class="section" id="1.17.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.17.1">1.17.1</a> <span style="font-size: 75%;">2016-06-21</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/537">#537</a><span>:</span> Fix a bug in <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/buffered_pipe.html#paramiko.buffered_pipe.BufferedPipe.set_event" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BufferedPipe.set_event</span></code></a> which could cause
-deadlocks/hangs when one uses <a class="reference external" href="https://docs.python.org/2.6/library/select.html#select.select" title="(in Python v2.6)"><code class="xref py py-obj docutils literal"><span class="pre">select.select</span></code></a> against
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel</span></code></a> objects (or otherwise calls <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel.fileno" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel.fileno</span></code></a> after the channel has closed). Thanks to
-Przemysław Strzelczak for the report &amp; reproduction case, and to Krzysztof
-Rusek for the fix.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/520">#520</a><span>:</span> (Partial fix) Fix at least one instance of race condition
-driven threading hangs at end of the Python interpreter session. (Includes a
-docs update as well - always make sure to <code class="docutils literal"><span class="pre">.close()</span></code> your clients!)</li>
-</ul>
-</div>
-<div class="section" id="1.16.2">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.16.2">1.16.2</a> <span style="font-size: 75%;">2016-06-21</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/537">#537</a><span>:</span> Fix a bug in <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/buffered_pipe.html#paramiko.buffered_pipe.BufferedPipe.set_event" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BufferedPipe.set_event</span></code></a> which could cause
-deadlocks/hangs when one uses <a class="reference external" href="https://docs.python.org/2.6/library/select.html#select.select" title="(in Python v2.6)"><code class="xref py py-obj docutils literal"><span class="pre">select.select</span></code></a> against
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel</span></code></a> objects (or otherwise calls <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel.fileno" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel.fileno</span></code></a> after the channel has closed). Thanks to
-Przemysław Strzelczak for the report &amp; reproduction case, and to Krzysztof
-Rusek for the fix.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/520">#520</a><span>:</span> (Partial fix) Fix at least one instance of race condition
-driven threading hangs at end of the Python interpreter session. (Includes a
-docs update as well - always make sure to <code class="docutils literal"><span class="pre">.close()</span></code> your clients!)</li>
-</ul>
-</div>
-<div class="section" id="2.0.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/2.0.0">2.0.0</a> <span style="font-size: 75%;">2016-04-28</span></h2><ul>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/394">#394</a><span>:</span> Replace PyCrypto with the Python Cryptographic Authority
-(PyCA) &#8216;Cryptography&#8217; library suite. This improves security, installability,
-and performance; adds PyPy support; and much more.</p>
-<p>There aren&#8217;t enough ways to thank Alex Gaynor for all of his work on this,
-and then his patience while the maintainer let his PR grow moss for a year
-and change. Paul Kehrer came in with an assist, and I think I saw Olle
-Lundberg, <code class="docutils literal"><span class="pre">&#64;techtonik</span></code> and <code class="docutils literal"><span class="pre">&#64;johnthagen</span></code> supplying backup as well. Thanks
-to all!</p>
-<div class="admonition warning">
-<p class="first admonition-title">Warning</p>
-<p><strong>This is a backwards incompatible change.</strong></p>
-<p>However, <strong>it should only affect installation</strong> requirements; <strong>no API
-changes are intended or expected</strong>. Please report any such breakages as
-bugs.</p>
-<p class="last">See our updated <a class="reference internal" href="installing.html"><span class="doc">installation docs</span></a> for details on what
-is now required to install Paramiko; many/most users should be able to
-simply <code class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-U</span> <span class="pre">paramiko</span></code> (especially if you <strong>upgrade to pip
-8</strong>).</p>
-</div>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/731">#731</a><span>:</span> (working off the earlier <a class="reference external" href="https://github.com/paramiko/paramiko/issues/611">#611</a>) Add support for 384-
-and 512-bit elliptic curve groups in ECDSA key types (aka
-<code class="docutils literal"><span class="pre">ecdsa-sha2-nistp384</span></code> / <code class="docutils literal"><span class="pre">ecdsa-sha2-nistp521</span></code>). Thanks to Michiel Tiller
-and <code class="docutils literal"><span class="pre">&#64;CrazyCasta</span></code> for the patches.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="1.17.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.17.0">1.17.0</a> <span style="font-size: 75%;">2016-04-28</span></h2><ul class="simple">
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/588">#588</a><span>:</span> Add missing file-like object methods for
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BufferedFile</span></code></a> and <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/sftp.html#paramiko.sftp_file.SFTPFile" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">SFTPFile</span></code></a>. Thanks to
-Adam Meily for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/649">#649</a><span>:</span> Update the module in charge of handling SSH moduli
-so it&#8217;s consistent with OpenSSH behavior re: prime number selection. Thanks
-to Damien Tournoud for catch &amp; patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/636">#636</a><span>:</span> Clean up and enhance the README (and
-rename it to <code class="docutils literal"><span class="pre">README.rst</span></code> from just <code class="docutils literal"><span class="pre">README</span></code>). Thanks to <code class="docutils literal"><span class="pre">&#64;LucasRMehl</span></code>.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/697">#697</a><span>:</span> Remove whitespace in our
-<code class="docutils literal"><span class="pre">setup.py</span></code>&#8216;s <code class="docutils literal"><span class="pre">install_requires</span></code> as it triggers occasional bugs in some
-versions of <code class="docutils literal"><span class="pre">setuptools</span></code>. Thanks to Justin Lecher for catch &amp; original
-patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/612">#612</a><span>:</span> Identify &amp; work around a race
-condition in the test for handshake timeouts, which was causing frequent test
-failures for a subset of contributors as well as Travis-CI (usually, but not
-always, limited to Python 3.5). Props to Ed Kellett for assistance during
-some of the troubleshooting.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/621">#621</a><span>:</span> Annotate some public attributes on
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel</span></code></a> such as <code class="docutils literal"><span class="pre">.closed</span></code>. Thanks to Sergey Vasilyev
-for the report.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/729">#729</a><span>:</span> Clean up <code class="docutils literal"><span class="pre">setup.py</span></code> to always use
-<code class="docutils literal"><span class="pre">setuptools</span></code>, not doing so was a historical artifact from bygone days.
-Thanks to Alex Gaynor.</li>
-</ul>
-</div>
-<div class="section" id="1.16.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.16.1">1.16.1</a> <span style="font-size: 75%;">2016-04-28</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/652">#652</a><span>:</span> Fix behavior of <code class="docutils literal"><span class="pre">gssapi-with-mic</span></code> auth requests so they fail
-gracefully (allowing followup via other auth methods) instead of raising an
-exception. Patch courtesy of <code class="docutils literal"><span class="pre">&#64;jamercee</span></code>.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/499">#499</a><span>:</span> Strip trailing/leading whitespace from lines when parsing SSH
-config files - this brings things in line with OpenSSH behavior. Thanks to
-Alfredo Esteban for the original report and Nick Pillitteri for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/632">#632</a><span>:</span> Fix logic bug in the SFTP client&#8217;s callback-calling functionality;
-previously there was a chance the given callback would fire twice at the end
-of a transfer. Thanks to <code class="docutils literal"><span class="pre">&#64;ab9-er</span></code> for catch &amp; original patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/613">#613</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/619">#619</a>) Update to <code class="docutils literal"><span class="pre">jaraco.windows</span></code> 3.4.1 to fix some
-errors related to <code class="docutils literal"><span class="pre">ctypes</span></code> on Windows platforms. Credit to Jason R. Coombs.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/617">#617</a><span>:</span> (aka <a class="reference external" href="https://github.com/fabric/fabric/issues/1429">fabric/fabric#1429</a>; via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/679">#679</a>; related:
-<a class="reference external" href="https://github.com/paramiko/paramiko/issues/678">#678</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/685">#685</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/615">#615</a> &amp; <a class="reference external" href="https://github.com/paramiko/paramiko/issues/616">#616</a>) Fix up
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.NoValidConnectionsError" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">NoValidConnectionsError</span></code></a> so it pickles correctly,
-and fix a related Python 3 compatibility issue. Thanks to Rebecca Schlussel
-for the report &amp; Marius Gedminas for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/716">#716</a><span>:</span> Fix a Python 3 compatibility issue when handling two-factor
-authentication. Thanks to Mateusz Kowalski for the catch &amp; original patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/577">#577</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/578">#578</a>; should also fix <a class="reference external" href="https://github.com/paramiko/paramiko/issues/718">#718</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/560">#560</a>) Fix
-stalled/hung SFTP downloads by cleaning up some threading lock issues. Thanks
-to Stephen C. Pope for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/676">#676</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/677">#677</a>) Fix a backwards incompatibility issue that
-cropped up in <code class="xref py py-obj docutils literal"><span class="pre">SFTPFile.prefetch</span></code> re: the
-erroneously non-optional <code class="docutils literal"><span class="pre">file_size</span></code> parameter. Should only affect users
-who manually call <code class="docutils literal"><span class="pre">prefetch</span></code>. Thanks to <code class="docutils literal"><span class="pre">&#64;stevevanhooser</span></code> for catch &amp;
-patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/670">#670</a><span>:</span> Due to an earlier bugfix, less-specific <code class="docutils literal"><span class="pre">Host</span></code> blocks&#8217;
-<code class="docutils literal"><span class="pre">ProxyCommand</span></code> values were overriding <code class="docutils literal"><span class="pre">ProxyCommand</span> <span class="pre">none</span></code> in
-more-specific <code class="docutils literal"><span class="pre">Host</span></code> blocks. This has been fixed in a backwards compatible
-manner (i.e. <code class="docutils literal"><span class="pre">ProxyCommand</span> <span class="pre">none</span></code> continues to appear as a total lack of any
-<code class="docutils literal"><span class="pre">proxycommand</span></code> key in parsed config structures). Thanks to Pat Brisbin for
-the catch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/636">#636</a><span>:</span> Clean up and enhance the README (and
-rename it to <code class="docutils literal"><span class="pre">README.rst</span></code> from just <code class="docutils literal"><span class="pre">README</span></code>). Thanks to <code class="docutils literal"><span class="pre">&#64;LucasRMehl</span></code>.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/697">#697</a><span>:</span> Remove whitespace in our
-<code class="docutils literal"><span class="pre">setup.py</span></code>&#8216;s <code class="docutils literal"><span class="pre">install_requires</span></code> as it triggers occasional bugs in some
-versions of <code class="docutils literal"><span class="pre">setuptools</span></code>. Thanks to Justin Lecher for catch &amp; original
-patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/612">#612</a><span>:</span> Identify &amp; work around a race
-condition in the test for handshake timeouts, which was causing frequent test
-failures for a subset of contributors as well as Travis-CI (usually, but not
-always, limited to Python 3.5). Props to Ed Kellett for assistance during
-some of the troubleshooting.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/621">#621</a><span>:</span> Annotate some public attributes on
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel</span></code></a> such as <code class="docutils literal"><span class="pre">.closed</span></code>. Thanks to Sergey Vasilyev
-for the report.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/729">#729</a><span>:</span> Clean up <code class="docutils literal"><span class="pre">setup.py</span></code> to always use
-<code class="docutils literal"><span class="pre">setuptools</span></code>, not doing so was a historical artifact from bygone days.
-Thanks to Alex Gaynor.</li>
-</ul>
-</div>
-<div class="section" id="1.15.5">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.15.5">1.15.5</a> <span style="font-size: 75%;">2016-04-28</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/401">#401</a><span>:</span> Fix line number reporting in log output regarding invalid
-<code class="docutils literal"><span class="pre">known_hosts</span></code> line entries. Thanks to Dylan Thacker-Smith for catch &amp;
-patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/652">#652</a><span>:</span> Fix behavior of <code class="docutils literal"><span class="pre">gssapi-with-mic</span></code> auth requests so they fail
-gracefully (allowing followup via other auth methods) instead of raising an
-exception. Patch courtesy of <code class="docutils literal"><span class="pre">&#64;jamercee</span></code>.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/499">#499</a><span>:</span> Strip trailing/leading whitespace from lines when parsing SSH
-config files - this brings things in line with OpenSSH behavior. Thanks to
-Alfredo Esteban for the original report and Nick Pillitteri for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/632">#632</a><span>:</span> Fix logic bug in the SFTP client&#8217;s callback-calling functionality;
-previously there was a chance the given callback would fire twice at the end
-of a transfer. Thanks to <code class="docutils literal"><span class="pre">&#64;ab9-er</span></code> for catch &amp; original patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/613">#613</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/619">#619</a>) Update to <code class="docutils literal"><span class="pre">jaraco.windows</span></code> 3.4.1 to fix some
-errors related to <code class="docutils literal"><span class="pre">ctypes</span></code> on Windows platforms. Credit to Jason R. Coombs.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/617">#617</a><span>:</span> (aka <a class="reference external" href="https://github.com/fabric/fabric/issues/1429">fabric/fabric#1429</a>; via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/679">#679</a>; related:
-<a class="reference external" href="https://github.com/paramiko/paramiko/issues/678">#678</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/685">#685</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/615">#615</a> &amp; <a class="reference external" href="https://github.com/paramiko/paramiko/issues/616">#616</a>) Fix up
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.NoValidConnectionsError" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">NoValidConnectionsError</span></code></a> so it pickles correctly,
-and fix a related Python 3 compatibility issue. Thanks to Rebecca Schlussel
-for the report &amp; Marius Gedminas for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/716">#716</a><span>:</span> Fix a Python 3 compatibility issue when handling two-factor
-authentication. Thanks to Mateusz Kowalski for the catch &amp; original patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/577">#577</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/578">#578</a>; should also fix <a class="reference external" href="https://github.com/paramiko/paramiko/issues/718">#718</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/560">#560</a>) Fix
-stalled/hung SFTP downloads by cleaning up some threading lock issues. Thanks
-to Stephen C. Pope for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/676">#676</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/677">#677</a>) Fix a backwards incompatibility issue that
-cropped up in <code class="xref py py-obj docutils literal"><span class="pre">SFTPFile.prefetch</span></code> re: the
-erroneously non-optional <code class="docutils literal"><span class="pre">file_size</span></code> parameter. Should only affect users
-who manually call <code class="docutils literal"><span class="pre">prefetch</span></code>. Thanks to <code class="docutils literal"><span class="pre">&#64;stevevanhooser</span></code> for catch &amp;
-patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/670">#670</a><span>:</span> Due to an earlier bugfix, less-specific <code class="docutils literal"><span class="pre">Host</span></code> blocks&#8217;
-<code class="docutils literal"><span class="pre">ProxyCommand</span></code> values were overriding <code class="docutils literal"><span class="pre">ProxyCommand</span> <span class="pre">none</span></code> in
-more-specific <code class="docutils literal"><span class="pre">Host</span></code> blocks. This has been fixed in a backwards compatible
-manner (i.e. <code class="docutils literal"><span class="pre">ProxyCommand</span> <span class="pre">none</span></code> continues to appear as a total lack of any
-<code class="docutils literal"><span class="pre">proxycommand</span></code> key in parsed config structures). Thanks to Pat Brisbin for
-the catch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/525">#525</a><span>:</span> Update the vendored Windows API addon to a more
-recent edition. Also fixes <a class="reference external" href="https://github.com/paramiko/paramiko/issues/193">#193</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/488">#488</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/498">#498</a>. Thanks
-to Jason Coombs.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/636">#636</a><span>:</span> Clean up and enhance the README (and
-rename it to <code class="docutils literal"><span class="pre">README.rst</span></code> from just <code class="docutils literal"><span class="pre">README</span></code>). Thanks to <code class="docutils literal"><span class="pre">&#64;LucasRMehl</span></code>.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/697">#697</a><span>:</span> Remove whitespace in our
-<code class="docutils literal"><span class="pre">setup.py</span></code>&#8216;s <code class="docutils literal"><span class="pre">install_requires</span></code> as it triggers occasional bugs in some
-versions of <code class="docutils literal"><span class="pre">setuptools</span></code>. Thanks to Justin Lecher for catch &amp; original
-patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/612">#612</a><span>:</span> Identify &amp; work around a race
-condition in the test for handshake timeouts, which was causing frequent test
-failures for a subset of contributors as well as Travis-CI (usually, but not
-always, limited to Python 3.5). Props to Ed Kellett for assistance during
-some of the troubleshooting.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/621">#621</a><span>:</span> Annotate some public attributes on
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel</span></code></a> such as <code class="docutils literal"><span class="pre">.closed</span></code>. Thanks to Sergey Vasilyev
-for the report.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/729">#729</a><span>:</span> Clean up <code class="docutils literal"><span class="pre">setup.py</span></code> to always use
-<code class="docutils literal"><span class="pre">setuptools</span></code>, not doing so was a historical artifact from bygone days.
-Thanks to Alex Gaynor.</li>
-</ul>
-</div>
-<div class="section" id="1.16.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.16.0">1.16.0</a> <span style="font-size: 75%;">2015-11-04</span></h2><ul>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/167">#167</a><span>:</span> Add <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/config.html#paramiko.config.SSHConfig.get_hostnames" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">get_hostnames</span></code></a> for easier
-introspection of a loaded SSH config file or object. Courtesy of Søren
-Løvborg.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/356">#356</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/596">#596</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/365">#365</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/341">#341</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/164">#164</a>,
-<a class="reference external" href="https://github.com/paramiko/paramiko/issues/581">#581</a>, and a bunch of other duplicates besides) Add support for SHA-2
-based key exchange (kex) algorithm <code class="docutils literal"><span class="pre">diffie-hellman-group-exchange-sha256</span></code>
-and (H)MAC algorithms <code class="docutils literal"><span class="pre">hmac-sha2-256</span></code> and <code class="docutils literal"><span class="pre">hmac-sha2-512</span></code>.</p>
-<p>This change includes tweaks to debug-level logging regarding
-algorithm-selection handshakes; the old all-in-one log line is now multiple
-easier-to-read, printed-at-handshake-time log lines.</p>
-<p>Thanks to the many people who submitted patches for this functionality and/or
-assisted in testing those patches. That list includes but is not limited to,
-and in no particular order: Matthias Witte, Dag Wieers, Ash Berlin, Etienne
-Perot, Gert van Dijk, <code class="docutils literal"><span class="pre">&#64;GuyShaanan</span></code>, Aaron Bieber, <code class="docutils literal"><span class="pre">&#64;cyphase</span></code>, and Eric
-Brown.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/604">#604</a><span>:</span> Add support for the <code class="docutils literal"><span class="pre">aes192-ctr</span></code> and <code class="docutils literal"><span class="pre">aes192-cbc</span></code> ciphers.
-Thanks to Michiel Tiller for noticing it was as easy as tweaking some key
-sizes :D</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/467">#467</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/139">#139</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/412">#412</a>) Fully enable two-factor
-authentication (e.g. when a server requires <code class="docutils literal"><span class="pre">AuthenticationMethods</span>
-<span class="pre">pubkey,keyboard-interactive</span></code>). Thanks to <code class="docutils literal"><span class="pre">&#64;perryjrandall</span></code> for the patch
-and to <code class="docutils literal"><span class="pre">&#64;nevins-b</span></code> and Matt Robenolt for additional support.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/22">#22</a><span>:</span> Try harder to connect to multiple network families (e.g. IPv4
-vs IPv6) in case of connection issues; this helps with problems such as hosts
-which resolve both IPv4 and IPv6 addresses but are only listening on IPv4.
-Thanks to Dries Desmet for original report and Torsten Landschoff for the
-foundational patchset.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/502">#502</a><span>:</span> Fix &#8216;exec&#8217; requests in server mode to use <code class="docutils literal"><span class="pre">get_string</span></code>
-instead of <code class="docutils literal"><span class="pre">get_text</span></code> to avoid <code class="docutils literal"><span class="pre">UnicodeDecodeError</span></code> on non-UTF-8 input.
-Thanks to Anselm Kruis for the patch &amp; discussion.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/194">#194</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/562">#562</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/530">#530</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/576">#576</a>) Streamline
-use of <code class="docutils literal"><span class="pre">stat</span></code> when downloading SFTP files via <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/sftp.html#paramiko.sftp_client.SFTPClient.get" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">SFTPClient.get</span></code></a>; this avoids triggering bugs in some
-off-spec SFTP servers such as IBM Sterling. Thanks to <code class="docutils literal"><span class="pre">&#64;muraleee</span></code> for the
-initial report and to Torkil Gustavsen for the patch.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/419">#419</a><span>:</span> Modernize a bunch of the codebase internals to
-leverage decorators. Props to <code class="docutils literal"><span class="pre">&#64;beckjake</span></code> for realizing we&#8217;re no longer on
-Python 2.2 :D</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/421">#421</a><span>:</span> Modernize threading calls to use newer API. Thanks
-to Olle Lundberg.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/422">#422</a><span>:</span> Clean up some unused imports. Courtesy of Olle
-Lundberg.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/431">#431</a><span>:</span> Replace handrolled <code class="docutils literal"><span class="pre">ssh_config</span></code> parsing code with
-use of the <code class="docutils literal"><span class="pre">shlex</span></code> module. Thanks to Yan Kalchevskiy.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/582">#582</a><span>:</span> Fix some old <code class="docutils literal"><span class="pre">setup.py</span></code> related helper code which was
-breaking <code class="docutils literal"><span class="pre">bdist_dumb</span></code> on Mac OS X. Thanks to Peter Odding for the patch.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/516">#516</a><span>:</span> Document <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/agent.html#paramiko.agent.AgentRequestHandler" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">AgentRequestHandler</span></code></a>.
-Thanks to <code class="docutils literal"><span class="pre">&#64;toejough</span></code> for report &amp; suggestions.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/554">#554</a><span>:</span> Fix inaccuracies in the docstring for the ECDSA key
-class. Thanks to Jared Hance for the patch.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/594">#594</a><span>:</span> Correct some post-Python3-port docstrings to
-specify <code class="docutils literal"><span class="pre">bytes</span></code> type instead of <code class="docutils literal"><span class="pre">str</span></code>. Credit to <code class="docutils literal"><span class="pre">&#64;redixin</span></code>.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/525">#525</a><span>:</span> Update the vendored Windows API addon to a more
-recent edition. Also fixes <a class="reference external" href="https://github.com/paramiko/paramiko/issues/193">#193</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/488">#488</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/498">#498</a>. Thanks
-to Jason Coombs.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="1.15.4">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.15.4">1.15.4</a> <span style="font-size: 75%;">2015-11-02</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/565">#565</a><span>:</span> Don&#8217;t explode with <code class="docutils literal"><span class="pre">IndexError</span></code> when reading private key files
-lacking an <code class="docutils literal"><span class="pre">-----END</span> <span class="pre">&lt;type&gt;</span> <span class="pre">PRIVATE</span> <span class="pre">KEY-----</span></code> footer. Patch courtesy of
-Prasanna Santhanam.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/359">#359</a><span>:</span> Use correct attribute name when trying to use Python 3&#8217;s
-<code class="docutils literal"><span class="pre">int.bit_length</span></code> method; prior to fix, the Python 2 custom fallback
-implementation was always used, even on Python 3. Thanks to Alex Gaynor.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/366">#366</a><span>:</span> Fix <code class="xref py py-obj docutils literal"><span class="pre">SFTPAttributes</span></code> so its string
-representation doesn&#8217;t raise exceptions on empty/initialized instances. Patch
-by Ulrich Petri.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/594">#594</a><span>:</span> Correct some post-Python3-port docstrings to
-specify <code class="docutils literal"><span class="pre">bytes</span></code> type instead of <code class="docutils literal"><span class="pre">str</span></code>. Credit to <code class="docutils literal"><span class="pre">&#64;redixin</span></code>.</li>
-</ul>
-</div>
-<div class="section" id="1.14.3">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.14.3">1.14.3</a> <span style="font-size: 75%;">2015-11-02</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/402">#402</a><span>:</span> Check to see if an SSH agent is actually present before trying to
-forward it to the remote end. This replaces what was usually a useless
-<code class="docutils literal"><span class="pre">TypeError</span></code> with a human-readable
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.AuthenticationException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">AuthenticationException</span></code></a>. Credit to Ken Jordan for
-the fix and Yvan Marques for original report.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/353">#353</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/482">#482</a>) Fix a bug introduced in the Python 3 port
-which caused <code class="docutils literal"><span class="pre">OverFlowError</span></code> (and other symptoms) in SFTP functionality.
-Thanks to <code class="docutils literal"><span class="pre">&#64;dboreham</span></code> for leading the troubleshooting charge, and to
-Scott Maxwell for the final patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/469">#469</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/488">#488</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/461">#461</a> and like a dozen others) Fix a
-typo introduced in the 1.15 release which broke WinPageant support. Thanks to
-everyone who submitted patches, and to Steve Cohen who was the lucky winner
-of the cherry-pick lottery.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/404">#404</a><span>:</span> Print details when displaying
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.BadHostKeyException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BadHostKeyException</span></code></a> objects (expected vs received
-data) instead of just &#8220;hey shit broke&#8221;. Patch credit: Loic Dachary.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/490">#490</a><span>:</span> Skip invalid/unparseable lines in <code class="docutils literal"><span class="pre">known_hosts</span></code> files, instead
-of raising <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.SSHException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">SSHException</span></code></a>. This brings Paramiko&#8217;s
-behavior more in line with OpenSSH, which silently ignores such input. Catch
-&amp; patch courtesy of Martin Topholm.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/491">#491</a><span>:</span> (combines <a class="reference external" href="https://github.com/paramiko/paramiko/issues/62">#62</a> and <a class="reference external" href="https://github.com/paramiko/paramiko/issues/439">#439</a>) Implement timeout
-functionality to address hangs from dropped network connections and/or failed
-handshakes. Credit to <code class="docutils literal"><span class="pre">&#64;vazir</span></code> and <code class="docutils literal"><span class="pre">&#64;dacut</span></code> for the original patches and
-to Olle Lundberg for reimplementation.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/565">#565</a><span>:</span> Don&#8217;t explode with <code class="docutils literal"><span class="pre">IndexError</span></code> when reading private key files
-lacking an <code class="docutils literal"><span class="pre">-----END</span> <span class="pre">&lt;type&gt;</span> <span class="pre">PRIVATE</span> <span class="pre">KEY-----</span></code> footer. Patch courtesy of
-Prasanna Santhanam.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/359">#359</a><span>:</span> Use correct attribute name when trying to use Python 3&#8217;s
-<code class="docutils literal"><span class="pre">int.bit_length</span></code> method; prior to fix, the Python 2 custom fallback
-implementation was always used, even on Python 3. Thanks to Alex Gaynor.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/366">#366</a><span>:</span> Fix <code class="xref py py-obj docutils literal"><span class="pre">SFTPAttributes</span></code> so its string
-representation doesn&#8217;t raise exceptions on empty/initialized instances. Patch
-by Ulrich Petri.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/516">#516</a><span>:</span> Document <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/agent.html#paramiko.agent.AgentRequestHandler" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">AgentRequestHandler</span></code></a>.
-Thanks to <code class="docutils literal"><span class="pre">&#64;toejough</span></code> for report &amp; suggestions.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/554">#554</a><span>:</span> Fix inaccuracies in the docstring for the ECDSA key
-class. Thanks to Jared Hance for the patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/594">#594</a><span>:</span> Correct some post-Python3-port docstrings to
-specify <code class="docutils literal"><span class="pre">bytes</span></code> type instead of <code class="docutils literal"><span class="pre">str</span></code>. Credit to <code class="docutils literal"><span class="pre">&#64;redixin</span></code>.</li>
-</ul>
-</div>
-<div class="section" id="1.13.4">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.13.4">1.13.4</a> <span style="font-size: 75%;">2015-11-02</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/402">#402</a><span>:</span> Check to see if an SSH agent is actually present before trying to
-forward it to the remote end. This replaces what was usually a useless
-<code class="docutils literal"><span class="pre">TypeError</span></code> with a human-readable
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.AuthenticationException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">AuthenticationException</span></code></a>. Credit to Ken Jordan for
-the fix and Yvan Marques for original report.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/353">#353</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/482">#482</a>) Fix a bug introduced in the Python 3 port
-which caused <code class="docutils literal"><span class="pre">OverFlowError</span></code> (and other symptoms) in SFTP functionality.
-Thanks to <code class="docutils literal"><span class="pre">&#64;dboreham</span></code> for leading the troubleshooting charge, and to
-Scott Maxwell for the final patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/469">#469</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/488">#488</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/461">#461</a> and like a dozen others) Fix a
-typo introduced in the 1.15 release which broke WinPageant support. Thanks to
-everyone who submitted patches, and to Steve Cohen who was the lucky winner
-of the cherry-pick lottery.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/404">#404</a><span>:</span> Print details when displaying
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.BadHostKeyException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BadHostKeyException</span></code></a> objects (expected vs received
-data) instead of just &#8220;hey shit broke&#8221;. Patch credit: Loic Dachary.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/490">#490</a><span>:</span> Skip invalid/unparseable lines in <code class="docutils literal"><span class="pre">known_hosts</span></code> files, instead
-of raising <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.SSHException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">SSHException</span></code></a>. This brings Paramiko&#8217;s
-behavior more in line with OpenSSH, which silently ignores such input. Catch
-&amp; patch courtesy of Martin Topholm.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/491">#491</a><span>:</span> (combines <a class="reference external" href="https://github.com/paramiko/paramiko/issues/62">#62</a> and <a class="reference external" href="https://github.com/paramiko/paramiko/issues/439">#439</a>) Implement timeout
-functionality to address hangs from dropped network connections and/or failed
-handshakes. Credit to <code class="docutils literal"><span class="pre">&#64;vazir</span></code> and <code class="docutils literal"><span class="pre">&#64;dacut</span></code> for the original patches and
-to Olle Lundberg for reimplementation.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/565">#565</a><span>:</span> Don&#8217;t explode with <code class="docutils literal"><span class="pre">IndexError</span></code> when reading private key files
-lacking an <code class="docutils literal"><span class="pre">-----END</span> <span class="pre">&lt;type&gt;</span> <span class="pre">PRIVATE</span> <span class="pre">KEY-----</span></code> footer. Patch courtesy of
-Prasanna Santhanam.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/359">#359</a><span>:</span> Use correct attribute name when trying to use Python 3&#8217;s
-<code class="docutils literal"><span class="pre">int.bit_length</span></code> method; prior to fix, the Python 2 custom fallback
-implementation was always used, even on Python 3. Thanks to Alex Gaynor.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/366">#366</a><span>:</span> Fix <code class="xref py py-obj docutils literal"><span class="pre">SFTPAttributes</span></code> so its string
-representation doesn&#8217;t raise exceptions on empty/initialized instances. Patch
-by Ulrich Petri.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/516">#516</a><span>:</span> Document <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/agent.html#paramiko.agent.AgentRequestHandler" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">AgentRequestHandler</span></code></a>.
-Thanks to <code class="docutils literal"><span class="pre">&#64;toejough</span></code> for report &amp; suggestions.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/554">#554</a><span>:</span> Fix inaccuracies in the docstring for the ECDSA key
-class. Thanks to Jared Hance for the patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/594">#594</a><span>:</span> Correct some post-Python3-port docstrings to
-specify <code class="docutils literal"><span class="pre">bytes</span></code> type instead of <code class="docutils literal"><span class="pre">str</span></code>. Credit to <code class="docutils literal"><span class="pre">&#64;redixin</span></code>.</li>
-</ul>
-</div>
-<div class="section" id="1.15.3">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.15.3">1.15.3</a> <span style="font-size: 75%;">2015-10-02</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/402">#402</a><span>:</span> Check to see if an SSH agent is actually present before trying to
-forward it to the remote end. This replaces what was usually a useless
-<code class="docutils literal"><span class="pre">TypeError</span></code> with a human-readable
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.AuthenticationException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">AuthenticationException</span></code></a>. Credit to Ken Jordan for
-the fix and Yvan Marques for original report.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/353">#353</a><span>:</span> (via <a class="reference external" href="https://github.com/paramiko/paramiko/issues/482">#482</a>) Fix a bug introduced in the Python 3 port
-which caused <code class="docutils literal"><span class="pre">OverFlowError</span></code> (and other symptoms) in SFTP functionality.
-Thanks to <code class="docutils literal"><span class="pre">&#64;dboreham</span></code> for leading the troubleshooting charge, and to
-Scott Maxwell for the final patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/469">#469</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/488">#488</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/461">#461</a> and like a dozen others) Fix a
-typo introduced in the 1.15 release which broke WinPageant support. Thanks to
-everyone who submitted patches, and to Steve Cohen who was the lucky winner
-of the cherry-pick lottery.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/404">#404</a><span>:</span> Print details when displaying
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.BadHostKeyException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BadHostKeyException</span></code></a> objects (expected vs received
-data) instead of just &#8220;hey shit broke&#8221;. Patch credit: Loic Dachary.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/490">#490</a><span>:</span> Skip invalid/unparseable lines in <code class="docutils literal"><span class="pre">known_hosts</span></code> files, instead
-of raising <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/ssh_exception.html#paramiko.ssh_exception.SSHException" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">SSHException</span></code></a>. This brings Paramiko&#8217;s
-behavior more in line with OpenSSH, which silently ignores such input. Catch
-&amp; patch courtesy of Martin Topholm.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/491">#491</a><span>:</span> (combines <a class="reference external" href="https://github.com/paramiko/paramiko/issues/62">#62</a> and <a class="reference external" href="https://github.com/paramiko/paramiko/issues/439">#439</a>) Implement timeout
-functionality to address hangs from dropped network connections and/or failed
-handshakes. Credit to <code class="docutils literal"><span class="pre">&#64;vazir</span></code> and <code class="docutils literal"><span class="pre">&#64;dacut</span></code> for the original patches and
-to Olle Lundberg for reimplementation.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/496">#496</a><span>:</span> Fix a handful of small but critical bugs in Paramiko&#8217;s
-GSSAPI support (note: this includes switching from PyCrypo&#8217;s Random to
-<a class="reference external" href="https://docs.python.org/2.6/library/os.html#os.urandom" title="(in Python v2.6)"><code class="xref py py-obj docutils literal"><span class="pre">os.urandom</span></code></a>). Thanks to Anselm Kruis for catch &amp; patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/516">#516</a><span>:</span> Document <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/agent.html#paramiko.agent.AgentRequestHandler" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">AgentRequestHandler</span></code></a>.
-Thanks to <code class="docutils literal"><span class="pre">&#64;toejough</span></code> for report &amp; suggestions.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/554">#554</a><span>:</span> Fix inaccuracies in the docstring for the ECDSA key
-class. Thanks to Jared Hance for the patch.</li>
-</ul>
-</div>
-<div class="section" id="1.15.2">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.15.2">1.15.2</a> <span style="font-size: 75%;">2014-12-19</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/320">#320</a><span>:</span> Update our win_pageant module to be Python 3 compatible. Thanks to
-<code class="docutils literal"><span class="pre">&#64;sherbang</span></code> and <code class="docutils literal"><span class="pre">&#64;adamkerz</span></code> for the patches.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/429">#429</a><span>:</span> Server-level debug message logging was overlooked during the
-Python 3 compatibility update; Python 3 clients attempting to log SSH debug
-packets encountered type errors. This is now fixed. Thanks to <code class="docutils literal"><span class="pre">&#64;mjmaenpaa</span></code>
-for the catch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/459">#459</a><span>:</span> Tighten up agent connection closure behavior to avoid spurious
-<code class="docutils literal"><span class="pre">ResourceWarning</span></code> display in some situations. Thanks to <code class="docutils literal"><span class="pre">&#64;tkrapp</span></code> for the
-catch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/266">#266</a><span>:</span> Change numbering of <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/transport.html#paramiko.transport.Transport" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Transport</span></code></a> channels to
-start at 0 instead of 1 for better compatibility with OpenSSH &amp; certain
-server implementations which break on 1-indexed channels. Thanks to
-<code class="docutils literal"><span class="pre">&#64;egroeper</span></code> for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/415">#415</a><span>:</span> Fix <code class="docutils literal"><span class="pre">ssh_config</span></code> parsing to correctly interpret <code class="docutils literal"><span class="pre">ProxyCommand</span>
-<span class="pre">none</span></code> as the lack of a proxy command, instead of as a literal command string
-of <code class="docutils literal"><span class="pre">&quot;none&quot;</span></code>. Thanks to Richard Spiers for the catch &amp; Sean Johnson for the
-fix.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/428">#428</a><span>:</span> Fix an issue in <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BufferedFile</span></code></a> (primarily used in
-the SFTP modules) concerning incorrect behavior by
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.readlines" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">readlines</span></code></a> on files whose size exceeds the
-buffer size. Thanks to <code class="docutils literal"><span class="pre">&#64;achapp</span></code> for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/455">#455</a><span>:</span> Tweak packet size handling to conform better to the OpenSSH RFCs;
-this helps address issues with interactive program cursors. Courtesy of Jeff
-Quast.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/413">#413</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/414">#414</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/420">#420</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/454">#454</a>) Be significantly
-smarter about polling &amp; timing behavior when running proxy commands, to avoid
-unnecessary (often 100%!) CPU usage. Major thanks to Jason Dunsmore for
-report &amp; initial patchset and to Chris Adams &amp; John Morrissey for followup
-improvements.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/419">#419</a><span>:</span> Modernize a bunch of the codebase internals to
-leverage decorators. Props to <code class="docutils literal"><span class="pre">&#64;beckjake</span></code> for realizing we&#8217;re no longer on
-Python 2.2 :D</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/421">#421</a><span>:</span> Modernize threading calls to use newer API. Thanks
-to Olle Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/422">#422</a><span>:</span> Clean up some unused imports. Courtesy of Olle
-Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/431">#431</a><span>:</span> Replace handrolled <code class="docutils literal"><span class="pre">ssh_config</span></code> parsing code with
-use of the <code class="docutils literal"><span class="pre">shlex</span></code> module. Thanks to Yan Kalchevskiy.</li>
-</ul>
-</div>
-<div class="section" id="1.14.2">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.14.2">1.14.2</a> <span style="font-size: 75%;">2014-12-19</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/399">#399</a><span>:</span> SSH agent forwarding (potentially other functionality as
-well) would hang due to incorrect values passed into the new window size
-arguments for <code class="xref py py-obj docutils literal"><span class="pre">Transport</span></code> (thanks to a botched merge). This has been
-corrected. Thanks to Dylan Thacker-Smith for the report &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/320">#320</a><span>:</span> Update our win_pageant module to be Python 3 compatible. Thanks to
-<code class="docutils literal"><span class="pre">&#64;sherbang</span></code> and <code class="docutils literal"><span class="pre">&#64;adamkerz</span></code> for the patches.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/429">#429</a><span>:</span> Server-level debug message logging was overlooked during the
-Python 3 compatibility update; Python 3 clients attempting to log SSH debug
-packets encountered type errors. This is now fixed. Thanks to <code class="docutils literal"><span class="pre">&#64;mjmaenpaa</span></code>
-for the catch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/459">#459</a><span>:</span> Tighten up agent connection closure behavior to avoid spurious
-<code class="docutils literal"><span class="pre">ResourceWarning</span></code> display in some situations. Thanks to <code class="docutils literal"><span class="pre">&#64;tkrapp</span></code> for the
-catch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/266">#266</a><span>:</span> Change numbering of <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/transport.html#paramiko.transport.Transport" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Transport</span></code></a> channels to
-start at 0 instead of 1 for better compatibility with OpenSSH &amp; certain
-server implementations which break on 1-indexed channels. Thanks to
-<code class="docutils literal"><span class="pre">&#64;egroeper</span></code> for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/415">#415</a><span>:</span> Fix <code class="docutils literal"><span class="pre">ssh_config</span></code> parsing to correctly interpret <code class="docutils literal"><span class="pre">ProxyCommand</span>
-<span class="pre">none</span></code> as the lack of a proxy command, instead of as a literal command string
-of <code class="docutils literal"><span class="pre">&quot;none&quot;</span></code>. Thanks to Richard Spiers for the catch &amp; Sean Johnson for the
-fix.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/428">#428</a><span>:</span> Fix an issue in <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BufferedFile</span></code></a> (primarily used in
-the SFTP modules) concerning incorrect behavior by
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.readlines" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">readlines</span></code></a> on files whose size exceeds the
-buffer size. Thanks to <code class="docutils literal"><span class="pre">&#64;achapp</span></code> for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/455">#455</a><span>:</span> Tweak packet size handling to conform better to the OpenSSH RFCs;
-this helps address issues with interactive program cursors. Courtesy of Jeff
-Quast.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/413">#413</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/414">#414</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/420">#420</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/454">#454</a>) Be significantly
-smarter about polling &amp; timing behavior when running proxy commands, to avoid
-unnecessary (often 100%!) CPU usage. Major thanks to Jason Dunsmore for
-report &amp; initial patchset and to Chris Adams &amp; John Morrissey for followup
-improvements.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/249">#249</a><span>:</span> Consolidate version information into one spot.
-Thanks to Gabi Davar for the reminder.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/378">#378</a><span>:</span> Minor code cleanup in the SSH config module
-courtesy of Olle Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/419">#419</a><span>:</span> Modernize a bunch of the codebase internals to
-leverage decorators. Props to <code class="docutils literal"><span class="pre">&#64;beckjake</span></code> for realizing we&#8217;re no longer on
-Python 2.2 :D</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/421">#421</a><span>:</span> Modernize threading calls to use newer API. Thanks
-to Olle Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/422">#422</a><span>:</span> Clean up some unused imports. Courtesy of Olle
-Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/431">#431</a><span>:</span> Replace handrolled <code class="docutils literal"><span class="pre">ssh_config</span></code> parsing code with
-use of the <code class="docutils literal"><span class="pre">shlex</span></code> module. Thanks to Yan Kalchevskiy.</li>
-</ul>
-</div>
-<div class="section" id="1.13.3">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.13.3">1.13.3</a> <span style="font-size: 75%;">2014-12-19</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/399">#399</a><span>:</span> SSH agent forwarding (potentially other functionality as
-well) would hang due to incorrect values passed into the new window size
-arguments for <code class="xref py py-obj docutils literal"><span class="pre">Transport</span></code> (thanks to a botched merge). This has been
-corrected. Thanks to Dylan Thacker-Smith for the report &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/320">#320</a><span>:</span> Update our win_pageant module to be Python 3 compatible. Thanks to
-<code class="docutils literal"><span class="pre">&#64;sherbang</span></code> and <code class="docutils literal"><span class="pre">&#64;adamkerz</span></code> for the patches.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/429">#429</a><span>:</span> Server-level debug message logging was overlooked during the
-Python 3 compatibility update; Python 3 clients attempting to log SSH debug
-packets encountered type errors. This is now fixed. Thanks to <code class="docutils literal"><span class="pre">&#64;mjmaenpaa</span></code>
-for the catch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/459">#459</a><span>:</span> Tighten up agent connection closure behavior to avoid spurious
-<code class="docutils literal"><span class="pre">ResourceWarning</span></code> display in some situations. Thanks to <code class="docutils literal"><span class="pre">&#64;tkrapp</span></code> for the
-catch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/266">#266</a><span>:</span> Change numbering of <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/transport.html#paramiko.transport.Transport" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Transport</span></code></a> channels to
-start at 0 instead of 1 for better compatibility with OpenSSH &amp; certain
-server implementations which break on 1-indexed channels. Thanks to
-<code class="docutils literal"><span class="pre">&#64;egroeper</span></code> for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/415">#415</a><span>:</span> Fix <code class="docutils literal"><span class="pre">ssh_config</span></code> parsing to correctly interpret <code class="docutils literal"><span class="pre">ProxyCommand</span>
-<span class="pre">none</span></code> as the lack of a proxy command, instead of as a literal command string
-of <code class="docutils literal"><span class="pre">&quot;none&quot;</span></code>. Thanks to Richard Spiers for the catch &amp; Sean Johnson for the
-fix.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/428">#428</a><span>:</span> Fix an issue in <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">BufferedFile</span></code></a> (primarily used in
-the SFTP modules) concerning incorrect behavior by
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.readlines" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">readlines</span></code></a> on files whose size exceeds the
-buffer size. Thanks to <code class="docutils literal"><span class="pre">&#64;achapp</span></code> for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/455">#455</a><span>:</span> Tweak packet size handling to conform better to the OpenSSH RFCs;
-this helps address issues with interactive program cursors. Courtesy of Jeff
-Quast.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/413">#413</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/414">#414</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/420">#420</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/454">#454</a>) Be significantly
-smarter about polling &amp; timing behavior when running proxy commands, to avoid
-unnecessary (often 100%!) CPU usage. Major thanks to Jason Dunsmore for
-report &amp; initial patchset and to Chris Adams &amp; John Morrissey for followup
-improvements.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/249">#249</a><span>:</span> Consolidate version information into one spot.
-Thanks to Gabi Davar for the reminder.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/378">#378</a><span>:</span> Minor code cleanup in the SSH config module
-courtesy of Olle Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/419">#419</a><span>:</span> Modernize a bunch of the codebase internals to
-leverage decorators. Props to <code class="docutils literal"><span class="pre">&#64;beckjake</span></code> for realizing we&#8217;re no longer on
-Python 2.2 :D</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/421">#421</a><span>:</span> Modernize threading calls to use newer API. Thanks
-to Olle Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/422">#422</a><span>:</span> Clean up some unused imports. Courtesy of Olle
-Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/431">#431</a><span>:</span> Replace handrolled <code class="docutils literal"><span class="pre">ssh_config</span></code> parsing code with
-use of the <code class="docutils literal"><span class="pre">shlex</span></code> module. Thanks to Yan Kalchevskiy.</li>
-</ul>
-</div>
-<div class="section" id="1.15.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.15.1">1.15.1</a> <span style="font-size: 75%;">2014-09-22</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/399">#399</a><span>:</span> SSH agent forwarding (potentially other functionality as
-well) would hang due to incorrect values passed into the new window size
-arguments for <code class="xref py py-obj docutils literal"><span class="pre">Transport</span></code> (thanks to a botched merge). This has been
-corrected. Thanks to Dylan Thacker-Smith for the report &amp; patch.</li>
-</ul>
-</div>
-<div class="section" id="1.15.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.15.0">1.15.0</a> <span style="font-size: 75%;">2014-09-18</span></h2><ul>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/131">#131</a><span>:</span> Add a <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/sftp.html#paramiko.sftp_client.SFTPClient.listdir_iter" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">listdir_iter</span></code></a> method
-to <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/sftp.html#paramiko.sftp_client.SFTPClient" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">SFTPClient</span></code></a> allowing for more efficient,
-async/generator based file listings. Thanks to John Begeman.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/184">#184</a><span>:</span> Support quoted values in SSH config file parsing. Credit to
-Yan Kalchevskiy.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/218">#218</a><span>:</span> Add support for ECDSA private keys on the client side. Thanks
-to <code class="docutils literal"><span class="pre">&#64;aszlig</span></code> for the patch.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/372">#372</a><span>:</span> Update default window &amp; packet sizes to more closely adhere to
-the pertinent RFC; also expose these settings in the public API so they may
-be overridden by client code. This should address some general speed issues
-such as <a class="reference external" href="https://github.com/paramiko/paramiko/issues/175">#175</a>. Big thanks to Olle Lundberg for the update.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/362">#362</a><span>:</span> Allow users to control the SSH banner timeout. Thanks to Cory
-Benfield.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/267">#267</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/250">#250</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/241">#241</a>, <a class="reference external" href="https://github.com/paramiko/paramiko/issues/228">#228</a>) Add GSS-API /
-SSPI (e.g. Kerberos) key exchange and authentication support
-(<a class="reference internal" href="installing.html#gssapi"><span class="std std-ref">installation docs here</span></a>). Mega thanks to Sebastian Deiß, with
-assist by Torsten Landschoff.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">Unix users should be aware that the <code class="docutils literal"><span class="pre">python-gssapi</span></code> library (a
-requirement for using this functionality) only appears to support
-Python 2.7 and up at this time.</p>
-</div>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/335">#335</a><span>:</span> Fix ECDSA key generation (generation of brand new ECDSA keys
-was broken previously). Thanks to <code class="docutils literal"><span class="pre">&#64;solarw</span></code> for catch &amp; patch.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/234">#234</a><span>:</span> Lower logging levels for a few overly-noisy log messages
-about secure channels. Thanks to David Pursehouse for noticing &amp; contributing
-the fix.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/298">#298</a><span>:</span> Don&#8217;t perform point validation on ECDSA keys in
-<code class="docutils literal"><span class="pre">known_hosts</span></code> files, since a) this can cause significant slowdown when such
-keys exist, and b) <code class="docutils literal"><span class="pre">known_hosts</span></code> files are implicitly trustworthy. Thanks
-to Kieran Spear for catch &amp; patch.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">This change bumps up the version requirement for the <code class="docutils literal"><span class="pre">ecdsa</span></code> library to
-<code class="docutils literal"><span class="pre">0.11</span></code>.</p>
-</div>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/373">#373</a><span>:</span> Attempt to fix a handful of issues (such as <a class="reference external" href="https://github.com/paramiko/paramiko/issues/354">#354</a>)
-related to infinite loops and threading deadlocks. Thanks to Olle Lundberg as
-well as a handful of community members who provided advice &amp; feedback via
-IRC.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/346">#346</a><span>:</span> Fix an issue in private key files&#8217; encryption salts that
-could cause tracebacks and file corruption if keys were re-encrypted. Credit
-to Xavier Nunn.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/371">#371</a><span>:</span> Add Travis support &amp; docs update for Python 3.4. Thanks to
-Olle Lundberg.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/169">#169</a><span>:</span> Minor refactor of
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/sftp.html#paramiko.sftp_client.SFTPClient.put" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.sftp_client.SFTPClient.put</span></code></a> thanks to Abhinav Upadhyay.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/229">#229</a><span>:</span> Fix a couple of incorrectly-copied docstrings&#8217; <code class="docutils literal"><span class="pre">..</span>
-<span class="pre">versionadded::</span></code> RST directives. Thanks to Aarni Koskela for the catch.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/324">#324</a><span>:</span> A bevvy of documentation typo fixes, courtesy of Roy
-Wellington.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/249">#249</a><span>:</span> Consolidate version information into one spot.
-Thanks to Gabi Davar for the reminder.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/378">#378</a><span>:</span> Minor code cleanup in the SSH config module
-courtesy of Olle Lundberg.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/377">#377</a><span>:</span> Factor <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/channel.html#paramiko.channel.Channel" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Channel</span></code></a> openness sanity check into
-a decorator. Thanks to Olle Lundberg for original patch.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/374">#374</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/375">#375</a>) Old code cleanup courtesy of Olle
-Lundberg.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/393">#393</a><span>:</span> Replace internal use of PyCrypto&#8217;s <code class="docutils literal"><span class="pre">SHA.new</span></code> with the
-stdlib&#8217;s <code class="docutils literal"><span class="pre">hashlib.sha1</span></code>. Thanks to Alex Gaynor.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="1.14.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.14.1">1.14.1</a> <span style="font-size: 75%;">2014-08-25</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/285">#285</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/352">#352</a>) Update our Python 3 <code class="docutils literal"><span class="pre">b()</span></code> compatibility shim
-to handle <code class="docutils literal"><span class="pre">buffer</span></code> objects correctly; this fixes a frequently reported
-issue affecting many users, including users of the <code class="docutils literal"><span class="pre">bzr</span></code> software suite.
-Thanks to <code class="docutils literal"><span class="pre">&#64;basictheprogram</span></code> for the initial report, Jelmer Vernooij for
-the fix and Andrew Starr-Bochicchio &amp; Jeremy T. Bouse (among others) for
-discussion &amp; feedback.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/239">#239</a><span>:</span> Add Windows-style CRLF support to SSH config file parsing. Props
-to Christopher Swenson.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/272">#272</a><span>:</span> Fix a bug where <code class="docutils literal"><span class="pre">known_hosts</span></code> parsing hashed the input hostname
-as well as the hostnames from the <code class="docutils literal"><span class="pre">known_hosts</span></code> file, on every comparison.
-Thanks to <code class="docutils literal"><span class="pre">&#64;sigmunau</span></code> for final patch and <code class="docutils literal"><span class="pre">&#64;ostacey</span></code> for the original
-report.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/312">#312</a><span>:</span> <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/transport.html#paramiko.transport.Transport" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.transport.Transport</span></code></a> had a bug in its <code class="docutils literal"><span class="pre">__repr__</span></code> which
-surfaces during errors encountered within its <code class="docutils literal"><span class="pre">__init__</span></code>, causing
-problematic tracebacks in such situations. Thanks to Simon Percivall for
-catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/376">#376</a><span>:</span> Be less aggressive about expanding variables in <code class="docutils literal"><span class="pre">ssh_config</span></code>
-files, which results in a speedup of SSH config parsing. Credit to Olle
-Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/169">#169</a><span>:</span> Minor refactor of
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/sftp.html#paramiko.sftp_client.SFTPClient.put" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.sftp_client.SFTPClient.put</span></code></a> thanks to Abhinav Upadhyay.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/229">#229</a><span>:</span> Fix a couple of incorrectly-copied docstrings&#8217; <code class="docutils literal"><span class="pre">..</span>
-<span class="pre">versionadded::</span></code> RST directives. Thanks to Aarni Koskela for the catch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/324">#324</a><span>:</span> A bevvy of documentation typo fixes, courtesy of Roy
-Wellington.</li>
-</ul>
-</div>
-<div class="section" id="1.13.2">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.13.2">1.13.2</a> <span style="font-size: 75%;">2014-08-25</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/285">#285</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/352">#352</a>) Update our Python 3 <code class="docutils literal"><span class="pre">b()</span></code> compatibility shim
-to handle <code class="docutils literal"><span class="pre">buffer</span></code> objects correctly; this fixes a frequently reported
-issue affecting many users, including users of the <code class="docutils literal"><span class="pre">bzr</span></code> software suite.
-Thanks to <code class="docutils literal"><span class="pre">&#64;basictheprogram</span></code> for the initial report, Jelmer Vernooij for
-the fix and Andrew Starr-Bochicchio &amp; Jeremy T. Bouse (among others) for
-discussion &amp; feedback.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/239">#239</a><span>:</span> Add Windows-style CRLF support to SSH config file parsing. Props
-to Christopher Swenson.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/272">#272</a><span>:</span> Fix a bug where <code class="docutils literal"><span class="pre">known_hosts</span></code> parsing hashed the input hostname
-as well as the hostnames from the <code class="docutils literal"><span class="pre">known_hosts</span></code> file, on every comparison.
-Thanks to <code class="docutils literal"><span class="pre">&#64;sigmunau</span></code> for final patch and <code class="docutils literal"><span class="pre">&#64;ostacey</span></code> for the original
-report.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/312">#312</a><span>:</span> <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/transport.html#paramiko.transport.Transport" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.transport.Transport</span></code></a> had a bug in its <code class="docutils literal"><span class="pre">__repr__</span></code> which
-surfaces during errors encountered within its <code class="docutils literal"><span class="pre">__init__</span></code>, causing
-problematic tracebacks in such situations. Thanks to Simon Percivall for
-catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/376">#376</a><span>:</span> Be less aggressive about expanding variables in <code class="docutils literal"><span class="pre">ssh_config</span></code>
-files, which results in a speedup of SSH config parsing. Credit to Olle
-Lundberg.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/169">#169</a><span>:</span> Minor refactor of
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/sftp.html#paramiko.sftp_client.SFTPClient.put" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.sftp_client.SFTPClient.put</span></code></a> thanks to Abhinav Upadhyay.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/229">#229</a><span>:</span> Fix a couple of incorrectly-copied docstrings&#8217; <code class="docutils literal"><span class="pre">..</span>
-<span class="pre">versionadded::</span></code> RST directives. Thanks to Aarni Koskela for the catch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/324">#324</a><span>:</span> A bevvy of documentation typo fixes, courtesy of Roy
-Wellington.</li>
-</ul>
-</div>
-<div class="section" id="1.14.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.14.0">1.14.0</a> <span style="font-size: 75%;">2014-05-07</span></h2><ul class="simple">
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/284">#284</a><span>:</span> Add Python language trove identifiers to <code class="docutils literal"><span class="pre">setup.py</span></code>. Thanks
-to Alex Gaynor for catch &amp; patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/290">#290</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/292">#292</a>) Add support for building universal
-(Python 2+3 compatible) wheel files during the release process. Courtesy of
-Alex Gaynor.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/295">#295</a><span>:</span> Swap out a bunch of PyCrypto hash functions with use of
-<a class="reference external" href="https://docs.python.org/2.6/library/hashlib.html#module-hashlib" title="(in Python v2.6)"><code class="xref py py-obj docutils literal"><span class="pre">hashlib</span></code></a>. Thanks to Alex Gaynor.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/297">#297</a><span>:</span> Replace PyCrypto&#8217;s <code class="docutils literal"><span class="pre">Random</span></code> with <a class="reference external" href="https://docs.python.org/2.6/library/os.html#os.urandom" title="(in Python v2.6)"><code class="xref py py-obj docutils literal"><span class="pre">os.urandom</span></code></a> for improved
-speed and security. Thanks again to Alex.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/299">#299</a><span>:</span> Use deterministic signatures for ECDSA keys for improved
-security. Thanks to Alex Gaynor.</li>
-</ul>
-</div>
-<div class="section" id="1.13.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.13.1">1.13.1</a> <span style="font-size: 75%;">2014-05-07</span></h2><ul>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/235">#235</a><span>:</span> Improve string type testing in a handful of spots (e.g. <code class="docutils literal"><span class="pre">s/if</span>
-<span class="pre">type(x)</span> <span class="pre">is</span> <span class="pre">str/if</span> <span class="pre">isinstance(x,</span> <span class="pre">basestring)/g</span></code>.) Thanks to <code class="docutils literal"><span class="pre">&#64;ksamuel</span></code> for
-the report.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/308">#308</a><span>:</span> Fix regression in dsskey.py that caused sporadic signature
-verification failures. Thanks to Chris Rose.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Fix logging error in sftp_client for filenames containing the &#8216;%&#8217;
-character. Thanks to Antoine Brenner.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Added self.args for exception classes. Used for unpickling. Related
-to (<a class="reference external" href="https://github.com/fabric/fabric/issues/986">Fabric #986</a>, <a class="reference external" href="https://github.com/fabric/fabric/issues/714">Fabric
-#714</a>). Thanks to Alex
-Plugaru.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.read" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.file.BufferedFile.read</span></code></a> incorrectly returned text strings
-after the Python 3 migration, despite bytes being more appropriate for file
-contents (which may be binary or of an unknown encoding.) This has been
-addressed.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last"><a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.readline" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.file.BufferedFile.readline</span></code></a> continues to return strings, not
-bytes, as &#8220;lines&#8221; only make sense for textual data. It assumes UTF-8 by
-default.</p>
-</div>
-<p>This should fix <a class="reference external" href="http://comments.gmane.org/gmane.comp.sysutils.backup.obnam/252">this issue raised on the Obnam mailing list</a>. Thanks
-to Antoine Brenner for the patch.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="1.12.4">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.12.4">1.12.4</a> <span style="font-size: 75%;">2014-05-07</span></h2><ul>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/235">#235</a><span>:</span> Improve string type testing in a handful of spots (e.g. <code class="docutils literal"><span class="pre">s/if</span>
-<span class="pre">type(x)</span> <span class="pre">is</span> <span class="pre">str/if</span> <span class="pre">isinstance(x,</span> <span class="pre">basestring)/g</span></code>.) Thanks to <code class="docutils literal"><span class="pre">&#64;ksamuel</span></code> for
-the report.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/308">#308</a><span>:</span> Fix regression in dsskey.py that caused sporadic signature
-verification failures. Thanks to Chris Rose.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Fix logging error in sftp_client for filenames containing the &#8216;%&#8217;
-character. Thanks to Antoine Brenner.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Added self.args for exception classes. Used for unpickling. Related
-to (<a class="reference external" href="https://github.com/fabric/fabric/issues/986">Fabric #986</a>, <a class="reference external" href="https://github.com/fabric/fabric/issues/714">Fabric
-#714</a>). Thanks to Alex
-Plugaru.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.read" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.file.BufferedFile.read</span></code></a> incorrectly returned text strings
-after the Python 3 migration, despite bytes being more appropriate for file
-contents (which may be binary or of an unknown encoding.) This has been
-addressed.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last"><a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.readline" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.file.BufferedFile.readline</span></code></a> continues to return strings, not
-bytes, as &#8220;lines&#8221; only make sense for textual data. It assumes UTF-8 by
-default.</p>
-</div>
-<p>This should fix <a class="reference external" href="http://comments.gmane.org/gmane.comp.sysutils.backup.obnam/252">this issue raised on the Obnam mailing list</a>. Thanks
-to Antoine Brenner for the patch.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="1.11.6">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.11.6">1.11.6</a> <span style="font-size: 75%;">2014-05-07</span></h2><ul>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/235">#235</a><span>:</span> Improve string type testing in a handful of spots (e.g. <code class="docutils literal"><span class="pre">s/if</span>
-<span class="pre">type(x)</span> <span class="pre">is</span> <span class="pre">str/if</span> <span class="pre">isinstance(x,</span> <span class="pre">basestring)/g</span></code>.) Thanks to <code class="docutils literal"><span class="pre">&#64;ksamuel</span></code> for
-the report.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/308">#308</a><span>:</span> Fix regression in dsskey.py that caused sporadic signature
-verification failures. Thanks to Chris Rose.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Fix logging error in sftp_client for filenames containing the &#8216;%&#8217;
-character. Thanks to Antoine Brenner.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Added self.args for exception classes. Used for unpickling. Related
-to (<a class="reference external" href="https://github.com/fabric/fabric/issues/986">Fabric #986</a>, <a class="reference external" href="https://github.com/fabric/fabric/issues/714">Fabric
-#714</a>). Thanks to Alex
-Plugaru.</p>
-</li>
-<li><p class="first">[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> <a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.read" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.file.BufferedFile.read</span></code></a> incorrectly returned text strings
-after the Python 3 migration, despite bytes being more appropriate for file
-contents (which may be binary or of an unknown encoding.) This has been
-addressed.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last"><a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/file.html#paramiko.file.BufferedFile.readline" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">paramiko.file.BufferedFile.readline</span></code></a> continues to return strings, not
-bytes, as &#8220;lines&#8221; only make sense for textual data. It assumes UTF-8 by
-default.</p>
-</div>
-<p>This should fix <a class="reference external" href="http://comments.gmane.org/gmane.comp.sysutils.backup.obnam/252">this issue raised on the Obnam mailing list</a>. Thanks
-to Antoine Brenner for the patch.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="1.13.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.13.0">1.13.0</a> <span style="font-size: 75%;">2014-03-13</span></h2><ul>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/58">#58</a><span>:</span> Allow client code to access the stored SSH server banner via
-<a class="reference external" href="/Users/jforcier/Code/oss/paramiko/sites/www/../docs/_build/api/transport.html#paramiko.transport.Transport.get_banner" title="(in Paramiko v)"><code class="xref py py-obj docutils literal"><span class="pre">Transport.get_banner</span></code></a>. Thanks to
-<code class="docutils literal"><span class="pre">&#64;Jhoanor</span></code> for the patch.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/16">#16</a><span>:</span> <strong>Python 3 support!</strong> Our test suite passes under Python 3, and
-it (&amp; Fabric&#8217;s test suite) continues to pass under Python 2. <strong>Python 2.5 is
-no longer supported with this change!</strong></p>
-<p>The merged code was built on many contributors&#8217; efforts, both code &amp;
-feedback. In no particular order, we thank Daniel Goertzen, Ivan Kolodyazhny,
-Tomi Pieviläinen, Jason R. Coombs, Jan N. Schulze, <code class="docutils literal"><span class="pre">&#64;Lazik</span></code>, Dorian Pula,
-Scott Maxwell, Tshepang Lekhonkhobe, Aaron Meurer, and Dave Halter.</p>
-</li>
-<li><p class="first">[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/256">#256</a><span>:</span> Convert API documentation to Sphinx, yielding a new
-API docs website to replace the old Epydoc one. Thanks to Olle Lundberg for
-the initial conversion work.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="1.12.3">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.12.3">1.12.3</a> <span style="font-size: 75%;">2014-03-13</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Use constant-time hash comparison operations where possible, to
-protect against <a class="reference external" href="http://codahale.com/a-lesson-in-timing-attacks/">timing-based attacks</a>. Thanks to Alex Gaynor
-for the patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/256">#256</a><span>:</span> Convert API documentation to Sphinx, yielding a new
-API docs website to replace the old Epydoc one. Thanks to Olle Lundberg for
-the initial conversion work.</li>
-</ul>
-</div>
-<div class="section" id="1.11.5">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.11.5">1.11.5</a> <span style="font-size: 75%;">2014-03-13</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Use constant-time hash comparison operations where possible, to
-protect against <a class="reference external" href="http://codahale.com/a-lesson-in-timing-attacks/">timing-based attacks</a>. Thanks to Alex Gaynor
-for the patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/256">#256</a><span>:</span> Convert API documentation to Sphinx, yielding a new
-API docs website to replace the old Epydoc one. Thanks to Olle Lundberg for
-the initial conversion work.</li>
-</ul>
-</div>
-<div class="section" id="1.10.7">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.7">1.10.7</a> <span style="font-size: 75%;">2014-03-13</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span>:</span><span> </span> Use constant-time hash comparison operations where possible, to
-protect against <a class="reference external" href="http://codahale.com/a-lesson-in-timing-attacks/">timing-based attacks</a>. Thanks to Alex Gaynor
-for the patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/256">#256</a><span>:</span> Convert API documentation to Sphinx, yielding a new
-API docs website to replace the old Epydoc one. Thanks to Olle Lundberg for
-the initial conversion work.</li>
-</ul>
-</div>
-<div class="section" id="1.12.2">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.12.2">1.12.2</a> <span style="font-size: 75%;">2014-02-14</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/193">#193</a><span>:</span> (and its attentant PRs <a class="reference external" href="https://github.com/paramiko/paramiko/issues/230">#230</a> &amp; <a class="reference external" href="https://github.com/paramiko/paramiko/issues/253">#253</a>) Fix SSH agent
-problems present on Windows. Thanks to David Hobbs for initial report and to
-Aarni Koskela &amp; Olle Lundberg for the patches.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/34">#34</a><span>:</span> (PR <a class="reference external" href="https://github.com/paramiko/paramiko/issues/35">#35</a>) Fix SFTP prefetching incompatibility with some
-SFTP servers regarding request/response ordering. Thanks to Richard
-Kettlewell.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/268">#268</a><span>:</span> Fix some missed renames of <code class="docutils literal"><span class="pre">ProxyCommand</span></code> related error classes.
-Thanks to Marius Gedminas for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/252">#252</a><span>:</span> (<a class="reference external" href="https://github.com/fabric/fabric/issues/1020">Fabric #1020</a>)
-Enhanced the implementation of <code class="docutils literal"><span class="pre">ProxyCommand</span></code> to avoid a deadlock/hang
-condition that frequently occurs at <code class="docutils literal"><span class="pre">Transport</span></code> shutdown time. Thanks to
-Mateusz Kobos, Matthijs van der Vleuten and Guillaume Zitta for the original
-reports and to Marius Gedminas for helping test nontrivial use cases.</li>
-</ul>
-</div>
-<div class="section" id="1.11.4">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.11.4">1.11.4</a> <span style="font-size: 75%;">2014-02-14</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/193">#193</a><span>:</span> (and its attentant PRs <a class="reference external" href="https://github.com/paramiko/paramiko/issues/230">#230</a> &amp; <a class="reference external" href="https://github.com/paramiko/paramiko/issues/253">#253</a>) Fix SSH agent
-problems present on Windows. Thanks to David Hobbs for initial report and to
-Aarni Koskela &amp; Olle Lundberg for the patches.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/34">#34</a><span>:</span> (PR <a class="reference external" href="https://github.com/paramiko/paramiko/issues/35">#35</a>) Fix SFTP prefetching incompatibility with some
-SFTP servers regarding request/response ordering. Thanks to Richard
-Kettlewell.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/268">#268</a><span>:</span> Fix some missed renames of <code class="docutils literal"><span class="pre">ProxyCommand</span></code> related error classes.
-Thanks to Marius Gedminas for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/252">#252</a><span>:</span> (<a class="reference external" href="https://github.com/fabric/fabric/issues/1020">Fabric #1020</a>)
-Enhanced the implementation of <code class="docutils literal"><span class="pre">ProxyCommand</span></code> to avoid a deadlock/hang
-condition that frequently occurs at <code class="docutils literal"><span class="pre">Transport</span></code> shutdown time. Thanks to
-Mateusz Kobos, Matthijs van der Vleuten and Guillaume Zitta for the original
-reports and to Marius Gedminas for helping test nontrivial use cases.</li>
-</ul>
-</div>
-<div class="section" id="1.10.6">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.6">1.10.6</a> <span style="font-size: 75%;">2014-02-14</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/193">#193</a><span>:</span> (and its attentant PRs <a class="reference external" href="https://github.com/paramiko/paramiko/issues/230">#230</a> &amp; <a class="reference external" href="https://github.com/paramiko/paramiko/issues/253">#253</a>) Fix SSH agent
-problems present on Windows. Thanks to David Hobbs for initial report and to
-Aarni Koskela &amp; Olle Lundberg for the patches.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/34">#34</a><span>:</span> (PR <a class="reference external" href="https://github.com/paramiko/paramiko/issues/35">#35</a>) Fix SFTP prefetching incompatibility with some
-SFTP servers regarding request/response ordering. Thanks to Richard
-Kettlewell.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/268">#268</a><span>:</span> Fix some missed renames of <code class="docutils literal"><span class="pre">ProxyCommand</span></code> related error classes.
-Thanks to Marius Gedminas for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/252">#252</a><span>:</span> (<a class="reference external" href="https://github.com/fabric/fabric/issues/1020">Fabric #1020</a>)
-Enhanced the implementation of <code class="docutils literal"><span class="pre">ProxyCommand</span></code> to avoid a deadlock/hang
-condition that frequently occurs at <code class="docutils literal"><span class="pre">Transport</span></code> shutdown time. Thanks to
-Mateusz Kobos, Matthijs van der Vleuten and Guillaume Zitta for the original
-reports and to Marius Gedminas for helping test nontrivial use cases.</li>
-</ul>
-</div>
-<div class="section" id="1.12.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.12.1">1.12.1</a> <span style="font-size: 75%;">2014-01-08</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/176">#176</a><span>:</span> Fix AttributeError bugs in known_hosts file (re)loading. Thanks
-to Nathan Scowcroft for the patch &amp; Martin Blumenstingl for the initial test
-case.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/225">#225</a><span>:</span> Note ecdsa requirement in README. Thanks to Amaury
-Rodriguez for the catch.</li>
-</ul>
-</div>
-<div class="section" id="1.11.3">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.11.3">1.11.3</a> <span style="font-size: 75%;">2014-01-08</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/176">#176</a><span>:</span> Fix AttributeError bugs in known_hosts file (re)loading. Thanks
-to Nathan Scowcroft for the patch &amp; Martin Blumenstingl for the initial test
-case.</li>
-</ul>
-</div>
-<div class="section" id="1.10.5">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.5">1.10.5</a> <span style="font-size: 75%;">2014-01-08</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/176">#176</a><span>:</span> Fix AttributeError bugs in known_hosts file (re)loading. Thanks
-to Nathan Scowcroft for the patch &amp; Martin Blumenstingl for the initial test
-case.</li>
-</ul>
-</div>
-<div class="section" id="1.12.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.12.0">1.12.0</a> <span style="font-size: 75%;">2013-09-27</span></h2><ul>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/136">#136</a><span>:</span> Add server-side support for the SSH protocol&#8217;s &#8216;env&#8217; command.
-Thanks to Benjamin Pollack for the patch.</p>
-</li>
-<li><p class="first">[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/152">#152</a><span>:</span> Add tentative support for ECDSA keys. <strong>This adds the ecdsa
-module as a new dependency of Paramiko.</strong> The module is available at
-<a class="reference external" href="https://github.com/warner/python-ecdsa">warner/python-ecdsa on Github</a> and
-<a class="reference external" href="https://pypi.python.org/pypi/ecdsa">ecdsa on PyPI</a>.</p>
-<blockquote>
-<div><ul class="simple">
-<li>Note that you might still run into problems with key negotiation &#8211;
-Paramiko picks the first key that the server offers, which might not be
-what you have in your known_hosts file.</li>
-<li>Mega thanks to Ethan Glasser-Camp for the patch.</li>
-</ul>
-</div></blockquote>
-</li>
-</ul>
-</div>
-<div class="section" id="1.11.2">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.11.2">1.11.2</a> <span style="font-size: 75%;">2013-09-27</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/199">#199</a><span>:</span> Typo fix in the license header cross-project. Thanks to Armin
-Ronacher for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/200">#200</a><span>:</span> Fix an exception-causing typo in <code class="docutils literal"><span class="pre">demo_simple.py</span></code>. Thanks to Alex
-Buchanan for catch &amp; Dave Foster for patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/179">#179</a><span>:</span> Fix a missing variable causing errors when an ssh_config file has
-a non-default AddressFamily set. Thanks to Ed Marshall &amp; Tomaz Muraus for
-catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/156">#156</a><span>:</span> Fix potential deadlock condition when using Channel
-objects as sockets (e.g. when using SSH gatewaying). Thanks to Steven Noonan
-and Frank Arnold for catch &amp; patch.</li>
-</ul>
-</div>
-<div class="section" id="1.10.4">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.4">1.10.4</a> <span style="font-size: 75%;">2013-09-27</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/199">#199</a><span>:</span> Typo fix in the license header cross-project. Thanks to Armin
-Ronacher for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/200">#200</a><span>:</span> Fix an exception-causing typo in <code class="docutils literal"><span class="pre">demo_simple.py</span></code>. Thanks to Alex
-Buchanan for catch &amp; Dave Foster for patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/179">#179</a><span>:</span> Fix a missing variable causing errors when an ssh_config file has
-a non-default AddressFamily set. Thanks to Ed Marshall &amp; Tomaz Muraus for
-catch &amp; patch.</li>
-</ul>
-</div>
-<div class="section" id="1.11.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.11.1">1.11.1</a> <span style="font-size: 75%;">2013-09-20</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/168">#168</a><span>:</span> Update config handling to properly handle multiple &#8216;localforward&#8217;
-and &#8216;remoteforward&#8217; keys. Thanks to Emre Yılmaz for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/36">#36</a><span>:</span> Fix the port-forwarding demo to avoid file descriptor errors.
-Thanks to Jonathan Halcrow for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/162">#162</a><span>:</span> Clean up HMAC module import to avoid deadlocks in certain uses of
-SSHClient. Thanks to Gernot Hillier for the catch &amp; suggested fix.</li>
-</ul>
-</div>
-<div class="section" id="1.10.3">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.3">1.10.3</a> <span style="font-size: 75%;">2013-09-20</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/168">#168</a><span>:</span> Update config handling to properly handle multiple &#8216;localforward&#8217;
-and &#8216;remoteforward&#8217; keys. Thanks to Emre Yılmaz for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/36">#36</a><span>:</span> Fix the port-forwarding demo to avoid file descriptor errors.
-Thanks to Jonathan Halcrow for catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/162">#162</a><span>:</span> Clean up HMAC module import to avoid deadlocks in certain uses of
-SSHClient. Thanks to Gernot Hillier for the catch &amp; suggested fix.</li>
-</ul>
-</div>
-<div class="section" id="1.11.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.11.0">1.11.0</a> <span style="font-size: 75%;">2013-07-26</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/87">#87</a><span>:</span> Ensure updates to <code class="docutils literal"><span class="pre">known_hosts</span></code> files account for any
-updates to said files after Paramiko initially read them. (Includes related
-fix to guard against duplicate entries during subsequent <code class="docutils literal"><span class="pre">known_hosts</span></code>
-loads.) Thanks to <code class="docutils literal"><span class="pre">&#64;sunweaver</span></code> for the contribution.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/98">#98</a><span>:</span> On Windows, when interacting with the PuTTY PAgeant, Paramiko
-now creates the shared memory map with explicit Security Attributes of the
-user, which is the same technique employed by the canonical PuTTY library to
-avoid permissions issues when Paramiko is running under a different UAC
-context than the PuTTY Ageant process. Thanks to Jason R. Coombs for the
-patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/100">#100</a><span>:</span> Remove use of PyWin32 in <code class="docutils literal"><span class="pre">win_pageant</span></code> module. Module was
-already dependent on ctypes for constructing appropriate structures and had
-ctypes implementations of all functionality. Thanks to Jason R. Coombs for
-the patch.</li>
-</ul>
-</div>
-<div class="section" id="1.10.2">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.2">1.10.2</a> <span style="font-size: 75%;">2013-07-26</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/146">#146</a><span>:</span> Indentation fixes for readability. Thanks to Abhinav Upadhyay for
-catch &amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/153">#153</a><span>:</span> (also <a class="reference external" href="https://github.com/paramiko/paramiko/issues/67">#67</a>) Warn on parse failure when reading known_hosts
-file. Thanks to <code class="docutils literal"><span class="pre">&#64;glasserc</span></code> for patch.</li>
-</ul>
-</div>
-<div class="section" id="1.10.1">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.1">1.10.1</a> <span style="font-size: 75%;">2013-04-05</span></h2><ul class="simple">
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/154">#154</a><span>:</span> (<a class="reference external" href="https://github.com/fabric/fabric/issues/876">Fabric #876</a>)
-Forwarded SSH agent connections left stale local pipes lying around, which
-could cause local (and sometimes remote or network) resource starvation when
-running many agent-using remote commands. Thanks to Kevin Tegtmeier for catch
-&amp; patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/142">#142</a><span>:</span> (<a class="reference external" href="https://github.com/fabric/fabric/issues/811">Fabric #811</a>)
-SFTP put of empty file will still return the attributes of the put file.
-Thanks to Jason R. Coombs for the patch.</li>
-</ul>
-</div>
-<div class="section" id="1.10.0">
-<h2 style="margin-bottom: 0.3em;"><a class="reference external" href="https://github.com/paramiko/paramiko/tree/1.10.0">1.10.0</a> <span style="font-size: 75%;">2013-03-01</span></h2><ul class="simple">
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/80">#80</a><span>:</span> Expose the internal &#8220;is closed&#8221; property of the file transfer
-class <code class="docutils literal"><span class="pre">BufferedFile</span></code> as <code class="docutils literal"><span class="pre">.closed</span></code>, better conforming to Python&#8217;s file
-interface. Thanks to <code class="docutils literal"><span class="pre">&#64;smunaut</span></code> and James Hiscock for catch &amp; patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/113">#113</a><span>:</span> Add <code class="docutils literal"><span class="pre">timeout</span></code> parameter to <code class="docutils literal"><span class="pre">SSHClient.exec_command</span></code> for
-easier setting of the command&#8217;s internal channel object&#8217;s timeout. Thanks to
-Cernov Vladimir for the patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/71">#71</a><span>:</span> Add <code class="docutils literal"><span class="pre">SFTPClient.putfo</span></code> and <code class="docutils literal"><span class="pre">.getfo</span></code> methods to allow direct
-uploading/downloading of file-like objects. Thanks to Eric Buehl for the
-patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/115">#115</a><span>:</span> Add convenience <code class="docutils literal"><span class="pre">get_pty</span></code> kwarg to <code class="docutils literal"><span class="pre">Client.exec_command</span></code> so
-users not manually controlling a channel object can still toggle PTY
-creation. Thanks to Michael van der Kolff for the patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/116">#116</a><span>:</span> Limit <code class="docutils literal"><span class="pre">Message.get_bytes</span></code> to an upper bound of 1MB to protect
-against potential DoS vectors. Thanks to <code class="docutils literal"><span class="pre">&#64;mvschaik</span></code> for catch &amp; patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/127">#127</a><span>:</span> Turn <code class="docutils literal"><span class="pre">SFTPFile</span></code> into a context manager. Thanks to Michael
-Williamson for the patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/128">#128</a><span>:</span> Defer FQDN resolution until needed, when parsing SSH config
-files. Thanks to Parantapa Bhattacharya for catch &amp; patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/110">#110</a><span>:</span> Honor SSH config <code class="docutils literal"><span class="pre">AddressFamily</span></code> setting when looking up
-local host&#8217;s FQDN. Thanks to John Hensley for the patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/93">#93</a><span>:</span> Overhaul SSH config parsing to be in line with <code class="docutils literal"><span class="pre">man</span>
-<span class="pre">ssh_config</span></code> (&amp; the behavior of <code class="docutils literal"><span class="pre">ssh</span></code> itself), including addition of parameter
-expansion within config values. Thanks to Olle Lundberg for the patch.</li>
-<li>[<span style="color: #40A056;">Feature</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/66">#66</a><span>:</span> Batch SFTP writes to help speed up file transfers. Thanks to
-Olle Lundberg for the patch.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/102">#102</a><span>:</span> Forego random padding for packets when running under
-<code class="docutils literal"><span class="pre">*-ctr</span></code> ciphers. This corrects some slowdowns on platforms where random
-byte generation is inefficient (e.g. Windows). Thanks to <code class="docutils literal"><span class="pre">&#64;warthog618</span></code> for
-catch &amp; patch, and Michael van der Kolff for code/technique review.</li>
-<li>[<span style="color: #A04040;">Bug</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/133">#133</a><span>:</span> Fix handling of window-change events to be on-spec and not
-attempt to wait for a response from the remote sshd; this fixes problems with
-less common targets such as some Cisco devices. Thanks to Phillip Heller for
-catch &amp; patch.</li>
-<li>[<span style="color: #4070A0;">Support</span>]<span> </span><a class="reference external" href="https://github.com/paramiko/paramiko/issues/94">#94</a><span>:</span> Remove duplication of SSH port constant. Thanks to Olle
-Lundberg for the catch.</li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- |
- <a href="_sources/changelog.txt"
- rel="nofollow">Page source</a>
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/contact.html b/sites/www/_build.orig/contact.html
deleted file mode 100644
index 38a548b7..00000000
--- a/sites/www/_build.orig/contact.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Contact &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
- <link rel="prev" title="Contributing" href="contributing.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="contact">
-<h1>Contact<a class="headerlink" href="#contact" title="Permalink to this headline">¶</a></h1>
-<p>You can get in touch with the developer &amp; user community in any of the
-following ways:</p>
-<ul class="simple">
-<li>IRC: <code class="docutils literal"><span class="pre">#paramiko</span></code> on Freenode</li>
-<li>Mailing list: <code class="docutils literal"><span class="pre">paramiko&#64;librelist.com</span></code> (see <a class="reference external" href="http://librelist.com">the LibreList homepage</a> for usage details).</li>
-<li>This website - a blog section is forthcoming.</li>
-<li>Submit contributions on Github - see the <a class="reference internal" href="contributing.html"><span class="doc">Contributing</span></a> page.</li>
-</ul>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- |
- <a href="_sources/contact.txt"
- rel="nofollow">Page source</a>
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/contributing.html b/sites/www/_build.orig/contributing.html
deleted file mode 100644
index 394360ea..00000000
--- a/sites/www/_build.orig/contributing.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Contributing &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
- <link rel="next" title="Contact" href="contact.html" />
- <link rel="prev" title="Installing (1.x)" href="installing-1.x.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="contributing">
-<h1>Contributing<a class="headerlink" href="#contributing" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="how-to-get-the-code">
-<h2>How to get the code<a class="headerlink" href="#how-to-get-the-code" title="Permalink to this headline">¶</a></h2>
-<p>Our primary Git repository is on Github at <a class="reference external" href="https://github.com/paramiko/paramiko">paramiko/paramiko</a>;
-please follow their instructions for cloning to your local system. (If you
-intend to submit patches/pull requests, we recommend forking first, then
-cloning your fork. Github has excellent documentation for all this.)</p>
-</div>
-<div class="section" id="how-to-submit-bug-reports-or-new-code">
-<h2>How to submit bug reports or new code<a class="headerlink" href="#how-to-submit-bug-reports-or-new-code" title="Permalink to this headline">¶</a></h2>
-<p>Please see <a class="reference external" href="http://contribution-guide.org">this project-agnostic contribution guide</a> - we follow it explicitly. Again, our code
-repository and bug tracker is <a class="reference external" href="https://github.com/paramiko/paramiko">on Github</a>.</p>
-<p>Our current changelog is located in <code class="docutils literal"><span class="pre">sites/www/changelog.rst</span></code> - the top
-level files like <code class="docutils literal"><span class="pre">ChangeLog.*</span></code> and <code class="docutils literal"><span class="pre">NEWS</span></code> are historical only.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Contributing</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#how-to-get-the-code">How to get the code</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#how-to-submit-bug-reports-or-new-code">How to submit bug reports or new code</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- |
- <a href="_sources/contributing.txt"
- rel="nofollow">Page source</a>
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/faq.html b/sites/www/_build.orig/faq.html
deleted file mode 100644
index 1b56d079..00000000
--- a/sites/www/_build.orig/faq.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Frequently Asked/Answered Questions &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
- <link rel="next" title="Installing" href="installing.html" />
- <link rel="prev" title="Changelog" href="changelog.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="frequently-asked-answered-questions">
-<h1>Frequently Asked/Answered Questions<a class="headerlink" href="#frequently-asked-answered-questions" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="which-version-should-i-use-i-see-multiple-active-releases">
-<h2>Which version should I use? I see multiple active releases.<a class="headerlink" href="#which-version-should-i-use-i-see-multiple-active-releases" title="Permalink to this headline">¶</a></h2>
-<p>Please see <a class="reference internal" href="installing.html#release-lines"><span class="std std-ref">the installation docs</span></a> which have an explicit
-section about this topic.</p>
-</div>
-<div class="section" id="paramiko-doesn-t-work-with-my-cisco-windows-or-other-non-unix-system">
-<h2>Paramiko doesn&#8217;t work with my Cisco, Windows or other non-Unix system!<a class="headerlink" href="#paramiko-doesn-t-work-with-my-cisco-windows-or-other-non-unix-system" title="Permalink to this headline">¶</a></h2>
-<p>In an ideal world, the developers would love to support every possible target
-system. Unfortunately, volunteer development time and access to non-mainstream
-platforms are limited, meaning that we can only fully support standard OpenSSH
-implementations such as those found on the average Linux distribution (as well
-as on Mac OS X and *BSD.)</p>
-<p>Because of this, <strong>we typically close bug reports for nonstandard SSH
-implementations or host systems</strong>.</p>
-<p>However, <strong>closed does not imply locked</strong> - affected users can still post
-comments on such tickets - and <strong>we will always consider actual patch
-submissions for these issues</strong>, provided they can get +1s from similarly
-affected users and are proven to not break existing functionality.</p>
-</div>
-<div class="section" id="i-m-having-strange-issues-with-my-code-hanging-at-shutdown">
-<h2>I&#8217;m having strange issues with my code hanging at shutdown!<a class="headerlink" href="#i-m-having-strange-issues-with-my-code-hanging-at-shutdown" title="Permalink to this headline">¶</a></h2>
-<p>Make sure you explicitly <code class="docutils literal"><span class="pre">.close()</span></code> your connection objects (usually
-<code class="docutils literal"><span class="pre">SSHClient</span></code>) if you&#8217;re having any sort of hang/freeze at shutdown time!</p>
-<p>Doing so isn&#8217;t strictly necessary 100% of the time, but it is almost always the
-right solution if you run into the various corner cases that cause race
-conditions, etc.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">FAQs</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#which-version-should-i-use-i-see-multiple-active-releases">Which version should I use? I see multiple active releases.</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#paramiko-doesn-t-work-with-my-cisco-windows-or-other-non-unix-system">Paramiko doesn&#8217;t work with my Cisco, Windows or other non-Unix system!</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#i-m-having-strange-issues-with-my-code-hanging-at-shutdown">I&#8217;m having strange issues with my code hanging at shutdown!</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- |
- <a href="_sources/faq.txt"
- rel="nofollow">Page source</a>
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/genindex.html b/sites/www/_build.orig/genindex.html
deleted file mode 100644
index b9793875..00000000
--- a/sites/www/_build.orig/genindex.html
+++ /dev/null
@@ -1,176 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Index &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
-
-<h1 id="index">Index</h1>
-
-<div class="genindex-jumpbox">
- <a href="#R"><strong>R</strong></a>
-
-</div>
-<h2 id="R">R</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%" valign="top"><dl>
-
- <dt>
- RFC
- </dt>
-
- <dd><dl>
-
- <dt><a href="index.html#index-0">RFC 4251</a>
- </dt>
-
-
- <dt><a href="index.html#index-1">RFC 4252</a>
- </dt>
-
-
- <dt><a href="index.html#index-2">RFC 4253</a>
- </dt>
-
-
- <dt><a href="index.html#index-3">RFC 4254</a>
- </dt>
-
- </dl></dd>
- </dl></td>
-</tr></table>
-
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/index.html b/sites/www/_build.orig/index.html
deleted file mode 100644
index 47f71719..00000000
--- a/sites/www/_build.orig/index.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Welcome to Paramiko! &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="#" />
- <link rel="next" title="Changelog" href="changelog.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="welcome-to-paramiko">
-<h1>Welcome to Paramiko!<a class="headerlink" href="#welcome-to-paramiko" title="Permalink to this headline">¶</a></h1>
-<p>Paramiko is a Python (2.6+, 3.3+) implementation of the SSHv2 protocol <a class="footnote-reference" href="#id2" id="id1">[1]</a>,
-providing both client and server functionality. While it leverages a Python C
-extension for low level cryptography
-(<a class="reference external" href="https://cryptography.io">Cryptography</a>), Paramiko itself is a pure Python
-interface around SSH networking concepts.</p>
-<p>This website covers project information for Paramiko such as the changelog,
-contribution guidelines, development roadmap, news/blog, and so forth. Detailed
-usage and API documentation can be found at our code documentation site,
-<a class="reference external" href="http://docs.paramiko.org">docs.paramiko.org</a>.</p>
-<p>Please see the sidebar to the left to begin.</p>
-<div class="toctree-wrapper compound">
-</div>
-<p class="rubric">Footnotes</p>
-<table class="docutils footnote" frame="void" id="id2" rules="none">
-<colgroup><col class="label" /><col /></colgroup>
-<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>SSH is defined in <span class="target" id="index-0"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc4251.html"><strong>RFC 4251</strong></a>, <span class="target" id="index-1"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc4252.html"><strong>RFC 4252</strong></a>, <span class="target" id="index-2"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc4253.html"><strong>RFC 4253</strong></a> and <span class="target" id="index-3"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc4254.html"><strong>RFC 4254</strong></a>. The
-primary working implementation of the protocol is the <a class="reference external" href="http://openssh.org">OpenSSH project</a>. Paramiko implements a large portion of the SSH
-feature set, but there are occasional gaps.</td></tr>
-</tbody>
-</table>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="#">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- |
- <a href="_sources/index.txt"
- rel="nofollow">Page source</a>
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/installing-1.x.html b/sites/www/_build.orig/installing-1.x.html
deleted file mode 100644
index c1331258..00000000
--- a/sites/www/_build.orig/installing-1.x.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Installing (1.x) &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
- <link rel="up" title="Installing" href="installing.html" />
- <link rel="next" title="Contributing" href="contributing.html" />
- <link rel="prev" title="Installing" href="installing.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="installing-1-x">
-<h1>Installing (1.x)<a class="headerlink" href="#installing-1-x" title="Permalink to this headline">¶</a></h1>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">Installing Paramiko 2.0 or above? See <a class="reference internal" href="installing.html"><span class="doc">Installing</span></a> instead.</p>
-</div>
-<p>This document includes legacy notes on installing Paramiko 1.x (specifically,
-1.13 and up). Users are strongly encouraged to upgrade to 2.0 when possible;
-PyCrypto (the dependency covered below) is no longer maintained and contains
-security vulnerabilities.</p>
-</div>
-<div class="section" id="general-install-notes">
-<h1>General install notes<a class="headerlink" href="#general-install-notes" title="Permalink to this headline">¶</a></h1>
-<ul>
-<li><p class="first">Python 2.6+ and 3.3+ are supported; Python &lt;=2.5 and 3.0-3.2 are <strong>not
-supported</strong>.</p>
-</li>
-<li><p class="first">See the note in the main install doc about <a class="reference internal" href="installing.html#release-lines"><span class="std std-ref">Release lines</span></a> for details
-on specific versions you may want to install.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">1.x will eventually be entirely end-of-lifed.</p>
-</div>
-</li>
-<li><p class="first">Paramiko 1.7-1.14 have only one dependency: <a class="reference internal" href="#pycrypto"><span class="std std-ref">PyCrypto</span></a>.</p>
-</li>
-<li><p class="first">Paramiko 1.15+ (not including 2.x and above) add a second, pure-Python
-dependency: the <code class="docutils literal"><span class="pre">ecdsa</span></code> module, trivially installable via PyPI.</p>
-</li>
-<li><p class="first">Paramiko 1.15+ (again, not including 2.x and up) also allows you to
-optionally install a few more dependencies to gain support for
-<a class="reference internal" href="#gssapi-on-1x"><span class="std std-ref">GSS-API/Kerberos</span></a>.</p>
-</li>
-<li><p class="first">Users on Windows may want to opt for the <a class="reference internal" href="#pypm"><span class="std std-ref">ActivePython and PyPM</span></a> approach.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="pycrypto">
-<span id="id1"></span><h1>PyCrypto<a class="headerlink" href="#pycrypto" title="Permalink to this headline">¶</a></h1>
-<p><a class="reference external" href="https://www.dlitz.net/software/pycrypto/">PyCrypto</a> provides the low-level
-(C-based) encryption algorithms we need to implement the SSH protocol. There
-are a couple gotchas associated with installing PyCrypto: its compatibility
-with Python&#8217;s package tools, and the fact that it is a C-based extension.</p>
-<div class="section" id="c-extension">
-<h2>C extension<a class="headerlink" href="#c-extension" title="Permalink to this headline">¶</a></h2>
-<p>Unless you are installing from a precompiled source such as a Debian apt
-repository or RedHat RPM, or using <a class="reference internal" href="#pypm"><span class="std std-ref">pypm</span></a>, you will also need the
-ability to build Python C-based modules from source in order to install
-PyCrypto. Users on <strong>Unix-based platforms</strong> such as Ubuntu or Mac OS X will
-need the traditional C build toolchain installed (e.g. Developer Tools / XCode
-Tools on the Mac, or the <code class="docutils literal"><span class="pre">build-essential</span></code> package on Ubuntu or Debian Linux
-&#8211; basically, anything with <code class="docutils literal"><span class="pre">gcc</span></code>, <code class="docutils literal"><span class="pre">make</span></code> and so forth) as well as the
-Python development libraries, often named <code class="docutils literal"><span class="pre">python-dev</span></code> or similar.</p>
-<p>For <strong>Windows</strong> users we recommend using <a class="reference internal" href="#pypm"><span class="std std-ref">ActivePython and PyPM</span></a>, installing a C
-development environment such as <a class="reference external" href="http://cygwin.com">Cygwin</a> or obtaining a
-precompiled Win32 PyCrypto package from <a class="reference external" href="http://www.voidspace.org.uk/python/modules.shtml#pycrypto">voidspace&#8217;s Python modules page</a>.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">Some Windows users whose Python is 64-bit have found that the PyCrypto
-dependency <code class="docutils literal"><span class="pre">winrandom</span></code> may not install properly, leading to ImportErrors.
-In this scenario, you&#8217;ll probably need to compile <code class="docutils literal"><span class="pre">winrandom</span></code> yourself
-via e.g. MS Visual Studio. See <a class="reference external" href="https://github.com/fabric/fabric/issues/194">Fabric #194</a> for info.</p>
-</div>
-</div>
-</div>
-<div class="section" id="activepython-and-pypm">
-<span id="pypm"></span><h1>ActivePython and PyPM<a class="headerlink" href="#activepython-and-pypm" title="Permalink to this headline">¶</a></h1>
-<p>Windows users who already have ActiveState&#8217;s <a class="reference external" href="http://www.activestate.com/activepython/downloads">ActivePython</a> distribution installed
-may find Paramiko is best installed with <a class="reference external" href="http://code.activestate.com/pypm/">its package manager, PyPM</a>. Below is example output from an
-installation of Paramiko via <code class="docutils literal"><span class="pre">pypm</span></code>:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">C</span><span class="p">:</span>\<span class="o">&gt;</span> <span class="n">pypm</span> <span class="n">install</span> <span class="n">paramiko</span>
-<span class="n">The</span> <span class="n">following</span> <span class="n">packages</span> <span class="n">will</span> <span class="n">be</span> <span class="n">installed</span> <span class="n">into</span> <span class="s2">&quot;%APPDATA%\Python&quot;</span> <span class="p">(</span><span class="mf">2.7</span><span class="p">):</span>
- <span class="n">paramiko</span><span class="o">-</span><span class="mf">1.7</span><span class="o">.</span><span class="mi">8</span> <span class="n">pycrypto</span><span class="o">-</span><span class="mf">2.4</span>
-<span class="n">Get</span><span class="p">:</span> <span class="p">[</span><span class="n">pypm</span><span class="o">-</span><span class="n">free</span><span class="o">.</span><span class="n">activestate</span><span class="o">.</span><span class="n">com</span><span class="p">]</span> <span class="n">paramiko</span> <span class="mf">1.7</span><span class="o">.</span><span class="mi">8</span>
-<span class="n">Get</span><span class="p">:</span> <span class="p">[</span><span class="n">pypm</span><span class="o">-</span><span class="n">free</span><span class="o">.</span><span class="n">activestate</span><span class="o">.</span><span class="n">com</span><span class="p">]</span> <span class="n">pycrypto</span> <span class="mf">2.4</span>
-<span class="n">Installing</span> <span class="n">paramiko</span><span class="o">-</span><span class="mf">1.7</span><span class="o">.</span><span class="mi">8</span>
-<span class="n">Installing</span> <span class="n">pycrypto</span><span class="o">-</span><span class="mf">2.4</span>
-<span class="n">C</span><span class="p">:</span>\<span class="o">&gt;</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="optional-dependencies-for-gss-api-sspi-kerberos">
-<span id="gssapi-on-1x"></span><h1>Optional dependencies for GSS-API / SSPI / Kerberos<a class="headerlink" href="#optional-dependencies-for-gss-api-sspi-kerberos" title="Permalink to this headline">¶</a></h1>
-<p>First, see the main install doc&#8217;s notes: <a class="reference internal" href="installing.html#gssapi"><span class="std std-ref">Optional dependencies for GSS-API / SSPI / Kerberos</span></a> - everything there is
-required for Paramiko 1.x as well.</p>
-<p>Additionally, users of Paramiko 1.x, on all platforms, need a final dependency:
-<a class="reference external" href="https://pypi.python.org/pypi/pyasn1">pyasn1</a> <code class="docutils literal"><span class="pre">0.1.7</span></code> or better.</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="installing.html">Installing</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="installing.html#paramiko-itself">Paramiko itself</a></li>
-<li class="toctree-l2"><a class="reference internal" href="installing.html#cryptography">Cryptography</a></li>
-<li class="toctree-l2 current"><a class="reference internal" href="installing.html#optional-dependencies-for-gss-api-sspi-kerberos">Optional dependencies for GSS-API / SSPI / Kerberos</a><ul class="current">
-<li class="toctree-l3 current"><a class="current reference internal" href="#">Installing (1.x)</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#general-install-notes">General install notes</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#pycrypto">PyCrypto</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#c-extension">C extension</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#activepython-and-pypm">ActivePython and PyPM</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#optional-dependencies-for-gss-api-sspi-kerberos">Optional dependencies for GSS-API / SSPI / Kerberos</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- |
- <a href="_sources/installing-1.x.txt"
- rel="nofollow">Page source</a>
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/installing.html b/sites/www/_build.orig/installing.html
deleted file mode 100644
index 8e90dfdb..00000000
--- a/sites/www/_build.orig/installing.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Installing &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
- <link rel="next" title="Installing (1.x)" href="installing-1.x.html" />
- <link rel="prev" title="Frequently Asked/Answered Questions" href="faq.html" />
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="installing">
-<h1>Installing<a class="headerlink" href="#installing" title="Permalink to this headline">¶</a></h1>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">These instructions cover Paramiko 2.0 and above. If you&#8217;re looking to
-install Paramiko 1.x, see <a class="reference internal" href="installing-1.x.html"><span class="doc">Installing (1.x)</span></a>. However, <strong>the 1.x line
-relies on insecure dependencies</strong> so upgrading is strongly encouraged.</p>
-</div>
-<div class="section" id="paramiko-itself">
-<span id="id1"></span><h2>Paramiko itself<a class="headerlink" href="#paramiko-itself" title="Permalink to this headline">¶</a></h2>
-<p>The recommended way to get Paramiko is to <strong>install the latest stable release</strong>
-via <a class="reference external" href="http://pip-installer.org">pip</a>:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$ pip install paramiko
-</pre></div>
-</div>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">Users who want the bleeding edge can install the development version via
-<code class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">paramiko==dev</span></code>.</p>
-</div>
-<p>We currently support <strong>Python 2.6, 2.7, 3.3+, and PyPy</strong>. Users on Python 2.5
-or older (or 3.2 or older) are urged to upgrade.</p>
-<p>Paramiko has only one direct hard dependency: the Cryptography library. See
-<a class="reference internal" href="#cryptography"><span class="std std-ref">Cryptography</span></a>.</p>
-<p>If you need GSS-API / SSPI support, see <a class="reference internal" href="#gssapi"><span class="std std-ref">the below subsection on it</span></a> for details on its optional dependencies.</p>
-<div class="section" id="release-lines">
-<span id="id2"></span><h3>Release lines<a class="headerlink" href="#release-lines" title="Permalink to this headline">¶</a></h3>
-<p>Users desiring stability may wish to pin themselves to a specific release line
-once they first start using Paramiko; to assist in this, we guarantee bugfixes
-for the last 2-3 releases including the latest stable one.</p>
-<p>This typically spans major &amp; minor versions, so even if e.g. 3.1 is the latest
-stable release, it&#8217;s likely that bugfixes will occasionally come out for the
-latest 2.x and perhaps even 1.x releases, as well as for 3.0. New feature
-releases for previous major-version lines are less likely but not unheard of.</p>
-<p>If you&#8217;re unsure which version to install:</p>
-<ul class="simple">
-<li><strong>Completely new users</strong> should always default to the <strong>latest stable
-release</strong> (as above, whatever is newest / whatever shows up with <code class="docutils literal"><span class="pre">pip</span>
-<span class="pre">install</span> <span class="pre">paramiko</span></code>.)</li>
-<li><strong>Users upgrading from a much older version</strong> (e.g. 1.7.x through 1.10.x)
-should probably get the <strong>oldest actively supported line</strong> (check the
-<a class="reference internal" href="changelog.html"><span class="doc">Changelog</span></a> for recent releases).</li>
-<li><strong>Everybody else</strong> is hopefully already &#8220;on&#8221; a given version and can
-carefully upgrade to whichever version they care to, when their release line
-stops being supported.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="cryptography">
-<span id="id3"></span><h2>Cryptography<a class="headerlink" href="#cryptography" title="Permalink to this headline">¶</a></h2>
-<p><a class="reference external" href="https://cryptography.io">Cryptography</a> provides the low-level (C-based)
-encryption algorithms we need to implement the SSH protocol. It has detailed
-<a class="reference external" href="https://cryptography.io/en/latest/installation/">installation instructions</a> (and an <a class="reference external" href="https://cryptography.io/en/latest/faq/">FAQ</a>) which you should read carefully.</p>
-<p>In general, you&#8217;ll need one of the following setups:</p>
-<ul>
-<li><p class="first">On Windows or Mac OS X, provided your <code class="docutils literal"><span class="pre">pip</span></code> is modern (8.x+): nothing else
-is required. <code class="docutils literal"><span class="pre">pip</span></code> will install statically compiled binary archives of
-Cryptography &amp; its dependencies.</p>
-</li>
-<li><p class="first">On Linux, or on other platforms with older versions of <code class="docutils literal"><span class="pre">pip</span></code>: you&#8217;ll need a
-C build toolchain, plus development headers for Python, OpenSSL and
-<code class="docutils literal"><span class="pre">libffi</span></code>. Again, see <a class="reference external" href="https://cryptography.io/en/latest/installation/">Cryptography&#8217;s install docs</a>; these requirements may
-occasionally change.</p>
-<div class="admonition warning">
-<p class="first admonition-title">Warning</p>
-<p class="last">If you go this route, note that <strong>OpenSSL 1.0.1 or newer is effectively
-required</strong>. Cryptography 1.3 and older technically allow OpenSSL 0.9.8, but
-1.4 and newer - which Paramiko will gladly install or upgrade, if you e.g.
-<code class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-U</span></code> - drop that support.</p>
-</div>
-</li>
-</ul>
-</div>
-<div class="section" id="optional-dependencies-for-gss-api-sspi-kerberos">
-<span id="gssapi"></span><h2>Optional dependencies for GSS-API / SSPI / Kerberos<a class="headerlink" href="#optional-dependencies-for-gss-api-sspi-kerberos" title="Permalink to this headline">¶</a></h2>
-<p>In order to use GSS-API/Kerberos &amp; related functionality, a couple of
-additional dependencies are required (these are not listed in our <code class="docutils literal"><span class="pre">setup.py</span></code>
-due to their infrequent utility &amp; non-platform-agnostic requirements):</p>
-<ul>
-<li><p class="first">It hopefully goes without saying but <strong>all platforms</strong> need <strong>a working
-installation of GSS-API itself</strong>, e.g. Heimdal.</p>
-</li>
-<li><p class="first"><strong>Unix</strong> needs <a class="reference external" href="https://pypi.python.org/pypi/python-gssapi/">python-gssapi</a>
-<code class="docutils literal"><span class="pre">0.6.1</span></code> or better.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">This library appears to only function on Python 2.7 and up.</p>
-</div>
-</li>
-<li><p class="first"><strong>Windows</strong> needs <a class="reference external" href="https://pypi.python.org/pypi/pywin32">pywin32</a> <code class="docutils literal"><span class="pre">2.1.8</span></code>
-or better.</p>
-</li>
-</ul>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">If you use Microsoft SSPI for kerberos authentication and credential
-delegation, make sure that the target host is trusted for delegation in the
-active directory configuration. For details see:
-<a class="reference external" href="http://technet.microsoft.com/en-us/library/cc738491%28v=ws.10%29.aspx">http://technet.microsoft.com/en-us/library/cc738491%28v=ws.10%29.aspx</a></p>
-</div>
-<div class="toctree-wrapper compound">
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Installing</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#paramiko-itself">Paramiko itself</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#release-lines">Release lines</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="#cryptography">Cryptography</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#optional-dependencies-for-gss-api-sspi-kerberos">Optional dependencies for GSS-API / SSPI / Kerberos</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="installing-1.x.html">Installing (1.x)</a></li>
-<li class="toctree-l3"><a class="reference internal" href="installing-1.x.html#general-install-notes">General install notes</a></li>
-<li class="toctree-l3"><a class="reference internal" href="installing-1.x.html#pycrypto">PyCrypto</a></li>
-<li class="toctree-l3"><a class="reference internal" href="installing-1.x.html#activepython-and-pypm">ActivePython and PyPM</a></li>
-<li class="toctree-l3"><a class="reference internal" href="installing-1.x.html#optional-dependencies-for-gss-api-sspi-kerberos">Optional dependencies for GSS-API / SSPI / Kerberos</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- |
- <a href="_sources/installing.txt"
- rel="nofollow">Page source</a>
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/objects.inv b/sites/www/_build.orig/objects.inv
deleted file mode 100644
index 358b8f96..00000000
--- a/sites/www/_build.orig/objects.inv
+++ /dev/null
@@ -1,8 +0,0 @@
-# Sphinx inventory version 2
-# Project: Paramiko
-# Version:
-# The remainder of this file is compressed using zlib.
-xڥR=O0+UU"ٵ_44iZ~{_%*SQt<*
-)$xp#40c4A79'EBw tVm/Sl(Tr%[pߠP3С}F{RZa0gu{f^ї)hi.8x.
-+CQ :gj4]?9NMS!șcܙrJ=UMFb2觋;FYmiza%vQm/&5Nl53:d<OP L!_
-Gڱ]='jXLsV"!Z, \ No newline at end of file
diff --git a/sites/www/_build.orig/search.html b/sites/www/_build.orig/search.html
deleted file mode 100644
index 3473f810..00000000
--- a/sites/www/_build.orig/search.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Search &mdash; Paramiko documentation</title>
-
- <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <script type="text/javascript" src="_static/searchtools.js"></script>
- <link rel="top" title="Paramiko documentation" href="index.html" />
- <script type="text/javascript">
- jQuery(function() { Search.loadIndex("searchindex.js"); });
- </script>
-
- <script type="text/javascript" id="searchindexloader"></script>
-
-
- <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-
- </head>
- <body role="document">
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <h1 id="search-documentation">Search</h1>
- <div id="fallback" class="admonition warning">
- <script type="text/javascript">$('#fallback').hide();</script>
- <p>
- Please activate JavaScript to enable the search
- functionality.
- </p>
- </div>
- <p>
- From here you can search these documents. Enter your search
- words into the box below and click "search". Note that the search
- function will automatically search for all of the words. Pages
- containing fewer words won't appear in the result list.
- </p>
- <form action="" method="get">
- <input type="text" name="q" value="" />
- <input type="submit" value="search" />
- <span id="search-progress" style="padding-left: 10px"></span>
- </form>
-
- <div id="search-results">
-
- </div>
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">Paramiko</a></h1>
-
-
-
-<p class="blurb">A Python implementation of SSHv2.</p>
-
-
-
-
-<p>
-<iframe src="https://ghbtns.com/github-btn.html?user=paramiko&repo=paramiko&type=watch&count=true&size=large&v=2"
- allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
-</p>
-
-
-
-
-
-
-
-<p>
-<a href="https://travis-ci.org/paramiko/paramiko">
- <img
- alt="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- src="https://secure.travis-ci.org/paramiko/paramiko.svg?branch=master"
- />
-</a>
-</p>
-
-
-<h3>Navigation</h3>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
-<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQs</a></li>
-<li class="toctree-l1"><a class="reference internal" href="installing.html">Installing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact</a></li>
-</ul>
-
-
-<hr />
-<ul>
-
- <li class="toctree-l1"><a href="http://docs.paramiko.org">API Docs</a></li>
-
-</ul>
-
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- &copy;2016 Jeff Forcier.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.4</a>
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- </div>
-
-
-
-
- <script type="text/javascript">
-
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-18486793-2']);
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_setAllowLinker', true]);
- _gaq.push(['_trackPageview']);
-
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-
- </script>
-
- </body>
-</html> \ No newline at end of file
diff --git a/sites/www/_build.orig/searchindex.js b/sites/www/_build.orig/searchindex.js
deleted file mode 100644
index 4d65cfa3..00000000
--- a/sites/www/_build.orig/searchindex.js
+++ /dev/null
@@ -1 +0,0 @@
-Search.setIndex({envversion:49,filenames:["changelog","contact","contributing","faq","index","installing","installing-1.x"],objects:{},objnames:{},objtypes:{},terms:{"1mb":0,"28v":5,"__init__":0,"__repr__":0,"_winapi":0,"break":[0,3],"byte":0,"case":[0,3],"catch":0,"class":0,"default":[0,5],"dei\u00df":0,"final":[0,6],"function":[0,3,4,5],"import":0,"int":0,"l\u00f8vborg":0,"long":0,"new":0,"pievil\u00e4inen":0,"private":0,"przemys\u0142aw":0,"public":0,"return":0,"s\u00f8ren":0,"static":5,"switch":0,"try":0,"while":[0,4],"y\u0131lmaz":0,aarni:0,aaron:0,ab9:0,abhinav:0,abil:6,abl:0,about:[0,3,6],abov:[5,6],access:[0,3],account:0,achapp:0,activest:6,actual:[0,3],adam:0,adamkerz:0,add:[0,6],added:0,addit:[0,5],addition:6,addon:0,address:0,addressfamili:0,adher:0,advic:0,aes192:0,affect:[0,3],after:0,again:[0,2,5,6],against:0,ageant:0,agent:0,agentrequesthandl:0,aggress:0,agnost:[2,5],aka:0,alex:0,alfredo:0,algorithm:[0,5,6],all:[0,2,5,6],allow:[0,5,6],almost:3,alreadi:[0,5,6],also:[0,6],alwai:[0,3,5],amauri:0,among:0,andrew:0,ani:[0,1,3],annotat:0,anselm:0,antoin:0,anyth:6,api:[0,4],appdata:6,appear:[0,5],apply:0,approach:6,appropri:0,apt:6,archiv:5,aren:0,arg:0,argument:0,argumenterror:0,armin:0,arnold:0,around:[0,4],artifact:0,ash:0,aspx:5,assist:[0,5],associ:6,assum:0,async:0,aszlig:0,attack:0,attempt:0,attent:0,attribut:0,attributeerror:0,auth:0,authent:[0,5],authenticationexcept:0,authenticationmethod:0,author:0,avail:0,averag:3,avoid:0,awar:0,backup:0,backward:0,badhostkeyexcept:0,banner:0,base:[0,5,6],basestr:0,basic:6,basictheprogram:0,batch:0,bdist_dumb:0,becaus:3,beckjak:0,been:0,befor:0,begeman:0,begin:4,behavior:0,below:[5,6],benfield:0,benjamin:0,berlin:0,besid:0,best:6,better:[0,5,6],bevvi:0,bhattacharya:0,bieber:0,big:0,binari:[0,5],bit:[0,6],bit_length:0,bleed:5,block:0,blog:[1,4],blumenstingl:0,bochicchio:0,botch:0,both:[0,4],bound:0,bous:0,brand:0,breakag:0,brenner:0,bring:0,brisbin:0,broke:0,broken:0,brown:0,bsd:3,buchanan:0,buehl:0,buffer:0,bufferedfil:0,bufferedpip:0,bug:0,bugfix:[0,5],build:[0,5,6],built:0,bump:0,bunch:0,bygon:0,bzr:0,call:0,callback:0,came:0,camp:0,can:[0,1,3,4,5],canon:0,care:5,carefulli:5,caus:[0,3],cbc:0,cc738491:5,cernov:0,certain:0,chanc:0,chang:[0,5],channel:0,charact:0,charg:0,check:[0,5],cherri:0,chri:0,christoph:0,cipher:0,cisco:0,clean:0,cleanup:0,client:[0,4],clone:2,close:[0,3],closur:0,code:0,codebas:0,cohen:0,com:[1,5,6],combin:0,come:5,command:0,comment:3,common:0,commun:[0,1],comparison:0,compat:[0,6],compil:[5,6],complet:5,concept:4,concern:0,condit:[0,3],config:0,configur:5,conform:0,connect:[0,3],consid:3,consist:0,consolid:0,constant:0,construct:0,contain:[0,6],content:0,context:0,continu:0,contribut:[0,1],contributor:0,control:0,conveni:0,convers:0,convert:0,coomb:0,copi:0,cori:0,corner:3,correct:0,correctli:0,corrupt:0,could:0,coupl:[0,5,6],courtesi:0,cover:[4,5,6],cpu:0,crazycasta:0,creat:0,creation:0,credenti:5,credit:0,critic:0,crlf:0,crop:0,cross:0,cryptograph:0,cryptographi:[0,4],ctr:0,ctype:0,current:[2,5],cursor:0,curv:0,custom:0,cygwin:6,cyphas:0,dachari:0,dacut:0,dag:0,dai:0,damien:0,daniel:0,data:0,davar:0,dave:0,david:0,dboreham:0,deadlock:0,debian:6,debug:0,decor:0,defer:0,defin:4,definit:0,deleg:5,demo:0,demo_simpl:0,depend:0,der:0,descriptor:0,desir:5,desmet:0,despit:0,detail:[0,1,4,5,6],determinist:0,dev:[5,6],develop:[1,3,4,5,6],devic:0,differ:0,diffi:0,dijk:0,direct:[0,5],directori:5,discuss:0,displai:0,distribut:[3,6],doc:[0,3,4,5,6],docstr:0,document:[0,2,4,6],doe:3,doesn:0,don:0,dorian:0,dos:0,download:0,dozen:0,dri:0,driven:0,drop:[0,5],dsskei:0,due:[0,5],dunsmor:0,duplic:0,dure:0,dylan:0,earlier:0,easi:0,easier:0,ecdsa:[0,6],edg:5,edit:0,effect:5,effici:0,effort:0,egroep:0,ellipt:0,els:5,emploi:0,empti:0,emre:0,enabl:0,encod:0,encount:0,encourag:[5,6],encrypt:[0,5,6],end:[0,6],enhanc:0,enough:0,ensure:0,entir:6,entri:0,env:0,environ:6,epydoc:0,eric:0,erron:0,error:0,especi:0,essenti:6,esteban:0,etc:3,ethan:0,etienn:0,even:[0,5],event:0,eventu:6,everi:[0,3],everybodi:5,everyon:0,everyth:6,exampl:6,exce:0,excel:2,except:0,exchang:0,exec:0,exec_command:0,exist:[0,3],expand:0,expans:0,expect:0,explicit:[0,3],explicitli:[2,3],explod:0,expos:0,expose:0,extens:4,fabric:[0,6],fact:6,factor:0,fail:0,failur:0,fallback:0,famili:0,faq:5,featur:[0,4,5],feedback:0,few:[0,6],file:[0,2],file_s:0,filenam:0,fileno:0,find:6,fire:0,first:[0,2,5,6],fix:0,follow:[1,2,5,6],followup:0,footer:0,footnot:4,forego:0,fork:2,forth:[4,6],forthcom:1,forward:0,foster:0,found:[3,4,6],foundat:0,fqdn:0,frank:0,free:6,freenod:1,freez:3,frequent:0,from:[0,3,5,6],fulli:[0,3],gabi:0,gain:6,gap:4,gatewai:0,gaynor:0,gcc:6,gedmina:0,gener:[0,5],gernot:0,gert:0,get:[0,1],get_bann:0,get_byt:0,get_hostnam:0,get_pti:0,get_str:0,get_text:0,getfo:0,git:2,github:[0,1,2],given:[0,5],gladli:5,glasser:0,glasserc:0,goe:5,goertzen:0,gotcha:6,gracefulli:0,group:0,grow:0,gss:0,gssapi:[0,5],guarante:5,guard:0,guid:2,guidelin:4,guillaum:0,gustavsen:0,guyshaanan:0,had:0,halcrow:0,halter:0,hanc:0,hand:0,handl:0,handrol:0,handshak:0,hang:0,hard:5,harder:0,hash:0,hashlib:0,have:0,header:[0,5],hei:0,heimdal:5,heller:0,hellman:0,help:0,helper:0,henslei:0,here:0,hillier:0,hiscock:0,histor:[0,2],hmac:0,hobb:0,homepag:1,honor:0,hopefulli:5,host:[0,3,5],hostnam:0,howev:[0,3,5],http:5,human:0,hung:0,ibm:0,ideal:3,identifi:0,ignor:0,implement:[0,3,4,5,6],impli:3,implicitli:0,importerror:6,improv:0,improve:0,inaccuraci:0,includ:[0,5,6],include:0,incompat:0,incorrect:0,incorrectli:0,indentat:0,index:0,indexerror:0,ineffici:0,infinit:0,info:6,inform:[0,4],infrequ:5,initi:0,input:0,insecur:5,instal:[0,3,5],install_requir:0,instanc:0,instead:[0,6],instruct:[2,5],intend:[0,2],interact:0,interfac:[0,4],intern:0,interpret:0,introduc:0,introspect:0,invalid:0,ipv4:0,ipv6:0,irc:[0,1],isinst:0,isn:3,issu:0,itself:[0,4],ivan:0,jame:0,jamerce:0,jan:0,jaraco:0,jare:0,jason:0,jeff:0,jelmer:0,jeremi:0,jhoanor:0,john:0,johnson:0,johnthagen:0,jonathan:0,jordan:0,just:0,justin:0,kalchevskii:0,kehrer:0,kei:0,kellett:0,ken:0,kerbero:0,kettlewel:0,kevin:0,kex:0,key:0,keyboard:0,kieran:0,known_host:0,kobo:0,kolff:0,kolodyazhni:0,koskela:0,kowalski:0,krui:0,krzysztof:0,ksamuel:0,kwarg:0,lack:0,landschoff:0,languag:0,larg:4,last:5,latest:5,lazik:0,lead:[0,6],least:0,lecher:0,left:[0,4],legaci:6,lekhonkhob:0,less:[0,5],let:0,level:[0,2,4,5,6],leverag:[0,4],libffi:5,librari:[0,5,6],librelist:1,licens:0,life:6,like:[0,2,5],limit:[0,3],line:0,linux:[3,5,6],list:[0,1,5],listdir_it:0,listen:0,liter:0,load:0,local:[0,2],localforward:0,locat:2,lock:[0,3],log:0,logic:0,loic:0,longer:[0,6],look:[0,5],loop:0,lotteri:0,love:3,low:[4,5,6],lower:0,lucasrmehl:0,lucki:0,lundberg:0,mac:[0,3,5,6],mai:[0,5,6],mail:[0,1],main:6,mainstream:3,maintain:[0,6],major:[0,5],make:[0,3,5,6],man:0,manag:[0,6],mani:0,manner:0,manual:0,map:0,mariu:0,marqu:0,marshal:0,martin:0,mateusz:0,matt:0,matthia:0,matthij:0,maxwel:0,mean:3,mega:0,meili:0,member:0,memori:0,merg:0,messag:0,method:0,meurer:0,mic:0,michael:0,michiel:0,microsoft:5,might:0,migrat:0,minor:[0,5],miss:0,mjmaenpaa:0,mode:0,modern:[0,5],modul:[0,6],moduli:0,more:[0,6],morrissei:0,moss:0,most:0,much:[0,5],multipl:0,muralee:0,murau:0,mvschaik:0,name:[0,6],nathan:0,necessari:3,need:[0,5,6],negoti:0,network:[0,4],nevin:0,newer:[0,5],newest:5,news:2,next:0,nick:0,nistp384:0,nistp521:0,noisi:0,non:0,none:0,nonstandard:3,nontrivi:0,noonan:0,note:[0,5],noth:5,notic:0,novalidconnectionserror:0,now:0,number:0,nunn:0,object:[0,3],obnam:0,obtain:6,occasion:[0,4,5],occur:0,odding:0,off:0,offer:0,often:[0,6],old:0,older:5,oldest:5,olle:0,onc:5,onli:[0,2,3,5,6],open:0,openssh:[0,3,4],openssl:5,oper:0,opt:6,option:[0,5,6],order:[0,5,6],org:4,origin:0,ostacei:0,other:0,otherwis:0,our:[0,2,4,5],out:[0,5],output:[0,6],overflowerror:0,overhaul:0,overli:0,overlook:0,overrid:0,overridden:0,packag:6,packet:0,pad:0,page:[1,6],pageant:0,paramet:0,paramiko:[0,1,2],parantapa:0,pars:0,partial:0,particular:0,pass:0,pat:0,patch:[0,2,3],patchset:0,patienc:0,paul:0,peopl:0,percival:0,perform:0,perhap:5,permiss:0,perot:0,perryjrandal:0,pertin:0,peter:0,petri:0,phillip:0,pick:0,pickl:0,pillitteri:0,pin:5,pip:[0,5],pipe:0,platform:[0,3,5,6],pleas:[0,2,3,4],plu:5,plugaru:0,point:0,poll:0,pollack:0,pope:0,port:0,portion:4,possibl:[0,3,6],post:[0,3],potenti:0,prasanna:0,precompil:6,prefetch:0,present:0,previou:5,previous:0,primari:[2,4],primarili:0,prime:0,print:0,prior:0,privat:0,probabl:[5,6],problem:0,problemat:0,process:0,program:0,project:[0,2,4],prop:0,properli:[0,6],properti:0,protect:0,protocol:[0,4,5,6],proven:3,provid:[0,3,4,5,6],proxi:0,proxycommand:0,pty:0,pubkei:0,pula:0,pull:2,pure:[4,6],pursehous:0,put:0,putfo:0,putty:0,pyasn1:6,pyca:0,pycrypo:0,pycrypto:0,pypi:[0,5,6],python3:0,python:[0,4,5,6],pywin32:[0,5],quast:0,quot:0,race:[0,3],rais:0,random:0,read:[0,5],readabl:0,readlin:0,readme:0,realiz:0,rebecca:0,receiv:0,recent:[0,5],recommend:[2,5,6],redhat:6,redixin:0,refactor:0,regard:0,regress:0,reimplement:0,relat:[0,5],releas:0,reli:5,remind:0,remot:0,remoteforward:0,remov:0,renam:0,replac:0,report:0,repositori:[2,6],represent:0,reproduct:0,request:[0,2],requir:[0,5,6],resolut:0,resolv:0,resourc:0,resourcewarn:0,respons:0,result:0,review:0,rfc:[0,4],richard:0,right:3,roadmap:4,robenolt:0,rodriguez:0,roi:0,ronach:0,rose:0,rout:5,rpm:6,rst:[0,2],run:[0,3],rusek:0,sai:5,said:0,salt:0,same:0,saniti:0,santhanam:0,saw:0,scenario:6,schlussel:0,schulz:0,scott:0,scowcroft:0,sean:0,sebastian:0,second:6,section:[1,3],secur:[0,6],see:[0,1,2],select:0,self:0,sens:0,sergei:0,server:[0,4],session:0,set:[0,4],set_ev:0,setup:[0,5],setuptool:0,sftp:0,sftp_client:0,sftpattribut:0,sftpclient:0,sftpfile:0,sha1:0,sha256:0,sha2:0,sha:0,share:0,sherbang:0,shim:0,shit:0,shlex:0,should:0,show:5,shutdown:0,side:0,sidebar:4,sigmunau:0,signatur:0,signific:0,significantli:0,silent:0,similar:6,similarli:3,simon:0,simpli:0,sinc:0,site:[2,4],situat:0,size:0,skip:0,slowdown:0,small:0,smarter:0,smith:0,smunaut:0,socket:0,softwar:0,solarw:0,solut:3,some:[0,6],sometim:0,sort:3,sourc:6,span:5,spear:0,spec:0,specif:[0,5,6],specifi:0,speed:0,speedup:0,sphinx:0,spier:0,sporad:0,spot:0,spuriou:0,ssh:[0,3,4,5,6],ssh_config:0,sshclient:[0,3],sshd:0,sshexception:0,sshv2:4,sspi:0,stabil:5,stabl:5,stale:0,stall:0,standard:3,starr:0,start:[0,5],starvat:0,stat:0,stdlib:0,stephen:0,sterl:0,steve:0,steven:0,stevevanhoos:0,still:[0,3],stop:5,store:0,str:0,streamlin:0,strictli:3,string:0,strip:0,strongli:[5,6],structur:0,strzelczak:0,studio:6,style:0,submiss:3,submit:[0,1],subsect:5,subsequ:0,subset:0,suggest:0,suit:0,sunweav:0,suppli:0,support:[0,3,5,6],sure:[0,3,5],surfac:0,swap:0,swenson:0,swohlerll:0,symptom:0,system:2,target:[0,3,5],technet:5,technic:5,techniqu:0,techtonik:0,tegtmeier:0,tent:0,test:0,text:0,textual:0,thacker:0,than:0,thank:0,thei:[0,3,5],them:0,themselv:5,thi:[0,1,2,3,4,5,6],thing:0,think:0,those:[0,3],thread:0,through:5,ticket:3,tighten:0,tiller:0,time:[0,3],timeout:0,tkrapp:0,toejough:0,toggl:0,tomaz:0,tomi:0,too:0,tool:6,toolchain:[5,6],top:2,topholm:0,topic:3,torkil:0,torsten:0,total:0,touch:1,tournoud:0,traceback:0,tracker:2,tradit:6,trail:0,transfer:0,transport:0,travi:0,trigger:0,trivial:6,troubleshoot:0,trove:0,trust:5,trustworthi:0,tshepang:0,turn:0,tweak:0,twice:0,two:0,type:0,typeerror:0,typic:[3,5],typo:0,uac:0,ubuntu:6,ulrich:0,under:0,unfortun:3,unheard:5,unicodedecodeerror:0,univers:0,unix:0,unknown:0,unless:6,unnecessari:0,unpars:0,unpickl:0,unsur:5,until:0,unus:0,upadhyai:0,updat:0,update:0,upgrad:[0,5,6],upload:0,upper:0,urandom:0,urg:5,usag:[0,1,4],use:0,used:0,useless:0,user:[0,1,3,5,6],usual:[0,3],utf:0,util:5,valid:0,valu:0,van:0,variabl:0,variou:3,vasilyev:0,vazir:0,vector:0,vendor:0,verif:0,vernooij:0,version:0,versionad:0,via:[0,5,6],visual:6,vladimir:0,vleuten:0,voidspac:6,volunt:3,vulner:6,wai:[0,1,5],wait:0,want:[5,6],warn:0,warner:0,warthog618:0,websit:[0,1,4],well:[0,3,5,6],wellington:0,were:0,what:0,whatev:5,wheel:0,when:[0,5,6],where:0,which:0,whichev:5,whitespac:0,who:[0,5,6],whose:[0,6],wieer:0,williamson:0,win32:6,win_pag:0,window:0,winner:0,winpag:0,winrandom:6,wish:5,within:0,without:5,witt:0,work:0,world:3,would:[0,3],write:0,www:2,xavier:0,xcode:6,yan:0,year:0,yield:0,you:[0,1,2,3,5,6],your:[0,2,3,5],yourself:6,yvan:0,zitta:0},titles:["Changelog","Contact","Contributing","Frequently Asked/Answered Questions","Welcome to Paramiko!","Installing","Installing (1.x)"],titleterms:{"new":2,activ:3,activepython:6,answere:3,api:[5,6],asked:3,bug:2,changelog:0,cisco:3,code:[2,3],contact:1,contribut:2,cryptographi:5,depend:[5,6],doesn:3,extens:6,frequent:3,gener:6,get:2,gss:[5,6],hang:3,have:3,how:2,instal:6,install:[5,6],issu:3,itself:5,kerbero:[5,6],line:5,multipl:3,non:3,note:6,optional:[5,6],other:3,paramiko:[3,4,5],pycrypto:6,pypm:6,question:3,releas:[3,5],report:2,see:3,should:3,shutdown:3,sspi:[5,6],strang:3,submit:2,system:3,unix:3,version:3,welcom:4,which:3,window:3,work:3}}) \ No newline at end of file