Full Code of mitmedialab/medrec for AI

master 3e63800480b4 cached
126 files
10.5 MB
2.7M tokens
3176 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (11,010K chars total). Download the full file to get everything.
Repository: mitmedialab/medrec
Branch: master
Commit: 3e63800480b4
Files: 126
Total size: 10.5 MB

Directory structure:
gitextract_v7yq1at4/

├── .gitignore
├── DatabaseManager/
│   ├── .gitignore
│   ├── README.md
│   ├── asset/
│   │   ├── index.html
│   │   ├── jquery-1.11.1.js
│   │   └── socket.io-1.3.7.js
│   ├── common/
│   │   └── common.go
│   ├── database-sample-architecture.xlsx
│   ├── ethereum/
│   │   ├── AgentRegistryDaemon.go
│   │   ├── README.md
│   │   └── ethereum.go
│   ├── localRPC/
│   │   ├── listener.go
│   │   ├── localUsers.go
│   │   ├── localUsers_test.go
│   │   └── remoteUsers.go
│   ├── manager.go
│   ├── middleware/
│   │   ├── enableCORS.go
│   │   ├── logger.go
│   │   └── whitelist.go
│   ├── remoteRPC/
│   │   ├── auth.go
│   │   ├── databse.go
│   │   ├── documentRequest.go
│   │   ├── ethereum.go
│   │   ├── ethereum_test.go
│   │   ├── listener.go
│   │   └── permissions.go
│   └── scripts/
│       ├── createDocuments.go
│       ├── insert-patient.sql
│       └── test-db.sql
├── GolangJSHelpers/
│   ├── .eslintrc
│   ├── addAgentToRegistry.js
│   ├── clientBinaries.json
│   ├── generateNewAccount.js
│   ├── getProviderHost.js
│   ├── getSigners.js
│   ├── medrec-genesis.json
│   ├── package.json
│   ├── startGeth.js
│   └── tsconfig.json
├── LICENSE
├── README.md
├── SmartContracts/
│   ├── .eslintrc
│   ├── README.md
│   ├── build/
│   │   └── contracts/
│   │       ├── Agent.json
│   │       ├── AgentGroup.json
│   │       ├── AgentRegistry.json
│   │       ├── AllAccessRelationship.json
│   │       ├── DeadmanSwitch.json
│   │       ├── Migrations.json
│   │       └── Relationship.json
│   ├── contracts/
│   │   ├── Agent.sol
│   │   ├── AgentGroup.sol
│   │   ├── AgentRegistry.sol
│   │   ├── AllAccessRelationship.sol
│   │   ├── DeadmanSwitch.sol
│   │   ├── Migrations.sol
│   │   └── Relationship.sol
│   ├── migrations/
│   │   ├── 1_initial_migration.js
│   │   └── 2_deploy_contracts.js
│   ├── test/
│   │   ├── agent.js
│   │   ├── agentGroup.js
│   │   ├── agentRegistry.js
│   │   ├── constants.js
│   │   ├── deadmanSwitch.js
│   │   └── relationship.js
│   └── truffle.js
├── UserClient/
│   ├── .eslintrc
│   ├── README.md
│   ├── build/
│   │   ├── asset-manifest.json
│   │   ├── index.html
│   │   ├── service-worker.js
│   │   └── static/
│   │       ├── css/
│   │       │   └── main.d82984ea.css
│   │       └── js/
│   │           └── main.477a304c.js
│   ├── config/
│   │   ├── env.js
│   │   ├── paths.js
│   │   ├── polyfills.js
│   │   ├── webpack.config.dev.js
│   │   ├── webpack.config.prod.js
│   │   └── webpackDevServer.config.js
│   ├── electron-starter.js
│   ├── package.json
│   ├── public/
│   │   ├── index.html
│   │   └── manifest.json
│   ├── scripts/
│   │   ├── build.js
│   │   └── start.js
│   └── src/
│       ├── DropDownMenu.jsx
│       ├── Ethereum.js
│       ├── Footer.js
│       ├── Header.js
│       ├── RPCClient.js
│       ├── constants.js
│       ├── dropdownmenu.css
│       ├── electron-wait-react.js
│       ├── home/
│       │   ├── Home.js
│       │   ├── home.css
│       │   ├── home.scss
│       │   └── reducer.js
│       ├── index.js
│       ├── patient/
│       │   ├── Patient.jsx
│       │   ├── Sidepanel.js
│       │   ├── reducer.js
│       │   └── views/
│       │       ├── About.js
│       │       ├── Home.js
│       │       ├── Network.js
│       │       ├── Relationships.js
│       │       ├── Tests.js
│       │       ├── Topics.js
│       │       ├── chart.css
│       │       └── home.css
│       ├── provider/
│       │   ├── Provider.jsx
│       │   ├── Sidepanel.js
│       │   ├── patientList.js
│       │   └── views/
│       │       ├── Home.js
│       │       ├── PatientList.js
│       │       └── home.css
│       ├── reduxStore.js
│       └── registerServiceWorker.js
├── build-linux-amd4.sh
├── main.go
├── medrec-amd64
├── presentations/
│   └── blockchain-and-medrec.html
└── scripts/
    ├── createDocuments.go
    ├── insert-patient.sql
    ├── medrec-v1.sql
    ├── medrecWebApp.sql
    └── test-db.sql

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# See https://help.github.com/ignore-files/ for more about ignoring files.

# dependencies
node_modules

# testing
/coverage

# production
/build
/*.tar.gz

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*

EthereumClient/Geth
${HOME}


================================================
FILE: DatabaseManager/.gitignore
================================================
./DatabaseManager


================================================
FILE: DatabaseManager/README.md
================================================
we can now launch requests to the go backend through a web socket! This uses https://github.com/gorilla/websocket to communicate with an electron (currently plain html) frontend.

```
$ go get github.com/googollee/go-socket.io
$ go get github.com/go-sql-driver/mysql
$ go build
$ ./build
```
everything should come up on localhost:3000.

Modules:
- remoteRPC accepts/denies requests for access to a provider database of PPI
- localRPC connects to a local cache and user login store
- assets folder -- houses a demo test web app (index.html, jquery, etc.)
- ethereum -- code for making queries to smart contracts on the blockchain
- params - contains constants and struct definitions


================================================
FILE: DatabaseManager/asset/index.html
================================================
<html>
<head>
    <title>WebSocket demo</title>
</head>
<body>

    <div>
        <form action>
            <label for="patientfield">Patient ID</label>
            <input type="text" id="patientfield" placeholder="12"/><br />
            <button type="button" id="sendBtn">Send</button>
        </form>
    </div>
    <div id="container"></div>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(function () {
            var ws;
            if (window.WebSocket === undefined) {
                $("#container").append("Your browser does not support WebSockets");
                return;
            } else {
                ws = initWS();
            }
            function initWS() {
                var socket = new WebSocket("ws://localhost:3000/remoteWS"),
                    container = $("#container")
                socket.onopen = function() {
                    container.append("<p>talking to MedRec server</p>");
                };
                socket.onmessage = function (e) {
                    container.append("<p> Recent record for patient with ID " + e.data + "</p>");
                }
                socket.onclose = function () {
                    container.append("<p>Socket closed</p>");
                }
                return socket;
            }
            $("#sendBtn").click(function (e) {
                e.preventDefault();
                ws.send(JSON.stringify({ patientID: parseInt($("#patientfield").val()) }));
            });
        });
    </script>
</body>
</html>


================================================
FILE: DatabaseManager/asset/jquery-1.11.1.js
================================================
/*!
 * 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 )
Download .txt
gitextract_v7yq1at4/

├── .gitignore
├── DatabaseManager/
│   ├── .gitignore
│   ├── README.md
│   ├── asset/
│   │   ├── index.html
│   │   ├── jquery-1.11.1.js
│   │   └── socket.io-1.3.7.js
│   ├── common/
│   │   └── common.go
│   ├── database-sample-architecture.xlsx
│   ├── ethereum/
│   │   ├── AgentRegistryDaemon.go
│   │   ├── README.md
│   │   └── ethereum.go
│   ├── localRPC/
│   │   ├── listener.go
│   │   ├── localUsers.go
│   │   ├── localUsers_test.go
│   │   └── remoteUsers.go
│   ├── manager.go
│   ├── middleware/
│   │   ├── enableCORS.go
│   │   ├── logger.go
│   │   └── whitelist.go
│   ├── remoteRPC/
│   │   ├── auth.go
│   │   ├── databse.go
│   │   ├── documentRequest.go
│   │   ├── ethereum.go
│   │   ├── ethereum_test.go
│   │   ├── listener.go
│   │   └── permissions.go
│   └── scripts/
│       ├── createDocuments.go
│       ├── insert-patient.sql
│       └── test-db.sql
├── GolangJSHelpers/
│   ├── .eslintrc
│   ├── addAgentToRegistry.js
│   ├── clientBinaries.json
│   ├── generateNewAccount.js
│   ├── getProviderHost.js
│   ├── getSigners.js
│   ├── medrec-genesis.json
│   ├── package.json
│   ├── startGeth.js
│   └── tsconfig.json
├── LICENSE
├── README.md
├── SmartContracts/
│   ├── .eslintrc
│   ├── README.md
│   ├── build/
│   │   └── contracts/
│   │       ├── Agent.json
│   │       ├── AgentGroup.json
│   │       ├── AgentRegistry.json
│   │       ├── AllAccessRelationship.json
│   │       ├── DeadmanSwitch.json
│   │       ├── Migrations.json
│   │       └── Relationship.json
│   ├── contracts/
│   │   ├── Agent.sol
│   │   ├── AgentGroup.sol
│   │   ├── AgentRegistry.sol
│   │   ├── AllAccessRelationship.sol
│   │   ├── DeadmanSwitch.sol
│   │   ├── Migrations.sol
│   │   └── Relationship.sol
│   ├── migrations/
│   │   ├── 1_initial_migration.js
│   │   └── 2_deploy_contracts.js
│   ├── test/
│   │   ├── agent.js
│   │   ├── agentGroup.js
│   │   ├── agentRegistry.js
│   │   ├── constants.js
│   │   ├── deadmanSwitch.js
│   │   └── relationship.js
│   └── truffle.js
├── UserClient/
│   ├── .eslintrc
│   ├── README.md
│   ├── build/
│   │   ├── asset-manifest.json
│   │   ├── index.html
│   │   ├── service-worker.js
│   │   └── static/
│   │       ├── css/
│   │       │   └── main.d82984ea.css
│   │       └── js/
│   │           └── main.477a304c.js
│   ├── config/
│   │   ├── env.js
│   │   ├── paths.js
│   │   ├── polyfills.js
│   │   ├── webpack.config.dev.js
│   │   ├── webpack.config.prod.js
│   │   └── webpackDevServer.config.js
│   ├── electron-starter.js
│   ├── package.json
│   ├── public/
│   │   ├── index.html
│   │   └── manifest.json
│   ├── scripts/
│   │   ├── build.js
│   │   └── start.js
│   └── src/
│       ├── DropDownMenu.jsx
│       ├── Ethereum.js
│       ├── Footer.js
│       ├── Header.js
│       ├── RPCClient.js
│       ├── constants.js
│       ├── dropdownmenu.css
│       ├── electron-wait-react.js
│       ├── home/
│       │   ├── Home.js
│       │   ├── home.css
│       │   ├── home.scss
│       │   └── reducer.js
│       ├── index.js
│       ├── patient/
│       │   ├── Patient.jsx
│       │   ├── Sidepanel.js
│       │   ├── reducer.js
│       │   └── views/
│       │       ├── About.js
│       │       ├── Home.js
│       │       ├── Network.js
│       │       ├── Relationships.js
│       │       ├── Tests.js
│       │       ├── Topics.js
│       │       ├── chart.css
│       │       └── home.css
│       ├── provider/
│       │   ├── Provider.jsx
│       │   ├── Sidepanel.js
│       │   ├── patientList.js
│       │   └── views/
│       │       ├── Home.js
│       │       ├── PatientList.js
│       │       └── home.css
│       ├── reduxStore.js
│       └── registerServiceWorker.js
├── build-linux-amd4.sh
├── main.go
├── medrec-amd64
├── presentations/
│   └── blockchain-and-medrec.html
└── scripts/
    ├── createDocuments.go
    ├── insert-patient.sql
    ├── medrec-v1.sql
    ├── medrecWebApp.sql
    └── test-db.sql
Download .txt
Showing preview only (248K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3176 symbols across 57 files)

FILE: DatabaseManager/asset/jquery-1.11.1.js
  function isArraylike (line 570) | function isArraylike( obj ) {
  function Sizzle (line 773) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 888) | function createCache() {
  function markFunction (line 906) | function markFunction( fn ) {
  function assert (line 915) | function assert( fn ) {
  function addHandle (line 937) | function addHandle( attrs, handler ) {
  function siblingCheck (line 952) | function siblingCheck( a, b ) {
  function createInputPseudo (line 979) | function createInputPseudo( type ) {
  function createButtonPseudo (line 990) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1001) | function createPositionalPseudo( fn ) {
  function testContext (line 1024) | function testContext( context ) {
  function setFilters (line 2021) | function setFilters() {}
  function toSelector (line 2092) | function toSelector( tokens ) {
  function addCombinator (line 2102) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2155) | function elementMatcher( matchers ) {
  function multipleContexts (line 2169) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2178) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2199) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2292) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2347) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function winnow (line 2643) | function winnow( elements, qualifier, not ) {
  function sibling (line 2973) | function sibling( cur, dir ) {
  function createOptions (line 3056) | function createOptions( options ) {
  function detach (line 3456) | function detach() {
  function completed (line 3470) | function completed() {
  function dataAttr (line 3633) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3665) | function isEmptyDataObject( obj ) {
  function internalData (line 3681) | function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
  function internalRemoveData (line 3770) | function internalRemoveData( elem, name, pvt ) {
  function returnTrue (line 4255) | function returnTrue() {
  function returnFalse (line 4259) | function returnFalse() {
  function safeActiveElement (line 4263) | function safeActiveElement() {
  function createSafeFragment (line 5272) | function createSafeFragment( document ) {
  function getAll (line 5324) | function getAll( context, tag ) {
  function fixDefaultChecked (line 5347) | function fixDefaultChecked( elem ) {
  function manipulationTarget (line 5355) | function manipulationTarget( elem, content ) {
  function disableScript (line 5365) | function disableScript( elem ) {
  function restoreScript (line 5369) | function restoreScript( elem ) {
  function setGlobalEval (line 5380) | function setGlobalEval( elems, refElements ) {
  function cloneCopyEvent (line 5388) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 5416) | function fixCloneNodeIssues( src, dest ) {
  function actualDisplay (line 6007) | function actualDisplay( name, doc ) {
  function defaultDisplay (line 6029) | function defaultDisplay( nodeName ) {
  function addGetHookIf (line 6221) | function addGetHookIf( conditionFn, hookFn ) {
  function computeStyleTests (line 6315) | function computeStyleTests() {
  function vendorPropName (line 6433) | function vendorPropName( style, name ) {
  function showHide (line 6455) | function showHide( elements, show ) {
  function setPositiveNumber (line 6506) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 6514) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 6553) | function getWidthOrHeight( elem, name, extra ) {
  function Tween (line 6892) | function Tween( elem, options, prop, end, easing ) {
  function createFxNow (line 7061) | function createFxNow() {
  function genFx (line 7069) | function genFx( type, includeWidth ) {
  function createTween (line 7089) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 7103) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 7245) | function propFilter( props, specialEasing ) {
  function Animation (line 7282) | function Animation( elem, properties, options ) {
  function addToPrefiltersOrTransports (line 8596) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 8628) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 8655) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 8675) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8730) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 9189) | function done( status, nativeStatusText, responses, headers ) {
  function buildParams (line 9441) | function buildParams( prefix, obj, traditional, add ) {
  function createStandardXHR (line 9713) | function createStandardXHR() {
  function createActiveXHR (line 9719) | function createActiveXHR() {
  function getWindow (line 10014) | function getWindow( elem ) {

FILE: DatabaseManager/asset/socket.io-1.3.7.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function lookup (line 1) | function lookup(uri,opts){if(typeof uri=="object"){opts=uri;uri=undefine...
  function Manager (line 1) | function Manager(uri,opts){if(!(this instanceof Manager))return new Mana...
  function on (line 1) | function on(obj,ev,fn){obj.on(ev,fn);return{destroy:function(){obj.remov...
  function Socket (line 1) | function Socket(io,nsp){this.io=io;this.nsp=nsp;this.json=this;this.ids=...
  function url (line 1) | function url(uri,loc){var obj=uri;var loc=loc||global.location;if(null==...
  function Backoff (line 1) | function Backoff(opts){opts=opts||{};this.ms=opts.min||100;this.max=opts...
  function Emitter (line 1) | function Emitter(obj){if(obj)return mixin(obj)}
  function mixin (line 1) | function mixin(obj){for(var key in Emitter.prototype){obj[key]=Emitter.p...
  function on (line 1) | function on(){self.off(event,on);fn.apply(this,arguments)}
  function debug (line 1) | function debug(name){if(!debug.enabled(name))return function(){};return ...
  function coerce (line 1) | function coerce(val){if(val instanceof Error)return val.stack||val.messa...
  function noop (line 1) | function noop(){}
  function Socket (line 1) | function Socket(uri,opts){if(!(this instanceof Socket))return new Socket...
  function clone (line 1) | function clone(obj){var o={};for(var i in obj){if(obj.hasOwnProperty(i))...
  function onTransportOpen (line 1) | function onTransportOpen(){if(self.onlyBinaryUpgrades){var upgradeLosesB...
  function freezeTransport (line 1) | function freezeTransport(){if(failed)return;failed=true;cleanup();transp...
  function onerror (line 1) | function onerror(err){var error=new Error("probe error: "+err);error.tra...
  function onTransportClose (line 1) | function onTransportClose(){onerror("transport closed")}
  function onclose (line 1) | function onclose(){onerror("socket closed")}
  function onupgrade (line 1) | function onupgrade(to){if(transport&&to.name!=transport.name){debug('"%s...
  function cleanup (line 1) | function cleanup(){transport.removeListener("open",onTransportOpen);tran...
  function close (line 1) | function close(){self.onClose("forced close");debug("socket closing - te...
  function cleanupAndClose (line 1) | function cleanupAndClose(){self.removeListener("upgrade",cleanupAndClose...
  function waitForUpgrade (line 1) | function waitForUpgrade(){self.once("upgrade",cleanupAndClose);self.once...
  function Transport (line 1) | function Transport(opts){this.path=opts.path;this.hostname=opts.hostname...
  function polling (line 1) | function polling(opts){var xhr;var xd=false;var xs=false;var jsonp=false...
  function empty (line 1) | function empty(){}
  function JSONPPolling (line 1) | function JSONPPolling(opts){Polling.call(this,opts);
  function complete (line 2) | function complete(){initIframe();fn()}
  function initIframe (line 2) | function initIframe(){if(self.iframe){try{self.form.removeChild(self.ifr...
  function empty (line 2) | function empty(){}
  function XHR (line 2) | function XHR(opts){Polling.call(this,opts);if(global.location){var isSSL...
  function Request (line 2) | function Request(opts){this.method=opts.method||"GET";this.uri=opts.uri;...
  function unloadHandler (line 2) | function unloadHandler(){for(var i in Request.requests){if(Request.reque...
  function Polling (line 2) | function Polling(opts){var forceBase64=opts&&opts.forceBase64;if(!hasXHR...
  function pause (line 2) | function pause(){debug("paused");self.readyState="paused";onPause()}
  function close (line 2) | function close(){debug("writing close packet");self.write([{type:"close"...
  function WS (line 2) | function WS(opts){var forceBase64=opts&&opts.forceBase64;if(forceBase64)...
  function ondrain (line 2) | function ondrain(){self.writable=true;self.emit("drain")}
  function useColors (line 2) | function useColors(){return"WebkitAppearance"in document.documentElement...
  function formatArgs (line 2) | function formatArgs(){var args=arguments;var useColors=this.useColors;ar...
  function log (line 2) | function log(){return"object"==typeof console&&"function"==typeof consol...
  function save (line 2) | function save(namespaces){try{if(null==namespaces){localStorage.removeIt...
  function load (line 2) | function load(){var r;try{r=localStorage.debug}catch(e){}return r}
  function selectColor (line 2) | function selectColor(){return exports.colors[prevColor++%exports.colors....
  function debug (line 2) | function debug(namespace){function disabled(){}disabled.enabled=false;fu...
  function enable (line 2) | function enable(namespaces){exports.save(namespaces);var split=(namespac...
  function disable (line 2) | function disable(){exports.enable("")}
  function enabled (line 2) | function enabled(name){var i,len;for(i=0,len=exports.skips.length;i<len;...
  function coerce (line 2) | function coerce(val){if(val instanceof Error)return val.stack||val.messa...
  function parse (line 2) | function parse(str){var match=/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes...
  function short (line 2) | function short(ms){if(ms>=d)return Math.round(ms/d)+"d";if(ms>=h)return ...
  function long (line 2) | function long(ms){return plural(ms,d,"day")||plural(ms,h,"hour")||plural...
  function plural (line 2) | function plural(ms,n,name){if(ms<n)return;if(ms<n*1.5)return Math.floor(...
  function encodeBase64Object (line 2) | function encodeBase64Object(packet,callback){var message="b"+exports.pac...
  function encodeArrayBuffer (line 2) | function encodeArrayBuffer(packet,supportsBinary,callback){if(!supportsB...
  function encodeBlobAsArrayBuffer (line 2) | function encodeBlobAsArrayBuffer(packet,supportsBinary,callback){if(!sup...
  function encodeBlob (line 2) | function encodeBlob(packet,supportsBinary,callback){if(!supportsBinary){...
  function setLengthHeader (line 2) | function setLengthHeader(message){return message.length+":"+message}
  function encodeOne (line 2) | function encodeOne(packet,doneCallback){exports.encodePacket(packet,!isB...
  function map (line 2) | function map(ary,each,done){var result=new Array(ary.length);var next=af...
  function encodeOne (line 2) | function encodeOne(packet,doneCallback){exports.encodePacket(packet,true...
  function encodeOne (line 2) | function encodeOne(packet,doneCallback){exports.encodePacket(packet,true...
  function after (line 2) | function after(count,callback,err_cb){var bail=false;err_cb=err_cb||noop...
  function noop (line 2) | function noop(){}
  function mapArrayBufferViews (line 2) | function mapArrayBufferViews(ary){for(var i=0;i<ary.length;i++){var chun...
  function BlobBuilderConstructor (line 2) | function BlobBuilderConstructor(ary,options){options=options||{};var bb=...
  function BlobConstructor (line 2) | function BlobConstructor(ary,options){mapArrayBufferViews(ary);return ne...
  function ucs2decode (line 2) | function ucs2decode(string){var output=[];var counter=0;var length=strin...
  function ucs2encode (line 2) | function ucs2encode(array){var length=array.length;var index=-1;var valu...
  function checkScalarValue (line 2) | function checkScalarValue(codePoint){if(codePoint>=55296&&codePoint<=573...
  function createByte (line 3) | function createByte(codePoint,shift){return stringFromCharCode(codePoint...
  function encodeCodePoint (line 3) | function encodeCodePoint(codePoint){if((codePoint&4294967168)==0){return...
  function utf8encode (line 3) | function utf8encode(string){var codePoints=ucs2decode(string);var length...
  function readContinuationByte (line 3) | function readContinuationByte(){if(byteIndex>=byteCount){throw Error("In...
  function decodeSymbol (line 3) | function decodeSymbol(){var byte1;var byte2;var byte3;var byte4;var code...
  function utf8decode (line 3) | function utf8decode(byteString){byteArray=ucs2decode(byteString);byteCou...
  function ws (line 3) | function ws(uri,protocols,opts){var instance;if(protocols){instance=new ...
  function hasBinary (line 3) | function hasBinary(data){function _hasBinary(obj){if(!obj)return false;i...
  function _deconstructPacket (line 3) | function _deconstructPacket(data){if(!data)return data;if(isBuf(data)){v...
  function _reconstructPacket (line 3) | function _reconstructPacket(data){if(data&&data._placeholder){var buf=bu...
  function _removeBlobs (line 3) | function _removeBlobs(obj,curKey,containingObject){if(!obj)return obj;if...
  function Encoder (line 3) | function Encoder(){}
  function encodeAsString (line 3) | function encodeAsString(obj){var str="";var nsp=false;str+=obj.type;if(e...
  function encodeAsBinary (line 3) | function encodeAsBinary(obj,callback){function writeEncoding(bloblessDat...
  function Decoder (line 3) | function Decoder(){this.reconstructor=null}
  function decodeString (line 3) | function decodeString(str){var p={};var i=0;p.type=Number(str.charAt(0))...
  function BinaryReconstructor (line 3) | function BinaryReconstructor(packet){this.reconPack=packet;this.buffers=[]}
  function error (line 3) | function error(data){return{type:exports.ERROR,data:"parser error"}}
  function isBuf (line 3) | function isBuf(obj){return global.Buffer&&global.Buffer.isBuffer(obj)||g...
  function has (line 3) | function has(name){if(has[name]!==undef){return has[name]}var isSupporte...
  function toArray (line 3) | function toArray(list,index){var array=[];index=index||0;for(var i=index...

FILE: DatabaseManager/common/common.go
  type Document (line 15) | type Document struct
  type Documents (line 23) | type Documents
  type Patient (line 25) | type Patient struct
  type Patients (line 30) | type Patients
  type NoArgs (line 32) | type NoArgs struct
  function PrefixPatientUID (line 36) | func PrefixPatientUID(input string) string {
  function NodeExec (line 41) | func NodeExec(args ...string) *exec.Cmd {
  function ECRecover (line 53) | func ECRecover(msg string, signature string) (string, error) {
  function Sign (line 63) | func Sign(msg string, account string) (string, error) {
  function GetEthereumRPCConn (line 73) | func GetEthereumRPCConn() (*rpc.Client, error) {
  function InstantiateLookupTable (line 83) | func InstantiateLookupTable() *leveldb.DB {
  function GetKeystorePath (line 103) | func GetKeystorePath(username string) string {

FILE: DatabaseManager/ethereum/AgentRegistryDaemon.go
  function AddSigner (line 12) | func AddSigner() {
  function RemoveSigner (line 57) | func RemoveSigner() {

FILE: DatabaseManager/ethereum/ethereum.go
  function Init (line 11) | func Init() {
  function GetEthereumRPCConn (line 15) | func GetEthereumRPCConn() (*rpc.Client, error) {

FILE: DatabaseManager/localRPC/listener.go
  constant ScryptSaltBytes (line 13) | ScryptSaltBytes = 8
  constant ScryptN (line 14) | ScryptN         = 32768
  constant ScryptR (line 15) | ScryptR         = 8
  constant ScryptP (line 16) | ScryptP         = 1
  constant ScryptKeyLen (line 17) | ScryptKeyLen    = 32
  constant AesKeyLen (line 18) | AesKeyLen       = 32
  constant PrivateKeyLen (line 19) | PrivateKeyLen   = 64
  type MedRecLocal (line 23) | type MedRecLocal struct
  function ListenandServe (line 27) | func ListenandServe(router *mux.Router) {

FILE: DatabaseManager/localRPC/localUsers.go
  type SetWalletPasswordArgs (line 19) | type SetWalletPasswordArgs struct
  type SetWalletPasswordReply (line 23) | type SetWalletPasswordReply struct
  method SetWalletPassword (line 26) | func (client *MedRecLocal) SetWalletPassword(r *http.Request, args *SetW...
  type GetUsernamesReply (line 32) | type GetUsernamesReply struct
  method GetUsernames (line 38) | func (client *MedRecLocal) GetUsernames(r *http.Request, args *common.No...
  type UserDetailsArgs (line 53) | type UserDetailsArgs struct
  type GetUserDetailsReply (line 57) | type GetUserDetailsReply struct
  method GetUserDetails (line 63) | func (client *MedRecLocal) GetUserDetails(r *http.Request, args *UserDet...
  type NewUserArgs (line 76) | type NewUserArgs struct
  type NewUserReply (line 84) | type NewUserReply struct
  method NewUser (line 89) | func (client *MedRecLocal) NewUser(r *http.Request, args *NewUserArgs, r...
  type GetSeedArgs (line 148) | type GetSeedArgs struct
  type GetSeedReply (line 153) | type GetSeedReply struct
  method GetSeed (line 159) | func (client *MedRecLocal) GetSeed(r *http.Request, args *GetSeedArgs, r...
  type DeleteUserArgs (line 211) | type DeleteUserArgs struct
  type DeleteUserReply (line 216) | type DeleteUserReply struct
  method DeleteUser (line 221) | func (client *MedRecLocal) DeleteUser(r *http.Request, args *DeleteUserA...
  type SaveKeystoreArgs (line 254) | type SaveKeystoreArgs struct
  type SaveKeystoreReply (line 259) | type SaveKeystoreReply struct
  method SaveKeystore (line 263) | func (client *MedRecLocal) SaveKeystore(r *http.Request, args *SaveKeyst...
  type GetKeystoreArgs (line 272) | type GetKeystoreArgs struct
  type GetKeystoreReply (line 276) | type GetKeystoreReply struct
  method GetKeystore (line 280) | func (client *MedRecLocal) GetKeystore(r *http.Request, args *GetKeystor...

FILE: DatabaseManager/localRPC/localUsers_test.go
  function TestEncryption (line 7) | func TestEncryption(t *testing.T) {

FILE: DatabaseManager/localRPC/remoteUsers.go
  type AddAccountArgs (line 12) | type AddAccountArgs struct
  type AddAccountReply (line 19) | type AddAccountReply struct
  method AddAccount (line 25) | func (client *MedRecLocal) AddAccount(r *http.Request, args *AddAccountA...

FILE: DatabaseManager/manager.go
  function Init (line 15) | func Init() {

FILE: DatabaseManager/middleware/enableCORS.go
  function EnableCORS (line 8) | func EnableCORS(w http.ResponseWriter, r *http.Request, next http.Handle...

FILE: DatabaseManager/middleware/logger.go
  function Logger (line 10) | func Logger(w http.ResponseWriter, r *http.Request, next http.HandlerFun...

FILE: DatabaseManager/middleware/whitelist.go
  function Whitelist (line 14) | func Whitelist(w http.ResponseWriter, r *http.Request, next http.Handler...

FILE: DatabaseManager/remoteRPC/auth.go
  function AuthenticatePatient (line 24) | func AuthenticatePatient(msg string, signature string) (string, error) {
  function AuthenticateProvider (line 50) | func AuthenticateProvider(msg string, signature string) (string, error) {
  type GetProviderAccountArgs (line 76) | type GetProviderAccountArgs struct
  type GetProviderAccountReply (line 81) | type GetProviderAccountReply struct
  method GetProviderAccount (line 85) | func (client *MedRecRemote) GetProviderAccount(r *http.Request, args *Ge...
  type ChangeAccountArgs (line 100) | type ChangeAccountArgs struct
  type ChangeAccountReply (line 106) | type ChangeAccountReply struct
  method ChangeAccount (line 110) | func (client *MedRecRemote) ChangeAccount(r *http.Request, args *ChangeA...

FILE: DatabaseManager/remoteRPC/databse.go
  function instantiateDatabase (line 10) | func instantiateDatabase() *sql.DB {

FILE: DatabaseManager/remoteRPC/documentRequest.go
  type PatientDocumentsArgs (line 11) | type PatientDocumentsArgs struct
  type PatientDocumentsReply (line 17) | type PatientDocumentsReply struct
  method PatientDocuments (line 24) | func (client *MedRecRemote) PatientDocuments(r *http.Request, args *Pati...

FILE: DatabaseManager/remoteRPC/ethereum.go
  function GetMedRecRemoteRPCConn (line 17) | func GetMedRecRemoteRPCConn() (*rpc.Client, string, error) {
  type PatientFaucetArgs (line 44) | type PatientFaucetArgs struct
  type PatientFaucetReply (line 50) | type PatientFaucetReply struct
  method PatientFaucet (line 58) | func (client *MedRecRemote) PatientFaucet(r *http.Request, args *Patient...
  type ProviderFaucetArgs (line 77) | type ProviderFaucetArgs struct
  type ProviderFaucetReply (line 84) | type ProviderFaucetReply struct
  method ProviderFaucet (line 92) | func (client *MedRecRemote) ProviderFaucet(r *http.Request, args *Provid...

FILE: DatabaseManager/remoteRPC/ethereum_test.go
  function TestRecover (line 14) | func TestRecover(t *testing.T) {
  function TestFaucet (line 41) | func TestFaucet(t *testing.T) {

FILE: DatabaseManager/remoteRPC/listener.go
  type MedRecRemote (line 12) | type MedRecRemote struct
  function ListenandServe (line 16) | func ListenandServe(router *mux.Router) {

FILE: DatabaseManager/remoteRPC/permissions.go
  type AddPermissionArgs (line 13) | type AddPermissionArgs struct
  type AddPermissionReply (line 21) | type AddPermissionReply struct
  method AddPermission (line 25) | func (client *MedRecRemote) AddPermission(r *http.Request, args *AddPerm...
  type RemovePermissionArgs (line 47) | type RemovePermissionArgs struct
  type RemovePermissionReply (line 53) | type RemovePermissionReply struct
  method RemovePermission (line 57) | func (client *MedRecRemote) RemovePermission(r *http.Request, args *Remo...
  method SetPermissionDuration (line 74) | func (client *MedRecRemote) SetPermissionDuration(r *http.Request, args ...
  method SetPermissionStartTime (line 81) | func (client *MedRecRemote) SetPermissionStartTime(r *http.Request, args...
  type GetPermissionsArgs (line 88) | type GetPermissionsArgs struct
  type Permission (line 93) | type Permission struct
  type GetPermissionsReply (line 99) | type GetPermissionsReply struct
  method GetPermissions (line 104) | func (client *MedRecRemote) GetPermissions(r *http.Request, args *GetPer...
  type CheckPermissionArgs (line 123) | type CheckPermissionArgs struct
  type CheckPermissionReply (line 129) | type CheckPermissionReply struct
  method CheckPermission (line 135) | func (client *MedRecRemote) CheckPermission(r *http.Request, args *Check...

FILE: DatabaseManager/scripts/createDocuments.go
  function main (line 11) | func main() {

FILE: DatabaseManager/scripts/test-db.sql
  type `document_info` (line 30) | CREATE TABLE `document_info` (
  type `encounter_info` (line 49) | CREATE TABLE `encounter_info` (
  type `immunization_info` (line 67) | CREATE TABLE `immunization_info` (
  type `medication_info` (line 90) | CREATE TABLE `medication_info` (
  type `patient_info` (line 113) | CREATE TABLE `patient_info` (
  type `result_info` (line 141) | CREATE TABLE `result_info` (
  type `resultdetail_info` (line 162) | CREATE TABLE `resultdetail_info` (

FILE: UserClient/build/service-worker.js
  function setOfCachedUrls (line 1) | function setOfCachedUrls(e){return e.keys().then(function(e){return e.ma...

FILE: UserClient/build/static/js/main.477a304c.js
  function __webpack_require__ (line 6) | function __webpack_require__(moduleId) {
  function typedArraySupport (line 122) | function typedArraySupport () {
  function kMaxLength (line 134) | function kMaxLength () {
  function createBuffer (line 140) | function createBuffer (that, length) {
  function Buffer (line 169) | function Buffer (arg, encodingOrOffset, length) {
  function from (line 194) | function from (that, value, encodingOrOffset, length) {
  function assertSize (line 235) | function assertSize (size) {
  function alloc (line 243) | function alloc (that, size, fill, encoding) {
  function allocUnsafe (line 267) | function allocUnsafe (that, size) {
  function fromString (line 291) | function fromString (that, string, encoding) {
  function fromArrayLike (line 315) | function fromArrayLike (that, array) {
  function fromArrayBuffer (line 324) | function fromArrayBuffer (that, array, byteOffset, length) {
  function fromObject (line 354) | function fromObject (that, obj) {
  function checked (line 384) | function checked (length) {
  function SlowBuffer (line 394) | function SlowBuffer (length) {
  function byteLength (line 477) | function byteLength (string, encoding) {
  function slowToString (line 522) | function slowToString (encoding, start, end) {
  function swap (line 596) | function swap (b, n, m) {
  function bidirectionalIndexOf (line 730) | function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  function arrayIndexOf (line 787) | function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  function hexWrite (line 855) | function hexWrite (buf, string, offset, length) {
  function utf8Write (line 882) | function utf8Write (buf, string, offset, length) {
  function asciiWrite (line 886) | function asciiWrite (buf, string, offset, length) {
  function latin1Write (line 890) | function latin1Write (buf, string, offset, length) {
  function base64Write (line 894) | function base64Write (buf, string, offset, length) {
  function ucs2Write (line 898) | function ucs2Write (buf, string, offset, length) {
  function base64Slice (line 981) | function base64Slice (buf, start, end) {
  function utf8Slice (line 989) | function utf8Slice (buf, start, end) {
  function decodeCodePointsArray (line 1067) | function decodeCodePointsArray (codePoints) {
  function asciiSlice (line 1085) | function asciiSlice (buf, start, end) {
  function latin1Slice (line 1095) | function latin1Slice (buf, start, end) {
  function hexSlice (line 1105) | function hexSlice (buf, start, end) {
  function utf16leSlice (line 1118) | function utf16leSlice (buf, start, end) {
  function checkOffset (line 1166) | function checkOffset (offset, ext, length) {
  function checkInt (line 1327) | function checkInt (buf, value, offset, ext, max, min) {
  function objectWriteUInt16 (line 1380) | function objectWriteUInt16 (buf, value, offset, littleEndian) {
  function objectWriteUInt32 (line 1414) | function objectWriteUInt32 (buf, value, offset, littleEndian) {
  function checkIEEE754 (line 1564) | function checkIEEE754 (buf, value, offset, ext, max, min) {
  function writeFloat (line 1569) | function writeFloat (buf, value, offset, littleEndian, noAssert) {
  function writeDouble (line 1585) | function writeDouble (buf, value, offset, littleEndian, noAssert) {
  function base64clean (line 1718) | function base64clean (str) {
  function stringtrim (line 1730) | function stringtrim (str) {
  function toHex (line 1735) | function toHex (n) {
  function utf8ToBytes (line 1740) | function utf8ToBytes (string, units) {
  function asciiToBytes (line 1820) | function asciiToBytes (str) {
  function utf16leToBytes (line 1829) | function utf16leToBytes (str, units) {
  function base64ToBytes (line 1845) | function base64ToBytes (str) {
  function blitBuffer (line 1849) | function blitBuffer (src, dst, offset, length) {
  function isnan (line 1857) | function isnan (val) {
  function copyProps (line 1901) | function copyProps (src, dst) {
  function SafeBuffer (line 1914) | function SafeBuffer (arg, encodingOrOffset, length) {
  function F (line 1987) | function F() {}
  function addMapEntry (line 3190) | function addMapEntry(map, pair) {
  function addSetEntry (line 3204) | function addSetEntry(set, value) {
  function apply (line 3220) | function apply(func, thisArg, args) {
  function arrayAggregator (line 3240) | function arrayAggregator(array, setter, iteratee, accumulator) {
  function arrayEach (line 3260) | function arrayEach(array, iteratee) {
  function arrayEachRight (line 3281) | function arrayEachRight(array, iteratee) {
  function arrayEvery (line 3302) | function arrayEvery(array, predicate) {
  function arrayFilter (line 3323) | function arrayFilter(array, predicate) {
  function arrayIncludes (line 3347) | function arrayIncludes(array, value) {
  function arrayIncludesWith (line 3361) | function arrayIncludesWith(array, value, comparator) {
  function arrayMap (line 3382) | function arrayMap(array, iteratee) {
  function arrayPush (line 3401) | function arrayPush(array, values) {
  function arrayReduce (line 3424) | function arrayReduce(array, iteratee, accumulator, initAccum) {
  function arrayReduceRight (line 3449) | function arrayReduceRight(array, iteratee, accumulator, initAccum) {
  function arraySome (line 3470) | function arraySome(array, predicate) {
  function asciiToArray (line 3498) | function asciiToArray(string) {
  function asciiWords (line 3509) | function asciiWords(string) {
  function baseFindKey (line 3524) | function baseFindKey(collection, predicate, eachFunc) {
  function baseFindIndex (line 3546) | function baseFindIndex(array, predicate, fromIndex, fromRight) {
  function baseIndexOf (line 3567) | function baseIndexOf(array, value, fromIndex) {
  function baseIndexOfWith (line 3583) | function baseIndexOfWith(array, value, fromIndex, comparator) {
  function baseIsNaN (line 3602) | function baseIsNaN(value) {
  function baseMean (line 3615) | function baseMean(array, iteratee) {
  function baseProperty (line 3627) | function baseProperty(key) {
  function basePropertyOf (line 3640) | function basePropertyOf(object) {
  function baseReduce (line 3659) | function baseReduce(collection, iteratee, accumulator, initAccum, eachFu...
  function baseSortBy (line 3678) | function baseSortBy(array, comparer) {
  function baseSum (line 3697) | function baseSum(array, iteratee) {
  function baseTimes (line 3720) | function baseTimes(n, iteratee) {
  function baseToPairs (line 3739) | function baseToPairs(object, props) {
  function baseUnary (line 3752) | function baseUnary(func) {
  function baseValues (line 3768) | function baseValues(object, props) {
  function cacheHas (line 3782) | function cacheHas(cache, key) {
  function charsStartIndex (line 3795) | function charsStartIndex(strSymbols, chrSymbols) {
  function charsEndIndex (line 3812) | function charsEndIndex(strSymbols, chrSymbols) {
  function countHolders (line 3827) | function countHolders(array, placeholder) {
  function escapeStringChar (line 3865) | function escapeStringChar(chr) {
  function getValue (line 3877) | function getValue(object, key) {
  function hasUnicode (line 3888) | function hasUnicode(string) {
  function hasUnicodeWord (line 3899) | function hasUnicodeWord(string) {
  function iteratorToArray (line 3910) | function iteratorToArray(iterator) {
  function mapToArray (line 3927) | function mapToArray(map) {
  function overArg (line 3945) | function overArg(func, transform) {
  function replaceHolders (line 3960) | function replaceHolders(array, placeholder) {
  function setToArray (line 3983) | function setToArray(set) {
  function setToPairs (line 4000) | function setToPairs(set) {
  function strictIndexOf (line 4020) | function strictIndexOf(array, value, fromIndex) {
  function strictLastIndexOf (line 4042) | function strictLastIndexOf(array, value, fromIndex) {
  function stringSize (line 4059) | function stringSize(string) {
  function stringToArray (line 4072) | function stringToArray(string) {
  function unicodeSize (line 4094) | function unicodeSize(string) {
  function unicodeToArray (line 4109) | function unicodeToArray(string) {
  function unicodeWords (line 4120) | function unicodeWords(string) {
  function lodash (line 4397) | function lodash(value) {
  function object (line 4418) | function object() {}
  function baseLodash (line 4438) | function baseLodash() {
  function LodashWrapper (line 4449) | function LodashWrapper(value, chainAll) {
  function LazyWrapper (line 4534) | function LazyWrapper(value) {
  function lazyClone (line 4552) | function lazyClone() {
  function lazyReverse (line 4571) | function lazyReverse() {
  function lazyValue (line 4591) | function lazyValue() {
  function Hash (line 4653) | function Hash(entries) {
  function hashClear (line 4671) | function hashClear() {
  function hashDelete (line 4686) | function hashDelete(key) {
  function hashGet (line 4701) | function hashGet(key) {
  function hashHas (line 4719) | function hashHas(key) {
  function hashSet (line 4734) | function hashSet(key, value) {
  function ListCache (line 4757) | function ListCache(entries) {
  function listCacheClear (line 4775) | function listCacheClear() {
  function listCacheDelete (line 4789) | function listCacheDelete(key) {
  function listCacheGet (line 4815) | function listCacheGet(key) {
  function listCacheHas (line 4831) | function listCacheHas(key) {
  function listCacheSet (line 4845) | function listCacheSet(key, value) {
  function MapCache (line 4874) | function MapCache(entries) {
  function mapCacheClear (line 4892) | function mapCacheClear() {
  function mapCacheDelete (line 4910) | function mapCacheDelete(key) {
  function mapCacheGet (line 4925) | function mapCacheGet(key) {
  function mapCacheHas (line 4938) | function mapCacheHas(key) {
  function mapCacheSet (line 4952) | function mapCacheSet(key, value) {
  function SetCache (line 4978) | function SetCache(values) {
  function setCacheAdd (line 4998) | function setCacheAdd(value) {
  function setCacheHas (line 5012) | function setCacheHas(value) {
  function Stack (line 5029) | function Stack(entries) {
  function stackClear (line 5041) | function stackClear() {
  function stackDelete (line 5055) | function stackDelete(key) {
  function stackGet (line 5072) | function stackGet(key) {
  function stackHas (line 5085) | function stackHas(key) {
  function stackSet (line 5099) | function stackSet(key, value) {
  function arrayLikeKeys (line 5132) | function arrayLikeKeys(value, inherited) {
  function arraySample (line 5166) | function arraySample(array) {
  function arraySampleSize (line 5179) | function arraySampleSize(array, n) {
  function arrayShuffle (line 5190) | function arrayShuffle(array) {
  function assignMergeValue (line 5203) | function assignMergeValue(object, key, value) {
  function assignValue (line 5220) | function assignValue(object, key, value) {
  function assocIndexOf (line 5236) | function assocIndexOf(array, key) {
  function baseAggregator (line 5257) | function baseAggregator(collection, setter, iteratee, accumulator) {
  function baseAssign (line 5273) | function baseAssign(object, source) {
  function baseAssignIn (line 5286) | function baseAssignIn(object, source) {
  function baseAssignValue (line 5299) | function baseAssignValue(object, key, value) {
  function baseAt (line 5320) | function baseAt(object, paths) {
  function baseClamp (line 5341) | function baseClamp(number, lower, upper) {
  function baseClone (line 5369) | function baseClone(value, bitmask, customizer, key, object, stack) {
  function baseConforms (line 5442) | function baseConforms(source) {
  function baseConformsTo (line 5457) | function baseConformsTo(object, source, props) {
  function baseDelay (line 5485) | function baseDelay(func, wait, args) {
  function baseDifference (line 5503) | function baseDifference(array, values, iteratee, comparator) {
  function baseEvery (line 5577) | function baseEvery(collection, predicate) {
  function baseExtremum (line 5596) | function baseExtremum(array, iteratee, comparator) {
  function baseFill (line 5625) | function baseFill(array, value, start, end) {
  function baseFilter (line 5651) | function baseFilter(collection, predicate) {
  function baseFlatten (line 5672) | function baseFlatten(array, depth, predicate, isStrict, result) {
  function baseForOwn (line 5728) | function baseForOwn(object, iteratee) {
  function baseForOwnRight (line 5740) | function baseForOwnRight(object, iteratee) {
  function baseFunctions (line 5753) | function baseFunctions(object, props) {
  function baseGet (line 5767) | function baseGet(object, path) {
  function baseGetAllKeys (line 5790) | function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  function baseGetTag (line 5802) | function baseGetTag(value) {
  function baseGt (line 5820) | function baseGt(value, other) {
  function baseHas (line 5832) | function baseHas(object, key) {
  function baseHasIn (line 5844) | function baseHasIn(object, key) {
  function baseInRange (line 5857) | function baseInRange(number, start, end) {
  function baseIntersection (line 5871) | function baseIntersection(arrays, iteratee, comparator) {
  function baseInverter (line 5935) | function baseInverter(object, setter, iteratee, accumulator) {
  function baseInvoke (line 5952) | function baseInvoke(object, path, args) {
  function baseIsArguments (line 5966) | function baseIsArguments(value) {
  function baseIsArrayBuffer (line 5977) | function baseIsArrayBuffer(value) {
  function baseIsDate (line 5988) | function baseIsDate(value) {
  function baseIsEqual (line 6006) | function baseIsEqual(value, other, bitmask, customizer, stack) {
  function baseIsEqualDeep (line 6030) | function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, ...
  function baseIsMap (line 6082) | function baseIsMap(value) {
  function baseIsMatch (line 6096) | function baseIsMatch(object, source, matchData, customizer) {
  function baseIsNative (line 6148) | function baseIsNative(value) {
  function baseIsRegExp (line 6163) | function baseIsRegExp(value) {
  function baseIsSet (line 6174) | function baseIsSet(value) {
  function baseIsTypedArray (line 6185) | function baseIsTypedArray(value) {
  function baseIteratee (line 6197) | function baseIteratee(value) {
  function baseKeys (line 6221) | function baseKeys(object) {
  function baseKeysIn (line 6241) | function baseKeysIn(object) {
  function baseLt (line 6265) | function baseLt(value, other) {
  function baseMap (line 6277) | function baseMap(collection, iteratee) {
  function baseMatches (line 6294) | function baseMatches(source) {
  function baseMatchesProperty (line 6312) | function baseMatchesProperty(path, srcValue) {
  function baseMerge (line 6335) | function baseMerge(object, source, srcIndex, customizer, stack) {
  function baseMergeDeep (line 6372) | function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customi...
  function baseNth (line 6442) | function baseNth(array, n) {
  function baseOrderBy (line 6460) | function baseOrderBy(collection, iteratees, orders) {
  function basePick (line 6485) | function basePick(object, paths) {
  function basePickBy (line 6500) | function basePickBy(object, paths, predicate) {
  function basePropertyDeep (line 6523) | function basePropertyDeep(path) {
  function basePullAll (line 6540) | function basePullAll(array, values, iteratee, comparator) {
  function basePullAt (line 6576) | function basePullAt(array, indexes) {
  function baseRandom (line 6603) | function baseRandom(lower, upper) {
  function baseRange (line 6618) | function baseRange(start, end, step, fromRight) {
  function baseRepeat (line 6638) | function baseRepeat(string, n) {
  function baseRest (line 6666) | function baseRest(func, start) {
  function baseSample (line 6677) | function baseSample(collection) {
  function baseSampleSize (line 6689) | function baseSampleSize(collection, n) {
  function baseSet (line 6704) | function baseSet(object, path, value, customizer) {
  function baseShuffle (line 6771) | function baseShuffle(collection) {
  function baseSlice (line 6784) | function baseSlice(array, start, end) {
  function baseSome (line 6814) | function baseSome(collection, predicate) {
  function baseSortedIndex (line 6836) | function baseSortedIndex(array, value, retHighest) {
  function baseSortedIndexBy (line 6870) | function baseSortedIndexBy(array, value, iteratee, retHighest) {
  function baseSortedUniq (line 6919) | function baseSortedUniq(array, iteratee) {
  function baseToNumber (line 6945) | function baseToNumber(value) {
  function baseToString (line 6963) | function baseToString(value) {
  function baseUniq (line 6988) | function baseUniq(array, iteratee, comparator) {
  function baseUnset (line 7048) | function baseUnset(object, path) {
  function baseUpdate (line 7064) | function baseUpdate(object, path, updater, customizer) {
  function baseWhile (line 7079) | function baseWhile(array, predicate, isDrop, fromRight) {
  function baseWrapperValue (line 7101) | function baseWrapperValue(value, actions) {
  function baseXor (line 7121) | function baseXor(arrays, iteratee, comparator) {
  function baseZipObject (line 7151) | function baseZipObject(props, values, assignFunc) {
  function castArrayLikeObject (line 7171) | function castArrayLikeObject(value) {
  function castFunction (line 7182) | function castFunction(value) {
  function castPath (line 7194) | function castPath(value, object) {
  function castSlice (line 7221) | function castSlice(array, start, end) {
  function cloneBuffer (line 7245) | function cloneBuffer(buffer, isDeep) {
  function cloneArrayBuffer (line 7263) | function cloneArrayBuffer(arrayBuffer) {
  function cloneDataView (line 7277) | function cloneDataView(dataView, isDeep) {
  function cloneMap (line 7291) | function cloneMap(map, isDeep, cloneFunc) {
  function cloneRegExp (line 7303) | function cloneRegExp(regexp) {
  function cloneSet (line 7318) | function cloneSet(set, isDeep, cloneFunc) {
  function cloneSymbol (line 7330) | function cloneSymbol(symbol) {
  function cloneTypedArray (line 7342) | function cloneTypedArray(typedArray, isDeep) {
  function compareAscending (line 7355) | function compareAscending(value, other) {
  function compareMultiple (line 7399) | function compareMultiple(object, other, orders) {
  function composeArgs (line 7437) | function composeArgs(args, partials, holders, isCurried) {
  function composeArgsRight (line 7472) | function composeArgsRight(args, partials, holders, isCurried) {
  function copyArray (line 7506) | function copyArray(source, array) {
  function copyObject (line 7527) | function copyObject(source, props, object, customizer) {
  function copySymbols (line 7561) | function copySymbols(source, object) {
  function copySymbolsIn (line 7573) | function copySymbolsIn(source, object) {
  function createAggregator (line 7585) | function createAggregator(setter, initializer) {
  function createAssigner (line 7601) | function createAssigner(assigner) {
  function createBaseEach (line 7635) | function createBaseEach(eachFunc, fromRight) {
  function createBaseFor (line 7663) | function createBaseFor(fromRight) {
  function createBind (line 7690) | function createBind(func, bitmask, thisArg) {
  function createCaseFirst (line 7708) | function createCaseFirst(methodName) {
  function createCompounder (line 7735) | function createCompounder(callback) {
  function createCtor (line 7749) | function createCtor(Ctor) {
  function createCurry (line 7783) | function createCurry(func, bitmask, arity) {
  function createFind (line 7818) | function createFind(findIndexFunc) {
  function createFlow (line 7838) | function createFlow(fromRight) {
  function createHybrid (line 7911) | function createHybrid(func, bitmask, thisArg, partials, holders, partial...
  function createInverter (line 7973) | function createInverter(setter, toIteratee) {
  function createMathOperation (line 7987) | function createMathOperation(operator, defaultValue) {
  function createOver (line 8020) | function createOver(arrayFunc) {
  function createPadding (line 8041) | function createPadding(length, chars) {
  function createPartial (line 8066) | function createPartial(func, bitmask, thisArg, partials) {
  function createRange (line 8096) | function createRange(fromRight) {
  function createRelationalOperation (line 8121) | function createRelationalOperation(operator) {
  function createRecurry (line 8148) | function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, pa...
  function createRound (line 8181) | function createRound(methodName) {
  function createToPairs (line 8217) | function createToPairs(keysFunc) {
  function createWrap (line 8255) | function createWrap(func, bitmask, thisArg, partials, holders, argPos, a...
  function customDefaultsAssignIn (line 8322) | function customDefaultsAssignIn(objValue, srcValue, key, object) {
  function customDefaultsMerge (line 8344) | function customDefaultsMerge(objValue, srcValue, key, object, source, st...
  function customOmitClone (line 8363) | function customOmitClone(value) {
  function equalArrays (line 8380) | function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  function equalByTag (line 8458) | function equalByTag(object, other, tag, bitmask, customizer, equalFunc, ...
  function equalObjects (line 8536) | function equalObjects(object, other, bitmask, customizer, equalFunc, sta...
  function flatRest (line 8607) | function flatRest(func) {
  function getAllKeys (line 8618) | function getAllKeys(object) {
  function getAllKeysIn (line 8630) | function getAllKeysIn(object) {
  function getFuncName (line 8652) | function getFuncName(func) {
  function getHolder (line 8674) | function getHolder(func) {
  function getIteratee (line 8690) | function getIteratee() {
  function getMapData (line 8704) | function getMapData(map, key) {
  function getMatchData (line 8718) | function getMatchData(object) {
  function getNative (line 8739) | function getNative(object, key) {
  function getRawTag (line 8751) | function getRawTag(value) {
  function getView (line 8847) | function getView(start, end, transforms) {
  function getWrapDetails (line 8872) | function getWrapDetails(source) {
  function hasPath (line 8886) | function hasPath(object, path, hasFunc) {
  function initCloneArray (line 8915) | function initCloneArray(array) {
  function initCloneObject (line 8934) | function initCloneObject(object) {
  function initCloneByTag (line 8953) | function initCloneByTag(object, tag, cloneFunc, isDeep) {
  function insertWrapDetails (line 8997) | function insertWrapDetails(source, details) {
  function isFlattenable (line 9015) | function isFlattenable(value) {
  function isIndex (line 9028) | function isIndex(value, length) {
  function isIterateeCall (line 9045) | function isIterateeCall(value, index, object) {
  function isKey (line 9067) | function isKey(value, object) {
  function isKeyable (line 9087) | function isKeyable(value) {
  function isLaziable (line 9102) | function isLaziable(func) {
  function isMasked (line 9123) | function isMasked(func) {
  function isPrototype (line 9143) | function isPrototype(value) {
  function isStrictComparable (line 9158) | function isStrictComparable(value) {
  function matchesStrictComparable (line 9171) | function matchesStrictComparable(key, srcValue) {
  function memoizeCapped (line 9189) | function memoizeCapped(func) {
  function mergeData (line 9217) | function mergeData(data, source) {
  function nativeKeysIn (line 9281) | function nativeKeysIn(object) {
  function objectToString (line 9298) | function objectToString(value) {
  function overRest (line 9311) | function overRest(func, start, transform) {
  function parent (line 9340) | function parent(object, path) {
  function reorder (line 9354) | function reorder(array, indexes) {
  function setWrapToString (line 9414) | function setWrapToString(wrapper, reference, bitmask) {
  function shortOut (line 9428) | function shortOut(func) {
  function shuffleSelf (line 9456) | function shuffleSelf(array, size) {
  function toKey (line 9498) | function toKey(value) {
  function toSource (line 9513) | function toSource(func) {
  function updateWrapDetails (line 9533) | function updateWrapDetails(details, bitmask) {
  function wrapperClone (line 9550) | function wrapperClone(wrapper) {
  function chunk (line 9584) | function chunk(array, size, guard) {
  function compact (line 9619) | function compact(array) {
  function concat (line 9656) | function concat() {
  function drop (line 9792) | function drop(array, n, guard) {
  function dropRight (line 9826) | function dropRight(array, n, guard) {
  function dropRightWhile (line 9871) | function dropRightWhile(array, predicate) {
  function dropWhile (line 9912) | function dropWhile(array, predicate) {
  function fill (line 9947) | function fill(array, value, start, end) {
  function findIndex (line 9994) | function findIndex(array, predicate, fromIndex) {
  function findLastIndex (line 10041) | function findLastIndex(array, predicate, fromIndex) {
  function flatten (line 10070) | function flatten(array) {
  function flattenDeep (line 10089) | function flattenDeep(array) {
  function flattenDepth (line 10114) | function flattenDepth(array, depth) {
  function fromPairs (line 10138) | function fromPairs(pairs) {
  function head (line 10168) | function head(array) {
  function indexOf (line 10195) | function indexOf(array, value, fromIndex) {
  function initial (line 10221) | function initial(array) {
  function join (line 10336) | function join(array, separator) {
  function last (line 10354) | function last(array) {
  function lastIndexOf (line 10380) | function lastIndexOf(array, value, fromIndex) {
  function nth (line 10416) | function nth(array, n) {
  function pullAll (line 10465) | function pullAll(array, values) {
  function pullAllBy (line 10494) | function pullAllBy(array, values, iteratee) {
  function pullAllWith (line 10523) | function pullAllWith(array, values, comparator) {
  function remove (line 10592) | function remove(array, predicate) {
  function reverse (line 10636) | function reverse(array) {
  function slice (line 10656) | function slice(array, start, end) {
  function sortedIndex (line 10689) | function sortedIndex(array, value) {
  function sortedIndexBy (line 10718) | function sortedIndexBy(array, value, iteratee) {
  function sortedIndexOf (line 10738) | function sortedIndexOf(array, value) {
  function sortedLastIndex (line 10767) | function sortedLastIndex(array, value) {
  function sortedLastIndexBy (line 10796) | function sortedLastIndexBy(array, value, iteratee) {
  function sortedLastIndexOf (line 10816) | function sortedLastIndexOf(array, value) {
  function sortedUniq (line 10842) | function sortedUniq(array) {
  function sortedUniqBy (line 10864) | function sortedUniqBy(array, iteratee) {
  function tail (line 10884) | function tail(array) {
  function take (line 10914) | function take(array, n, guard) {
  function takeRight (line 10947) | function takeRight(array, n, guard) {
  function takeRightWhile (line 10992) | function takeRightWhile(array, predicate) {
  function takeWhile (line 11033) | function takeWhile(array, predicate) {
  function uniq (line 11135) | function uniq(array) {
  function uniqBy (line 11162) | function uniqBy(array, iteratee) {
  function uniqWith (line 11186) | function uniqWith(array, comparator) {
  function unzip (line 11210) | function unzip(array) {
  function unzipWith (line 11247) | function unzipWith(array, iteratee) {
  function zipObject (line 11400) | function zipObject(props, values) {
  function zipObjectDeep (line 11419) | function zipObjectDeep(props, values) {
  function chain (line 11482) | function chain(value) {
  function tap (line 11511) | function tap(value, interceptor) {
  function thru (line 11539) | function thru(value, interceptor) {
  function wrapperChain (line 11610) | function wrapperChain() {
  function wrapperCommit (line 11640) | function wrapperCommit() {
  function wrapperNext (line 11666) | function wrapperNext() {
  function wrapperToIterator (line 11694) | function wrapperToIterator() {
  function wrapperPlant (line 11722) | function wrapperPlant(value) {
  function wrapperReverse (line 11762) | function wrapperReverse() {
  function wrapperValue (line 11794) | function wrapperValue() {
  function every (line 11871) | function every(collection, predicate, guard) {
  function filter (line 11916) | function filter(collection, predicate) {
  function flatMap (line 12001) | function flatMap(collection, iteratee) {
  function flatMapDeep (line 12025) | function flatMapDeep(collection, iteratee) {
  function flatMapDepth (line 12050) | function flatMapDepth(collection, iteratee, depth) {
  function forEach (line 12085) | function forEach(collection, iteratee) {
  function forEachRight (line 12110) | function forEachRight(collection, iteratee) {
  function includes (line 12176) | function includes(collection, value, fromIndex, guard) {
  function map (line 12297) | function map(collection, iteratee) {
  function orderBy (line 12331) | function orderBy(collection, iteratees, orders, guard) {
  function reduce (line 12422) | function reduce(collection, iteratee, accumulator) {
  function reduceRight (line 12451) | function reduceRight(collection, iteratee, accumulator) {
  function reject (line 12492) | function reject(collection, predicate) {
  function sample (line 12511) | function sample(collection) {
  function sampleSize (line 12536) | function sampleSize(collection, n, guard) {
  function shuffle (line 12561) | function shuffle(collection) {
  function size (line 12587) | function size(collection) {
  function some (line 12637) | function some(collection, predicate, guard) {
  function after (line 12735) | function after(n, func) {
  function ary (line 12764) | function ary(func, n, guard) {
  function before (line 12787) | function before(n, func) {
  function curry (line 12943) | function curry(func, arity, guard) {
  function curryRight (line 12988) | function curryRight(func, arity, guard) {
  function debounce (line 13049) | function debounce(func, wait, options) {
  function flip (line 13234) | function flip(func) {
  function memoize (line 13282) | function memoize(func, resolver) {
  function negate (line 13325) | function negate(predicate) {
  function once (line 13359) | function once(func) {
  function rest (line 13537) | function rest(func, start) {
  function spread (line 13579) | function spread(func, start) {
  function throttle (line 13639) | function throttle(func, wait, options) {
  function unary (line 13672) | function unary(func) {
  function wrap (line 13698) | function wrap(value, wrapper) {
  function castArray (line 13737) | function castArray() {
  function clone (line 13771) | function clone(value) {
  function cloneWith (line 13806) | function cloneWith(value, customizer) {
  function cloneDeep (line 13829) | function cloneDeep(value) {
  function cloneDeepWith (line 13861) | function cloneDeepWith(value, customizer) {
  function conformsTo (line 13890) | function conformsTo(object, source) {
  function eq (line 13926) | function eq(value, other) {
  function isArrayLike (line 14074) | function isArrayLike(value) {
  function isArrayLikeObject (line 14103) | function isArrayLikeObject(value) {
  function isBoolean (line 14124) | function isBoolean(value) {
  function isElement (line 14184) | function isElement(value) {
  function isEmpty (line 14221) | function isEmpty(value) {
  function isEqual (line 14273) | function isEqual(value, other) {
  function isEqualWith (line 14309) | function isEqualWith(value, other, customizer) {
  function isError (line 14333) | function isError(value) {
  function isFinite (line 14368) | function isFinite(value) {
  function isFunction (line 14389) | function isFunction(value) {
  function isInteger (line 14425) | function isInteger(value) {
  function isLength (line 14455) | function isLength(value) {
  function isObject (line 14485) | function isObject(value) {
  function isObjectLike (line 14514) | function isObjectLike(value) {
  function isMatch (line 14565) | function isMatch(object, source) {
  function isMatchWith (line 14601) | function isMatchWith(object, source, customizer) {
  function isNaN (line 14634) | function isNaN(value) {
  function isNative (line 14667) | function isNative(value) {
  function isNull (line 14691) | function isNull(value) {
  function isNil (line 14715) | function isNil(value) {
  function isNumber (line 14745) | function isNumber(value) {
  function isPlainObject (line 14778) | function isPlainObject(value) {
  function isSafeInteger (line 14837) | function isSafeInteger(value) {
  function isString (line 14877) | function isString(value) {
  function isSymbol (line 14899) | function isSymbol(value) {
  function isUndefined (line 14940) | function isUndefined(value) {
  function isWeakMap (line 14961) | function isWeakMap(value) {
  function isWeakSet (line 14982) | function isWeakSet(value) {
  function toArray (line 15061) | function toArray(value) {
  function toFinite (line 15100) | function toFinite(value) {
  function toInteger (line 15138) | function toInteger(value) {
  function toLength (line 15172) | function toLength(value) {
  function toNumber (line 15199) | function toNumber(value) {
  function toPlainObject (line 15244) | function toPlainObject(value) {
  function toSafeInteger (line 15272) | function toSafeInteger(value) {
  function toString (line 15299) | function toString(value) {
  function create (line 15502) | function create(prototype, properties) {
  function findKey (line 15592) | function findKey(object, predicate) {
  function findLastKey (line 15631) | function findLastKey(object, predicate) {
  function forIn (line 15663) | function forIn(object, iteratee) {
  function forInRight (line 15695) | function forInRight(object, iteratee) {
  function forOwn (line 15729) | function forOwn(object, iteratee) {
  function forOwnRight (line 15759) | function forOwnRight(object, iteratee) {
  function functions (line 15786) | function functions(object) {
  function functionsIn (line 15813) | function functionsIn(object) {
  function get (line 15842) | function get(object, path, defaultValue) {
  function has (line 15874) | function has(object, path) {
  function hasIn (line 15904) | function hasIn(object, path) {
  function keys (line 16012) | function keys(object) {
  function keysIn (line 16039) | function keysIn(object) {
  function mapKeys (line 16064) | function mapKeys(object, iteratee) {
  function mapValues (line 16102) | function mapValues(object, iteratee) {
  function omitBy (line 16244) | function omitBy(object, predicate) {
  function pickBy (line 16287) | function pickBy(object, predicate) {
  function result (line 16329) | function result(object, path, defaultValue) {
  function set (line 16379) | function set(object, path, value) {
  function setWith (line 16407) | function setWith(object, path, value, customizer) {
  function transform (line 16494) | function transform(object, iteratee, accumulator) {
  function unset (line 16544) | function unset(object, path) {
  function update (line 16575) | function update(object, path, updater) {
  function updateWith (line 16603) | function updateWith(object, path, updater, customizer) {
  function values (line 16634) | function values(object) {
  function valuesIn (line 16662) | function valuesIn(object) {
  function clamp (line 16687) | function clamp(number, lower, upper) {
  function inRange (line 16741) | function inRange(number, start, end) {
  function random (line 16784) | function random(lower, upper, floating) {
  function capitalize (line 16865) | function capitalize(string) {
  function deburr (line 16887) | function deburr(string) {
  function endsWith (line 16915) | function endsWith(string, target, position) {
  function escape (line 16957) | function escape(string) {
  function escapeRegExp (line 16979) | function escapeRegExp(string) {
  function pad (line 17077) | function pad(string, length, chars) {
  function padEnd (line 17116) | function padEnd(string, length, chars) {
  function padStart (line 17149) | function padStart(string, length, chars) {
  function parseInt (line 17183) | function parseInt(string, radix, guard) {
  function repeat (line 17214) | function repeat(string, n, guard) {
  function replace (line 17242) | function replace() {
  function split (line 17293) | function split(string, separator, limit) {
  function startsWith (line 17362) | function startsWith(string, target, position) {
  function template (line 17476) | function template(string, options, guard) {
  function toLower (line 17605) | function toLower(value) {
  function toUpper (line 17630) | function toUpper(value) {
  function trim (line 17656) | function trim(string, chars, guard) {
  function trimEnd (line 17691) | function trimEnd(string, chars, guard) {
  function trimStart (line 17724) | function trimStart(string, chars, guard) {
  function truncate (line 17775) | function truncate(string, options) {
  function unescape (line 17850) | function unescape(string) {
  function words (line 17919) | function words(string, pattern, guard) {
  function cond (line 18024) | function cond(pairs) {
  function conforms (line 18070) | function conforms(source) {
  function constant (line 18093) | function constant(value) {
  function defaultTo (line 18119) | function defaultTo(value, defaultValue) {
  function identity (line 18186) | function identity(value) {
  function iteratee (line 18232) | function iteratee(func) {
  function matches (line 18264) | function matches(source) {
  function matchesProperty (line 18294) | function matchesProperty(path, srcValue) {
  function mixin (line 18393) | function mixin(object, source, options) {
  function noConflict (line 18442) | function noConflict() {
  function noop (line 18461) | function noop() {
  function nthArg (line 18485) | function nthArg(n) {
  function property (line 18586) | function property(path) {
  function propertyOf (line 18611) | function propertyOf(object) {
  function stubArray (line 18716) | function stubArray() {
  function stubFalse (line 18733) | function stubFalse() {
  function stubObject (line 18755) | function stubObject() {
  function stubString (line 18772) | function stubString() {
  function stubTrue (line 18789) | function stubTrue() {
  function times (line 18812) | function times(n, iteratee) {
  function toPath (line 18847) | function toPath(value) {
  function uniqueId (line 18871) | function uniqueId(prefix) {
  function max (line 18980) | function max(array) {
  function maxBy (line 19009) | function maxBy(array, iteratee) {
  function mean (line 19029) | function mean(array) {
  function meanBy (line 19056) | function meanBy(array, iteratee) {
  function min (line 19078) | function min(array) {
  function minBy (line 19107) | function minBy(array, iteratee) {
  function sum (line 19188) | function sum(array) {
  function sumBy (line 19217) | function sumBy(array, iteratee) {
  function assert (line 19907) | function assert (val, msg) {
  function inherits (line 19913) | function inherits (ctor, superCtor) {
  function BN (line 19923) | function BN (number, base, endian) {
  function parseHex (line 20088) | function parseHex (str, start, end) {
  function parseBase (line 20142) | function parseBase (str, start, end, mul) {
  function toBitArray (line 20529) | function toBitArray (num) {
  function smallMulTo (line 20894) | function smallMulTo (self, num, out) {
  function bigMulTo (line 21516) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 21557) | function jumboMulTo (self, num, out) {
  function FFTM (line 21581) | function FFTM (x, y) {
  function MPrime (line 22841) | function MPrime (name, p) {
  function K256 (line 22891) | function K256 () {
  function P224 (line 22958) | function P224 () {
  function P192 (line 22966) | function P192 () {
  function P25519 (line 22974) | function P25519 () {
  function Red (line 23025) | function Red (m) {
  function Mont (line 23259) | function Mont (m) {
  function equals (line 23346) | function equals(a, b) {
  function selectCipherStrategy (line 24469) | function selectCipherStrategy(key) {
  function xorBlock (line 24632) | function xorBlock(words, offset, blockSize) {
  function deprecated (line 25237) | function deprecated() {
  function inspect (line 25284) | function inspect(obj, opts) {
  function stylizeWithColor (line 25342) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 25354) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 25359) | function arrayToHash(array) {
  function formatValue (line 25370) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 25483) | function formatPrimitive(ctx, value) {
  function formatError (line 25502) | function formatError(value) {
  function formatArray (line 25507) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 25527) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 25586) | function reduceToSingleString(output, base, braces) {
  function isArray (line 25609) | function isArray(ar) {
  function isBoolean (line 25614) | function isBoolean(arg) {
  function isNull (line 25619) | function isNull(arg) {
  function isNullOrUndefined (line 25624) | function isNullOrUndefined(arg) {
  function isNumber (line 25629) | function isNumber(arg) {
  function isString (line 25634) | function isString(arg) {
  function isSymbol (line 25639) | function isSymbol(arg) {
  function isUndefined (line 25644) | function isUndefined(arg) {
  function isRegExp (line 25649) | function isRegExp(re) {
  function isObject (line 25654) | function isObject(arg) {
  function isDate (line 25659) | function isDate(d) {
  function isError (line 25664) | function isError(e) {
  function isFunction (line 25670) | function isFunction(arg) {
  function isPrimitive (line 25675) | function isPrimitive(arg) {
  function objectToString (line 25687) | function objectToString(o) {
  function pad (line 25692) | function pad(n) {
  function timestamp (line 25701) | function timestamp() {
  function hasOwnProperty (line 25743) | function hasOwnProperty(obj, prop) {
  function createReduce (line 25997) | function createReduce(dir) {
  function createPredicateIndexFinder (line 26433) | function createPredicateIndexFinder(dir) {
  function createIndexFinder (line 26463) | function createIndexFinder(dir, predicateFind, sortedIndex) {
  function collectNonEnumProps (line 26728) | function collectNonEnumProps(obj, keys) {
  function defaultSetTimout (line 27658) | function defaultSetTimout() {
  function defaultClearTimeout (line 27661) | function defaultClearTimeout () {
  function runTimeout (line 27684) | function runTimeout(fun) {
  function runClearTimeout (line 27709) | function runClearTimeout(marker) {
  function cleanUpNextTick (line 27741) | function cleanUpNextTick() {
  function drainQueue (line 27756) | function drainQueue() {
  function Item (line 27794) | function Item(fun, array) {
  function noop (line 27808) | function noop() {}
  function assert (line 28390) | function assert(val, msg) {
  function format (line 28410) | function format(message, args) {
  function EventEmitter (line 29654) | function EventEmitter() {
  function g (line 29792) | function g() {
  function isFunction (line 29920) | function isFunction(arg) {
  function isNumber (line 29924) | function isNumber(arg) {
  function isObject (line 29928) | function isObject(arg) {
  function isUndefined (line 29932) | function isUndefined(arg) {
  function toArray (line 29949) | function toArray(msg, enc) {
  function toHex (line 29981) | function toHex(msg) {
  function htonl (line 29989) | function htonl(w) {
  function toHex32 (line 29998) | function toHex32(msg, endian) {
  function zero2 (line 30010) | function zero2(word) {
  function zero8 (line 30018) | function zero8(word) {
  function join32 (line 30038) | function join32(msg, start, end, endian) {
  function split32 (line 30054) | function split32(msg, endian) {
  function rotr32 (line 30074) | function rotr32(w, b) {
  function rotl32 (line 30079) | function rotl32(w, b) {
  function sum32 (line 30084) | function sum32(a, b) {
  function sum32_3 (line 30089) | function sum32_3(a, b, c) {
  function sum32_4 (line 30094) | function sum32_4(a, b, c, d) {
  function sum32_5 (line 30099) | function sum32_5(a, b, c, d, e) {
  function sum64 (line 30104) | function sum64(buf, pos, ah, al) {
  function sum64_hi (line 30115) | function sum64_hi(ah, al, bh, bl) {
  function sum64_lo (line 30122) | function sum64_lo(ah, al, bh, bl) {
  function sum64_4_hi (line 30128) | function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
  function sum64_4_lo (line 30143) | function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
  function sum64_5_hi (line 30149) | function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  function sum64_5_lo (line 30166) | function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  function rotr64_hi (line 30173) | function rotr64_hi(ah, al, num) {
  function rotr64_lo (line 30179) | function rotr64_lo(ah, al, num) {
  function shr64_hi (line 30185) | function shr64_hi(ah, al, num) {
  function shr64_lo (line 30190) | function shr64_lo(ah, al, num) {
  function PublicKey (line 30257) | function PublicKey(data, extra) {
  function toArray (line 30789) | function toArray(msg, enc) {
  function toHex (line 30821) | function toHex(msg) {
  function htonl (line 30829) | function htonl(w) {
  function toHex32 (line 30838) | function toHex32(msg, endian) {
  function zero2 (line 30850) | function zero2(word) {
  function zero8 (line 30858) | function zero8(word) {
  function join32 (line 30878) | function join32(msg, start, end, endian) {
  function split32 (line 30894) | function split32(msg, endian) {
  function rotr32 (line 30914) | function rotr32(w, b) {
  function rotl32 (line 30919) | function rotl32(w, b) {
  function sum32 (line 30924) | function sum32(a, b) {
  function sum32_3 (line 30929) | function sum32_3(a, b, c) {
  function sum32_4 (line 30934) | function sum32_4(a, b, c, d) {
  function sum32_5 (line 30939) | function sum32_5(a, b, c, d, e) {
  function sum64 (line 30944) | function sum64(buf, pos, ah, al) {
  function sum64_hi (line 30955) | function sum64_hi(ah, al, bh, bl) {
  function sum64_lo (line 30962) | function sum64_lo(ah, al, bh, bl) {
  function sum64_4_hi (line 30968) | function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
  function sum64_4_lo (line 30983) | function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
  function sum64_5_hi (line 30989) | function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  function sum64_5_lo (line 31006) | function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  function rotr64_hi (line 31013) | function rotr64_hi(ah, al, num) {
  function rotr64_lo (line 31019) | function rotr64_lo(ah, al, num) {
  function shr64_hi (line 31025) | function shr64_hi(ah, al, num) {
  function shr64_lo (line 31030) | function shr64_lo(ah, al, num) {
  function getter (line 31946) | function getter() {
  function setter (line 31949) | function setter(v) {
  function assert (line 32367) | function assert (val, msg) {
  function inherits (line 32373) | function inherits (ctor, superCtor) {
  function BN (line 32383) | function BN (number, base, endian) {
  function parseHex (line 32548) | function parseHex (str, start, end) {
  function parseBase (line 32602) | function parseBase (str, start, end, mul) {
  function toBitArray (line 32989) | function toBitArray (num) {
  function smallMulTo (line 33354) | function smallMulTo (self, num, out) {
  function bigMulTo (line 33976) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 34017) | function jumboMulTo (self, num, out) {
  function FFTM (line 34041) | function FFTM (x, y) {
  function MPrime (line 35301) | function MPrime (name, p) {
  function K256 (line 35351) | function K256 () {
  function P224 (line 35418) | function P224 () {
  function P192 (line 35426) | function P192 () {
  function P25519 (line 35434) | function P25519 () {
  function Red (line 35485) | function Red (m) {
  function Mont (line 35719) | function Mont (m) {
  function defineProperties (line 35801) | function defineProperties(target,props){for(var i=0;i<props.length;i++){...
  function _classCallCheck (line 35801) | function _classCallCheck(instance,Constructor){if(!(instance instanceof ...
  function RPCClient (line 35801) | function RPCClient(){_classCallCheck(this,RPCClient);var hostname=window...
  function defineProperties (line 35841) | function defineProperties(target,props){for(var i=0;i<props.length;i++){...
  function _classCallCheck (line 35841) | function _classCallCheck(instance,Constructor){if(!(instance instanceof ...
  function Ethereum (line 35843) | function Ethereum(){_classCallCheck(this,Ethereum);this.engine=new __WEB...
  function toStringVal (line 35850) | function toStringVal(val){return String(val);}
  function toBoolVal (line 35850) | function toBoolVal(val){if(String(val)=='true'){return true;}return false;}
  function toIntVal (line 35850) | function toIntVal(val){return parseInt(val);}
  function CipherBase (line 36002) | function CipherBase (hashMode) {
  function another (line 36142) | function another(configObj) {
  function bitFloor (line 38615) | function bitFloor(n) {
  function coeffToString (line 38622) | function coeffToString(a) {
  function compare (line 38642) | function compare( x, y ) {
  function intValidatorNoErrors (line 38687) | function intValidatorNoErrors( n, min, max ) {
  function isArray (line 38692) | function isArray(obj) {
  function toBaseOut (line 38702) | function toBaseOut( str, baseIn, baseOut ) {
  function toExponential (line 38727) | function toExponential( str, e ) {
  function toFixedPoint (line 38733) | function toFixedPoint( str, e ) {
  function truncate (line 38760) | function truncate(n) {
  function sign (line 39417) | function sign(transaction, privateKey, sighashType, inputIndex, subscrip...
  function verify (line 39436) | function verify(transaction, signature, publicKey, inputIndex, subscript) {
  function Output (line 39473) | function Output(args) {
  function Hash (line 40666) | function Hash (hash) {
  function Duplex (line 40759) | function Duplex(options) {
  function onend (line 40786) | function onend() {
  function onEndNT (line 40796) | function onEndNT(self) {
  function assert (line 41008) | function assert(val, msg) {
  function inherits (line 41015) | function inherits(ctor, superCtor) {
  function BN (line 41025) | function BN(number, base, endian) {
  function parseHex (line 41159) | function parseHex(str, start, end) {
  function parseBase (line 41209) | function parseBase(str, start, end, mul) {
  function MPrime (line 42859) | function MPrime(name, p) {
  function K256 (line 42909) | function K256() {
  function P224 (line 42975) | function P224() {
  function P192 (line 42983) | function P192() {
  function P25519 (line 42991) | function P25519() {
  function Red (line 43041) | function Red(m) {
  function Mont (line 43252) | function Mont(m) {
  function Network (line 43342) | function Network() {}
  function get (line 43356) | function get(arg, keys) {
  function addNetwork (line 43394) | function addNetwork(data) {
  function removeNetwork (line 43443) | function removeNetwork(network) {
  function enableRegtest (line 43570) | function enableRegtest() {
  function disableRegtest (line 43579) | function disableRegtest() {
  function Address (line 43649) | function Address(data, network, type) {
  function _interopRequireDefault (line 44149) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function isAsync (line 44153) | function isAsync(fn) {
  function wrapAsync (line 44157) | function wrapAsync(asyncFn) {
  function assert (line 44170) | function assert(val, msg) {
  function oldBrowser (line 44188) | function oldBrowser () {
  function randomBytes (line 44201) | function randomBytes (size, cb) {
  function Stream (line 44272) | function Stream() {
  function ondata (line 44279) | function ondata(chunk) {
  function ondrain (line 44289) | function ondrain() {
  function onend (line 44305) | function onend() {
  function onclose (line 44313) | function onclose() {
  function onerror (line 44321) | function onerror(er) {
  function cleanup (line 44332) | function cleanup() {
  function Hash (line 44367) | function Hash (blockSize, finalSize) {
  function copy (line 44482) | function copy(o, to) {
  function checkDataType (line 44489) | function checkDataType(dataType, data, negate) {
  function checkDataTypes (line 44508) | function checkDataTypes(dataTypes, data) {
  function coerceToTypes (line 44531) | function coerceToTypes(optionCoerceTypes, dataTypes) {
  function toHash (line 44548) | function toHash(arr) {
  function getProperty (line 44557) | function getProperty(key) {
  function escapeQuotes (line 44566) | function escapeQuotes(str) {
  function varOccurences (line 44575) | function varOccurences(str, dataVar) {
  function varReplace (line 44582) | function varReplace(str, dataVar, expr) {
  function cleanUpCode (line 44592) | function cleanUpCode(out) {
  function finalCleanUpCode (line 44609) | function finalCleanUpCode(out, async) {
  function schemaHasRules (line 44625) | function schemaHasRules(schema, rules) {
  function schemaHasRulesExcept (line 44631) | function schemaHasRulesExcept(schema, rules, exceptKeyword) {
  function toQuotedString (line 44637) | function toQuotedString(str) {
  function getPathExpr (line 44642) | function getPathExpr(currentPath, expr, jsonPointers, isNumber) {
  function getPath (line 44650) | function getPath(currentPath, prop, jsonPointers) {
  function getData (line 44660) | function getData($data, lvl, paths) {
  function joinPaths (line 44695) | function joinPaths (a, b) {
  function unescapeFragment (line 44701) | function unescapeFragment(str) {
  function escapeFragment (line 44706) | function escapeFragment(str) {
  function escapeJsonPointer (line 44711) | function escapeJsonPointer(str) {
  function unescapeJsonPointer (line 44716) | function unescapeJsonPointer(str) {
  function parseLoop (line 44841) | function parseLoop(base64Str, base64StrLength, reverseMap) {
  function FF (line 45076) | function FF(a, b, c, d, x, s, t) {
  function GG (line 45081) | function GG(a, b, c, d, x, s, t) {
  function HH (line 45086) | function HH(a, b, c, d, x, s, t) {
  function II (line 45091) | function II(a, b, c, d, x, s, t) {
  function _classCallCheck (line 45477) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function Transaction (line 45524) | function Transaction(data) {
  function compare (line 45818) | function compare(a, b) {
  function isBuffer (line 45842) | function isBuffer(b) {
  function pToString (line 45881) | function pToString (obj) {
  function isView (line 45884) | function isView(arrbuf) {
  function getName (line 45918) | function getName(func) {
  function truncate (line 45968) | function truncate(s, n) {
  function inspect (line 45975) | function inspect(something) {
  function getMessage (line 45983) | function getMessage(self) {
  function fail (line 46000) | function fail(actual, expected, message, operator, stackStartFunction) {
  function ok (line 46020) | function ok(value, message) {
  function _deepEqual (line 46057) | function _deepEqual(actual, expected, strict, memos) {
  function isArguments (line 46123) | function isArguments(object) {
  function objEquiv (line 46127) | function objEquiv(a, b, strict, actualVisitedObjects) {
  function notDeepStrictEqual (line 46179) | function notDeepStrictEqual(actual, expected, message) {
  function expectedException (line 46204) | function expectedException(actual, expected) {
  function _tryBlock (line 46228) | function _tryBlock(block) {
  function _throws (line 46238) | function _throws(shouldThrow, block, expected, message) {
  function isArray (line 46666) | function isArray(arg) {
  function isBoolean (line 46674) | function isBoolean(arg) {
  function isNull (line 46679) | function isNull(arg) {
  function isNullOrUndefined (line 46684) | function isNullOrUndefined(arg) {
  function isNumber (line 46689) | function isNumber(arg) {
  function isString (line 46694) | function isString(arg) {
  function isSymbol (line 46699) | function isSymbol(arg) {
  function isUndefined (line 46704) | function isUndefined(arg) {
  function isRegExp (line 46709) | function isRegExp(re) {
  function isObject (line 46714) | function isObject(arg) {
  function isDate (line 46719) | function isDate(d) {
  function isError (line 46724) | function isError(e) {
  function isFunction (line 46729) | function isFunction(arg) {
  function isPrimitive (line 46734) | function isPrimitive(arg) {
  function objectToString (line 46746) | function objectToString(o) {
  function BlockHash (line 46829) | function BlockHash() {
  function Input (line 47138) | function Input(params) {
  function TransactionSignature (line 47342) | function TransactionSignature(arg) {
  function noop (line 47488) | function noop() {
  function createPayload (line 47505) | function createPayload(data){
  function BlockHash (line 47526) | function BlockHash() {
  function toObject (line 47632) | function toObject(val) {
  function shouldUseNative (line 47640) | function shouldUseNative() {
  function isCrushed (line 47739) | function isCrushed() {}
  function Timeout (line 47861) | function Timeout(id, clearFn) {
  function nextTick (line 48079) | function nextTick(fn, arg1, arg2, arg3) {
  function asUInt32Array (line 48127) | function asUInt32Array (buf) {
  function scrubVec (line 48140) | function scrubVec (v) {
  function cryptBlock (line 48146) | function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
  function AES (line 48245) | function AES (key) {
  function EVP_BytesToKey (line 48358) | function EVP_BytesToKey (password, salt, keyBits, ivLen) {
  function parseKeys (line 48427) | function parseKeys (buffer) {
  function decrypt (line 48512) | function decrypt (data, password) {
  function PrivateKey (line 49653) | function PrivateKey(data, network) {
  function Random (line 50118) | function Random() {
  function isArrayLike (line 50567) | function isArrayLike(value) {
  function slice (line 50585) | function slice(arrayLike, start) {
  function SubProvider (line 50607) | function SubProvider() {
  function invariant (line 50708) | function invariant(condition, format, a, b, c, d, e, f) {
  function makeEmptyFunction (line 50747) | function makeEmptyFunction(arg) {
  function warning (line 50785) | function warning(message) {
  function isPlainObject (line 50857) | function isPlainObject(value) {
  function _interopRequireDefault (line 50953) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireDefault (line 51028) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 51132) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 51134) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 51136) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Router (line 51150) | function Router() {
  function _objectWithoutProperties (line 51411) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function persistReducer (line 51426) | function persistReducer(config, baseReducer) {
  function s (line 51576) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_d...
  function any (line 51580) | function any(promises) {
  function Async (line 51607) | function Async() {
  function AsyncInvokeLater (line 51675) | function AsyncInvokeLater(fn, receiver, arg) {
  function AsyncInvoke (line 51680) | function AsyncInvoke(fn, receiver, arg) {
  function AsyncSettlePromises (line 51685) | function AsyncSettlePromises(promise) {
  function noConflict (line 51835) | function noConflict() {
  function ensureMethod (line 51913) | function ensureMethod(obj, methodName) {
  function caller (line 51924) | function caller(obj) {
  function namedGetter (line 51944) | function namedGetter(obj) {
  function indexedGetter (line 51947) | function indexedGetter(obj) {
  function catchFilter (line 52108) | function catchFilter(instances, cb, promise) {
  function Context (line 52155) | function Context() {
  function createContext (line 52175) | function createContext() {
  function peekContext (line 52179) | function peekContext() {
  function generatePromiseLifecycleEventObject (line 52422) | function generatePromiseLifecycleEventObject(name, promise) {
  function defaultFireEvent (line 52513) | function defaultFireEvent() { return false; }
  function cancellationExecute (line 52536) | function cancellationExecute(executor, resolve, reject) {
  function cancellationAttachCancellationCallback (line 52551) | function cancellationAttachCancellationCallback(onCancel) {
  function cancellationOnCancel (line 52566) | function cancellationOnCancel() {
  function cancellationSetOnCancel (line 52570) | function cancellationSetOnCancel(onCancel) {
  function cancellationClearCancellationData (line 52574) | function cancellationClearCancellationData() {
  function cancellationPropagateFrom (line 52579) | function cancellationPropagateFrom(parent, flags) {
  function bindingPropagateFrom (line 52593) | function bindingPropagateFrom(parent, flags) {
  function boundValueFunction (line 52600) | function boundValueFunction() {
  function longStackTracesCaptureStackTrace (line 52614) | function longStackTracesCaptureStackTrace() {
  function longStackTracesAttachExtraTrace (line 52618) | function longStackTracesAttachExtraTrace(error, ignoreSelf) {
  function checkForgottenReturns (line 52635) | function checkForgottenReturns(returnValue, promiseCreated, name, promise,
  function deprecated (line 52682) | function deprecated(name, replacement) {
  function warn (line 52689) | function warn(message, shouldUseOwnTrace, promise) {
  function reconstructStack (line 52707) | function reconstructStack(message, stacks) {
  function removeDuplicateOrEmptyJumps (line 52718) | function removeDuplicateOrEmptyJumps(stacks) {
  function removeCommonRoots (line 52728) | function removeCommonRoots(stacks) {
  function cleanStack (line 52756) | function cleanStack(stack) {
  function stackFramesAsArray (line 52773) | function stackFramesAsArray(error) {
  function parseStackAndMessage (line 52787) | function parseStackAndMessage(error) {
  function formatAndLogError (line 52798) | function formatAndLogError(error, title, isSoft) {
  function fireRejectionEvent (line 52816) | function fireRejectionEvent(name, localHandler, reason, promise) {
  function formatNonError (line 52840) | function formatNonError(obj) {
  function snip (line 52866) | function snip(str) {
  function longStackTracesIsSupported (line 52874) | function longStackTracesIsSupported() {
  function parseLineInfo (line 52880) | function parseLineInfo(line) {
  function setBounds (line 52890) | function setBounds(firstLineError, lastLineError) {
  function CapturedTrace (line 52932) | function CapturedTrace(parent) {
  function returner (line 53139) | function returner() {
  function thrower (line 53142) | function thrower() {
  function promiseAllThis (line 53190) | function promiseAllThis() {
  function PromiseMapSeries (line 53194) | function PromiseMapSeries(promises, fn) {
  function subError (line 53224) | function subError(nameProperty, defaultMessage) {
  function OperationalError (line 53288) | function OperationalError(message) {
  function PassThroughHandlerContext (line 53438) | function PassThroughHandlerContext(promise, type, handler) {
  function FinallyHandlerCancelReaction (line 53450) | function FinallyHandlerCancelReaction(finallyHandler) {
  function checkCancel (line 53458) | function checkCancel(ctx, reason) {
  function succeed (line 53471) | function succeed() {
  function fail (line 53474) | function fail(reason) {
  function finallyHandler (line 53479) | function finallyHandler(reasonOrValue) {
  function promiseFromYieldHandler (line 53593) | function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
  function PromiseSpawn (line 53610) | function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
  function MappingPromiseArray (line 53987) | function MappingPromiseArray(promises, fn, limit, _filter) {
  function map (line 54107) | function map(promises, fn, options, _filter) {
  function isUntypedError (line 54208) | function isUntypedError(obj) {
  function wrapAsOperationalError (line 54214) | function wrapAsOperationalError(obj) {
  function nodebackForPromise (line 54234) | function nodebackForPromise(promise, multiArgs) {
  function spreadAdapter (line 54261) | function spreadAdapter(val, nodeback) {
  function successAdapter (line 54271) | function successAdapter(val, nodeback) {
  function errorAdapter (line 54281) | function errorAdapter(reason, nodeback) {
  function Proxyable (line 54325) | function Proxyable() {}
  function check (line 54373) | function check(self, executor) {
  function Promise (line 54383) | function Promise(executor) {
  function deferResolve (line 55023) | function deferResolve(v) {this.promise._resolveCallback(v);}
  function deferReject (line 55024) | function deferReject(v) {this.promise._rejectCallback(v, false);}
  function fillTypes (line 55068) | function fillTypes(value) {
  function toResolutionValue (line 55097) | function toResolutionValue(val) {
  function PromiseArray (line 55105) | function PromiseArray(values) {
  function propsFilter (line 55306) | function propsFilter(key) {
  function isPromisified (line 55310) | function isPromisified(fn) {
  function hasPromisified (line 55319) | function hasPromisified(obj, key, suffix) {
  function checkValid (line 55324) | function checkValid(ret, suffix, suffixRegexp) {
  function promisifiableMethods (line 55339) | function promisifiableMethods(obj, suffix, suffixRegexp, filter) {
  function generateCallForArgumentCount (line 55398) | function generateCallForArgumentCount(count) {
  function generateArgumentSwitchCase (line 55412) | function generateArgumentSwitchCase() {
  function makeNodePromisifiedClosure (line 55485) | function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multi...
  function promisifyAll (line 55515) | function promisifyAll(obj, suffix, filter, promisifier, multiArgs) {
  function promisify (line 55540) | function promisify(callback, receiver, multiArgs) {
  function extractEntry (line 55607) | function extractEntry(value, key) {
  function PropertiesPromiseArray (line 55633) | function PropertiesPromiseArray(obj) {
  function props (line 55685) | function props(promises) {
  function arrayMove (line 55715) | function arrayMove(src, srcIndex, dst, dstIndex, len) {
  function Queue (line 55722) | function Queue(capacity) {
  function race (line 55800) | function race(promises, parent) {
  function ReductionPromiseArray (line 55851) | function ReductionPromiseArray(promises, fn, initialValue, _each) {
  function completed (line 55959) | function completed(valueOrReason, array) {
  function reduce (line 55967) | function reduce(promises, fn, initialValue, _each) {
  function gotAccum (line 55975) | function gotAccum(accum) {
  function gotValue (line 55987) | function gotValue(value) {
  function SettledPromiseArray (line 56083) | function SettledPromiseArray(values) {
  function SomePromiseArray (line 56132) | function SomePromiseArray(values) {
  function some (line 56249) | function some(promises, howMany) {
  function PromiseInspection (line 56274) | function PromiseInspection(promise) {
  function tryConvertToPromise (line 56383) | function tryConvertToPromise(obj, context) {
  function doGetThen (line 56410) | function doGetThen(obj) {
  function getThen (line 56414) | function getThen(obj) {
  function isAnyBluebirdPromise (line 56424) | function isAnyBluebirdPromise(obj) {
  function doThenable (line 56432) | function doThenable(x, then, context) {
  function HandleWrapper (line 56470) | function HandleWrapper(handle)  {
  function successClear (line 56524) | function successClear(value) {
  function failureClear (line 56529) | function failureClear(reason) {
  function thrower (line 56570) | function thrower(e) {
  function castPreservingDisposable (line 56574) | function castPreservingDisposable(thenable) {
  function dispose (line 56584) | function dispose(resources, inspection) {
  function Disposer (line 56611) | function Disposer(data, promise, context) {
  function FunctionDisposer (line 56650) | function FunctionDisposer(fn, promise, context) {
  function maybeUnwrapDisposer (line 56660) | function maybeUnwrapDisposer(value) {
  function ResourceList (line 56668) | function ResourceList(length) {
  function tryCatcher (line 56799) | function tryCatcher() {
  function tryCatch (line 56809) | function tryCatch(fn) {
  function T (line 56817) | function T() {
  function isPrimitive (line 56834) | function isPrimitive(val) {
  function isObject (line 56840) | function isObject(value) {
  function maybeWrapAsError (line 56845) | function maybeWrapAsError(maybeError) {
  function withAppended (line 56851) | function withAppended(target, appendee) {
  function getDataPropertyOrDefault (line 56862) | function getDataPropertyOrDefault(obj, key, defaultValue) {
  function notEnumerableProp (line 56876) | function notEnumerableProp(obj, name, value) {
  function thrower (line 56888) | function thrower(r) {
  function isClass (line 56959) | function isClass(fn) {
  function toFastProperties (line 56981) | function toFastProperties(obj) {
  function isIdentifier (line 56992) | function isIdentifier(str) {
  function filledRange (line 56996) | function filledRange(count, prefix, suffix) {
  function safeToString (line 57004) | function safeToString(obj) {
  function isError (line 57012) | function isError(obj) {
  function markAsOriginatingFromRejection (line 57020) | function markAsOriginatingFromRejection(e) {
  function originatesFromRejection (line 57027) | function originatesFromRejection(e) {
  function canAttachTrace (line 57033) | function canAttachTrace(obj) {
  function classString (line 57052) | function classString(obj) {
  function copyDescriptors (line 57056) | function copyDescriptors(from, to, filter) {
  function env (line 57104) | function env(key) {
  function getNativePromise (line 57108) | function getNativePromise() {
  function domainBind (line 57119) | function domainBind(self, cb) {
  function MD5 (line 57421) | function MD5 () {
  function rotl (line 57539) | function rotl (x, n) {
  function fnF (line 57543) | function fnF (a, b, c, d, m, k, s) {
  function fnG (line 57547) | function fnG (a, b, c, d, m, k, s) {
  function fnH (line 57551) | function fnH (a, b, c, d, m, k, s) {
  function fnI (line 57555) | function fnI (a, b, c, d, m, k, s) {
  function WriteReq (line 57616) | function WriteReq(chunk, encoding, cb) {
  function CorkedRequest (line 57625) | function CorkedRequest(state) {
  function _uint8ArrayToBuffer (line 57665) | function _uint8ArrayToBuffer(chunk) {
  function _isUint8Array (line 57668) | function _isUint8Array(obj) {
  function nop (line 57678) | function nop() {}
  function WritableState (line 57680) | function WritableState(options, stream) {
  function Writable (line 57830) | function Writable(options) {
  function writeAfterEnd (line 57867) | function writeAfterEnd(stream, cb) {
  function validChunk (line 57877) | function validChunk(stream, state, chunk, cb) {
  function decodeChunk (line 57944) | function decodeChunk(state, chunk, encoding) {
  function writeOrBuffer (line 57964) | function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
  function doWrite (line 58003) | function doWrite(stream, state, writev, len, chunk, encoding, cb) {
  function onwriteError (line 58012) | function onwriteError(stream, state, sync, er, cb) {
  function onwriteStateUpdate (line 58036) | function onwriteStateUpdate(state) {
  function onwrite (line 58043) | function onwrite(stream, er) {
  function afterWrite (line 58068) | function afterWrite(stream, state, finished, cb) {
  function onwriteDrain (line 58078) | function onwriteDrain(stream, state) {
  function clearBuffer (line 58086) | function clearBuffer(stream, state) {
  function needFinish (line 58177) | function needFinish(state) {
  function callFinal (line 58180) | function callFinal(stream, state) {
  function prefinish (line 58191) | function prefinish(stream, state) {
  function finishMaybe (line 58204) | function finishMaybe(stream, state) {
  function endWritable (line 58216) | function endWritable(stream, state, cb) {
  function onCorkedFinish (line 58226) | function onCorkedFinish(corkReq, state, err) {
  function _normalizeEncoding (line 58313) | function _normalizeEncoding(enc) {
  function normalizeEncoding (line 58343) | function normalizeEncoding(enc) {
  function StringDecoder (line 58353) | function StringDecoder(encoding) {
  function utf8CheckByte (line 58414) | function utf8CheckByte(byte) {
  function utf8CheckIncomplete (line 58422) | function utf8CheckIncomplete(self, buf, i) {
  function utf8CheckExtraBytes (line 58455) | function utf8CheckExtraBytes(self, buf, p) {
  function utf8FillLast (line 58475) | function utf8FillLast(buf) {
  function utf8Text (line 58490) | function utf8Text(buf, i) {
  function utf8End (line 58501) | function utf8End(buf) {
  function utf16Text (line 58511) | function utf16Text(buf, i) {
  function utf16End (line 58534) | function utf16End(buf) {
  function base64Text (line 58543) | function base64Text(buf, i) {
  function base64End (line 58557) | function base64End(buf) {
  function simpleWrite (line 58564) | function simpleWrite(buf) {
  function simpleEnd (line 58568) | function simpleEnd(buf) {
  function RIPEMD160 (line 58581) | function RIPEMD160 () {
  function rotl (line 58843) | function rotl (x, n) {
  function fn1 (line 58847) | function fn1 (a, b, c, d, e, m, k, s) {
  function fn2 (line 58851) | function fn2 (a, b, c, d, e, m, k, s) {
  function fn3 (line 58855) | function fn3 (a, b, c, d, e, m, k, s) {
  function fn4 (line 58859) | function fn4 (a, b, c, d, e, m, k, s) {
  function fn5 (line 58863) | function fn5 (a, b, c, d, e, m, k, s) {
  function getCiphers (line 58924) | function getCiphers () {
  function Rand (line 58972) | function Rand(rand) {
  function blind (line 59037) | function blind(priv) {
  function crt (line 59046) | function crt(msg, priv) {
  function getr (line 59066) | function getr(priv) {
  function resolve (line 59107) | function resolve(compile, root, ref) {
  function resolveSchema (line 59149) | function resolveSchema(root, ref) {
  function resolveRecursive (line 59181) | function resolveRecursive(root, ref, parsedRef) {
  function getJsonPointer (line 59197) | function getJsonPointer(parsedRef, baseId, schema, root) {
  function inlineRef (line 59239) | function inlineRef(schema, limit) {
  function checkNoRef (line 59246) | function checkNoRef(schema) {
  function countKeys (line 59264) | function countKeys(schema) {
  function getFullPath (line 59288) | function getFullPath(id, normalize) {
  function _getFullPath (line 59295) | function _getFullPath(p) {
  function normalizeId (line 59302) | function normalizeId(id) {
  function resolveUrl (line 59307) | function resolveUrl(baseId, id) {
  function resolveIds (line 59314) | function resolveIds(schema) {
  function ValidationError (line 59432) | function ValidationError(errors) {
  function MissingRefError (line 59444) | function MissingRefError(baseId, ref, message) {
  function errorSubclass (line 59451) | function errorSubclass(Subclass) {
  function ts64 (line 60376) | function ts64(x, i, h, l) {
  function vn (line 60387) | function vn(x, xi, y, yi, n) {
  function crypto_verify_16 (line 60393) | function crypto_verify_16(x, xi, y, yi) {
  function crypto_verify_32 (line 60397) | function crypto_verify_32(x, xi, y, yi) {
  function core_salsa20 (line 60401) | function core_salsa20(o, p, k, c) {
  function core_hsalsa20 (line 60594) | function core_hsalsa20(o,p,k,c) {
  function crypto_core_salsa20 (line 60731) | function crypto_core_salsa20(out,inp,k,c) {
  function crypto_core_hsalsa20 (line 60735) | function crypto_core_hsalsa20(out,inp,k,c) {
  function crypto_stream_salsa20_xor (line 60742) | function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
  function crypto_stream_salsa20 (line 60767) | function crypto_stream_salsa20(c,cpos,b,n,k) {
  function crypto_stream (line 60791) | function crypto_stream(c,cpos,d,n,k) {
  function crypto_stream_xor (line 60799) | function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
  function crypto_onetimeauth (line 61164) | function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
  function crypto_onetimeauth_verify (line 61171) | function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
  function crypto_secretbox (line 61177) | function crypto_secretbox(c,m,d,n,k) {
  function crypto_secretbox_open (line 61186) | function crypto_secretbox_open(m,c,d,n,k) {
  function set25519 (line 61197) | function set25519(r, a) {
  function car25519 (line 61202) | function car25519(o) {
  function sel25519 (line 61212) | function sel25519(p, q, b) {
  function pack25519 (line 61221) | function pack25519(o, n) {
  function neq25519 (line 61245) | function neq25519(a, b) {
  function par25519 (line 61252) | function par25519(a) {
  function unpack25519 (line 61258) | function unpack25519(o, n) {
  function A (line 61264) | function A(o, a, b) {
  function Z (line 61268) | function Z(o, a, b) {
  function M (line 61272) | function M(o, a, b) {
  function S (line 61643) | function S(o, a) {
  function inv25519 (line 61647) | function inv25519(o, i) {
  function pow2523 (line 61658) | function pow2523(o, i) {
  function crypto_scalarmult (line 61669) | function crypto_scalarmult(q, n, p) {
  function crypto_scalarmult_base (line 61722) | function crypto_scalarmult_base(q, n) {
  function crypto_box_keypair (line 61726) | function crypto_box_keypair(y, x) {
  function crypto_box_beforenm (line 61731) | function crypto_box_beforenm(k, y, x) {
  function crypto_box (line 61740) | function crypto_box(c, m, d, n, y, x) {
  function crypto_box_open (line 61746) | function crypto_box_open(m, c, d, n, y, x) {
  function crypto_hashblocks_hl (line 61795) | function crypto_hashblocks_hl(hh, hl, m, n) {
  function crypto_hash (line 62156) | function crypto_hash(out, m, n) {
  function add (line 62196) | function add(p, q) {
  function cswap (line 62222) | function cswap(p, q, b) {
  function pack (line 62229) | function pack(r, p) {
  function scalarmult (line 62238) | function scalarmult(p, q, s) {
  function scalarbase (line 62253) | function scalarbase(p, s) {
  function crypto_sign_keypair (line 62262) | function crypto_sign_keypair(pk, sk, seeded) {
  function modL (line 62282) | function modL(r, x) {
  function reduce (line 62307) | function reduce(r) {
  function crypto_sign (line 62315) | function crypto_sign(sm, m, n, sk) {
  function unpackneg (line 62350) | function unpackneg(r, p) {
  function crypto_sign_open (line 62388) | function crypto_sign_open(m, sm, n, pk) {
  function checkLengths (line 62483) | function checkLengths(k, n) {
  function checkBoxLengths (line 62488) | function checkBoxLengths(pk, sk) {
  function checkArrayTypes (line 62493) | function checkArrayTypes() {
  function cleanup (line 62501) | function cleanup(arr) {
  function Opcode (line 62779) | function Opcode(num) {
  function Transaction (line 63062) | function Transaction(serialized) {
  function Unit (line 64317) | function Unit(amount, code) {
  function PromiseCapability (line 64674) | function PromiseCapability(C) {
  function once (line 64730) | function once(fn) {
  function baseGetTag (line 64762) | function baseGetTag(value) {
  function isObjectLike (line 64802) | function isObjectLike(value) {
  function onlyOnce (line 64820) | function onlyOnce(fn) {
  function noop (line 64871) | function noop() {}
  function getThen (line 64892) | function getThen(obj) {
  function tryCallOne (line 64901) | function tryCallOne(fn, a) {
  function tryCallTwo (line 64909) | function tryCallTwo(fn, a, b) {
  function Promise (line 64920) | function Promise(fn) {
  function safeThen (line 64947) | function safeThen(self, onFulfilled, onRejected) {
  function handle (line 64954) | function handle(self, deferred) {
  function handleResolved (line 64978) | function handleResolved(self, deferred) {
  function resolve (line 64997) | function resolve(self, newValue) {
  function reject (line 65031) | function reject(self, newValue) {
  function finale (line 65039) | function finale(self) {
  function Handler (line 65052) | function Handler(onFulfilled, onRejected, promise){
  function doResolve (line 65064) | function doResolve(fn, promise) {
  function _classCallCheck (line 65145) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 65147) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 65149) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function _objectWithoutProperties (line 65151) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function noop (line 65162) | function noop() {}
  function makeSelectorStateful (line 65163) | function makeSelectorStateful(sourceSelector, store) {
  function connectAdvanced (line 65184) | function connectAdvanced(
  function createStore (line 65557) | function createStore(reducer, preloadedState, enhancer) {
  function warning (line 65795) | function warning(message) {
  function compose (line 65828) | function compose() {
  function wrapMapToPropsConstant (line 65861) | function wrapMapToPropsConstant(getConstant) {
  function getDependsOnOwnProps (line 65880) | function getDependsOnOwnProps(mapToProps) {
  function wrapMapToPropsFunc (line 65896) | function wrapMapToPropsFunc(mapToProps, methodName) {
  function verifyPlainObject (line 65938) | function verifyPlainObject(value, displayName, methodName) {
  function isAbsolute (line 65950) | function isAbsolute(pathname) {
  function spliceOne (line 65955) | function spliceOne(list, index) {
  function resolvePathname (line 65964) | function resolvePathname(to) {
  function valueEqual (line 66029) | function valueEqual(a, b) {
  function _objectWithoutProperties (line 66140) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function _classCallCheck (line 66142) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 66144) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 66146) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Link (line 66163) | function Link() {
  function _classCallCheck (line 66264) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 66266) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 66268) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Route (line 66287) | function Route() {
  function createPersistoid (line 66474) | function createPersistoid(config) {
  function defaultSerialize (line 66571) | function defaultSerialize(data) {
  function getStoredState (line 66586) | function getStoredState(config) {
  function defaultDeserialize (line 66613) | function defaultDeserialize(serial) {
  function purgeStoredState (line 66628) | function purgeStoredState(config) {
  function warnIfRemoveError (line 66634) | function warnIfRemoveError(err) {
  function assert (line 67160) | function assert (val, msg) {
  function inherits (line 67166) | function inherits (ctor, superCtor) {
  function BN (line 67176) | function BN (number, base, endian) {
  function parseHex (line 67341) | function parseHex (str, start, end) {
  function parseBase (line 67395) | function parseBase (str, start, end, mul) {
  function toBitArray (line 67782) | function toBitArray (num) {
  function smallMulTo (line 68147) | function smallMulTo (self, num, out) {
  function bigMulTo (line 68769) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 68810) | function jumboMulTo (self, num, out) {
  function FFTM (line 68834) | function FFTM (x, y) {
  function MPrime (line 70094) | function MPrime (name, p) {
  function K256 (line 70144) | function K256 () {
  function P224 (line 70211) | function P224 () {
  function P192 (line 70219) | function P192 () {
  function P25519 (line 70227) | function P25519 () {
  function Red (line 70278) | function Red (m) {
  function Mont (line 70512) | function Mont (m) {
  function validateSingleMessage (line 71274) | function validateSingleMessage(message){
  function EE (line 71414) | function EE(fn, context, once) {
  function EventEmitter (line 71427) | function EventEmitter() { /* Nothing to set */ }
  function Result (line 71869) | function Result() {}
  function _uint8ArrayToBuffer (line 72456) | function _uint8ArrayToBuffer(chunk) {
  function _isUint8Array (line 72459) | function _isUint8Array(obj) {
  function prependListener (line 72488) | function prependListener(emitter, event, fn) {
  function ReadableState (line 72500) | function ReadableState(options, stream) {
  function Readable (line 72577) | function Readable(options) {
  function readableAddChunk (line 72652) | function readableAddChunk(stream, chunk, encoding, addToFront, skipChunk...
  function addChunk (line 72688) | function addChunk(stream, state, chunk, addToFront) {
  function chunkInvalid (line 72702) | function chunkInvalid(state, chunk) {
  function needMoreData (line 72717) | function needMoreData(state) {
  function computeNewHighWaterMark (line 72735) | function computeNewHighWaterMark(n) {
  function howMuchToRead (line 72754) | function howMuchToRead(n, state) {
  function onEofChunk (line 72873) | function onEofChunk(stream, state) {
  function emitReadable (line 72891) | function emitReadable(stream) {
  function emitReadable_ (line 72901) | function emitReadable_(stream) {
  function maybeReadMore (line 72913) | function maybeReadMore(stream, state) {
  function maybeReadMore_ (line 72920) | function maybeReadMore_(stream, state) {
  function onunpipe (line 72964) | function onunpipe(readable, unpipeInfo) {
  function onend (line 72974) | function onend() {
  function cleanup (line 72987) | function cleanup() {
  function ondata (line 73015) | function ondata(chunk) {
  function onerror (line 73035) | function onerror(er) {
  function onclose (line 73046) | function onclose() {
  function onfinish (line 73051) | function onfinish() {
  function unpipe (line 73058) | function unpipe() {
  function pipeOnDrain (line 73075) | function pipeOnDrain(src) {
  function nReadingNextTick (line 73162) | function nReadingNextTick(self) {
  function resume (line 73179) | function resume(stream, state) {
  function resume_ (line 73186) | function resume_(stream, state) {
  function flow (line 73209) | function flow(stream) {
  function fromList (line 73295) | function fromList(n, state) {
  function fromListPartial (line 73315) | function fromListPartial(n, list, hasStrings) {
  function copyFromBufferString (line 73335) | function copyFromBufferString(n, list) {
  function copyFromBuffer (line 73364) | function copyFromBuffer(n, list) {
  function endReadable (line 73391) | function endReadable(stream) {
  function endReadableNT (line 73404) | function endReadableNT(state, stream) {
  function indexOf (line 73413) | function indexOf(xs, x) {
  function destroy (line 73441) | function destroy(err, cb) {
  function undestroy (line 73482) | function undestroy() {
  function emitErrorNT (line 73499) | function emitErrorNT(self, err) {
  function afterTransform (line 73589) | function afterTransform(er, data) {
  function Transform (line 73614) | function Transform(options) {
  function prefinish (line 73646) | function prefinish() {
  function done (line 73713) | function done(stream, er, data) {
  function Sha256 (line 73765) | function Sha256 () {
  function ch (line 73788) | function ch (x, y, z) {
  function maj (line 73792) | function maj (x, y, z) {
  function sigma0 (line 73796) | function sigma0 (x) {
  function sigma1 (line 73800) | function sigma1 (x) {
  function gamma0 (line 73804) | function gamma0 (x) {
  function gamma1 (line 73808) | function gamma1 (x) {
  function Sha512 (line 73922) | function Sha512 () {
  function Ch (line 73953) | function Ch (x, y, z) {
  function maj (line 73957) | function maj (x, y, z) {
  function sigma0 (line 73961) | function sigma0 (x, xl) {
  function sigma1 (line 73965) | function sigma1 (x, xl) {
  function Gamma0 (line 73969) | function Gamma0 (x, xl) {
  function Gamma0l (line 73973) | function Gamma0l (x, xl) {
  function Gamma1 (line 73977) | function Gamma1 (x, xl) {
  function Gamma1l (line 73981) | function Gamma1l (x, xl) {
  function getCarry (line 73985) | function getCarry (a, b) {
  function writeInt64BE (line 74115) | function writeInt64BE (h, l, offset) {
  function Hmac (line 74152) | function Hmac (alg, key) {
  function Hmac (line 74285) | function Hmac (alg, key, saltLen) {
  function getDigest (line 74320) | function getDigest (alg) {
  function pbkdf2 (line 74330) | function pbkdf2 (password, salt, iterations, keylen, digest) {
  function getBlock (line 74377) | function getBlock (self) {
  function incr32 (line 74409) | function incr32 (iv) {
  function xorTest (line 74444) | function xorTest (a, b) {
  function calcIv (line 74456) | function calcIv (self, iv, ck) {
  function StreamCipher (line 74479) | function StreamCipher (mode, key, iv, decrypt) {
  function StreamCipher (line 74564) | function StreamCipher (mode, key, iv, decrypt) {
  function _getPrimes (line 74613) | function _getPrimes() {
  function simpleSieve (line 74635) | function simpleSieve(p) {
  function fermatTest (line 74650) | function fermatTest(p) {
  function findPrime (line 74655) | function findPrime(bits, gen) {
  function MillerRabin (line 74706) | function MillerRabin(rand) {
  function toArray (line 74829) | function toArray(msg, enc) {
  function zero2 (line 74861) | function zero2(word) {
  function toHex (line 74869) | function toHex(msg) {
  function ft_1 (line 74895) | function ft_1(s, x, y, z) {
  function ch32 (line 74905) | function ch32(x, y, z) {
  function maj32 (line 74910) | function maj32(x, y, z) {
  function p32 (line 74915) | function p32(x, y, z) {
  function s0_256 (line 74920) | function s0_256(x) {
  function s1_256 (line 74925) | function s1_256(x) {
  function g0_256 (line 74930) | function g0_256(x) {
  function g1_256 (line 74935) | function g1_256(x) {
  function SHA256 (line 74984) | function SHA256() {
  function SHA512 (line 75121) | function SHA512() {
  function ch64_hi (line 75273) | function ch64_hi(xh, xl, yh, yl, zh) {
  function ch64_lo (line 75280) | function ch64_lo(xh, xl, yh, yl, zh, zl) {
  function maj64_hi (line 75287) | function maj64_hi(xh, xl, yh, yl, zh) {
  function maj64_lo (line 75294) | function maj64_lo(xh, xl, yh, yl, zh, zl) {
  function s0_512_hi (line 75301) | function s0_512_hi(xh, xl) {
  function s0_512_lo (line 75312) | function s0_512_lo(xh, xl) {
  function s1_512_hi (line 75323) | function s1_512_hi(xh, xl) {
  function s1_512_lo (line 75334) | function s1_512_lo(xh, xl) {
  function g0_512_hi (line 75345) | function g0_512_hi(xh, xl) {
  function g0_512_lo (line 75356) | function g0_512_lo(xh, xl) {
  function g1_512_hi (line 75367) | function g1_512_hi(xh, xl) {
  function g1_512_lo (line 75378) | function g1_512_lo(xh, xl) {
  function DecoderBuffer (line 75398) | function DecoderBuffer(base, options) {
  function EncoderBuffer (line 75458) | function EncoderBuffer(value, reporter) {
  function DERDecoder (line 75550) | function DERDecoder(entity) {
  function DERNode (line 75570) | function DERNode(parent) {
  function derDecodeTag (line 75801) | function derDecodeTag(buf, fail) {
  function derDecodeLen (line 75834) | function derDecodeLen(buf, primitive, fail) {
  function DEREncoder (line 75880) | function DEREncoder(entity) {
  function DERNode (line 75897) | function DERNode(parent) {
  function two (line 76013) | function two(num) {
  function encodeTag (line 76141) | function encodeTag(tag, primitive, cls, reporter) {
  function i2ops (line 76189) | function i2ops(c) {
  function withPublic (line 76214) | function withPublic(paddedMsg, key) {
  function forEachArray (line 76739) | function forEachArray(array, iterator) {
  function isEmpty (line 76745) | function isEmpty(obj){
  function initParams (line 76752) | function initParams(uri, options, callback) {
  function createXHR (line 76768) | function createXHR(uri, options, callback) {
  function _createXHR (line 76773) | function _createXHR(options) {
  function getXml (line 76949) | function getXml(xhr) {
  function noop (line 76965) | function noop() {}
  function isFunction (line 76976) | function isFunction (fn) {
  function F (line 77209) | function F() {}
  function Url (line 77985) | function Url() {
  function urlParse (line 78053) | function urlParse(url, parseQueryString, slashesDenoteHost) {
  function urlFormat (line 78323) | function urlFormat(obj) {
  function urlResolve (line 78389) | function urlResolve(source, relative) {
  function urlResolveObject (line 78397) | function urlResolveObject(source, relative) {
  function SchemaObject (line 78697) | function SchemaObject(obj) {
  function $shouldUseGroup (line 79214) | function $shouldUseGroup($rulesGroup) {
  function $shouldUseRule (line 79220) | function $shouldUseRule($rule) {
  function $ruleImplementsSomeKeyword (line 79224) | function $ruleImplementsSomeKeyword($rule) {
  function createPromise (line 79265) | function createPromise() {
  function co (line 79279) | function co(gen) {
  function toPromise (line 79351) | function toPromise(obj) {
  function thunkToPromise (line 79369) | function thunkToPromise(fn) {
  function arrayToPromise (line 79389) | function arrayToPromise(obj) {
  function objectToPromise (line 79402) | function objectToPromise(obj){
  function isPromise (line 79433) | function isPromise(obj) {
  function isGenerator (line 79445) | function isGenerator(obj) {
  function isGeneratorFunction (line 79456) | function isGeneratorFunction(obj) {
  function isObject (line 79471) | function isObject(val) {
  function validateSingleMessage (line 79965) | function validateSingleMessage(message){
  function isPrime (line 80024) | function isPrime(n) {
  function getFractionalBits (line 80035) | function getFractionalBits(n) {
  function X64Word_create (line 80224) | function X64Word_create() {
  function ucs2decode (line 80549) | function ucs2decode(string) {
  function ucs2encode (line 80576) | function ucs2encode(array) {
  function checkScalarValue (line 80593) | function checkScalarValue(codePoint) {
  function createByte (line 80603) | function createByte(codePoint, shift) {
  function encodeCodePoint (line 80607) | function encodeCodePoint(codePoint) {
  function utf8encode (line 80629) | function utf8encode(string) {
  function readContinuationByte (line 80644) | function readContinuationByte() {
  function decodeSymbol (line 80660) | function decodeSymbol() {
  function utf8decode (line 80726) | function utf8decode(byteString) {
  function safeParseInt (line 81211) | function safeParseInt (v, base) {
  function encodeLength (line 81219) | function encodeLength (len, offset) {
  function _decode (line 81275) | function _decode (input) {
  function isHexPrefixed (line 81358) | function isHexPrefixed (str) {
  function stripHexPrefix (line 81363) | function stripHexPrefix (str) {
  function intToHex (line 81370) | function intToHex (i) {
  function padToEven (line 81379) | function padToEven (a) {
  function intToBuffer (line 81384) | function intToBuffer (i) {
  function toBuffer (line 81389) | function toBuffer (v) {
  function padToEven (line 81432) | function padToEven(value) {
  function intToHex (line 81451) | function intToHex(i) {
  function intToBuffer (line 81462) | function intToBuffer(i) {
  function getBinarySize (line 81473) | function getBinarySize(str) {
  function arrayContainsArray (line 81490) | function arrayContainsArray(superset, subset, some) {
  function toUtf8 (line 81510) | function toUtf8(hex) {
  function toAscii (line 81523) | function toAscii(hex) {
  function fromUtf8 (line 81548) | function fromUtf8(stringValue) {
  function fromAscii (line 81562) | function fromAscii(stringValue) {
  function getKeys (line 81583) | function getKeys(params, key, allowEmpty) {
  function isHexString (line 81615) | function isHexString(value, length) {
  function nacl_encodeHex (line 82444) | function nacl_encodeHex(msgUInt8Arr) {
  function nacl_decodeHex (line 82449) | function nacl_decodeHex(msgHex) {
  function addressToPublicEncKey (line 82454) | function addressToPublicEncKey (keystore, pwDerivedKey, address) {
  function _asymEncryptRaw (line 82462) | function _asymEncryptRaw (keystore, pwDerivedKey, msgUint8Array, myAddre...
  function _asymDecryptRaw (line 82483) | function _asymDecryptRaw (keystore, pwDerivedKey, encMsg, theirPubKey, m...
  function strip0x (line 82709) | function strip0x (input) {
  function add0x (line 82721) | function add0x (input) {
  function leftPadString (line 82733) | function leftPadString (stringToPad, padChar, length) {
  function nacl_encodeHex (line 82743) | function nacl_encodeHex(msgUInt8Arr) {
  function nacl_decodeHex (line 82748) | function nacl_decodeHex(msgHex) {
  function generateSalt (line 82816) | function generateSalt (byteCount) {
  function encryptString (line 82831) | function encryptString (string, pwDerivedKey) {
  function UnspentOutput (line 84658) | function UnspentOutput(data) {
  function MerkleBlock (line 84760) | function MerkleBlock(arg) {
  function HDPrivateKey (line 85095) | function HDPrivateKey(arg) {
  function HDPublicKey (line 85744) | function HDPublicKey(arg) {
  function scrypt (line 86267) | function scrypt(password, salt, logN, r, dkLen, interruptStep, callback,...
  function _interopRequireDefault (line 87176) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireDefault (line 87245) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireDefault (line 87301) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _eachOfLimit (line 87303) | function _eachOfLimit(limit) {
  function isObject (line 87413) | function isObject(value) {
  function isLength (line 87454) | function isLength(value) {
  function doLimit (line 87520) | function doLimit(fn, limit) {
  function _interopRequireDefault (line 87575) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function eachOfArrayLike (line 87578) | function eachOfArrayLike(coll, iteratee, callback) {
  function cacheIdentifierForPayload (line 87659) | function cacheIdentifierForPayload(payload, opts = {}){
  function canCache (line 87666) | function canCache(payload){
  function blockTagForPayload (line 87670) | function blockTagForPayload(payload){
  function paramsWithoutBlockTag (line 87681) | function paramsWithoutBlockTag(payload){
  function blockTagParamIndex (line 87697) | function blockTagParamIndex(payload){
  function cacheTypeForPayload (line 87718) | function cacheTypeForPayload(payload) {
  function extend (line 87806) | function extend() {
  function Backoff (line 87836) | function Backoff(backoffStrategy) {
  function isDef (line 87904) | function isDef(value) {
  function BackoffStrategy (line 87916) | function BackoffStrategy(options) {
  function FibonacciBackoffStrategy (line 87992) | function FibonacciBackoffStrategy(options) {
  function toArray (line 88023) | function toArray(msg, enc) {
  function zero2 (line 88055) | function zero2(word) {
  function toHex (line 88063) | function toHex(msg) {
  function ft_1 (line 88089) | function ft_1(s, x, y, z) {
  function ch32 (line 88099) | function ch32(x, y, z) {
  function maj32 (line 88104) | function maj32(x, y, z) {
  function p32 (line 88109) | function p32(x, y, z) {
  function s0_256 (line 88114) | function s0_256(x) {
  function s1_256 (line 88119) | function s1_256(x) {
  function g0_256 (line 88124) | function g0_256(x) {
  function g1_256 (line 88129) | function g1_256(x) {
  function SHA256 (line 88178) | function SHA256() {
  function SHA512 (line 88315) | function SHA512() {
  function ch64_hi (line 88467) | function ch64_hi(xh, xl, yh, yl, zh) {
  function ch64_lo (line 88474) | function ch64_lo(xh, xl, yh, yl, zh, zl) {
  function maj64_hi (line 88481) | function maj64_hi(xh, xl, yh, yl, zh) {
  function maj64_lo (line 88488) | function maj64_lo(xh, xl, yh, yl, zh, zl) {
  function s0_512_hi (line 88495) | function s0_512_hi(xh, xl) {
  function s0_512_lo (line 88506) | function s0_512_lo(xh, xl) {
  function s1_512_hi (line 88517) | function s1_512_hi(xh, xl) {
  function s1_512_lo (line 88528) | function s1_512_lo(xh, xl) {
  function g0_512_hi (line 88539) | function g0_512_hi(xh, xl) {
  function g0_512_lo (line 88550) | function g0_512_lo(xh, xl) {
  function g1_512_hi (line 88561) | function g1_512_hi(xh, xl) {
  function g1_512_lo (line 88572) | function g1_512_lo(xh, xl) {
  function defineProperties (line 88601) | function defineProperties(target,props){for(var i=0;i<props.length;i++){...
  function _classCallCheck (line 88601) | function _classCallCheck(instance,Constructor){if(!(instance instanceof ...
  function _possibleConstructorReturn (line 88601) | function _possibleConstructorReturn(self,call){if(!self){throw new Refer...
  function _inherits (line 88601) | function _inherits(subClass,superClass){if(typeof superClass!=="function...
  function DropDownMenu (line 88601) | function DropDownMenu(props){_classCallCheck(this,DropDownMenu);var _thi...
  function disable (line 88646) | function disable() {
  function enable (line 88653) | function enable(options) {
  function logError (line 88734) | function logError(id, error) {
  function matchWhitelist (line 88742) | function matchWhitelist(error, list) {
  function rawAsap (line 88766) | function rawAsap(task) {
  function flush (line 88798) | function flush() {
  function makeRequestCallFromMutationObserver (line 88892) | function makeRequestCallFromMutationObserver(callback) {
  function makeRequestCallFromTimer (line 88943) | function makeRequestCallFromTimer(callback) {
  function valuePromise (line 89001) | function valuePromise(value) {
  function res (line 89038) | function res(i, val) {
  function normalizeName (line 89141) | function normalizeName(name) {
  function normalizeValue (line 89151) | function normalizeValue(value) {
  function iteratorFor (line 89159) | function iteratorFor(items) {
  function Headers (line 89176) | function Headers(headers) {
  function consumed (line 89248) | function consumed(body) {
  function fileReaderReady (line 89255) | function fileReaderReady(reader) {
  function readBlobAsArrayBuffer (line 89266) | function readBlobAsArrayBuffer(blob) {
  function readBlobAsText (line 89273) | function readBlobAsText(blob) {
  function readArrayBufferAsText (line 89280) | function readArrayBufferAsText(buf) {
  function bufferClone (line 89290) | function bufferClone(buf) {
  function Body (line 89300) | function Body() {
  function normalizeMethod (line 89396) | function normalizeMethod(method) {
  function Request (line 89401) | function Request(input, options) {
  function decode (line 89442) | function decode(body) {
  function parseHeaders (line 89455) | function parseHeaders(rawHeaders) {
  function Response (line 89470) | function Response(bodyInit, options) {
  function defineProperties (line 89578) | function defineProperties(target,props){for(var i=0;i<props.length;i++){...
  function _classCallCheck (line 89578) | function _classCallCheck(instance,Constructor){if(!(instance instanceof ...
  function _possibleConstructorReturn (line 89578) | function _possibleConstructorReturn(self,call){if(!self){throw new Refer...
  function _inherits (line 89578) | function _inherits(subClass,superClass){if(typeof superClass!=="function...
  function InitialLoad (line 89578) | function InitialLoad(){_classCallCheck(this,InitialLoad);var _this=_poss...
  function C (line 89597) | function C(a){for(var b=arguments.length-1,e="http://reactjs.org/docs/er...
  function E (line 89598) | function E(a,b,e){this.props=a;this.context=b;this.refs=p;this.updater=e...
  function F (line 89598) | function F(){}
  function G (line 89598) | function G(a,b,e){this.props=a;this.context=b;this.refs=p;this.updater=e...
  function L (line 89600) | function L(a,b,e){var c=void 0,d={},g=null,h=null;if(null!=b)for(c in vo...
  function M (line 89601) | function M(a){return"object"===typeof a&&null!==a&&a.$$typeof===t}
  function escape (line 89601) | function escape(a){var b={"\x3d":"\x3d0",":":"\x3d2"};return"$"+(""+a).r...
  function P (line 89601) | function P(a,b,e,c){if(O.length){var d=O.pop();d.result=a;d.keyPrefix=b;...
  function Q (line 89601) | function Q(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;...
  function R (line 89602) | function R(a,b,e,c){var d=typeof a;if("undefined"===d||"boolean"===d)a=n...
  function S (line 89603) | function S(a,b){return"object"===typeof a&&null!==a&&null!=a.key?escape(...
  function T (line 89603) | function T(a,b){a.func.call(a.context,b,a.count++)}
  function U (line 89604) | function U(a,b,e){var c=a.result,d=a.keyPrefix;a=a.func.call(a.context,b...
  function V (line 89604) | function V(a,b,e,c,d){var g="";null!=e&&(g=(""+e).replace(N,"$\x26/")+"/...
  function defineProperties (line 89619) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _classCallCheck (line 89621) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 89623) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 89625) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function PersistGate (line 89634) | function PersistGate() {
  function checkDCE (line 89706) | function checkDCE() {
  function D (line 89762) | function D(a){for(var b=arguments.length-1,c="http://reactjs.org/docs/er...
  function ma (line 89763) | function ma(a,b,c,d,e,f,h,g,k){this._hasCaughtError=!1;this._caughtError...
  function na (line 89765) | function na(){if(E._hasRethrowError){var a=E._rethrowError;E._rethrowErr...
  function qa (line 89766) | function qa(){if(oa)for(var a in pa){var b=pa[a],c=oa.indexOf(a);-1<c?vo...
  function ta (line 89767) | function ta(a,b,c){ua[a]?D("100",a):void 0;ua[a]=b;va[a]=b.eventTypes[c]...
  function wa (line 89767) | function wa(a){oa?D("101"):void 0;oa=Array.prototype.slice.call(a);qa()}
  function xa (line 89767) | function xa(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];...
  function Ga (line 89768) | function Ga(a,b,c,d){b=a.type||"unknown-event";a.currentTarget=Fa(d);E.i...
  function Ha (line 89769) | function Ha(a,b){null==b?D("30"):void 0;if(null==a)return b;if(Array.isA...
  function Ia (line 89769) | function Ia(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}
  function Ka (line 89770) | function Ka(a,b){if(a){var c=a._dispatchListeners,d=a._dispatchInstances...
  function La (line 89770) | function La(a){return Ka(a,!0)}
  function Ma (line 89770) | function Ma(a){return Ka(a,!1)}
  function Oa (line 89771) | function Oa(a,b){var c=a.stateNode;if(!c)return null;var d=Da(c);if(!d)r...
  function Pa (line 89772) | function Pa(a,b){null!==a&&(Ja=Ha(Ja,a));a=Ja;Ja=null;a&&(b?Ia(a,La):Ia(...
  function Qa (line 89772) | function Qa(a,b,c,d){for(var e=null,f=0;f<ra.length;f++){var h=ra[f];h&&...
  function Ua (line 89773) | function Ua(a){if(a[F])return a[F];for(;!a[F];)if(a.parentNode)a=a.paren...
  function Va (line 89773) | function Va(a){if(5===a.tag||6===a.tag)return a.stateNode;D("33")}
  function Xa (line 89773) | function Xa(a){return a[Ta]||null}
  function L (line 89774) | function L(a){do a=a["return"];while(a&&5!==a.tag);return a?a:null}
  function cb (line 89774) | function cb(a,b,c){for(var d=[];a;)d.push(a),a=L(a);for(a=d.length;0<a--...
  function db (line 89774) | function db(a,b,c){if(b=Oa(a,c.dispatchConfig.phasedRegistrationNames[b]...
  function eb (line 89774) | function eb(a){a&&a.dispatchConfig.phasedRegistrationNames&&cb(a._target...
  function fb (line 89775) | function fb(a){if(a&&a.dispatchConfig.phasedRegistrationNames){var b=a._...
  function gb (line 89775) | function gb(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Oa(a,c.di...
  function hb (line 89775) | function hb(a){a&&a.dispatchConfig.registrationName&&gb(a._targetInst,nu...
  function ib (line 89775) | function ib(a){Ia(a,eb)}
  function jb (line 89776) | function jb(a,b,c,d){if(c&&d)a:{var e=c;for(var f=d,h=0,g=e;g;g=L(g))h++...
  function mb (line 89777) | function mb(){!lb&&m.canUseDOM&&(lb="textContent"in document.documentEle...
  function nb (line 89778) | function nb(){if(M._fallbackText)return M._fallbackText;var a,b=M._start...
  function ob (line 89778) | function ob(){return"value"in M._root?M._root.value:M._root[mb()]}
  function N (line 89780) | function N(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.native...
  function b (line 89782) | function b(){}
  function c (line 89782) | function c(){return d.apply(this,arguments)}
  function sb (line 89783) | function sb(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop(...
  function tb (line 89783) | function tb(a){a instanceof this?void 0:D("223");a.destructor();10>this....
  function rb (line 89783) | function rb(a){a.eventPool=[];a.getPooled=sb;a.release=tb}
  function Mb (line 89786) | function Mb(a,b){switch(a){case "topKeyUp":return-1!==wb.indexOf(b.keyCo...
  function Nb (line 89786) | function Nb(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:n...
  function Pb (line 89786) | function Pb(a,b){switch(a){case "topCompositionEnd":return Nb(b);case "t...
  function Qb (line 89787) | function Qb(a,b){if(Ob)return"topCompositionEnd"===a||!xb&&Mb(a,b)?(a=nb...
  function Wb (line 89789) | function Wb(a){if(a=Ea(a)){Sb&&"function"===typeof Sb.restoreControlledS...
  function Xb (line 89789) | function Xb(a){Ub?Vb?Vb.push(a):Vb=[a]:Ub=a}
  function Yb (line 89790) | function Yb(){return null!==Ub||null!==Vb}
  function Zb (line 89790) | function Zb(){if(Ub){var a=Ub,b=Vb;Vb=Ub=null;Wb(a);if(b)for(a=0;a<b.len...
  function ac (line 89790) | function ac(a,b){return a(b)}
  function bc (line 89790) | function bc(a,b,c){return a(b,c)}
  function cc (line 89790) | function cc(){}
  function ec (line 89790) | function ec(a,b){if(dc)return a(b);dc=!0;try{return ac(a,b)}finally{dc=!...
  function gc (line 89791) | function gc(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return"inpu...
  function hc (line 89791) | function hc(a){a=a.target||window;a.correspondingUseElement&&(a=a.corres...
  function ic (line 89792) | function ic(a,b){if(!m.canUseDOM||b&&!("addEventListener"in document))re...
  function jc (line 89792) | function jc(a){var b=a.type;return(a=a.nodeName)&&"input"===a.toLowerCas...
  function kc (line 89793) | function kc(a){var b=jc(a)?"checked":"value",c=Object.getOwnPropertyDesc...
  function lc (line 89794) | function lc(a){a._valueTracker||(a._valueTracker=kc(a))}
  function mc (line 89794) | function mc(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c...
  function zc (line 89796) | function zc(a){if(null===a||"undefined"===typeof a)return null;a=yc&&a[y...
  function Ac (line 89797) | function Ac(a){a=a.type;if("function"===typeof a)return a.displayName||a...
  function Bc (line 89798) | function Bc(a){var b="";do{a:switch(a.tag){case 0:case 1:case 2:case 5:v...
  function Fc (line 89799) | function Fc(a){if(Ec.hasOwnProperty(a))return!0;if(Dc.hasOwnProperty(a))...
  function Gc (line 89800) | function Gc(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){c...
  function Hc (line 89800) | function Hc(a,b,c,d){if(null===b||"undefined"===typeof b||Gc(a,b,c,d))re...
  function U (line 89801) | function U(a,b,c,d,e){this.acceptsBooleans=2===b||3===b||4===b;this.attr...
  function Tc (line 89804) | function Tc(a){return a[1].toUpperCase()}
  function Uc (line 89807) | function Uc(a,b,c,d){var e=V.hasOwnProperty(b)?V[b]:null;var f=null!==e?...
  function Vc (line 89808) | function Vc(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,de...
  function Wc (line 89808) | function Wc(a,b){var c=null==b.defaultValue?"":b.defaultValue,d=null!=b....
  function Yc (line 89808) | function Yc(a,b){b=b.checked;null!=b&&Uc(a,"checked",b,!1)}
  function Zc (line 89809) | function Zc(a,b){Yc(a,b);var c=Xc(b.value);if(null!=c)if("number"===b.ty...
  function ad (line 89810) | function ad(a,b){if(b.hasOwnProperty("value")||b.hasOwnProperty("default...
  function $c (line 89810) | function $c(a,b,c){if("number"!==b||a.ownerDocument.activeElement!==a)nu...
  function Xc (line 89811) | function Xc(a){switch(typeof a){case "boolean":case "number":case "objec...
  function cd (line 89811) | function cd(a,b,c){a=N.getPooled(bd.change,a,b,c);a.type="change";Xb(c);...
  function fd (line 89811) | function fd(a){Pa(a,!1)}
  function gd (line 89812) | function gd(a){var b=Va(a);if(mc(b))return a}
  function hd (line 89812) | function hd(a,b){if("topChange"===a)return b}
  function jd (line 89812) | function jd(){dd&&(dd.detachEvent("onpropertychange",kd),ed=dd=null)}
  function kd (line 89812) | function kd(a){"value"===a.propertyName&&gd(ed)&&(a=cd(ed,a,hc(a)),ec(fd...
  function ld (line 89812) | function ld(a,b,c){"topFocus"===a?(jd(),dd=b,ed=c,dd.attachEvent("onprop...
  function md (line 89813) | function md(a){if("topSelectionChange"===a||"topKeyUp"===a||"topKeyDown"...
  function nd (line 89813) | function nd(a,b){if("topClick"===a)return gd(b)}
  function od (line 89813) | function od(a,b){if("topInput"===a||"topChange"===a)return gd(b)}
  function sd (line 89815) | function sd(a){var b=this.nativeEvent;return b.getModifierState?b.getMod...
  function td (line 89815) | function td(){return sd}
  function xd (line 89818) | function xd(a){var b=a;if(a.alternate)for(;b["return"];)b=b["return"];el...
  function yd (line 89818) | function yd(a){return(a=a._reactInternalFiber)?2===xd(a):!1}
  function zd (line 89818) | function zd(a){2!==xd(a)?D("188"):void 0}
  function Ad (line 89819) | function Ad(a){var b=a.alternate;if(!b)return b=xd(a),3===b?D("188"):voi...
  function Bd (line 89820) | function Bd(a){a=Ad(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6=...
  function Cd (line 89821) | function Cd(a){a=Ad(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6=...
  function Gd (line 89822) | function Gd(a){var b=a.keyCode;"charCode"in a?(a=a.charCode,0===a&&13===...
  function Qd (line 89826) | function Qd(a,b){var c=a[0].toUpperCase()+a.slice(1),d="on"+c;c="top"+c;...
  function Ud (line 89831) | function Ud(a){var b=a.targetInst;do{if(!b){a.ancestors.push(b);break}va...
  function Wd (line 89831) | function Wd(a){Vd=!!a}
  function W (line 89832) | function W(a,b,c){if(!c)return null;a=(Sd(a)?Xd:Yd).bind(null,a);c.addEv...
  function Zd (line 89832) | function Zd(a,b,c){if(!c)return null;a=(Sd(a)?Xd:Yd).bind(null,a);c.addE...
  function Xd (line 89832) | function Xd(a,b){bc(Yd,a,b)}
  function Yd (line 89833) | function Yd(a,b){if(Vd){var c=hc(b);c=Ua(c);null!==c&&"number"===typeof ...
  method _enabled (line 89834) | get _enabled(){return Vd}
  function ae (line 89834) | function ae(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c["Webkit"+...
  function ee (line 89836) | function ee(a){if(ce[a])return ce[a];if(!be[a])return a;var b=be[a],c;fo...
  function ke (line 89840) | function ke(a){Object.prototype.hasOwnProperty.call(a,je)||(a[je]=ie++,h...
  function le (line 89840) | function le(a){for(;a&&a.firstChild;)a=a.firstChild;return a}
  function me (line 89841) | function me(a,b){var c=le(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c....
  function ne (line 89841) | function ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(...
  function ue (line 89843) | function ue(a,b){if(te||null==qe||qe!==fa())return null;var c=qe;"select...
  function xe (line 89846) | function xe(a,b,c,d){this.tag=a;this.key=c;this.stateNode=this.type=null...
  function ze (line 89847) | function ze(a,b,c){var d=a.alternate;null===d?(d=new xe(a.tag,b,a.key,a....
  function Ae (line 89848) | function Ae(a,b,c){var d=a.type,e=a.key;a=a.props;var f=void 0;if("funct...
  function Be (line 89849) | function Be(a,b,c,d){a=new xe(10,a,d,b);a.expirationTime=c;return a}
  function Ce (line 89849) | function Ce(a,b,c){a=new xe(6,a,null,b);a.expirationTime=c;return a}
  function De (line 89849) | function De(a,b,c){b=new xe(4,null!==a.children?a.children:[],a.key,b);b...
  function Ge (line 89850) | function Ge(a){return function(b){try{return a(b)}catch(c){}}}
  function He (line 89850) | function He(a){if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)re...
  function Ie (line 89850) | function Ie(a){"function"===typeof Ee&&Ee(a)}
  function Je (line 89850) | function Je(a){"function"===typeof Fe&&Fe(a)}
  function Ke (line 89851) | function Ke(a){return{baseState:a,expirationTime:0,first:null,last:null,...
  function Le (line 89851) | function Le(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b)...
  function Oe (line 89852) | function Oe(a){Me=Ne=null;var b=a.alternate,c=a.updateQueue;null===c&&(c...
  function Pe (line 89852) | function Pe(a,b){Oe(a);a=Me;var c=Ne;null===c?Le(a,b):null===a.last||nul...
  function Qe (line 89852) | function Qe(a,b,c,d){a=a.partialState;return"function"===typeof a?a.call...
  function Re (line 89853) | function Re(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={...
  function Se (line 89855) | function Se(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=nul...
  function Te (line 89856) | function Te(a,b,c,d,e){function f(a,b,c,d,e,f){if(null===b||null!==a.upd...
  function Ve (line 89867) | function Ve(a,b,c){a=c.ref;if(null!==a&&"function"!==typeof a&&"object"!...
  function We (line 89868) | function We(a,b){"textarea"!==a.type&&D("31","[object Object]"===Object....
  function Xe (line 89869) | function Xe(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.next...
  function $e (line 89879) | function $e(a,b,c,d,e,f,h){function g(a,b,c){k(a,b,c,b.expirationTime)}f...
  function af (line 89891) | function af(a,b,c,d,e){function f(a){a.effectTag|=4}var h=a.createInstan...
  function bf (line 89897) | function bf(a,b,c,d,e){var f=a.popHostContainer,h=a.popHostContext,g=b.p...
  function cf (line 89899) | function cf(a,b){var c=b.source;null===b.stack&&Bc(c);null!==c&&Ac(c);b=...
  function df (line 89900) | function df(a,b,c,d,e){function f(a){var c=a.ref;if(null!==c)if("functio...
  function ff (line 89910) | function ff(a,b){function c(a){a===ef?D("174"):void 0;return a}var d=a.g...
  function gf (line 89912) | function gf(a){function b(a,b){var c=new xe(5,null,null,0);c.type="DELET...
  function hf (line 89916) | function hf(a){function b(a,b,c){a=a.stateNode;a.__reactInternalMemoized...
  function jf (line 89920) | function jf(a){var b=a.createCursor,c=a.push,d=a.pop,e=b(null),f=b(null)...
  function kf (line 89921) | function kf(){var a=[],b=-1;return{createCursor:function(a){return{curre...
  function lf (line 89922) | function lf(a){function b(){if(null!==I)for(var a=I["return"];null!==a;)...
  function mf (line 89938) | function mf(a){function b(a,b,c,d,e,h){d=b.current;if(c){c=c._reactInter...
  function qf (line 89942) | function qf(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?argum...
  function Ff (line 89945) | function Ff(a){var b="";ea.Children.forEach(a,function(a){null==a||"stri...
  function Gf (line 89945) | function Gf(a,b){a=A({children:void 0},b);if(b=Ff(b.children))a.children...
  function Hf (line 89946) | function Hf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b...
  function If (line 89947) | function If(a,b){var c=b.value;a._wrapperState={initialValue:null!=c?c:b...
  function Jf (line 89947) | function Jf(a,b){null!=b.dangerouslySetInnerHTML?D("91"):void 0;return A...
  function Kf (line 89947) | function Kf(a,b){var c=b.value;null==c&&(c=b.defaultValue,b=b.children,n...
  function Lf (line 89948) | function Lf(a,b){var c=b.value;null!=c&&(c=""+c,c!==a.value&&(a.value=c)...
  function Mf (line 89948) | function Mf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a....
  function Of (line 89949) | function Of(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";c...
  function Pf (line 89949) | function Pf(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?Of(b...
  function Sf (line 89951) | function Sf(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.n...
  function Vf (line 89954) | function Vf(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=...
  function Xf (line 89955) | function Xf(a,b,c){b&&(Wf[a]&&(null!=b.children||null!=b.dangerouslySetI...
  function Yf (line 89956) | function Yf(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;swi...
  function $f (line 89957) | function $f(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var...
  function ag (line 89958) | function ag(a,b,c,d){c=9===c.nodeType?c:c.ownerDocument;d===Nf.html&&(d=...
  function bg (line 89958) | function bg(a,b){return(9===b.nodeType?b:b.ownerDocument).createTextNode...
  function cg (line 89959) | function cg(a,b,c,d){var e=Yf(b,c);switch(b){case "iframe":case "object"...
  function dg (line 89962) | function dg(a,b,c,d,e){var f=null;switch(b){case "input":c=Vc(a,c);d=Vc(...
  function eg (line 89965) | function eg(a,b,c,d,e){"input"===c&&"radio"===e.type&&null!=e.name&&Yc(a...
  function fg (line 89967) | function fg(a,b,c,d,e){switch(b){case "iframe":case "object":W("topLoad"...
  function ng (line 89969) | function ng(a,b){return a.nodeValue!==b}
  function rg (line 89972) | function rg(a){this._expirationTime=X.computeUniqueAsyncExpiration();thi...
  function sg (line 89975) | function sg(){this._callbacks=null;this._didCommit=!1;this._onCommit=thi...
  function tg (line 89976) | function tg(a,b,c){this._internalRoot=X.createContainer(a,b,c)}
  function ug (line 89978) | function ug(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeTy...
  function vg (line 89979) | function vg(a,b){switch(a){case "button":case "input":case "select":case...
  function Dg (line 89989) | function Dg(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:n...
  function Eg (line 89990) | function Eg(a,b,c,d,e){ug(c)?void 0:D("200");var f=c._reactRootContainer...
  function Fg (line 89991) | function Fg(a,b){var c=2<arguments.length&&void 0!==arguments[2]?argumen...
  function getActiveElement (line 90064) | function getActiveElement(doc) /*?DOMElement*/{
  function is (line 90103) | function is(x, y) {
  function shallowEqual (line 90121) | function shallowEqual(objA, objB) {
  function containsNode (line 90172) | function containsNode(outerNode, innerNode) {
  function isTextNode (line 90214) | function isTextNode(object) {
  function isNode (line 90240) | function isNode(object) {
  function _classCallCheck (line 90260) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 90262) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 90264) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function warnAboutReceivingStore (line 90272) | function warnAboutReceivingStore() {
  function createProvider (line 90281) | function createProvider() {
  function shim (line 90352) | function shim(props, propName, componentName, location, propFullName, se...
  function getShim (line 90365) | function getShim() {
  function _classCallCheck (line 90423) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function createListenerCollection (line 90434) | function createListenerCollection() {
  function Subscription (line 90471) | function Subscription(store, parentSub, onStateChange) {
  function _objectWithoutProperties (line 90530) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function match (line 90556) | function match(arg, factories, name) {
  function strictEqual (line 90567) | function strictEqual(a, b) {
  function createConnect (line 90573) | function createConnect() {
  function is (line 90640) | function is(x, y) {
  function shallowEqual (line 90648) | function shallowEqual(objA, objB) {
  function whenMapDispatchToPropsIsFunction (line 90682) | function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {
  function whenMapDispatchToPropsIsMissing (line 90686) | function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {
  function whenMapDispatchToPropsIsObject (line 90692) | function whenMapDispatchToPropsIsObject(mapDispatchToProps) {
  function baseGetTag (line 90726) | function baseGetTag(value) {
  function getRawTag (line 90798) | function getRawTag(value) {
  function objectToString (line 90843) | function objectToString(value) {
  function overArg (line 90877) | function overArg(func, transform) {
  function isObjectLike (line 90915) | function isObjectLike(value) {
  function symbolObservablePonyfill (line 90986) | function symbolObservablePonyfill(root) {
  function getUndefinedStateErrorMessage (line 91018) | function getUndefinedStateErrorMessage(key, action) {
  function getUnexpectedStateShapeWarningMessage (line 91025) | function getUnexpectedStateShapeWarningMessage(inputState, reducers, act...
  function assertReducerShape (line 91050) | function assertReducerShape(reducers) {
  function combineReducers (line 91082) | function combineReducers(reducers) {
  function bindActionCreator (line 91151) | function bindActionCreator(actionCreator, dispatch) {
  function bindActionCreators (line 91178) | function bindActionCreators(actionCreators, dispatch) {
  function applyMiddleware (line 91226) | function applyMiddleware() {
  function whenMapStateToPropsIsFunction (line 91265) | function whenMapStateToPropsIsFunction(mapStateToProps) {
  function whenMapStateToPropsIsMissing (line 91269) | function whenMapStateToPropsIsMissing(mapStateToProps) {
  function defaultMergeProps (line 91291) | function defaultMergeProps(stateProps, dispatchProps, ownProps) {
  function wrapMergePropsFunc (line 91295) | function wrapMergePropsFunc(mergeProps) {
  function whenMergePropsIsFunction (line 91321) | function whenMergePropsIsFunction(mergeProps) {
  function whenMergePropsIsOmitted (line 91325) | function whenMergePropsIsOmitted(mergeProps) {
  function _objectWithoutProperties (line 91342) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function impureFinalPropsSelectorFactory (line 91346) | function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToP...
  function pureFinalPropsSelectorFactory (line 91352) | function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToPro...
  function finalPropsSelectorFactory (line 91426) | function finalPropsSelectorFactory(dispatch, _ref2) {
  function verify (line 91454) | function verify(selector, methodName, displayName) {
  function verifySubselectors (line 91464) | function verifySubselectors(mapStateToProps, mapDispatchToProps, mergePr...
  function _classCallCheck (line 91484) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 91486) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 91488) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function BrowserRouter (line 91503) | function BrowserRouter() {
  function _interopRequireDefault (line 91568) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 91864) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 91866) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 91868) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function HashRouter (line 91883) | function HashRouter() {
  function _interopRequireDefault (line 91945) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 92271) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 92273) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 92275) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function MemoryRouter (line 92290) | function MemoryRouter() {
  function _interopRequireDefault (line 92349) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _objectWithoutProperties (line 92515) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function parse (line 92621) | function parse (str, options) {
  function compile (line 92694) | function compile (str, options) {
  function encodeURIComponentPretty (line 92704) | function encodeURIComponentPretty (str) {
  function encodeAsterisk (line 92716) | function encodeAsterisk (str) {
  function tokensToFunction (line 92725) | function tokensToFunction (tokens) {
  function escapeString (line 92812) | function escapeString (str) {
  function escapeGroup (line 92822) | function escapeGroup (group) {
  function attachKeys (line 92833) | function attachKeys (re, keys) {
  function flags (line 92844) | function flags (options) {
  function regexpToRegexp (line 92855) | function regexpToRegexp (path, keys) {
  function arrayToRegexp (line 92885) | function arrayToRegexp (path, keys, options) {
  function stringToRegexp (line 92905) | function stringToRegexp (path, keys, options) {
  function tokensToRegExp (line 92917) | function tokensToRegExp (tokens, keys, options) {
  function pathToRegexp (line 92993) | function pathToRegexp (path, keys, options) {
  function _classCallCheck (line 93044) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 93046) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 93048) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Prompt (line 93062) | function Prompt() {
  function _classCallCheck (line 93149) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 93151) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 93153) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Redirect (line 93169) | function Redirect() {
  function _objectWithoutProperties (line 94092) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function _classCallCheck (line 94094) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 94096) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 94098) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function StaticRouter (line 94169) | function StaticRouter() {
  function _classCallCheck (line 94282) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 94284) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 94286) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Switch (line 94301) | function Switch() {
  function _objectWithoutProperties (line 94398) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
  function createWebStorage (line 94448) | function createWebStorage(type) {
  function noop (line 94477) | function noop() {}
  function hasStorage (line 94485) | function hasStorage(storageType) {
  function getStorage (line 94503) | function getStorage(type) {
  function autoMergeLevel1 (line 94557) | function autoMergeLevel1(inboundState, originalState, reducedState, _ref) {
  function persistCombineReducers (line 94601) | function persistCombineReducers(config, reducers) {
  function autoMergeLevel2 (line 94616) | function autoMergeLevel2(inboundState, originalState, reducedState, _ref) {
  function isPlainEnoughObject (line 94652) | function isPlainEnoughObject(o) {
  function _toConsumableArray (line 94667) | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i ...
  function persistStore (line 94696) | function persistStore(store, options, cb) {
  function createMigrate (line 94775) | function createMigrate(migrations, config) {
  function createTransform (line 94824) | function createTransform(
  function homeReducer (line 94857) | function homeReducer(state,action){if(state===undefined){return{};}switc...
  function patientReducer (line 94866) | function patientReducer(state,action){if(state===undefined){return{};}sw...
  function defineProperties (line 94882) | function defineProperties(target,props){for(var i=0;i<props.length;i++){...
  function _classCallCheck (line 94882) | function _classCallCheck(instance,Constructor){if(!(instance instanceof ...
  function _possibleConstructorReturn (line 94882) | function _possibleConstructorReturn(self,call){if(!self){throw new Refer...
  function _inherits (line 94882) | function _inherits(subClass,superClass){if(typeof superClass!=="function...
  function Patient (line 94882) | function Patient(props){_classCallCheck(this,Patient);var _this=_possibl...
  function setImmediate (line 94901) | function setImmediate(callback) {
  function clearImmediate (line 94918) | function clearImmediate(handle) {
  function run (line 94922) | function run(task) {
  function runIfPresent (line 94944) | function runIfPresent(handle) {
  function installNextTickImplementation (line 94965) | function installNextTickImplementation() {
  function canUsePostMessage (line 94971) | function canUsePostMessage() {
  function installPostMessageImplementation (line 94986) | function installPostMessageImplementation() {
  function installMessageChannelImplementation (line 95011) | function installMessageChannelImplementation() {
  function installReadyStateChangeImplementation (line 95023) | function installReadyStateChangeImplementation() {
  function installSetTimeoutImplementation (line 95039) | function installSetTimeoutImplementation() {
  function placeHoldersCount (line 95103) | function placeHoldersCount (b64) {
  function byteLength (line 95117) | function byteLength (b64) {
  function toByteArray (line 95122) | function toByteArray (b64) {
  function tripletToBase64 (line 95153) | function tripletToBase64 (num) {
  function encodeChunk (line 95157) | function encodeChunk (uint8, start, end) {
  function fromByteArray (line 95167) | function fromByteArray (uint8) {
  function getValueOfUnit (line 96190) | function getValueOfUnit(unitInput) {
  function numberToString (line 96201) | function numberToString(arg) {
  function fromWei (line 96220) | function fromWei(weiInput, unit, optionsInput) {
  function toWei (line 96256) | function toWei(etherInput, unit) {
  function assert (line 96321) | function assert (val, msg) {
  function inherits (line 96327) | function inherits (ctor, superCtor) {
  function BN (line 96337) | function BN (number, base, endian) {
  function parseHex (line 96502) | function parseHex (str, start, end) {
  function parseBase (line 96556) | function parseBase (str, start, end, mul) {
  function toBitArray (line 96943) | function toBitArray (num) {
  function smallMulTo (line 97308) | function smallMulTo (self, num, out) {
  function bigMulTo (line 97930) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 97971) | function jumboMulTo (self, num, out) {
  function FFTM (line 97995) | function FFTM (x, y) {
  function MPrime (line 99255) | function MPrime (name, p) {
  function K256 (line 99305) | function K256 () {
  function P224 (line 99372) | function P224 () {
  function P192 (line 99380) | function P192 () {
  function P25519 (line 99388) | function P25519 () {
  function Red (line 99439) | function Red (m) {
  function Mont (line 99673) | function Mont (m) {
  function assert (line 99755) | function assert (val, msg) {
  function inherits (line 99761) | function inherits (ctor, superCtor) {
  function BN (line 99771) | function BN (number, base, endian) {
  function parseHex (line 99936) | function parseHex (str, start, end) {
  function parseBase (line 99990) | function parseBase (str, start, end, mul) {
  function toBitArray (line 100377) | function toBitArray (num) {
  function smallMulTo (line 100742) | function smallMulTo (self, num, out) {
  function bigMulTo (line 101364) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 101405) | function jumboMulTo (self, num, out) {
  function FFTM (line 101429) | function FFTM (x, y) {
  function MPrime (line 102689) | function MPrime (name, p) {
  function K256 (line 102739) | function K256 () {
  function P224 (line 102806) | function P224 () {
  function P192 (line 102814) | function P192 () {
  function P25519 (line 102822) | function P25519 () {
  function Red (line 102873) | function Red (m) {
  function Mont (line 103107) | function Mont (m) {
  function ucs2decode (line 103207) | function ucs2decode(string) {
  function ucs2encode (line 103234) | function ucs2encode(array) {
  function checkScalarValue (line 103251) | function checkScalarValue(codePoint) {
  function createByte (line 103261) | function createByte(codePoint, shift) {
  function encodeCodePoint (line 103265) | function encodeCodePoint(codePoint) {
  function utf8encode (line 103287) | function utf8encode(string) {
  function readContinuationByte (line 103302) | function readContinuationByte() {
  function decodeSymbol (line 103318) | function decodeSymbol() {
  function utf8decode (line 103384) | function utf8decode(byteString) {
  function assert (line 103772) | function assert (val, msg) {
  function inherits (line 103778) | function inherits (ctor, superCtor) {
  function BN (line 103788) | function BN (number, base, endian) {
  function parseHex (line 103953) | function parseHex (str, start, end) {
  function parseBase (line 104007) | function parseBase (str, start, end, mul) {
  function toBitArray (line 104394) | function toBitArray (num) {
  function smallMulTo (line 104759) | function smallMulTo (self, num, out) {
  function bigMulTo (line 105381) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 105422) | function jumboMulTo (self, num, out) {
  function FFTM (line 105446) | function FFTM (x, y) {
  function MPrime (line 106706) | function MPrime (name, p) {
  function K256 (line 106756) | function K256 () {
  function P224 (line 106823) | function P224 () {
  function P192 (line 106831) | function P192 () {
  function P25519 (line 106839) | function P25519 () {
  function Red (line 106890) | function Red (m) {
  function Mont (line 107124) | function Mont (m) {
  function W3CWebSocket (line 107719) | function W3CWebSocket(uri, protocols) {
  function next (line 108269) | function next(params, curFn) {
  function compose2 (line 108284) | function compose2(f1, f2){
  function attr (line 108303) | function attr(key) {
  function apply (line 108353) | function apply(args, fn) {
  function varArgs (line 108379) | function varArgs(fn){
  function flip (line 108426) | function flip(fn){
  function lazyIntersection (line 108439) | function lazyIntersection(fn1, fn2) {
  function noop (line 108450) | function noop(){}
  function always (line 108455) | function always(){return true}
  function functor (line 108467) | function functor(val){
  function isOfType (line 108482) | function isOfType(T, maybeSomething){
  function defined (line 108500) | function defined( value ) {
  function hasAllProperties (line 108509) | function hasAllProperties(fieldList, o) {
  function cons (line 108520) | function cons(x, xs) {
  function arrayAsList (line 108566) | function arrayAsList(inputArray){
  function listAsArray (line 108591) | function listAsArray(list){
  function map (line 108605) | function map(fn, list) {
  function foldR (line 108618) | function foldR(fn, startValue, list) {
  function foldR1 (line 108631) | function foldR1(fn, list) {
  function without (line 108644) | function without(list, test, removedFn) {
  function all (line 108663) | function all(fn, list) {
  function applyEach (line 108676) | function applyEach(fnList, args) {
  function reverseList (line 108688) | function reverseList(list){
  function first (line 108703) | function first(test, list) {
  function clarinet (line 108731) | function clarinet(eventBus) {
  function ascentManager (line 109223) | function ascentManager(oboeBus, handlers){
  function parseResponseHeaders (line 109283) | function parseResponseHeaders(headerStr) {
  function isCrossOrigin (line 109310) | function isCrossOrigin(pageLocation, ajaxHost) {
  function parseUrlOrigin (line 109338) | function parseUrlOrigin(url) {
  function httpTransport (line 109366) | function httpTransport(){
  function streamingHttp (line 109390) | function streamingHttp(oboeBus, xhr, method, url, data, headers, withCre...
  function namedNode (line 109637) | function namedNode(key, node) {
  function incrementalContentBuilder (line 109678) | function incrementalContentBuilder( oboeBus ) {
  function nameClause (line 109831) | function nameClause(previousExpr, detection ) {
  function duckTypeClause (line 109850) | function duckTypeClause(previousExpr, detection) {
  function capture (line 109873) | function capture( previousExpr, detection ) {
  function skip1 (line 109892) | function skip1(previousExpr) {
  function skipMany (line 109934) | function skipMany(previousExpr) {
  function rootExpr (line 109968) | function rootExpr() {
  function statementExpr (line 109982) | function statementExpr(lastClause) {
  function expressionsReader (line 110004) | function expressionsReader( exprs, parserGeneratedSoFar, detection ) {
  function generateClauseReaderIfTokenFound (line 110037) | function generateClauseReaderIfTokenFound (
  function clauseMatcher (line 110061) | function clauseMatcher(tokenDetector, exprs) {
  function returnFoundParser (line 110112) | function returnFoundParser(_remainingJsonPath, compiledParser){
  function compileJsonPathToFunction (line 110124) | function compileJsonPathToFunction( uncompiledJsonPath,
  function singleEventPubSub (line 110174) | function singleEventPubSub(eventType, newListener, removeListener){
  function pubSub (line 110289) | function pubSub(){
  function errorReport (line 110353) | function errorReport(statusCode, body, error) {
  function patternAdapter (line 110375) | function patternAdapter(oboeBus, jsonPathCompiler) {
  function instanceApi (line 110486) | function instanceApi(oboeBus, contentSource){
  function wire (line 110740) | function wire (httpMethodName, contentSource, body, headers, withCredent...
  function applyDefaults (line 110769) | function applyDefaults( passthrough, url, httpMethodName, body, headers,...
  function oboe (line 110812) | function oboe(arg1) {
  function loadImplementation (line 110977) | function loadImplementation(){
  function Subscription (line 111108) | function Subscription(options) {
  function assert (line 112784) | function assert (val, msg) {
  function inherits (line 112790) | function inherits (ctor, superCtor) {
  function BN (line 112800) | function BN (number, base, endian) {
  function parseHex (line 112965) | function parseHex (str, start, end) {
  function parseBase (line 113019) | function parseBase (str, start, end, mul) {
  function toBitArray (line 113406) | function toBitArray (num) {
  function smallMulTo (line 113771) | function smallMulTo (self, num, out) {
  function bigMulTo (line 114393) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 114434) | function jumboMulTo (self, num, out) {
  function FFTM (line 114458) | function FFTM (x, y) {
  function MPrime (line 115718) | function MPrime (name, p) {
  function K256 (line 115768) | function K256 () {
  function P224 (line 115835) | function P224 () {
  function P192 (line 115843) | function P192 () {
  function P25519 (line 115851) | function P25519 () {
  function Red (line 115902) | function Red (m) {
  function Mont (line 116136) | function Mont (m) {
  function signed (line 116592) | function signed (tx) {
  function Wallet (line 116841) | function Wallet(accounts) {
  function sliceIterator (line 116988) | function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = ...
  function throwIfNotStringOrBuffer (line 117126) | function throwIfNotStringOrBuffer (val, prefix) {
  function HashBase (line 117132) | function HashBase (blockSize) {
  function _classCallCheck (line 117242) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function copyBuffer (line 117247) | function copyBuffer(src, target, offset) {
  function BufferList (line 117252) | function BufferList() {
  function deprecate (line 117355) | function deprecate (fn, msg) {
  function config (line 117386) | function config (name) {
  function PassThrough (line 117443) | function PassThrough(options) {
  function HashBase (line 117490) | function HashBase (blockSize) {
  function Sha (line 117594) | function Sha () {
  function rotl5 (line 117613) | function rotl5 (num) {
  function rotl30 (line 117617) | function rotl30 (num) {
  function ft (line 117621) | function ft (s, b, c, d) {
  function Sha1 (line 117695) | function Sha1 () {
  function rotl1 (line 117714) | function rotl1 (num) {
  function rotl5 (line 117718) | function rotl5 (num) {
  function rotl30 (line 117722) | function rotl30 (num) {
  function ft (line 117726) | function ft (s, b, c, d) {
  function Sha224 (line 117796) | function Sha224 () {
  function Sha384 (line 117847) | function Sha384 () {
  function writeInt64BE (line 117881) | function writeInt64BE (h, l, offset) {
  function Hmac (line 117913) | function Hmac (alg, key) {
  function checkNative (line 117982) | function checkNative (algo) {
  function browserPbkdf2 (line 118002) | function browserPbkdf2 (password, salt, iterations, length, algo) {
  function resolvePromise (line 118018) | function resolvePromise (promise, callback) {
  function createCipher (line 118074) | function createCipher (suite, password) {
  function createDecipher (line 118092) | function createDecipher (suite, password) {
  function createCipheriv (line 118110) | function createCipheriv (suite, key, iv) {
  function createDecipheriv (line 118118) | function createDecipheriv (suite, key, iv) {
  function getCiphers (line 118126) | function getCiphers () {
  function DES (line 118157) | function DES (opts) {
  function Cipher (line 118459) | function Cipher(options) {
  function DESState (line 118612) | function DESState() {
  function DES (line 118617) | function DES(options) {
  function CBCState (line 118760) | function CBCState(iv) {
  function instantiate (line 118768) | function instantiate(Base) {
  function EDEState (line 118834) | function EDEState(type, key) {
  function EDE (line 118856) | function EDE(options) {
  function Cipher (line 118895) | function Cipher (mode, key, iv) {
  function Splitter (line 118942) | function Splitter () {
  function createCipheriv (line 118971) | function createCipheriv (suite, password, iv) {
  function createCipher (line 118990) | function createCipher (suite, password) {
  function encryptStart (line 119045) | function encryptStart (self, data, decrypt) {
  function encryptByte (line 119083) | function encryptByte (self, byteParam, decrypt) {
  function encryptByte (line 119114) | function encryptByte (self, byteParam, decrypt) {
  function shiftIn (line 119130) | function shiftIn (buffer, value) {
  function getBlock (line 119162) | function getBlock (self) {
  function toArray (line 119186) | function toArray (buf) {
  function fromArray (line 119195) | function fromArray (out) {
  function GHASH (line 119204) | function GHASH (key) {
  function Decipher (line 119287) | function Decipher (mode, key, iv) {
  function Splitter (line 119326) | function Splitter () {
  function unpad (line 119357) | function unpad (last) {
  function createDecipheriv (line 119373) | function createDecipheriv (suite, password, iv) {
  function createDecipher (line 119392) | function createDecipher (suite, password) {
  function getDiffieHellman (line 119443) | function getDiffieHellman (mod) {
  function createDiffieHellman (line 119454) | function createDiffieHellman (prime, enc, generator, genc) {
  function setPublicKey (line 119517) | function setPublicKey(pub, enc) {
  function setPrivateKey (line 119526) | function setPrivateKey(priv, enc) {
  function checkPrime (line 119536) | function checkPrime(prime, generator) {
  function DH (line 119589) | function DH(prime, generator, malleable) {
  function formatReturnValue (line 119661) | function formatReturnValue(bn, enc) {
  function Sign (line 119688) | function Sign (algorithm) {
  function Verify (line 119721) | function Verify (algorithm) {
  function createSign (line 119753) | function createSign (algorithm) {
  function createVerify (line 119757) | function createVerify (algorithm) {
  function sign (line 119782) | function sign (hash, key, hashType, signType, tag) {
  function ecSign (line 119806) | function ecSign (hash, priv) {
  function dsaSign (line 119817) | function dsaSign (hash, priv, algo) {
  function toDER (line 119839) | function toDER (r, s) {
  function getKey (line 119853) | function getKey (x, q, hash, algo) {
  function bits2int (line 119873) | function bits2int (obits, q) {
  function bits2octets (line 119880) | function bits2octets (bits, q) {
  function makeKey (line 119892) | function makeKey (q, kv, algo) {
  function makeR (line 119912) | function makeR (g, k, p, q) {
  function getNAF (line 119947) | function getNAF(num, w) {
  function getJSF (line 119977) | function getJSF(k1, k2) {
  function cachedProperty (line 120033) | function cachedProperty(obj, name, computer) {
  function parseBytes (line 120042) | function parseBytes(bytes) {
  function intFromLE (line 120048) | function intFromLE(bytes) {
  function BaseCurve (line 120069) | function BaseCurve(type, conf) {
  function BasePoint (line 120308) | function BasePoint(curve, type) {
  function ShortCurve (line 120452) | function ShortCurve(conf) {
  function Point (line 120693) | function Point(curve, x, y, isRed) {
  function obj2point (line 120777) | function obj2point(obj) {
  function JPoint (line 120931) | function JPoint(curve, x, y, z) {
  function MontCurve (line 121397) | function MontCurve(conf) {
  function Point (line 121418) | function Point(curve, x, z) {
  function EdwardsCurve (line 121584) | function EdwardsCurve(conf) {
  function Point (line 121688) | function Point(curve, x, y, z, t) {
  function PresetCurve (line 122023) | function PresetCurve(options) {
  function defineCurve (line 122039) | function defineCurve(name, options) {
  function SHA1 (line 122286) | function SHA1() {
  function SHA224 (line 122355) | function SHA224() {
  function SHA384 (line 122393) | function SHA384() {
  function RIPEMD160 (line 122440) | function RIPEMD160() {
  function f (line 122505) | function f(j, x, y, z) {
  function K (line 122518) | function K(j) {
  function Kh (line 122531) | function Kh(j) {
  function Hmac (line 122587) | function Hmac(hash, key, enc) {
  function EC (line 123433) | function EC(options) {
  function HmacDRBG (line 123675) | function HmacDRBG(options) {
  function KeyPair (line 123796) | function KeyPair(ec, options) {
  function Signature (line 123923) | function Signature(options, enc) {
  function Position (line 123940) | function Position() {
  function getLength (line 123944) | function getLength(buf, p) {
  function rmPadding (line 123959) | function rmPadding(buf) {
  function constructLength (line 124009) | function constructLength(arr, len) {
  function EDDSA (line 124067) | function EDDSA(curve) {
  function KeyPair (line 124199) | function KeyPair(eddsa, params) {
  function Signature (line 124302) | function Signature(eddsa, sig) {
  function Entity (line 124495) | function Entity(name, body) {
  function Context (line 124595) | function Context() {}
  function Reporter (line 124714) | function Reporter(options) {
  function ReporterError (line 124812) | function ReporterError(path, msg) {
  function Node (line 124868) | function Node(enc, parent) {
  function PEMDecoder (line 125542) | function PEMDecoder(entity) {
  function PEMEncoder (line 125606) | function PEMEncoder(entity) {
  function verify (line 125773) | function verify (sig, hash, key, signType, tag) {
  function ecVerify (line 125813) | function ecVerify (sig, hash, pub) {
  function dsaVerify (line 125823) | function dsaVerify (sig, hash, pub) {
  function checkValue (line 125844) | function checkValue (b, q) {
  function ECDH (line 125901) | function ECDH(curve) {
  function formatReturnValue (line 125963) | function formatReturnValue(bn, enc, len) {
  function oaep (line 126046) | function oaep(key, msg){
  function pkcs1 (line 126063) | function pkcs1(key, msg, reverse){
  function nonZero (line 126078) | function nonZero(len, crypto) {
  function oaep (line 126144) | function oaep(key, msg){
  function pkcs1 (line 126171) | function pkcs1(key, msg, reverse){
  function compare (line 126195) | function compare(a, b){
  function oldBrowser (line 126219) | function oldBrowser () {
  function assertOffset (line 126228) | function assertOffset (offset, length) {
  function assertSize (line 126242) | function assertSize (size, offset, length) {
  function randomFill (line 126262) | function randomFill (buf, offset, size, cb) {
  function actualFill (line 126282) | function actualFill (buf, offset, size, cb) {
  function randomFillSync (line 126309) | function randomFillSync (buf, offset, size) {
  function scrypt (line 126344) | function scrypt (key, salt, N, r, p, dkLen, progressCallback) {
  function arraycopy (line 126507) | function arraycopy (src, srcPos, dest, destPos, length) {
  function parse (line 126544) | function parse(s, buf, offset) {
  function unparse (line 126563) | function unparse(buf, offset) {
  function v1 (line 126596) | function v1(options, buf, offset) {
  function v4 (line 126674) | function v4(options, buf, offset) {
  function xhrRequest (line 127187) | function xhrRequest (url, opt, cb) {
  function encoderForArrayFormat (line 127246) | function encoderForArrayFormat(opts) {
  function parserForArrayFormat (line 127284) | function parserForArrayFormat(opts) {
  function encode (line 127334) | function encode(value, opts) {
  function keysSorter (line 127342) | function keysSorter(input) {
  function extract (line 127356) | function extract(str) {
  function parse (line 127364) | function parse(str, opts) {
  function decodeComponents (line 127490) | function decodeComponents(components, split) {
  function decode (line 127511) | function decode(input) {
  function customDecodeURIComponent (line 127527) | function customDecodeURIComponent(input) {
  function urlSetQuery (line 127586) | function urlSetQuery (url, query) {
  function ensureHeader (line 127615) | function ensureHeader (headers, key, value) {
  function xhrRequest (line 127632) | function xhrRequest (opt, cb) {
  function trim (line 127734) | function trim(str){
  function forEach (line 127758) | function forEach(list, iterator, context) {
  function forEachArray (line 127775) | function forEachArray(array, iterator, context) {
  function forEachString (line 127783) | function forEachString(string, iterator, context) {
  function forEachObject (line 127790) | function forEachObject(object, iterator, context) {
  function extend (line 127807) | function extend() {
  function getResponse (line 127829) | function getResponse (opt, resp) {
  function getter (line 128772) | function getter(key, transform) {
  function chain (line 128797) | function chain() {
  function Ajv (line 129587) | function Ajv(opts) {
  function validate (line 129626) | function validate(schemaKeyRef, data) {
  function compile (line 129651) | function compile(schema, _meta) {
  function addSchema (line 129666) | function addSchema(schema, key, _skipValidation, _meta) {
  function addMetaSchema (line 129690) | function addMetaSchema(schema, key, skipValidation) {
  function validateSchema (line 129703) | function validateSchema(schema, throwOrLogError) {
  function defaultMeta (line 129729) | function defaultMeta(self) {
  function getSchema (line 129746) | function getSchema(keyRef) {
  function _getSchemaFragment (line 129756) | function _getSchemaFragment(self, ref) {
  function _getSchemaObj (line 129776) | function _getSchemaObj(self, keyRef) {
  function removeSchema (line 129791) | function removeSchema(schemaKeyRef) {
  function _removeAllSchemas (line 129824) | function _removeAllSchemas(self, schemas, regex) {
  function _addSchema (line 129836) | function _addSchema(schema, skipValidation, meta, shouldAddSchema) {
  function _compile (line 129874) | function _compile(schemaObj, root) {
  function chooseGetId (line 129915) | function chooseGetId(opts) {
  function _getId (line 129924) | function _getId(schema) {
  function _get$Id (line 129930) | function _get$Id(schema) {
  function _get$IdOrId (line 129936) | function _get$IdOrId(schema) {
  function errorsText (line 129950) | function errorsText(errors, options) {
  function addFormat (line 129973) | function addFormat(name, format) {
  function addDraft6MetaSchema (line 129980) | function addDraft6MetaSchema(self) {
  function addInitialSchemas (line 129994) | function addInitialSchemas(self) {
  function addInitialFormats (line 130002) | function addInitialFormats(self) {
  function checkUnique (line 130010) | function checkUnique(self, id) {
  function getMetaSchemaOptions (line 130016) | function getMetaSchemaOptions(self) {
  function setLogger (line 130024) | function setLogger(self) {
  function noop (line 130037) | function noop() {}
  function compile (line 130077) | function compile(schema, root, localRefs, baseId) {
  function checkCompiling (line 130352) | function checkCompiling(schema, root, baseId) {
  function endCompiling (line 130373) | function endCompiling(schema, root, baseId) {
  function compIndex (line 130388) | function compIndex(schema, root, baseId) {
  function patternCode (line 130398) | function patternCode(i, patterns) {
  function defaultCode (line 130403) | function defaultCode(i) {
  function refValCode (line 130408) | function refValCode(i, refVal) {
  function customRuleCode (line 130413) | function customRuleCode(i) {
  function vars (line 130418) | function vars(arr, statement) {
  function error (line 130496) | function error(type) {
  function map (line 130508) | function map(array, fn) {
  function mapDomain (line 130527) | function mapDomain(string, fn) {
  function ucs2decode (line 130556) | function ucs2decode(string) {
  function ucs2encode (line 130590) | function ucs2encode(array) {
  function basicToDigit (line 130612) | function basicToDigit(codePoint) {
  function digitToBasic (line 130636) | function digitToBasic(digit, flag) {
  function adapt (line 130647) | function adapt(delta, numPoints, firstTime) {
  function decode (line 130664) | function decode(input) {
  function encode (line 130765) | function encode(input) {
  function toUnicode (line 130883) | function toUnicode(input) {
  function toASCII (line 130902) | function toASCII(input) {
  function hasOwnProperty (line 131031) | function hasOwnProperty(obj, prop) {
  function map (line 131165) | function map (xs, f) {
  function _traverse (line 131270) | function _traverse(opts, cb, schema, jsonPtr, rootSchema, parentJsonPtr,...
  function escapeJsonPtr (line 131293) | function escapeJsonPtr(str) {
  function formats (line 131360) | function formats(mode) {
  function date (line 131416) | function date(str) {
  function time (line 131427) | function time(str, full) {
  function date_time (line 131440) | function date_time(str) {
  function hostname (line 131447) | function hostname(str) {
  function uri (line 131455) | function uri(str) {
  function regex (line 131462) | function regex(str) {
  function compileAsync (line 133902) | function compileAsync(schema, meta, callback) {
  function addKeyword (line 134001) | function addKeyword(keyword, definition) {
  function getKeyword (line 134088) | function getKeyword(keyword) {
  function removeKeyword (line 134101) | function removeKeyword(keyword) {
  function Provider (line 134401) | function Provider(provider) {
  function partialABI (line 134443) | function partialABI(fullABI, indexed) {
  function Contract (line 134661) | function Contract(contract) {
  function Result (line 135370) | function Result() {}
  function encodeParams (line 135372) | function encodeParams(types, values) {
  function decodeParams (line 135420) | function decodeParams(names, types, data) {
  function encodeMethod (line 135451) | function encodeMethod(method, values) {
  function decodeMethod (line 135460) | function decodeMethod(method, data) {
  function encodeEvent (line 135468) | function encodeEvent(eventObject, values) {
  function decodeEvent (line 135473) | function decodeEvent(eventObject, data) {
  function stripZeros (line 135502) | function stripZeros(aInput) {
  function bnToBuffer (line 135512) | function bnToBuffer(bnInput) {
  function isHexString (line 135521) | function isHexString(value, length) {
  function hexOrBuffer (line 135531) | function hexOrBuffer(valueInput, name) {
  function hexlify (line 135551) | function hexlify(value) {
  function getKeys (line 135563) | function getKeys(params, key, allowEmpty) {
  function coderNumber (line 135584) | function coderNumber(size, signed) {
  function coderFixedBytes (line 135634) | function coderFixedBytes(length) {
  function encodeDynamicBytesHelper (line 135691) | function encodeDynamicBytesHelper(value) {
  function decodeDynamicBytesHelper (line 135699) | function decodeDynamicBytesHelper(data, offset) {
  function coderArray (line 135740) | function coderArray(coder, lengthInput) {
  function getParamCoder (line 135804) | function getParamCoder(typeInput) {
  function assert (line 135922) | function assert (val, msg) {
  function inherits (line 135928) | function inherits (ctor, superCtor) {
  function BN (line 135938) | function BN (number, base, endian) {
  function parseHex (line 136103) | function parseHex (str, start, end) {
  function parseBase (line 136157) | function parseBase (str, start, end, mul) {
  function toBitArray (line 136544) | function toBitArray (num) {
  function smallMulTo (line 136909) | function smallMulTo (self, num, out) {
  function bigMulTo (line 137531) | function bigMulTo (self, num, out) {
  function jumboMulTo (line 137572) | function jumboMulTo (self, num, out) {
  function FFTM (line 137596) | function FFTM (x, y) {
  function MPrime (line 138856) | function MPrime (name, p) {
  function K256 (line 138906) | function K256 () {
  function P224 (line 138973) | function P224 () {
  function P192 (line 138981) | function P192 () {
  function P25519 (line 138989) | function P25519 () {
  function Red (line 139040) | function Red (m) {
  function Mont (line 139274) | function Mont (m) {
  function Keccak (line 139440) | function Keccak(bits, padding, outputBits) {
  function Web3 (line 139964) | function Web3 (provider) {
  function swapEndian (line 140566) | function swapEndian(word) {
  function f1 (line 140956) | function f1(x, y, z) {
  function f2 (line 140961) | function f2(x, y, z) {
  function f3 (line 140965) | function f3(x, y, z) {
  function f4 (line 140969) | function f4(x, y, z) {
  function f5 (line 140973) | function f5(x, y, z) {
  function rotl (line 140978) | function rotl(x,n) {
  function generateKeystreamAndEncrypt (line 141225) | function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
  function incWord (line 141344) | function incWord(word)
  function incCounter (line 141388) | function incCounter(counter)
  function exchangeLR (line 142786) | function exchangeLR(offset, mask) {
  function exchangeRL (line 142792) | function exchangeRL(offset, mask) {
  function generateKeystreamWord (line 142926) | function generateKeystreamWord() {
  function nextState (line 143135) | function nextState() {
  function nextState (line 143330) | function nextState() {
  function Eth (line 143457) | function Eth(web3) {
  function Personal (line 145330) | function Personal(web3) {
  function Swarm (line 145452) | function Swarm(web3) {
  function StatusError (line 146129) | function StatusError(args, tx, receipt) {
  function ExtendableError (line 146166) | function ExtendableError(message) {
  function ExtendableBuiltin (line 146193) | function ExtendableBuiltin(cls){
  function add0x (line 146241) | function add0x (input) {
  function strip0x (line 146252) | function strip0x (input) {
  function _encodeFunctionTxData (line 146264) | function _encodeFunctionTxData (functionName, types, args) {
  function _getTypesFromAbi (line 146275) | function _getTypesFromAbi (abi, functionName) {
  function functionTx (line 146290) | function functionTx (abi, functionName, args, txObject) {
  function createdContractAddress (line 146307) | function createdContractAddress (fromAddress, nonce) {
  function createContractTx (line 146315) | function createContractTx (fromAddress, txObject) {
  function valueTx (line 146332) | function valueTx (txObject) {
  function Keccak (line 146413) | function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
  function Shake (line 146504) | function Shake (rate, capacity, delimitedSuffix, options) {
  function Keccak (line 146584) | function Keccak () {
  function initCompressedValue (line 146865) | function initCompressedValue (value, defaultValue) {
  function check (line 147369) | function check (buffer) {
  function decode (line 147393) | function decode (buffer) {
  function encode (line 147444) | function encode (r, s) {
  function loadCompressedPublicKey (line 147494) | function loadCompressedPublicKey (first, xBuffer) {
  function loadUncompressedPublicKey (line 147508) | function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
  function loadPublicKey (line 147528) | function loadPublicKey (publicKey) {
  function toArray (line 148462) | function toArray(msg, enc) {
  function zero2 (line 148494) | function zero2(word) {
  function toHex (line 148502) | function toHex(msg) {
  function getNAF (line 148518) | function getNAF(num, w) {
  function getJSF (line 148548) | function getJSF(k1, k2) {
  function HmacDRBG (line 148617) | function HmacDRBG(options) {
  function BaseCurve (line 148740) | function BaseCurve(type, conf) {
  function BasePoint (line 148965) | function BasePoint(curve, type) {
  function ShortCurve (line 149063) | function ShortCurve(conf) {
  function Point (line 149302) | function Point(curve, x, y, isRed) {
  function obj2point (line 149386) | function obj2point(obj) {
  function JPoint (line 149531) | function JPoint(curve, x, y, z) {
  function MontCurve (line 149974) | function MontCurve(conf) {
  function Point (line 149995) | function Point(curve, x, z) {
  function EdwardsCurve (line 150145) | function EdwardsCurve(conf) {
  function Point (line 150216) | function Point(curve, x, y, z, t) {
  function PresetCurve (line 150522) | function PresetCurve(options) {
  function defineCurve (line 150538) | function defineCurve(name, options) {
  function EC (line 151473) | function EC(options) {
  function KeyPair (line 151686) | function KeyPair(ec, options) {
  function Signature (line 151844) | function Signature(options, enc) {
  function encode (line 152132) | function encode (source) {
  function decodeUnsafe (line 152159) | function decodeUnsafe (string) {
  function decode (line 152188) | function decode (string) {
  function PublicKeyInput (line 153530) | function PublicKeyInput() {
  function PublicKeyHashInput (line 153627) | function PublicKeyHashInput() {
  function MultiSigInput (line 153729) | function MultiSigInput(input, pubkeys, threshold, signatures) {
  function MultiSigScriptHashInput (line 153946) | function MultiSigScriptHashInput(input, pubkeys, threshold, signatures) {
  function Block (line 154211) | function Block(arg) {
  function fromCache (line 155045) | function fromCache(next, cp, needFeature){
  function fromData (line 155056) | function fromData(next, cp, needFeature){
  function fromCpOnly (line 155062) | function fromCpOnly(next, cp, needFeature){
  function fromRuleBasedJamo (line 155065) | function fromRuleBasedJamo(next, cp, needFeature){
  function fromCpFilter (line 155093) | function fromCpFilter(next, cp, needFeature){
  function recursiveDecomp (line 155179) | function recursiveDecomp(cano, uchar){
  function nfd (line 155293) | function nfd(str){
  function nfkd (line 155297) | function nfkd(str){
  function nfc (line 155301) | function nfc(str){
  function nfkc (line 155305) | function nfkc(str){
  function pbkdf2 (line 155472) | function pbkdf2(key, salt, iterations, dkLen) {
  function Web3ProviderEngine (line 155763) | function Web3ProviderEngine(opts) {
  function next (line 155851) | function next(after) {
  function end (line 155869) | function end(_error, _result) {
  function toBufferBlock (line 155916) | function toBufferBlock (jsonBlock) {
  function _interopRequireDefault (line 155979) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function RpcBlockTracker (line 155991) | function RpcBlockTracker() {
  function awaitCurrentBlock (line 156057) | function awaitCurrentBlock() {
  function start (line 156124) | function start() {
  function _setTrackingBlock (line 156189) | function _setTrackingBlock(_x3) {
  function _setCurrentBlock (line 156230) | function _setCurrentBlock(_x4) {
  function _warpToLatest (line 156261) | function _warpToLatest() {
  function _pollForNextBlock (line 156289) | function _pollForNextBlock() {
  function _performSync (line 156386) | function _performSync() {
  function wrap (line 156532) | function wrap(innerFn, outerFn, self, tryLocsList) {
  function tryCatch (line 156556) | function tryCatch(fn, obj, arg) {
  function Generator (line 156577) | function Generator() {}
  function GeneratorFunction (line 156578) | function GeneratorFunction() {}
  function GeneratorFunctionPrototype (line 156579) | function GeneratorFunctionPrototype() {}
  function defineIteratorMethods (line 156607) | function defineIteratorMethods(prototype) {
  function AsyncIterator (line 156646) | function AsyncIterator(generator) {
  function makeInvokeMethod (line 156742) | function makeInvokeMethod(innerFn, self, context) {
  function maybeInvokeDelegate (line 156824) | function maybeInvokeDelegate(delegate, context) {
  function pushTryEntry (line 156921) | function pushTryEntry(locs) {
  function resetTryEntry (line 156936) | function resetTryEntry(entry) {
  function Context (line 156943) | function Context(tryLocsList) {
  function values (line 156979) | function values(iterable) {
  function doneResult (line 157015) | function doneResult() {
  function handle (line 157066) | function handle(loc, caught) {
  function _interopRequireDefault (line 158001) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function step (line 158007) | function step(key, arg) {
  function _interopRequireDefault (line 158105) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function defineProperties (line 158108) | function defineProperties(target, props) {
  function _interopRequireDefault (line 158164) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireDefault (line 158598) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function EthQuery (line 158706) | function EthQuery(provider){
  function generateFnFor (line 158774) | function generateFnFor(methodName){
  function generateFnWithDefaultBlockFor (line 158786) | function generateFnWithDefaultBlockFor(argCount, methodName){
  function createPayload (line 158800) | function createPayload(data){
  function extend (line 158819) | function extend() {
  function IdIterator (line 158842) | function IdIterator(opts){
  function _interopRequireDefault (line 159073) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function eachLimit (line 159095) | function eachLimit(coll, limit, iteratee, callback) {
  function _interopRequireDefault (line 159124) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function createArrayIterator (line 159126) | function createArrayIterator(coll) {
  function createES2015Iterator (line 159134) | function createES2015Iterator(iterator) {
  function createObjectIterator (line 159144) | function createObjectIterator(obj) {
  function iterator (line 159154) | function iterator(coll) {
  function isFunction (line 159194) | function isFunction(value) {
  function getRawTag (line 159236) | function getRawTag(value) {
  function objectToString (line 159280) | function objectToString(value) {
  function keys (line 159342) | function keys(object) {
  function arrayLikeKeys (line 159374) | function arrayLikeKeys(value, inherited) {
  function baseTimes (line 159417) | function baseTimes(n, iteratee) {
  function baseIsArguments (line 159489) | function baseIsArguments(value) {
  function stubFalse (line 159558) | function stubFalse() {
  function isIndex (line 159583) | function isIndex(value, length) {
  function baseIsTypedArray (line 159687) | function baseIsTypedArray(value) {
  function baseUnary (line 159706) | function baseUnary(func) {
  function baseKeys (line 159764) | function baseKeys(object) {
  function 
Copy disabled (too large) Download .json
Condensed preview — 126 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (11,585K chars).
[
  {
    "path": ".gitignore",
    "chars": 323,
    "preview": "# See https://help.github.com/ignore-files/ for more about ignoring files.\n\n# dependencies\nnode_modules\n\n# testing\n/cove"
  },
  {
    "path": "DatabaseManager/.gitignore",
    "chars": 18,
    "preview": "./DatabaseManager\n"
  },
  {
    "path": "DatabaseManager/README.md",
    "chars": 699,
    "preview": "we can now launch requests to the go backend through a web socket! This uses https://github.com/gorilla/websocket to com"
  },
  {
    "path": "DatabaseManager/asset/index.html",
    "chars": 1631,
    "preview": "<html>\n<head>\n    <title>WebSocket demo</title>\n</head>\n<body>\n\n    <div>\n        <form action>\n            <label for=\""
  },
  {
    "path": "DatabaseManager/asset/jquery-1.11.1.js",
    "chars": 282766,
    "preview": "/*!\n * jQuery JavaScript Library v1.11.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Co"
  },
  {
    "path": "DatabaseManager/asset/socket.io-1.3.7.js",
    "chars": 91599,
    "preview": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof defin"
  },
  {
    "path": "DatabaseManager/common/common.go",
    "chars": 2778,
    "preview": "package common\n\nimport (\n\t\"encoding/hex\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/ethereum/go-ethereu"
  },
  {
    "path": "DatabaseManager/ethereum/AgentRegistryDaemon.go",
    "chars": 3241,
    "preview": "package ethereum\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// AddSigner watches the AgentRegistry for the AddSigner "
  },
  {
    "path": "DatabaseManager/ethereum/README.md",
    "chars": 124,
    "preview": "Run `go generate` to generate the smart contract libraries.\n\n\nYou will need to have `solc`, the solidity compiler instal"
  },
  {
    "path": "DatabaseManager/ethereum/ethereum.go",
    "chars": 495,
    "preview": "//go:generate abigen --sol ../../SmartContracts/contracts/AgentRegistry.sol --pkg ethereum --out AgentRegistry.go\n\npacka"
  },
  {
    "path": "DatabaseManager/localRPC/listener.go",
    "chars": 930,
    "preview": "package localRPC\n\nimport (\n\t\"github.com/mitmedialab/medrec/DatabaseManager/middleware\"\n\t\"github.com/gorilla/mux\"\n\t\"githu"
  },
  {
    "path": "DatabaseManager/localRPC/localUsers.go",
    "chars": 9356,
    "preview": "package localRPC\n\nimport (\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/rand\"\n\t\"encoding/base64\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\""
  },
  {
    "path": "DatabaseManager/localRPC/localUsers_test.go",
    "chars": 972,
    "preview": "package localRPC\n\nimport (\n\t\"testing\"\n)\n\nfunc TestEncryption(t *testing.T) {\n\tclient := new(MedRecLocal)\n\n\tnewUserArgs :"
  },
  {
    "path": "DatabaseManager/localRPC/remoteUsers.go",
    "chars": 1070,
    "preview": "package localRPC\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"os/exec\"\n\t\"strings\"\n\n\t\"github.com/mitmedialab/medrec/DatabaseManager/com"
  },
  {
    "path": "DatabaseManager/manager.go",
    "chars": 751,
    "preview": "package manager\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\n\t\"github.com/gorilla/mux\"\n\t\"github.com/mitmedialab/medrec/DatabaseManager/"
  },
  {
    "path": "DatabaseManager/middleware/enableCORS.go",
    "chars": 598,
    "preview": "package middleware\n\nimport (\n\t\"net/http\"\n)\n\n// EnableCORS sets the cors header\nfunc EnableCORS(w http.ResponseWriter, r "
  },
  {
    "path": "DatabaseManager/middleware/logger.go",
    "chars": 280,
    "preview": "package middleware\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Logger logs info about every request to the console\nfunc L"
  },
  {
    "path": "DatabaseManager/middleware/whitelist.go",
    "chars": 449,
    "preview": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\nvar whitelist = []string{\n\t\"localhost:\",\n\t\"127.0.0.1:\",\n}\n\n// Whi"
  },
  {
    "path": "DatabaseManager/remoteRPC/auth.go",
    "chars": 3932,
    "preview": "package remoteRPC\n\n//TODO require that the authentication messsage is within a more stringent time domain\n//such as betw"
  },
  {
    "path": "DatabaseManager/remoteRPC/databse.go",
    "chars": 265,
    "preview": "package remoteRPC\n\nimport (\n\t\"database/sql\"\n\t\"log\"\n\n\t_ \"github.com/go-sql-driver/mysql\"\n)\n\nfunc instantiateDatabase() *s"
  },
  {
    "path": "DatabaseManager/remoteRPC/documentRequest.go",
    "chars": 1777,
    "preview": "package remoteRPC\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\n\t\"github.com/mitmedialab/medrec/DatabaseManager/common\"\n)\n\ntype P"
  },
  {
    "path": "DatabaseManager/remoteRPC/ethereum.go",
    "chars": 3959,
    "preview": "package remoteRPC\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/mitmedial"
  },
  {
    "path": "DatabaseManager/remoteRPC/ethereum_test.go",
    "chars": 2014,
    "preview": "package remoteRPC\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t\"../common\"\n\t\"../localRPC\"\n)\n\nfunc TestRecover(t *t"
  },
  {
    "path": "DatabaseManager/remoteRPC/listener.go",
    "chars": 529,
    "preview": "package remoteRPC\n\nimport (\n\t// \"./ethereum\n\n\t\"github.com/gorilla/mux\"\n\t\"github.com/gorilla/rpc/v2\"\n\t\"github.com/gorilla"
  },
  {
    "path": "DatabaseManager/remoteRPC/permissions.go",
    "chars": 5370,
    "preview": "package remoteRPC\n\nimport (\n\t\"encoding/json\"\n\t\"log\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/mitmedialab/medrec/Data"
  },
  {
    "path": "DatabaseManager/scripts/createDocuments.go",
    "chars": 613,
    "preview": "package main\n\nimport (\n\t\"database/sql\"\n\t\"log\"\n\n\t_ \"github.com/go-sql-driver/mysql\"\n)\n\n//returns a pointer to an sql data"
  },
  {
    "path": "DatabaseManager/scripts/insert-patient.sql",
    "chars": 135,
    "preview": "USE medrec-v1\nINSERT INTO patient_info (PatientID, LastName, FirstName, Gender, DOB)\nVALUES (004, 'Smith', 'Jane', 'F', "
  },
  {
    "path": "DatabaseManager/scripts/test-db.sql",
    "chars": 6232,
    "preview": "# ************************************************************\n# Sequel Pro SQL dump\n# Version 4541\n#\n# http://www.seque"
  },
  {
    "path": "GolangJSHelpers/.eslintrc",
    "chars": 9149,
    "preview": "/*******************************************************************************\n* A Meteor Developer's ECMA 6th Edition"
  },
  {
    "path": "GolangJSHelpers/addAgentToRegistry.js",
    "chars": 453,
    "preview": "const agentRegistryJson = require('../SmartContracts/build/contracts/AgentRegistry.json');\nconst Web3 = require('web3');"
  },
  {
    "path": "GolangJSHelpers/clientBinaries.json",
    "chars": 2019,
    "preview": "{\n  \"clients\": {\n    \"Geth\": {\n      \"version\": \"1.8.2\",\n      \"platforms\": {\n        \"linux\": {\n          \"x64\": {\n    "
  },
  {
    "path": "GolangJSHelpers/generateNewAccount.js",
    "chars": 886,
    "preview": "const Web3  = require('web3');\nconst Promise  = require('bluebird');\nconst {keystore, signing} = require('eth-lightwalle"
  },
  {
    "path": "GolangJSHelpers/getProviderHost.js",
    "chars": 493,
    "preview": "const agentRegistryJson = require('../SmartContracts/build/contracts/AgentRegistry.json');\nconst Web3 = require('web3');"
  },
  {
    "path": "GolangJSHelpers/getSigners.js",
    "chars": 783,
    "preview": "const agentRegistryJson = require('../SmartContracts/build/contracts/AgentRegistry.json');\nconst Web3 = require('web3');"
  },
  {
    "path": "GolangJSHelpers/medrec-genesis.json",
    "chars": 21796,
    "preview": "{\n  \"config\": {\n    \"chainId\": 633732,\n    \"homesteadBlock\": 1,\n    \"eip150Block\": 2,\n    \"eip150Hash\": \"0x0000000000000"
  },
  {
    "path": "GolangJSHelpers/package.json",
    "chars": 303,
    "preview": "{\n  \"name\": \"ethereumclient\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"dependencies\": {\n    \"b"
  },
  {
    "path": "GolangJSHelpers/startGeth.js",
    "chars": 2047,
    "preview": "const Manager = require('ethereum-client-binaries').Manager;\nconst config = require('./clientBinaries.json');\nconst mgr "
  },
  {
    "path": "GolangJSHelpers/tsconfig.json",
    "chars": 197,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"jsx\": \"react\",\n    \"importHelpers\": true"
  },
  {
    "path": "LICENSE",
    "chars": 15433,
    "preview": "\n You may use, distribute and copy Kodi under the terms of GNU General\n Public License version 2, which is displayed bel"
  },
  {
    "path": "README.md",
    "chars": 8903,
    "preview": "# MedRec\n##### _Patient controlled medical records_\n\n---\nTHIS PROJECT IS CURRENTLY NOT MAINTAINED\n\n---\n\nhttps://medrec.m"
  },
  {
    "path": "SmartContracts/.eslintrc",
    "chars": 9656,
    "preview": "/*******************************************************************************\n* A Meteor Developer's ECMA 6th Edition"
  },
  {
    "path": "SmartContracts/README.md",
    "chars": 2308,
    "preview": "\n\nThere are two contracts used in MedRec:\n\n- _Agent_ - stores information about an agent in MedRec, this could be a prov"
  },
  {
    "path": "SmartContracts/build/contracts/Agent.json",
    "chars": 370742,
    "preview": "{\n  \"contractName\": \"Agent\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"name\": \"\",\n"
  },
  {
    "path": "SmartContracts/build/contracts/AgentGroup.json",
    "chars": 159419,
    "preview": "{\n  \"contractName\": \"AgentGroup\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"name\":"
  },
  {
    "path": "SmartContracts/build/contracts/AgentRegistry.json",
    "chars": 1029620,
    "preview": "{\n  \"contractName\": \"AgentRegistry\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"nam"
  },
  {
    "path": "SmartContracts/build/contracts/AllAccessRelationship.json",
    "chars": 262878,
    "preview": "{\n  \"contractName\": \"AllAccessRelationship\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": "
  },
  {
    "path": "SmartContracts/build/contracts/DeadmanSwitch.json",
    "chars": 91357,
    "preview": "{\n  \"contractName\": \"DeadmanSwitch\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"lastTou"
  },
  {
    "path": "SmartContracts/build/contracts/Migrations.json",
    "chars": 52510,
    "preview": "{\n  \"contractName\": \"Migrations\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"last_compl"
  },
  {
    "path": "SmartContracts/build/contracts/Relationship.json",
    "chars": 442002,
    "preview": "{\n  \"contractName\": \"Relationship\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"provider"
  },
  {
    "path": "SmartContracts/contracts/Agent.sol",
    "chars": 2368,
    "preview": "pragma solidity ^0.4.15;\n\n//Represents both a Patient and a Provider,\n//Patients list of relationships with different Pr"
  },
  {
    "path": "SmartContracts/contracts/AgentGroup.sol",
    "chars": 946,
    "preview": "pragma solidity ^0.4.15;\n\n//Represents a set of agents who represent themself as one\ncontract AgentGroup {\n  address[] p"
  },
  {
    "path": "SmartContracts/contracts/AgentRegistry.sol",
    "chars": 7345,
    "preview": "pragma solidity ^0.4.15;\n\n//Contains\ncontract AgentRegistry {\n  struct Agent {\n    string name;\n    address contractAddr"
  },
  {
    "path": "SmartContracts/contracts/AllAccessRelationship.sol",
    "chars": 1982,
    "preview": "pragma solidity ^0.4.18;\n\ncontract AllAccessRelationship {\n  address public patron;\n  address public provider;\n  string "
  },
  {
    "path": "SmartContracts/contracts/DeadmanSwitch.sol",
    "chars": 953,
    "preview": "pragma solidity ^0.4.15;\n\ncontract DeadmanSwitch {\n  address public agent;\n  address[] public relationships; //list of R"
  },
  {
    "path": "SmartContracts/contracts/Migrations.sol",
    "chars": 493,
    "preview": "pragma solidity ^0.4.4;\n\ncontract Migrations {\n  address public owner;\n  uint public last_completed_migration;\n\n  modifi"
  },
  {
    "path": "SmartContracts/contracts/Relationship.sol",
    "chars": 3315,
    "preview": "pragma solidity ^0.4.18;\n\ncontract Relationship {\n    address public patron;\n    address public provider; // this is a u"
  },
  {
    "path": "SmartContracts/migrations/1_initial_migration.js",
    "chars": 130,
    "preview": "var Migrations = artifacts.require('./Migrations.sol');\n\nmodule.exports = function (deployer) {\n  deployer.deploy(Migrat"
  },
  {
    "path": "SmartContracts/migrations/2_deploy_contracts.js",
    "chars": 273,
    "preview": "var Agent = artifacts.require('Agent');\nvar AgentRegistry = artifacts.require('AgentRegistry');\n\nmodule.exports = functi"
  },
  {
    "path": "SmartContracts/test/agent.js",
    "chars": 3848,
    "preview": "var Agent = artifacts.require('./Agent.sol');\n\ncontract('Agent', function (accounts) {\n  let agent;\n  var constants = re"
  },
  {
    "path": "SmartContracts/test/agentGroup.js",
    "chars": 2149,
    "preview": "var AgentGroup = artifacts.require('./AgentGroup.sol');\n\ncontract('AgentGroup', function (accounts) {\n  let agentGroup;\n"
  },
  {
    "path": "SmartContracts/test/agentRegistry.js",
    "chars": 12425,
    "preview": "var Agent = artifacts.require('./Agent.sol');\nvar AgentRegistry = artifacts.require('./AgentRegistry.sol');\n\ncontract('A"
  },
  {
    "path": "SmartContracts/test/constants.js",
    "chars": 943,
    "preview": "let constants = (accounts) => {\n  return {\n    agent1: accounts[0],\n    agent2: accounts[1],\n    patron1: accounts[2],\n "
  },
  {
    "path": "SmartContracts/test/deadmanSwitch.js",
    "chars": 1695,
    "preview": "var DeadmanSwitch = artifacts.require('./DeadmanSwitch.sol');\n\ncontract('DeadmanSwitch', function (accounts) {\n  let age"
  },
  {
    "path": "SmartContracts/test/relationship.js",
    "chars": 3748,
    "preview": "var Relationship = artifacts.require('./Relationship.sol');\n\ncontract('Relationship', function (accounts) {\n  let relati"
  },
  {
    "path": "SmartContracts/truffle.js",
    "chars": 286,
    "preview": "module.exports = {\n  networks: {\n    development: {\n      host: 'localhost',\n      port: 8545,\n      network_id: '*', //"
  },
  {
    "path": "UserClient/.eslintrc",
    "chars": 9256,
    "preview": "/*******************************************************************************\n* A Meteor Developer's ECMA 6th Edition"
  },
  {
    "path": "UserClient/README.md",
    "chars": 104,
    "preview": "## medrec User Client\n\n![medrec](https://dl.dropboxusercontent.com/s/2ed5jl8i709pcdr/medrec_client.png)\n"
  },
  {
    "path": "UserClient/build/asset-manifest.json",
    "chars": 466,
    "preview": "{\n  \"main.css\": \"static/css/main.d82984ea.css\",\n  \"main.css.map\": \"static/css/main.d82984ea.css.map\",\n  \"main.js\": \"stat"
  },
  {
    "path": "UserClient/build/index.html",
    "chars": 549,
    "preview": "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-sca"
  },
  {
    "path": "UserClient/build/service-worker.js",
    "chars": 3401,
    "preview": "\"use strict\";var precacheConfig=[[\"./index.html\",\"1302f2c4fba2f609afcdf1551e48fd85\"],[\"./static/css/main.d82984ea.css\",\""
  },
  {
    "path": "UserClient/build/static/css/main.d82984ea.css",
    "chars": 39821,
    "preview": "@import url(https://rsms.me/inter/inter-ui.css);.left{float:left}#patientStyle{left:0;position:absolute;font-size:1rem;o"
  },
  {
    "path": "UserClient/build/static/js/main.477a304c.js",
    "chars": 6476706,
    "preview": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/**"
  },
  {
    "path": "UserClient/config/env.js",
    "chars": 3370,
    "preview": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst paths = require('./paths');\n\n// Make sure t"
  },
  {
    "path": "UserClient/config/paths.js",
    "chars": 1975,
    "preview": "'use strict';\n\nconst path = require('path');\nconst fs = require('fs');\nconst url = require('url');\n\n// Make sure any sym"
  },
  {
    "path": "UserClient/config/polyfills.js",
    "chars": 445,
    "preview": "\n\nif(typeof Promise === 'undefined') {\n  //Rejection tracking prevents a common issue where React gets into an\n  //incon"
  },
  {
    "path": "UserClient/config/webpack.config.dev.js",
    "chars": 11155,
    "preview": "const autoprefixer = require('autoprefixer');\nconst path = require('path');\nconst webpack = require('webpack');\nconst Ht"
  },
  {
    "path": "UserClient/config/webpack.config.prod.js",
    "chars": 13894,
    "preview": "\n\nconst autoprefixer = require('autoprefixer');\nconst path = require('path');\nconst webpack = require('webpack');\nconst "
  },
  {
    "path": "UserClient/config/webpackDevServer.config.js",
    "chars": 5461,
    "preview": "'use strict';\n\nconst errorOverlayMiddleware = require('react-dev-utils/errorOverlayMiddleware');\nconst noopServiceWorker"
  },
  {
    "path": "UserClient/electron-starter.js",
    "chars": 2102,
    "preview": "//starts electron\n\nconst electron = require('electron');\n//Module to control application life.\nconst app = electron.app;"
  },
  {
    "path": "UserClient/package.json",
    "chars": 2631,
    "preview": "{\n  \"name\": \"frontend\",\n  \"version\": \"0.2.0\",\n  \"private\": true,\n  \"author\": \"Viral Media\",\n  \"homepage\": \"./\",\n  \"main\""
  },
  {
    "path": "UserClient/public/index.html",
    "chars": 714,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-wid"
  },
  {
    "path": "UserClient/public/manifest.json",
    "chars": 317,
    "preview": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n     "
  },
  {
    "path": "UserClient/scripts/build.js",
    "chars": 4915,
    "preview": "'use strict';\n\n// Do this as the first thing so that any code reading it knows the right env.\nprocess.env.BABEL_ENV = 'p"
  },
  {
    "path": "UserClient/scripts/start.js",
    "chars": 3123,
    "preview": "'use strict';\n\n// Do this as the first thing so that any code reading it knows the right env.\nprocess.env.BABEL_ENV = 'd"
  },
  {
    "path": "UserClient/src/DropDownMenu.jsx",
    "chars": 834,
    "preview": "import React, { Component } from 'react';\nimport './dropdownmenu.css';\nimport {store} from './reduxStore';\nimport {CLEAR"
  },
  {
    "path": "UserClient/src/Ethereum.js",
    "chars": 11784,
    "preview": "import Web3 from 'web3';\nimport contract from 'truffle-contract';\nimport Promise from 'bluebird';\nimport {keystore, sign"
  },
  {
    "path": "UserClient/src/Footer.js",
    "chars": 254,
    "preview": "import React, { Component } from 'react';\n\nclass Footer extends Component {\n  render () {\n    return  (\n      <footer cl"
  },
  {
    "path": "UserClient/src/Header.js",
    "chars": 249,
    "preview": "import React, { Component } from 'react';\n\nclass Header extends Component {\n  render () {\n    return  (\n      <header cl"
  },
  {
    "path": "UserClient/src/RPCClient.js",
    "chars": 1650,
    "preview": "import Promise from 'bluebird';\nimport Ethereum from './Ethereum';\n\nlet requestNonce = 0;\n\nclass RPCClient {\n  construct"
  },
  {
    "path": "UserClient/src/constants.js",
    "chars": 271,
    "preview": "const SET_USER = 'SET USER';\nconst CLEAR_USER = 'CLEAR USER';\nconst SET_RELATIONSHIP = 'SET RELATIONSHIP';\nconst SET_VIE"
  },
  {
    "path": "UserClient/src/dropdownmenu.css",
    "chars": 302,
    "preview": " .signout {\n  position: absolute;\n  top: 10vh;\n  right: 0;\n  z-index: 100;\n  /*border: 1px solid;*/\n}\n\n.signout > button"
  },
  {
    "path": "UserClient/src/electron-wait-react.js",
    "chars": 636,
    "preview": "//waits for the react dev server to start before starting electron\n\nconst net = require('net');\nconst port = process.env"
  },
  {
    "path": "UserClient/src/home/Home.js",
    "chars": 10618,
    "preview": "import React, { Component } from 'react';\nimport Switch from 'react-toggle-switch';\nimport RPCClient from '../RPCClient'"
  },
  {
    "path": "UserClient/src/home/home.css",
    "chars": 8597,
    "preview": "@import url('https://rsms.me/inter/inter-ui.css');\n\n/*------------------------GENERAL------------------------*/\nbody {\n "
  },
  {
    "path": "UserClient/src/home/home.scss",
    "chars": 268,
    "preview": "#homepage {\n  ul {\n    list-style: none;\n  }\n\n  #loginPane {\n    display: flex;\n\n    >div {\n      flex: 1;\n    }\n\n    #l"
  },
  {
    "path": "UserClient/src/home/reducer.js",
    "chars": 582,
    "preview": "import {SET_USER, CLEAR_USER} from '../constants';\n\nfunction homeReducer (state, action) {\n  if(state === undefined) {\n "
  },
  {
    "path": "UserClient/src/index.js",
    "chars": 1492,
    "preview": "import React, {Component} from 'react';\nimport { PersistGate } from 'redux-persist/es/integration/react';\nimport {render"
  },
  {
    "path": "UserClient/src/patient/Patient.jsx",
    "chars": 2201,
    "preview": "import React, { Component } from 'react';\nimport {Route, Link} from 'react-router-dom';\nimport RPCClient from '../RPCCli"
  },
  {
    "path": "UserClient/src/patient/Sidepanel.js",
    "chars": 493,
    "preview": "import React, { Component } from 'react';\nimport {\n  BrowserRouter as Router,\n  Route,\n  Link,\n} from 'react-router-dom'"
  },
  {
    "path": "UserClient/src/patient/reducer.js",
    "chars": 544,
    "preview": "import {SET_RELATIONSHIP, SET_VIEWER, CLEAR_RELATIONSHIP} from '../constants';\n\nfunction patientReducer (state, action) "
  },
  {
    "path": "UserClient/src/patient/views/About.js",
    "chars": 137,
    "preview": "import React from 'react';\n\nconst About  = () => (\n  <div className=\"mainPanel\">\n      about the user\n  </div>\n);\n\nexpor"
  },
  {
    "path": "UserClient/src/patient/views/Home.js",
    "chars": 4740,
    "preview": "import React, { Component } from 'react';\nimport Tests from './Tests';\nimport Ethereum from '../../Ethereum';\nimport RPC"
  },
  {
    "path": "UserClient/src/patient/views/Network.js",
    "chars": 5136,
    "preview": "import React, {Component} from 'react';\nimport Ethereum from '../../Ethereum';\n\nimport {InteractiveForceGraph, ForceGrap"
  },
  {
    "path": "UserClient/src/patient/views/Relationships.js",
    "chars": 24630,
    "preview": "import React, {Component} from 'react';\nimport Ethereum from '../../Ethereum';\nimport RPCClient from '../../RPCClient';\n"
  },
  {
    "path": "UserClient/src/patient/views/Tests.js",
    "chars": 2275,
    "preview": "import React, { Component } from 'react';\nimport RPCClient from '../../RPCClient';\nimport Ethereum from '../../Ethereum'"
  },
  {
    "path": "UserClient/src/patient/views/Topics.js",
    "chars": 151,
    "preview": "import React from 'react';\n\nconst Topics = () => (\n  <div className=\"mainPanel\">\n        something else goes here\n  </di"
  },
  {
    "path": "UserClient/src/patient/views/chart.css",
    "chars": 102,
    "preview": "\nsvg {\n\t/*border: 1px solid;*/\n    transform-origin: 0px 0px 0px;\n}\n\nsvg > text {\n\tfont-weight: 600;\n}"
  },
  {
    "path": "UserClient/src/patient/views/home.css",
    "chars": 7147,
    "preview": ".left {\n  float: left;\n}\n\n#patientStyle {\n  margin: 0;\n  padding: 0;\n  top: 0;\n  left: 0;\n  position: absolute;\n  font-s"
  },
  {
    "path": "UserClient/src/provider/Provider.jsx",
    "chars": 1900,
    "preview": "import React, { Component } from 'react';\nimport {Route, Link, Switch} from 'react-router-dom';\nimport RPCClient from '."
  },
  {
    "path": "UserClient/src/provider/Sidepanel.js",
    "chars": 493,
    "preview": "import React, { Component } from 'react';\nimport {\n  BrowserRouter as Router,\n  Route,\n  Link,\n} from 'react-router-dom'"
  },
  {
    "path": "UserClient/src/provider/patientList.js",
    "chars": 153,
    "preview": "import React from 'react';\n\nconst PatientList = () => (\n  <div className=\"mainPanel\">\n        list of patients\n  </div>\n"
  },
  {
    "path": "UserClient/src/provider/views/Home.js",
    "chars": 11189,
    "preview": "import React, { Component } from 'react';\nimport Ethereum from '../../Ethereum';\nimport Promise from 'bluebird';\nimport "
  },
  {
    "path": "UserClient/src/provider/views/PatientList.js",
    "chars": 2185,
    "preview": "import React, { Component } from 'react';\nimport RPCClient from '../../RPCClient';\nimport {connect} from 'react-redux';\n"
  },
  {
    "path": "UserClient/src/provider/views/home.css",
    "chars": 5225,
    "preview": "#providerStyle {\n  margin: 0;\n  padding: 0;\n  top: 0;\n  left: 0;\n  position: absolute;\n  font-size: 1rem;\n  height: 100v"
  },
  {
    "path": "UserClient/src/reduxStore.js",
    "chars": 655,
    "preview": "import { createStore, combineReducers } from 'redux';\nimport storage from 'redux-persist/es/storage';\nimport { persistSt"
  },
  {
    "path": "UserClient/src/registerServiceWorker.js",
    "chars": 4138,
    "preview": "//In production, we register a service worker to serve assets from local cache.\n\n//This lets the app load faster on subs"
  },
  {
    "path": "build-linux-amd4.sh",
    "chars": 699,
    "preview": "#!/bin/bash\n\n#setup the build directory\nrm -r build\nmkdir build\n\n#get node\ncp \"$(which node)\" build\n\n#build the Database"
  },
  {
    "path": "main.go",
    "chars": 2251,
    "preview": "package main\n\nimport (\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"os/signal\"\n\t\"syscall\"\n\n\t\"github.com/mitmedialab/medrec/DatabaseManager\""
  },
  {
    "path": "presentations/blockchain-and-medrec.html",
    "chars": 1302843,
    "preview": "<!DOCTYPE html>\n\t<html class=\"sl-root decks export loaded ua-phantomjs reveal-viewport theme-font-josefine theme-color-b"
  },
  {
    "path": "scripts/createDocuments.go",
    "chars": 612,
    "preview": "package main\n\nimport (\n\t\"database/sql\"\n\t_ \"github.com/go-sql-driver/mysql\"\n\t\"log\"\n)\n\n//returns a pointer to an sql datab"
  },
  {
    "path": "scripts/insert-patient.sql",
    "chars": 135,
    "preview": "USE medrec-v1\nINSERT INTO patient_info (PatientID, LastName, FirstName, Gender, DOB)\nVALUES (004, 'Smith', 'Jane', 'F', "
  },
  {
    "path": "scripts/medrec-v1.sql",
    "chars": 10725,
    "preview": "CREATE DATABASE  IF NOT EXISTS `medrec-v1` /*!40100 DEFAULT CHARACTER SET latin1 */;\nUSE `medrec-v1`;\n-- MySQL dump 10.1"
  },
  {
    "path": "scripts/medrecWebApp.sql",
    "chars": 2368,
    "preview": "CREATE DATABASE  IF NOT EXISTS `medrecWebApp` /*!40100 DEFAULT CHARACTER SET latin1 */;\nUSE `medrecWebApp`;\n-- MySQL dum"
  },
  {
    "path": "scripts/test-db.sql",
    "chars": 6232,
    "preview": "# ************************************************************\n# Sequel Pro SQL dump\n# Version 4541\n#\n# http://www.seque"
  }
]

// ... and 2 more files (download for full content)

About this extraction

This page contains the full source code of the mitmedialab/medrec GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 126 files (10.5 MB), approximately 2.7M tokens, and a symbol index with 3176 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!