/*!
 * jQuery JavaScript Library v3.4.1
 * https://jquery.com/
 *
 * Includes Sizzle.js
 * https://sizzlejs.com/
 *
 * Copyright JS Foundation and other contributors
 * Released under the MIT license
 * https://jquery.org/license
 *
 * Date: 2019-05-01T21:04Z
 */
( function( global, factory ) {

	"use strict";

	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 have a `window` with a `document`
		// (such as Node.js), expose a 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 ) {

// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
// enough that all such attempts are guarded in a try block.
"use strict";

var arr = [];

var document = window.document;

var getProto = Object.getPrototypeOf;

var slice = arr.slice;

var concat = arr.concat;

var push = arr.push;

var indexOf = arr.indexOf;

var class2type = {};

var toString = class2type.toString;

var hasOwn = class2type.hasOwnProperty;

var fnToString = hasOwn.toString;

var ObjectFunctionString = fnToString.call( Object );

var support = {};

var isFunction = function isFunction( obj ) {

      // Support: Chrome <=57, Firefox <=52
      // In some browsers, typeof returns "function" for HTML <object> elements
      // (i.e., `typeof document.createElement( "object" ) === "function"`).
      // We don't want to classify *any* DOM node as a function.
      return typeof obj === "function" && typeof obj.nodeType !== "number";
  };


var isWindow = function isWindow( obj ) {
		return obj != null && obj === obj.window;
	};




	var preservedScriptAttributes = {
		type: true,
		src: true,
		nonce: true,
		noModule: true
	};

	function DOMEval( code, node, doc ) {
		doc = doc || document;

		var i, val,
			script = doc.createElement( "script" );

		script.text = code;
		if ( node ) {
			for ( i in preservedScriptAttributes ) {

				// Support: Firefox 64+, Edge 18+
				// Some browsers don't support the "nonce" property on scripts.
				// On the other hand, just using `getAttribute` is not enough as
				// the `nonce` attribute is reset to an empty string whenever it
				// becomes browsing-context connected.
				// See https://github.com/whatwg/html/issues/2369
				// See https://html.spec.whatwg.org/#nonce-attributes
				// The `node.getAttribute` check was added for the sake of
				// `jQuery.globalEval` so that it can fake a nonce-containing node
				// via an object.
				val = node[ i ] || node.getAttribute && node.getAttribute( i );
				if ( val ) {
					script.setAttribute( i, val );
				}
			}
		}
		doc.head.appendChild( script ).parentNode.removeChild( script );
	}


function toType( obj ) {
	if ( obj == null ) {
		return obj + "";
	}

	// Support: Android <=2.3 only (functionish RegExp)
	return typeof obj === "object" || typeof obj === "function" ?
		class2type[ toString.call( obj ) ] || "object" :
		typeof obj;
}
/* global Symbol */
// Defining this global in .eslintrc.json would create a danger of using the global
// unguarded in another place, it seems safer to define global only for this module



var
	version = "3.4.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.0 only
	// Make sure we trim BOM and NBSP
	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;

jQuery.fn = jQuery.prototype = {

	// The current version of jQuery being used
	jquery: version,

	constructor: jQuery,

	// 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 all the elements in a clean array
		if ( num == null ) {
			return slice.call( this );
		}

		// Return just the one element from the set
		return num < 0 ? this[ num + this.length ] : this[ num ];
	},

	// 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;

		// Return the newly-formed element set
		return ret;
	},

	// Execute a callback for every element in the matched set.
	each: function( callback ) {
		return jQuery.each( this, callback );
	},

	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();
	},

	// For internal use only.
	// Behaves like an Array's method, not like a jQuery method.
	push: push,
	sort: arr.sort,
	splice: arr.splice
};

jQuery.extend = jQuery.fn.extend = function() {
	var options, name, src, copy, copyIsArray, 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" && !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 ) {
				copy = options[ name ];

				// Prevent Object.prototype pollution
				// Prevent never-ending loop
				if ( name === "__proto__" || target === copy ) {
					continue;
				}

				// Recurse if we're merging plain objects or arrays
				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
					( copyIsArray = Array.isArray( copy ) ) ) ) {
					src = target[ name ];

					// Ensure proper type for the source value
					if ( copyIsArray && !Array.isArray( src ) ) {
						clone = [];
					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
						clone = {};
					} else {
						clone = src;
					}
					copyIsArray = false;

					// 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() {},

	isPlainObject: function( obj ) {
		var proto, Ctor;

		// Detect obvious negatives
		// Use toString instead of jQuery.type to catch host objects
		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
			return false;
		}

		proto = getProto( obj );

		// Objects with no prototype (e.g., `Object.create( null )`) are plain
		if ( !proto ) {
			return true;
		}

		// Objects with prototype are plain iff they were constructed by a global Object function
		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
	},

	isEmptyObject: function( obj ) {
		var name;

		for ( name in obj ) {
			return false;
		}
		return true;
	},

	// Evaluates a script in a global context
	globalEval: function( code, options ) {
		DOMEval( code, { nonce: options && options.nonce } );
	},

	each: function( obj, callback ) {
		var length, i = 0;

		if ( isArrayLike( obj ) ) {
			length = obj.length;
			for ( ; i < length; i++ ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		} else {
			for ( i in obj ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		}

		return obj;
	},

	// Support: Android <=4.0 only
	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 ) {
		return arr == null ? -1 : indexOf.call( arr, elem, i );
	},

	// Support: Android <=4.0 only, PhantomJS 1 only
	// push.apply(_, arraylike) throws on ancient WebKit
	merge: function( first, second ) {
		var len = +second.length,
			j = 0,
			i = first.length;

		for ( ; j < len; j++ ) {
			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 length, value,
			i = 0,
			ret = [];

		// Go through the array, translating each of the items to their new values
		if ( isArrayLike( elems ) ) {
			length = elems.length;
			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,

	// jQuery.support is not used in Core but other projects attach their
	// properties to it so it needs to exist.
	support: support
} );

if ( typeof Symbol === "function" ) {
	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
}

// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( i, name ) {
	class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );

function isArrayLike( obj ) {

	// Support: real iOS 8.2 only (not reproducible in simulator)
	// `in` check used to prevent JIT error (gh-2145)
	// hasOwn isn't used here due to false negatives
	// regarding Nodelist length in IE
	var length = !!obj && "length" in obj && obj.length,
		type = toType( obj );

	if ( isFunction( obj ) || isWindow( obj ) ) {
		return false;
	}

	return type === "array" || length === 0 ||
		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}
var Sizzle =
/*!
 * Sizzle CSS Selector Engine v2.3.4
 * https://sizzlejs.com/
 *
 * Copyright JS Foundation and other contributors
 * Released under the MIT license
 * https://js.foundation/
 *
 * Date: 2019-04-08
 */
(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" + 1 * new Date(),
	preferredDoc = window.document,
	dirruns = 0,
	done = 0,
	classCache = createCache(),
	tokenCache = createCache(),
	compilerCache = createCache(),
	nonnativeSelectorCache = createCache(),
	sortOrder = function( a, b ) {
		if ( a === b ) {
			hasDuplicate = true;
		}
		return 0;
	},

	// Instance methods
	hasOwn = ({}).hasOwnProperty,
	arr = [],
	pop = arr.pop,
	push_native = arr.push,
	push = arr.push,
	slice = arr.slice,
	// Use a stripped-down indexOf as it's faster than native
	// https://jsperf.com/thor-indexof-vs-for/5
	indexOf = function( list, elem ) {
		var i = 0,
			len = list.length;
		for ( ; i < len; i++ ) {
			if ( list[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

	// http://www.w3.org/TR/css3-selectors/#whitespace
	whitespace = "[\\x20\\t\\r\\n\\f]",

	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",

	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
		// Operator (capture 2)
		"*([*^$|!~]?=)" + whitespace +
		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
		"*\\]",

	pseudos = ":(" + identifier + ")(?:\\((" +
		// 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
	rwhitespace = new RegExp( whitespace + "+", "g" ),
	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),

	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
	rdescend = new RegExp( whitespace + "|>" ),

	rpseudo = new RegExp( pseudos ),
	ridentifier = new RegExp( "^" + identifier + "$" ),

	matchExpr = {
		"ID": new RegExp( "^#(" + identifier + ")" ),
		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
		"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" )
	},

	rhtml = /HTML$/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 = /[+~]/,

	// 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 );
	},

	// CSS string/identifier serialization
	// https://drafts.csswg.org/cssom/#common-serializing-idioms
	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
	fcssescape = function( ch, asCodePoint ) {
		if ( asCodePoint ) {

			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
			if ( ch === "\0" ) {
				return "\uFFFD";
			}

			// Control characters and (dependent upon position) numbers get escaped as code points
			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
		}

		// Other potentially-special ASCII characters get backslash-escaped
		return "\\" + ch;
	},

	// Used for iframes
	// See setDocument()
	// Removing the function wrapper causes a "Permission Denied"
	// error in IE
	unloadHandler = function() {
		setDocument();
	},

	inDisabledFieldset = addCombinator(
		function( elem ) {
			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
		},
		{ dir: "parentNode", next: "legend" }
	);

// 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 m, i, elem, nid, match, groups, newSelector,
		newContext = context && context.ownerDocument,

		// nodeType defaults to 9, since context defaults to document
		nodeType = context ? context.nodeType : 9;

	results = results || [];

	// Return early from calls with invalid selector or context
	if ( typeof selector !== "string" || !selector ||
		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {

		return results;
	}

	// Try to shortcut find operations (as opposed to filters) in HTML documents
	if ( !seed ) {

		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
			setDocument( context );
		}
		context = context || document;

		if ( documentIsHTML ) {

			// If the selector is sufficiently simple, try using a "get*By*" DOM method
			// (excepting DocumentFragment context, where the methods don't exist)
			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {

				// ID selector
				if ( (m = match[1]) ) {

					// Document context
					if ( nodeType === 9 ) {
						if ( (elem = context.getElementById( m )) ) {

							// Support: IE, Opera, Webkit
							// TODO: identify versions
							// getElementById can match elements by name instead of ID
							if ( elem.id === m ) {
								results.push( elem );
								return results;
							}
						} else {
							return results;
						}

					// Element context
					} else {

						// Support: IE, Opera, Webkit
						// TODO: identify versions
						// getElementById can match elements by name instead of ID
						if ( newContext && (elem = newContext.getElementById( m )) &&
							contains( context, elem ) &&
							elem.id === m ) {

							results.push( elem );
							return results;
						}
					}

				// Type selector
				} else if ( match[2] ) {
					push.apply( results, context.getElementsByTagName( selector ) );
					return results;

				// Class selector
				} else if ( (m = match[3]) && support.getElementsByClassName &&
					context.getElementsByClassName ) {

					push.apply( results, context.getElementsByClassName( m ) );
					return results;
				}
			}

			// Take advantage of querySelectorAll
			if ( support.qsa &&
				!nonnativeSelectorCache[ selector + " " ] &&
				(!rbuggyQSA || !rbuggyQSA.test( selector )) &&

				// Support: IE 8 only
				// Exclude object elements
				(nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {

				newSelector = selector;
				newContext = context;

				// qSA considers elements outside a scoping root when evaluating child or
				// descendant combinators, which is not what we want.
				// In such cases, we work around the behavior by prefixing every selector in the
				// list with an ID selector referencing the scope context.
				// Thanks to Andrew Dupont for this technique.
				if ( nodeType === 1 && rdescend.test( selector ) ) {

					// Capture the context ID, setting it first if necessary
					if ( (nid = context.getAttribute( "id" )) ) {
						nid = nid.replace( rcssescape, fcssescape );
					} else {
						context.setAttribute( "id", (nid = expando) );
					}

					// Prefix every selector in the list
					groups = tokenize( selector );
					i = groups.length;
					while ( i-- ) {
						groups[i] = "#" + nid + " " + toSelector( groups[i] );
					}
					newSelector = groups.join( "," );

					// Expand context for sibling selectors
					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
						context;
				}

				try {
					push.apply( results,
						newContext.querySelectorAll( newSelector )
					);
					return results;
				} catch ( qsaError ) {
					nonnativeSelectorCache( selector, true );
				} finally {
					if ( nid === expando ) {
						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 element and returns a boolean result
 */
function assert( fn ) {
	var el = document.createElement("fieldset");

	try {
		return !!fn( el );
	} catch (e) {
		return false;
	} finally {
		// Remove from its parent by default
		if ( el.parentNode ) {
			el.parentNode.removeChild( el );
		}
		// release memory in IE
		el = 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 = arr.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 &&
			a.sourceIndex - b.sourceIndex;

	// 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 :enabled/:disabled
 * @param {Boolean} disabled true for :disabled; false for :enabled
 */
function createDisabledPseudo( disabled ) {

	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
	return function( elem ) {

		// Only certain elements can match :enabled or :disabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
		if ( "form" in elem ) {

			// Check for inherited disabledness on relevant non-disabled elements:
			// * listed form-associated elements in a disabled fieldset
			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
			// * option elements in a disabled optgroup
			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
			// All such elements have a "form" property.
			if ( elem.parentNode && elem.disabled === false ) {

				// Option elements defer to a parent optgroup if present
				if ( "label" in elem ) {
					if ( "label" in elem.parentNode ) {
						return elem.parentNode.disabled === disabled;
					} else {
						return elem.disabled === disabled;
					}
				}

				// Support: IE 6 - 11
				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
				return elem.isDisabled === disabled ||

					// Where there is no isDisabled, check manually
					/* jshint -W018 */
					elem.isDisabled !== !disabled &&
						inDisabledFieldset( elem ) === disabled;
			}

			return elem.disabled === disabled;

		// Try to winnow out elements that can't be disabled before trusting the disabled property.
		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
		// even exist on them, let alone have a boolean value.
		} else if ( "label" in elem ) {
			return elem.disabled === disabled;
		}

		// Remaining elements are neither :enabled nor :disabled
		return false;
	};
}

/**
 * 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 !== "undefined" && 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 ) {
	var namespace = elem.namespaceURI,
		docElem = (elem.ownerDocument || elem).documentElement;

	// Support: IE <=8
	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
	// https://bugs.jquery.com/ticket/4833
	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
};

/**
 * 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, subWindow,
		doc = node ? node.ownerDocument || node : preferredDoc;

	// Return early if doc is invalid or already selected
	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
		return document;
	}

	// Update global variables
	document = doc;
	docElem = document.documentElement;
	documentIsHTML = !isXML( document );

	// Support: IE 9-11, Edge
	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
	if ( preferredDoc !== document &&
		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {

		// Support: IE 11, Edge
		if ( subWindow.addEventListener ) {
			subWindow.addEventListener( "unload", unloadHandler, false );

		// Support: IE 9 - 10 only
		} else if ( subWindow.attachEvent ) {
			subWindow.attachEvent( "onunload", unloadHandler );
		}
	}

	/* Attributes
	---------------------------------------------------------------------- */

	// Support: IE<8
	// Verify that getAttribute really returns attributes and not properties
	// (excepting IE8 booleans)
	support.attributes = assert(function( el ) {
		el.className = "i";
		return !el.getAttribute("className");
	});

	/* getElement(s)By*
	---------------------------------------------------------------------- */

	// Check if getElementsByTagName("*") returns only elements
	support.getElementsByTagName = assert(function( el ) {
		el.appendChild( document.createComment("") );
		return !el.getElementsByTagName("*").length;
	});

	// Support: IE<9
	support.getElementsByClassName = rnative.test( document.getElementsByClassName );

	// Support: IE<10
	// Check if getElementById returns elements by name
	// The broken getElementById methods don't pick up programmatically-set names,
	// so use a roundabout getElementsByName test
	support.getById = assert(function( el ) {
		docElem.appendChild( el ).id = expando;
		return !document.getElementsByName || !document.getElementsByName( expando ).length;
	});

	// ID filter and find
	if ( support.getById ) {
		Expr.filter["ID"] = function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				return elem.getAttribute("id") === attrId;
			};
		};
		Expr.find["ID"] = function( id, context ) {
			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
				var elem = context.getElementById( id );
				return elem ? [ elem ] : [];
			}
		};
	} else {
		Expr.filter["ID"] =  function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				var node = typeof elem.getAttributeNode !== "undefined" &&
					elem.getAttributeNode("id");
				return node && node.value === attrId;
			};
		};

		// Support: IE 6 - 7 only
		// getElementById is not reliable as a find shortcut
		Expr.find["ID"] = function( id, context ) {
			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
				var node, i, elems,
					elem = context.getElementById( id );

				if ( elem ) {

					// Verify the id attribute
					node = elem.getAttributeNode("id");
					if ( node && node.value === id ) {
						return [ elem ];
					}

					// Fall back on getElementsByName
					elems = context.getElementsByName( id );
					i = 0;
					while ( (elem = elems[i++]) ) {
						node = elem.getAttributeNode("id");
						if ( node && node.value === id ) {
							return [ elem ];
						}
					}
				}

				return [];
			}
		};
	}

	// Tag
	Expr.find["TAG"] = support.getElementsByTagName ?
		function( tag, context ) {
			if ( typeof context.getElementsByTagName !== "undefined" ) {
				return context.getElementsByTagName( tag );

			// DocumentFragment nodes don't have gEBTN
			} else if ( support.qsa ) {
				return context.querySelectorAll( tag );
			}
		} :

		function( tag, context ) {
			var elem,
				tmp = [],
				i = 0,
				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
				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 !== "undefined" && 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 https://bugs.jquery.com/ticket/13378
	rbuggyQSA = [];

	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
		// Build QSA regex
		// Regex strategy adopted from Diego Perini
		assert(function( el ) {
			// 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
			// https://bugs.jquery.com/ticket/12359
			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
				"<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
			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
			}

			// Support: IE8
			// Boolean attributes and "value" are not treated correctly
			if ( !el.querySelectorAll("[selected]").length ) {
				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
			}

			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
				rbuggyQSA.push("~=");
			}

			// 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 ( !el.querySelectorAll(":checked").length ) {
				rbuggyQSA.push(":checked");
			}

			// Support: Safari 8+, iOS 8+
			// https://bugs.webkit.org/show_bug.cgi?id=136851
			// In-page `selector#id sibling-combinator selector` fails
			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
				rbuggyQSA.push(".#.+[+~]");
			}
		});

		assert(function( el ) {
			el.innerHTML = "<a href='' disabled='disabled'></a>" +
				"<select disabled='disabled'><option/></select>";

			// Support: Windows 8 Native Apps
			// The type and name attributes are restricted during .innerHTML assignment
			var input = document.createElement("input");
			input.setAttribute( "type", "hidden" );
			el.appendChild( input ).setAttribute( "name", "D" );

			// Support: IE8
			// Enforce case-sensitivity of name attribute
			if ( el.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 ( el.querySelectorAll(":enabled").length !== 2 ) {
				rbuggyQSA.push( ":enabled", ":disabled" );
			}

			// Support: IE9-11+
			// IE's :disabled selector does not pick up the children of disabled fieldsets
			docElem.appendChild( el ).disabled = true;
			if ( el.querySelectorAll(":disabled").length !== 2 ) {
				rbuggyQSA.push( ":enabled", ":disabled" );
			}

			// Opera 10-11 does not throw on post-comma invalid pseudos
			el.querySelectorAll("*,:x");
			rbuggyQSA.push(",.*:");
		});
	}

	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
		docElem.webkitMatchesSelector ||
		docElem.mozMatchesSelector ||
		docElem.oMatchesSelector ||
		docElem.msMatchesSelector) )) ) {

		assert(function( el ) {
			// Check to see if it's possible to do matchesSelector
			// on a disconnected node (IE 9)
			support.disconnectedMatch = matches.call( el, "*" );

			// This should fail with an exception
			// Gecko does not error, returns false instead
			matches.call( el, "[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 self-exclusive
	// 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 === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
				return -1;
			}
			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
				return 1;
			}

			// Maintain original order
			return sortInput ?
				( indexOf( sortInput, a ) - indexOf( 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 === document ? -1 :
				b === document ? 1 :
				aup ? -1 :
				bup ? 1 :
				sortInput ?
				( indexOf( sortInput, a ) - indexOf( 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 document;
};

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 );
	}

	if ( support.matchesSelector && documentIsHTML &&
		!nonnativeSelectorCache[ expr + " " ] &&
		( !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) {
			nonnativeSelectorCache( expr, true );
		}
	}

	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.escape = function( sel ) {
	return (sel + "").replace( rcssescape, fcssescape );
};

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 !== "undefined" && 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.replace( rwhitespace, " " ) + " " ).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, uniqueCache, outerCache, node, nodeIndex, start,
						dir = simple !== forward ? "nextSibling" : "previousSibling",
						parent = elem.parentNode,
						name = ofType && elem.nodeName.toLowerCase(),
						useCache = !xml && !ofType,
						diff = false;

					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

							// ...in a gzip-friendly way
							node = parent;
							outerCache = node[ expando ] || (node[ expando ] = {});

							// Support: IE <9 only
							// Defend against cloned attroperties (jQuery gh-1709)
							uniqueCache = outerCache[ node.uniqueID ] ||
								(outerCache[ node.uniqueID ] = {});

							cache = uniqueCache[ type ] || [];
							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
							diff = nodeIndex && 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 ) {
									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
									break;
								}
							}

						} else {
							// Use previously-cached element index if available
							if ( useCache ) {
								// ...in a gzip-friendly way
								node = elem;
								outerCache = node[ expando ] || (node[ expando ] = {});

								// Support: IE <9 only
								// Defend against cloned attroperties (jQuery gh-1709)
								uniqueCache = outerCache[ node.uniqueID ] ||
									(outerCache[ node.uniqueID ] = {});

								cache = uniqueCache[ type ] || [];
								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
								diff = nodeIndex;
							}

							// xml :nth-child(...)
							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
							if ( diff === false ) {
								// 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 ) {
											outerCache = node[ expando ] || (node[ expando ] = {});

											// Support: IE <9 only
											// Defend against cloned attroperties (jQuery gh-1709)
											uniqueCache = outerCache[ node.uniqueID ] ||
												(outerCache[ node.uniqueID ] = {});

											uniqueCache[ 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( 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 );
					// Don't keep the element (issue #299)
					input[0] = null;
					return !results.pop();
				};
		}),

		"has": markFunction(function( selector ) {
			return function( elem ) {
				return Sizzle( selector, elem ).length > 0;
			};
		}),

		"contains": markFunction(function( text ) {
			text = text.replace( runescape, funescape );
			return function( elem ) {
				return ( elem.textContent || 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": createDisabledPseudo( false ),
		"disabled": createDisabledPseudo( 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 > length ?
					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,
		skip = combinator.next,
		key = skip || dir,
		checkNonElements = base && key === "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 );
				}
			}
			return false;
		} :

		// Check against all ancestor/preceding elements
		function( elem, context, xml ) {
			var oldCache, uniqueCache, outerCache,
				newCache = [ dirruns, doneName ];

			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator 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 ] = {});

						// Support: IE <9 only
						// Defend against cloned attroperties (jQuery gh-1709)
						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});

						if ( skip && skip === elem.nodeName.toLowerCase() ) {
							elem = elem[ dir ] || elem;
						} else if ( (oldCache = uniqueCache[ key ]) &&
							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
							uniqueCache[ key ] = newCache;

							// A match means we're done; a fail means we have to keep checking
							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
								return true;
							}
						}
					}
				}
			}
			return false;
		};
}

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( 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( checkContext, elem ) > -1;
		}, implicitRelative, true ),
		matchers = [ function( elem, context, xml ) {
			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
				(checkContext = context).nodeType ?
					matchContext( elem, context, xml ) :
					matchAnyContext( elem, context, xml ) );
			// Avoid hanging onto element (issue #299)
			checkContext = null;
			return ret;
		} ];

	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 || outermost;
			}

			// Add elements passing elementMatchers directly to results
			// 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;
					if ( !context && elem.ownerDocument !== document ) {
						setDocument( elem );
						xml = !documentIsHTML;
					}
					while ( (matcher = elementMatchers[j++]) ) {
						if ( matcher( elem, context || document, 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 );
					}
				}
			}

			// `i` is now the count of elements visited above, and adding it to `matchedCount`
			// makes the latter nonnegative.
			matchedCount += i;

			// Apply set filters to unmatched elements
			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
			// no element matchers and no seed.
			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
			// numerically zero.
			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 only one selector in the list and no seed
	// (the latter of which guarantees us context)
	if ( match.length === 1 ) {

		// Reduce context if the leading compound selector is an ID
		tokens = match[0] = match[0].slice( 0 );
		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
				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,
		!context || 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-35+
// 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( el ) {
	// Should return 1, but returns 4 (following)
	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
});

// Support: IE<8
// Prevent attribute/property "interpolation"
// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
if ( !assert(function( el ) {
	el.innerHTML = "<a href='#'></a>";
	return el.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( el ) {
	el.innerHTML = "<input/>";
	el.firstChild.setAttribute( "value", "" );
	return el.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( el ) {
	return el.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;

// Deprecated
jQuery.expr[ ":" ] = jQuery.expr.pseudos;
jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;
jQuery.escapeSelector = Sizzle.escape;




var dir = function( elem, dir, until ) {
	var matched = [],
		truncate = until !== undefined;

	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
		if ( elem.nodeType === 1 ) {
			if ( truncate && jQuery( elem ).is( until ) ) {
				break;
			}
			matched.push( elem );
		}
	}
	return matched;
};


var siblings = function( n, elem ) {
	var matched = [];

	for ( ; n; n = n.nextSibling ) {
		if ( n.nodeType === 1 && n !== elem ) {
			matched.push( n );
		}
	}

	return matched;
};


var rneedsContext = jQuery.expr.match.needsContext;



function nodeName( elem, name ) {

  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();

};
var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );



// Implement the identical functionality for filter and not
function winnow( elements, qualifier, not ) {
	if ( isFunction( qualifier ) ) {
		return jQuery.grep( elements, function( elem, i ) {
			return !!qualifier.call( elem, i, elem ) !== not;
		} );
	}

	// Single element
	if ( qualifier.nodeType ) {
		return jQuery.grep( elements, function( elem ) {
			return ( elem === qualifier ) !== not;
		} );
	}

	// Arraylike of elements (jQuery, arguments, Array)
	if ( typeof qualifier !== "string" ) {
		return jQuery.grep( elements, function( elem ) {
			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
		} );
	}

	// Filtered directly for both simple and complex selectors
	return jQuery.filter( qualifier, elements, not );
}

jQuery.filter = function( expr, elems, not ) {
	var elem = elems[ 0 ];

	if ( not ) {
		expr = ":not(" + expr + ")";
	}

	if ( elems.length === 1 && elem.nodeType === 1 ) {
		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
	}

	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
		return elem.nodeType === 1;
	} ) );
};

jQuery.fn.extend( {
	find: function( selector ) {
		var i, ret,
			len = this.length,
			self = this;

		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;
					}
				}
			} ) );
		}

		ret = this.pushStack( [] );

		for ( i = 0; i < len; i++ ) {
			jQuery.find( selector, self[ i ], ret );
		}

		return len > 1 ? jQuery.uniqueSort( ret ) : 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,

	// 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 <)
	// Shortcut simple #id case for speed
	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,

	init = jQuery.fn.init = function( selector, context, root ) {
		var match, elem;

		// HANDLE: $(""), $(null), $(undefined), $(false)
		if ( !selector ) {
			return this;
		}

		// Method init() accepts an alternate rootjQuery
		// so migrate can support jQuery.sub (gh-2101)
		root = root || rootjQuery;

		// Handle HTML strings
		if ( typeof selector === "string" ) {
			if ( selector[ 0 ] === "<" &&
				selector[ 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;

					// Option to run 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 ( 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 ] );

					if ( elem ) {

						// Inject the element directly into the jQuery object
						this[ 0 ] = elem;
						this.length = 1;
					}
					return this;
				}

			// HANDLE: $(expr, $(...))
			} else if ( !context || context.jquery ) {
				return ( context || root ).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[ 0 ] = selector;
			this.length = 1;
			return this;

		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( isFunction( selector ) ) {
			return root.ready !== undefined ?
				root.ready( selector ) :

				// Execute immediately if ready is not present
				selector( jQuery );
		}

		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.fn.extend( {
	has: function( target ) {
		var targets = jQuery( target, this ),
			l = targets.length;

		return this.filter( function() {
			var i = 0;
			for ( ; i < l; i++ ) {
				if ( jQuery.contains( this, targets[ i ] ) ) {
					return true;
				}
			}
		} );
	},

	closest: function( selectors, context ) {
		var cur,
			i = 0,
			l = this.length,
			matched = [],
			targets = typeof selectors !== "string" && jQuery( selectors );

		// Positional selectors never match, since there's no _selection_ context
		if ( !rneedsContext.test( selectors ) ) {
			for ( ; i < l; i++ ) {
				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {

					// Always skip document fragments
					if ( cur.nodeType < 11 && ( targets ?
						targets.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.uniqueSort( matched ) : matched );
	},

	// Determine the position of an element within the set
	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 indexOf.call( jQuery( elem ), this[ 0 ] );
		}

		// Locate the position of the desired element
		return indexOf.call( this,

			// If it receives a jQuery object, the first element is used
			elem.jquery ? elem[ 0 ] : elem
		);
	},

	add: function( selector, context ) {
		return this.pushStack(
			jQuery.uniqueSort(
				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 ) {
	while ( ( cur = cur[ dir ] ) && 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 dir( elem, "parentNode" );
	},
	parentsUntil: function( elem, i, until ) {
		return dir( elem, "parentNode", until );
	},
	next: function( elem ) {
		return sibling( elem, "nextSibling" );
	},
	prev: function( elem ) {
		return sibling( elem, "previousSibling" );
	},
	nextAll: function( elem ) {
		return dir( elem, "nextSibling" );
	},
	prevAll: function( elem ) {
		return dir( elem, "previousSibling" );
	},
	nextUntil: function( elem, i, until ) {
		return dir( elem, "nextSibling", until );
	},
	prevUntil: function( elem, i, until ) {
		return dir( elem, "previousSibling", until );
	},
	siblings: function( elem ) {
		return siblings( ( elem.parentNode || {} ).firstChild, elem );
	},
	children: function( elem ) {
		return siblings( elem.firstChild );
	},
	contents: function( elem ) {
		if ( typeof elem.contentDocument !== "undefined" ) {
			return elem.contentDocument;
		}

		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
		// Treat the template element as a regular one in browsers that
		// don't support it.
		if ( nodeName( elem, "template" ) ) {
			elem = elem.content || elem;
		}

		return jQuery.merge( [], elem.childNodes );
	}
}, function( name, fn ) {
	jQuery.fn[ name ] = function( until, selector ) {
		var matched = jQuery.map( this, fn, until );

		if ( name.slice( -5 ) !== "Until" ) {
			selector = until;
		}

		if ( selector && typeof selector === "string" ) {
			matched = jQuery.filter( selector, matched );
		}

		if ( this.length > 1 ) {

			// Remove duplicates
			if ( !guaranteedUnique[ name ] ) {
				jQuery.uniqueSort( matched );
			}

			// Reverse order for parents* and prev-derivatives
			if ( rparentsprev.test( name ) ) {
				matched.reverse();
			}
		}

		return this.pushStack( matched );
	};
} );
var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );



// Convert String-formatted options into Object-formatted ones
function createOptions( options ) {
	var object = {};
	jQuery.each( options.match( rnothtmlwhite ) || [], 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" ?
		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,

		// Flag to prevent firing
		locked,

		// Actual callback list
		list = [],

		// Queue of execution data for repeatable lists
		queue = [],

		// Index of currently firing callback (modified by add/remove as needed)
		firingIndex = -1,

		// Fire callbacks
		fire = function() {

			// Enforce single-firing
			locked = locked || options.once;

			// Execute callbacks for all pending executions,
			// respecting firingIndex overrides and runtime changes
			fired = firing = true;
			for ( ; queue.length; firingIndex = -1 ) {
				memory = queue.shift();
				while ( ++firingIndex < list.length ) {

					// Run callback and check for early termination
					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
						options.stopOnFalse ) {

						// Jump to end and forget the data so .add doesn't re-fire
						firingIndex = list.length;
						memory = false;
					}
				}
			}

			// Forget the data if we're done with it
			if ( !options.memory ) {
				memory = false;
			}

			firing = false;

			// Clean up if we're done firing for good
			if ( locked ) {

				// Keep an empty list if we have data for future add calls
				if ( memory ) {
					list = [];

				// Otherwise, this object is spent
				} else {
					list = "";
				}
			}
		},

		// Actual Callbacks object
		self = {

			// Add a callback or a collection of callbacks to the list
			add: function() {
				if ( list ) {

					// If we have memory from a past run, we should fire after adding
					if ( memory && !firing ) {
						firingIndex = list.length - 1;
						queue.push( memory );
					}

					( function add( args ) {
						jQuery.each( args, function( _, arg ) {
							if ( isFunction( arg ) ) {
								if ( !options.unique || !self.has( arg ) ) {
									list.push( arg );
								}
							} else if ( arg && arg.length && toType( arg ) !== "string" ) {

								// Inspect recursively
								add( arg );
							}
						} );
					} )( arguments );

					if ( memory && !firing ) {
						fire();
					}
				}
				return this;
			},

			// Remove a callback from the list
			remove: function() {
				jQuery.each( arguments, function( _, arg ) {
					var index;
					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
						list.splice( index, 1 );

						// Handle firing indexes
						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.length > 0;
			},

			// Remove all callbacks from the list
			empty: function() {
				if ( list ) {
					list = [];
				}
				return this;
			},

			// Disable .fire and .add
			// Abort any current/pending executions
			// Clear all callbacks and values
			disable: function() {
				locked = queue = [];
				list = memory = "";
				return this;
			},
			disabled: function() {
				return !list;
			},

			// Disable .fire
			// Also disable .add unless we have memory (since it would have no effect)
			// Abort any pending executions
			lock: function() {
				locked = queue = [];
				if ( !memory && !firing ) {
					list = memory = "";
				}
				return this;
			},
			locked: function() {
				return !!locked;
			},

			// Call all callbacks with the given context and arguments
			fireWith: function( context, args ) {
				if ( !locked ) {
					args = args || [];
					args = [ context, args.slice ? args.slice() : args ];
					queue.push( args );
					if ( !firing ) {
						fire();
					}
				}
				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;
};


function Identity( v ) {
	return v;
}
function Thrower( ex ) {
	throw ex;
}

function adoptValue( value, resolve, reject, noValue ) {
	var method;

	try {

		// Check for promise aspect first to privilege synchronous behavior
		if ( value && isFunction( ( method = value.promise ) ) ) {
			method.call( value ).done( resolve ).fail( reject );

		// Other thenables
		} else if ( value && isFunction( ( method = value.then ) ) ) {
			method.call( value, resolve, reject );

		// Other non-thenables
		} else {

			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
			// * false: [ value ].slice( 0 ) => resolve( value )
			// * true: [ value ].slice( 1 ) => resolve()
			resolve.apply( undefined, [ value ].slice( noValue ) );
		}

	// For Promises/A+, convert exceptions into rejections
	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
	// Deferred#then to conditionally suppress rejection.
	} catch ( value ) {

		// Support: Android 4.0 only
		// Strict mode functions invoked without .call/.apply get global-object context
		reject.apply( undefined, [ value ] );
	}
}

jQuery.extend( {

	Deferred: function( func ) {
		var tuples = [

				// action, add listener, callbacks,
				// ... .then handlers, argument index, [final state]
				[ "notify", "progress", jQuery.Callbacks( "memory" ),
					jQuery.Callbacks( "memory" ), 2 ],
				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
			],
			state = "pending",
			promise = {
				state: function() {
					return state;
				},
				always: function() {
					deferred.done( arguments ).fail( arguments );
					return this;
				},
				"catch": function( fn ) {
					return promise.then( null, fn );
				},

				// Keep pipe for back-compat
				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
					var fns = arguments;

					return jQuery.Deferred( function( newDefer ) {
						jQuery.each( tuples, function( i, tuple ) {

							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];

							// deferred.progress(function() { bind to newDefer or newDefer.notify })
							// deferred.done(function() { bind to newDefer or newDefer.resolve })
							// deferred.fail(function() { bind to newDefer or newDefer.reject })
							deferred[ tuple[ 1 ] ]( function() {
								var returned = fn && fn.apply( this, arguments );
								if ( returned && isFunction( returned.promise ) ) {
									returned.promise()
										.progress( newDefer.notify )
										.done( newDefer.resolve )
										.fail( newDefer.reject );
								} else {
									newDefer[ tuple[ 0 ] + "With" ](
										this,
										fn ? [ returned ] : arguments
									);
								}
							} );
						} );
						fns = null;
					} ).promise();
				},
				then: function( onFulfilled, onRejected, onProgress ) {
					var maxDepth = 0;
					function resolve( depth, deferred, handler, special ) {
						return function() {
							var that = this,
								args = arguments,
								mightThrow = function() {
									var returned, then;

									// Support: Promises/A+ section 2.3.3.3.3
									// https://promisesaplus.com/#point-59
									// Ignore double-resolution attempts
									if ( depth < maxDepth ) {
										return;
									}

									returned = handler.apply( that, args );

									// Support: Promises/A+ section 2.3.1
									// https://promisesaplus.com/#point-48
									if ( returned === deferred.promise() ) {
										throw new TypeError( "Thenable self-resolution" );
									}

									// Support: Promises/A+ sections 2.3.3.1, 3.5
									// https://promisesaplus.com/#point-54
									// https://promisesaplus.com/#point-75
									// Retrieve `then` only once
									then = returned &&

										// Support: Promises/A+ section 2.3.4
										// https://promisesaplus.com/#point-64
										// Only check objects and functions for thenability
										( typeof returned === "object" ||
											typeof returned === "function" ) &&
										returned.then;

									// Handle a returned thenable
									if ( isFunction( then ) ) {

										// Special processors (notify) just wait for resolution
										if ( special ) {
											then.call(
												returned,
												resolve( maxDepth, deferred, Identity, special ),
												resolve( maxDepth, deferred, Thrower, special )
											);

										// Normal processors (resolve) also hook into progress
										} else {

											// ...and disregard older resolution values
											maxDepth++;

											then.call(
												returned,
												resolve( maxDepth, deferred, Identity, special ),
												resolve( maxDepth, deferred, Thrower, special ),
												resolve( maxDepth, deferred, Identity,
													deferred.notifyWith )
											);
										}

									// Handle all other returned values
									} else {

										// Only substitute handlers pass on context
										// and multiple values (non-spec behavior)
										if ( handler !== Identity ) {
											that = undefined;
											args = [ returned ];
										}

										// Process the value(s)
										// Default process is resolve
										( special || deferred.resolveWith )( that, args );
									}
								},

								// Only normal processors (resolve) catch and reject exceptions
								process = special ?
									mightThrow :
									function() {
										try {
											mightThrow();
										} catch ( e ) {

											if ( jQuery.Deferred.exceptionHook ) {
												jQuery.Deferred.exceptionHook( e,
													process.stackTrace );
											}

											// Support: Promises/A+ section 2.3.3.3.4.1
											// https://promisesaplus.com/#point-61
											// Ignore post-resolution exceptions
											if ( depth + 1 >= maxDepth ) {

												// Only substitute handlers pass on context
												// and multiple values (non-spec behavior)
												if ( handler !== Thrower ) {
													that = undefined;
													args = [ e ];
												}

												deferred.rejectWith( that, args );
											}
										}
									};

							// Support: Promises/A+ section 2.3.3.3.1
							// https://promisesaplus.com/#point-57
							// Re-resolve promises immediately to dodge false rejection from
							// subsequent errors
							if ( depth ) {
								process();
							} else {

								// Call an optional hook to record the stack, in case of exception
								// since it's otherwise lost when execution goes async
								if ( jQuery.Deferred.getStackHook ) {
									process.stackTrace = jQuery.Deferred.getStackHook();
								}
								window.setTimeout( process );
							}
						};
					}

					return jQuery.Deferred( function( newDefer ) {

						// progress_handlers.add( ... )
						tuples[ 0 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onProgress ) ?
									onProgress :
									Identity,
								newDefer.notifyWith
							)
						);

						// fulfilled_handlers.add( ... )
						tuples[ 1 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onFulfilled ) ?
									onFulfilled :
									Identity
							)
						);

						// rejected_handlers.add( ... )
						tuples[ 2 ][ 3 ].add(
							resolve(
								0,
								newDefer,
								isFunction( onRejected ) ?
									onRejected :
									Thrower
							)
						);
					} ).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 = {};

		// Add list-specific methods
		jQuery.each( tuples, function( i, tuple ) {
			var list = tuple[ 2 ],
				stateString = tuple[ 5 ];

			// promise.progress = list.add
			// promise.done = list.add
			// promise.fail = list.add
			promise[ tuple[ 1 ] ] = list.add;

			// Handle state
			if ( stateString ) {
				list.add(
					function() {

						// state = "resolved" (i.e., fulfilled)
						// state = "rejected"
						state = stateString;
					},

					// rejected_callbacks.disable
					// fulfilled_callbacks.disable
					tuples[ 3 - i ][ 2 ].disable,

					// rejected_handlers.disable
					// fulfilled_handlers.disable
					tuples[ 3 - i ][ 3 ].disable,

					// progress_callbacks.lock
					tuples[ 0 ][ 2 ].lock,

					// progress_handlers.lock
					tuples[ 0 ][ 3 ].lock
				);
			}

			// progress_handlers.fire
			// fulfilled_handlers.fire
			// rejected_handlers.fire
			list.add( tuple[ 3 ].fire );

			// deferred.notify = function() { deferred.notifyWith(...) }
			// deferred.resolve = function() { deferred.resolveWith(...) }
			// deferred.reject = function() { deferred.rejectWith(...) }
			deferred[ tuple[ 0 ] ] = function() {
				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
				return this;
			};

			// deferred.notifyWith = list.fireWith
			// deferred.resolveWith = list.fireWith
			// deferred.rejectWith = list.fireWith
			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( singleValue ) {
		var

			// count of uncompleted subordinates
			remaining = arguments.length,

			// count of unprocessed arguments
			i = remaining,

			// subordinate fulfillment data
			resolveContexts = Array( i ),
			resolveValues = slice.call( arguments ),

			// the master Deferred
			master = jQuery.Deferred(),

			// subordinate callback factory
			updateFunc = function( i ) {
				return function( value ) {
					resolveContexts[ i ] = this;
					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
					if ( !( --remaining ) ) {
						master.resolveWith( resolveContexts, resolveValues );
					}
				};
			};

		// Single- and empty arguments are adopted like Promise.resolve
		if ( remaining <= 1 ) {
			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
				!remaining );

			// Use .then() to unwrap secondary thenables (cf. gh-3000)
			if ( master.state() === "pending" ||
				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {

				return master.then();
			}
		}

		// Multiple arguments are aggregated like Promise.all array elements
		while ( i-- ) {
			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
		}

		return master.promise();
	}
} );


// These usually indicate a programmer mistake during development,
// warn about them ASAP rather than swallowing them by default.
var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;

jQuery.Deferred.exceptionHook = function( error, stack ) {

	// Support: IE 8 - 9 only
	// Console exists when dev tools are open, which can happen at any time
	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
	}
};




jQuery.readyException = function( error ) {
	window.setTimeout( function() {
		throw error;
	} );
};




// The deferred used on DOM ready
var readyList = jQuery.Deferred();

jQuery.fn.ready = function( fn ) {

	readyList
		.then( fn )

		// Wrap jQuery.readyException in a function so that the lookup
		// happens at the time of error handling instead of callback
		// registration.
		.catch( function( error ) {
			jQuery.readyException( error );
		} );

	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,

	// 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;
		}

		// 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 ] );
	}
} );

jQuery.ready.then = readyList.then;

// The ready event handler and self cleanup method
function completed() {
	document.removeEventListener( "DOMContentLoaded", completed );
	window.removeEventListener( "load", completed );
	jQuery.ready();
}

// Catch cases where $(document).ready() is called
// after the browser event has already occurred.
// Support: IE <=9 - 10 only
// Older IE sometimes signals "interactive" too soon
if ( document.readyState === "complete" ||
	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {

	// Handle it asynchronously to allow scripts the opportunity to delay ready
	window.setTimeout( jQuery.ready );

} else {

	// Use the handy event callback
	document.addEventListener( "DOMContentLoaded", completed );

	// A fallback to window.onload, that will always work
	window.addEventListener( "load", completed );
}




// Multifunctional method to get and set values of a collection
// The value/s can optionally be executed if it's a function
var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
	var i = 0,
		len = elems.length,
		bulk = key == null;

	// Sets many values
	if ( toType( key ) === "object" ) {
		chainable = true;
		for ( i in key ) {
			access( elems, fn, i, key[ i ], true, emptyGet, raw );
		}

	// Sets one value
	} else if ( value !== undefined ) {
		chainable = true;

		if ( !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 < len; i++ ) {
				fn(
					elems[ i ], key, raw ?
					value :
					value.call( elems[ i ], i, fn( elems[ i ], key ) )
				);
			}
		}
	}

	if ( chainable ) {
		return elems;
	}

	// Gets
	if ( bulk ) {
		return fn.call( elems );
	}

	return len ? fn( elems[ 0 ], key ) : emptyGet;
};


// Matches dashed string for camelizing
var rmsPrefix = /^-ms-/,
	rdashAlpha = /-([a-z])/g;

// Used by camelCase as callback to replace()
function fcamelCase( all, letter ) {
	return letter.toUpperCase();
}

// Convert dashed to camelCase; used by the css and data modules
// Support: IE <=9 - 11, Edge 12 - 15
// Microsoft forgot to hump their vendor prefix (#9572)
function camelCase( string ) {
	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
}
var acceptData = function( owner ) {

	// Accepts only:
	//  - Node
	//    - Node.ELEMENT_NODE
	//    - Node.DOCUMENT_NODE
	//  - Object
	//    - Any
	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
};




function Data() {
	this.expando = jQuery.expando + Data.uid++;
}

Data.uid = 1;

Data.prototype = {

	cache: function( owner ) {

		// Check if the owner object already has a cache
		var value = owner[ this.expando ];

		// If not, create one
		if ( !value ) {
			value = {};

			// We can accept data for non-element nodes in modern browsers,
			// but we should not, see #8335.
			// Always return an empty object.
			if ( acceptData( owner ) ) {

				// If it is a node unlikely to be stringify-ed or looped over
				// use plain assignment
				if ( owner.nodeType ) {
					owner[ this.expando ] = value;

				// Otherwise secure it in a non-enumerable property
				// configurable must be true to allow the property to be
				// deleted when data is removed
				} else {
					Object.defineProperty( owner, this.expando, {
						value: value,
						configurable: true
					} );
				}
			}
		}

		return value;
	},
	set: function( owner, data, value ) {
		var prop,
			cache = this.cache( owner );

		// Handle: [ owner, key, value ] args
		// Always use camelCase key (gh-2257)
		if ( typeof data === "string" ) {
			cache[ camelCase( data ) ] = value;

		// Handle: [ owner, { properties } ] args
		} else {

			// Copy the properties one-by-one to the cache object
			for ( prop in data ) {
				cache[ camelCase( prop ) ] = data[ prop ];
			}
		}
		return cache;
	},
	get: function( owner, key ) {
		return key === undefined ?
			this.cache( owner ) :

			// Always use camelCase key (gh-2257)
			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
	},
	access: function( owner, key, value ) {

		// In cases where either:
		//
		//   1. No key was specified
		//   2. A string key was specified, but no value provided
		//
		// Take the "read" path and allow the get method to determine
		// which value to return, respectively either:
		//
		//   1. The entire cache object
		//   2. The data stored at the key
		//
		if ( key === undefined ||
				( ( key && typeof key === "string" ) && value === undefined ) ) {

			return this.get( owner, key );
		}

		// When the key is not a string, or both a key and value
		// are specified, set or extend (existing objects) with either:
		//
		//   1. An object of properties
		//   2. A key and value
		//
		this.set( owner, key, value );

		// Since the "set" path can have two possible entry points
		// return the expected data based on which path was taken[*]
		return value !== undefined ? value : key;
	},
	remove: function( owner, key ) {
		var i,
			cache = owner[ this.expando ];

		if ( cache === undefined ) {
			return;
		}

		if ( key !== undefined ) {

			// Support array or space separated string of keys
			if ( Array.isArray( key ) ) {

				// If key is an array of keys...
				// We always set camelCase keys, so remove that.
				key = key.map( camelCase );
			} else {
				key = camelCase( key );

				// If a key with the spaces exists, use it.
				// Otherwise, create an array by matching non-whitespace
				key = key in cache ?
					[ key ] :
					( key.match( rnothtmlwhite ) || [] );
			}

			i = key.length;

			while ( i-- ) {
				delete cache[ key[ i ] ];
			}
		}

		// Remove the expando if there's no more data
		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {

			// Support: Chrome <=35 - 45
			// Webkit & Blink performance suffers when deleting properties
			// from DOM nodes, so set to undefined instead
			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
			if ( owner.nodeType ) {
				owner[ this.expando ] = undefined;
			} else {
				delete owner[ this.expando ];
			}
		}
	},
	hasData: function( owner ) {
		var cache = owner[ this.expando ];
		return cache !== undefined && !jQuery.isEmptyObject( cache );
	}
};
var dataPriv = new Data();

var dataUser = new Data();



//	Implementation Summary
//
//	1. Enforce API surface and semantic compatibility with 1.9.x branch
//	2. Improve the module's maintainability by reducing the storage
//		paths to a single mechanism.
//	3. Use the same single mechanism to support "private" and "user" data.
//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
//	5. Avoid exposing implementation details on user objects (eg. expando properties)
//	6. Provide a clear path for implementation upgrade to WeakMap in 2014

var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
	rmultiDash = /[A-Z]/g;

function getData( data ) {
	if ( data === "true" ) {
		return true;
	}

	if ( data === "false" ) {
		return false;
	}

	if ( data === "null" ) {
		return null;
	}

	// Only convert to a number if it doesn't change the string
	if ( data === +data + "" ) {
		return +data;
	}

	if ( rbrace.test( data ) ) {
		return JSON.parse( data );
	}

	return data;
}

function dataAttr( elem, key, data ) {
	var name;

	// If nothing was found internally, try to fetch any
	// data from the HTML5 data-* attribute
	if ( data === undefined && elem.nodeType === 1 ) {
		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
		data = elem.getAttribute( name );

		if ( typeof data === "string" ) {
			try {
				data = getData( data );
			} catch ( e ) {}

			// Make sure we set the data so it isn't changed later
			dataUser.set( elem, key, data );
		} else {
			data = undefined;
		}
	}
	return data;
}

jQuery.extend( {
	hasData: function( elem ) {
		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
	},

	data: function( elem, name, data ) {
		return dataUser.access( elem, name, data );
	},

	removeData: function( elem, name ) {
		dataUser.remove( elem, name );
	},

	// TODO: Now that all calls to _data and _removeData have been replaced
	// with direct calls to dataPriv methods, these can be deprecated.
	_data: function( elem, name, data ) {
		return dataPriv.access( elem, name, data );
	},

	_removeData: function( elem, name ) {
		dataPriv.remove( elem, name );
	}
} );

jQuery.fn.extend( {
	data: function( key, value ) {
		var i, name, data,
			elem = this[ 0 ],
			attrs = elem && elem.attributes;

		// Gets all values
		if ( key === undefined ) {
			if ( this.length ) {
				data = dataUser.get( elem );

				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
					i = attrs.length;
					while ( i-- ) {

						// Support: IE 11 only
						// The attrs elements can be null (#14894)
						if ( attrs[ i ] ) {
							name = attrs[ i ].name;
							if ( name.indexOf( "data-" ) === 0 ) {
								name = camelCase( name.slice( 5 ) );
								dataAttr( elem, name, data[ name ] );
							}
						}
					}
					dataPriv.set( elem, "hasDataAttrs", true );
				}
			}

			return data;
		}

		// Sets multiple values
		if ( typeof key === "object" ) {
			return this.each( function() {
				dataUser.set( this, key );
			} );
		}

		return access( this, function( value ) {
			var data;

			// The calling jQuery object (element matches) is not empty
			// (and therefore has an element appears at this[ 0 ]) and the
			// `value` parameter was not undefined. An empty jQuery object
			// will result in `undefined` for elem = this[ 0 ] which will
			// throw an exception if an attempt to read a data cache is made.
			if ( elem && value === undefined ) {

				// Attempt to get data from the cache
				// The key will always be camelCased in Data
				data = dataUser.get( elem, key );
				if ( data !== undefined ) {
					return data;
				}

				// Attempt to "discover" the data in
				// HTML5 custom data-* attrs
				data = dataAttr( elem, key );
				if ( data !== undefined ) {
					return data;
				}

				// We tried really hard, but the data doesn't exist.
				return;
			}

			// Set the data...
			this.each( function() {

				// We always store the camelCased key
				dataUser.set( this, key, value );
			} );
		}, null, value, arguments.length > 1, null, true );
	},

	removeData: function( key ) {
		return this.each( function() {
			dataUser.remove( this, key );
		} );
	}
} );


jQuery.extend( {
	queue: function( elem, type, data ) {
		var queue;

		if ( elem ) {
			type = ( type || "fx" ) + "queue";
			queue = dataPriv.get( elem, type );

			// Speed up dequeue by getting out quickly if this is just a lookup
			if ( data ) {
				if ( !queue || Array.isArray( data ) ) {
					queue = dataPriv.access( 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 public - generate a queueHooks object, or return the current one
	_queueHooks: function( elem, type ) {
		var key = type + "queueHooks";
		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
			empty: jQuery.Callbacks( "once memory" ).add( function() {
				dataPriv.remove( elem, [ type + "queue", 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 = dataPriv.get( 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 rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );


var cssExpand = [ "Top", "Right", "Bottom", "Left" ];

var documentElement = document.documentElement;



	var isAttached = function( elem ) {
			return jQuery.contains( elem.ownerDocument, elem );
		},
		composed = { composed: true };

	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
	// Check attachment across shadow DOM boundaries when possible (gh-3504)
	// Support: iOS 10.0-10.2 only
	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
	// leading to errors. We need to check for `getRootNode`.
	if ( documentElement.getRootNode ) {
		isAttached = function( elem ) {
			return jQuery.contains( elem.ownerDocument, elem ) ||
				elem.getRootNode( composed ) === elem.ownerDocument;
		};
	}
var isHiddenWithinTree = function( elem, el ) {

		// isHiddenWithinTree might be called from jQuery#filter function;
		// in that case, element will be second argument
		elem = el || elem;

		// Inline style trumps all
		return elem.style.display === "none" ||
			elem.style.display === "" &&

			// Otherwise, check computed style
			// Support: Firefox <=43 - 45
			// Disconnected elements can have computed display: none, so first confirm that elem is
			// in the document.
			isAttached( elem ) &&

			jQuery.css( elem, "display" ) === "none";
	};

var 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;
};




function adjustCSS( elem, prop, valueParts, tween ) {
	var adjusted, scale,
		maxIterations = 20,
		currentValue = tween ?
			function() {
				return tween.cur();
			} :
			function() {
				return jQuery.css( elem, prop, "" );
			},
		initial = currentValue(),
		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),

		// Starting value computation is required for potential unit mismatches
		initialInUnit = elem.nodeType &&
			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
			rcssNum.exec( jQuery.css( elem, prop ) );

	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {

		// Support: Firefox <=54
		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
		initial = initial / 2;

		// Trust units reported by jQuery.css
		unit = unit || initialInUnit[ 3 ];

		// Iteratively approximate from a nonzero starting point
		initialInUnit = +initial || 1;

		while ( maxIterations-- ) {

			// Evaluate and update our best guess (doubling guesses that zero out).
			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
			jQuery.style( elem, prop, initialInUnit + unit );
			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
				maxIterations = 0;
			}
			initialInUnit = initialInUnit / scale;

		}

		initialInUnit = initialInUnit * 2;
		jQuery.style( elem, prop, initialInUnit + unit );

		// Make sure we update the tween properties later on
		valueParts = valueParts || [];
	}

	if ( valueParts ) {
		initialInUnit = +initialInUnit || +initial || 0;

		// Apply relative offset (+=/-=) if specified
		adjusted = valueParts[ 1 ] ?
			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
			+valueParts[ 2 ];
		if ( tween ) {
			tween.unit = unit;
			tween.start = initialInUnit;
			tween.end = adjusted;
		}
	}
	return adjusted;
}


var defaultDisplayMap = {};

function getDefaultDisplay( elem ) {
	var temp,
		doc = elem.ownerDocument,
		nodeName = elem.nodeName,
		display = defaultDisplayMap[ nodeName ];

	if ( display ) {
		return display;
	}

	temp = doc.body.appendChild( doc.createElement( nodeName ) );
	display = jQuery.css( temp, "display" );

	temp.parentNode.removeChild( temp );

	if ( display === "none" ) {
		display = "block";
	}
	defaultDisplayMap[ nodeName ] = display;

	return display;
}

function showHide( elements, show ) {
	var display, elem,
		values = [],
		index = 0,
		length = elements.length;

	// Determine new display value for elements that need to change
	for ( ; index < length; index++ ) {
		elem = elements[ index ];
		if ( !elem.style ) {
			continue;
		}

		display = elem.style.display;
		if ( show ) {

			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
			// check is required in this first loop unless we have a nonempty display value (either
			// inline or about-to-be-restored)
			if ( display === "none" ) {
				values[ index ] = dataPriv.get( elem, "display" ) || null;
				if ( !values[ index ] ) {
					elem.style.display = "";
				}
			}
			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
				values[ index ] = getDefaultDisplay( elem );
			}
		} else {
			if ( display !== "none" ) {
				values[ index ] = "none";

				// Remember what we're overwriting
				dataPriv.set( elem, "display", display );
			}
		}
	}

	// Set the display of the elements in a second loop to avoid constant reflow
	for ( index = 0; index < length; index++ ) {
		if ( values[ index ] != null ) {
			elements[ index ].style.display = values[ index ];
		}
	}

	return elements;
}

jQuery.fn.extend( {
	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 ( isHiddenWithinTree( this ) ) {
				jQuery( this ).show();
			} else {
				jQuery( this ).hide();
			}
		} );
	}
} );
var rcheckableType = ( /^(?:checkbox|radio)$/i );

var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );

var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );



// We have to close these tags to support XHTML (#13200)
var wrapMap = {

	// Support: IE <=9 only
	option: [ 1, "<select multiple='multiple'>", "</select>" ],

	// XHTML parsers do not magically insert elements in the
	// same way that tag soup parsers do. So we cannot shorten
	// this by omitting <tbody> or other required elements.
	thead: [ 1, "<table>", "</table>" ],
	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],

	_default: [ 0, "", "" ]
};

// Support: IE <=9 only
wrapMap.optgroup = wrapMap.option;

wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;


function getAll( context, tag ) {

	// Support: IE <=9 - 11 only
	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
	var ret;

	if ( typeof context.getElementsByTagName !== "undefined" ) {
		ret = context.getElementsByTagName( tag || "*" );

	} else if ( typeof context.querySelectorAll !== "undefined" ) {
		ret = context.querySelectorAll( tag || "*" );

	} else {
		ret = [];
	}

	if ( tag === undefined || tag && nodeName( context, tag ) ) {
		return jQuery.merge( [ context ], ret );
	}

	return ret;
}


// Mark scripts as having already been evaluated
function setGlobalEval( elems, refElements ) {
	var i = 0,
		l = elems.length;

	for ( ; i < l; i++ ) {
		dataPriv.set(
			elems[ i ],
			"globalEval",
			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
		);
	}
}


var rhtml = /<|&#?\w+;/;

function buildFragment( elems, context, scripts, selection, ignored ) {
	var elem, tmp, tag, wrap, attached, j,
		fragment = context.createDocumentFragment(),
		nodes = [],
		i = 0,
		l = elems.length;

	for ( ; i < l; i++ ) {
		elem = elems[ i ];

		if ( elem || elem === 0 ) {

			// Add nodes directly
			if ( toType( elem ) === "object" ) {

				// Support: Android <=4.0 only, PhantomJS 1 only
				// push.apply(_, arraylike) throws on ancient WebKit
				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 || fragment.appendChild( context.createElement( "div" ) );

				// Deserialize a standard representation
				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
				wrap = wrapMap[ tag ] || wrapMap._default;
				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];

				// Descend through wrappers to the right content
				j = wrap[ 0 ];
				while ( j-- ) {
					tmp = tmp.lastChild;
				}

				// Support: Android <=4.0 only, PhantomJS 1 only
				// push.apply(_, arraylike) throws on ancient WebKit
				jQuery.merge( nodes, tmp.childNodes );

				// Remember the top-level container
				tmp = fragment.firstChild;

				// Ensure the created nodes are orphaned (#12392)
				tmp.textContent = "";
			}
		}
	}

	// Remove wrapper from fragment
	fragment.textContent = "";

	i = 0;
	while ( ( elem = nodes[ i++ ] ) ) {

		// Skip elements already in the context collection (trac-4087)
		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
			if ( ignored ) {
				ignored.push( elem );
			}
			continue;
		}

		attached = isAttached( elem );

		// Append to fragment
		tmp = getAll( fragment.appendChild( elem ), "script" );

		// Preserve script evaluation history
		if ( attached ) {
			setGlobalEval( tmp );
		}

		// Capture executables
		if ( scripts ) {
			j = 0;
			while ( ( elem = tmp[ j++ ] ) ) {
				if ( rscriptType.test( elem.type || "" ) ) {
					scripts.push( elem );
				}
			}
		}
	}

	return fragment;
}


( function() {
	var fragment = document.createDocumentFragment(),
		div = fragment.appendChild( document.createElement( "div" ) ),
		input = document.createElement( "input" );

	// Support: Android 4.0 - 4.3 only
	// Check state lost if the name is set (#11217)
	// Support: Windows Web Apps (WWA)
	// `name` and `type` must use .setAttribute for WWA (#14901)
	input.setAttribute( "type", "radio" );
	input.setAttribute( "checked", "checked" );
	input.setAttribute( "name", "t" );

	div.appendChild( input );

	// Support: Android <=4.1 only
	// Older WebKit doesn't clone checked state correctly in fragments
	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;

	// Support: IE <=11 only
	// Make sure textarea (and checkbox) defaultValue is properly cloned
	div.innerHTML = "<textarea>x</textarea>";
	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
} )();


var
	rkeyEvent = /^key/,
	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;

function returnTrue() {
	return true;
}

function returnFalse() {
	return false;
}

// Support: IE <=9 - 11+
// focus() and blur() are asynchronous, except when they are no-op.
// So expect focus to be synchronous when the element is already active,
// and blur to be synchronous when the element is not already active.
// (focus and blur are always synchronous in other supported browsers,
// this just defines when we can count on it).
function expectSync( elem, type ) {
	return ( elem === safeActiveElement() ) === ( type === "focus" );
}

// Support: IE <=9 only
// Accessing document.activeElement can throw unexpectedly
// https://bugs.jquery.com/ticket/13393
function safeActiveElement() {
	try {
		return document.activeElement;
	} catch ( err ) { }
}

function on( elem, types, selector, data, fn, one ) {
	var origFn, type;

	// 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 ) {
			on( elem, type, selector, data, types[ type ], one );
		}
		return elem;
	}

	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 elem;
	}

	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 elem.each( function() {
		jQuery.event.add( this, types, fn, data, selector );
	} );
}

/*
 * 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 handleObjIn, eventHandle, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = dataPriv.get( 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;
		}

		// Ensure that invalid selectors throw exceptions at attach time
		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
		if ( selector ) {
			jQuery.find.matchesSelector( documentElement, 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 !== "undefined" && jQuery.event.triggered !== e.type ?
					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
			};
		}

		// Handle multiple events separated by a space
		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
		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 if the special events handler returns false
				if ( !special.setup ||
					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {

					if ( elem.addEventListener ) {
						elem.addEventListener( 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;
		}

	},

	// Detach an event or set of events from an element
	remove: function( elem, types, handler, selector, mappedTypes ) {

		var j, origCount, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );

		if ( !elemData || !( events = elemData.events ) ) {
			return;
		}

		// Once for each type.namespace in types; type may be omitted
		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
		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 data and the expando if it's no longer used
		if ( jQuery.isEmptyObject( events ) ) {
			dataPriv.remove( elem, "handle events" );
		}
	},

	dispatch: function( nativeEvent ) {

		// Make a writable jQuery.Event from the native event object
		var event = jQuery.event.fix( nativeEvent );

		var i, j, ret, matched, handleObj, handlerQueue,
			args = new Array( arguments.length ),
			handlers = ( dataPriv.get( 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;

		for ( i = 1; i < arguments.length; i++ ) {
			args[ i ] = arguments[ i ];
		}

		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() ) {

				// If the event is namespaced, then each handler is only invoked if it is
				// specially universal or its namespaces are a superset of the event's.
				if ( !event.rnamespace || handleObj.namespace === false ||
					event.rnamespace.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 i, handleObj, sel, matchedHandlers, matchedSelectors,
			handlerQueue = [],
			delegateCount = handlers.delegateCount,
			cur = event.target;

		// Find delegate handlers
		if ( delegateCount &&

			// Support: IE <=9
			// Black-hole SVG <use> instance trees (trac-13180)
			cur.nodeType &&

			// Support: Firefox <=42
			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
			// Support: IE 11 only
			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
			!( event.type === "click" && event.button >= 1 ) ) {

			for ( ; cur !== this; cur = cur.parentNode || this ) {

				// Don't check non-elements (#13208)
				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
					matchedHandlers = [];
					matchedSelectors = {};
					for ( i = 0; i < delegateCount; i++ ) {
						handleObj = handlers[ i ];

						// Don't conflict with Object.prototype properties (#13203)
						sel = handleObj.selector + " ";

						if ( matchedSelectors[ sel ] === undefined ) {
							matchedSelectors[ sel ] = handleObj.needsContext ?
								jQuery( sel, this ).index( cur ) > -1 :
								jQuery.find( sel, this, null, [ cur ] ).length;
						}
						if ( matchedSelectors[ sel ] ) {
							matchedHandlers.push( handleObj );
						}
					}
					if ( matchedHandlers.length ) {
						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
					}
				}
			}
		}

		// Add the remaining (directly-bound) handlers
		cur = this;
		if ( delegateCount < handlers.length ) {
			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
		}

		return handlerQueue;
	},

	addProp: function( name, hook ) {
		Object.defineProperty( jQuery.Event.prototype, name, {
			enumerable: true,
			configurable: true,

			get: isFunction( hook ) ?
				function() {
					if ( this.originalEvent ) {
							return hook( this.originalEvent );
					}
				} :
				function() {
					if ( this.originalEvent ) {
							return this.originalEvent[ name ];
					}
				},

			set: function( value ) {
				Object.defineProperty( this, name, {
					enumerable: true,
					configurable: true,
					writable: true,
					value: value
				} );
			}
		} );
	},

	fix: function( originalEvent ) {
		return originalEvent[ jQuery.expando ] ?
			originalEvent :
			new jQuery.Event( originalEvent );
	},

	special: {
		load: {

			// Prevent triggered image.load events from bubbling to window.load
			noBubble: true
		},
		click: {

			// Utilize native event to ensure correct state for checkable inputs
			setup: function( data ) {

				// For mutual compressibility with _default, replace `this` access with a local var.
				// `|| data` is dead code meant only to preserve the variable through minification.
				var el = this || data;

				// Claim the first handler
				if ( rcheckableType.test( el.type ) &&
					el.click && nodeName( el, "input" ) ) {

					// dataPriv.set( el, "click", ... )
					leverageNative( el, "click", returnTrue );
				}

				// Return false to allow normal processing in the caller
				return false;
			},
			trigger: function( data ) {

				// For mutual compressibility with _default, replace `this` access with a local var.
				// `|| data` is dead code meant only to preserve the variable through minification.
				var el = this || data;

				// Force setup before triggering a click
				if ( rcheckableType.test( el.type ) &&
					el.click && nodeName( el, "input" ) ) {

					leverageNative( el, "click" );
				}

				// Return non-false to allow normal event-path propagation
				return true;
			},

			// For cross-browser consistency, suppress native .click() on links
			// Also prevent it if we're currently inside a leveraged native-event stack
			_default: function( event ) {
				var target = event.target;
				return rcheckableType.test( target.type ) &&
					target.click && nodeName( target, "input" ) &&
					dataPriv.get( target, "click" ) ||
					nodeName( 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;
				}
			}
		}
	}
};

// Ensure the presence of an event listener that handles manually-triggered
// synthetic events by interrupting progress until reinvoked in response to
// *native* events that it fires directly, ensuring that state changes have
// already occurred before other listeners are invoked.
function leverageNative( el, type, expectSync ) {

	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
	if ( !expectSync ) {
		if ( dataPriv.get( el, type ) === undefined ) {
			jQuery.event.add( el, type, returnTrue );
		}
		return;
	}

	// Register the controller as a special universal handler for all event namespaces
	dataPriv.set( el, type, false );
	jQuery.event.add( el, type, {
		namespace: false,
		handler: function( event ) {
			var notAsync, result,
				saved = dataPriv.get( this, type );

			if ( ( event.isTrigger & 1 ) && this[ type ] ) {

				// Interrupt processing of the outer synthetic .trigger()ed event
				// Saved data should be false in such cases, but might be a leftover capture object
				// from an async native handler (gh-4350)
				if ( !saved.length ) {

					// Store arguments for use when handling the inner native event
					// There will always be at least one argument (an event object), so this array
					// will not be confused with a leftover capture object.
					saved = slice.call( arguments );
					dataPriv.set( this, type, saved );

					// Trigger the native event and capture its result
					// Support: IE <=9 - 11+
					// focus() and blur() are asynchronous
					notAsync = expectSync( this, type );
					this[ type ]();
					result = dataPriv.get( this, type );
					if ( saved !== result || notAsync ) {
						dataPriv.set( this, type, false );
					} else {
						result = {};
					}
					if ( saved !== result ) {

						// Cancel the outer synthetic event
						event.stopImmediatePropagation();
						event.preventDefault();
						return result.value;
					}

				// If this is an inner synthetic event for an event with a bubbling surrogate
				// (focus or blur), assume that the surrogate already propagated from triggering the
				// native event and prevent that from happening again here.
				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
				// less bad than duplication.
				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
					event.stopPropagation();
				}

			// If this is a native event triggered above, everything is now in order
			// Fire an inner synthetic event with the original arguments
			} else if ( saved.length ) {

				// ...and capture the result
				dataPriv.set( this, type, {
					value: jQuery.event.trigger(

						// Support: IE <=9 - 11+
						// Extend with the prototype to reset the above stopImmediatePropagation()
						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
						saved.slice( 1 ),
						this
					)
				} );

				// Abort handling of the native event
				event.stopImmediatePropagation();
			}
		}
	} );
}

jQuery.removeEvent = function( elem, type, handle ) {

	// This "if" is needed for plain objects
	if ( elem.removeEventListener ) {
		elem.removeEventListener( type, 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: Android <=2.3 only
				src.returnValue === false ?
			returnTrue :
			returnFalse;

		// Create target properties
		// Support: Safari <=6 - 7 only
		// Target should not be a text node (#504, #13143)
		this.target = ( src.target && src.target.nodeType === 3 ) ?
			src.target.parentNode :
			src.target;

		this.currentTarget = src.currentTarget;
		this.relatedTarget = src.relatedTarget;

	// 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 || Date.now();

	// Mark it as fixed
	this[ jQuery.expando ] = true;
};

// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
	constructor: jQuery.Event,
	isDefaultPrevented: returnFalse,
	isPropagationStopped: returnFalse,
	isImmediatePropagationStopped: returnFalse,
	isSimulated: false,

	preventDefault: function() {
		var e = this.originalEvent;

		this.isDefaultPrevented = returnTrue;

		if ( e && !this.isSimulated ) {
			e.preventDefault();
		}
	},
	stopPropagation: function() {
		var e = this.originalEvent;

		this.isPropagationStopped = returnTrue;

		if ( e && !this.isSimulated ) {
			e.stopPropagation();
		}
	},
	stopImmediatePropagation: function() {
		var e = this.originalEvent;

		this.isImmediatePropagationStopped = returnTrue;

		if ( e && !this.isSimulated ) {
			e.stopImmediatePropagation();
		}

		this.stopPropagation();
	}
};

// Includes all common event props including KeyEvent and MouseEvent specific props
jQuery.each( {
	altKey: true,
	bubbles: true,
	cancelable: true,
	changedTouches: true,
	ctrlKey: true,
	detail: true,
	eventPhase: true,
	metaKey: true,
	pageX: true,
	pageY: true,
	shiftKey: true,
	view: true,
	"char": true,
	code: true,
	charCode: true,
	key: true,
	keyCode: true,
	button: true,
	buttons: true,
	clientX: true,
	clientY: true,
	offsetX: true,
	offsetY: true,
	pointerId: true,
	pointerType: true,
	screenX: true,
	screenY: true,
	targetTouches: true,
	toElement: true,
	touches: true,

	which: function( event ) {
		var button = event.button;

		// Add which for key events
		if ( event.which == null && rkeyEvent.test( event.type ) ) {
			return event.charCode != null ? event.charCode : event.keyCode;
		}

		// Add which for click: 1 === left; 2 === middle; 3 === right
		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
			if ( button & 1 ) {
				return 1;
			}

			if ( button & 2 ) {
				return 3;
			}

			if ( button & 4 ) {
				return 2;
			}

			return 0;
		}

		return event.which;
	}
}, jQuery.event.addProp );

jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
	jQuery.event.special[ type ] = {

		// Utilize native event if possible so blur/focus sequence is correct
		setup: function() {

			// Claim the first handler
			// dataPriv.set( this, "focus", ... )
			// dataPriv.set( this, "blur", ... )
			leverageNative( this, type, expectSync );

			// Return false to allow normal processing in the caller
			return false;
		},
		trigger: function() {

			// Force setup before trigger
			leverageNative( this, type );

			// Return non-false to allow normal event-path propagation
			return true;
		},

		delegateType: delegateType
	};
} );

// Create mouseenter/leave events using mouseover/out and event-time checks
// so that event delegation works in jQuery.
// Do the same for pointerenter/pointerleave and pointerover/pointerout
//
// Support: Safari 7 only
// Safari sends mouseenter too often; see:
// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
// for the description of the bug (it existed in older Chrome versions as well).
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 mouseenter/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;
		}
	};
} );

jQuery.fn.extend( {

	on: function( types, selector, data, fn ) {
		return on( this, types, selector, data, fn );
	},
	one: function( types, selector, data, fn ) {
		return on( this, 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 );
		} );
	}
} );


var

	/* eslint-disable max-len */

	// See https://github.com/eslint/eslint/issues/3229
	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,

	/* eslint-enable */

	// Support: IE <=10 - 11, Edge 12 - 13 only
	// In IE/Edge using regex groups here causes severe slowdowns.
	// See https://connect.microsoft.com/IE/feedback/details/1736512/
	rnoInnerhtml = /<script|<style|<link/i,

	// checked="checked" or checked
	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;

// Prefer a tbody over its parent table for containing new rows
function manipulationTarget( elem, content ) {
	if ( nodeName( elem, "table" ) &&
		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {

		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
	}

	return elem;
}

// Replace/restore the type attribute of script elements for safe DOM manipulation
function disableScript( elem ) {
	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
	return elem;
}
function restoreScript( elem ) {
	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
		elem.type = elem.type.slice( 5 );
	} else {
		elem.removeAttribute( "type" );
	}

	return elem;
}

function cloneCopyEvent( src, dest ) {
	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;

	if ( dest.nodeType !== 1 ) {
		return;
	}

	// 1. Copy private data: events, handlers, etc.
	if ( dataPriv.hasData( src ) ) {
		pdataOld = dataPriv.access( src );
		pdataCur = dataPriv.set( dest, pdataOld );
		events = pdataOld.events;

		if ( events ) {
			delete pdataCur.handle;
			pdataCur.events = {};

			for ( type in events ) {
				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
					jQuery.event.add( dest, type, events[ type ][ i ] );
				}
			}
		}
	}

	// 2. Copy user data
	if ( dataUser.hasData( src ) ) {
		udataOld = dataUser.access( src );
		udataCur = jQuery.extend( {}, udataOld );

		dataUser.set( dest, udataCur );
	}
}

// Fix IE bugs, see support tests
function fixInput( src, dest ) {
	var nodeName = dest.nodeName.toLowerCase();

	// Fails to persist the checked state of a cloned checkbox or radio button.
	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
		dest.checked = src.checked;

	// Fails to return the selected option to the default selected state when cloning options
	} else if ( nodeName === "input" || nodeName === "textarea" ) {
		dest.defaultValue = src.defaultValue;
	}
}

function domManip( collection, args, callback, ignored ) {

	// Flatten any nested arrays
	args = concat.apply( [], args );

	var fragment, first, scripts, hasScripts, node, doc,
		i = 0,
		l = collection.length,
		iNoClone = l - 1,
		value = args[ 0 ],
		valueIsFunction = isFunction( value );

	// We can't cloneNode fragments that contain checked, in WebKit
	if ( valueIsFunction ||
			( l > 1 && typeof value === "string" &&
				!support.checkClone && rchecked.test( value ) ) ) {
		return collection.each( function( index ) {
			var self = collection.eq( index );
			if ( valueIsFunction ) {
				args[ 0 ] = value.call( this, index, self.html() );
			}
			domManip( self, args, callback, ignored );
		} );
	}

	if ( l ) {
		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
		first = fragment.firstChild;

		if ( fragment.childNodes.length === 1 ) {
			fragment = first;
		}

		// Require either new content or an interest in ignored elements to invoke the callback
		if ( first || ignored ) {
			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 ) {

						// Support: Android <=4.0 only, PhantomJS 1 only
						// push.apply(_, arraylike) throws on ancient WebKit
						jQuery.merge( scripts, getAll( node, "script" ) );
					}
				}

				callback.call( collection[ 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 || "" ) &&
						!dataPriv.access( node, "globalEval" ) &&
						jQuery.contains( doc, node ) ) {

						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {

							// Optional AJAX dependency, but won't run scripts if not present
							if ( jQuery._evalUrl && !node.noModule ) {
								jQuery._evalUrl( node.src, {
									nonce: node.nonce || node.getAttribute( "nonce" )
								} );
							}
						} else {
							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
						}
					}
				}
			}
		}
	}

	return collection;
}

function remove( elem, selector, keepData ) {
	var node,
		nodes = selector ? jQuery.filter( selector, elem ) : elem,
		i = 0;

	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
		if ( !keepData && node.nodeType === 1 ) {
			jQuery.cleanData( getAll( node ) );
		}

		if ( node.parentNode ) {
			if ( keepData && isAttached( node ) ) {
				setGlobalEval( getAll( node, "script" ) );
			}
			node.parentNode.removeChild( node );
		}
	}

	return elem;
}

jQuery.extend( {
	htmlPrefilter: function( html ) {
		return html.replace( rxhtmlTag, "<$1></$2>" );
	},

	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
		var i, l, srcElements, destElements,
			clone = elem.cloneNode( true ),
			inPage = isAttached( elem );

		// Fix IE cloning issues
		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
				!jQuery.isXMLDoc( elem ) ) {

			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
			destElements = getAll( clone );
			srcElements = getAll( elem );

			for ( i = 0, l = srcElements.length; i < l; i++ ) {
				fixInput( srcElements[ i ], 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, l = srcElements.length; i < l; i++ ) {
					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
				}
			} else {
				cloneCopyEvent( elem, clone );
			}
		}

		// Preserve script evaluation history
		destElements = getAll( clone, "script" );
		if ( destElements.length > 0 ) {
			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
		}

		// Return the cloned set
		return clone;
	},

	cleanData: function( elems ) {
		var data, elem, type,
			special = jQuery.event.special,
			i = 0;

		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
			if ( acceptData( elem ) ) {
				if ( ( data = elem[ dataPriv.expando ] ) ) {
					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 );
							}
						}
					}

					// Support: Chrome <=35 - 45+
					// Assign undefined instead of using delete, see Data#remove
					elem[ dataPriv.expando ] = undefined;
				}
				if ( elem[ dataUser.expando ] ) {

					// Support: Chrome <=35 - 45+
					// Assign undefined instead of using delete, see Data#remove
					elem[ dataUser.expando ] = undefined;
				}
			}
		}
	}
} );

jQuery.fn.extend( {
	detach: function( selector ) {
		return remove( this, selector, true );
	},

	remove: function( selector ) {
		return remove( this, selector );
	},

	text: function( value ) {
		return access( this, function( value ) {
			return value === undefined ?
				jQuery.text( this ) :
				this.empty().each( function() {
					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
						this.textContent = value;
					}
				} );
		}, null, value, arguments.length );
	},

	append: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
				var target = manipulationTarget( this, elem );
				target.appendChild( elem );
			}
		} );
	},

	prepend: function() {
		return domManip( this, 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 domManip( this, arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this );
			}
		} );
	},

	after: function() {
		return domManip( this, arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this.nextSibling );
			}
		} );
	},

	empty: function() {
		var elem,
			i = 0;

		for ( ; ( elem = this[ i ] ) != null; i++ ) {
			if ( elem.nodeType === 1 ) {

				// Prevent memory leaks
				jQuery.cleanData( getAll( elem, false ) );

				// Remove any remaining nodes
				elem.textContent = "";
			}
		}

		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 && elem.nodeType === 1 ) {
				return elem.innerHTML;
			}

			// See if we can take a shortcut and just use innerHTML
			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {

				value = jQuery.htmlPrefilter( value );

				try {
					for ( ; i < l; i++ ) {
						elem = this[ i ] || {};

						// Remove element nodes and prevent memory leaks
						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 ignored = [];

		// Make the changes, replacing each non-ignored context element with the new content
		return domManip( this, arguments, function( elem ) {
			var parent = this.parentNode;

			if ( jQuery.inArray( this, ignored ) < 0 ) {
				jQuery.cleanData( getAll( this ) );
				if ( parent ) {
					parent.replaceChild( elem, this );
				}
			}

		// Force callback invocation
		}, ignored );
	}
} );

jQuery.each( {
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function( name, original ) {
	jQuery.fn[ name ] = function( selector ) {
		var elems,
			ret = [],
			insert = jQuery( selector ),
			last = insert.length - 1,
			i = 0;

		for ( ; i <= last; i++ ) {
			elems = i === last ? this : this.clone( true );
			jQuery( insert[ i ] )[ original ]( elems );

			// Support: Android <=4.0 only, PhantomJS 1 only
			// .get() because push.apply(_, arraylike) throws on ancient WebKit
			push.apply( ret, elems.get() );
		}

		return this.pushStack( ret );
	};
} );
var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );

var getStyles = function( elem ) {

		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
		// IE throws on elements created in popups
		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
		var view = elem.ownerDocument.defaultView;

		if ( !view || !view.opener ) {
			view = window;
		}

		return view.getComputedStyle( elem );
	};

var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );



( function() {

	// Executing both pixelPosition & boxSizingReliable tests require only one layout
	// so they're executed at the same time to save the second computation.
	function computeStyleTests() {

		// This is a singleton, we need to execute it only once
		if ( !div ) {
			return;
		}

		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
			"margin-top:1px;padding:0;border:0";
		div.style.cssText =
			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
			"margin:auto;border:1px;padding:1px;" +
			"width:60%;top:1%";
		documentElement.appendChild( container ).appendChild( div );

		var divStyle = window.getComputedStyle( div );
		pixelPositionVal = divStyle.top !== "1%";

		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;

		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
		// Some styles come back with percentage values, even though they shouldn't
		div.style.right = "60%";
		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;

		// Support: IE 9 - 11 only
		// Detect misreporting of content dimensions for box-sizing:border-box elements
		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;

		// Support: IE 9 only
		// Detect overflow:scroll screwiness (gh-3699)
		// Support: Chrome <=64
		// Don't get tricked when zoom affects offsetWidth (gh-4029)
		div.style.position = "absolute";
		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;

		documentElement.removeChild( container );

		// Nullify the div so it wouldn't be stored in the memory and
		// it will also be a sign that checks already performed
		div = null;
	}

	function roundPixelMeasures( measure ) {
		return Math.round( parseFloat( measure ) );
	}

	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
		reliableMarginLeftVal,
		container = document.createElement( "div" ),
		div = document.createElement( "div" );

	// Finish early in limited (non-browser) environments
	if ( !div.style ) {
		return;
	}

	// Support: IE <=9 - 11 only
	// Style of cloned element affects source element cloned (#8908)
	div.style.backgroundClip = "content-box";
	div.cloneNode( true ).style.backgroundClip = "";
	support.clearCloneStyle = div.style.backgroundClip === "content-box";

	jQuery.extend( support, {
		boxSizingReliable: function() {
			computeStyleTests();
			return boxSizingReliableVal;
		},
		pixelBoxStyles: function() {
			computeStyleTests();
			return pixelBoxStylesVal;
		},
		pixelPosition: function() {
			computeStyleTests();
			return pixelPositionVal;
		},
		reliableMarginLeft: function() {
			computeStyleTests();
			return reliableMarginLeftVal;
		},
		scrollboxSize: function() {
			computeStyleTests();
			return scrollboxSizeVal;
		}
	} );
} )();


function curCSS( elem, name, computed ) {
	var width, minWidth, maxWidth, ret,

		// Support: Firefox 51+
		// Retrieving style before computed somehow
		// fixes an issue with getting wrong values
		// on detached elements
		style = elem.style;

	computed = computed || getStyles( elem );

	// getPropertyValue is needed for:
	//   .css('filter') (IE 9 only, #12537)
	//   .css('--customProperty) (#3144)
	if ( computed ) {
		ret = computed.getPropertyValue( name ) || computed[ name ];

		if ( ret === "" && !isAttached( elem ) ) {
			ret = jQuery.style( elem, name );
		}

		// A tribute to the "awesome hack by Dean Edwards"
		// Android Browser returns percentage for some values,
		// but width seems to be reliably pixels.
		// This is against the CSSOM draft spec:
		// https://drafts.csswg.org/cssom/#resolved-values
		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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;
		}
	}

	return ret !== undefined ?

		// Support: IE <=9 - 11 only
		// IE returns zIndex value as an integer.
		ret + "" :
		ret;
}


function addGetHookIf( conditionFn, hookFn ) {

	// Define the hook, we'll check on the first run if it's really needed.
	return {
		get: function() {
			if ( conditionFn() ) {

				// Hook not needed (or it's not possible to use it due
				// to missing dependency), remove it.
				delete this.get;
				return;
			}

			// Hook needed; redefine it so that the support test is not executed again.
			return ( this.get = hookFn ).apply( this, arguments );
		}
	};
}


var cssPrefixes = [ "Webkit", "Moz", "ms" ],
	emptyStyle = document.createElement( "div" ).style,
	vendorProps = {};

// Return a vendor-prefixed property or undefined
function vendorPropName( name ) {

	// Check for vendor prefixed names
	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
		i = cssPrefixes.length;

	while ( i-- ) {
		name = cssPrefixes[ i ] + capName;
		if ( name in emptyStyle ) {
			return name;
		}
	}
}

// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
function finalPropName( name ) {
	var final = jQuery.cssProps[ name ] || vendorProps[ name ];

	if ( final ) {
		return final;
	}
	if ( name in emptyStyle ) {
		return name;
	}
	return vendorProps[ name ] = vendorPropName( name ) || name;
}


var

	// 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]).+)/,
	rcustomProp = /^--/,
	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
	cssNormalTransform = {
		letterSpacing: "0",
		fontWeight: "400"
	};

function setPositiveNumber( elem, value, subtract ) {

	// Any relative (+/-) values have already been
	// normalized at this point
	var matches = rcssNum.exec( value );
	return matches ?

		// Guard against undefined "subtract", e.g., when used as in cssHooks
		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
		value;
}

function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
	var i = dimension === "width" ? 1 : 0,
		extra = 0,
		delta = 0;

	// Adjustment may not be necessary
	if ( box === ( isBorderBox ? "border" : "content" ) ) {
		return 0;
	}

	for ( ; i < 4; i += 2 ) {

		// Both box models exclude margin
		if ( box === "margin" ) {
			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
		}

		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
		if ( !isBorderBox ) {

			// Add padding
			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );

			// For "border" or "margin", add border
			if ( box !== "padding" ) {
				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );

			// But still keep track of it otherwise
			} else {
				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
			}

		// If we get here with a border-box (content + padding + border), we're seeking "content" or
		// "padding" or "margin"
		} else {

			// For "content", subtract padding
			if ( box === "content" ) {
				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
			}

			// For "content" or "padding", subtract border
			if ( box !== "margin" ) {
				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
			}
		}
	}

	// Account for positive content-box scroll gutter when requested by providing computedVal
	if ( !isBorderBox && computedVal >= 0 ) {

		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
		// Assuming integer scroll gutter, subtract the rest and round down
		delta += Math.max( 0, Math.ceil(
			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
			computedVal -
			delta -
			extra -
			0.5

		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
		// Use an explicit zero to avoid NaN (gh-3964)
		) ) || 0;
	}

	return delta;
}

function getWidthOrHeight( elem, dimension, extra ) {

	// Start with computed style
	var styles = getStyles( elem ),

		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
		// Fake content-box until we know it's needed to know the true value.
		boxSizingNeeded = !support.boxSizingReliable() || extra,
		isBorderBox = boxSizingNeeded &&
			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
		valueIsBorderBox = isBorderBox,

		val = curCSS( elem, dimension, styles ),
		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );

	// Support: Firefox <=54
	// Return a confounding non-pixel value or feign ignorance, as appropriate.
	if ( rnumnonpx.test( val ) ) {
		if ( !extra ) {
			return val;
		}
		val = "auto";
	}


	// Fall back to offsetWidth/offsetHeight when value is "auto"
	// This happens for inline elements with no explicit setting (gh-3571)
	// Support: Android <=4.1 - 4.3 only
	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
	// Support: IE 9-11 only
	// Also use offsetWidth/offsetHeight for when box sizing is unreliable
	// We use getClientRects() to check for hidden/disconnected.
	// In those cases, the computed value can be trusted to be border-box
	if ( ( !support.boxSizingReliable() && isBorderBox ||
		val === "auto" ||
		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
		elem.getClientRects().length ) {

		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";

		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
		// retrieved value as a content box dimension.
		valueIsBorderBox = offsetProp in elem;
		if ( valueIsBorderBox ) {
			val = elem[ offsetProp ];
		}
	}

	// Normalize "" and auto
	val = parseFloat( val ) || 0;

	// Adjust for the element's box model
	return ( val +
		boxModelAdjustment(
			elem,
			dimension,
			extra || ( isBorderBox ? "border" : "content" ),
			valueIsBorderBox,
			styles,

			// Provide the current computed size to request scroll gutter calculation (gh-3589)
			val
		)
	) + "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: {
		"animationIterationCount": true,
		"columnCount": true,
		"fillOpacity": true,
		"flexGrow": true,
		"flexShrink": true,
		"fontWeight": true,
		"gridArea": true,
		"gridColumn": true,
		"gridColumnEnd": true,
		"gridColumnStart": true,
		"gridRow": true,
		"gridRowEnd": true,
		"gridRowStart": 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: {},

	// 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 = camelCase( name ),
			isCustomProp = rcustomProp.test( name ),
			style = elem.style;

		// Make sure that we're working with the right name. We don't
		// want to query the value if it is a CSS custom property
		// since they are user-defined.
		if ( !isCustomProp ) {
			name = finalPropName( origName );
		}

		// Gets hook for the prefixed version, then unprefixed version
		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];

		// Check if we're setting a value
		if ( value !== undefined ) {
			type = typeof value;

			// Convert "+=" or "-=" to relative numbers (#7345)
			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
				value = adjustCSS( elem, name, ret );

				// Fixes bug #9237
				type = "number";
			}

			// Make sure that null and NaN values aren't set (#7116)
			if ( value == null || value !== value ) {
				return;
			}

			// If a number was passed in, add the unit (except for certain CSS properties)
			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
			// "px" to a few hardcoded values.
			if ( type === "number" && !isCustomProp ) {
				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
			}

			// background-* props affect original clone's values
			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 ) {

				if ( isCustomProp ) {
					style.setProperty( name, value );
				} else {
					style[ name ] = value;
				}
			}

		} 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 val, num, hooks,
			origName = camelCase( name ),
			isCustomProp = rcustomProp.test( name );

		// Make sure that we're working with the right name. We don't
		// want to modify the value if it is a CSS custom property
		// since they are user-defined.
		if ( !isCustomProp ) {
			name = finalPropName( origName );
		}

		// Try prefixed name followed by the unprefixed name
		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 ];
		}

		// Make numeric if forced or a qualifier was provided and val looks numeric
		if ( extra === "" || extra ) {
			num = parseFloat( val );
			return extra === true || isFinite( num ) ? num || 0 : val;
		}

		return val;
	}
} );

jQuery.each( [ "height", "width" ], function( i, dimension ) {
	jQuery.cssHooks[ dimension ] = {
		get: function( elem, computed, extra ) {
			if ( computed ) {

				// Certain elements can have dimension info if we invisibly show them
				// but it must have a current display style that would benefit
				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&

					// Support: Safari 8+
					// Table columns in Safari have non-zero offsetWidth & zero
					// getBoundingClientRect().width unless display is changed.
					// Support: IE <=11 only
					// Running getBoundingClientRect on a disconnected node
					// in IE throws an error.
					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
						swap( elem, cssShow, function() {
							return getWidthOrHeight( elem, dimension, extra );
						} ) :
						getWidthOrHeight( elem, dimension, extra );
			}
		},

		set: function( elem, value, extra ) {
			var matches,
				styles = getStyles( elem ),

				// Only read styles.position if the test has a chance to fail
				// to avoid forcing a reflow.
				scrollboxSizeBuggy = !support.scrollboxSize() &&
					styles.position === "absolute",

				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
				boxSizingNeeded = scrollboxSizeBuggy || extra,
				isBorderBox = boxSizingNeeded &&
					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
				subtract = extra ?
					boxModelAdjustment(
						elem,
						dimension,
						extra,
						isBorderBox,
						styles
					) :
					0;

			// Account for unreliable border-box dimensions by comparing offset* to computed and
			// faking a content-box to get border and padding (gh-3699)
			if ( isBorderBox && scrollboxSizeBuggy ) {
				subtract -= Math.ceil(
					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
					parseFloat( styles[ dimension ] ) -
					boxModelAdjustment( elem, dimension, "border", false, styles ) -
					0.5
				);
			}

			// Convert to pixels if value adjustment is needed
			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
				( matches[ 3 ] || "px" ) !== "px" ) {

				elem.style[ dimension ] = value;
				value = jQuery.css( elem, dimension );
			}

			return setPositiveNumber( elem, value, subtract );
		}
	};
} );

jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
	function( elem, computed ) {
		if ( computed ) {
			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
				elem.getBoundingClientRect().left -
					swap( elem, { marginLeft: 0 }, function() {
						return elem.getBoundingClientRect().left;
					} )
				) + "px";
		}
	}
);

// 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 ( prefix !== "margin" ) {
		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 ( Array.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 );
	}
} );


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 || jQuery.easing._default;
		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;

			// Use a property on the element directly when it is not a DOM element,
			// or when there is no matching style property that exists.
			if ( tween.elem.nodeType !== 1 ||
				tween.elem[ tween.prop ] != null && 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.
			// 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 available and use plain properties where available.
			if ( jQuery.fx.step[ tween.prop ] ) {
				jQuery.fx.step[ tween.prop ]( tween );
			} else if ( tween.elem.nodeType === 1 && (
					jQuery.cssHooks[ tween.prop ] ||
					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
			} else {
				tween.elem[ tween.prop ] = tween.now;
			}
		}
	}
};

// Support: IE <=9 only
// 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;
	},
	_default: "swing"
};

jQuery.fx = Tween.prototype.init;

// Back compat <1.8 extension point
jQuery.fx.step = {};




var
	fxNow, inProgress,
	rfxtypes = /^(?:toggle|show|hide)$/,
	rrun = /queueHooks$/;

function schedule() {
	if ( inProgress ) {
		if ( document.hidden === false && window.requestAnimationFrame ) {
			window.requestAnimationFrame( schedule );
		} else {
			window.setTimeout( schedule, jQuery.fx.interval );
		}

		jQuery.fx.tick();
	}
}

// Animations created synchronously will run synchronously
function createFxNow() {
	window.setTimeout( function() {
		fxNow = undefined;
	} );
	return ( fxNow = Date.now() );
}

// Generate parameters to create a standard animation
function genFx( type, includeWidth ) {
	var which,
		i = 0,
		attrs = { height: type };

	// If we include width, step value is 1 to do all cssExpand values,
	// otherwise step value is 2 to skip over Left and Right
	includeWidth = includeWidth ? 1 : 0;
	for ( ; i < 4; i += 2 - includeWidth ) {
		which = cssExpand[ i ];
		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
	}

	if ( includeWidth ) {
		attrs.opacity = attrs.width = type;
	}

	return attrs;
}

function createTween( value, prop, animation ) {
	var tween,
		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
		index = 0,
		length = collection.length;
	for ( ; index < length; index++ ) {
		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {

			// We're done with this property
			return tween;
		}
	}
}

function defaultPrefilter( elem, props, opts ) {
	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
		isBox = "width" in props || "height" in props,
		anim = this,
		orig = {},
		style = elem.style,
		hidden = elem.nodeType && isHiddenWithinTree( elem ),
		dataShow = dataPriv.get( elem, "fxshow" );

	// Queue-skipping animations hijack the fx hooks
	if ( !opts.queue ) {
		hooks = jQuery._queueHooks( elem, "fx" );
		if ( hooks.unqueued == null ) {
			hooks.unqueued = 0;
			oldfire = hooks.empty.fire;
			hooks.empty.fire = function() {
				if ( !hooks.unqueued ) {
					oldfire();
				}
			};
		}
		hooks.unqueued++;

		anim.always( function() {

			// Ensure the complete handler is called before this completes
			anim.always( function() {
				hooks.unqueued--;
				if ( !jQuery.queue( elem, "fx" ).length ) {
					hooks.empty.fire();
				}
			} );
		} );
	}

	// Detect show/hide animations
	for ( prop in props ) {
		value = props[ prop ];
		if ( rfxtypes.test( value ) ) {
			delete props[ prop ];
			toggle = toggle || value === "toggle";
			if ( value === ( hidden ? "hide" : "show" ) ) {

				// Pretend to be hidden if this is a "show" and
				// there is still data from a stopped show/hide
				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
					hidden = true;

				// Ignore all other no-op show/hide data
				} else {
					continue;
				}
			}
			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
		}
	}

	// Bail out if this is a no-op like .hide().hide()
	propTween = !jQuery.isEmptyObject( props );
	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
		return;
	}

	// Restrict "overflow" and "display" styles during box animations
	if ( isBox && elem.nodeType === 1 ) {

		// Support: IE <=9 - 11, Edge 12 - 15
		// Record all 3 overflow attributes because IE does not infer the shorthand
		// from identically-valued overflowX and overflowY and Edge just mirrors
		// the overflowX value there.
		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];

		// Identify a display type, preferring old show/hide data over the CSS cascade
		restoreDisplay = dataShow && dataShow.display;
		if ( restoreDisplay == null ) {
			restoreDisplay = dataPriv.get( elem, "display" );
		}
		display = jQuery.css( elem, "display" );
		if ( display === "none" ) {
			if ( restoreDisplay ) {
				display = restoreDisplay;
			} else {

				// Get nonempty value(s) by temporarily forcing visibility
				showHide( [ elem ], true );
				restoreDisplay = elem.style.display || restoreDisplay;
				display = jQuery.css( elem, "display" );
				showHide( [ elem ] );
			}
		}

		// Animate inline elements as inline-block
		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
			if ( jQuery.css( elem, "float" ) === "none" ) {

				// Restore the original display value at the end of pure show/hide animations
				if ( !propTween ) {
					anim.done( function() {
						style.display = restoreDisplay;
					} );
					if ( restoreDisplay == null ) {
						display = style.display;
						restoreDisplay = display === "none" ? "" : display;
					}
				}
				style.display = "inline-block";
			}
		}
	}

	if ( opts.overflow ) {
		style.overflow = "hidden";
		anim.always( function() {
			style.overflow = opts.overflow[ 0 ];
			style.overflowX = opts.overflow[ 1 ];
			style.overflowY = opts.overflow[ 2 ];
		} );
	}

	// Implement show/hide animations
	propTween = false;
	for ( prop in orig ) {

		// General show/hide setup for this element animation
		if ( !propTween ) {
			if ( dataShow ) {
				if ( "hidden" in dataShow ) {
					hidden = dataShow.hidden;
				}
			} else {
				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
			}

			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
			if ( toggle ) {
				dataShow.hidden = !hidden;
			}

			// Show elements before animating them
			if ( hidden ) {
				showHide( [ elem ], true );
			}

			/* eslint-disable no-loop-func */

			anim.done( function() {

			/* eslint-enable no-loop-func */

				// The final step of a "hide" animation is actually hiding the element
				if ( !hidden ) {
					showHide( [ elem ] );
				}
				dataPriv.remove( elem, "fxshow" );
				for ( prop in orig ) {
					jQuery.style( elem, prop, orig[ prop ] );
				}
			} );
		}

		// Per-property setup
		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
		if ( !( prop in dataShow ) ) {
			dataShow[ prop ] = propTween.start;
			if ( hidden ) {
				propTween.end = propTween.start;
				propTween.start = 0;
			}
		}
	}
}

function propFilter( props, specialEasing ) {
	var index, name, easing, value, hooks;

	// camelCase, specialEasing and expand cssHook pass
	for ( index in props ) {
		name = camelCase( index );
		easing = specialEasing[ name ];
		value = props[ index ];
		if ( Array.isArray( value ) ) {
			easing = value[ 1 ];
			value = props[ index ] = value[ 0 ];
		}

		if ( index !== name ) {
			props[ name ] = value;
			delete props[ index ];
		}

		hooks = jQuery.cssHooks[ name ];
		if ( hooks && "expand" in hooks ) {
			value = hooks.expand( value );
			delete props[ name ];

			// Not quite $.extend, this won't overwrite existing keys.
			// Reusing 'index' because we have the correct "name"
			for ( index in value ) {
				if ( !( index in props ) ) {
					props[ index ] = value[ index ];
					specialEasing[ index ] = easing;
				}
			}
		} else {
			specialEasing[ name ] = easing;
		}
	}
}

function Animation( elem, properties, options ) {
	var result,
		stopped,
		index = 0,
		length = Animation.prefilters.length,
		deferred = jQuery.Deferred().always( function() {

			// Don't match elem in the :animated selector
			delete tick.elem;
		} ),
		tick = function() {
			if ( stopped ) {
				return false;
			}
			var currentTime = fxNow || createFxNow(),
				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),

				// Support: Android 2.3 only
				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
				temp = remaining / animation.duration || 0,
				percent = 1 - temp,
				index = 0,
				length = animation.tweens.length;

			for ( ; index < length; index++ ) {
				animation.tweens[ index ].run( percent );
			}

			deferred.notifyWith( elem, [ animation, percent, remaining ] );

			// If there's more to do, yield
			if ( percent < 1 && length ) {
				return remaining;
			}

			// If this was an empty animation, synthesize a final progress notification
			if ( !length ) {
				deferred.notifyWith( elem, [ animation, 1, 0 ] );
			}

			// Resolve the animation and report its conclusion
			deferred.resolveWith( elem, [ animation ] );
			return false;
		},
		animation = deferred.promise( {
			elem: elem,
			props: jQuery.extend( {}, properties ),
			opts: jQuery.extend( true, {
				specialEasing: {},
				easing: jQuery.easing._default
			}, options ),
			originalProperties: properties,
			originalOptions: options,
			startTime: fxNow || createFxNow(),
			duration: options.duration,
			tweens: [],
			createTween: function( prop, end ) {
				var tween = jQuery.Tween( elem, animation.opts, prop, end,
						animation.opts.specialEasing[ prop ] || animation.opts.easing );
				animation.tweens.push( tween );
				return tween;
			},
			stop: function( gotoEnd ) {
				var index = 0,

					// If we are going to the end, we want to run all the tweens
					// otherwise we skip this part
					length = gotoEnd ? animation.tweens.length : 0;
				if ( stopped ) {
					return this;
				}
				stopped = true;
				for ( ; index < length; index++ ) {
					animation.tweens[ index ].run( 1 );
				}

				// Resolve when we played the last frame; otherwise, reject
				if ( gotoEnd ) {
					deferred.notifyWith( elem, [ animation, 1, 0 ] );
					deferred.resolveWith( elem, [ animation, gotoEnd ] );
				} else {
					deferred.rejectWith( elem, [ animation, gotoEnd ] );
				}
				return this;
			}
		} ),
		props = animation.props;

	propFilter( props, animation.opts.specialEasing );

	for ( ; index < length; index++ ) {
		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
		if ( result ) {
			if ( isFunction( result.stop ) ) {
				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
					result.stop.bind( result );
			}
			return result;
		}
	}

	jQuery.map( props, createTween, animation );

	if ( isFunction( animation.opts.start ) ) {
		animation.opts.start.call( elem, animation );
	}

	// Attach callbacks from options
	animation
		.progress( animation.opts.progress )
		.done( animation.opts.done, animation.opts.complete )
		.fail( animation.opts.fail )
		.always( animation.opts.always );

	jQuery.fx.timer(
		jQuery.extend( tick, {
			elem: elem,
			anim: animation,
			queue: animation.opts.queue
		} )
	);

	return animation;
}

jQuery.Animation = jQuery.extend( Animation, {

	tweeners: {
		"*": [ function( prop, value ) {
			var tween = this.createTween( prop, value );
			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
			return tween;
		} ]
	},

	tweener: function( props, callback ) {
		if ( isFunction( props ) ) {
			callback = props;
			props = [ "*" ];
		} else {
			props = props.match( rnothtmlwhite );
		}

		var prop,
			index = 0,
			length = props.length;

		for ( ; index < length; index++ ) {
			prop = props[ index ];
			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
			Animation.tweeners[ prop ].unshift( callback );
		}
	},

	prefilters: [ defaultPrefilter ],

	prefilter: function( callback, prepend ) {
		if ( prepend ) {
			Animation.prefilters.unshift( callback );
		} else {
			Animation.prefilters.push( callback );
		}
	}
} );

jQuery.speed = function( speed, easing, fn ) {
	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
		complete: fn || !fn && easing ||
			isFunction( speed ) && speed,
		duration: speed,
		easing: fn && easing || easing && !isFunction( easing ) && easing
	};

	// Go to the end state if fx are off
	if ( jQuery.fx.off ) {
		opt.duration = 0;

	} else {
		if ( typeof opt.duration !== "number" ) {
			if ( opt.duration in jQuery.fx.speeds ) {
				opt.duration = jQuery.fx.speeds[ opt.duration ];

			} else {
				opt.duration = jQuery.fx.speeds._default;
			}
		}
	}

	// Normalize opt.queue - true/undefined/null -> "fx"
	if ( opt.queue == null || opt.queue === true ) {
		opt.queue = "fx";
	}

	// Queueing
	opt.old = opt.complete;

	opt.complete = function() {
		if ( isFunction( opt.old ) ) {
			opt.old.call( this );
		}

		if ( opt.queue ) {
			jQuery.dequeue( this, opt.queue );
		}
	};

	return opt;
};

jQuery.fn.extend( {
	fadeTo: function( speed, to, easing, callback ) {

		// Show any hidden elements after setting opacity to 0
		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()

			// Animate to the value specified
			.end().animate( { opacity: to }, speed, easing, callback );
	},
	animate: function( prop, speed, easing, callback ) {
		var empty = jQuery.isEmptyObject( prop ),
			optall = jQuery.speed( speed, easing, callback ),
			doAnimation = function() {

				// Operate on a copy of prop so per-property easing won't be lost
				var anim = Animation( this, jQuery.extend( {}, prop ), optall );

				// Empty animations, or finishing resolves immediately
				if ( empty || dataPriv.get( this, "finish" ) ) {
					anim.stop( true );
				}
			};
			doAnimation.finish = doAnimation;

		return empty || optall.queue === false ?
			this.each( doAnimation ) :
			this.queue( optall.queue, doAnimation );
	},
	stop: function( type, clearQueue, gotoEnd ) {
		var stopQueue = function( hooks ) {
			var stop = hooks.stop;
			delete hooks.stop;
			stop( gotoEnd );
		};

		if ( typeof type !== "string" ) {
			gotoEnd = clearQueue;
			clearQueue = type;
			type = undefined;
		}
		if ( clearQueue && type !== false ) {
			this.queue( type || "fx", [] );
		}

		return this.each( function() {
			var dequeue = true,
				index = type != null && type + "queueHooks",
				timers = jQuery.timers,
				data = dataPriv.get( this );

			if ( index ) {
				if ( data[ index ] && data[ index ].stop ) {
					stopQueue( data[ index ] );
				}
			} else {
				for ( index in data ) {
					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
						stopQueue( data[ index ] );
					}
				}
			}

			for ( index = timers.length; index--; ) {
				if ( timers[ index ].elem === this &&
					( type == null || timers[ index ].queue === type ) ) {

					timers[ index ].anim.stop( gotoEnd );
					dequeue = false;
					timers.splice( index, 1 );
				}
			}

			// Start the next in the queue if the last step wasn't forced.
			// Timers currently will call their complete callbacks, which
			// will dequeue but only if they were gotoEnd.
			if ( dequeue || !gotoEnd ) {
				jQuery.dequeue( this, type );
			}
		} );
	},
	finish: function( type ) {
		if ( type !== false ) {
			type = type || "fx";
		}
		return this.each( function() {
			var index,
				data = dataPriv.get( this ),
				queue = data[ type + "queue" ],
				hooks = data[ type + "queueHooks" ],
				timers = jQuery.timers,
				length = queue ? queue.length : 0;

			// Enable finishing flag on private data
			data.finish = true;

			// Empty the queue first
			jQuery.queue( this, type, [] );

			if ( hooks && hooks.stop ) {
				hooks.stop.call( this, true );
			}

			// Look for any active animations, and finish them
			for ( index = timers.length; index--; ) {
				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
					timers[ index ].anim.stop( true );
					timers.splice( index, 1 );
				}
			}

			// Look for any animations in the old queue and finish them
			for ( index = 0; index < length; index++ ) {
				if ( queue[ index ] && queue[ index ].finish ) {
					queue[ index ].finish.call( this );
				}
			}

			// Turn off finishing flag
			delete data.finish;
		} );
	}
} );

jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
	var cssFn = jQuery.fn[ name ];
	jQuery.fn[ name ] = function( speed, easing, callback ) {
		return speed == null || typeof speed === "boolean" ?
			cssFn.apply( this, arguments ) :
			this.animate( genFx( name, true ), speed, easing, callback );
	};
} );

// Generate shortcuts for custom animations
jQuery.each( {
	slideDown: genFx( "show" ),
	slideUp: genFx( "hide" ),
	slideToggle: genFx( "toggle" ),
	fadeIn: { opacity: "show" },
	fadeOut: { opacity: "hide" },
	fadeToggle: { opacity: "toggle" }
}, function( name, props ) {
	jQuery.fn[ name ] = function( speed, easing, callback ) {
		return this.animate( props, speed, easing, callback );
	};
} );

jQuery.timers = [];
jQuery.fx.tick = function() {
	var timer,
		i = 0,
		timers = jQuery.timers;

	fxNow = Date.now();

	for ( ; i < timers.length; i++ ) {
		timer = timers[ i ];

		// Run the timer and safely remove it when done (allowing for external removal)
		if ( !timer() && timers[ i ] === timer ) {
			timers.splice( i--, 1 );
		}
	}

	if ( !timers.length ) {
		jQuery.fx.stop();
	}
	fxNow = undefined;
};

jQuery.fx.timer = function( timer ) {
	jQuery.timers.push( timer );
	jQuery.fx.start();
};

jQuery.fx.interval = 13;
jQuery.fx.start = function() {
	if ( inProgress ) {
		return;
	}

	inProgress = true;
	schedule();
};

jQuery.fx.stop = function() {
	inProgress = null;
};

jQuery.fx.speeds = {
	slow: 600,
	fast: 200,

	// Default speed
	_default: 400
};


// Based off of the plugin by Clint Helfers, with permission.
// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
jQuery.fn.delay = function( time, type ) {
	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
	type = type || "fx";

	return this.queue( type, function( next, hooks ) {
		var timeout = window.setTimeout( next, time );
		hooks.stop = function() {
			window.clearTimeout( timeout );
		};
	} );
};


( function() {
	var input = document.createElement( "input" ),
		select = document.createElement( "select" ),
		opt = select.appendChild( document.createElement( "option" ) );

	input.type = "checkbox";

	// Support: Android <=4.3 only
	// Default value for a checkbox should be "on"
	support.checkOn = input.value !== "";

	// Support: IE <=11 only
	// Must access selectedIndex to make default options select
	support.optSelected = opt.selected;

	// Support: IE <=11 only
	// An input loses its value after becoming a radio
	input = document.createElement( "input" );
	input.value = "t";
	input.type = "radio";
	support.radioValue = input.value === "t";
} )();


var boolHook,
	attrHandle = jQuery.expr.attrHandle;

jQuery.fn.extend( {
	attr: function( name, value ) {
		return access( this, jQuery.attr, name, value, arguments.length > 1 );
	},

	removeAttr: function( name ) {
		return this.each( function() {
			jQuery.removeAttr( this, name );
		} );
	}
} );

jQuery.extend( {
	attr: function( elem, name, value ) {
		var ret, hooks,
			nType = elem.nodeType;

		// Don't get/set attributes on text, comment and attribute nodes
		if ( nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}

		// Fallback to prop when attributes are not supported
		if ( typeof elem.getAttribute === "undefined" ) {
			return jQuery.prop( elem, name, value );
		}

		// Attribute hooks are determined by the lowercase version
		// Grab necessary hook if one is defined
		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
		}

		if ( value !== undefined ) {
			if ( value === null ) {
				jQuery.removeAttr( elem, name );
				return;
			}

			if ( hooks && "set" in hooks &&
				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
				return ret;
			}

			elem.setAttribute( name, value + "" );
			return value;
		}

		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
			return ret;
		}

		ret = jQuery.find.attr( elem, name );

		// Non-existent attributes return null, we normalize to undefined
		return ret == null ? undefined : ret;
	},

	attrHooks: {
		type: {
			set: function( elem, value ) {
				if ( !support.radioValue && value === "radio" &&
					nodeName( elem, "input" ) ) {
					var val = elem.value;
					elem.setAttribute( "type", value );
					if ( val ) {
						elem.value = val;
					}
					return value;
				}
			}
		}
	},

	removeAttr: function( elem, value ) {
		var name,
			i = 0,

			// Attribute names can contain non-HTML whitespace characters
			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
			attrNames = value && value.match( rnothtmlwhite );

		if ( attrNames && elem.nodeType === 1 ) {
			while ( ( name = attrNames[ i++ ] ) ) {
				elem.removeAttribute( name );
			}
		}
	}
} );

// Hooks for boolean attributes
boolHook = {
	set: function( elem, value, name ) {
		if ( value === false ) {

			// Remove boolean attributes when set to false
			jQuery.removeAttr( elem, name );
		} else {
			elem.setAttribute( name, name );
		}
		return name;
	}
};

jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
	var getter = attrHandle[ name ] || jQuery.find.attr;

	attrHandle[ name ] = function( elem, name, isXML ) {
		var ret, handle,
			lowercaseName = name.toLowerCase();

		if ( !isXML ) {

			// Avoid an infinite loop by temporarily removing this function from the getter
			handle = attrHandle[ lowercaseName ];
			attrHandle[ lowercaseName ] = ret;
			ret = getter( elem, name, isXML ) != null ?
				lowercaseName :
				null;
			attrHandle[ lowercaseName ] = handle;
		}
		return ret;
	};
} );




var rfocusable = /^(?:input|select|textarea|button)$/i,
	rclickable = /^(?:a|area)$/i;

jQuery.fn.extend( {
	prop: function( name, value ) {
		return access( this, jQuery.prop, name, value, arguments.length > 1 );
	},

	removeProp: function( name ) {
		return this.each( function() {
			delete this[ jQuery.propFix[ name ] || name ];
		} );
	}
} );

jQuery.extend( {
	prop: function( elem, name, value ) {
		var ret, hooks,
			nType = elem.nodeType;

		// Don't get/set properties on text, comment and attribute nodes
		if ( nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}

		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {

			// Fix name and attach hooks
			name = jQuery.propFix[ name ] || name;
			hooks = jQuery.propHooks[ name ];
		}

		if ( value !== undefined ) {
			if ( hooks && "set" in hooks &&
				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
				return ret;
			}

			return ( elem[ name ] = value );
		}

		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
			return ret;
		}

		return elem[ name ];
	},

	propHooks: {
		tabIndex: {
			get: function( elem ) {

				// Support: IE <=9 - 11 only
				// elem.tabIndex doesn't always return the
				// correct value when it hasn't been explicitly set
				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
				// Use proper attribute retrieval(#12072)
				var tabindex = jQuery.find.attr( elem, "tabindex" );

				if ( tabindex ) {
					return parseInt( tabindex, 10 );
				}

				if (
					rfocusable.test( elem.nodeName ) ||
					rclickable.test( elem.nodeName ) &&
					elem.href
				) {
					return 0;
				}

				return -1;
			}
		}
	},

	propFix: {
		"for": "htmlFor",
		"class": "className"
	}
} );

// Support: IE <=11 only
// Accessing the selectedIndex property
// forces the browser to respect setting selected
// on the option
// The getter ensures a default option is selected
// when in an optgroup
// eslint rule "no-unused-expressions" is disabled for this code
// since it considers such accessions noop
if ( !support.optSelected ) {
	jQuery.propHooks.selected = {
		get: function( elem ) {

			/* eslint no-unused-expressions: "off" */

			var parent = elem.parentNode;
			if ( parent && parent.parentNode ) {
				parent.parentNode.selectedIndex;
			}
			return null;
		},
		set: function( elem ) {

			/* eslint no-unused-expressions: "off" */

			var parent = elem.parentNode;
			if ( parent ) {
				parent.selectedIndex;

				if ( parent.parentNode ) {
					parent.parentNode.selectedIndex;
				}
			}
		}
	};
}

jQuery.each( [
	"tabIndex",
	"readOnly",
	"maxLength",
	"cellSpacing",
	"cellPadding",
	"rowSpan",
	"colSpan",
	"useMap",
	"frameBorder",
	"contentEditable"
], function() {
	jQuery.propFix[ this.toLowerCase() ] = this;
} );




	// Strip and collapse whitespace according to HTML spec
	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
	function stripAndCollapse( value ) {
		var tokens = value.match( rnothtmlwhite ) || [];
		return tokens.join( " " );
	}


function getClass( elem ) {
	return elem.getAttribute && elem.getAttribute( "class" ) || "";
}

function classesToArray( value ) {
	if ( Array.isArray( value ) ) {
		return value;
	}
	if ( typeof value === "string" ) {
		return value.match( rnothtmlwhite ) || [];
	}
	return [];
}

jQuery.fn.extend( {
	addClass: function( value ) {
		var classes, elem, cur, curValue, clazz, j, finalValue,
			i = 0;

		if ( isFunction( value ) ) {
			return this.each( function( j ) {
				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
			} );
		}

		classes = classesToArray( value );

		if ( classes.length ) {
			while ( ( elem = this[ i++ ] ) ) {
				curValue = getClass( elem );
				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );

				if ( cur ) {
					j = 0;
					while ( ( clazz = classes[ j++ ] ) ) {
						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
							cur += clazz + " ";
						}
					}

					// Only assign if different to avoid unneeded rendering.
					finalValue = stripAndCollapse( cur );
					if ( curValue !== finalValue ) {
						elem.setAttribute( "class", finalValue );
					}
				}
			}
		}

		return this;
	},

	removeClass: function( value ) {
		var classes, elem, cur, curValue, clazz, j, finalValue,
			i = 0;

		if ( isFunction( value ) ) {
			return this.each( function( j ) {
				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
			} );
		}

		if ( !arguments.length ) {
			return this.attr( "class", "" );
		}

		classes = classesToArray( value );

		if ( classes.length ) {
			while ( ( elem = this[ i++ ] ) ) {
				curValue = getClass( elem );

				// This expression is here for better compressibility (see addClass)
				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );

				if ( cur ) {
					j = 0;
					while ( ( clazz = classes[ j++ ] ) ) {

						// Remove *all* instances
						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
							cur = cur.replace( " " + clazz + " ", " " );
						}
					}

					// Only assign if different to avoid unneeded rendering.
					finalValue = stripAndCollapse( cur );
					if ( curValue !== finalValue ) {
						elem.setAttribute( "class", finalValue );
					}
				}
			}
		}

		return this;
	},

	toggleClass: function( value, stateVal ) {
		var type = typeof value,
			isValidValue = type === "string" || Array.isArray( value );

		if ( typeof stateVal === "boolean" && isValidValue ) {
			return stateVal ? this.addClass( value ) : this.removeClass( value );
		}

		if ( isFunction( value ) ) {
			return this.each( function( i ) {
				jQuery( this ).toggleClass(
					value.call( this, i, getClass( this ), stateVal ),
					stateVal
				);
			} );
		}

		return this.each( function() {
			var className, i, self, classNames;

			if ( isValidValue ) {

				// Toggle individual class names
				i = 0;
				self = jQuery( this );
				classNames = classesToArray( value );

				while ( ( className = classNames[ i++ ] ) ) {

					// Check each className given, space separated list
					if ( self.hasClass( className ) ) {
						self.removeClass( className );
					} else {
						self.addClass( className );
					}
				}

			// Toggle whole class name
			} else if ( value === undefined || type === "boolean" ) {
				className = getClass( this );
				if ( className ) {

					// Store className if set
					dataPriv.set( this, "__className__", className );
				}

				// If the element has a class name or if we're passed `false`,
				// then remove the whole classname (if there was one, the above saved it).
				// Otherwise bring back whatever was previously saved (if anything),
				// falling back to the empty string if nothing was stored.
				if ( this.setAttribute ) {
					this.setAttribute( "class",
						className || value === false ?
						"" :
						dataPriv.get( this, "__className__" ) || ""
					);
				}
			}
		} );
	},

	hasClass: function( selector ) {
		var className, elem,
			i = 0;

		className = " " + selector + " ";
		while ( ( elem = this[ i++ ] ) ) {
			if ( elem.nodeType === 1 &&
				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
					return true;
			}
		}

		return false;
	}
} );




var rreturn = /\r/g;

jQuery.fn.extend( {
	val: function( value ) {
		var hooks, ret, valueIsFunction,
			elem = this[ 0 ];

		if ( !arguments.length ) {
			if ( elem ) {
				hooks = jQuery.valHooks[ elem.type ] ||
					jQuery.valHooks[ elem.nodeName.toLowerCase() ];

				if ( hooks &&
					"get" in hooks &&
					( ret = hooks.get( elem, "value" ) ) !== undefined
				) {
					return ret;
				}

				ret = elem.value;

				// Handle most common string cases
				if ( typeof ret === "string" ) {
					return ret.replace( rreturn, "" );
				}

				// Handle cases where value is null/undef or number
				return ret == null ? "" : ret;
			}

			return;
		}

		valueIsFunction = isFunction( value );

		return this.each( function( i ) {
			var val;

			if ( this.nodeType !== 1 ) {
				return;
			}

			if ( valueIsFunction ) {
				val = value.call( this, i, jQuery( this ).val() );
			} else {
				val = value;
			}

			// Treat null/undefined as ""; convert numbers to string
			if ( val == null ) {
				val = "";

			} else if ( typeof val === "number" ) {
				val += "";

			} else if ( Array.isArray( val ) ) {
				val = jQuery.map( val, function( value ) {
					return value == null ? "" : value + "";
				} );
			}

			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];

			// If set returns undefined, fall back to normal setting
			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
				this.value = val;
			}
		} );
	}
} );

jQuery.extend( {
	valHooks: {
		option: {
			get: function( elem ) {

				var val = jQuery.find.attr( elem, "value" );
				return val != null ?
					val :

					// Support: IE <=10 - 11 only
					// option.text throws exceptions (#14686, #14858)
					// Strip and collapse whitespace
					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
					stripAndCollapse( jQuery.text( elem ) );
			}
		},
		select: {
			get: function( elem ) {
				var value, option, i,
					options = elem.options,
					index = elem.selectedIndex,
					one = elem.type === "select-one",
					values = one ? null : [],
					max = one ? index + 1 : options.length;

				if ( index < 0 ) {
					i = max;

				} else {
					i = one ? index : 0;
				}

				// Loop through all the selected options
				for ( ; i < max; i++ ) {
					option = options[ i ];

					// Support: IE <=9 only
					// IE8-9 doesn't update selected after form reset (#2551)
					if ( ( option.selected || i === index ) &&

							// Don't return options that are disabled or in a disabled optgroup
							!option.disabled &&
							( !option.parentNode.disabled ||
								!nodeName( option.parentNode, "optgroup" ) ) ) {

						// Get the specific value for the option
						value = jQuery( option ).val();

						// We don't need an array for one selects
						if ( one ) {
							return value;
						}

						// Multi-Selects return an array
						values.push( value );
					}
				}

				return values;
			},

			set: function( elem, value ) {
				var optionSet, option,
					options = elem.options,
					values = jQuery.makeArray( value ),
					i = options.length;

				while ( i-- ) {
					option = options[ i ];

					/* eslint-disable no-cond-assign */

					if ( option.selected =
						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
					) {
						optionSet = true;
					}

					/* eslint-enable no-cond-assign */
				}

				// Force browsers to behave consistently when non-matching value is set
				if ( !optionSet ) {
					elem.selectedIndex = -1;
				}
				return values;
			}
		}
	}
} );

// Radios and checkboxes getter/setter
jQuery.each( [ "radio", "checkbox" ], function() {
	jQuery.valHooks[ this ] = {
		set: function( elem, value ) {
			if ( Array.isArray( value ) ) {
				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
			}
		}
	};
	if ( !support.checkOn ) {
		jQuery.valHooks[ this ].get = function( elem ) {
			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
		};
	}
} );




// Return jQuery for attributes-only inclusion


support.focusin = "onfocusin" in window;


var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
	stopPropagationCallback = function( e ) {
		e.stopPropagation();
	};

jQuery.extend( jQuery.event, {

	trigger: function( event, data, elem, onlyHandlers ) {

		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
			eventPath = [ elem || document ],
			type = hasOwn.call( event, "type" ) ? event.type : event,
			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];

		cur = lastElement = 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( "." ) > -1 ) {

			// 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.rnamespace = 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 && !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() ) {
			lastElement = cur;
			event.type = i > 1 ?
				bubbleType :
				special.bindType || type;

			// jQuery handler
			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
				dataPriv.get( cur, "handle" );
			if ( handle ) {
				handle.apply( cur, data );
			}

			// Native handler
			handle = ontype && cur[ ontype ];
			if ( handle && handle.apply && 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 ) &&
				acceptData( elem ) ) {

				// Call a native DOM method on the target with the same name as the event.
				// Don't do default actions on window, that's where global variables be (#6170)
				if ( ontype && isFunction( elem[ type ] ) && !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;

					if ( event.isPropagationStopped() ) {
						lastElement.addEventListener( type, stopPropagationCallback );
					}

					elem[ type ]();

					if ( event.isPropagationStopped() ) {
						lastElement.removeEventListener( type, stopPropagationCallback );
					}

					jQuery.event.triggered = undefined;

					if ( tmp ) {
						elem[ ontype ] = tmp;
					}
				}
			}
		}

		return event.result;
	},

	// Piggyback on a donor event to simulate a different one
	// Used only for `focus(in | out)` events
	simulate: function( type, elem, event ) {
		var e = jQuery.extend(
			new jQuery.Event(),
			event,
			{
				type: type,
				isSimulated: true
			}
		);

		jQuery.event.trigger( e, null, elem );
	}

} );

jQuery.fn.extend( {

	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 );
		}
	}
} );


// Support: Firefox <=44
// Firefox doesn't have focus(in | out) events
// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
//
// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
// focus(in | out) events fire after focus & blur events,
// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
if ( !support.focusin ) {
	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 ) );
		};

		jQuery.event.special[ fix ] = {
			setup: function() {
				var doc = this.ownerDocument || this,
					attaches = dataPriv.access( doc, fix );

				if ( !attaches ) {
					doc.addEventListener( orig, handler, true );
				}
				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
			},
			teardown: function() {
				var doc = this.ownerDocument || this,
					attaches = dataPriv.access( doc, fix ) - 1;

				if ( !attaches ) {
					doc.removeEventListener( orig, handler, true );
					dataPriv.remove( doc, fix );

				} else {
					dataPriv.access( doc, fix, attaches );
				}
			}
		};
	} );
}
var location = window.location;

var nonce = Date.now();

var rquery = ( /\?/ );



// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
	var xml;
	if ( !data || typeof data !== "string" ) {
		return null;
	}

	// Support: IE 9 - 11 only
	// IE throws on parseFromString with invalid input.
	try {
		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
	} catch ( e ) {
		xml = undefined;
	}

	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
		jQuery.error( "Invalid XML: " + data );
	}
	return xml;
};


var
	rbracket = /\[\]$/,
	rCRLF = /\r?\n/g,
	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
	rsubmittable = /^(?:input|select|textarea|keygen)/i;

function buildParams( prefix, obj, traditional, add ) {
	var name;

	if ( Array.isArray( obj ) ) {

		// Serialize array item.
		jQuery.each( obj, function( i, v ) {
			if ( traditional || rbracket.test( prefix ) ) {

				// Treat each array item as a scalar.
				add( prefix, v );

			} else {

				// Item is non-scalar (array or object), encode its numeric index.
				buildParams(
					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
					v,
					traditional,
					add
				);
			}
		} );

	} else if ( !traditional && toType( obj ) === "object" ) {

		// Serialize object item.
		for ( name in obj ) {
			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
		}

	} else {

		// Serialize scalar item.
		add( prefix, obj );
	}
}

// Serialize an array of form elements or a set of
// key/values into a query string
jQuery.param = function( a, traditional ) {
	var prefix,
		s = [],
		add = function( key, valueOrFunction ) {

			// If value is a function, invoke it and use its return value
			var value = isFunction( valueOrFunction ) ?
				valueOrFunction() :
				valueOrFunction;

			s[ s.length ] = encodeURIComponent( key ) + "=" +
				encodeURIComponent( value == null ? "" : value );
		};

	if ( a == null ) {
		return "";
	}

	// If an array was passed in, assume that it is an array of form elements.
	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {

		// Serialize the form elements
		jQuery.each( a, function() {
			add( this.name, this.value );
		} );

	} else {

		// If traditional, encode the "old" way (the way 1.3.2 or older
		// did it), otherwise encode params recursively.
		for ( prefix in a ) {
			buildParams( prefix, a[ prefix ], traditional, add );
		}
	}

	// Return the resulting serialization
	return s.join( "&" );
};

jQuery.fn.extend( {
	serialize: function() {
		return jQuery.param( this.serializeArray() );
	},
	serializeArray: function() {
		return this.map( function() {

			// Can add propHook for "elements" to filter or add form elements
			var elements = jQuery.prop( this, "elements" );
			return elements ? jQuery.makeArray( elements ) : this;
		} )
		.filter( function() {
			var type = this.type;

			// Use .is( ":disabled" ) so that fieldset[disabled] works
			return this.name && !jQuery( this ).is( ":disabled" ) &&
				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
				( this.checked || !rcheckableType.test( type ) );
		} )
		.map( function( i, elem ) {
			var val = jQuery( this ).val();

			if ( val == null ) {
				return null;
			}

			if ( Array.isArray( val ) ) {
				return jQuery.map( val, function( val ) {
					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
				} );
			}

			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
		} ).get();
	}
} );


var
	r20 = /%20/g,
	rhash = /#.*$/,
	rantiCache = /([?&])_=[^&]*/,
	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,

	// #7653, #8125, #8152: local protocol detection
	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
	rnoContent = /^(?:GET|HEAD)$/,
	rprotocol = /^\/\//,

	/* Prefilters
	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
	 * 2) These are called:
	 *    - BEFORE asking for a transport
	 *    - AFTER param serialization (s.data is a string if s.processData is true)
	 * 3) key is the dataType
	 * 4) the catchall symbol "*" can be used
	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
	 */
	prefilters = {},

	/* Transports bindings
	 * 1) key is the dataType
	 * 2) the catchall symbol "*" can be used
	 * 3) selection will start with transport dataType and THEN go to "*" if needed
	 */
	transports = {},

	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
	allTypes = "*/".concat( "*" ),

	// Anchor tag for parsing the document origin
	originAnchor = document.createElement( "a" );
	originAnchor.href = location.href;

// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {

	// dataTypeExpression is optional and defaults to "*"
	return function( dataTypeExpression, func ) {

		if ( typeof dataTypeExpression !== "string" ) {
			func = dataTypeExpression;
			dataTypeExpression = "*";
		}

		var dataType,
			i = 0,
			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];

		if ( isFunction( func ) ) {

			// For each dataType in the dataTypeExpression
			while ( ( dataType = dataTypes[ i++ ] ) ) {

				// Prepend if requested
				if ( dataType[ 0 ] === "+" ) {
					dataType = dataType.slice( 1 ) || "*";
					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );

				// Otherwise append
				} else {
					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
				}
			}
		}
	};
}

// Base inspection function for prefilters and transports
function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {

	var inspected = {},
		seekingTransport = ( structure === transports );

	function inspect( dataType ) {
		var selected;
		inspected[ dataType ] = true;
		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
			if ( typeof dataTypeOrTransport === "string" &&
				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {

				options.dataTypes.unshift( dataTypeOrTransport );
				inspect( dataTypeOrTransport );
				return false;
			} else if ( seekingTransport ) {
				return !( selected = dataTypeOrTransport );
			}
		} );
		return selected;
	}

	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
}

// A special extend for ajax options
// that takes "flat" options (not to be deep extended)
// Fixes #9887
function ajaxExtend( target, src ) {
	var key, deep,
		flatOptions = jQuery.ajaxSettings.flatOptions || {};

	for ( key in src ) {
		if ( src[ key ] !== undefined ) {
			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
		}
	}
	if ( deep ) {
		jQuery.extend( true, target, deep );
	}

	return target;
}

/* Handles responses to an ajax request:
 * - finds the right dataType (mediates between content-type and expected dataType)
 * - returns the corresponding response
 */
function ajaxHandleResponses( s, jqXHR, responses ) {

	var ct, type, finalDataType, firstDataType,
		contents = s.contents,
		dataTypes = s.dataTypes;

	// Remove auto dataType and get content-type in the process
	while ( dataTypes[ 0 ] === "*" ) {
		dataTypes.shift();
		if ( ct === undefined ) {
			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
		}
	}

	// Check if we're dealing with a known content-type
	if ( ct ) {
		for ( type in contents ) {
			if ( contents[ type ] && contents[ type ].test( ct ) ) {
				dataTypes.unshift( type );
				break;
			}
		}
	}

	// Check to see if we have a response for the expected dataType
	if ( dataTypes[ 0 ] in responses ) {
		finalDataType = dataTypes[ 0 ];
	} else {

		// Try convertible dataTypes
		for ( type in responses ) {
			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
				finalDataType = type;
				break;
			}
			if ( !firstDataType ) {
				firstDataType = type;
			}
		}

		// Or just use first one
		finalDataType = finalDataType || firstDataType;
	}

	// If we found a dataType
	// We add the dataType to the list if needed
	// and return the corresponding response
	if ( finalDataType ) {
		if ( finalDataType !== dataTypes[ 0 ] ) {
			dataTypes.unshift( finalDataType );
		}
		return responses[ finalDataType ];
	}
}

/* Chain conversions given the request and the original response
 * Also sets the responseXXX fields on the jqXHR instance
 */
function ajaxConvert( s, response, jqXHR, isSuccess ) {
	var conv2, current, conv, tmp, prev,
		converters = {},

		// Work with a copy of dataTypes in case we need to modify it for conversion
		dataTypes = s.dataTypes.slice();

	// Create converters map with lowercased keys
	if ( dataTypes[ 1 ] ) {
		for ( conv in s.converters ) {
			converters[ conv.toLowerCase() ] = s.converters[ conv ];
		}
	}

	current = dataTypes.shift();

	// Convert to each sequential dataType
	while ( current ) {

		if ( s.responseFields[ current ] ) {
			jqXHR[ s.responseFields[ current ] ] = response;
		}

		// Apply the dataFilter if provided
		if ( !prev && isSuccess && s.dataFilter ) {
			response = s.dataFilter( response, s.dataType );
		}

		prev = current;
		current = dataTypes.shift();

		if ( current ) {

			// There's only work to do if current dataType is non-auto
			if ( current === "*" ) {

				current = prev;

			// Convert response if prev dataType is non-auto and differs from current
			} else if ( prev !== "*" && prev !== current ) {

				// Seek a direct converter
				conv = converters[ prev + " " + current ] || converters[ "* " + current ];

				// If none found, seek a pair
				if ( !conv ) {
					for ( conv2 in converters ) {

						// If conv2 outputs current
						tmp = conv2.split( " " );
						if ( tmp[ 1 ] === current ) {

							// If prev can be converted to accepted input
							conv = converters[ prev + " " + tmp[ 0 ] ] ||
								converters[ "* " + tmp[ 0 ] ];
							if ( conv ) {

								// Condense equivalence converters
								if ( conv === true ) {
									conv = converters[ conv2 ];

								// Otherwise, insert the intermediate dataType
								} else if ( converters[ conv2 ] !== true ) {
									current = tmp[ 0 ];
									dataTypes.unshift( tmp[ 1 ] );
								}
								break;
							}
						}
					}
				}

				// Apply converter (if not an equivalence)
				if ( conv !== true ) {

					// Unless errors are allowed to bubble, catch and return them
					if ( conv && s.throws ) {
						response = conv( response );
					} else {
						try {
							response = conv( response );
						} catch ( e ) {
							return {
								state: "parsererror",
								error: conv ? e : "No conversion from " + prev + " to " + current
							};
						}
					}
				}
			}
		}
	}

	return { state: "success", data: response };
}

jQuery.extend( {

	// Counter for holding the number of active queries
	active: 0,

	// Last-Modified header cache for next request
	lastModified: {},
	etag: {},

	ajaxSettings: {
		url: location.href,
		type: "GET",
		isLocal: rlocalProtocol.test( location.protocol ),
		global: true,
		processData: true,
		async: true,
		contentType: "application/x-www-form-urlencoded; charset=UTF-8",

		/*
		timeout: 0,
		data: null,
		dataType: null,
		username: null,
		password: null,
		cache: null,
		throws: false,
		traditional: false,
		headers: {},
		*/

		accepts: {
			"*": allTypes,
			text: "text/plain",
			html: "text/html",
			xml: "application/xml, text/xml",
			json: "application/json, text/javascript"
		},

		contents: {
			xml: /\bxml\b/,
			html: /\bhtml/,
			json: /\bjson\b/
		},

		responseFields: {
			xml: "responseXML",
			text: "responseText",
			json: "responseJSON"
		},

		// Data converters
		// Keys separate source (or catchall "*") and destination types with a single space
		converters: {

			// Convert anything to text
			"* text": String,

			// Text to html (true = no transformation)
			"text html": true,

			// Evaluate text as a json expression
			"text json": JSON.parse,

			// Parse text as xml
			"text xml": jQuery.parseXML
		},

		// For options that shouldn't be deep extended:
		// you can add your own custom options here if
		// and when you create one that shouldn't be
		// deep extended (see ajaxExtend)
		flatOptions: {
			url: true,
			context: true
		}
	},

	// Creates a full fledged settings object into target
	// with both ajaxSettings and settings fields.
	// If target is omitted, writes into ajaxSettings.
	ajaxSetup: function( target, settings ) {
		return settings ?

			// Building a settings object
			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :

			// Extending ajaxSettings
			ajaxExtend( jQuery.ajaxSettings, target );
	},

	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
	ajaxTransport: addToPrefiltersOrTransports( transports ),

	// Main method
	ajax: function( url, options ) {

		// If url is an object, simulate pre-1.5 signature
		if ( typeof url === "object" ) {
			options = url;
			url = undefined;
		}

		// Force options to be an object
		options = options || {};

		var transport,

			// URL without anti-cache param
			cacheURL,

			// Response headers
			responseHeadersString,
			responseHeaders,

			// timeout handle
			timeoutTimer,

			// Url cleanup var
			urlAnchor,

			// Request state (becomes false upon send and true upon completion)
			completed,

			// To know if global events are to be dispatched
			fireGlobals,

			// Loop variable
			i,

			// uncached part of the url
			uncached,

			// Create the final options object
			s = jQuery.ajaxSetup( {}, options ),

			// Callbacks context
			callbackContext = s.context || s,

			// Context for global events is callbackContext if it is a DOM node or jQuery collection
			globalEventContext = s.context &&
				( callbackContext.nodeType || callbackContext.jquery ) ?
					jQuery( callbackContext ) :
					jQuery.event,

			// Deferreds
			deferred = jQuery.Deferred(),
			completeDeferred = jQuery.Callbacks( "once memory" ),

			// Status-dependent callbacks
			statusCode = s.statusCode || {},

			// Headers (they are sent all at once)
			requestHeaders = {},
			requestHeadersNames = {},

			// Default abort message
			strAbort = "canceled",

			// Fake xhr
			jqXHR = {
				readyState: 0,

				// Builds headers hashtable if needed
				getResponseHeader: function( key ) {
					var match;
					if ( completed ) {
						if ( !responseHeaders ) {
							responseHeaders = {};
							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
										.concat( match[ 2 ] );
							}
						}
						match = responseHeaders[ key.toLowerCase() + " " ];
					}
					return match == null ? null : match.join( ", " );
				},

				// Raw string
				getAllResponseHeaders: function() {
					return completed ? responseHeadersString : null;
				},

				// Caches the header
				setRequestHeader: function( name, value ) {
					if ( completed == null ) {
						name = requestHeadersNames[ name.toLowerCase() ] =
							requestHeadersNames[ name.toLowerCase() ] || name;
						requestHeaders[ name ] = value;
					}
					return this;
				},

				// Overrides response content-type header
				overrideMimeType: function( type ) {
					if ( completed == null ) {
						s.mimeType = type;
					}
					return this;
				},

				// Status-dependent callbacks
				statusCode: function( map ) {
					var code;
					if ( map ) {
						if ( completed ) {

							// Execute the appropriate callbacks
							jqXHR.always( map[ jqXHR.status ] );
						} else {

							// Lazy-add the new callbacks in a way that preserves old ones
							for ( code in map ) {
								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
							}
						}
					}
					return this;
				},

				// Cancel the request
				abort: function( statusText ) {
					var finalText = statusText || strAbort;
					if ( transport ) {
						transport.abort( finalText );
					}
					done( 0, finalText );
					return this;
				}
			};

		// Attach deferreds
		deferred.promise( jqXHR );

		// Add protocol if not provided (prefilters might expect it)
		// Handle falsy url in the settings object (#10093: consistency with old signature)
		// We also use the url parameter if available
		s.url = ( ( url || s.url || location.href ) + "" )
			.replace( rprotocol, location.protocol + "//" );

		// Alias method option to type as per ticket #12004
		s.type = options.method || options.type || s.method || s.type;

		// Extract dataTypes list
		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];

		// A cross-domain request is in order when the origin doesn't match the current origin.
		if ( s.crossDomain == null ) {
			urlAnchor = document.createElement( "a" );

			// Support: IE <=8 - 11, Edge 12 - 15
			// IE throws exception on accessing the href property if url is malformed,
			// e.g. http://example.com:80x/
			try {
				urlAnchor.href = s.url;

				// Support: IE <=8 - 11 only
				// Anchor's host property isn't correctly set when s.url is relative
				urlAnchor.href = urlAnchor.href;
				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
					urlAnchor.protocol + "//" + urlAnchor.host;
			} catch ( e ) {

				// If there is an error parsing the URL, assume it is crossDomain,
				// it can be rejected by the transport if it is invalid
				s.crossDomain = true;
			}
		}

		// Convert data if not already a string
		if ( s.data && s.processData && typeof s.data !== "string" ) {
			s.data = jQuery.param( s.data, s.traditional );
		}

		// Apply prefilters
		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );

		// If request was aborted inside a prefilter, stop there
		if ( completed ) {
			return jqXHR;
		}

		// We can fire global events as of now if asked to
		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
		fireGlobals = jQuery.event && s.global;

		// Watch for a new set of requests
		if ( fireGlobals && jQuery.active++ === 0 ) {
			jQuery.event.trigger( "ajaxStart" );
		}

		// Uppercase the type
		s.type = s.type.toUpperCase();

		// Determine if request has content
		s.hasContent = !rnoContent.test( s.type );

		// Save the URL in case we're toying with the If-Modified-Since
		// and/or If-None-Match header later on
		// Remove hash to simplify url manipulation
		cacheURL = s.url.replace( rhash, "" );

		// More options handling for requests with no content
		if ( !s.hasContent ) {

			// Remember the hash so we can put it back
			uncached = s.url.slice( cacheURL.length );

			// If data is available and should be processed, append data to url
			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;

				// #9682: remove data so that it's not used in an eventual retry
				delete s.data;
			}

			// Add or update anti-cache param if needed
			if ( s.cache === false ) {
				cacheURL = cacheURL.replace( rantiCache, "$1" );
				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
			}

			// Put hash and anti-cache on the URL that will be requested (gh-1732)
			s.url = cacheURL + uncached;

		// Change '%20' to '+' if this is encoded form body content (gh-2658)
		} else if ( s.data && s.processData &&
			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
			s.data = s.data.replace( r20, "+" );
		}

		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
		if ( s.ifModified ) {
			if ( jQuery.lastModified[ cacheURL ] ) {
				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
			}
			if ( jQuery.etag[ cacheURL ] ) {
				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
			}
		}

		// Set the correct header, if data is being sent
		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
			jqXHR.setRequestHeader( "Content-Type", s.contentType );
		}

		// Set the Accepts header for the server, depending on the dataType
		jqXHR.setRequestHeader(
			"Accept",
			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
				s.accepts[ s.dataTypes[ 0 ] ] +
					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
				s.accepts[ "*" ]
		);

		// Check for headers option
		for ( i in s.headers ) {
			jqXHR.setRequestHeader( i, s.headers[ i ] );
		}

		// Allow custom headers/mimetypes and early abort
		if ( s.beforeSend &&
			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {

			// Abort if not done already and return
			return jqXHR.abort();
		}

		// Aborting is no longer a cancellation
		strAbort = "abort";

		// Install callbacks on deferreds
		completeDeferred.add( s.complete );
		jqXHR.done( s.success );
		jqXHR.fail( s.error );

		// Get transport
		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );

		// If no transport, we auto-abort
		if ( !transport ) {
			done( -1, "No Transport" );
		} else {
			jqXHR.readyState = 1;

			// Send global event
			if ( fireGlobals ) {
				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
			}

			// If request was aborted inside ajaxSend, stop there
			if ( completed ) {
				return jqXHR;
			}

			// Timeout
			if ( s.async && s.timeout > 0 ) {
				timeoutTimer = window.setTimeout( function() {
					jqXHR.abort( "timeout" );
				}, s.timeout );
			}

			try {
				completed = false;
				transport.send( requestHeaders, done );
			} catch ( e ) {

				// Rethrow post-completion exceptions
				if ( completed ) {
					throw e;
				}

				// Propagate others as results
				done( -1, e );
			}
		}

		// Callback for when everything is done
		function done( status, nativeStatusText, responses, headers ) {
			var isSuccess, success, error, response, modified,
				statusText = nativeStatusText;

			// Ignore repeat invocations
			if ( completed ) {
				return;
			}

			completed = true;

			// Clear timeout if it exists
			if ( timeoutTimer ) {
				window.clearTimeout( timeoutTimer );
			}

			// Dereference transport for early garbage collection
			// (no matter how long the jqXHR object will be used)
			transport = undefined;

			// Cache response headers
			responseHeadersString = headers || "";

			// Set readyState
			jqXHR.readyState = status > 0 ? 4 : 0;

			// Determine if successful
			isSuccess = status >= 200 && status < 300 || status === 304;

			// Get response data
			if ( responses ) {
				response = ajaxHandleResponses( s, jqXHR, responses );
			}

			// Convert no matter what (that way responseXXX fields are always set)
			response = ajaxConvert( s, response, jqXHR, isSuccess );

			// If successful, handle type chaining
			if ( isSuccess ) {

				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
				if ( s.ifModified ) {
					modified = jqXHR.getResponseHeader( "Last-Modified" );
					if ( modified ) {
						jQuery.lastModified[ cacheURL ] = modified;
					}
					modified = jqXHR.getResponseHeader( "etag" );
					if ( modified ) {
						jQuery.etag[ cacheURL ] = modified;
					}
				}

				// if no content
				if ( status === 204 || s.type === "HEAD" ) {
					statusText = "nocontent";

				// if not modified
				} else if ( status === 304 ) {
					statusText = "notmodified";

				// If we have data, let's convert it
				} else {
					statusText = response.state;
					success = response.data;
					error = response.error;
					isSuccess = !error;
				}
			} else {

				// Extract error from statusText and normalize for non-aborts
				error = statusText;
				if ( status || !statusText ) {
					statusText = "error";
					if ( status < 0 ) {
						status = 0;
					}
				}
			}

			// Set data for the fake xhr object
			jqXHR.status = status;
			jqXHR.statusText = ( nativeStatusText || statusText ) + "";

			// Success/Error
			if ( isSuccess ) {
				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
			} else {
				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
			}

			// Status-dependent callbacks
			jqXHR.statusCode( statusCode );
			statusCode = undefined;

			if ( fireGlobals ) {
				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
					[ jqXHR, s, isSuccess ? success : error ] );
			}

			// Complete
			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );

			if ( fireGlobals ) {
				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );

				// Handle the global AJAX counter
				if ( !( --jQuery.active ) ) {
					jQuery.event.trigger( "ajaxStop" );
				}
			}
		}

		return jqXHR;
	},

	getJSON: function( url, data, callback ) {
		return jQuery.get( url, data, callback, "json" );
	},

	getScript: function( url, callback ) {
		return jQuery.get( url, undefined, callback, "script" );
	}
} );

jQuery.each( [ "get", "post" ], function( i, method ) {
	jQuery[ method ] = function( url, data, callback, type ) {

		// Shift arguments if data argument was omitted
		if ( isFunction( data ) ) {
			type = type || callback;
			callback = data;
			data = undefined;
		}

		// The url can be an options object (which then must have .url)
		return jQuery.ajax( jQuery.extend( {
			url: url,
			type: method,
			dataType: type,
			data: data,
			success: callback
		}, jQuery.isPlainObject( url ) && url ) );
	};
} );


jQuery._evalUrl = function( url, options ) {
	return jQuery.ajax( {
		url: url,

		// Make this explicit, since user can override this through ajaxSetup (#11264)
		type: "GET",
		dataType: "script",
		cache: true,
		async: false,
		global: false,

		// Only evaluate the response if it is successful (gh-4126)
		// dataFilter is not invoked for failure responses, so using it instead
		// of the default converter is kludgy but it works.
		converters: {
			"text script": function() {}
		},
		dataFilter: function( response ) {
			jQuery.globalEval( response, options );
		}
	} );
};


jQuery.fn.extend( {
	wrapAll: function( html ) {
		var wrap;

		if ( this[ 0 ] ) {
			if ( isFunction( html ) ) {
				html = html.call( this[ 0 ] );
			}

			// The elements to wrap the target around
			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );

			if ( this[ 0 ].parentNode ) {
				wrap.insertBefore( this[ 0 ] );
			}

			wrap.map( function() {
				var elem = this;

				while ( elem.firstElementChild ) {
					elem = elem.firstElementChild;
				}

				return elem;
			} ).append( this );
		}

		return this;
	},

	wrapInner: function( html ) {
		if ( isFunction( html ) ) {
			return this.each( function( i ) {
				jQuery( this ).wrapInner( html.call( this, i ) );
			} );
		}

		return this.each( function() {
			var self = jQuery( this ),
				contents = self.contents();

			if ( contents.length ) {
				contents.wrapAll( html );

			} else {
				self.append( html );
			}
		} );
	},

	wrap: function( html ) {
		var htmlIsFunction = isFunction( html );

		return this.each( function( i ) {
			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
		} );
	},

	unwrap: function( selector ) {
		this.parent( selector ).not( "body" ).each( function() {
			jQuery( this ).replaceWith( this.childNodes );
		} );
		return this;
	}
} );


jQuery.expr.pseudos.hidden = function( elem ) {
	return !jQuery.expr.pseudos.visible( elem );
};
jQuery.expr.pseudos.visible = function( elem ) {
	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};




jQuery.ajaxSettings.xhr = function() {
	try {
		return new window.XMLHttpRequest();
	} catch ( e ) {}
};

var xhrSuccessStatus = {

		// File protocol always yields status code 0, assume 200
		0: 200,

		// Support: IE <=9 only
		// #1450: sometimes IE returns 1223 when it should be 204
		1223: 204
	},
	xhrSupported = jQuery.ajaxSettings.xhr();

support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
support.ajax = xhrSupported = !!xhrSupported;

jQuery.ajaxTransport( function( options ) {
	var callback, errorCallback;

	// Cross domain only allowed if supported through XMLHttpRequest
	if ( support.cors || xhrSupported && !options.crossDomain ) {
		return {
			send: function( headers, complete ) {
				var i,
					xhr = options.xhr();

				xhr.open(
					options.type,
					options.url,
					options.async,
					options.username,
					options.password
				);

				// Apply custom fields if provided
				if ( options.xhrFields ) {
					for ( i in options.xhrFields ) {
						xhr[ i ] = options.xhrFields[ i ];
					}
				}

				// Override mime type if needed
				if ( options.mimeType && xhr.overrideMimeType ) {
					xhr.overrideMimeType( options.mimeType );
				}

				// X-Requested-With header
				// For cross-domain requests, seeing as conditions for a preflight are
				// akin to a jigsaw puzzle, we simply never set it to be sure.
				// (it can always be set on a per-request basis or even using ajaxSetup)
				// For same-domain requests, won't change header if already provided.
				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
					headers[ "X-Requested-With" ] = "XMLHttpRequest";
				}

				// Set headers
				for ( i in headers ) {
					xhr.setRequestHeader( i, headers[ i ] );
				}

				// Callback
				callback = function( type ) {
					return function() {
						if ( callback ) {
							callback = errorCallback = xhr.onload =
								xhr.onerror = xhr.onabort = xhr.ontimeout =
									xhr.onreadystatechange = null;

							if ( type === "abort" ) {
								xhr.abort();
							} else if ( type === "error" ) {

								// Support: IE <=9 only
								// On a manual native abort, IE9 throws
								// errors on any property access that is not readyState
								if ( typeof xhr.status !== "number" ) {
									complete( 0, "error" );
								} else {
									complete(

										// File: protocol always yields status 0; see #8605, #14207
										xhr.status,
										xhr.statusText
									);
								}
							} else {
								complete(
									xhrSuccessStatus[ xhr.status ] || xhr.status,
									xhr.statusText,

									// Support: IE <=9 only
									// IE9 has no XHR2 but throws on binary (trac-11426)
									// For XHR2 non-text, let the caller handle it (gh-2498)
									( xhr.responseType || "text" ) !== "text"  ||
									typeof xhr.responseText !== "string" ?
										{ binary: xhr.response } :
										{ text: xhr.responseText },
									xhr.getAllResponseHeaders()
								);
							}
						}
					};
				};

				// Listen to events
				xhr.onload = callback();
				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );

				// Support: IE 9 only
				// Use onreadystatechange to replace onabort
				// to handle uncaught aborts
				if ( xhr.onabort !== undefined ) {
					xhr.onabort = errorCallback;
				} else {
					xhr.onreadystatechange = function() {

						// Check readyState before timeout as it changes
						if ( xhr.readyState === 4 ) {

							// Allow onerror to be called first,
							// but that will not handle a native abort
							// Also, save errorCallback to a variable
							// as xhr.onerror cannot be accessed
							window.setTimeout( function() {
								if ( callback ) {
									errorCallback();
								}
							} );
						}
					};
				}

				// Create the abort callback
				callback = callback( "abort" );

				try {

					// Do send the request (this may raise an exception)
					xhr.send( options.hasContent && options.data || null );
				} catch ( e ) {

					// #14683: Only rethrow if this hasn't been notified as an error yet
					if ( callback ) {
						throw e;
					}
				}
			},

			abort: function() {
				if ( callback ) {
					callback();
				}
			}
		};
	}
} );




// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
jQuery.ajaxPrefilter( function( s ) {
	if ( s.crossDomain ) {
		s.contents.script = false;
	}
} );

// Install script dataType
jQuery.ajaxSetup( {
	accepts: {
		script: "text/javascript, application/javascript, " +
			"application/ecmascript, application/x-ecmascript"
	},
	contents: {
		script: /\b(?:java|ecma)script\b/
	},
	converters: {
		"text script": function( text ) {
			jQuery.globalEval( text );
			return text;
		}
	}
} );

// Handle cache's special case and crossDomain
jQuery.ajaxPrefilter( "script", function( s ) {
	if ( s.cache === undefined ) {
		s.cache = false;
	}
	if ( s.crossDomain ) {
		s.type = "GET";
	}
} );

// Bind script tag hack transport
jQuery.ajaxTransport( "script", function( s ) {

	// This transport only deals with cross domain or forced-by-attrs requests
	if ( s.crossDomain || s.scriptAttrs ) {
		var script, callback;
		return {
			send: function( _, complete ) {
				script = jQuery( "<script>" )
					.attr( s.scriptAttrs || {} )
					.prop( { charset: s.scriptCharset, src: s.url } )
					.on( "load error", callback = function( evt ) {
						script.remove();
						callback = null;
						if ( evt ) {
							complete( evt.type === "error" ? 404 : 200, evt.type );
						}
					} );

				// Use native DOM manipulation to avoid our domManip AJAX trickery
				document.head.appendChild( script[ 0 ] );
			},
			abort: function() {
				if ( callback ) {
					callback();
				}
			}
		};
	}
} );




var oldCallbacks = [],
	rjsonp = /(=)\?(?=&|$)|\?\?/;

// Default jsonp settings
jQuery.ajaxSetup( {
	jsonp: "callback",
	jsonpCallback: function() {
		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
		this[ callback ] = true;
		return callback;
	}
} );

// Detect, normalize options and install callbacks for jsonp requests
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {

	var callbackName, overwritten, responseContainer,
		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
			"url" :
			typeof s.data === "string" &&
				( s.contentType || "" )
					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
				rjsonp.test( s.data ) && "data"
		);

	// Handle iff the expected data type is "jsonp" or we have a parameter to set
	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {

		// Get callback name, remembering preexisting value associated with it
		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
			s.jsonpCallback() :
			s.jsonpCallback;

		// Insert callback into url or form data
		if ( jsonProp ) {
			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
		} else if ( s.jsonp !== false ) {
			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
		}

		// Use data converter to retrieve json after script execution
		s.converters[ "script json" ] = function() {
			if ( !responseContainer ) {
				jQuery.error( callbackName + " was not called" );
			}
			return responseContainer[ 0 ];
		};

		// Force json dataType
		s.dataTypes[ 0 ] = "json";

		// Install callback
		overwritten = window[ callbackName ];
		window[ callbackName ] = function() {
			responseContainer = arguments;
		};

		// Clean-up function (fires after converters)
		jqXHR.always( function() {

			// If previous value didn't exist - remove it
			if ( overwritten === undefined ) {
				jQuery( window ).removeProp( callbackName );

			// Otherwise restore preexisting value
			} else {
				window[ callbackName ] = overwritten;
			}

			// Save back as free
			if ( s[ callbackName ] ) {

				// Make sure that re-using the options doesn't screw things around
				s.jsonpCallback = originalSettings.jsonpCallback;

				// Save the callback name for future use
				oldCallbacks.push( callbackName );
			}

			// Call if it was a function and we have a response
			if ( responseContainer && isFunction( overwritten ) ) {
				overwritten( responseContainer[ 0 ] );
			}

			responseContainer = overwritten = undefined;
		} );

		// Delegate to script
		return "script";
	}
} );




// Support: Safari 8 only
// In Safari 8 documents created via document.implementation.createHTMLDocument
// collapse sibling forms: the second one becomes a child of the first one.
// Because of that, this security measure has to be disabled in Safari 8.
// https://bugs.webkit.org/show_bug.cgi?id=137337
support.createHTMLDocument = ( function() {
	var body = document.implementation.createHTMLDocument( "" ).body;
	body.innerHTML = "<form></form><form></form>";
	return body.childNodes.length === 2;
} )();


// Argument "data" should be string of html
// context (optional): If specified, the fragment will be created in this context,
// defaults to document
// keepScripts (optional): If true, will include scripts passed in the html string
jQuery.parseHTML = function( data, context, keepScripts ) {
	if ( typeof data !== "string" ) {
		return [];
	}
	if ( typeof context === "boolean" ) {
		keepScripts = context;
		context = false;
	}

	var base, parsed, scripts;

	if ( !context ) {

		// Stop scripts or inline event handlers from being executed immediately
		// by using document.implementation
		if ( support.createHTMLDocument ) {
			context = document.implementation.createHTMLDocument( "" );

			// Set the base href for the created document
			// so any parsed elements with URLs
			// are based on the document's URL (gh-2965)
			base = context.createElement( "base" );
			base.href = document.location.href;
			context.head.appendChild( base );
		} else {
			context = document;
		}
	}

	parsed = rsingleTag.exec( data );
	scripts = !keepScripts && [];

	// Single tag
	if ( parsed ) {
		return [ context.createElement( parsed[ 1 ] ) ];
	}

	parsed = buildFragment( [ data ], context, scripts );

	if ( scripts && scripts.length ) {
		jQuery( scripts ).remove();
	}

	return jQuery.merge( [], parsed.childNodes );
};


/**
 * Load a url into a page
 */
jQuery.fn.load = function( url, params, callback ) {
	var selector, type, response,
		self = this,
		off = url.indexOf( " " );

	if ( off > -1 ) {
		selector = stripAndCollapse( url.slice( off ) );
		url = url.slice( 0, off );
	}

	// If it's a function
	if ( isFunction( params ) ) {

		// We assume that it's the callback
		callback = params;
		params = undefined;

	// Otherwise, build a param string
	} else if ( params && typeof params === "object" ) {
		type = "POST";
	}

	// If we have elements to modify, make the request
	if ( self.length > 0 ) {
		jQuery.ajax( {
			url: url,

			// If "type" variable is undefined, then "GET" method will be used.
			// Make value of this field explicit since
			// user can override it through ajaxSetup method
			type: type || "GET",
			dataType: "html",
			data: params
		} ).done( function( responseText ) {

			// Save response for use in complete callback
			response = arguments;

			self.html( selector ?

				// If a selector was specified, locate the right elements in a dummy div
				// Exclude scripts to avoid IE 'Permission Denied' errors
				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :

				// Otherwise use the full result
				responseText );

		// If the request succeeds, this function gets "data", "status", "jqXHR"
		// but they are ignored because response was set above.
		// If it fails, this function gets "jqXHR", "status", "error"
		} ).always( callback && function( jqXHR, status ) {
			self.each( function() {
				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
			} );
		} );
	}

	return this;
};




// Attach a bunch of functions for handling common AJAX events
jQuery.each( [
	"ajaxStart",
	"ajaxStop",
	"ajaxComplete",
	"ajaxError",
	"ajaxSuccess",
	"ajaxSend"
], function( i, type ) {
	jQuery.fn[ type ] = function( fn ) {
		return this.on( type, fn );
	};
} );




jQuery.expr.pseudos.animated = function( elem ) {
	return jQuery.grep( jQuery.timers, function( fn ) {
		return elem === fn.elem;
	} ).length;
};




jQuery.offset = {
	setOffset: function( elem, options, i ) {
		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
			position = jQuery.css( elem, "position" ),
			curElem = jQuery( elem ),
			props = {};

		// Set position first, in-case top/left are set even on static elem
		if ( position === "static" ) {
			elem.style.position = "relative";
		}

		curOffset = curElem.offset();
		curCSSTop = jQuery.css( elem, "top" );
		curCSSLeft = jQuery.css( elem, "left" );
		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;

		// Need to be able to calculate position if either
		// top or left is auto and position is either absolute or fixed
		if ( calculatePosition ) {
			curPosition = curElem.position();
			curTop = curPosition.top;
			curLeft = curPosition.left;

		} else {
			curTop = parseFloat( curCSSTop ) || 0;
			curLeft = parseFloat( curCSSLeft ) || 0;
		}

		if ( isFunction( options ) ) {

			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
		}

		if ( options.top != null ) {
			props.top = ( options.top - curOffset.top ) + curTop;
		}
		if ( options.left != null ) {
			props.left = ( options.left - curOffset.left ) + curLeft;
		}

		if ( "using" in options ) {
			options.using.call( elem, props );

		} else {
			curElem.css( props );
		}
	}
};

jQuery.fn.extend( {

	// offset() relates an element's border box to the document origin
	offset: function( options ) {

		// Preserve chaining for setter
		if ( arguments.length ) {
			return options === undefined ?
				this :
				this.each( function( i ) {
					jQuery.offset.setOffset( this, options, i );
				} );
		}

		var rect, win,
			elem = this[ 0 ];

		if ( !elem ) {
			return;
		}

		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
		// Support: IE <=11 only
		// Running getBoundingClientRect on a
		// disconnected node in IE throws an error
		if ( !elem.getClientRects().length ) {
			return { top: 0, left: 0 };
		}

		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
		rect = elem.getBoundingClientRect();
		win = elem.ownerDocument.defaultView;
		return {
			top: rect.top + win.pageYOffset,
			left: rect.left + win.pageXOffset
		};
	},

	// position() relates an element's margin box to its offset parent's padding box
	// This corresponds to the behavior of CSS absolute positioning
	position: function() {
		if ( !this[ 0 ] ) {
			return;
		}

		var offsetParent, offset, doc,
			elem = this[ 0 ],
			parentOffset = { top: 0, left: 0 };

		// position:fixed elements are offset from the viewport, which itself always has zero offset
		if ( jQuery.css( elem, "position" ) === "fixed" ) {

			// Assume position:fixed implies availability of getBoundingClientRect
			offset = elem.getBoundingClientRect();

		} else {
			offset = this.offset();

			// Account for the *real* offset parent, which can be the document or its root element
			// when a statically positioned element is identified
			doc = elem.ownerDocument;
			offsetParent = elem.offsetParent || doc.documentElement;
			while ( offsetParent &&
				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
				jQuery.css( offsetParent, "position" ) === "static" ) {

				offsetParent = offsetParent.parentNode;
			}
			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {

				// Incorporate borders into its offset, since they are outside its content origin
				parentOffset = jQuery( offsetParent ).offset();
				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
			}
		}

		// Subtract parent offsets and element margins
		return {
			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
		};
	},

	// This method will return documentElement in the following cases:
	// 1) For the element inside the iframe without offsetParent, this method will return
	//    documentElement of the parent window
	// 2) For the hidden or detached element
	// 3) For body or html element, i.e. in case of the html node - it will return itself
	//
	// but those exceptions were never presented as a real life use-cases
	// and might be considered as more preferable results.
	//
	// This logic, however, is not guaranteed and can change at any point in the future
	offsetParent: function() {
		return this.map( function() {
			var offsetParent = this.offsetParent;

			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
				offsetParent = offsetParent.offsetParent;
			}

			return offsetParent || documentElement;
		} );
	}
} );

// Create scrollLeft and scrollTop methods
jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
	var top = "pageYOffset" === prop;

	jQuery.fn[ method ] = function( val ) {
		return access( this, function( elem, method, val ) {

			// Coalesce documents and windows
			var win;
			if ( isWindow( elem ) ) {
				win = elem;
			} else if ( elem.nodeType === 9 ) {
				win = elem.defaultView;
			}

			if ( val === undefined ) {
				return win ? win[ prop ] : elem[ method ];
			}

			if ( win ) {
				win.scrollTo(
					!top ? val : win.pageXOffset,
					top ? val : win.pageYOffset
				);

			} else {
				elem[ method ] = val;
			}
		}, method, val, arguments.length );
	};
} );

// Support: Safari <=7 - 9.1, Chrome <=37 - 49
// Add the top/left cssHooks using jQuery.fn.position
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
// getComputedStyle returns percent when specified for top/left/bottom/right;
// rather than make the css module depend on the offset module, just check for it here
jQuery.each( [ "top", "left" ], function( i, prop ) {
	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
		function( elem, computed ) {
			if ( computed ) {
				computed = curCSS( elem, prop );

				// If curCSS returns percentage, fallback to offset
				return rnumnonpx.test( computed ) ?
					jQuery( elem ).position()[ prop ] + "px" :
					computed;
			}
		}
	);
} );


// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
		function( defaultExtra, funcName ) {

		// Margin is only for outerHeight, outerWidth
		jQuery.fn[ funcName ] = function( margin, value ) {
			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );

			return access( this, function( elem, type, value ) {
				var doc;

				if ( isWindow( elem ) ) {

					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
					return funcName.indexOf( "outer" ) === 0 ?
						elem[ "inner" + name ] :
						elem.document.documentElement[ "client" + name ];
				}

				// Get document width or height
				if ( elem.nodeType === 9 ) {
					doc = elem.documentElement;

					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
					// whichever is greatest
					return Math.max(
						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
						elem.body[ "offset" + name ], doc[ "offset" + name ],
						doc[ "client" + name ]
					);
				}

				return value === undefined ?

					// Get width or height on the element, requesting but not forcing parseFloat
					jQuery.css( elem, type, extra ) :

					// Set width or height on the element
					jQuery.style( elem, type, value, extra );
			}, type, chainable ? margin : undefined, chainable );
		};
	} );
} );


jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
	function( i, name ) {

	// Handle event binding
	jQuery.fn[ name ] = function( data, fn ) {
		return arguments.length > 0 ?
			this.on( name, null, data, fn ) :
			this.trigger( name );
	};
} );

jQuery.fn.extend( {
	hover: function( fnOver, fnOut ) {
		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
	}
} );




jQuery.fn.extend( {

	bind: function( types, data, fn ) {
		return this.on( types, null, data, fn );
	},
	unbind: function( types, fn ) {
		return this.off( types, null, fn );
	},

	delegate: function( selector, types, data, fn ) {
		return this.on( types, selector, data, fn );
	},
	undelegate: function( selector, types, fn ) {

		// ( namespace ) or ( selector, types [, fn] )
		return arguments.length === 1 ?
			this.off( selector, "**" ) :
			this.off( types, selector || "**", fn );
	}
} );

// Bind a function to a context, optionally partially applying any
// arguments.
// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
// However, it is not slated for removal any time soon
jQuery.proxy = function( fn, context ) {
	var tmp, args, proxy;

	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 ( !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;
};

jQuery.holdReady = function( hold ) {
	if ( hold ) {
		jQuery.readyWait++;
	} else {
		jQuery.ready( true );
	}
};
jQuery.isArray = Array.isArray;
jQuery.parseJSON = JSON.parse;
jQuery.nodeName = nodeName;
jQuery.isFunction = isFunction;
jQuery.isWindow = isWindow;
jQuery.camelCase = camelCase;
jQuery.type = toType;

jQuery.now = Date.now;

jQuery.isNumeric = function( obj ) {

	// As of jQuery 3.0, isNumeric is limited to
	// strings and numbers (primitives or objects)
	// that can be coerced to finite numbers (gh-2662)
	var type = jQuery.type( obj );
	return ( type === "number" || type === "string" ) &&

		// parseFloat NaNs numeric-cast false positives ("")
		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
		// subtraction forces infinities to NaN
		!isNaN( obj - parseFloat( obj ) );
};




// Register as a named AMD module, since jQuery can be concatenated with other
// files that may use define, but not via a proper concatenation script that
// understands anonymous AMD modules. A named AMD is safest and most robust
// way to register. Lowercase jquery is used because AMD module names are
// derived from file names, and jQuery is normally delivered in a lowercase
// file name. Do this after creating the global so that if an AMD module wants
// to call noConflict to hide this version of jQuery, it will work.

// Note that for maximum portability, libraries that are not jQuery should
// declare themselves as anonymous modules, and avoid setting a global if an
// AMD loader is present. jQuery is a special case. For more information, see
// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon

if ( typeof define === "function" && define.amd ) {
	define( "jquery", [], function() {
		return jQuery;
	} );
}




var

	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,

	// Map over the $ in case of overwrite
	_$ = window.$;

jQuery.noConflict = function( deep ) {
	if ( window.$ === jQuery ) {
		window.$ = _$;
	}

	if ( deep && window.jQuery === jQuery ) {
		window.jQuery = _jQuery;
	}

	return jQuery;
};

// Expose jQuery and $ identifiers, even in AMD
// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( !noGlobal ) {
	window.jQuery = window.$ = jQuery;
}




return jQuery;
} );

/*! jQuery UI - v1.12.1 - 2016-09-14
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */

(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)
}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;
this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var m;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}
},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog
},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1
},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;
this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});
$.extend( $.fn, {

	// https://jqueryvalidation.org/validate/
	validate: function( options ) {

		// If nothing is selected, return nothing; can't chain anyway
		if ( !this.length ) {
			if ( options && options.debug && window.console ) {
				console.warn( "Nothing selected, can't validate, returning nothing." );
			}
			return;
		}

		// Check if a validator for this form was already created
		var validator = $.data( this[ 0 ], "validator" );
		if ( validator ) {
			return validator;
		}

		// Add novalidate tag if HTML5.
		this.attr( "novalidate", "novalidate" );

		validator = new $.validator( options, this[ 0 ] );
		$.data( this[ 0 ], "validator", validator );

		if ( validator.settings.onsubmit ) {

			this.on( "click.validate", ":submit", function( event ) {

				// Track the used submit button to properly handle scripted
				// submits later.
				validator.submitButton = event.currentTarget;

				// Allow suppressing validation by adding a cancel class to the submit button
				if ( $( this ).hasClass( "cancel" ) ) {
					validator.cancelSubmit = true;
				}

				// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
				if ( $( this ).attr( "formnovalidate" ) !== undefined ) {
					validator.cancelSubmit = true;
				}
			} );

			// Validate the form on submit
			this.on( "submit.validate", function( event ) {
				if ( validator.settings.debug ) {

					// Prevent form submit to be able to see console output
					event.preventDefault();
				}

				function handle() {
					var hidden, result;

					// Insert a hidden input as a replacement for the missing submit button
					// The hidden input is inserted in two cases:
					//   - A user defined a `submitHandler`
					//   - There was a pending request due to `remote` method and `stopRequest()`
					//     was called to submit the form in case it's valid
					if ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {
						hidden = $( "<input type='hidden'/>" )
							.attr( "name", validator.submitButton.name )
							.val( $( validator.submitButton ).val() )
							.appendTo( validator.currentForm );
					}

					if ( validator.settings.submitHandler && !validator.settings.debug ) {
						result = validator.settings.submitHandler.call( validator, validator.currentForm, event );
						if ( hidden ) {

							// And clean up afterwards; thanks to no-block-scope, hidden can be referenced
							hidden.remove();
						}
						if ( result !== undefined ) {
							return result;
						}
						return false;
					}
					return true;
				}

				// Prevent submit for invalid forms or custom submit handlers
				if ( validator.cancelSubmit ) {
					validator.cancelSubmit = false;
					return handle();
				}
				if ( validator.form() ) {
					if ( validator.pendingRequest ) {
						validator.formSubmitted = true;
						return false;
					}
					return handle();
				} else {
					validator.focusInvalid();
					return false;
				}
			} );
		}

		return validator;
	},

	// https://jqueryvalidation.org/valid/
	valid: function() {
		var valid, validator, errorList;

		if ( $( this[ 0 ] ).is( "form" ) ) {
			valid = this.validate().form();
		} else {
			errorList = [];
			valid = true;
			validator = $( this[ 0 ].form ).validate();
			this.each( function() {
				valid = validator.element( this ) && valid;
				if ( !valid ) {
					errorList = errorList.concat( validator.errorList );
				}
			} );
			validator.errorList = errorList;
		}
		return valid;
	},

	// https://jqueryvalidation.org/rules/
	rules: function( command, argument ) {
		var element = this[ 0 ],
			isContentEditable = typeof this.attr( "contenteditable" ) !== "undefined" && this.attr( "contenteditable" ) !== "false",
			settings, staticRules, existingRules, data, param, filtered;

		// If nothing is selected, return empty object; can't chain anyway
		if ( element == null ) {
			return;
		}

		if ( !element.form && isContentEditable ) {
			element.form = this.closest( "form" )[ 0 ];
			element.name = this.attr( "name" );
		}

		if ( element.form == null ) {
			return;
		}

		if ( command ) {
			settings = $.data( element.form, "validator" ).settings;
			staticRules = settings.rules;
			existingRules = $.validator.staticRules( element );
			switch ( command ) {
			case "add":
				$.extend( existingRules, $.validator.normalizeRule( argument ) );

				// Remove messages from rules, but allow them to be set separately
				delete existingRules.messages;
				staticRules[ element.name ] = existingRules;
				if ( argument.messages ) {
					settings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );
				}
				break;
			case "remove":
				if ( !argument ) {
					delete staticRules[ element.name ];
					return existingRules;
				}
				filtered = {};
				$.each( argument.split( /\s/ ), function( index, method ) {
					filtered[ method ] = existingRules[ method ];
					delete existingRules[ method ];
				} );
				return filtered;
			}
		}

		data = $.validator.normalizeRules(
		$.extend(
			{},
			$.validator.classRules( element ),
			$.validator.attributeRules( element ),
			$.validator.dataRules( element ),
			$.validator.staticRules( element )
		), element );

		// Make sure required is at front
		if ( data.required ) {
			param = data.required;
			delete data.required;
			data = $.extend( { required: param }, data );
		}

		// Make sure remote is at back
		if ( data.remote ) {
			param = data.remote;
			delete data.remote;
			data = $.extend( data, { remote: param } );
		}

		return data;
	}
} );

// Custom selectors
$.extend( $.expr.pseudos || $.expr[ ":" ], {		// '|| $.expr[ ":" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support

	// https://jqueryvalidation.org/blank-selector/
	blank: function( a ) {
		return !$.trim( "" + $( a ).val() );
	},

	// https://jqueryvalidation.org/filled-selector/
	filled: function( a ) {
		var val = $( a ).val();
		return val !== null && !!$.trim( "" + val );
	},

	// https://jqueryvalidation.org/unchecked-selector/
	unchecked: function( a ) {
		return !$( a ).prop( "checked" );
	}
} );

// Constructor for validator
$.validator = function( options, form ) {
	this.settings = $.extend( true, {}, $.validator.defaults, options );
	this.currentForm = form;
	this.init();
};

// https://jqueryvalidation.org/jQuery.validator.format/
$.validator.format = function( source, params ) {
	if ( arguments.length === 1 ) {
		return function() {
			var args = $.makeArray( arguments );
			args.unshift( source );
			return $.validator.format.apply( this, args );
		};
	}
	if ( params === undefined ) {
		return source;
	}
	if ( arguments.length > 2 && params.constructor !== Array  ) {
		params = $.makeArray( arguments ).slice( 1 );
	}
	if ( params.constructor !== Array ) {
		params = [ params ];
	}
	$.each( params, function( i, n ) {
		source = source.replace( new RegExp( "\\{" + i + "\\}", "g" ), function() {
			return n;
		} );
	} );
	return source;
};

$.extend( $.validator, {

	defaults: {
		messages: {},
		groups: {},
		rules: {},
		errorClass: "error",
		pendingClass: "pending",
		validClass: "valid",
		errorElement: "label",
		focusCleanup: false,
		focusInvalid: true,
		errorContainer: $( [] ),
		errorLabelContainer: $( [] ),
		onsubmit: true,
		ignore: ":hidden",
		ignoreTitle: false,
		onfocusin: function( element ) {
			this.lastActive = element;

			// Hide error label and remove error class on focus if enabled
			if ( this.settings.focusCleanup ) {
				if ( this.settings.unhighlight ) {
					this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
				}
				this.hideThese( this.errorsFor( element ) );
			}
		},
		onfocusout: function( element ) {
			if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {
				this.element( element );
			}
		},
		onkeyup: function( element, event ) {

			// Avoid revalidate the field when pressing one of the following keys
			// Shift       => 16
			// Ctrl        => 17
			// Alt         => 18
			// Caps lock   => 20
			// End         => 35
			// Home        => 36
			// Left arrow  => 37
			// Up arrow    => 38
			// Right arrow => 39
			// Down arrow  => 40
			// Insert      => 45
			// Num lock    => 144
			// AltGr key   => 225
			var excludedKeys = [
				16, 17, 18, 20, 35, 36, 37,
				38, 39, 40, 45, 144, 225
			];

			if ( event.which === 9 && this.elementValue( element ) === "" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {
				return;
			} else if ( element.name in this.submitted || element.name in this.invalid ) {
				this.element( element );
			}
		},
		onclick: function( element ) {

			// Click on selects, radiobuttons and checkboxes
			if ( element.name in this.submitted ) {
				this.element( element );

			// Or option elements, check parent select in that case
			} else if ( element.parentNode.name in this.submitted ) {
				this.element( element.parentNode );
			}
		},
		highlight: function( element, errorClass, validClass ) {
			if ( element.type === "radio" ) {
				this.findByName( element.name ).addClass( errorClass ).removeClass( validClass );
			} else {
				$( element ).addClass( errorClass ).removeClass( validClass );
			}
		},
		unhighlight: function( element, errorClass, validClass ) {
			if ( element.type === "radio" ) {
				this.findByName( element.name ).removeClass( errorClass ).addClass( validClass );
			} else {
				$( element ).removeClass( errorClass ).addClass( validClass );
			}
		}
	},

	// https://jqueryvalidation.org/jQuery.validator.setDefaults/
	setDefaults: function( settings ) {
		$.extend( $.validator.defaults, settings );
	},

	messages: {
		required: "This field is required.",
		remote: "Please fix this field.",
		email: "Please enter a valid email address.",
		url: "Please enter a valid URL.",
		date: "Please enter a valid date.",
		dateISO: "Please enter a valid date (ISO).",
		number: "Please enter a valid number.",
		digits: "Please enter only digits.",
		equalTo: "Please enter the same value again.",
		maxlength: $.validator.format( "Please enter no more than {0} characters." ),
		minlength: $.validator.format( "Please enter at least {0} characters." ),
		rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
		range: $.validator.format( "Please enter a value between {0} and {1}." ),
		max: $.validator.format( "Please enter a value less than or equal to {0}." ),
		min: $.validator.format( "Please enter a value greater than or equal to {0}." ),
		step: $.validator.format( "Please enter a multiple of {0}." )
	},

	autoCreateRanges: false,

	prototype: {

		init: function() {
			this.labelContainer = $( this.settings.errorLabelContainer );
			this.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );
			this.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );
			this.submitted = {};
			this.valueCache = {};
			this.pendingRequest = 0;
			this.pending = {};
			this.invalid = {};
			this.reset();

			var currentForm = this.currentForm,
				groups = ( this.groups = {} ),
				rules;
			$.each( this.settings.groups, function( key, value ) {
				if ( typeof value === "string" ) {
					value = value.split( /\s/ );
				}
				$.each( value, function( index, name ) {
					groups[ name ] = key;
				} );
			} );
			rules = this.settings.rules;
			$.each( rules, function( key, value ) {
				rules[ key ] = $.validator.normalizeRule( value );
			} );

			function delegate( event ) {
				var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false";

				// Set form expando on contenteditable
				if ( !this.form && isContentEditable ) {
					this.form = $( this ).closest( "form" )[ 0 ];
					this.name = $( this ).attr( "name" );
				}

				// Ignore the element if it belongs to another form. This will happen mainly
				// when setting the `form` attribute of an input to the id of another form.
				if ( currentForm !== this.form ) {
					return;
				}

				var validator = $.data( this.form, "validator" ),
					eventType = "on" + event.type.replace( /^validate/, "" ),
					settings = validator.settings;
				if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
					settings[ eventType ].call( validator, this, event );
				}
			}

			$( this.currentForm )
				.on( "focusin.validate focusout.validate keyup.validate",
					":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " +
					"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " +
					"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " +
					"[type='radio'], [type='checkbox'], [contenteditable], [type='button']", delegate )

				// Support: Chrome, oldIE
				// "select" is provided as event.target when clicking a option
				.on( "click.validate", "select, option, [type='radio'], [type='checkbox']", delegate );

			if ( this.settings.invalidHandler ) {
				$( this.currentForm ).on( "invalid-form.validate", this.settings.invalidHandler );
			}
		},

		// https://jqueryvalidation.org/Validator.form/
		form: function() {
			this.checkForm();
			$.extend( this.submitted, this.errorMap );
			this.invalid = $.extend( {}, this.errorMap );
			if ( !this.valid() ) {
				$( this.currentForm ).triggerHandler( "invalid-form", [ this ] );
			}
			this.showErrors();
			return this.valid();
		},

		checkForm: function() {
			this.prepareForm();
			for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {
				this.check( elements[ i ] );
			}
			return this.valid();
		},

		// https://jqueryvalidation.org/Validator.element/
		element: function( element ) {
			var cleanElement = this.clean( element ),
				checkElement = this.validationTargetFor( cleanElement ),
				v = this,
				result = true,
				rs, group;

			if ( checkElement === undefined ) {
				delete this.invalid[ cleanElement.name ];
			} else {
				this.prepareElement( checkElement );
				this.currentElements = $( checkElement );

				// If this element is grouped, then validate all group elements already
				// containing a value
				group = this.groups[ checkElement.name ];
				if ( group ) {
					$.each( this.groups, function( name, testgroup ) {
						if ( testgroup === group && name !== checkElement.name ) {
							cleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );
							if ( cleanElement && cleanElement.name in v.invalid ) {
								v.currentElements.push( cleanElement );
								result = v.check( cleanElement ) && result;
							}
						}
					} );
				}

				rs = this.check( checkElement ) !== false;
				result = result && rs;
				if ( rs ) {
					this.invalid[ checkElement.name ] = false;
				} else {
					this.invalid[ checkElement.name ] = true;
				}

				if ( !this.numberOfInvalids() ) {

					// Hide error containers on last error
					this.toHide = this.toHide.add( this.containers );
				}
				this.showErrors();

				// Add aria-invalid status for screen readers
				$( element ).attr( "aria-invalid", !rs );
			}

			return result;
		},

		// https://jqueryvalidation.org/Validator.showErrors/
		showErrors: function( errors ) {
			if ( errors ) {
				var validator = this;

				// Add items to error list and map
				$.extend( this.errorMap, errors );
				this.errorList = $.map( this.errorMap, function( message, name ) {
					return {
						message: message,
						element: validator.findByName( name )[ 0 ]
					};
				} );

				// Remove items from success list
				this.successList = $.grep( this.successList, function( element ) {
					return !( element.name in errors );
				} );
			}
			if ( this.settings.showErrors ) {
				this.settings.showErrors.call( this, this.errorMap, this.errorList );
			} else {
				this.defaultShowErrors();
			}
		},

		// https://jqueryvalidation.org/Validator.resetForm/
		resetForm: function() {
			if ( $.fn.resetForm ) {
				$( this.currentForm ).resetForm();
			}
			this.invalid = {};
			this.submitted = {};
			this.prepareForm();
			this.hideErrors();
			var elements = this.elements()
				.removeData( "previousValue" )
				.removeAttr( "aria-invalid" );

			this.resetElements( elements );
		},

		resetElements: function( elements ) {
			var i;

			if ( this.settings.unhighlight ) {
				for ( i = 0; elements[ i ]; i++ ) {
					this.settings.unhighlight.call( this, elements[ i ],
						this.settings.errorClass, "" );
					this.findByName( elements[ i ].name ).removeClass( this.settings.validClass );
				}
			} else {
				elements
					.removeClass( this.settings.errorClass )
					.removeClass( this.settings.validClass );
			}
		},

		numberOfInvalids: function() {
			return this.objectLength( this.invalid );
		},

		objectLength: function( obj ) {
			/* jshint unused: false */
			var count = 0,
				i;
			for ( i in obj ) {

				// This check allows counting elements with empty error
				// message as invalid elements
				if ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {
					count++;
				}
			}
			return count;
		},

		hideErrors: function() {
			this.hideThese( this.toHide );
		},

		hideThese: function( errors ) {
			errors.not( this.containers ).text( "" );
			this.addWrapper( errors ).hide();
		},

		valid: function() {
			return this.size() === 0;
		},

		size: function() {
			return this.errorList.length;
		},

		focusInvalid: function() {
			if ( this.settings.focusInvalid ) {
				try {
					$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )
					.filter( ":visible" )
					.trigger( "focus" )

					// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
					.trigger( "focusin" );
				} catch ( e ) {

					// Ignore IE throwing errors when focusing hidden elements
				}
			}
		},

		findLastActive: function() {
			var lastActive = this.lastActive;
			return lastActive && $.grep( this.errorList, function( n ) {
				return n.element.name === lastActive.name;
			} ).length === 1 && lastActive;
		},

		elements: function() {
			var validator = this,
				rulesCache = {};

			// Select all valid inputs inside the form (no submit or reset buttons)
			return $( this.currentForm )
			.find( "input, select, textarea, [contenteditable]" )
			.not( ":submit, :reset, :image, :disabled" )
			.not( this.settings.ignore )
			.filter( function() {
				var name = this.name || $( this ).attr( "name" ); // For contenteditable
				var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false";

				if ( !name && validator.settings.debug && window.console ) {
					console.error( "%o has no name assigned", this );
				}

				// Set form expando on contenteditable
				if ( isContentEditable ) {
					this.form = $( this ).closest( "form" )[ 0 ];
					this.name = name;
				}

				// Ignore elements that belong to other/nested forms
				if ( this.form !== validator.currentForm ) {
					return false;
				}

				// Select only the first element for each name, and only those with rules specified
				if ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {
					return false;
				}

				rulesCache[ name ] = true;
				return true;
			} );
		},

		clean: function( selector ) {
			return $( selector )[ 0 ];
		},

		errors: function() {
			var errorClass = this.settings.errorClass.split( " " ).join( "." );
			return $( this.settings.errorElement + "." + errorClass, this.errorContext );
		},

		resetInternals: function() {
			this.successList = [];
			this.errorList = [];
			this.errorMap = {};
			this.toShow = $( [] );
			this.toHide = $( [] );
		},

		reset: function() {
			this.resetInternals();
			this.currentElements = $( [] );
		},

		prepareForm: function() {
			this.reset();
			this.toHide = this.errors().add( this.containers );
		},

		prepareElement: function( element ) {
			this.reset();
			this.toHide = this.errorsFor( element );
		},

		elementValue: function( element ) {
			var $element = $( element ),
				type = element.type,
				isContentEditable = typeof $element.attr( "contenteditable" ) !== "undefined" && $element.attr( "contenteditable" ) !== "false",
				val, idx;

			if ( type === "radio" || type === "checkbox" ) {
				return this.findByName( element.name ).filter( ":checked" ).val();
			} else if ( type === "number" && typeof element.validity !== "undefined" ) {
				return element.validity.badInput ? "NaN" : $element.val();
			}

			if ( isContentEditable ) {
				val = $element.text();
			} else {
				val = $element.val();
			}

			if ( type === "file" ) {

				// Modern browser (chrome & safari)
				if ( val.substr( 0, 12 ) === "C:\\fakepath\\" ) {
					return val.substr( 12 );
				}

				// Legacy browsers
				// Unix-based path
				idx = val.lastIndexOf( "/" );
				if ( idx >= 0 ) {
					return val.substr( idx + 1 );
				}

				// Windows-based path
				idx = val.lastIndexOf( "\\" );
				if ( idx >= 0 ) {
					return val.substr( idx + 1 );
				}

				// Just the file name
				return val;
			}

			if ( typeof val === "string" ) {
				return val.replace( /\r/g, "" );
			}
			return val;
		},

		check: function( element ) {
			element = this.validationTargetFor( this.clean( element ) );

			var rules = $( element ).rules(),
				rulesCount = $.map( rules, function( n, i ) {
					return i;
				} ).length,
				dependencyMismatch = false,
				val = this.elementValue( element ),
				result, method, rule, normalizer;

			// Prioritize the local normalizer defined for this element over the global one
			// if the former exists, otherwise user the global one in case it exists.
			if ( typeof rules.normalizer === "function" ) {
				normalizer = rules.normalizer;
			} else if (	typeof this.settings.normalizer === "function" ) {
				normalizer = this.settings.normalizer;
			}

			// If normalizer is defined, then call it to retreive the changed value instead
			// of using the real one.
			// Note that `this` in the normalizer is `element`.
			if ( normalizer ) {
				val = normalizer.call( element, val );

				// Delete the normalizer from rules to avoid treating it as a pre-defined method.
				delete rules.normalizer;
			}

			for ( method in rules ) {
				rule = { method: method, parameters: rules[ method ] };
				try {
					result = $.validator.methods[ method ].call( this, val, element, rule.parameters );

					// If a method indicates that the field is optional and therefore valid,
					// don't mark it as valid when there are no other rules
					if ( result === "dependency-mismatch" && rulesCount === 1 ) {
						dependencyMismatch = true;
						continue;
					}
					dependencyMismatch = false;

					if ( result === "pending" ) {
						this.toHide = this.toHide.not( this.errorsFor( element ) );
						return;
					}

					if ( !result ) {
						this.formatAndAdd( element, rule );
						return false;
					}
				} catch ( e ) {
					if ( this.settings.debug && window.console ) {
						console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e );
					}
					if ( e instanceof TypeError ) {
						e.message += ".  Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.";
					}

					throw e;
				}
			}
			if ( dependencyMismatch ) {
				return;
			}
			if ( this.objectLength( rules ) ) {
				this.successList.push( element );
			}
			return true;
		},

		// Return the custom message for the given element and validation method
		// specified in the element's HTML5 data attribute
		// return the generic message if present and no method specific message is present
		customDataMessage: function( element, method ) {
			return $( element ).data( "msg" + method.charAt( 0 ).toUpperCase() +
				method.substring( 1 ).toLowerCase() ) || $( element ).data( "msg" );
		},

		// Return the custom message for the given element name and validation method
		customMessage: function( name, method ) {
			var m = this.settings.messages[ name ];
			return m && ( m.constructor === String ? m : m[ method ] );
		},

		// Return the first defined argument, allowing empty strings
		findDefined: function() {
			for ( var i = 0; i < arguments.length; i++ ) {
				if ( arguments[ i ] !== undefined ) {
					return arguments[ i ];
				}
			}
			return undefined;
		},

		// The second parameter 'rule' used to be a string, and extended to an object literal
		// of the following form:
		// rule = {
		//     method: "method name",
		//     parameters: "the given method parameters"
		// }
		//
		// The old behavior still supported, kept to maintain backward compatibility with
		// old code, and will be removed in the next major release.
		defaultMessage: function( element, rule ) {
			if ( typeof rule === "string" ) {
				rule = { method: rule };
			}

			var message = this.findDefined(
					this.customMessage( element.name, rule.method ),
					this.customDataMessage( element, rule.method ),

					// 'title' is never undefined, so handle empty string as undefined
					!this.settings.ignoreTitle && element.title || undefined,
					$.validator.messages[ rule.method ],
					"<strong>Warning: No message defined for " + element.name + "</strong>"
				),
				theregex = /\$?\{(\d+)\}/g;
			if ( typeof message === "function" ) {
				message = message.call( this, rule.parameters, element );
			} else if ( theregex.test( message ) ) {
				message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters );
			}

			return message;
		},

		formatAndAdd: function( element, rule ) {
			var message = this.defaultMessage( element, rule );

			this.errorList.push( {
				message: message,
				element: element,
				method: rule.method
			} );

			this.errorMap[ element.name ] = message;
			this.submitted[ element.name ] = message;
		},

		addWrapper: function( toToggle ) {
			if ( this.settings.wrapper ) {
				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
			}
			return toToggle;
		},

		defaultShowErrors: function() {
			var i, elements, error;
			for ( i = 0; this.errorList[ i ]; i++ ) {
				error = this.errorList[ i ];
				if ( this.settings.highlight ) {
					this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
				}
				this.showLabel( error.element, error.message );
			}
			if ( this.errorList.length ) {
				this.toShow = this.toShow.add( this.containers );
			}
			if ( this.settings.success ) {
				for ( i = 0; this.successList[ i ]; i++ ) {
					this.showLabel( this.successList[ i ] );
				}
			}
			if ( this.settings.unhighlight ) {
				for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {
					this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );
				}
			}
			this.toHide = this.toHide.not( this.toShow );
			this.hideErrors();
			this.addWrapper( this.toShow ).show();
		},

		validElements: function() {
			return this.currentElements.not( this.invalidElements() );
		},

		invalidElements: function() {
			return $( this.errorList ).map( function() {
				return this.element;
			} );
		},

		showLabel: function( element, message ) {
			var place, group, errorID, v,
				error = this.errorsFor( element ),
				elementID = this.idOrName( element ),
				describedBy = $( element ).attr( "aria-describedby" );

			if ( error.length ) {

				// Refresh error/success class
				error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );

				// Replace message on existing label
				error.html( message );
			} else {

				// Create error element
				error = $( "<" + this.settings.errorElement + ">" )
					.attr( "id", elementID + "-error" )
					.addClass( this.settings.errorClass )
					.html( message || "" );

				// Maintain reference to the element to be placed into the DOM
				place = error;
				if ( this.settings.wrapper ) {

					// Make sure the element is visible, even in IE
					// actually showing the wrapped element is handled elsewhere
					place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent();
				}
				if ( this.labelContainer.length ) {
					this.labelContainer.append( place );
				} else if ( this.settings.errorPlacement ) {
					this.settings.errorPlacement.call( this, place, $( element ) );
				} else {
					place.insertAfter( element );
				}

				// Link error back to the element
				if ( error.is( "label" ) ) {

					// If the error is a label, then associate using 'for'
					error.attr( "for", elementID );

					// If the element is not a child of an associated label, then it's necessary
					// to explicitly apply aria-describedby
				} else if ( error.parents( "label[for='" + this.escapeCssMeta( elementID ) + "']" ).length === 0 ) {
					errorID = error.attr( "id" );

					// Respect existing non-error aria-describedby
					if ( !describedBy ) {
						describedBy = errorID;
					} else if ( !describedBy.match( new RegExp( "\\b" + this.escapeCssMeta( errorID ) + "\\b" ) ) ) {

						// Add to end of list if not already present
						describedBy += " " + errorID;
					}
					$( element ).attr( "aria-describedby", describedBy );

					// If this element is grouped, then assign to all elements in the same group
					group = this.groups[ element.name ];
					if ( group ) {
						v = this;
						$.each( v.groups, function( name, testgroup ) {
							if ( testgroup === group ) {
								$( "[name='" + v.escapeCssMeta( name ) + "']", v.currentForm )
									.attr( "aria-describedby", error.attr( "id" ) );
							}
						} );
					}
				}
			}
			if ( !message && this.settings.success ) {
				error.text( "" );
				if ( typeof this.settings.success === "string" ) {
					error.addClass( this.settings.success );
				} else {
					this.settings.success( error, element );
				}
			}
			this.toShow = this.toShow.add( error );
		},

		errorsFor: function( element ) {
			var name = this.escapeCssMeta( this.idOrName( element ) ),
				describer = $( element ).attr( "aria-describedby" ),
				selector = "label[for='" + name + "'], label[for='" + name + "'] *";

			// 'aria-describedby' should directly reference the error element
			if ( describer ) {
				selector = selector + ", #" + this.escapeCssMeta( describer )
					.replace( /\s+/g, ", #" );
			}

			return this
				.errors()
				.filter( selector );
		},

		// See https://api.jquery.com/category/selectors/, for CSS
		// meta-characters that should be escaped in order to be used with JQuery
		// as a literal part of a name/id or any selector.
		escapeCssMeta: function( string ) {
			return string.replace( /([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1" );
		},

		idOrName: function( element ) {
			return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );
		},

		validationTargetFor: function( element ) {

			// If radio/checkbox, validate first element in group instead
			if ( this.checkable( element ) ) {
				element = this.findByName( element.name );
			}

			// Always apply ignore filter
			return $( element ).not( this.settings.ignore )[ 0 ];
		},

		checkable: function( element ) {
			return ( /radio|checkbox/i ).test( element.type );
		},

		findByName: function( name ) {
			return $( this.currentForm ).find( "[name='" + this.escapeCssMeta( name ) + "']" );
		},

		getLength: function( value, element ) {
			switch ( element.nodeName.toLowerCase() ) {
			case "select":
				return $( "option:selected", element ).length;
			case "input":
				if ( this.checkable( element ) ) {
					return this.findByName( element.name ).filter( ":checked" ).length;
				}
			}
			return value.length;
		},

		depend: function( param, element ) {
			return this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;
		},

		dependTypes: {
			"boolean": function( param ) {
				return param;
			},
			"string": function( param, element ) {
				return !!$( param, element.form ).length;
			},
			"function": function( param, element ) {
				return param( element );
			}
		},

		optional: function( element ) {
			var val = this.elementValue( element );
			return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
		},

		startRequest: function( element ) {
			if ( !this.pending[ element.name ] ) {
				this.pendingRequest++;
				$( element ).addClass( this.settings.pendingClass );
				this.pending[ element.name ] = true;
			}
		},

		stopRequest: function( element, valid ) {
			this.pendingRequest--;

			// Sometimes synchronization fails, make sure pendingRequest is never < 0
			if ( this.pendingRequest < 0 ) {
				this.pendingRequest = 0;
			}
			delete this.pending[ element.name ];
			$( element ).removeClass( this.settings.pendingClass );
			if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {
				$( this.currentForm ).submit();

				// Remove the hidden input that was used as a replacement for the
				// missing submit button. The hidden input is added by `handle()`
				// to ensure that the value of the used submit button is passed on
				// for scripted submits triggered by this method
				if ( this.submitButton ) {
					$( "input:hidden[name='" + this.submitButton.name + "']", this.currentForm ).remove();
				}

				this.formSubmitted = false;
			} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {
				$( this.currentForm ).triggerHandler( "invalid-form", [ this ] );
				this.formSubmitted = false;
			}
		},

		previousValue: function( element, method ) {
			method = typeof method === "string" && method || "remote";

			return $.data( element, "previousValue" ) || $.data( element, "previousValue", {
				old: null,
				valid: true,
				message: this.defaultMessage( element, { method: method } )
			} );
		},

		// Cleans up all forms and elements, removes validator-specific events
		destroy: function() {
			this.resetForm();

			$( this.currentForm )
				.off( ".validate" )
				.removeData( "validator" )
				.find( ".validate-equalTo-blur" )
					.off( ".validate-equalTo" )
					.removeClass( "validate-equalTo-blur" )
				.find( ".validate-lessThan-blur" )
					.off( ".validate-lessThan" )
					.removeClass( "validate-lessThan-blur" )
				.find( ".validate-lessThanEqual-blur" )
					.off( ".validate-lessThanEqual" )
					.removeClass( "validate-lessThanEqual-blur" )
				.find( ".validate-greaterThanEqual-blur" )
					.off( ".validate-greaterThanEqual" )
					.removeClass( "validate-greaterThanEqual-blur" )
				.find( ".validate-greaterThan-blur" )
					.off( ".validate-greaterThan" )
					.removeClass( "validate-greaterThan-blur" );
		}

	},

	classRuleSettings: {
		required: { required: true },
		email: { email: true },
		url: { url: true },
		date: { date: true },
		dateISO: { dateISO: true },
		number: { number: true },
		digits: { digits: true },
		creditcard: { creditcard: true }
	},

	addClassRules: function( className, rules ) {
		if ( className.constructor === String ) {
			this.classRuleSettings[ className ] = rules;
		} else {
			$.extend( this.classRuleSettings, className );
		}
	},

	classRules: function( element ) {
		var rules = {},
			classes = $( element ).attr( "class" );

		if ( classes ) {
			$.each( classes.split( " " ), function() {
				if ( this in $.validator.classRuleSettings ) {
					$.extend( rules, $.validator.classRuleSettings[ this ] );
				}
			} );
		}
		return rules;
	},

	normalizeAttributeRule: function( rules, type, method, value ) {

		// Convert the value to a number for number inputs, and for text for backwards compability
		// allows type="date" and others to be compared as strings
		if ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {
			value = Number( value );

			// Support Opera Mini, which returns NaN for undefined minlength
			if ( isNaN( value ) ) {
				value = undefined;
			}
		}

		if ( value || value === 0 ) {
			rules[ method ] = value;
		} else if ( type === method && type !== "range" ) {

			// Exception: the jquery validate 'range' method
			// does not test for the html5 'range' type
			rules[ method ] = true;
		}
	},

	attributeRules: function( element ) {
		var rules = {},
			$element = $( element ),
			type = element.getAttribute( "type" ),
			method, value;

		for ( method in $.validator.methods ) {

			// Support for <input required> in both html5 and older browsers
			if ( method === "required" ) {
				value = element.getAttribute( method );

				// Some browsers return an empty string for the required attribute
				// and non-HTML5 browsers might have required="" markup
				if ( value === "" ) {
					value = true;
				}

				// Force non-HTML5 browsers to return bool
				value = !!value;
			} else {
				value = $element.attr( method );
			}

			this.normalizeAttributeRule( rules, type, method, value );
		}

		// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs
		if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {
			delete rules.maxlength;
		}

		return rules;
	},

	dataRules: function( element ) {
		var rules = {},
			$element = $( element ),
			type = element.getAttribute( "type" ),
			method, value;

		for ( method in $.validator.methods ) {
			value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );

			// Cast empty attributes like `data-rule-required` to `true`
			if ( value === "" ) {
				value = true;
			}

			this.normalizeAttributeRule( rules, type, method, value );
		}
		return rules;
	},

	staticRules: function( element ) {
		var rules = {},
			validator = $.data( element.form, "validator" );

		if ( validator.settings.rules ) {
			rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};
		}
		return rules;
	},

	normalizeRules: function( rules, element ) {

		// Handle dependency check
		$.each( rules, function( prop, val ) {

			// Ignore rule when param is explicitly false, eg. required:false
			if ( val === false ) {
				delete rules[ prop ];
				return;
			}
			if ( val.param || val.depends ) {
				var keepRule = true;
				switch ( typeof val.depends ) {
				case "string":
					keepRule = !!$( val.depends, element.form ).length;
					break;
				case "function":
					keepRule = val.depends.call( element, element );
					break;
				}
				if ( keepRule ) {
					rules[ prop ] = val.param !== undefined ? val.param : true;
				} else {
					$.data( element.form, "validator" ).resetElements( $( element ) );
					delete rules[ prop ];
				}
			}
		} );

		// Evaluate parameters
		$.each( rules, function( rule, parameter ) {
			rules[ rule ] = $.isFunction( parameter ) && rule !== "normalizer" ? parameter( element ) : parameter;
		} );

		// Clean number parameters
		$.each( [ "minlength", "maxlength" ], function() {
			if ( rules[ this ] ) {
				rules[ this ] = Number( rules[ this ] );
			}
		} );
		$.each( [ "rangelength", "range" ], function() {
			var parts;
			if ( rules[ this ] ) {
				if ( $.isArray( rules[ this ] ) ) {
					rules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];
				} else if ( typeof rules[ this ] === "string" ) {
					parts = rules[ this ].replace( /[\[\]]/g, "" ).split( /[\s,]+/ );
					rules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];
				}
			}
		} );

		if ( $.validator.autoCreateRanges ) {

			// Auto-create ranges
			if ( rules.min != null && rules.max != null ) {
				rules.range = [ rules.min, rules.max ];
				delete rules.min;
				delete rules.max;
			}
			if ( rules.minlength != null && rules.maxlength != null ) {
				rules.rangelength = [ rules.minlength, rules.maxlength ];
				delete rules.minlength;
				delete rules.maxlength;
			}
		}

		return rules;
	},

	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
	normalizeRule: function( data ) {
		if ( typeof data === "string" ) {
			var transformed = {};
			$.each( data.split( /\s/ ), function() {
				transformed[ this ] = true;
			} );
			data = transformed;
		}
		return data;
	},

	// https://jqueryvalidation.org/jQuery.validator.addMethod/
	addMethod: function( name, method, message ) {
		$.validator.methods[ name ] = method;
		$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];
		if ( method.length < 3 ) {
			$.validator.addClassRules( name, $.validator.normalizeRule( name ) );
		}
	},

	// https://jqueryvalidation.org/jQuery.validator.methods/
	methods: {

		// https://jqueryvalidation.org/required-method/
		required: function( value, element, param ) {

			// Check if dependency is met
			if ( !this.depend( param, element ) ) {
				return "dependency-mismatch";
			}
			if ( element.nodeName.toLowerCase() === "select" ) {

				// Could be an array for select-multiple or a string, both are fine this way
				var val = $( element ).val();
				return val && val.length > 0;
			}
			if ( this.checkable( element ) ) {
				return this.getLength( value, element ) > 0;
			}
			return value !== undefined && value !== null && value.length > 0;
		},

		// https://jqueryvalidation.org/email-method/
		email: function( value, element ) {

			// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address
			// Retrieved 2014-01-14
			// If you have a problem with this implementation, report a bug against the above spec
			// Or use custom methods to implement your own email validation
			return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
		},

		// https://jqueryvalidation.org/url-method/
		url: function( value, element ) {

			// Copyright (c) 2010-2013 Diego Perini, MIT licensed
			// https://gist.github.com/dperini/729294
			// see also https://mathiasbynens.be/demo/url-regex
			// modified to allow protocol-relative URLs
			return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test( value );
		},

		// https://jqueryvalidation.org/date-method/
		date: ( function() {
			var called = false;

			return function( value, element ) {
				if ( !called ) {
					called = true;
					if ( this.settings.debug && window.console ) {
						console.warn(
							"The `date` method is deprecated and will be removed in version '2.0.0'.\n" +
							"Please don't use it, since it relies on the Date constructor, which\n" +
							"behaves very differently across browsers and locales. Use `dateISO`\n" +
							"instead or one of the locale specific methods in `localizations/`\n" +
							"and `additional-methods.js`."
						);
					}
				}

				return this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );
			};
		}() ),

		// https://jqueryvalidation.org/dateISO-method/
		dateISO: function( value, element ) {
			return this.optional( element ) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );
		},

		// https://jqueryvalidation.org/number-method/
		number: function( value, element ) {
			return this.optional( element ) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test( value );
		},

		// https://jqueryvalidation.org/digits-method/
		digits: function( value, element ) {
			return this.optional( element ) || /^\d+$/.test( value );
		},

		// https://jqueryvalidation.org/minlength-method/
		minlength: function( value, element, param ) {
			var length = $.isArray( value ) ? value.length : this.getLength( value, element );
			return this.optional( element ) || length >= param;
		},

		// https://jqueryvalidation.org/maxlength-method/
		maxlength: function( value, element, param ) {
			var length = $.isArray( value ) ? value.length : this.getLength( value, element );
			return this.optional( element ) || length <= param;
		},

		// https://jqueryvalidation.org/rangelength-method/
		rangelength: function( value, element, param ) {
			var length = $.isArray( value ) ? value.length : this.getLength( value, element );
			return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
		},

		// https://jqueryvalidation.org/min-method/
		min: function( value, element, param ) {
			return this.optional( element ) || value >= param;
		},

		// https://jqueryvalidation.org/max-method/
		max: function( value, element, param ) {
			return this.optional( element ) || value <= param;
		},

		// https://jqueryvalidation.org/range-method/
		range: function( value, element, param ) {
			return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );
		},

		// https://jqueryvalidation.org/step-method/
		step: function( value, element, param ) {
			var type = $( element ).attr( "type" ),
				errorMessage = "Step attribute on input type " + type + " is not supported.",
				supportedTypes = [ "text", "number", "range" ],
				re = new RegExp( "\\b" + type + "\\b" ),
				notSupported = type && !re.test( supportedTypes.join() ),
				decimalPlaces = function( num ) {
					var match = ( "" + num ).match( /(?:\.(\d+))?$/ );
					if ( !match ) {
						return 0;
					}

					// Number of digits right of decimal point.
					return match[ 1 ] ? match[ 1 ].length : 0;
				},
				toInt = function( num ) {
					return Math.round( num * Math.pow( 10, decimals ) );
				},
				valid = true,
				decimals;

			// Works only for text, number and range input types
			// TODO find a way to support input types date, datetime, datetime-local, month, time and week
			if ( notSupported ) {
				throw new Error( errorMessage );
			}

			decimals = decimalPlaces( param );

			// Value can't have too many decimals
			if ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {
				valid = false;
			}

			return this.optional( element ) || valid;
		},

		// https://jqueryvalidation.org/equalTo-method/
		equalTo: function( value, element, param ) {

			// Bind to the blur event of the target in order to revalidate whenever the target field is updated
			var target = $( param );
			if ( this.settings.onfocusout && target.not( ".validate-equalTo-blur" ).length ) {
				target.addClass( "validate-equalTo-blur" ).on( "blur.validate-equalTo", function() {
					$( element ).valid();
				} );
			}
			return value === target.val();
		},

		// https://jqueryvalidation.org/remote-method/
		remote: function( value, element, param, method ) {
			if ( this.optional( element ) ) {
				return "dependency-mismatch";
			}

			method = typeof method === "string" && method || "remote";

			var previous = this.previousValue( element, method ),
				validator, data, optionDataString;

			if ( !this.settings.messages[ element.name ] ) {
				this.settings.messages[ element.name ] = {};
			}
			previous.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];
			this.settings.messages[ element.name ][ method ] = previous.message;

			param = typeof param === "string" && { url: param } || param;
			optionDataString = $.param( $.extend( { data: value }, param.data ) );
			if ( previous.old === optionDataString ) {
				return previous.valid;
			}

			previous.old = optionDataString;
			validator = this;
			this.startRequest( element );
			data = {};
			data[ element.name ] = value;
			$.ajax( $.extend( true, {
				mode: "abort",
				port: "validate" + element.name,
				dataType: "json",
				data: data,
				context: validator.currentForm,
				success: function( response ) {
					var valid = response === true || response === "true",
						errors, message, submitted;

					validator.settings.messages[ element.name ][ method ] = previous.originalMessage;
					if ( valid ) {
						submitted = validator.formSubmitted;
						validator.resetInternals();
						validator.toHide = validator.errorsFor( element );
						validator.formSubmitted = submitted;
						validator.successList.push( element );
						validator.invalid[ element.name ] = false;
						validator.showErrors();
					} else {
						errors = {};
						message = response || validator.defaultMessage( element, { method: method, parameters: value } );
						errors[ element.name ] = previous.message = message;
						validator.invalid[ element.name ] = true;
						validator.showErrors( errors );
					}
					previous.valid = valid;
					validator.stopRequest( element, valid );
				}
			}, param ) );
			return "pending";
		}
	}

} );

// Ajax mode: abort
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()

var pendingRequests = {},
	ajax;

// Use a prefilter if available (1.5+)
if ( $.ajaxPrefilter ) {
	$.ajaxPrefilter( function( settings, _, xhr ) {
		var port = settings.port;
		if ( settings.mode === "abort" ) {
			if ( pendingRequests[ port ] ) {
				pendingRequests[ port ].abort();
			}
			pendingRequests[ port ] = xhr;
		}
	} );
} else {

	// Proxy ajax
	ajax = $.ajax;
	$.ajax = function( settings ) {
		var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
			port = ( "port" in settings ? settings : $.ajaxSettings ).port;
		if ( mode === "abort" ) {
			if ( pendingRequests[ port ] ) {
				pendingRequests[ port ].abort();
			}
			pendingRequests[ port ] = ajax.apply( this, arguments );
			return pendingRequests[ port ];
		}
		return ajax.apply( this, arguments );
	};
}

/**
 * This is used in the United States to process payments, deposits,
 * or transfers using the Automated Clearing House (ACH) or Fedwire
 * systems. A very common use case would be to validate a form for
 * an ACH bill payment.
 */
$.validator.addMethod( "abaRoutingNumber", function( value ) {
	var checksum = 0;
	var tokens = value.split( "" );
	var length = tokens.length;

	// Length Check
	if ( length !== 9 ) {
		return false;
	}

	// Calc the checksum
	// https://en.wikipedia.org/wiki/ABA_routing_transit_number
	for ( var i = 0; i < length; i += 3 ) {
		checksum +=	parseInt( tokens[ i ], 10 )     * 3 +
					parseInt( tokens[ i + 1 ], 10 ) * 7 +
					parseInt( tokens[ i + 2 ], 10 );
	}

	// If not zero and divisible by 10 then valid
	if ( checksum !== 0 && checksum % 10 === 0 ) {
		return true;
	}

	return false;
}, "Please enter a valid routing number." );

// Accept a value from a file input based on a required mimetype
$.validator.addMethod( "accept", function( value, element, param ) {

	// Split mime on commas in case we have multiple types we can accept
	var typeParam = typeof param === "string" ? param.replace( /\s/g, "" ) : "image/*",
		optionalValue = this.optional( element ),
		i, file, regex;

	// Element is optional
	if ( optionalValue ) {
		return optionalValue;
	}

	if ( $( element ).attr( "type" ) === "file" ) {

		// Escape string to be used in the regex
		// see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
		// Escape also "/*" as "/.*" as a wildcard
		typeParam = typeParam
				.replace( /[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g, "\\$&" )
				.replace( /,/g, "|" )
				.replace( /\/\*/g, "/.*" );

		// Check if the element has a FileList before checking each file
		if ( element.files && element.files.length ) {
			regex = new RegExp( ".?(" + typeParam + ")$", "i" );
			for ( i = 0; i < element.files.length; i++ ) {
				file = element.files[ i ];

				// Grab the mimetype from the loaded file, verify it matches
				if ( !file.type.match( regex ) ) {
					return false;
				}
			}
		}
	}

	// Either return true because we've validated each file, or because the
	// browser does not support element.files and the FileList feature
	return true;
}, $.validator.format( "Please enter a value with a valid mimetype." ) );

( function() {

	function stripHtml( value ) {

		// Remove html tags and space chars
		return value.replace( /<.[^<>]*?>/g, " " ).replace( /&nbsp;|&#160;/gi, " " )

		// Remove punctuation
		.replace( /[.(),;:!?%#$'\"_+=\/\-“”’]*/g, "" );
	}

	$.validator.addMethod( "maxWords", function( value, element, params ) {
		return this.optional( element ) || stripHtml( value ).match( /\b\w+\b/g ).length <= params;
	}, $.validator.format( "Please enter {0} words or less." ) );

	$.validator.addMethod( "minWords", function( value, element, params ) {
		return this.optional( element ) || stripHtml( value ).match( /\b\w+\b/g ).length >= params;
	}, $.validator.format( "Please enter at least {0} words." ) );

	$.validator.addMethod( "rangeWords", function( value, element, params ) {
		var valueStripped = stripHtml( value ),
			regex = /\b\w+\b/g;
		return this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];
	}, $.validator.format( "Please enter between {0} and {1} words." ) );

}() );

$.validator.addMethod( "alphanumeric", function( value, element ) {
	return this.optional( element ) || /^\w+$/i.test( value );
}, "Letters, numbers, and underscores only please" );

/*
 * Dutch bank account numbers (not 'giro' numbers) have 9 digits
 * and pass the '11 check'.
 * We accept the notation with spaces, as that is common.
 * acceptable: 123456789 or 12 34 56 789
 */
$.validator.addMethod( "bankaccountNL", function( value, element ) {
	if ( this.optional( element ) ) {
		return true;
	}
	if ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {
		return false;
	}

	// Now '11 check'
	var account = value.replace( / /g, "" ), // Remove spaces
		sum = 0,
		len = account.length,
		pos, factor, digit;
	for ( pos = 0; pos < len; pos++ ) {
		factor = len - pos;
		digit = account.substring( pos, pos + 1 );
		sum = sum + factor * digit;
	}
	return sum % 11 === 0;
}, "Please specify a valid bank account number" );

$.validator.addMethod( "bankorgiroaccountNL", function( value, element ) {
	return this.optional( element ) ||
			( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||
			( $.validator.methods.giroaccountNL.call( this, value, element ) );
}, "Please specify a valid bank or giro account number" );

/**
 * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.
 *
 * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)
 *
 * Validation is case-insensitive. Please make sure to normalize input yourself.
 *
 * BIC definition in detail:
 * - First 4 characters - bank code (only letters)
 * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)
 * - Next 2 characters - location code (letters and digits)
 *   a. shall not start with '0' or '1'
 *   b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)
 * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)
 */
$.validator.addMethod( "bic", function( value, element ) {
    return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );
}, "Please specify a valid BIC code" );

/*
 * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities
 * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
 *
 * Spanish CIF structure:
 *
 * [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ]
 *
 * Where:
 *
 * T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW]
 * P: 2 characters. Province.
 * N: 5 characters. Secuencial Number within the province.
 * C: 1 character. Control Digit: [0-9A-J].
 *
 * [ T ]: Kind of Organizations. Possible values:
 *
 *   A. Corporations
 *   B. LLCs
 *   C. General partnerships
 *   D. Companies limited partnerships
 *   E. Communities of goods
 *   F. Cooperative Societies
 *   G. Associations
 *   H. Communities of homeowners in horizontal property regime
 *   J. Civil Societies
 *   K. Old format
 *   L. Old format
 *   M. Old format
 *   N. Nonresident entities
 *   P. Local authorities
 *   Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions
 *   R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)
 *   S. Organs of State Administration and regions
 *   V. Agrarian Transformation
 *   W. Permanent establishments of non-resident in Spain
 *
 * [ C ]: Control Digit. It can be a number or a letter depending on T value:
 * [ T ]  -->  [ C ]
 * ------    ----------
 *   A         Number
 *   B         Number
 *   E         Number
 *   H         Number
 *   K         Letter
 *   P         Letter
 *   Q         Letter
 *   S         Letter
 *
 */
$.validator.addMethod( "cifES", function( value, element ) {
	"use strict";

	if ( this.optional( element ) ) {
		return true;
	}

	var cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi );
	var letter  = value.substring( 0, 1 ), // [ T ]
		number  = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]
		control = value.substring( 8, 9 ), // [ C ]
		all_sum = 0,
		even_sum = 0,
		odd_sum = 0,
		i, n,
		control_digit,
		control_letter;

	function isOdd( n ) {
		return n % 2 === 0;
	}

	// Quick format test
	if ( value.length !== 9 || !cifRegEx.test( value ) ) {
		return false;
	}

	for ( i = 0; i < number.length; i++ ) {
		n = parseInt( number[ i ], 10 );

		// Odd positions
		if ( isOdd( i ) ) {

			// Odd positions are multiplied first.
			n *= 2;

			// If the multiplication is bigger than 10 we need to adjust
			odd_sum += n < 10 ? n : n - 9;

		// Even positions
		// Just sum them
		} else {
			even_sum += n;
		}
	}

	all_sum = even_sum + odd_sum;
	control_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString();
	control_digit = parseInt( control_digit, 10 ) > 9 ? "0" : control_digit;
	control_letter = "JABCDEFGHI".substr( control_digit, 1 ).toString();

	// Control must be a digit
	if ( letter.match( /[ABEH]/ ) ) {
		return control === control_digit;

	// Control must be a letter
	} else if ( letter.match( /[KPQS]/ ) ) {
		return control === control_letter;
	}

	// Can be either
	return control === control_digit || control === control_letter;

}, "Please specify a valid CIF number." );

/*
 * Brazillian CNH number (Carteira Nacional de Habilitacao) is the License Driver number.
 * CNH numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.
 */
$.validator.addMethod( "cnhBR", function( value ) {

  // Removing special characters from value
  value = value.replace( /([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "" );

  // Checking value to have 11 digits only
  if ( value.length !== 11 ) {
    return false;
  }

  var sum = 0, dsc = 0, firstChar,
		firstCN, secondCN, i, j, v;

  firstChar = value.charAt( 0 );

  if ( new Array( 12 ).join( firstChar ) === value ) {
    return false;
  }

  // Step 1 - using first Check Number:
  for ( i = 0, j = 9, v = 0; i < 9; ++i, --j ) {
    sum += +( value.charAt( i ) * j );
  }

  firstCN = sum % 11;
  if ( firstCN >= 10 ) {
    firstCN = 0;
    dsc = 2;
  }

  sum = 0;
  for ( i = 0, j = 1, v = 0; i < 9; ++i, ++j ) {
    sum += +( value.charAt( i ) * j );
  }

  secondCN = sum % 11;
  if ( secondCN >= 10 ) {
    secondCN = 0;
  } else {
    secondCN = secondCN - dsc;
  }

  return ( String( firstCN ).concat( secondCN ) === value.substr( -2 ) );

}, "Please specify a valid CNH number" );

/*
 * Brazillian value number (Cadastrado de Pessoas Juridica).
 * value numbers have 14 digits in total: 12 numbers followed by 2 check numbers that are being used for validation.
 */
$.validator.addMethod( "cnpjBR", function( value, element ) {
	"use strict";

	if ( this.optional( element ) ) {
		return true;
	}

	// Removing no number
	value = value.replace( /[^\d]+/g, "" );

	// Checking value to have 14 digits only
	if ( value.length !== 14 ) {
		return false;
	}

	// Elimina values invalidos conhecidos
	if ( value === "00000000000000" ||
		value === "11111111111111" ||
		value === "22222222222222" ||
		value === "33333333333333" ||
		value === "44444444444444" ||
		value === "55555555555555" ||
		value === "66666666666666" ||
		value === "77777777777777" ||
		value === "88888888888888" ||
		value === "99999999999999" ) {
		return false;
	}

	// Valida DVs
	var tamanho = ( value.length - 2 );
	var numeros = value.substring( 0, tamanho );
	var digitos = value.substring( tamanho );
	var soma = 0;
	var pos = tamanho - 7;

	for ( var i = tamanho; i >= 1; i-- ) {
		soma += numeros.charAt( tamanho - i ) * pos--;
		if ( pos < 2 ) {
			pos = 9;
		}
	}

	var resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;

	if ( resultado !== parseInt( digitos.charAt( 0 ), 10 ) ) {
		return false;
	}

	tamanho = tamanho + 1;
	numeros = value.substring( 0, tamanho );
	soma = 0;
	pos = tamanho - 7;

	for ( var il = tamanho; il >= 1; il-- ) {
		soma += numeros.charAt( tamanho - il ) * pos--;
		if ( pos < 2 ) {
			pos = 9;
		}
	}

	resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;

	if ( resultado !== parseInt( digitos.charAt( 1 ), 10 ) ) {
		return false;
	}

	return true;

}, "Please specify a CNPJ value number" );

/*
 * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.
 * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.
 */
$.validator.addMethod( "cpfBR", function( value, element ) {
	"use strict";

	if ( this.optional( element ) ) {
		return true;
	}

	// Removing special characters from value
	value = value.replace( /([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "" );

	// Checking value to have 11 digits only
	if ( value.length !== 11 ) {
		return false;
	}

	var sum = 0,
		firstCN, secondCN, checkResult, i;

	firstCN = parseInt( value.substring( 9, 10 ), 10 );
	secondCN = parseInt( value.substring( 10, 11 ), 10 );

	checkResult = function( sum, cn ) {
		var result = ( sum * 10 ) % 11;
		if ( ( result === 10 ) || ( result === 11 ) ) {
			result = 0;
		}
		return ( result === cn );
	};

	// Checking for dump data
	if ( value === "" ||
		value === "00000000000" ||
		value === "11111111111" ||
		value === "22222222222" ||
		value === "33333333333" ||
		value === "44444444444" ||
		value === "55555555555" ||
		value === "66666666666" ||
		value === "77777777777" ||
		value === "88888888888" ||
		value === "99999999999"
	) {
		return false;
	}

	// Step 1 - using first Check Number:
	for ( i = 1; i <= 9; i++ ) {
		sum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );
	}

	// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:
	if ( checkResult( sum, firstCN ) ) {
		sum = 0;
		for ( i = 1; i <= 10; i++ ) {
			sum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );
		}
		return checkResult( sum, secondCN );
	}
	return false;

}, "Please specify a valid CPF number" );

// https://jqueryvalidation.org/creditcard-method/
// based on https://en.wikipedia.org/wiki/Luhn_algorithm
$.validator.addMethod( "creditcard", function( value, element ) {
	if ( this.optional( element ) ) {
		return "dependency-mismatch";
	}

	// Accept only spaces, digits and dashes
	if ( /[^0-9 \-]+/.test( value ) ) {
		return false;
	}

	var nCheck = 0,
		nDigit = 0,
		bEven = false,
		n, cDigit;

	value = value.replace( /\D/g, "" );

	// Basing min and max length on
	// https://dev.ean.com/general-info/valid-card-types/
	if ( value.length < 13 || value.length > 19 ) {
		return false;
	}

	for ( n = value.length - 1; n >= 0; n-- ) {
		cDigit = value.charAt( n );
		nDigit = parseInt( cDigit, 10 );
		if ( bEven ) {
			if ( ( nDigit *= 2 ) > 9 ) {
				nDigit -= 9;
			}
		}

		nCheck += nDigit;
		bEven = !bEven;
	}

	return ( nCheck % 10 ) === 0;
}, "Please enter a valid credit card number." );

/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
 * Redistributed under the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
 * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
 */
$.validator.addMethod( "creditcardtypes", function( value, element, param ) {
	if ( /[^0-9\-]+/.test( value ) ) {
		return false;
	}

	value = value.replace( /\D/g, "" );

	var validTypes = 0x0000;

	if ( param.mastercard ) {
		validTypes |= 0x0001;
	}
	if ( param.visa ) {
		validTypes |= 0x0002;
	}
	if ( param.amex ) {
		validTypes |= 0x0004;
	}
	if ( param.dinersclub ) {
		validTypes |= 0x0008;
	}
	if ( param.enroute ) {
		validTypes |= 0x0010;
	}
	if ( param.discover ) {
		validTypes |= 0x0020;
	}
	if ( param.jcb ) {
		validTypes |= 0x0040;
	}
	if ( param.unknown ) {
		validTypes |= 0x0080;
	}
	if ( param.all ) {
		validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
	}
	if ( validTypes & 0x0001 && ( /^(5[12345])/.test( value ) || /^(2[234567])/.test( value ) ) ) { // Mastercard
		return value.length === 16;
	}
	if ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa
		return value.length === 16;
	}
	if ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex
		return value.length === 15;
	}
	if ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub
		return value.length === 14;
	}
	if ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute
		return value.length === 15;
	}
	if ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover
		return value.length === 16;
	}
	if ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb
		return value.length === 16;
	}
	if ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb
		return value.length === 15;
	}
	if ( validTypes & 0x0080 ) { // Unknown
		return true;
	}
	return false;
}, "Please enter a valid credit card number." );

/**
 * Validates currencies with any given symbols by @jameslouiz
 * Symbols can be optional or required. Symbols required by default
 *
 * Usage examples:
 *  currency: ["£", false] - Use false for soft currency validation
 *  currency: ["$", false]
 *  currency: ["RM", false] - also works with text based symbols such as "RM" - Malaysia Ringgit etc
 *
 *  <input class="currencyInput" name="currencyInput">
 *
 * Soft symbol checking
 *  currencyInput: {
 *     currency: ["$", false]
 *  }
 *
 * Strict symbol checking (default)
 *  currencyInput: {
 *     currency: "$"
 *     //OR
 *     currency: ["$", true]
 *  }
 *
 * Multiple Symbols
 *  currencyInput: {
 *     currency: "$,£,¢"
 *  }
 */
$.validator.addMethod( "currency", function( value, element, param ) {
    var isParamString = typeof param === "string",
        symbol = isParamString ? param : param[ 0 ],
        soft = isParamString ? true : param[ 1 ],
        regex;

    symbol = symbol.replace( /,/g, "" );
    symbol = soft ? symbol + "]" : symbol + "]?";
    regex = "^[" + symbol + "([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$";
    regex = new RegExp( regex );
    return this.optional( element ) || regex.test( value );

}, "Please specify a valid currency" );

$.validator.addMethod( "dateFA", function( value, element ) {
	return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );
}, $.validator.messages.date );

/**
 * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
 *
 * @example $.validator.methods.date("01/01/1900")
 * @result true
 *
 * @example $.validator.methods.date("01/13/1990")
 * @result false
 *
 * @example $.validator.methods.date("01.01.1900")
 * @result false
 *
 * @example <input name="pippo" class="{dateITA:true}" />
 * @desc Declares an optional input element whose value must be a valid date.
 *
 * @name $.validator.methods.dateITA
 * @type Boolean
 * @cat Plugins/Validate/Methods
 */
$.validator.addMethod( "dateITA", function( value, element ) {
	var check = false,
		re = /^\d{1,2}\/\d{1,2}\/\d{4}$/,
		adata, gg, mm, aaaa, xdata;
	if ( re.test( value ) ) {
		adata = value.split( "/" );
		gg = parseInt( adata[ 0 ], 10 );
		mm = parseInt( adata[ 1 ], 10 );
		aaaa = parseInt( adata[ 2 ], 10 );
		xdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );
		if ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {
			check = true;
		} else {
			check = false;
		}
	} else {
		check = false;
	}
	return this.optional( element ) || check;
}, $.validator.messages.date );

$.validator.addMethod( "dateNL", function( value, element ) {
	return this.optional( element ) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test( value );
}, $.validator.messages.date );

// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept
$.validator.addMethod( "extension", function( value, element, param ) {
	param = typeof param === "string" ? param.replace( /,/g, "|" ) : "png|jpe?g|gif";
	return this.optional( element ) || value.match( new RegExp( "\\.(" + param + ")$", "i" ) );
}, $.validator.format( "Please enter a value with a valid extension." ) );

/**
 * Dutch giro account numbers (not bank numbers) have max 7 digits
 */
$.validator.addMethod( "giroaccountNL", function( value, element ) {
	return this.optional( element ) || /^[0-9]{1,7}$/.test( value );
}, "Please specify a valid giro account number" );

$.validator.addMethod( "greaterThan", function( value, element, param ) {
    var target = $( param );

    if ( this.settings.onfocusout && target.not( ".validate-greaterThan-blur" ).length ) {
        target.addClass( "validate-greaterThan-blur" ).on( "blur.validate-greaterThan", function() {
            $( element ).valid();
        } );
    }

    return value > target.val();
}, "Please enter a greater value." );

$.validator.addMethod( "greaterThanEqual", function( value, element, param ) {
    var target = $( param );

    if ( this.settings.onfocusout && target.not( ".validate-greaterThanEqual-blur" ).length ) {
        target.addClass( "validate-greaterThanEqual-blur" ).on( "blur.validate-greaterThanEqual", function() {
            $( element ).valid();
        } );
    }

    return value >= target.val();
}, "Please enter a greater value." );

/**
 * IBAN is the international bank account number.
 * It has a country - specific format, that is checked here too
 *
 * Validation is case-insensitive. Please make sure to normalize input yourself.
 */
$.validator.addMethod( "iban", function( value, element ) {

	// Some quick simple tests to prevent needless work
	if ( this.optional( element ) ) {
		return true;
	}

	// Remove spaces and to upper case
	var iban = value.replace( / /g, "" ).toUpperCase(),
		ibancheckdigits = "",
		leadingZeroes = true,
		cRest = "",
		cOperator = "",
		countrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;

	// Check for IBAN code length.
	// It contains:
	// country code ISO 3166-1 - two letters,
	// two check digits,
	// Basic Bank Account Number (BBAN) - up to 30 chars
	var minimalIBANlength = 5;
	if ( iban.length < minimalIBANlength ) {
		return false;
	}

	// Check the country code and find the country specific format
	countrycode = iban.substring( 0, 2 );
	bbancountrypatterns = {
		"AL": "\\d{8}[\\dA-Z]{16}",
		"AD": "\\d{8}[\\dA-Z]{12}",
		"AT": "\\d{16}",
		"AZ": "[\\dA-Z]{4}\\d{20}",
		"BE": "\\d{12}",
		"BH": "[A-Z]{4}[\\dA-Z]{14}",
		"BA": "\\d{16}",
		"BR": "\\d{23}[A-Z][\\dA-Z]",
		"BG": "[A-Z]{4}\\d{6}[\\dA-Z]{8}",
		"CR": "\\d{17}",
		"HR": "\\d{17}",
		"CY": "\\d{8}[\\dA-Z]{16}",
		"CZ": "\\d{20}",
		"DK": "\\d{14}",
		"DO": "[A-Z]{4}\\d{20}",
		"EE": "\\d{16}",
		"FO": "\\d{14}",
		"FI": "\\d{14}",
		"FR": "\\d{10}[\\dA-Z]{11}\\d{2}",
		"GE": "[\\dA-Z]{2}\\d{16}",
		"DE": "\\d{18}",
		"GI": "[A-Z]{4}[\\dA-Z]{15}",
		"GR": "\\d{7}[\\dA-Z]{16}",
		"GL": "\\d{14}",
		"GT": "[\\dA-Z]{4}[\\dA-Z]{20}",
		"HU": "\\d{24}",
		"IS": "\\d{22}",
		"IE": "[\\dA-Z]{4}\\d{14}",
		"IL": "\\d{19}",
		"IT": "[A-Z]\\d{10}[\\dA-Z]{12}",
		"KZ": "\\d{3}[\\dA-Z]{13}",
		"KW": "[A-Z]{4}[\\dA-Z]{22}",
		"LV": "[A-Z]{4}[\\dA-Z]{13}",
		"LB": "\\d{4}[\\dA-Z]{20}",
		"LI": "\\d{5}[\\dA-Z]{12}",
		"LT": "\\d{16}",
		"LU": "\\d{3}[\\dA-Z]{13}",
		"MK": "\\d{3}[\\dA-Z]{10}\\d{2}",
		"MT": "[A-Z]{4}\\d{5}[\\dA-Z]{18}",
		"MR": "\\d{23}",
		"MU": "[A-Z]{4}\\d{19}[A-Z]{3}",
		"MC": "\\d{10}[\\dA-Z]{11}\\d{2}",
		"MD": "[\\dA-Z]{2}\\d{18}",
		"ME": "\\d{18}",
		"NL": "[A-Z]{4}\\d{10}",
		"NO": "\\d{11}",
		"PK": "[\\dA-Z]{4}\\d{16}",
		"PS": "[\\dA-Z]{4}\\d{21}",
		"PL": "\\d{24}",
		"PT": "\\d{21}",
		"RO": "[A-Z]{4}[\\dA-Z]{16}",
		"SM": "[A-Z]\\d{10}[\\dA-Z]{12}",
		"SA": "\\d{2}[\\dA-Z]{18}",
		"RS": "\\d{18}",
		"SK": "\\d{20}",
		"SI": "\\d{15}",
		"ES": "\\d{20}",
		"SE": "\\d{20}",
		"CH": "\\d{5}[\\dA-Z]{12}",
		"TN": "\\d{20}",
		"TR": "\\d{5}[\\dA-Z]{17}",
		"AE": "\\d{3}\\d{16}",
		"GB": "[A-Z]{4}\\d{14}",
		"VG": "[\\dA-Z]{4}\\d{16}"
	};

	bbanpattern = bbancountrypatterns[ countrycode ];

	// As new countries will start using IBAN in the
	// future, we only check if the countrycode is known.
	// This prevents false negatives, while almost all
	// false positives introduced by this, will be caught
	// by the checksum validation below anyway.
	// Strict checking should return FALSE for unknown
	// countries.
	if ( typeof bbanpattern !== "undefined" ) {
		ibanregexp = new RegExp( "^[A-Z]{2}\\d{2}" + bbanpattern + "$", "" );
		if ( !( ibanregexp.test( iban ) ) ) {
			return false; // Invalid country specific format
		}
	}

	// Now check the checksum, first convert to digits
	ibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );
	for ( i = 0; i < ibancheck.length; i++ ) {
		charAt = ibancheck.charAt( i );
		if ( charAt !== "0" ) {
			leadingZeroes = false;
		}
		if ( !leadingZeroes ) {
			ibancheckdigits += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf( charAt );
		}
	}

	// Calculate the result of: ibancheckdigits % 97
	for ( p = 0; p < ibancheckdigits.length; p++ ) {
		cChar = ibancheckdigits.charAt( p );
		cOperator = "" + cRest + "" + cChar;
		cRest = cOperator % 97;
	}
	return cRest === 1;
}, "Please specify a valid IBAN" );

$.validator.addMethod( "integer", function( value, element ) {
	return this.optional( element ) || /^-?\d+$/.test( value );
}, "A positive or negative non-decimal number please" );

$.validator.addMethod( "ipv4", function( value, element ) {
	return this.optional( element ) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test( value );
}, "Please enter a valid IP v4 address." );

$.validator.addMethod( "ipv6", function( value, element ) {
	return this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );
}, "Please enter a valid IP v6 address." );

$.validator.addMethod( "lessThan", function( value, element, param ) {
    var target = $( param );

    if ( this.settings.onfocusout && target.not( ".validate-lessThan-blur" ).length ) {
        target.addClass( "validate-lessThan-blur" ).on( "blur.validate-lessThan", function() {
            $( element ).valid();
        } );
    }

    return value < target.val();
}, "Please enter a lesser value." );

$.validator.addMethod( "lessThanEqual", function( value, element, param ) {
    var target = $( param );

    if ( this.settings.onfocusout && target.not( ".validate-lessThanEqual-blur" ).length ) {
        target.addClass( "validate-lessThanEqual-blur" ).on( "blur.validate-lessThanEqual", function() {
            $( element ).valid();
        } );
    }

    return value <= target.val();
}, "Please enter a lesser value." );

$.validator.addMethod( "lettersonly", function( value, element ) {
	return this.optional( element ) || /^[a-z]+$/i.test( value );
}, "Letters only please" );

$.validator.addMethod( "letterswithbasicpunc", function( value, element ) {
	return this.optional( element ) || /^[a-z\-.,()'"\s]+$/i.test( value );
}, "Letters or punctuation only please" );

// Limit the number of files in a FileList.
$.validator.addMethod( "maxfiles", function( value, element, param ) {
	if ( this.optional( element ) ) {
		return true;
	}

	if ( $( element ).attr( "type" ) === "file" ) {
		if ( element.files && element.files.length > param ) {
			return false;
		}
	}

	return true;
}, $.validator.format( "Please select no more than {0} files." ) );

// Limit the size of each individual file in a FileList.
$.validator.addMethod( "maxsize", function( value, element, param ) {
	if ( this.optional( element ) ) {
		return true;
	}

	if ( $( element ).attr( "type" ) === "file" ) {
		if ( element.files && element.files.length ) {
			for ( var i = 0; i < element.files.length; i++ ) {
				if ( element.files[ i ].size > param ) {
					return false;
				}
			}
		}
	}

	return true;
}, $.validator.format( "File size must not exceed {0} bytes each." ) );

// Limit the size of all files in a FileList.
$.validator.addMethod( "maxsizetotal", function( value, element, param ) {
	if ( this.optional( element ) ) {
		return true;
	}

	if ( $( element ).attr( "type" ) === "file" ) {
		if ( element.files && element.files.length ) {
			var totalSize = 0;

			for ( var i = 0; i < element.files.length; i++ ) {
				totalSize += element.files[ i ].size;
				if ( totalSize > param ) {
					return false;
				}
			}
		}
	}

	return true;
}, $.validator.format( "Total size of all files must not exceed {0} bytes." ) );


$.validator.addMethod( "mobileNL", function( value, element ) {
	return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test( value );
}, "Please specify a valid mobile number" );

$.validator.addMethod( "mobileRU", function( phone_number, element ) {
	var ruPhone_number = phone_number.replace( /\(|\)|\s+|-/g, "" );
	return this.optional( element ) || ruPhone_number.length > 9 && /^((\+7|7|8)+([0-9]){10})$/.test( ruPhone_number );
}, "Please specify a valid mobile number" );

/* For UK phone functions, do the following server side processing:
 * Compare original input with this RegEx pattern:
 * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
 * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
 * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
 * A number of very detailed GB telephone number RegEx patterns can also be found at:
 * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
 */
$.validator.addMethod( "mobileUK", function( phone_number, element ) {
	phone_number = phone_number.replace( /\(|\)|\s+|-/g, "" );
	return this.optional( element ) || phone_number.length > 9 &&
		phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/ );
}, "Please specify a valid mobile number" );

$.validator.addMethod( "netmask", function( value, element ) {
    return this.optional( element ) || /^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)/i.test( value );
}, "Please enter a valid netmask." );

/*
 * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish
 * authorities to any foreigner.
 *
 * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal
 * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to
 * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.
 */
$.validator.addMethod( "nieES", function( value, element ) {
	"use strict";

	if ( this.optional( element ) ) {
		return true;
	}

	var nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi );
	var validChars = "TRWAGMYFPDXBNJZSQVHLCKET",
		letter = value.substr( value.length - 1 ).toUpperCase(),
		number;

	value = value.toString().toUpperCase();

	// Quick format test
	if ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) {
		return false;
	}

	// X means same number
	// Y means number + 10000000
	// Z means number + 20000000
	value = value.replace( /^[X]/, "0" )
		.replace( /^[Y]/, "1" )
		.replace( /^[Z]/, "2" );

	number = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 );

	return validChars.charAt( parseInt( number, 10 ) % 23 ) === letter;

}, "Please specify a valid NIE number." );

/*
 * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals
 */
$.validator.addMethod( "nifES", function( value, element ) {
	"use strict";

	if ( this.optional( element ) ) {
		return true;
	}

	value = value.toUpperCase();

	// Basic format test
	if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) {
		return false;
	}

	// Test NIF
	if ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {
		return ( "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );
	}

	// Test specials NIF (starts with K, L or M)
	if ( /^[KLM]{1}/.test( value ) ) {
		return ( value[ 8 ] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 1 ) % 23 ) );
	}

	return false;

}, "Please specify a valid NIF number." );

/*
 * Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies
 */
$.validator.addMethod( "nipPL", function( value ) {
	"use strict";

	value = value.replace( /[^0-9]/g, "" );

	if ( value.length !== 10 ) {
		return false;
	}

	var arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];
	var intSum = 0;
	for ( var i = 0; i < 9; i++ ) {
		intSum += arrSteps[ i ] * value[ i ];
	}
	var int2 = intSum % 11;
	var intControlNr = ( int2 === 10 ) ? 0 : int2;

	return ( intControlNr === parseInt( value[ 9 ], 10 ) );
}, "Please specify a valid NIP number." );

/**
 * Created for project jquery-validation.
 * @Description Brazillian PIS or NIS number (Número de Identificação Social Pis ou Pasep) is the equivalent of a
 * Brazilian tax registration number NIS of PIS numbers have 11 digits in total: 10 numbers followed by 1 check numbers
 * that are being used for validation.
 * @copyright (c) 21/08/2018 13:14, Cleiton da Silva Mendonça
 * @author Cleiton da Silva Mendonça <cleiton.mendonca@gmail.com>
 * @link http://gitlab.com/csmendonca Gitlab of Cleiton da Silva Mendonça
 * @link http://github.com/csmendonca Github of Cleiton da Silva Mendonça
 */
$.validator.addMethod( "nisBR", function( value ) {
	var number;
	var cn;
	var sum = 0;
	var dv;
	var count;
	var multiplier;

	// Removing special characters from value
	value = value.replace( /([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "" );

	// Checking value to have 11 digits only
	if ( value.length !== 11 ) {
		return false;
	}

	//Get check number of value
	cn = parseInt( value.substring( 10, 11 ), 10 );

	//Get number with 10 digits of the value
	number = parseInt( value.substring( 0, 10 ), 10 );

	for ( count = 2; count < 12; count++ ) {
		multiplier = count;
		if ( count === 10 ) {
			multiplier = 2;
		}
		if ( count === 11 ) {
			multiplier = 3;
		}
		sum += ( ( number % 10 ) * multiplier );
		number = parseInt( number / 10, 10 );
	}
	dv = ( sum % 11 );

	if ( dv > 1 ) {
		dv = ( 11 - dv );
	} else {
		dv = 0;
	}

	if ( cn === dv ) {
		return true;
	} else {
		return false;
	}
}, "Please specify a valid NIS/PIS number" );

$.validator.addMethod( "notEqualTo", function( value, element, param ) {
	return this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );
}, "Please enter a different value, values must not be the same." );

$.validator.addMethod( "nowhitespace", function( value, element ) {
	return this.optional( element ) || /^\S+$/i.test( value );
}, "No white space please" );

/**
* Return true if the field value matches the given format RegExp
*
* @example $.validator.methods.pattern("AR1004",element,/^AR\d{4}$/)
* @result true
*
* @example $.validator.methods.pattern("BR1004",element,/^AR\d{4}$/)
* @result false
*
* @name $.validator.methods.pattern
* @type Boolean
* @cat Plugins/Validate/Methods
*/
$.validator.addMethod( "pattern", function( value, element, param ) {
	if ( this.optional( element ) ) {
		return true;
	}
	if ( typeof param === "string" ) {
		param = new RegExp( "^(?:" + param + ")$" );
	}
	return param.test( value );
}, "Invalid format." );

/**
 * Dutch phone numbers have 10 digits (or 11 and start with +31).
 */
$.validator.addMethod( "phoneNL", function( value, element ) {
	return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test( value );
}, "Please specify a valid phone number." );

/**
 * Polish telephone numbers have 9 digits.
 *
 * Mobile phone numbers starts with following digits:
 * 45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79, 88.
 *
 * Fixed-line numbers starts with area codes:
 * 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 29, 32, 33,
 * 34, 41, 42, 43, 44, 46, 48, 52, 54, 55, 56, 58, 59, 61,
 * 62, 63, 65, 67, 68, 71, 74, 75, 76, 77, 81, 82, 83, 84,
 * 85, 86, 87, 89, 91, 94, 95.
 *
 * Ministry of National Defence numbers and VoIP numbers starts with 26 and 39.
 *
 * Excludes intelligent networks (premium rate, shared cost, free phone numbers).
 *
 * Poland National Numbering Plan http://www.itu.int/oth/T02020000A8/en
 */
$.validator.addMethod( "phonePL", function( phone_number, element ) {
	phone_number = phone_number.replace( /\s+/g, "" );
	var regexp = /^(?:(?:(?:\+|00)?48)|(?:\(\+?48\)))?(?:1[2-8]|2[2-69]|3[2-49]|4[1-68]|5[0-9]|6[0-35-9]|[7-8][1-9]|9[145])\d{7}$/;
	return this.optional( element ) || regexp.test( phone_number );
}, "Please specify a valid phone number" );

/* For UK phone functions, do the following server side processing:
 * Compare original input with this RegEx pattern:
 * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
 * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
 * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
 * A number of very detailed GB telephone number RegEx patterns can also be found at:
 * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
 */

// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers
$.validator.addMethod( "phonesUK", function( phone_number, element ) {
	phone_number = phone_number.replace( /\(|\)|\s+|-/g, "" );
	return this.optional( element ) || phone_number.length > 9 &&
		phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/ );
}, "Please specify a valid uk phone number" );

/* For UK phone functions, do the following server side processing:
 * Compare original input with this RegEx pattern:
 * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
 * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
 * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
 * A number of very detailed GB telephone number RegEx patterns can also be found at:
 * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
 */
$.validator.addMethod( "phoneUK", function( phone_number, element ) {
	phone_number = phone_number.replace( /\(|\)|\s+|-/g, "" );
	return this.optional( element ) || phone_number.length > 9 &&
		phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/ );
}, "Please specify a valid phone number" );

/**
 * Matches US phone number format
 *
 * where the area code may not start with 1 and the prefix may not start with 1
 * allows '-' or ' ' as a separator and allows parens around area code
 * some people may want to put a '1' in front of their number
 *
 * 1(212)-999-2345 or
 * 212 999 2344 or
 * 212-999-0983
 *
 * but not
 * 111-123-5434
 * and not
 * 212 123 4567
 */
$.validator.addMethod( "phoneUS", function( phone_number, element ) {
	phone_number = phone_number.replace( /\s+/g, "" );
	return this.optional( element ) || phone_number.length > 9 &&
		phone_number.match( /^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]\d{2}-?\d{4}$/ );
}, "Please specify a valid phone number" );

/*
* Valida CEPs do brasileiros:
*
* Formatos aceitos:
* 99999-999
* 99.999-999
* 99999999
*/
$.validator.addMethod( "postalcodeBR", function( cep_value, element ) {
	return this.optional( element ) || /^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test( cep_value );
}, "Informe um CEP válido." );

/**
 * Matches a valid Canadian Postal Code
 *
 * @example jQuery.validator.methods.postalCodeCA( "H0H 0H0", element )
 * @result true
 *
 * @example jQuery.validator.methods.postalCodeCA( "H0H0H0", element )
 * @result false
 *
 * @name jQuery.validator.methods.postalCodeCA
 * @type Boolean
 * @cat Plugins/Validate/Methods
 */
$.validator.addMethod( "postalCodeCA", function( value, element ) {
	return this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] *\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i.test( value );
}, "Please specify a valid postal code" );

/* Matches Italian postcode (CAP) */
$.validator.addMethod( "postalcodeIT", function( value, element ) {
	return this.optional( element ) || /^\d{5}$/.test( value );
}, "Please specify a valid postal code" );

$.validator.addMethod( "postalcodeNL", function( value, element ) {
	return this.optional( element ) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test( value );
}, "Please specify a valid postal code" );

// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)
$.validator.addMethod( "postcodeUK", function( value, element ) {
	return this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test( value );
}, "Please specify a valid UK postcode" );

/*
 * Lets you say "at least X inputs that match selector Y must be filled."
 *
 * The end result is that neither of these inputs:
 *
 *	<input class="productinfo" name="partnumber">
 *	<input class="productinfo" name="description">
 *
 *	...will validate unless at least one of them is filled.
 *
 * partnumber:	{require_from_group: [1,".productinfo"]},
 * description: {require_from_group: [1,".productinfo"]}
 *
 * options[0]: number of fields that must be filled in the group
 * options[1]: CSS selector that defines the group of conditionally required fields
 */
$.validator.addMethod( "require_from_group", function( value, element, options ) {
	var $fields = $( options[ 1 ], element.form ),
		$fieldsFirst = $fields.eq( 0 ),
		validator = $fieldsFirst.data( "valid_req_grp" ) ? $fieldsFirst.data( "valid_req_grp" ) : $.extend( {}, this ),
		isValid = $fields.filter( function() {
			return validator.elementValue( this );
		} ).length >= options[ 0 ];

	// Store the cloned validator for future validation
	$fieldsFirst.data( "valid_req_grp", validator );

	// If element isn't being validated, run each require_from_group field's validation rules
	if ( !$( element ).data( "being_validated" ) ) {
		$fields.data( "being_validated", true );
		$fields.each( function() {
			validator.element( this );
		} );
		$fields.data( "being_validated", false );
	}
	return isValid;
}, $.validator.format( "Please fill at least {0} of these fields." ) );

/*
 * Lets you say "either at least X inputs that match selector Y must be filled,
 * OR they must all be skipped (left blank)."
 *
 * The end result, is that none of these inputs:
 *
 *	<input class="productinfo" name="partnumber">
 *	<input class="productinfo" name="description">
 *	<input class="productinfo" name="color">
 *
 *	...will validate unless either at least two of them are filled,
 *	OR none of them are.
 *
 * partnumber:	{skip_or_fill_minimum: [2,".productinfo"]},
 * description: {skip_or_fill_minimum: [2,".productinfo"]},
 * color:		{skip_or_fill_minimum: [2,".productinfo"]}
 *
 * options[0]: number of fields that must be filled in the group
 * options[1]: CSS selector that defines the group of conditionally required fields
 *
 */
$.validator.addMethod( "skip_or_fill_minimum", function( value, element, options ) {
	var $fields = $( options[ 1 ], element.form ),
		$fieldsFirst = $fields.eq( 0 ),
		validator = $fieldsFirst.data( "valid_skip" ) ? $fieldsFirst.data( "valid_skip" ) : $.extend( {}, this ),
		numberFilled = $fields.filter( function() {
			return validator.elementValue( this );
		} ).length,
		isValid = numberFilled === 0 || numberFilled >= options[ 0 ];

	// Store the cloned validator for future validation
	$fieldsFirst.data( "valid_skip", validator );

	// If element isn't being validated, run each skip_or_fill_minimum field's validation rules
	if ( !$( element ).data( "being_validated" ) ) {
		$fields.data( "being_validated", true );
		$fields.each( function() {
			validator.element( this );
		} );
		$fields.data( "being_validated", false );
	}
	return isValid;
}, $.validator.format( "Please either skip these fields or fill at least {0} of them." ) );

/* Validates US States and/or Territories by @jdforsythe
 * Can be case insensitive or require capitalization - default is case insensitive
 * Can include US Territories or not - default does not
 * Can include US Military postal abbreviations (AA, AE, AP) - default does not
 *
 * Note: "States" always includes DC (District of Colombia)
 *
 * Usage examples:
 *
 *  This is the default - case insensitive, no territories, no military zones
 *  stateInput: {
 *     caseSensitive: false,
 *     includeTerritories: false,
 *     includeMilitary: false
 *  }
 *
 *  Only allow capital letters, no territories, no military zones
 *  stateInput: {
 *     caseSensitive: false
 *  }
 *
 *  Case insensitive, include territories but not military zones
 *  stateInput: {
 *     includeTerritories: true
 *  }
 *
 *  Only allow capital letters, include territories and military zones
 *  stateInput: {
 *     caseSensitive: true,
 *     includeTerritories: true,
 *     includeMilitary: true
 *  }
 *
 */
$.validator.addMethod( "stateUS", function( value, element, options ) {
	var isDefault = typeof options === "undefined",
		caseSensitive = ( isDefault || typeof options.caseSensitive === "undefined" ) ? false : options.caseSensitive,
		includeTerritories = ( isDefault || typeof options.includeTerritories === "undefined" ) ? false : options.includeTerritories,
		includeMilitary = ( isDefault || typeof options.includeMilitary === "undefined" ) ? false : options.includeMilitary,
		regex;

	if ( !includeTerritories && !includeMilitary ) {
		regex = "^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$";
	} else if ( includeTerritories && includeMilitary ) {
		regex = "^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$";
	} else if ( includeTerritories ) {
		regex = "^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$";
	} else {
		regex = "^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$";
	}

	regex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, "i" );
	return this.optional( element ) || regex.test( value );
}, "Please specify a valid state" );

// TODO check if value starts with <, otherwise don't try stripping anything
$.validator.addMethod( "strippedminlength", function( value, element, param ) {
	return $( value ).text().length >= param;
}, $.validator.format( "Please enter at least {0} characters" ) );

$.validator.addMethod( "time", function( value, element ) {
	return this.optional( element ) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test( value );
}, "Please enter a valid time, between 00:00 and 23:59" );

$.validator.addMethod( "time12h", function( value, element ) {
	return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value );
}, "Please enter a valid time in 12-hour am/pm format" );

// Same as url, but TLD is optional
$.validator.addMethod( "url2", function( value, element ) {
	return this.optional( element ) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( value );
}, $.validator.messages.url );

/**
 * Return true, if the value is a valid vehicle identification number (VIN).
 *
 * Works with all kind of text inputs.
 *
 * @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
 * @desc Declares a required input element whose value must be a valid vehicle identification number.
 *
 * @name $.validator.methods.vinUS
 * @type Boolean
 * @cat Plugins/Validate/Methods
 */
$.validator.addMethod( "vinUS", function( v ) {
	if ( v.length !== 17 ) {
		return false;
	}

	var LL = [ "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ],
		VL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],
		FL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],
		rs = 0,
		i, n, d, f, cd, cdv;

	for ( i = 0; i < 17; i++ ) {
		f = FL[ i ];
		d = v.slice( i, i + 1 );
		if ( i === 8 ) {
			cdv = d;
		}
		if ( !isNaN( d ) ) {
			d *= f;
		} else {
			for ( n = 0; n < LL.length; n++ ) {
				if ( d.toUpperCase() === LL[ n ] ) {
					d = VL[ n ];
					d *= f;
					if ( isNaN( cdv ) && n === 8 ) {
						cdv = LL[ n ];
					}
					break;
				}
			}
		}
		rs += d;
	}
	cd = rs % 11;
	if ( cd === 10 ) {
		cd = "X";
	}
	if ( cd === cdv ) {
		return true;
	}
	return false;
}, "The specified vehicle identification number (VIN) is invalid." );

$.validator.addMethod( "zipcodeUS", function( value, element ) {
	return this.optional( element ) || /^\d{5}(-\d{4})?$/.test( value );
}, "The specified US ZIP Code is invalid" );

$.validator.addMethod( "ziprange", function( value, element ) {
	return this.optional( element ) || /^90[2-5]\d\{2\}-\d{4}$/.test( value );
}, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx" );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: AR (Arabic; العربية)
 */
$.extend( $.validator.messages, {
	required: "هذا الحقل إلزامي",
	remote: "يرجى تصحيح هذا الحقل للمتابعة",
	email: "رجاء إدخال عنوان بريد إلكتروني صحيح",
	url: "رجاء إدخال عنوان موقع إلكتروني صحيح",
	date: "رجاء إدخال تاريخ صحيح",
	dateISO: "رجاء إدخال تاريخ صحيح (ISO)",
	number: "رجاء إدخال عدد بطريقة صحيحة",
	digits: "رجاء إدخال أرقام فقط",
	creditcard: "رجاء إدخال رقم بطاقة ائتمان صحيح",
	equalTo: "رجاء إدخال نفس القيمة",
	extension: "رجاء إدخال ملف بامتداد موافق عليه",
	maxlength: $.validator.format( "الحد الأقصى لعدد الحروف هو {0}" ),
	minlength: $.validator.format( "الحد الأدنى لعدد الحروف هو {0}" ),
	rangelength: $.validator.format( "عدد الحروف يجب أن يكون بين {0} و {1}" ),
	range: $.validator.format( "رجاء إدخال عدد قيمته بين {0} و {1}" ),
	max: $.validator.format( "رجاء إدخال عدد أقل من أو يساوي {0}" ),
	min: $.validator.format( "رجاء إدخال عدد أكبر من أو يساوي {0}" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: Az (Azeri; azərbaycan dili)
 */
$.extend( $.validator.messages, {
	required: "Bu xana mütləq doldurulmalıdır.",
	remote: "Zəhmət olmasa, düzgün məna daxil edin.",
	email: "Zəhmət olmasa, düzgün elektron poçt daxil edin.",
	url: "Zəhmət olmasa, düzgün URL daxil edin.",
	date: "Zəhmət olmasa, düzgün tarix daxil edin.",
	dateISO: "Zəhmət olmasa, düzgün ISO formatlı tarix daxil edin.",
	number: "Zəhmət olmasa, düzgün rəqəm daxil edin.",
	digits: "Zəhmət olmasa, yalnız rəqəm daxil edin.",
	creditcard: "Zəhmət olmasa, düzgün kredit kart nömrəsini daxil edin.",
	equalTo: "Zəhmət olmasa, eyni mənanı bir daha daxil edin.",
	extension: "Zəhmət olmasa, düzgün genişlənməyə malik faylı seçin.",
	maxlength: $.validator.format( "Zəhmət olmasa, {0} simvoldan çox olmayaraq daxil edin." ),
	minlength: $.validator.format( "Zəhmət olmasa, {0} simvoldan az olmayaraq daxil edin." ),
	rangelength: $.validator.format( "Zəhmət olmasa, {0} - {1} aralığında uzunluğa malik simvol daxil edin." ),
	range: $.validator.format( "Zəhmət olmasa, {0} - {1} aralığında rəqəm daxil edin." ),
	max: $.validator.format( "Zəhmət olmasa, {0} və ondan kiçik rəqəm daxil edin." ),
	min: $.validator.format( "Zəhmət olmasa, {0} və ondan böyük rəqəm daxil edin" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: BG (Bulgarian; български език)
 */
$.extend( $.validator.messages, {
	required: "Полето е задължително.",
	remote: "Моля, въведете правилната стойност.",
	email: "Моля, въведете валиден email.",
	url: "Моля, въведете валидно URL.",
	date: "Моля, въведете валидна дата.",
	dateISO: "Моля, въведете валидна дата (ISO).",
	number: "Моля, въведете валиден номер.",
	digits: "Моля, въведете само цифри.",
	creditcard: "Моля, въведете валиден номер на кредитна карта.",
	equalTo: "Моля, въведете същата стойност отново.",
	extension: "Моля, въведете стойност с валидно разширение.",
	maxlength: $.validator.format( "Моля, въведете не повече от {0} символа." ),
	minlength: $.validator.format( "Моля, въведете поне {0} символа." ),
	rangelength: $.validator.format( "Моля, въведете стойност с дължина между {0} и {1} символа." ),
	range: $.validator.format( "Моля, въведете стойност между {0} и {1}." ),
	max: $.validator.format( "Моля, въведете стойност по-малка или равна на {0}." ),
	min: $.validator.format( "Моля, въведете стойност по-голяма или равна на {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: bn_BD (Bengali, Bangladesh)
 */
$.extend( $.validator.messages, {
	required: "এই তথ্যটি আবশ্যক।",
	remote: "এই তথ্যটি ঠিক করুন।",
	email: "অনুগ্রহ করে একটি সঠিক মেইল ঠিকানা লিখুন।",
	url: "অনুগ্রহ করে একটি সঠিক লিঙ্ক দিন।",
	date: "তারিখ সঠিক নয়।",
	dateISO: "অনুগ্রহ করে একটি সঠিক (ISO) তারিখ লিখুন।",
	number: "অনুগ্রহ করে একটি সঠিক নম্বর লিখুন।",
	digits: "এখানে শুধু সংখ্যা ব্যবহার করা যাবে।",
	creditcard: "অনুগ্রহ করে একটি ক্রেডিট কার্ডের সঠিক নম্বর লিখুন।",
	equalTo: "একই মান আবার লিখুন।",
	extension: "সঠিক ধরনের ফাইল আপলোড করুন।",
	maxlength: $.validator.format( "{0}টির বেশি অক্ষর লেখা যাবে না।" ),
	minlength: $.validator.format( "{0}টির কম অক্ষর লেখা যাবে না।" ),
	rangelength: $.validator.format( "{0} থেকে {1} টি অক্ষর সম্বলিত মান লিখুন।" ),
	range: $.validator.format( "{0} থেকে {1} এর মধ্যে একটি মান ব্যবহার করুন।" ),
	max: $.validator.format( "অনুগ্রহ করে {0} বা তার চাইতে কম মান ব্যবহার করুন।" ),
	min: $.validator.format( "অনুগ্রহ করে {0} বা তার চাইতে বেশি মান ব্যবহার করুন।" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: CA (Catalan; català)
 */
$.extend( $.validator.messages, {
	required: "Aquest camp és obligatori.",
	remote: "Si us plau, omple aquest camp.",
	email: "Si us plau, escriu una adreça de correu-e vàlida",
	url: "Si us plau, escriu una URL vàlida.",
	date: "Si us plau, escriu una data vàlida.",
	dateISO: "Si us plau, escriu una data (ISO) vàlida.",
	number: "Si us plau, escriu un número enter vàlid.",
	digits: "Si us plau, escriu només dígits.",
	creditcard: "Si us plau, escriu un número de tarjeta vàlid.",
	equalTo: "Si us plau, escriu el mateix valor de nou.",
	extension: "Si us plau, escriu un valor amb una extensió acceptada.",
	maxlength: $.validator.format( "Si us plau, no escriguis més de {0} caracters." ),
	minlength: $.validator.format( "Si us plau, no escriguis menys de {0} caracters." ),
	rangelength: $.validator.format( "Si us plau, escriu un valor entre {0} i {1} caracters." ),
	range: $.validator.format( "Si us plau, escriu un valor entre {0} i {1}." ),
	max: $.validator.format( "Si us plau, escriu un valor menor o igual a {0}." ),
	min: $.validator.format( "Si us plau, escriu un valor major o igual a {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: CS (Czech; čeština, český jazyk)
 */
$.extend( $.validator.messages, {
	required: "Tento údaj je povinný.",
	remote: "Prosím, opravte tento údaj.",
	email: "Prosím, zadejte platný e-mail.",
	url: "Prosím, zadejte platné URL.",
	date: "Prosím, zadejte platné datum.",
	dateISO: "Prosím, zadejte platné datum (ISO).",
	number: "Prosím, zadejte číslo.",
	digits: "Prosím, zadávejte pouze číslice.",
	creditcard: "Prosím, zadejte číslo kreditní karty.",
	equalTo: "Prosím, zadejte znovu stejnou hodnotu.",
	extension: "Prosím, zadejte soubor se správnou příponou.",
	maxlength: $.validator.format( "Prosím, zadejte nejvíce {0} znaků." ),
	minlength: $.validator.format( "Prosím, zadejte nejméně {0} znaků." ),
	rangelength: $.validator.format( "Prosím, zadejte od {0} do {1} znaků." ),
	range: $.validator.format( "Prosím, zadejte hodnotu od {0} do {1}." ),
	max: $.validator.format( "Prosím, zadejte hodnotu menší nebo rovnu {0}." ),
	min: $.validator.format( "Prosím, zadejte hodnotu větší nebo rovnu {0}." ),
	step: $.validator.format( "Musí být násobkem čísla {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: DA (Danish; dansk)
 */
$.extend( $.validator.messages, {
	required: "Dette felt er påkrævet.",
	remote: "Ret venligst dette felt",
	email: "Indtast en gyldig email-adresse.",
	url: "Indtast en gyldig URL.",
	date: "Indtast en gyldig dato.",
	number: "Indtast et tal.",
	digits: "Indtast kun cifre.",
	creditcard: "Indtast et gyldigt kreditkortnummer.",
	equalTo: "Indtast den samme værdi igen.",
	time: "Angiv en gyldig tid mellem kl. 00:00 og 23:59.",
	ipv4: "Angiv venligst en gyldig IPv4-adresse.",
	ipv6: "Angiv venligst en gyldig IPv6-adresse.",
	require_from_group:  $.validator.format( "Angiv mindst {0} af disse felter." ),
	extension: "Indtast venligst en værdi med en gyldig endelse",
	pattern: "Ugyldigt format",
	lettersonly: "Angiv venligst kun bogstaver.",
	nowhitespace: "Må ikke indholde mellemrum",
	maxlength: $.validator.format( "Indtast højst {0} tegn." ),
	minlength: $.validator.format( "Indtast mindst {0} tegn." ),
	rangelength: $.validator.format( "Indtast mindst {0} og højst {1} tegn." ),
	range: $.validator.format( "Angiv en værdi mellem {0} og {1}." ),
	max: $.validator.format( "Angiv en værdi der højst er {0}." ),
	min: $.validator.format( "Angiv en værdi der mindst er {0}." ),
	minWords: $.validator.format( "Indtast venligst mindst {0} ord" ),
	maxWords:  $.validator.format( "Indtast venligst højst {0} ord" ),
	step: $.validator.format( "Angiv en værdi gange {0}." ),
	notEqualTo: "Angiv en anden værdi, værdierne må ikke være det samme.",
	integer: "Angiv et ikke-decimaltal, der er positivt eller negativt."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: DE (German, Deutsch)
 */
$.extend( $.validator.messages, {
	required: "Dieses Feld ist ein Pflichtfeld.",
	maxlength: $.validator.format( "Geben Sie bitte maximal {0} Zeichen ein." ),
	minlength: $.validator.format( "Geben Sie bitte mindestens {0} Zeichen ein." ),
	rangelength: $.validator.format( "Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein." ),
	email: "Geben Sie bitte eine gültige E-Mail-Adresse ein.",
	url: "Geben Sie bitte eine gültige URL ein.",
	date: "Geben Sie bitte ein gültiges Datum ein.",
	number: "Geben Sie bitte eine Nummer ein.",
	digits: "Geben Sie bitte nur Ziffern ein.",
	equalTo: "Wiederholen Sie bitte denselben Wert.",
	range: $.validator.format( "Geben Sie bitte einen Wert zwischen {0} und {1} ein." ),
	max: $.validator.format( "Geben Sie bitte einen Wert kleiner oder gleich {0} ein." ),
	min: $.validator.format( "Geben Sie bitte einen Wert größer oder gleich {0} ein." ),
	creditcard: "Geben Sie bitte eine gültige Kreditkarten-Nummer ein.",
	remote: "Korrigieren Sie bitte dieses Feld.",
	dateISO: "Geben Sie bitte ein gültiges Datum ein (ISO-Format).",
	step: $.validator.format( "Geben Sie bitte ein Vielfaches von {0} ein." ),
	maxWords: $.validator.format( "Geben Sie bitte {0} Wörter oder weniger ein." ),
	minWords: $.validator.format( "Geben Sie bitte mindestens {0} Wörter ein." ),
	rangeWords: $.validator.format( "Geben Sie bitte zwischen {0} und {1} Wörtern ein." ),
	accept: "Geben Sie bitte einen Wert mit einem gültigen MIME-Typ ein.",
	alphanumeric: "Geben Sie bitte nur Buchstaben (keine Umlaute), Zahlen oder Unterstriche ein.",
	bankaccountNL: "Geben Sie bitte eine gültige Kontonummer ein.",
	bankorgiroaccountNL: "Geben Sie bitte eine gültige Bank- oder Girokontonummer ein.",
	bic: "Geben Sie bitte einen gültigen BIC-Code ein.",
	cifES: "Geben Sie bitte eine gültige CIF-Nummer ein.",
	cpfBR: "Geben Sie bitte eine gültige CPF-Nummer ein.",
	creditcardtypes: "Geben Sie bitte eine gültige Kreditkarten-Nummer ein.",
	currency: "Geben Sie bitte eine gültige Währung ein.",
	extension: "Geben Sie bitte einen Wert mit einer gültigen Erweiterung ein.",
	giroaccountNL: "Geben Sie bitte eine gültige Girokontonummer ein.",
	iban: "Geben Sie bitte eine gültige IBAN ein.",
	integer:  "Geben Sie bitte eine positive oder negative Nicht-Dezimalzahl ein.",
	ipv4: "Geben Sie bitte eine gültige IPv4-Adresse ein.",
	ipv6: "Geben Sie bitte eine gültige IPv6-Adresse ein.",
	lettersonly: "Geben Sie bitte nur Buchstaben ein.",
	letterswithbasicpunc: "Geben Sie bitte nur Buchstaben oder Interpunktion ein.",
	mobileNL: "Geben Sie bitte eine gültige Handynummer ein.",
	mobileUK: "Geben Sie bitte eine gültige Handynummer ein.",
	netmask:  "Geben Sie bitte eine gültige Netzmaske ein.",
	nieES: "Geben Sie bitte eine gültige NIE-Nummer ein.",
	nifES: "Geben Sie bitte eine gültige NIF-Nummer ein.",
	nipPL: "Geben Sie bitte eine gültige NIP-Nummer ein.",
	notEqualTo: "Geben Sie bitte einen anderen Wert ein. Die Werte dürfen nicht gleich sein.",
	nowhitespace: "Kein Leerzeichen bitte.",
	pattern: "Ungültiges Format.",
	phoneNL: "Geben Sie bitte eine gültige Telefonnummer ein.",
	phonesUK: "Geben Sie bitte eine gültige britische Telefonnummer ein.",
	phoneUK: "Geben Sie bitte eine gültige Telefonnummer ein.",
	phoneUS: "Geben Sie bitte eine gültige Telefonnummer ein.",
	postalcodeBR: "Geben Sie bitte eine gültige brasilianische Postleitzahl ein.",
	postalCodeCA: "Geben Sie bitte eine gültige kanadische Postleitzahl ein.",
	postalcodeIT: "Geben Sie bitte eine gültige italienische Postleitzahl ein.",
	postalcodeNL: "Geben Sie bitte eine gültige niederländische Postleitzahl ein.",
	postcodeUK: "Geben Sie bitte eine gültige britische Postleitzahl ein.",
	require_from_group: $.validator.format( "Füllen Sie bitte mindestens {0} dieser Felder aus." ),
	skip_or_fill_minimum: $.validator.format( "Überspringen Sie bitte diese Felder oder füllen Sie mindestens {0} von ihnen aus." ),
	stateUS: "Geben Sie bitte einen gültigen US-Bundesstaat ein.",
	strippedminlength: $.validator.format( "Geben Sie bitte mindestens {0} Zeichen ein." ),
	time: "Geben Sie bitte eine gültige Uhrzeit zwischen 00:00 und 23:59 ein.",
	time12h: "Geben Sie bitte eine gültige Uhrzeit im 12-Stunden-Format ein.",
	vinUS: "Die angegebene Fahrzeugidentifikationsnummer (VIN) ist ungültig.",
	zipcodeUS: "Die angegebene US-Postleitzahl ist ungültig.",
	ziprange: "Ihre Postleitzahl muss im Bereich 902xx-xxxx bis 905xx-xxxx liegen."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: EL (Greek; ελληνικά)
 */
$.extend( $.validator.messages, {
	required: "Αυτό το πεδίο είναι υποχρεωτικό.",
	remote: "Παρακαλώ διορθώστε αυτό το πεδίο.",
	email: "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.",
	url: "Παρακαλώ εισάγετε ένα έγκυρο URL.",
	date: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.",
	dateISO: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).",
	number: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό.",
	digits: "Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.",
	creditcard: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.",
	equalTo: "Παρακαλώ εισάγετε την ίδια τιμή ξανά.",
	extension: "Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.",
	maxlength: $.validator.format( "Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες." ),
	minlength: $.validator.format( "Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες." ),
	rangelength: $.validator.format( "Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων." ),
	range: $.validator.format( "Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}." ),
	max: $.validator.format( "Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}." ),
	min: $.validator.format( "Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ES (Spanish; Español)
 */
$.extend( $.validator.messages, {
	required: "Este campo es obligatorio.",
	remote: "Por favor, rellena este campo.",
	email: "Por favor, escribe una dirección de correo válida.",
	url: "Por favor, escribe una URL válida.",
	date: "Por favor, escribe una fecha válida.",
	dateISO: "Por favor, escribe una fecha (ISO) válida.",
	number: "Por favor, escribe un número válido.",
	digits: "Por favor, escribe sólo dígitos.",
	creditcard: "Por favor, escribe un número de tarjeta válido.",
	equalTo: "Por favor, escribe el mismo valor de nuevo.",
	extension: "Por favor, escribe un valor con una extensión aceptada.",
	maxlength: $.validator.format( "Por favor, no escribas más de {0} caracteres." ),
	minlength: $.validator.format( "Por favor, no escribas menos de {0} caracteres." ),
	rangelength: $.validator.format( "Por favor, escribe un valor entre {0} y {1} caracteres." ),
	range: $.validator.format( "Por favor, escribe un valor entre {0} y {1}." ),
	max: $.validator.format( "Por favor, escribe un valor menor o igual a {0}." ),
	min: $.validator.format( "Por favor, escribe un valor mayor o igual a {0}." ),
	nifES: "Por favor, escribe un NIF válido.",
	nieES: "Por favor, escribe un NIE válido.",
	cifES: "Por favor, escribe un CIF válido."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ES (Spanish; Español)
 * Region: AR (Argentina)
 */
$.extend( $.validator.messages, {
	required: "Este campo es obligatorio.",
	remote: "Por favor, completá este campo.",
	email: "Por favor, escribí una dirección de correo válida.",
	url: "Por favor, escribí una URL válida.",
	date: "Por favor, escribí una fecha válida.",
	dateISO: "Por favor, escribí una fecha (ISO) válida.",
	number: "Por favor, escribí un número entero válido.",
	digits: "Por favor, escribí sólo dígitos.",
	creditcard: "Por favor, escribí un número de tarjeta válido.",
	equalTo: "Por favor, escribí el mismo valor de nuevo.",
	extension: "Por favor, escribí un valor con una extensión aceptada.",
	maxlength: $.validator.format( "Por favor, no escribas más de {0} caracteres." ),
	minlength: $.validator.format( "Por favor, no escribas menos de {0} caracteres." ),
	rangelength: $.validator.format( "Por favor, escribí un valor entre {0} y {1} caracteres." ),
	range: $.validator.format( "Por favor, escribí un valor entre {0} y {1}." ),
	max: $.validator.format( "Por favor, escribí un valor menor o igual a {0}." ),
	min: $.validator.format( "Por favor, escribí un valor mayor o igual a {0}." ),
	nifES: "Por favor, escribí un NIF válido.",
	nieES: "Por favor, escribí un NIE válido.",
	cifES: "Por favor, escribí un CIF válido."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ES (Spanish; Español)
 * Region: PE (Perú)
 */
$.extend( $.validator.messages, {
	required: "Este campo es obligatorio.",
	remote: "Por favor, llene este campo.",
	email: "Por favor, escriba un correo electrónico válido.",
	url: "Por favor, escriba una URL válida.",
	date: "Por favor, escriba una fecha válida.",
	dateISO: "Por favor, escriba una fecha (ISO) válida.",
	number: "Por favor, escriba un número válido.",
	digits: "Por favor, escriba sólo dígitos.",
	creditcard: "Por favor, escriba un número de tarjeta válido.",
	equalTo: "Por favor, escriba el mismo valor de nuevo.",
	extension: "Por favor, escriba un valor con una extensión permitida.",
	maxlength: $.validator.format( "Por favor, no escriba más de {0} caracteres." ),
	minlength: $.validator.format( "Por favor, no escriba menos de {0} caracteres." ),
	rangelength: $.validator.format( "Por favor, escriba un valor entre {0} y {1} caracteres." ),
	range: $.validator.format( "Por favor, escriba un valor entre {0} y {1}." ),
	max: $.validator.format( "Por favor, escriba un valor menor o igual a {0}." ),
	min: $.validator.format( "Por favor, escriba un valor mayor o igual a {0}." ),
	nifES: "Por favor, escriba un NIF válido.",
	nieES: "Por favor, escriba un NIE válido.",
	cifES: "Por favor, escriba un CIF válido."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ET (Estonian; eesti, eesti keel)
 */
$.extend( $.validator.messages, {
	required: "See väli peab olema täidetud.",
	maxlength: $.validator.format( "Palun sisestage vähem kui {0} tähemärki." ),
	minlength: $.validator.format( "Palun sisestage vähemalt {0} tähemärki." ),
	rangelength: $.validator.format( "Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki." ),
	email: "Palun sisestage korrektne e-maili aadress.",
	url: "Palun sisestage korrektne URL.",
	date: "Palun sisestage korrektne kuupäev.",
	dateISO: "Palun sisestage korrektne kuupäev (YYYY-MM-DD).",
	number: "Palun sisestage korrektne number.",
	digits: "Palun sisestage ainult numbreid.",
	equalTo: "Palun sisestage sama väärtus uuesti.",
	range: $.validator.format( "Palun sisestage väärtus vahemikus {0} kuni {1}." ),
	max: $.validator.format( "Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}." ),
	min: $.validator.format( "Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}." ),
	creditcard: "Palun sisestage korrektne krediitkaardi number."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: EU (Basque; euskara, euskera)
 */
$.extend( $.validator.messages, {
	required: "Eremu hau beharrezkoa da.",
	remote: "Mesedez, bete eremu hau.",
	email: "Mesedez, idatzi baliozko posta helbide bat.",
	url: "Mesedez, idatzi baliozko URL bat.",
	date: "Mesedez, idatzi baliozko data bat.",
	dateISO: "Mesedez, idatzi baliozko (ISO) data bat.",
	number: "Mesedez, idatzi baliozko zenbaki oso bat.",
	digits: "Mesedez, idatzi digituak soilik.",
	creditcard: "Mesedez, idatzi baliozko txartel zenbaki bat.",
	equalTo: "Mesedez, idatzi berdina berriro ere.",
	extension: "Mesedez, idatzi onartutako luzapena duen balio bat.",
	maxlength: $.validator.format( "Mesedez, ez idatzi {0} karaktere baino gehiago." ),
	minlength: $.validator.format( "Mesedez, ez idatzi {0} karaktere baino gutxiago." ),
	rangelength: $.validator.format( "Mesedez, idatzi {0} eta {1} karaktere arteko balio bat." ),
	range: $.validator.format( "Mesedez, idatzi {0} eta {1} arteko balio bat." ),
	max: $.validator.format( "Mesedez, idatzi {0} edo txikiagoa den balio bat." ),
	min: $.validator.format( "Mesedez, idatzi {0} edo handiagoa den balio bat." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: FA (Persian; فارسی)
 */
$.extend( $.validator.messages, {
	required: "تکمیل این فیلد اجباری است.",
	remote: "لطفا این فیلد را تصحیح کنید.",
	email: "لطفا یک ایمیل صحیح وارد کنید.",
	url: "لطفا آدرس صحیح وارد کنید.",
	date: "لطفا تاریخ صحیح وارد کنید.",
	dateFA: "لطفا یک تاریخ صحیح وارد کنید.",
	dateISO: "لطفا تاریخ صحیح وارد کنید (ISO).",
	number: "لطفا عدد صحیح وارد کنید.",
	digits: "لطفا تنها رقم وارد کنید.",
	creditcard: "لطفا کریدیت کارت صحیح وارد کنید.",
	equalTo: "لطفا مقدار برابری وارد کنید.",
	extension: "لطفا مقداری وارد کنید که",
	alphanumeric: "لطفا مقدار را عدد (انگلیسی) وارد کنید.",
	maxlength: $.validator.format( "لطفا بیشتر از {0} حرف وارد نکنید." ),
	minlength: $.validator.format( "لطفا کمتر از {0} حرف وارد نکنید." ),
	rangelength: $.validator.format( "لطفا مقداری بین {0} تا {1} حرف وارد کنید." ),
	range: $.validator.format( "لطفا مقداری بین {0} تا {1} حرف وارد کنید." ),
	max: $.validator.format( "لطفا مقداری کمتر از {0} وارد کنید." ),
	min: $.validator.format( "لطفا مقداری بیشتر از {0} وارد کنید." ),
	minWords: $.validator.format( "لطفا حداقل {0} کلمه وارد کنید." ),
	maxWords: $.validator.format( "لطفا حداکثر {0} کلمه وارد کنید." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: FI (Finnish; suomi, suomen kieli)
 */
$.extend( $.validator.messages, {
	required: "T&auml;m&auml; kentt&auml; on pakollinen.",
	email: "Sy&ouml;t&auml; oikea s&auml;hk&ouml;postiosoite.",
	url: "Sy&ouml;t&auml; oikea URL-osoite.",
	date: "Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml;.",
	dateISO: "Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml; muodossa VVVV-KK-PP.",
	number: "Sy&ouml;t&auml; luku.",
	creditcard: "Sy&ouml;t&auml; voimassa oleva luottokorttinumero.",
	digits: "Sy&ouml;t&auml; pelk&auml;st&auml;&auml;n numeroita.",
	equalTo: "Sy&ouml;t&auml; sama arvo uudestaan.",
	maxlength: $.validator.format( "Voit sy&ouml;tt&auml;&auml; enint&auml;&auml;n {0} merkki&auml;." ),
	minlength: $.validator.format( "V&auml;hint&auml;&auml;n {0} merkki&auml;." ),
	rangelength: $.validator.format( "Sy&ouml;t&auml; v&auml;hint&auml;&auml;n {0} ja enint&auml;&auml;n {1} merkki&auml;." ),
	range: $.validator.format( "Sy&ouml;t&auml; arvo v&auml;lilt&auml; {0}&ndash;{1}." ),
	max: $.validator.format( "Sy&ouml;t&auml; arvo, joka on enint&auml;&auml;n {0}." ),
	min: $.validator.format( "Sy&ouml;t&auml; arvo, joka on v&auml;hint&auml;&auml;n {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: FR (French; français)
 */
$.extend( $.validator.messages, {
	required: "Ce champ est obligatoire.",
	remote: "Veuillez corriger ce champ.",
	email: "Veuillez fournir une adresse électronique valide.",
	url: "Veuillez fournir une adresse URL valide.",
	date: "Veuillez fournir une date valide.",
	dateISO: "Veuillez fournir une date valide (ISO).",
	number: "Veuillez fournir un numéro valide.",
	digits: "Veuillez fournir seulement des chiffres.",
	creditcard: "Veuillez fournir un numéro de carte de crédit valide.",
	equalTo: "Veuillez fournir encore la même valeur.",
	notEqualTo: "Veuillez fournir une valeur différente, les valeurs ne doivent pas être identiques.",
	extension: "Veuillez fournir une valeur avec une extension valide.",
	maxlength: $.validator.format( "Veuillez fournir au plus {0} caractères." ),
	minlength: $.validator.format( "Veuillez fournir au moins {0} caractères." ),
	rangelength: $.validator.format( "Veuillez fournir une valeur qui contient entre {0} et {1} caractères." ),
	range: $.validator.format( "Veuillez fournir une valeur entre {0} et {1}." ),
	max: $.validator.format( "Veuillez fournir une valeur inférieure ou égale à {0}." ),
	min: $.validator.format( "Veuillez fournir une valeur supérieure ou égale à {0}." ),
	step: $.validator.format( "Veuillez fournir une valeur multiple de {0}." ),
	maxWords: $.validator.format( "Veuillez fournir au plus {0} mots." ),
	minWords: $.validator.format( "Veuillez fournir au moins {0} mots." ),
	rangeWords: $.validator.format( "Veuillez fournir entre {0} et {1} mots." ),
	letterswithbasicpunc: "Veuillez fournir seulement des lettres et des signes de ponctuation.",
	alphanumeric: "Veuillez fournir seulement des lettres, nombres, espaces et soulignages.",
	lettersonly: "Veuillez fournir seulement des lettres.",
	nowhitespace: "Veuillez ne pas inscrire d'espaces blancs.",
	ziprange: "Veuillez fournir un code postal entre 902xx-xxxx et 905-xx-xxxx.",
	integer: "Veuillez fournir un nombre non décimal qui est positif ou négatif.",
	vinUS: "Veuillez fournir un numéro d'identification du véhicule (VIN).",
	dateITA: "Veuillez fournir une date valide.",
	time: "Veuillez fournir une heure valide entre 00:00 et 23:59.",
	phoneUS: "Veuillez fournir un numéro de téléphone valide.",
	phoneUK: "Veuillez fournir un numéro de téléphone valide.",
	mobileUK: "Veuillez fournir un numéro de téléphone mobile valide.",
	strippedminlength: $.validator.format( "Veuillez fournir au moins {0} caractères." ),
	email2: "Veuillez fournir une adresse électronique valide.",
	url2: "Veuillez fournir une adresse URL valide.",
	creditcardtypes: "Veuillez fournir un numéro de carte de crédit valide.",
	ipv4: "Veuillez fournir une adresse IP v4 valide.",
	ipv6: "Veuillez fournir une adresse IP v6 valide.",
	require_from_group: $.validator.format( "Veuillez fournir au moins {0} de ces champs." ),
	nifES: "Veuillez fournir un numéro NIF valide.",
	nieES: "Veuillez fournir un numéro NIE valide.",
	cifES: "Veuillez fournir un numéro CIF valide.",
	postalCodeCA: "Veuillez fournir un code postal valide."
} );

/**
 * @author  @tatocaster <kutaliatato@gmail.com>
 * Translated default messages for the jQuery validation plugin.
 * Locale: GE (Georgian; ქართული)
 */
$.extend( $.validator.messages, {
	required: "ეს ველი სავალდებულოა",
	remote: "გთხოვთ შეასწოროთ.",
	email: "გთხოვთ შეიყვანოთ სწორი ფორმატით.",
	url: "გთხოვთ შეიყვანოთ სწორი ფორმატით.",
	date: "გთხოვთ შეიყვანოთ სწორი თარიღი.",
	dateISO: "გთხოვთ შეიყვანოთ სწორი ფორმატით (ISO).",
	number: "გთხოვთ შეიყვანოთ რიცხვი.",
	digits: "დაშვებულია მხოლოდ ციფრები.",
	creditcard: "გთხოვთ შეიყვანოთ სწორი ფორმატის ბარათის კოდი.",
	equalTo: "გთხოვთ შეიყვანოთ იგივე მნიშვნელობა.",
	maxlength: $.validator.format( "გთხოვთ შეიყვანოთ არა უმეტეს {0} სიმბოლოსი." ),
	minlength: $.validator.format( "შეიყვანეთ მინიმუმ {0} სიმბოლო." ),
	rangelength: $.validator.format( "გთხოვთ შეიყვანოთ {0} -დან {1} -მდე რაოდენობის სიმბოლოები." ),
	range: $.validator.format( "შეიყვანეთ {0} -სა {1} -ს შორის." ),
	max: $.validator.format( "გთხოვთ შეიყვანოთ მნიშვნელობა ნაკლები ან ტოლი {0} -ს." ),
	min: $.validator.format( "გთხოვთ შეიყვანოთ მნიშვნელობა მეტი ან ტოლი {0} -ს." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: GL (Galician; Galego)
 */
( function( $ ) {
	$.extend( $.validator.messages, {
		required: "Este campo é obrigatorio.",
		remote: "Por favor, cubre este campo.",
		email: "Por favor, escribe unha dirección de correo válida.",
		url: "Por favor, escribe unha URL válida.",
		date: "Por favor, escribe unha data válida.",
		dateISO: "Por favor, escribe unha data (ISO) válida.",
		number: "Por favor, escribe un número válido.",
		digits: "Por favor, escribe só díxitos.",
		creditcard: "Por favor, escribe un número de tarxeta válido.",
		equalTo: "Por favor, escribe o mesmo valor de novo.",
		extension: "Por favor, escribe un valor cunha extensión aceptada.",
		maxlength: $.validator.format( "Por favor, non escribas máis de {0} caracteres." ),
		minlength: $.validator.format( "Por favor, non escribas menos de {0} caracteres." ),
		rangelength: $.validator.format( "Por favor, escribe un valor entre {0} e {1} caracteres." ),
		range: $.validator.format( "Por favor, escribe un valor entre {0} e {1}." ),
		max: $.validator.format( "Por favor, escribe un valor menor ou igual a {0}." ),
		min: $.validator.format( "Por favor, escribe un valor maior ou igual a {0}." ),
		nifES: "Por favor, escribe un NIF válido.",
		nieES: "Por favor, escribe un NIE válido.",
		cifES: "Por favor, escribe un CIF válido."
	} );
}( jQuery ) );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: HE (Hebrew; עברית)
 */
$.extend( $.validator.messages, {
	required: "השדה הזה הינו שדה חובה",
	remote: "נא לתקן שדה זה",
	email: "נא למלא כתובת דוא\"ל חוקית",
	url: "נא למלא כתובת אינטרנט חוקית",
	date: "נא למלא תאריך חוקי",
	dateISO: "נא למלא תאריך חוקי (ISO)",
	number: "נא למלא מספר",
	digits: "נא למלא רק מספרים",
	creditcard: "נא למלא מספר כרטיס אשראי חוקי",
	equalTo: "נא למלא את אותו ערך שוב",
	extension: "נא למלא ערך עם סיומת חוקית",
	maxlength: $.validator.format( ".נא לא למלא יותר מ- {0} תווים" ),
	minlength: $.validator.format( "נא למלא לפחות {0} תווים" ),
	rangelength: $.validator.format( "נא למלא ערך בין {0} ל- {1} תווים" ),
	range: $.validator.format( "נא למלא ערך בין {0} ל- {1}" ),
	max: $.validator.format( "נא למלא ערך קטן או שווה ל- {0}" ),
	min: $.validator.format( "נא למלא ערך גדול או שווה ל- {0}" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: HR (Croatia; hrvatski jezik)
 */
$.extend( $.validator.messages, {
	required: "Ovo polje je obavezno.",
	remote: "Ovo polje treba popraviti.",
	email: "Unesite ispravnu e-mail adresu.",
	url: "Unesite ispravan URL.",
	date: "Unesite ispravan datum.",
	dateISO: "Unesite ispravan datum (ISO).",
	number: "Unesite ispravan broj.",
	digits: "Unesite samo brojeve.",
	creditcard: "Unesite ispravan broj kreditne kartice.",
	equalTo: "Unesite ponovo istu vrijednost.",
	extension: "Unesite vrijednost sa ispravnom ekstenzijom.",
	maxlength: $.validator.format( "Maksimalni broj znakova je {0} ." ),
	minlength: $.validator.format( "Minimalni broj znakova je {0} ." ),
	rangelength: $.validator.format( "Unesite vrijednost između {0} i {1} znakova." ),
	range: $.validator.format( "Unesite vrijednost između {0} i {1}." ),
	max: $.validator.format( "Unesite vrijednost manju ili jednaku {0}." ),
	min: $.validator.format( "Unesite vrijednost veću ili jednaku {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: HU (Hungarian; Magyar)
 */
$.extend( $.validator.messages, {
	required: "Kötelező megadni.",
	maxlength: $.validator.format( "Legfeljebb {0} karakter hosszú legyen." ),
	minlength: $.validator.format( "Legalább {0} karakter hosszú legyen." ),
	rangelength: $.validator.format( "Legalább {0} és legfeljebb {1} karakter hosszú legyen." ),
	email: "Érvényes e-mail címnek kell lennie.",
	url: "Érvényes URL-nek kell lennie.",
	date: "Dátumnak kell lennie.",
	number: "Számnak kell lennie.",
	digits: "Csak számjegyek lehetnek.",
	equalTo: "Meg kell egyeznie a két értéknek.",
	range: $.validator.format( "{0} és {1} közé kell esnie." ),
	max: $.validator.format( "Nem lehet nagyobb, mint {0}." ),
	min: $.validator.format( "Nem lehet kisebb, mint {0}." ),
	creditcard: "Érvényes hitelkártyaszámnak kell lennie.",
	remote: "Kérem javítsa ki ezt a mezőt.",
	dateISO: "Kérem írjon be egy érvényes dátumot (ISO).",
	step: $.validator.format( "A {0} egyik többszörösét adja meg." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: HY_AM (Armenian; հայերեն լեզու)
 */
$.extend( $.validator.messages, {
	required: "Պարտադիր լրացման դաշտ",
	remote: "Ներմուծեք ճիշտ արժեքը",
	email: "Ներմուծեք վավեր էլեկտրոնային փոստի հասցե",
	url: "Ներմուծեք վավեր URL",
	date: "Ներմուծեք վավեր ամսաթիվ",
	dateISO: "Ներմուծեք ISO ֆորմատով վավեր ամսաթիվ։",
	number: "Ներմուծեք թիվ",
	digits: "Ներմուծեք միայն թվեր",
	creditcard: "Ներմուծեք ճիշտ բանկային քարտի համար",
	equalTo: "Ներմուծեք միևնուն արժեքը ևս մեկ անգամ",
	extension: "Ընտրեք ճիշտ ընդլանումով ֆայլ",
	maxlength: $.validator.format( "Ներմուծեք ոչ ավել քան {0} նիշ" ),
	minlength: $.validator.format( "Ներմուծեք ոչ պակաս քան {0} նիշ" ),
	rangelength: $.validator.format( "Ներմուծեք {0}֊ից {1} երկարությամբ արժեք" ),
	range: $.validator.format( "Ներմուծեք թիվ {0}֊ից {1} միջակայքում" ),
	max: $.validator.format( "Ներմուծեք թիվ, որը փոքր կամ հավասար է {0}֊ին" ),
	min: $.validator.format( "Ներմուծեք թիվ, որը մեծ կամ հավասար է {0}֊ին" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ID (Indonesia; Indonesian)
 */
$.extend( $.validator.messages, {
	required: "Kolom ini diperlukan.",
	remote: "Harap benarkan kolom ini.",
	email: "Silakan masukkan format email yang benar.",
	url: "Silakan masukkan format URL yang benar.",
	date: "Silakan masukkan format tanggal yang benar.",
	dateISO: "Silakan masukkan format tanggal(ISO) yang benar.",
	number: "Silakan masukkan angka yang benar.",
	digits: "Harap masukan angka saja.",
	creditcard: "Harap masukkan format kartu kredit yang benar.",
	equalTo: "Harap masukkan nilai yg sama dengan sebelumnya.",
	maxlength: $.validator.format( "Input dibatasi hanya {0} karakter." ),
	minlength: $.validator.format( "Input tidak kurang dari {0} karakter." ),
	rangelength: $.validator.format( "Panjang karakter yg diizinkan antara {0} dan {1} karakter." ),
	range: $.validator.format( "Harap masukkan nilai antara {0} dan {1}." ),
	max: $.validator.format( "Harap masukkan nilai lebih kecil atau sama dengan {0}." ),
	min: $.validator.format( "Harap masukkan nilai lebih besar atau sama dengan {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: IS (Icelandic; íslenska)
 */
$.extend( $.validator.messages, {
	required: "Þessi reitur er nauðsynlegur.",
	remote: "Lagaðu þennan reit.",
	maxlength: $.validator.format( "Sláðu inn mest {0} stafi." ),
	minlength: $.validator.format( "Sláðu inn minnst {0} stafi." ),
	rangelength: $.validator.format( "Sláðu inn minnst {0} og mest {1} stafi." ),
	email: "Sláðu inn gilt netfang.",
	url: "Sláðu inn gilda vefslóð.",
	date: "Sláðu inn gilda dagsetningu.",
	number: "Sláðu inn tölu.",
	digits: "Sláðu inn tölustafi eingöngu.",
	equalTo: "Sláðu sama gildi inn aftur.",
	range: $.validator.format( "Sláðu inn gildi milli {0} og {1}." ),
	max: $.validator.format( "Sláðu inn gildi sem er minna en eða jafnt og {0}." ),
	min: $.validator.format( "Sláðu inn gildi sem er stærra en eða jafnt og {0}." ),
	creditcard: "Sláðu inn gilt greiðslukortanúmer."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: IT (Italian; Italiano)
 */
$.extend( $.validator.messages, {
	required: "Campo obbligatorio",
	remote: "Controlla questo campo",
	email: "Inserisci un indirizzo email valido",
	url: "Inserisci un indirizzo web valido",
	date: "Inserisci una data valida",
	dateISO: "Inserisci una data valida (ISO)",
	number: "Inserisci un numero valido",
	digits: "Inserisci solo numeri",
	creditcard: "Inserisci un numero di carta di credito valido",
	equalTo: "Il valore non corrisponde",
	extension: "Inserisci un valore con un&apos;estensione valida",
	maxlength: $.validator.format( "Non inserire pi&ugrave; di {0} caratteri" ),
	minlength: $.validator.format( "Inserisci almeno {0} caratteri" ),
	rangelength: $.validator.format( "Inserisci un valore compreso tra {0} e {1} caratteri" ),
	range: $.validator.format( "Inserisci un valore compreso tra {0} e {1}" ),
	max: $.validator.format( "Inserisci un valore minore o uguale a {0}" ),
	min: $.validator.format( "Inserisci un valore maggiore o uguale a {0}" ),
	nifES: "Inserisci un NIF valido",
	nieES: "Inserisci un NIE valido",
	cifES: "Inserisci un CIF valido",
	currency: "Inserisci una valuta valida"
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: JA (Japanese; 日本語)
 */
$.extend( $.validator.messages, {
	required: "このフィールドは必須です。",
	remote: "このフィールドを修正してください。",
	email: "有効なEメールアドレスを入力してください。",
	url: "有効なURLを入力してください。",
	date: "有効な日付を入力してください。",
	dateISO: "有効な日付(ISO)を入力してください。",
	number: "有効な数字を入力してください。",
	digits: "数字のみを入力してください。",
	creditcard: "有効なクレジットカード番号を入力してください。",
	equalTo: "同じ値をもう一度入力してください。",
	extension: "有効な拡張子を含む値を入力してください。",
	maxlength: $.validator.format( "{0} 文字以内で入力してください。" ),
	minlength: $.validator.format( "{0} 文字以上で入力してください。" ),
	rangelength: $.validator.format( "{0} 文字から {1} 文字までの値を入力してください。" ),
	range: $.validator.format( "{0} から {1} までの値を入力してください。" ),
	step: $.validator.format( "{0} の倍数を入力してください。" ),
	max: $.validator.format( "{0} 以下の値を入力してください。" ),
	min: $.validator.format( "{0} 以上の値を入力してください。" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: KA (Georgian; ქართული)
 */
$.extend( $.validator.messages, {
	required: "ამ ველის შევსება აუცილებელია.",
	remote: "გთხოვთ მიუთითოთ სწორი მნიშვნელობა.",
	email: "გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.",
	url: "გთხოვთ მიუთითოთ კორექტული URL.",
	date: "გთხოვთ მიუთითოთ კორექტული თარიღი.",
	dateISO: "გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.",
	number: "გთხოვთ მიუთითოთ ციფრი.",
	digits: "გთხოვთ მიუთითოთ მხოლოდ ციფრები.",
	creditcard: "გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.",
	equalTo: "გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.",
	extension: "გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.",
	maxlength: $.validator.format( "დასაშვებია არაუმეტეს {0} სიმბოლო." ),
	minlength: $.validator.format( "აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო." ),
	rangelength: $.validator.format( "ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე." ),
	range: $.validator.format( "გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე." ),
	max: $.validator.format( "გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს." ),
	min: $.validator.format( "გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: KK (Kazakh; қазақ тілі)
 */
$.extend( $.validator.messages, {
	required: "Бұл өрісті міндетті түрде толтырыңыз.",
	remote: "Дұрыс мағына енгізуіңізді сұраймыз.",
	email: "Нақты электронды поштаңызды енгізуіңізді сұраймыз.",
	url: "Нақты URL-ды енгізуіңізді сұраймыз.",
	date: "Нақты URL-ды енгізуіңізді сұраймыз.",
	dateISO: "Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.",
	number: "Күнді енгізуіңізді сұраймыз.",
	digits: "Тек қана сандарды енгізуіңізді сұраймыз.",
	creditcard: "Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.",
	equalTo: "Осы мәнді қайта енгізуіңізді сұраймыз.",
	extension: "Файлдың кеңейтуін дұрыс таңдаңыз.",
	maxlength: $.validator.format( "Ұзындығы {0} символдан көр болмасын." ),
	minlength: $.validator.format( "Ұзындығы {0} символдан аз болмасын." ),
	rangelength: $.validator.format( "Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз." ),
	range: $.validator.format( "Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз." ),
	max: $.validator.format( "{0} аз немесе тең санын енгізуіңіді сұраймыз." ),
	min: $.validator.format( "{0} көп немесе тең санын енгізуіңізді сұраймыз." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: KO (Korean; 한국어)
 */
$.extend( $.validator.messages, {
	required: "필수 항목입니다.",
	remote: "항목을 수정하세요.",
	email: "유효하지 않은 E-Mail주소입니다.",
	url: "유효하지 않은 URL입니다.",
	date: "올바른 날짜를 입력하세요.",
	dateISO: "올바른 날짜(ISO)를 입력하세요.",
	number: "유효한 숫자가 아닙니다.",
	digits: "숫자만 입력 가능합니다.",
	creditcard: "신용카드 번호가 바르지 않습니다.",
	equalTo: "같은 값을 다시 입력하세요.",
	extension: "올바른 확장자가 아닙니다.",
	maxlength: $.validator.format( "{0}자를 넘을 수 없습니다. " ),
	minlength: $.validator.format( "{0}자 이상 입력하세요." ),
	rangelength: $.validator.format( "문자 길이가 {0} 에서 {1} 사이의 값을 입력하세요." ),
	range: $.validator.format( "{0} 에서 {1} 사이의 값을 입력하세요." ),
	max: $.validator.format( "{0} 이하의 값을 입력하세요." ),
	min: $.validator.format( "{0} 이상의 값을 입력하세요." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: LT (Lithuanian; lietuvių kalba)
 */
$.extend( $.validator.messages, {
	required: "Šis laukas yra privalomas.",
	remote: "Prašau pataisyti šį lauką.",
	email: "Prašau įvesti teisingą elektroninio pašto adresą.",
	url: "Prašau įvesti teisingą URL.",
	date: "Prašau įvesti teisingą datą.",
	dateISO: "Prašau įvesti teisingą datą (ISO).",
	number: "Prašau įvesti teisingą skaičių.",
	digits: "Prašau naudoti tik skaitmenis.",
	creditcard: "Prašau įvesti teisingą kreditinės kortelės numerį.",
	equalTo: "Prašau įvestį tą pačią reikšmę dar kartą.",
	extension: "Prašau įvesti reikšmę su teisingu plėtiniu.",
	maxlength: $.validator.format( "Prašau įvesti ne daugiau kaip {0} simbolių." ),
	minlength: $.validator.format( "Prašau įvesti bent {0} simbolius." ),
	rangelength: $.validator.format( "Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių." ),
	range: $.validator.format( "Prašau įvesti reikšmę intervale nuo {0} iki {1}." ),
	max: $.validator.format( "Prašau įvesti reikšmę mažesnę arba lygią {0}." ),
	min: $.validator.format( "Prašau įvesti reikšmę didesnę arba lygią {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: LV (Latvian; latviešu valoda)
 */
$.extend( $.validator.messages, {
	required: "Šis lauks ir obligāts.",
	remote: "Lūdzu, pārbaudiet šo lauku.",
	email: "Lūdzu, ievadiet derīgu e-pasta adresi.",
	url: "Lūdzu, ievadiet derīgu URL adresi.",
	date: "Lūdzu, ievadiet derīgu datumu.",
	dateISO: "Lūdzu, ievadiet derīgu datumu (ISO).",
	number: "Lūdzu, ievadiet derīgu numuru.",
	digits: "Lūdzu, ievadiet tikai ciparus.",
	creditcard: "Lūdzu, ievadiet derīgu kredītkartes numuru.",
	equalTo: "Lūdzu, ievadiet to pašu vēlreiz.",
	extension: "Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.",
	maxlength: $.validator.format( "Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes." ),
	minlength: $.validator.format( "Lūdzu, ievadiet vismaz {0} rakstzīmes." ),
	rangelength: $.validator.format( "Lūdzu ievadiet {0} līdz {1} rakstzīmes." ),
	range: $.validator.format( "Lūdzu, ievadiet skaitli no {0} līdz {1}." ),
	max: $.validator.format( "Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}." ),
	min: $.validator.format( "Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: MK (Macedonian; македонски јазик)
 */
$.extend( $.validator.messages, {
	required: "Полето е задолжително.",
	remote: "Поправете го ова поле",
	email: "Внесете правилна e-mail адреса",
	url: "Внесете правилен URL.",
	date: "Внесете правилен датум",
	dateISO: "Внесете правилен датум (ISO).",
	number: "Внесете правилен број.",
	digits: "Внесете само бројки.",
	creditcard: "Внесете правилен број на кредитната картичка.",
	equalTo: "Внесете ја истата вредност повторно.",
	extension: "Внесете вредност со соодветна екстензија.",
	maxlength: $.validator.format( "Внесете максимално {0} знаци." ),
	minlength: $.validator.format( "Внесете барем {0} знаци." ),
	rangelength: $.validator.format( "Внесете вредност со должина помеѓу {0} и {1} знаци." ),
	range: $.validator.format( "Внесете вредност помеѓу {0} и {1}." ),
	max: $.validator.format( "Внесете вредност помала или еднаква на {0}." ),
	min: $.validator.format( "Внесете вредност поголема или еднаква на {0}" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: MY (Malay; Melayu)
 */
$.extend( $.validator.messages, {
	required: "Medan ini diperlukan.",
	remote: "Sila betulkan medan ini.",
	email: "Sila masukkan alamat emel yang betul.",
	url: "Sila masukkan URL yang betul.",
	date: "Sila masukkan tarikh yang betul.",
	dateISO: "Sila masukkan tarikh(ISO) yang betul.",
	number: "Sila masukkan nombor yang betul.",
	digits: "Sila masukkan nilai digit sahaja.",
	creditcard: "Sila masukkan nombor kredit kad yang betul.",
	equalTo: "Sila masukkan nilai yang sama semula.",
	extension: "Sila masukkan nilai yang telah diterima.",
	maxlength: $.validator.format( "Sila masukkan tidak lebih dari {0} aksara." ),
	minlength: $.validator.format( "Sila masukkan sekurang-kurangnya {0} aksara." ),
	rangelength: $.validator.format( "Sila masukkan antara {0} dan {1} panjang aksara." ),
	range: $.validator.format( "Sila masukkan nilai antara {0} dan {1} aksara." ),
	max: $.validator.format( "Sila masukkan nilai yang kurang atau sama dengan {0}." ),
	min: $.validator.format( "Sila masukkan nilai yang lebih atau sama dengan {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: NL (Dutch; Nederlands, Vlaams)
 */
$.extend( $.validator.messages, {
	required: "Dit is een verplicht veld.",
	remote: "Controleer dit veld.",
	email: "Vul hier een geldig e-mailadres in.",
	url: "Vul hier een geldige URL in.",
	date: "Vul hier een geldige datum in.",
	dateISO: "Vul hier een geldige datum in (ISO-formaat).",
	number: "Vul hier een geldig getal in.",
	digits: "Vul hier alleen getallen in.",
	creditcard: "Vul hier een geldig creditcardnummer in.",
	equalTo: "Vul hier dezelfde waarde in.",
	extension: "Vul hier een waarde in met een geldige extensie.",
	maxlength: $.validator.format( "Vul hier maximaal {0} tekens in." ),
	minlength: $.validator.format( "Vul hier minimaal {0} tekens in." ),
	rangelength: $.validator.format( "Vul hier een waarde in van minimaal {0} en maximaal {1} tekens." ),
	range: $.validator.format( "Vul hier een waarde in van minimaal {0} en maximaal {1}." ),
	max: $.validator.format( "Vul hier een waarde in kleiner dan of gelijk aan {0}." ),
	min: $.validator.format( "Vul hier een waarde in groter dan of gelijk aan {0}." ),
	step: $.validator.format( "Vul hier een veelvoud van {0} in." ),

	// For validations in additional-methods.js
	iban: "Vul hier een geldig IBAN in.",
	dateNL: "Vul hier een geldige datum in.",
	phoneNL: "Vul hier een geldig Nederlands telefoonnummer in.",
	mobileNL: "Vul hier een geldig Nederlands mobiel telefoonnummer in.",
	postalcodeNL: "Vul hier een geldige postcode in.",
	bankaccountNL: "Vul hier een geldig bankrekeningnummer in.",
	giroaccountNL: "Vul hier een geldig gironummer in.",
	bankorgiroaccountNL: "Vul hier een geldig bank- of gironummer in."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: NO (Norwegian; Norsk)
 */
$.extend( $.validator.messages, {
	required: "Angi en verdi.",
	remote: "Ugyldig verdi.",
	email: "Angi en gyldig epostadresse.",
	url: "Angi en gyldig URL.",
	date: "Angi en gyldig dato.",
	dateISO: "Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).",
	number: "Angi et gyldig tall.",
	digits: "Skriv kun tall.",
	equalTo: "Skriv samme verdi igjen.",
	maxlength: $.validator.format( "Maksimalt {0} tegn." ),
	minlength: $.validator.format( "Minimum {0} tegn." ),
	rangelength: $.validator.format( "Angi minimum {0} og maksimum {1} tegn." ),
	range: $.validator.format( "Angi en verdi mellom {0} og {1}." ),
	max: $.validator.format( "Angi en verdi som er mindre eller lik {0}." ),
	min: $.validator.format( "Angi en verdi som er st&oslash;rre eller lik {0}." ),
	step: $.validator.format( "Angi en verdi ganger {0}." ),
	creditcard: "Angi et gyldig kredittkortnummer."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: PL (Polish; język polski, polszczyzna)
 */
$.extend( $.validator.messages, {
	required: "To pole jest wymagane.",
	remote: "Proszę o wypełnienie tego pola.",
	email: "Proszę o podanie prawidłowego adresu email.",
	url: "Proszę o podanie prawidłowego URL.",
	date: "Proszę o podanie prawidłowej daty.",
	dateISO: "Proszę o podanie prawidłowej daty (ISO).",
	number: "Proszę o podanie prawidłowej liczby.",
	digits: "Proszę o podanie samych cyfr.",
	creditcard: "Proszę o podanie prawidłowej karty kredytowej.",
	equalTo: "Proszę o podanie tej samej wartości ponownie.",
	extension: "Proszę o podanie wartości z prawidłowym rozszerzeniem.",
	nipPL: "Proszę o podanie prawidłowego numeru NIP.",
	phonePL: "Proszę o podanie prawidłowego numeru telefonu",
	maxlength: $.validator.format( "Proszę o podanie nie więcej niż {0} znaków." ),
	minlength: $.validator.format( "Proszę o podanie przynajmniej {0} znaków." ),
	rangelength: $.validator.format( "Proszę o podanie wartości o długości od {0} do {1} znaków." ),
	range: $.validator.format( "Proszę o podanie wartości z przedziału od {0} do {1}." ),
	max: $.validator.format( "Proszę o podanie wartości mniejszej bądź równej {0}." ),
	min: $.validator.format( "Proszę o podanie wartości większej bądź równej {0}." ),
	pattern: $.validator.format( "Pole zawiera niedozwolone znaki." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: PT (Portuguese; português)
 * Region: BR (Brazil)
 */
$.extend( $.validator.messages, {

	// Core
	required: "Este campo &eacute; requerido.",
	remote: "Por favor, corrija este campo.",
	email: "Por favor, forne&ccedil;a um endere&ccedil;o de email v&aacute;lido.",
	url: "Por favor, forne&ccedil;a uma URL v&aacute;lida.",
	date: "Por favor, forne&ccedil;a uma data v&aacute;lida.",
	dateISO: "Por favor, forne&ccedil;a uma data v&aacute;lida (ISO).",
	number: "Por favor, forne&ccedil;a um n&uacute;mero v&aacute;lido.",
	digits: "Por favor, forne&ccedil;a somente d&iacute;gitos.",
	creditcard: "Por favor, forne&ccedil;a um cart&atilde;o de cr&eacute;dito v&aacute;lido.",
	equalTo: "Por favor, forne&ccedil;a o mesmo valor novamente.",
	maxlength: $.validator.format( "Por favor, forne&ccedil;a n&atilde;o mais que {0} caracteres." ),
	minlength: $.validator.format( "Por favor, forne&ccedil;a ao menos {0} caracteres." ),
	rangelength: $.validator.format( "Por favor, forne&ccedil;a um valor entre {0} e {1} caracteres de comprimento." ),
	range: $.validator.format( "Por favor, forne&ccedil;a um valor entre {0} e {1}." ),
	max: $.validator.format( "Por favor, forne&ccedil;a um valor menor ou igual a {0}." ),
	min: $.validator.format( "Por favor, forne&ccedil;a um valor maior ou igual a {0}." ),
	step: $.validator.format( "Por favor, forne&ccedil;a um valor m&uacute;ltiplo de {0}." ),

	// Metodos Adicionais
	maxWords: $.validator.format( "Por favor, forne&ccedil;a com {0} palavras ou menos." ),
	minWords: $.validator.format( "Por favor, forne&ccedil;a pelo menos {0} palavras." ),
	rangeWords: $.validator.format( "Por favor, forne&ccedil;a entre {0} e {1} palavras." ),
	accept: "Por favor, forne&ccedil;a um tipo v&aacute;lido.",
	alphanumeric: "Por favor, forne&ccedil;a somente com letras, n&uacute;meros e sublinhados.",
	bankaccountNL: "Por favor, forne&ccedil;a com um n&uacute;mero de conta banc&aacute;ria v&aacute;lida.",
	bankorgiroaccountNL: "Por favor, forne&ccedil;a um banco v&aacute;lido ou n&uacute;mero de conta.",
	bic: "Por favor, forne&ccedil;a um c&oacute;digo BIC v&aacute;lido.",
	cifES: "Por favor, forne&ccedil;a um c&oacute;digo CIF v&aacute;lido.",
	creditcardtypes: "Por favor, forne&ccedil;a um n&uacute;mero de cart&atilde;o de cr&eacute;dito v&aacute;lido.",
	currency: "Por favor, forne&ccedil;a uma moeda v&aacute;lida.",
	dateFA: "Por favor, forne&ccedil;a uma data correta.",
	dateITA: "Por favor, forne&ccedil;a uma data correta.",
	dateNL: "Por favor, forne&ccedil;a uma data correta.",
	extension: "Por favor, forne&ccedil;a um valor com uma extens&atilde;o v&aacute;lida.",
	giroaccountNL: "Por favor, forne&ccedil;a um n&uacute;mero de conta corrente v&aacute;lido.",
	iban: "Por favor, forne&ccedil;a um c&oacute;digo IBAN v&aacute;lido.",
	integer: "Por favor, forne&ccedil;a um n&uacute;mero n&atilde;o decimal.",
	ipv4: "Por favor, forne&ccedil;a um IPv4 v&aacute;lido.",
	ipv6: "Por favor, forne&ccedil;a um IPv6 v&aacute;lido.",
	lettersonly: "Por favor, forne&ccedil;a apenas com letras.",
	letterswithbasicpunc: "Por favor, forne&ccedil;a apenas letras ou pontua&ccedil;ões.",
	mobileNL: "Por favor, fornece&ccedil;a um n&uacute;mero v&aacute;lido de telefone.",
	mobileUK: "Por favor, fornece&ccedil;a um n&uacute;mero v&aacute;lido de telefone.",
	nieES: "Por favor, forne&ccedil;a um NIE v&aacute;lido.",
	nifES: "Por favor, forne&ccedil;a um NIF v&aacute;lido.",
	nowhitespace: "Por favor, n&atilde;o utilize espa&ccedil;os em branco.",
	pattern: "O formato fornecido &eacute; inv&aacute;lido.",
	phoneNL: "Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.",
	phoneUK: "Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.",
	phoneUS: "Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.",
	phonesUK: "Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.",
	postalCodeCA: "Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.",
	postalcodeIT: "Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.",
	postalcodeNL: "Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.",
	postcodeUK: "Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.",
	postalcodeBR: "Por favor, forne&ccedil;a um CEP v&aacute;lido.",
	require_from_group: $.validator.format( "Por favor, forne&ccedil;a pelo menos {0} destes campos." ),
	skip_or_fill_minimum: $.validator.format( "Por favor, optar entre ignorar esses campos ou preencher pelo menos {0} deles." ),
	stateUS: "Por favor, forne&ccedil;a um estado v&aacute;lido.",
	strippedminlength: $.validator.format( "Por favor, forne&ccedil;a pelo menos {0} caracteres." ),
	time: "Por favor, forne&ccedil;a um hor&aacute;rio v&aacute;lido, no intervado de 00:00 a 23:59.",
	time12h: "Por favor, forne&ccedil;a um hor&aacute;rio v&aacute;lido, no intervado de 01:00 a 12:59 am/pm.",
	url2: "Por favor, forne&ccedil;a uma URL v&aacute;lida.",
	vinUS: "O n&uacute;mero de identifica&ccedil;&atilde;o de ve&iacute;culo informado (VIN) &eacute; inv&aacute;lido.",
	zipcodeUS: "Por favor, forne&ccedil;a um c&oacute;digo postal americano v&aacute;lido.",
	ziprange: "O c&oacute;digo postal deve estar entre 902xx-xxxx e 905xx-xxxx",
	cpfBR: "Por favor, forne&ccedil;a um CPF v&aacute;lido.",
	nisBR: "Por favor, forne&ccedil;a um NIS/PIS v&aacute;lido",
	cnhBR: "Por favor, forne&ccedil;a um CNH v&aacute;lido.",
	cnpjBR: "Por favor, forne&ccedil;a um CNPJ v&aacute;lido."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: PT (Portuguese; português)
 * Region: PT (Portugal)
 */
$.extend( $.validator.messages, {
	required: "Campo de preenchimento obrigat&oacute;rio.",
	remote: "Por favor, corrija este campo.",
	email: "Por favor, introduza um endere&ccedil;o eletr&oacute;nico v&aacute;lido.",
	url: "Por favor, introduza um URL v&aacute;lido.",
	date: "Por favor, introduza uma data v&aacute;lida.",
	dateISO: "Por favor, introduza uma data v&aacute;lida (ISO).",
	number: "Por favor, introduza um n&uacute;mero v&aacute;lido.",
	digits: "Por favor, introduza apenas d&iacute;gitos.",
	creditcard: "Por favor, introduza um n&uacute;mero de cart&atilde;o de cr&eacute;dito v&aacute;lido.",
	equalTo: "Por favor, introduza de novo o mesmo valor.",
	extension: "Por favor, introduza um ficheiro com uma extens&atilde;o v&aacute;lida.",
	maxlength: $.validator.format( "Por favor, n&atilde;o introduza mais do que {0} caracteres." ),
	minlength: $.validator.format( "Por favor, introduza pelo menos {0} caracteres." ),
	rangelength: $.validator.format( "Por favor, introduza entre {0} e {1} caracteres." ),
	range: $.validator.format( "Por favor, introduza um valor entre {0} e {1}." ),
	max: $.validator.format( "Por favor, introduza um valor menor ou igual a {0}." ),
	min: $.validator.format( "Por favor, introduza um valor maior ou igual a {0}." ),
	nifES: "Por favor, introduza um NIF v&aacute;lido.",
	nieES: "Por favor, introduza um NIE v&aacute;lido.",
	cifES: "Por favor, introduza um CIF v&aacute;lido."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: RO (Romanian, limba română)
 */
$.extend( $.validator.messages, {
	required: "Acest câmp este obligatoriu.",
	remote: "Te rugăm să completezi acest câmp.",
	email: "Te rugăm să introduci o adresă de email validă",
	url: "Te rugăm sa introduci o adresă URL validă.",
	date: "Te rugăm să introduci o dată corectă.",
	dateISO: "Te rugăm să introduci o dată (ISO) corectă.",
	number: "Te rugăm să introduci un număr întreg valid.",
	digits: "Te rugăm să introduci doar cifre.",
	creditcard: "Te rugăm să introduci un numar de carte de credit valid.",
	equalTo: "Te rugăm să reintroduci valoarea.",
	extension: "Te rugăm să introduci o valoare cu o extensie validă.",
	maxlength: $.validator.format( "Te rugăm să nu introduci mai mult de {0} caractere." ),
	minlength: $.validator.format( "Te rugăm să introduci cel puțin {0} caractere." ),
	rangelength: $.validator.format( "Te rugăm să introduci o valoare între {0} și {1} caractere." ),
	range: $.validator.format( "Te rugăm să introduci o valoare între {0} și {1}." ),
	max: $.validator.format( "Te rugăm să introduci o valoare egal sau mai mică decât {0}." ),
	min: $.validator.format( "Te rugăm să introduci o valoare egal sau mai mare decât {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: RU (Russian; русский язык)
 */
$.extend( $.validator.messages, {
	required: "Это поле необходимо заполнить.",
	remote: "Пожалуйста, введите правильное значение.",
	email: "Пожалуйста, введите корректный адрес электронной почты.",
	url: "Пожалуйста, введите корректный URL.",
	date: "Пожалуйста, введите корректную дату.",
	dateISO: "Пожалуйста, введите корректную дату в формате ISO.",
	number: "Пожалуйста, введите число.",
	digits: "Пожалуйста, вводите только цифры.",
	creditcard: "Пожалуйста, введите правильный номер кредитной карты.",
	equalTo: "Пожалуйста, введите такое же значение ещё раз.",
	extension: "Пожалуйста, выберите файл с правильным расширением.",
	maxlength: $.validator.format( "Пожалуйста, введите не больше {0} символов." ),
	minlength: $.validator.format( "Пожалуйста, введите не меньше {0} символов." ),
	rangelength: $.validator.format( "Пожалуйста, введите значение длиной от {0} до {1} символов." ),
	range: $.validator.format( "Пожалуйста, введите число от {0} до {1}." ),
	max: $.validator.format( "Пожалуйста, введите число, меньшее или равное {0}." ),
	min: $.validator.format( "Пожалуйста, введите число, большее или равное {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: SD (Sindhi; سنڌي)
 */
$.extend( $.validator.messages, {
    required: "هنن جاين جي ضرورت آهي",
    remote: "هنن جاين جي ضرورت آهي",
    email: "لکيل اي ميل غلط آهي",
    url: "لکيل ايڊريس غلط آهي",
    date: "لکيل تاريخ غلط آهي",
    dateISO: "جي معيار جي مطابق نه آهي (ISO) لکيل تاريخ",
    number: "لکيل انگ صحيح ناهي",
    digits: "رڳو انگ داخل ڪري سگهجي ٿو",
    creditcard: "لکيل ڪارڊ نمبر صحيح نه آهي",
    equalTo: "داخل ٿيل ڀيٽ صحيح نه آهي",
    extension: "لکيل غلط آهي",
    maxlength: $.validator.format( "وڌ کان وڌ {0} جي داخلا ڪري سگهجي ٿي" ),
    minlength: $.validator.format( "گهٽ ۾ گهٽ {0} جي داخلا ڪرڻ ضروري آهي" ),
    rangelength: $.validator.format( "داخلا جو {0} ۽ {1}جي وچ ۾ هجڻ ضروري آهي" ),
    range: $.validator.format( "داخلا جو {0} ۽ {1}جي وچ ۾ هجڻ ضروري آهي" ),
    max: $.validator.format( "وڌ کان وڌ {0} جي داخلا ڪري سگهجي ٿي" ),
    min: $.validator.format( "گهٽ ۾ گهٽ {0} جي داخلا ڪرڻ ضروري آهي" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: SI (Slovenian)
 */
$.extend( $.validator.messages, {
	required: "To polje je obvezno.",
	remote: "Vpis v tem polju ni v pravi obliki.",
	email: "Prosimo, vnesite pravi email naslov.",
	url: "Prosimo, vnesite pravi URL.",
	date: "Prosimo, vnesite pravi datum.",
	dateISO: "Prosimo, vnesite pravi datum (ISO).",
	number: "Prosimo, vnesite pravo številko.",
	digits: "Prosimo, vnesite samo številke.",
	creditcard: "Prosimo, vnesite pravo številko kreditne kartice.",
	equalTo: "Prosimo, ponovno vnesite enako vsebino.",
	extension: "Prosimo, vnesite vsebino z pravo končnico.",
	maxlength: $.validator.format( "Prosimo, da ne vnašate več kot {0} znakov." ),
	minlength: $.validator.format( "Prosimo, vnesite vsaj {0} znakov." ),
	rangelength: $.validator.format( "Prosimo, vnesite od {0} do {1} znakov." ),
	range: $.validator.format( "Prosimo, vnesite vrednost med {0} in {1}." ),
	max: $.validator.format( "Prosimo, vnesite vrednost manjšo ali enako {0}." ),
	min: $.validator.format( "Prosimo, vnesite vrednost večjo ali enako {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: SK (Slovak; slovenčina, slovenský jazyk)
 */
$.extend( $.validator.messages, {
	required: "Povinné zadať.",
	maxlength: $.validator.format( "Maximálne {0} znakov." ),
	minlength: $.validator.format( "Minimálne {0} znakov." ),
	rangelength: $.validator.format( "Minimálne {0} a maximálne {1} znakov." ),
	email: "E-mailová adresa musí byť platná.",
	url: "URL musí byť platná.",
	date: "Musí byť dátum.",
	number: "Musí byť číslo.",
	digits: "Môže obsahovať iba číslice.",
	equalTo: "Dve hodnoty sa musia rovnať.",
	range: $.validator.format( "Musí byť medzi {0} a {1}." ),
	max: $.validator.format( "Nemôže byť viac ako {0}." ),
	min: $.validator.format( "Nemôže byť menej ako {0}." ),
	creditcard: "Číslo platobnej karty musí byť platné.",
	step: $.validator.format( "Musí byť násobkom čísla {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Language: SL (Slovenian; slovenski jezik)
 */
$.extend( $.validator.messages, {
	required: "To polje je obvezno.",
	remote: "Prosimo popravite to polje.",
	email: "Prosimo vnesite veljaven email naslov.",
	url: "Prosimo vnesite veljaven URL naslov.",
	date: "Prosimo vnesite veljaven datum.",
	dateISO: "Prosimo vnesite veljaven ISO datum.",
	number: "Prosimo vnesite veljavno število.",
	digits: "Prosimo vnesite samo števila.",
	creditcard: "Prosimo vnesite veljavno številko kreditne kartice.",
	equalTo: "Prosimo ponovno vnesite vrednost.",
	extension: "Prosimo vnesite vrednost z veljavno končnico.",
	maxlength: $.validator.format( "Prosimo vnesite največ {0} znakov." ),
	minlength: $.validator.format( "Prosimo vnesite najmanj {0} znakov." ),
	rangelength: $.validator.format( "Prosimo vnesite najmanj {0} in največ {1} znakov." ),
	range: $.validator.format( "Prosimo vnesite vrednost med {0} in {1}." ),
	max: $.validator.format( "Prosimo vnesite vrednost manjše ali enako {0}." ),
	min: $.validator.format( "Prosimo vnesite vrednost večje ali enako {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: SR (Serbian; српски језик)
 */
$.extend( $.validator.messages, {
	required: "Поље је обавезно.",
	remote: "Средите ово поље.",
	email: "Унесите исправну и-мејл адресу.",
	url: "Унесите исправан URL.",
	date: "Унесите исправан датум.",
	dateISO: "Унесите исправан датум (ISO).",
	number: "Унесите исправан број.",
	digits: "Унесите само цифе.",
	creditcard: "Унесите исправан број кредитне картице.",
	equalTo: "Унесите исту вредност поново.",
	extension: "Унесите вредност са одговарајућом екстензијом.",
	maxlength: $.validator.format( "Унесите мање од {0} карактера." ),
	minlength: $.validator.format( "Унесите барем {0} карактера." ),
	rangelength: $.validator.format( "Унесите вредност дугачку између {0} и {1} карактера." ),
	range: $.validator.format( "Унесите вредност између {0} и {1}." ),
	max: $.validator.format( "Унесите вредност мању или једнаку {0}." ),
	min: $.validator.format( "Унесите вредност већу или једнаку {0}." ),
	step: $.validator.format( "Унесите вредност која је умножак броја {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: SR (Serbian - Latin alphabet; srpski jezik - latinica)
 */
$.extend( $.validator.messages, {
	required: "Polje je obavezno.",
	remote: "Sredite ovo polje.",
	email: "Unesite ispravnu e-mail adresu",
	url: "Unesite ispravan URL.",
	date: "Unesite ispravan datum.",
	dateISO: "Unesite ispravan datum (ISO).",
	number: "Unesite ispravan broj.",
	digits: "Unesite samo cifre.",
	creditcard: "Unesite ispravan broj kreditne kartice.",
	equalTo: "Unesite istu vrednost ponovo.",
	extension: "Unesite vrednost sa odgovarajućom ekstenzijom.",
	maxlength: $.validator.format( "Unesite manje od {0} karaktera." ),
	minlength: $.validator.format( "Unesite barem {0} karaktera." ),
	rangelength: $.validator.format( "Unesite vrednost dugačku između {0} i {1} karaktera." ),
	range: $.validator.format( "Unesite vrednost između {0} i {1}." ),
	max: $.validator.format( "Unesite vrednost manju ili jednaku {0}." ),
	min: $.validator.format( "Unesite vrednost veću ili jednaku {0}." ),
	step: $.validator.format( "Unesite vrednost koja je umnožak broja {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: SV (Swedish; Svenska)
 */
$.extend( $.validator.messages, {
	required: "Detta f&auml;lt &auml;r obligatoriskt.",
	remote: "Var snäll och åtgärda detta fält.",
	maxlength: $.validator.format( "Du f&aring;r ange h&ouml;gst {0} tecken." ),
	minlength: $.validator.format( "Du m&aring;ste ange minst {0} tecken." ),
	rangelength: $.validator.format( "Ange minst {0} och max {1} tecken." ),
	email: "Ange en korrekt e-postadress.",
	url: "Ange en korrekt URL.",
	date: "Ange ett korrekt datum.",
	dateISO: "Ange ett korrekt datum (&Aring;&Aring;&Aring;&Aring;-MM-DD).",
	number: "Ange ett korrekt nummer.",
	digits: "Ange endast siffror.",
	equalTo: "Ange samma v&auml;rde igen.",
	range: $.validator.format( "Ange ett v&auml;rde mellan {0} och {1}." ),
	max: $.validator.format( "Ange ett v&auml;rde som &auml;r mindre eller lika med {0}." ),
	min: $.validator.format( "Ange ett v&auml;rde som &auml;r st&ouml;rre eller lika med {0}." ),
	creditcard: "Ange ett korrekt kreditkortsnummer.",
	pattern: "Ogiltigt format."
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: TH (Thai; ไทย)
 */
$.extend( $.validator.messages, {
	required: "โปรดระบุ",
	remote: "โปรดแก้ไขให้ถูกต้อง",
	email: "โปรดระบุที่อยู่อีเมล์ที่ถูกต้อง",
	url: "โปรดระบุ URL ที่ถูกต้อง",
	date: "โปรดระบุวันที่ ที่ถูกต้อง",
	dateISO: "โปรดระบุวันที่ ที่ถูกต้อง (ระบบ ISO).",
	number: "โปรดระบุทศนิยมที่ถูกต้อง",
	digits: "โปรดระบุจำนวนเต็มที่ถูกต้อง",
	creditcard: "โปรดระบุรหัสบัตรเครดิตที่ถูกต้อง",
	equalTo: "โปรดระบุค่าเดิมอีกครั้ง",
	extension: "โปรดระบุค่าที่มีส่วนขยายที่ถูกต้อง",
	maxlength: $.validator.format( "โปรดอย่าระบุค่าที่ยาวกว่า {0} อักขระ" ),
	minlength: $.validator.format( "โปรดอย่าระบุค่าที่สั้นกว่า {0} อักขระ" ),
	rangelength: $.validator.format( "โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อักขระ" ),
	range: $.validator.format( "โปรดระบุค่าระหว่าง {0} และ {1}" ),
	max: $.validator.format( "โปรดระบุค่าน้อยกว่าหรือเท่ากับ {0}" ),
	min: $.validator.format( "โปรดระบุค่ามากกว่าหรือเท่ากับ {0}" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: TJ (Tajikistan; Забони тоҷикӣ)
 */
$.extend( $.validator.messages, {
	required: "Ворид кардани ин филд маҷбури аст.",
	remote: "Илтимос, маълумоти саҳеҳ ворид кунед.",
	email: "Илтимос, почтаи электронии саҳеҳ ворид кунед.",
	url: "Илтимос, URL адреси саҳеҳ ворид кунед.",
	date: "Илтимос, таърихи саҳеҳ ворид кунед.",
	dateISO: "Илтимос, таърихи саҳеҳи (ISO)ӣ ворид кунед.",
	number: "Илтимос, рақамҳои саҳеҳ ворид кунед.",
	digits: "Илтимос, танҳо рақам ворид кунед.",
	creditcard: "Илтимос, кредит карди саҳеҳ ворид кунед.",
	equalTo: "Илтимос, миқдори баробар ворид кунед.",
	extension: "Илтимос, қофияи файлро дуруст интихоб кунед",
	maxlength: $.validator.format( "Илтимос, бештар аз {0} рамз ворид накунед." ),
	minlength: $.validator.format( "Илтимос, камтар аз {0} рамз ворид накунед." ),
	rangelength: $.validator.format( "Илтимос, камтар аз {0} ва зиёда аз {1} рамз ворид кунед." ),
	range: $.validator.format( "Илтимос, аз {0} то {1} рақам зиёд ворид кунед." ),
	max: $.validator.format( "Илтимос, бештар аз {0} рақам ворид накунед." ),
	min: $.validator.format( "Илтимос, камтар аз {0} рақам ворид накунед." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: TR (Turkish; Türkçe)
 */
$.extend( $.validator.messages, {
	required: "Bu alanın doldurulması zorunludur.",
	remote: "Lütfen bu alanı düzeltin.",
	email: "Lütfen geçerli bir e-posta adresi giriniz.",
	url: "Lütfen geçerli bir web adresi (URL) giriniz.",
	date: "Lütfen geçerli bir tarih giriniz.",
	dateISO: "Lütfen geçerli bir tarih giriniz(ISO formatında)",
	number: "Lütfen geçerli bir sayı giriniz.",
	digits: "Lütfen sadece sayısal karakterler giriniz.",
	creditcard: "Lütfen geçerli bir kredi kartı giriniz.",
	equalTo: "Lütfen aynı değeri tekrar giriniz.",
	extension: "Lütfen geçerli uzantıya sahip bir değer giriniz.",
	maxlength: $.validator.format( "Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz." ),
	minlength: $.validator.format( "Lütfen en az {0} karakter uzunluğunda bir değer giriniz." ),
	rangelength: $.validator.format( "Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz." ),
	range: $.validator.format( "Lütfen {0} ile {1} arasında bir değer giriniz." ),
	max: $.validator.format( "Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz." ),
	min: $.validator.format( "Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz." ),
	require_from_group: $.validator.format( "Lütfen bu alanların en az {0} tanesini doldurunuz." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: UK (Ukrainian; українська мова)
 */
$.extend( $.validator.messages, {
	required: "Це поле необхідно заповнити.",
	remote: "Будь ласка, введіть правильне значення.",
	email: "Будь ласка, введіть коректну адресу електронної пошти.",
	url: "Будь ласка, введіть коректний URL.",
	date: "Будь ласка, введіть коректну дату.",
	dateISO: "Будь ласка, введіть коректну дату у форматі ISO.",
	number: "Будь ласка, введіть число.",
	digits: "Вводите потрібно лише цифри.",
	creditcard: "Будь ласка, введіть правильний номер кредитної карти.",
	equalTo: "Будь ласка, введіть таке ж значення ще раз.",
	extension: "Будь ласка, виберіть файл з правильним розширенням.",
	maxlength: $.validator.format( "Будь ласка, введіть не більше {0} символів." ),
	minlength: $.validator.format( "Будь ласка, введіть не менше {0} символів." ),
	rangelength: $.validator.format( "Будь ласка, введіть значення довжиною від {0} до {1} символів." ),
	range: $.validator.format( "Будь ласка, введіть число від {0} до {1}." ),
	max: $.validator.format( "Будь ласка, введіть число, менше або рівно {0}." ),
	min: $.validator.format( "Будь ласка, введіть число, більше або рівно {0}." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: UR (Urdu; اردو)
 */
$.extend( $.validator.messages, {
	required: "ان معلومات کا اندراج ضروری ہے",
	remote: "ان معلومات کا اندراج ضروری ہے",
	email: "درج کی ہوئی ای میل درست نہیں ہے",
	url: "درج کیا گیا پتہ درست نہیں ہے",
	date: "درج کی گئی تاریخ درست نہیں ہے",
	dateISO: "معیار کے مطابق نہیں ہے (ISO) درج کی گئی تاریخ",
	number: "درج کیےگئے ہندسے درست نہیں ہیں",
	digits: "صرف ہندسے اندراج کئے جاسکتے ہیں",
	creditcard: "درج کیا گیا کارڈ نمبر درست نہیں ہے",
	equalTo: "اندراج کا موازنہ درست نہیں ہے",
	extension: "اندراج درست نہیں ہے",
	maxlength: $.validator.format( "زیادہ سے زیادہ {0} کا اندراج کر سکتے ہیں" ),
	minlength: $.validator.format( "کم سے کم {0} کا اندراج کرنا ضروری ہے" ),
	rangelength: $.validator.format( "اندراج کا {0} اور {1}کے درمیان ہونا ضروری ہے" ),
	range: $.validator.format( "اندراج کا {0} اور {1} کے درمیان ہونا ضروری ہے" ),
	max: $.validator.format( "زیادہ سے زیادہ {0} کا اندراج کر سکتے ہیں" ),
	min: $.validator.format( "کم سے کم {0} کا اندراج کرنا ضروری ہے" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: VI (Vietnamese; Tiếng Việt)
 */
$.extend( $.validator.messages, {
	required: "Hãy nhập.",
	remote: "Hãy sửa cho đúng.",
	email: "Hãy nhập email.",
	url: "Hãy nhập URL.",
	date: "Hãy nhập ngày.",
	dateISO: "Hãy nhập ngày (ISO).",
	number: "Hãy nhập số.",
	digits: "Hãy nhập chữ số.",
	creditcard: "Hãy nhập số thẻ tín dụng.",
	equalTo: "Hãy nhập thêm lần nữa.",
	extension: "Phần mở rộng không đúng.",
	maxlength: $.validator.format( "Hãy nhập từ {0} kí tự trở xuống." ),
	minlength: $.validator.format( "Hãy nhập từ {0} kí tự trở lên." ),
	rangelength: $.validator.format( "Hãy nhập từ {0} đến {1} kí tự." ),
	range: $.validator.format( "Hãy nhập từ {0} đến {1}." ),
	max: $.validator.format( "Hãy nhập từ {0} trở xuống." ),
	min: $.validator.format( "Hãy nhập từ {0} trở lên." )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)
 */
$.extend( $.validator.messages, {
	required: "这是必填字段",
	remote: "请修正此字段",
	email: "请输入有效的电子邮件地址",
	url: "请输入有效的网址",
	date: "请输入有效的日期",
	dateISO: "请输入有效的日期 (YYYY-MM-DD)",
	number: "请输入有效的数字",
	digits: "只能输入数字",
	creditcard: "请输入有效的信用卡号码",
	equalTo: "你的输入不相同",
	extension: "请输入有效的后缀",
	maxlength: $.validator.format( "最多可以输入 {0} 个字符" ),
	minlength: $.validator.format( "最少要输入 {0} 个字符" ),
	rangelength: $.validator.format( "请输入长度在 {0} 到 {1} 之间的字符串" ),
	range: $.validator.format( "请输入范围在 {0} 到 {1} 之间的数值" ),
	step: $.validator.format( "请输入 {0} 的整数倍值" ),
	max: $.validator.format( "请输入不大于 {0} 的数值" ),
	min: $.validator.format( "请输入不小于 {0} 的数值" )
} );

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ZH (Chinese; 中文 (Zhōngwén), 汉语, 漢語)
 * Region: TW (Taiwan)
 */
$.extend( $.validator.messages, {
	required: "必須填寫",
	remote: "請修正此欄位",
	email: "請輸入有效的電子郵件",
	url: "請輸入有效的網址",
	date: "請輸入有效的日期",
	dateISO: "請輸入有效的日期 (YYYY-MM-DD)",
	number: "請輸入正確的數值",
	digits: "只可輸入數字",
	creditcard: "請輸入有效的信用卡號碼",
	equalTo: "請重複輸入一次",
	extension: "請輸入有效的後綴",
	maxlength: $.validator.format( "最多 {0} 個字" ),
	minlength: $.validator.format( "最少 {0} 個字" ),
	rangelength: $.validator.format( "請輸入長度為 {0} 至 {1} 之間的字串" ),
	range: $.validator.format( "請輸入 {0} 至 {1} 之間的數值" ),
	step: $.validator.format( "請輸入 {0} 的整數倍值" ),
	max: $.validator.format( "請輸入不大於 {0} 的數值" ),
	min: $.validator.format( "請輸入不小於 {0} 的數值" )
} );

/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: DE
 */
$.extend( $.validator.methods, {
	date: function( value, element ) {
		return this.optional( element ) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test( value );
	},
	number: function( value, element ) {
		return this.optional( element ) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test( value );
	}
} );

/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: ES_CL
 */
$.extend( $.validator.methods, {
	date: function( value, element ) {
		return this.optional( element ) || /^\d\d?\-\d\d?\-\d\d\d?\d?$/.test( value );
	},
	number: function( value, element ) {
		return this.optional( element ) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test( value );
	}
} );

/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: FI
 */
$.extend( $.validator.methods, {
	date: function( value, element ) {
		return this.optional( element ) || /^\d{1,2}\.\d{1,2}\.\d{4}$/.test( value );
	},
	number: function( value, element ) {
		return this.optional( element ) || /^-?(?:\d+)(?:,\d+)?$/.test( value );
	}
} );

/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: IT
 */
$.extend( $.validator.methods, {
	date: function( value, element ) {
		return this.optional( element ) || /^\d\d?\-\d\d?\-\d\d\d?\d?$/.test( value );
	},
	number: function( value, element ) {
		return this.optional( element ) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test( value );
	}
} );

/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: NL
 */
$.extend( $.validator.methods, {
	date: function( value, element ) {
		return this.optional( element ) || /^\d\d?[\.\/\-]\d\d?[\.\/\-]\d\d\d?\d?$/.test( value );
	},
	number: function( value, element ) {
		return this.optional( element ) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test( value );
	}
} );

/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: PT_BR
 */
$.extend( $.validator.methods, {
	date: function( value, element ) {
		return this.optional( element ) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test( value );
	}
} );

// ==================================================
// fancyBox v3.5.7
//
// Licensed GPLv3 for open source use
// or fancyBox Commercial License for commercial use
//
// http://fancyapps.com/fancybox/
// Copyright 2019 fancyApps
//
// ==================================================
(function (window, document, $, undefined) {
  "use strict";

  window.console = window.console || {
    info: function (stuff) {}
  };

  // If there's no jQuery, fancyBox can't work
  // =========================================

  if (!$) {
    return;
  }

  // Check if fancyBox is already initialized
  // ========================================

  if ($.fn.fancybox) {
    console.info("fancyBox already initialized");

    return;
  }

  // Private default settings
  // ========================

  var defaults = {
    // Close existing modals
    // Set this to false if you do not need to stack multiple instances
    closeExisting: false,

    // Enable infinite gallery navigation
    loop: false,

    // Horizontal space between slides
    gutter: 50,

    // Enable keyboard navigation
    keyboard: true,

    // Should allow caption to overlap the content
    preventCaptionOverlap: true,

    // Should display navigation arrows at the screen edges
    arrows: true,

    // Should display counter at the top left corner
    infobar: true,

    // Should display close button (using `btnTpl.smallBtn` template) over the content
    // Can be true, false, "auto"
    // If "auto" - will be automatically enabled for "html", "inline" or "ajax" items
    smallBtn: "auto",

    // Should display toolbar (buttons at the top)
    // Can be true, false, "auto"
    // If "auto" - will be automatically hidden if "smallBtn" is enabled
    toolbar: "auto",

    // What buttons should appear in the top right corner.
    // Buttons will be created using templates from `btnTpl` option
    // and they will be placed into toolbar (class="fancybox-toolbar"` element)
    buttons: [
      "zoom",
      //"share",
      "slideShow",
      //"fullScreen",
      //"download",
      "thumbs",
      "close"
    ],

    // Detect "idle" time in seconds
    idleTime: 3,

    // Disable right-click and use simple image protection for images
    protect: false,

    // Shortcut to make content "modal" - disable keyboard navigtion, hide buttons, etc
    modal: false,

    image: {
      // Wait for images to load before displaying
      //   true  - wait for image to load and then display;
      //   false - display thumbnail and load the full-sized image over top,
      //           requires predefined image dimensions (`data-width` and `data-height` attributes)
      preload: false
    },

    ajax: {
      // Object containing settings for ajax request
      settings: {
        // This helps to indicate that request comes from the modal
        // Feel free to change naming
        data: {
          fancybox: true
        }
      }
    },

    iframe: {
      // Iframe template
      tpl: '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" allowfullscreen="allowfullscreen" allow="autoplay; fullscreen" src=""></iframe>',

      // Preload iframe before displaying it
      // This allows to calculate iframe content width and height
      // (note: Due to "Same Origin Policy", you can't get cross domain data).
      preload: true,

      // Custom CSS styling for iframe wrapping element
      // You can use this to set custom iframe dimensions
      css: {},

      // Iframe tag attributes
      attr: {
        scrolling: "auto"
      }
    },

    // For HTML5 video only
    video: {
      tpl: '<video class="fancybox-video" controls controlsList="nodownload" poster="{{poster}}">' +
        '<source src="{{src}}" type="{{format}}" />' +
        'Sorry, your browser doesn\'t support embedded videos, <a href="{{src}}">download</a> and watch with your favorite video player!' +
        "</video>",
      format: "", // custom video format
      autoStart: true
    },

    // Default content type if cannot be detected automatically
    defaultType: "image",

    // Open/close animation type
    // Possible values:
    //   false            - disable
    //   "zoom"           - zoom images from/to thumbnail
    //   "fade"
    //   "zoom-in-out"
    //
    animationEffect: "zoom",

    // Duration in ms for open/close animation
    animationDuration: 366,

    // Should image change opacity while zooming
    // If opacity is "auto", then opacity will be changed if image and thumbnail have different aspect ratios
    zoomOpacity: "auto",

    // Transition effect between slides
    //
    // Possible values:
    //   false            - disable
    //   "fade'
    //   "slide'
    //   "circular'
    //   "tube'
    //   "zoom-in-out'
    //   "rotate'
    //
    transitionEffect: "fade",

    // Duration in ms for transition animation
    transitionDuration: 366,

    // Custom CSS class for slide element
    slideClass: "",

    // Custom CSS class for layout
    baseClass: "",

    // Base template for layout
    baseTpl: '<div class="fancybox-container" role="dialog" tabindex="-1">' +
      '<div class="fancybox-bg"></div>' +
      '<div class="fancybox-inner">' +
      '<div class="fancybox-infobar"><span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span></div>' +
      '<div class="fancybox-toolbar">{{buttons}}</div>' +
      '<div class="fancybox-navigation">{{arrows}}</div>' +
      '<div class="fancybox-stage"></div>' +
      '<div class="fancybox-caption"><div class="fancybox-caption__body"></div></div>' +
      "</div>" +
      "</div>",

    // Loading indicator template
    spinnerTpl: '<div class="fancybox-loading"></div>',

    // Error message template
    errorTpl: '<div class="fancybox-error"><p>{{ERROR}}</p></div>',

    btnTpl: {
      download: '<a download data-fancybox-download class="fancybox-button fancybox-button--download" title="{{DOWNLOAD}}" href="javascript:;">' +
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z"/></svg>' +
        "</a>",

      zoom: '<button data-fancybox-zoom class="fancybox-button fancybox-button--zoom" title="{{ZOOM}}">' +
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z"/></svg>' +
        "</button>",

      close: '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}">' +
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z"/></svg>' +
        "</button>",

      // Arrows
      arrowLeft: '<button data-fancybox-prev class="fancybox-button fancybox-button--arrow_left" title="{{PREV}}">' +
        '<div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z"/></svg></div>' +
        "</button>",

      arrowRight: '<button data-fancybox-next class="fancybox-button fancybox-button--arrow_right" title="{{NEXT}}">' +
        '<div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z"/></svg></div>' +
        "</button>",

      // This small close button will be appended to your html/inline/ajax content by default,
      // if "smallBtn" option is not set to false
      smallBtn: '<button type="button" data-fancybox-close class="fancybox-button fancybox-close-small" title="{{CLOSE}}">' +
        '<svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24"><path d="M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z"/></svg>' +
        "</button>"
    },

    // Container is injected into this element
    parentEl: "body",

    // Hide browser vertical scrollbars; use at your own risk
    hideScrollbar: true,

    // Focus handling
    // ==============

    // Try to focus on the first focusable element after opening
    autoFocus: true,

    // Put focus back to active element after closing
    backFocus: true,

    // Do not let user to focus on element outside modal content
    trapFocus: true,

    // Module specific options
    // =======================

    fullScreen: {
      autoStart: false
    },

    // Set `touch: false` to disable panning/swiping
    touch: {
      vertical: true, // Allow to drag content vertically
      momentum: true // Continue movement after releasing mouse/touch when panning
    },

    // Hash value when initializing manually,
    // set `false` to disable hash change
    hash: null,

    // Customize or add new media types
    // Example:
    /*
      media : {
        youtube : {
          params : {
            autoplay : 0
          }
        }
      }
    */
    media: {},

    slideShow: {
      autoStart: false,
      speed: 3000
    },

    thumbs: {
      autoStart: false, // Display thumbnails on opening
      hideOnClose: true, // Hide thumbnail grid when closing animation starts
      parentEl: ".fancybox-container", // Container is injected into this element
      axis: "y" // Vertical (y) or horizontal (x) scrolling
    },

    // Use mousewheel to navigate gallery
    // If 'auto' - enabled for images only
    wheel: "auto",

    // Callbacks
    //==========

    // See Documentation/API/Events for more information
    // Example:
    /*
      afterShow: function( instance, current ) {
        console.info( 'Clicked element:' );
        console.info( current.opts.$orig );
      }
    */

    onInit: $.noop, // When instance has been initialized

    beforeLoad: $.noop, // Before the content of a slide is being loaded
    afterLoad: $.noop, // When the content of a slide is done loading

    beforeShow: $.noop, // Before open animation starts
    afterShow: $.noop, // When content is done loading and animating

    beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.
    afterClose: $.noop, // After instance has been closed

    onActivate: $.noop, // When instance is brought to front
    onDeactivate: $.noop, // When other instance has been activated

    // Interaction
    // ===========

    // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,
    // each option can be string or method that returns value.
    //
    // Possible values:
    //   "close"           - close instance
    //   "next"            - move to next gallery item
    //   "nextOrClose"     - move to next gallery item or close if gallery has only one item
    //   "toggleControls"  - show/hide controls
    //   "zoom"            - zoom image (if loaded)
    //   false             - do nothing

    // Clicked on the content
    clickContent: function (current, event) {
      return current.type === "image" ? "zoom" : false;
    },

    // Clicked on the slide
    clickSlide: "close",

    // Clicked on the background (backdrop) element;
    // if you have not changed the layout, then most likely you need to use `clickSlide` option
    clickOutside: "close",

    // Same as previous two, but for double click
    dblclickContent: false,
    dblclickSlide: false,
    dblclickOutside: false,

    // Custom options when mobile device is detected
    // =============================================

    mobile: {
      preventCaptionOverlap: false,
      idleTime: false,
      clickContent: function (current, event) {
        return current.type === "image" ? "toggleControls" : false;
      },
      clickSlide: function (current, event) {
        return current.type === "image" ? "toggleControls" : "close";
      },
      dblclickContent: function (current, event) {
        return current.type === "image" ? "zoom" : false;
      },
      dblclickSlide: function (current, event) {
        return current.type === "image" ? "zoom" : false;
      }
    },

    // Internationalization
    // ====================

    lang: "en",
    i18n: {
      en: {
        CLOSE: "Close",
        NEXT: "Next",
        PREV: "Previous",
        ERROR: "The requested content cannot be loaded. <br/> Please try again later.",
        PLAY_START: "Start slideshow",
        PLAY_STOP: "Pause slideshow",
        FULL_SCREEN: "Full screen",
        THUMBS: "Thumbnails",
        DOWNLOAD: "Download",
        SHARE: "Share",
        ZOOM: "Zoom"
      },
      de: {
        CLOSE: "Schlie&szlig;en",
        NEXT: "Weiter",
        PREV: "Zur&uuml;ck",
        ERROR: "Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es sp&auml;ter nochmal.",
        PLAY_START: "Diaschau starten",
        PLAY_STOP: "Diaschau beenden",
        FULL_SCREEN: "Vollbild",
        THUMBS: "Vorschaubilder",
        DOWNLOAD: "Herunterladen",
        SHARE: "Teilen",
        ZOOM: "Vergr&ouml;&szlig;ern"
      }
    }
  };

  // Few useful variables and methods
  // ================================

  var $W = $(window);
  var $D = $(document);

  var called = 0;

  // Check if an object is a jQuery object and not a native JavaScript object
  // ========================================================================
  var isQuery = function (obj) {
    return obj && obj.hasOwnProperty && obj instanceof $;
  };

  // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame"
  // ===============================================================================
  var requestAFrame = (function () {
    return (
      window.requestAnimationFrame ||
      window.webkitRequestAnimationFrame ||
      window.mozRequestAnimationFrame ||
      window.oRequestAnimationFrame ||
      // if all else fails, use setTimeout
      function (callback) {
        return window.setTimeout(callback, 1000 / 60);
      }
    );
  })();

  var cancelAFrame = (function () {
    return (
      window.cancelAnimationFrame ||
      window.webkitCancelAnimationFrame ||
      window.mozCancelAnimationFrame ||
      window.oCancelAnimationFrame ||
      function (id) {
        window.clearTimeout(id);
      }
    );
  })();

  // Detect the supported transition-end event property name
  // =======================================================
  var transitionEnd = (function () {
    var el = document.createElement("fakeelement"),
      t;

    var transitions = {
      transition: "transitionend",
      OTransition: "oTransitionEnd",
      MozTransition: "transitionend",
      WebkitTransition: "webkitTransitionEnd"
    };

    for (t in transitions) {
      if (el.style[t] !== undefined) {
        return transitions[t];
      }
    }

    return "transitionend";
  })();

  // Force redraw on an element.
  // This helps in cases where the browser doesn't redraw an updated element properly
  // ================================================================================
  var forceRedraw = function ($el) {
    return $el && $el.length && $el[0].offsetHeight;
  };

  // Exclude array (`buttons`) options from deep merging
  // ===================================================
  var mergeOpts = function (opts1, opts2) {
    var rez = $.extend(true, {}, opts1, opts2);

    $.each(opts2, function (key, value) {
      if ($.isArray(value)) {
        rez[key] = value;
      }
    });

    return rez;
  };

  // How much of an element is visible in viewport
  // =============================================

  var inViewport = function (elem) {
    var elemCenter, rez;

    if (!elem || elem.ownerDocument !== document) {
      return false;
    }

    $(".fancybox-container").css("pointer-events", "none");

    elemCenter = {
      x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,
      y: elem.getBoundingClientRect().top + elem.offsetHeight / 2
    };

    rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;

    $(".fancybox-container").css("pointer-events", "");

    return rez;
  };

  // Class definition
  // ================

  var FancyBox = function (content, opts, index) {
    var self = this;

    self.opts = mergeOpts({
      index: index
    }, $.fancybox.defaults);

    if ($.isPlainObject(opts)) {
      self.opts = mergeOpts(self.opts, opts);
    }

    if ($.fancybox.isMobile) {
      self.opts = mergeOpts(self.opts, self.opts.mobile);
    }

    self.id = self.opts.id || ++called;

    self.currIndex = parseInt(self.opts.index, 10) || 0;
    self.prevIndex = null;

    self.prevPos = null;
    self.currPos = 0;

    self.firstRun = true;

    // All group items
    self.group = [];

    // Existing slides (for current, next and previous gallery items)
    self.slides = {};

    // Create group elements
    self.addContent(content);

    if (!self.group.length) {
      return;
    }

    self.init();
  };

  $.extend(FancyBox.prototype, {
    // Create DOM structure
    // ====================

    init: function () {
      var self = this,
        firstItem = self.group[self.currIndex],
        firstItemOpts = firstItem.opts,
        $container,
        buttonStr;

      if (firstItemOpts.closeExisting) {
        $.fancybox.close(true);
      }

      // Hide scrollbars
      // ===============

      $("body").addClass("fancybox-active");

      if (
        !$.fancybox.getInstance() &&
        firstItemOpts.hideScrollbar !== false &&
        !$.fancybox.isMobile &&
        document.body.scrollHeight > window.innerHeight
      ) {
        $("head").append(
          '<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:' +
          (window.innerWidth - document.documentElement.clientWidth) +
          "px;}</style>"
        );

        $("body").addClass("compensate-for-scrollbar");
      }

      // Build html markup and set references
      // ====================================

      // Build html code for buttons and insert into main template
      buttonStr = "";

      $.each(firstItemOpts.buttons, function (index, value) {
        buttonStr += firstItemOpts.btnTpl[value] || "";
      });

      // Create markup from base template, it will be initially hidden to
      // avoid unnecessary work like painting while initializing is not complete
      $container = $(
          self.translate(
            self,
            firstItemOpts.baseTpl
            .replace("{{buttons}}", buttonStr)
            .replace("{{arrows}}", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)
          )
        )
        .attr("id", "fancybox-container-" + self.id)
        .addClass(firstItemOpts.baseClass)
        .data("FancyBox", self)
        .appendTo(firstItemOpts.parentEl);

      // Create object holding references to jQuery wrapped nodes
      self.$refs = {
        container: $container
      };

      ["bg", "inner", "infobar", "toolbar", "stage", "caption", "navigation"].forEach(function (item) {
        self.$refs[item] = $container.find(".fancybox-" + item);
      });

      self.trigger("onInit");

      // Enable events, deactive previous instances
      self.activate();

      // Build slides, load and reveal content
      self.jumpTo(self.currIndex);
    },

    // Simple i18n support - replaces object keys found in template
    // with corresponding values
    // ============================================================

    translate: function (obj, str) {
      var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;

      return str.replace(/\{\{(\w+)\}\}/g, function (match, n) {
        return arr[n] === undefined ? match : arr[n];
      });
    },

    // Populate current group with fresh content
    // Check if each object has valid type and content
    // ===============================================

    addContent: function (content) {
      var self = this,
        items = $.makeArray(content),
        thumbs;

      $.each(items, function (i, item) {
        var obj = {},
          opts = {},
          $item,
          type,
          found,
          src,
          srcParts;

        // Step 1 - Make sure we have an object
        // ====================================

        if ($.isPlainObject(item)) {
          // We probably have manual usage here, something like
          // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] )

          obj = item;
          opts = item.opts || item;
        } else if ($.type(item) === "object" && $(item).length) {
          // Here we probably have jQuery collection returned by some selector
          $item = $(item);

          // Support attributes like `data-options='{"touch" : false}'` and `data-touch='false'`
          opts = $item.data() || {};
          opts = $.extend(true, {}, opts, opts.options);

          // Here we store clicked element
          opts.$orig = $item;

          obj.src = self.opts.src || opts.src || $item.attr("href");

          // Assume that simple syntax is used, for example:
          //   `$.fancybox.open( $("#test"), {} );`
          if (!obj.type && !obj.src) {
            obj.type = "inline";
            obj.src = item;
          }
        } else {
          // Assume we have a simple html code, for example:
          //   $.fancybox.open( '<div><h1>Hi!</h1></div>' );
          obj = {
            type: "html",
            src: item + ""
          };
        }

        // Each gallery object has full collection of options
        obj.opts = $.extend(true, {}, self.opts, opts);

        // Do not merge buttons array
        if ($.isArray(opts.buttons)) {
          obj.opts.buttons = opts.buttons;
        }

        if ($.fancybox.isMobile && obj.opts.mobile) {
          obj.opts = mergeOpts(obj.opts, obj.opts.mobile);
        }

        // Step 2 - Make sure we have content type, if not - try to guess
        // ==============================================================

        type = obj.type || obj.opts.type;
        src = obj.src || "";

        if (!type && src) {
          if ((found = src.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))) {
            type = "video";

            if (!obj.opts.video.format) {
              obj.opts.video.format = "video/" + (found[1] === "ogv" ? "ogg" : found[1]);
            }
          } else if (src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)) {
            type = "image";
          } else if (src.match(/\.(pdf)((\?|#).*)?$/i)) {
            type = "iframe";
            obj = $.extend(true, obj, {
              contentType: "pdf",
              opts: {
                iframe: {
                  preload: false
                }
              }
            });
          } else if (src.charAt(0) === "#") {
            type = "inline";
          }
        }

        if (type) {
          obj.type = type;
        } else {
          self.trigger("objectNeedsType", obj);
        }

        if (!obj.contentType) {
          obj.contentType = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1 ? "html" : obj.type;
        }

        // Step 3 - Some adjustments
        // =========================

        obj.index = self.group.length;

        if (obj.opts.smallBtn == "auto") {
          obj.opts.smallBtn = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1;
        }

        if (obj.opts.toolbar === "auto") {
          obj.opts.toolbar = !obj.opts.smallBtn;
        }

        // Find thumbnail image, check if exists and if is in the viewport
        obj.$thumb = obj.opts.$thumb || null;

        if (obj.opts.$trigger && obj.index === self.opts.index) {
          obj.$thumb = obj.opts.$trigger.find("img:first");

          if (obj.$thumb.length) {
            obj.opts.$orig = obj.opts.$trigger;
          }
        }

        if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {
          obj.$thumb = obj.opts.$orig.find("img:first");
        }

        if (obj.$thumb && !obj.$thumb.length) {
          obj.$thumb = null;
        }

        obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);

        // "caption" is a "special" option, it can be used to customize caption per gallery item
        if ($.type(obj.opts.caption) === "function") {
          obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);
        }

        if ($.type(self.opts.caption) === "function") {
          obj.opts.caption = self.opts.caption.apply(item, [self, obj]);
        }

        // Make sure we have caption as a string or jQuery object
        if (!(obj.opts.caption instanceof $)) {
          obj.opts.caption = obj.opts.caption === undefined ? "" : obj.opts.caption + "";
        }

        // Check if url contains "filter" used to filter the content
        // Example: "ajax.html #something"
        if (obj.type === "ajax") {
          srcParts = src.split(/\s+/, 2);

          if (srcParts.length > 1) {
            obj.src = srcParts.shift();

            obj.opts.filter = srcParts.shift();
          }
        }

        // Hide all buttons and disable interactivity for modal items
        if (obj.opts.modal) {
          obj.opts = $.extend(true, obj.opts, {
            trapFocus: true,
            // Remove buttons
            infobar: 0,
            toolbar: 0,

            smallBtn: 0,

            // Disable keyboard navigation
            keyboard: 0,

            // Disable some modules
            slideShow: 0,
            fullScreen: 0,
            thumbs: 0,
            touch: 0,

            // Disable click event handlers
            clickContent: false,
            clickSlide: false,
            clickOutside: false,
            dblclickContent: false,
            dblclickSlide: false,
            dblclickOutside: false
          });
        }

        // Step 4 - Add processed object to group
        // ======================================

        self.group.push(obj);
      });

      // Update controls if gallery is already opened
      if (Object.keys(self.slides).length) {
        self.updateControls();

        // Update thumbnails, if needed
        thumbs = self.Thumbs;

        if (thumbs && thumbs.isActive) {
          thumbs.create();

          thumbs.focus();
        }
      }
    },

    // Attach an event handler functions for:
    //   - navigation buttons
    //   - browser scrolling, resizing;
    //   - focusing
    //   - keyboard
    //   - detecting inactivity
    // ======================================

    addEvents: function () {
      var self = this;

      self.removeEvents();

      // Make navigation elements clickable
      // ==================================

      self.$refs.container
        .on("click.fb-close", "[data-fancybox-close]", function (e) {
          e.stopPropagation();
          e.preventDefault();

          self.close(e);
        })
        .on("touchstart.fb-prev click.fb-prev", "[data-fancybox-prev]", function (e) {
          e.stopPropagation();
          e.preventDefault();

          self.previous();
        })
        .on("touchstart.fb-next click.fb-next", "[data-fancybox-next]", function (e) {
          e.stopPropagation();
          e.preventDefault();

          self.next();
        })
        .on("click.fb", "[data-fancybox-zoom]", function (e) {
          // Click handler for zoom button
          self[self.isScaledDown() ? "scaleToActual" : "scaleToFit"]();
        });

      // Handle page scrolling and browser resizing
      // ==========================================

      $W.on("orientationchange.fb resize.fb", function (e) {
        if (e && e.originalEvent && e.originalEvent.type === "resize") {
          if (self.requestId) {
            cancelAFrame(self.requestId);
          }

          self.requestId = requestAFrame(function () {
            self.update(e);
          });
        } else {
          if (self.current && self.current.type === "iframe") {
            self.$refs.stage.hide();
          }

          setTimeout(
            function () {
              self.$refs.stage.show();

              self.update(e);
            },
            $.fancybox.isMobile ? 600 : 250
          );
        }
      });

      $D.on("keydown.fb", function (e) {
        var instance = $.fancybox ? $.fancybox.getInstance() : null,
          current = instance.current,
          keycode = e.keyCode || e.which;

        // Trap keyboard focus inside of the modal
        // =======================================

        if (keycode == 9) {
          if (current.opts.trapFocus) {
            self.focus(e);
          }

          return;
        }

        // Enable keyboard navigation
        // ==========================

        if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is("input,textarea,video,audio,select")) {
          return;
        }

        // Backspace and Esc keys
        if (keycode === 8 || keycode === 27) {
          e.preventDefault();

          self.close(e);

          return;
        }

        // Left arrow and Up arrow
        if (keycode === 37 || keycode === 38) {
          e.preventDefault();

          self.previous();

          return;
        }

        // Righ arrow and Down arrow
        if (keycode === 39 || keycode === 40) {
          e.preventDefault();

          self.next();

          return;
        }

        self.trigger("afterKeydown", e, keycode);
      });

      // Hide controls after some inactivity period
      if (self.group[self.currIndex].opts.idleTime) {
        self.idleSecondsCounter = 0;

        $D.on(
          "mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",
          function (e) {
            self.idleSecondsCounter = 0;

            if (self.isIdle) {
              self.showControls();
            }

            self.isIdle = false;
          }
        );

        self.idleInterval = window.setInterval(function () {
          self.idleSecondsCounter++;

          if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {
            self.isIdle = true;
            self.idleSecondsCounter = 0;

            self.hideControls();
          }
        }, 1000);
      }
    },

    // Remove events added by the core
    // ===============================

    removeEvents: function () {
      var self = this;

      $W.off("orientationchange.fb resize.fb");
      $D.off("keydown.fb .fb-idle");

      this.$refs.container.off(".fb-close .fb-prev .fb-next");

      if (self.idleInterval) {
        window.clearInterval(self.idleInterval);

        self.idleInterval = null;
      }
    },

    // Change to previous gallery item
    // ===============================

    previous: function (duration) {
      return this.jumpTo(this.currPos - 1, duration);
    },

    // Change to next gallery item
    // ===========================

    next: function (duration) {
      return this.jumpTo(this.currPos + 1, duration);
    },

    // Switch to selected gallery item
    // ===============================

    jumpTo: function (pos, duration) {
      var self = this,
        groupLen = self.group.length,
        firstRun,
        isMoved,
        loop,
        current,
        previous,
        slidePos,
        stagePos,
        prop,
        diff;

      if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {
        return;
      }

      // Should loop?
      pos = parseInt(pos, 10);
      loop = self.current ? self.current.opts.loop : self.opts.loop;

      if (!loop && (pos < 0 || pos >= groupLen)) {
        return false;
      }

      // Check if opening for the first time; this helps to speed things up
      firstRun = self.firstRun = !Object.keys(self.slides).length;

      // Create slides
      previous = self.current;

      self.prevIndex = self.currIndex;
      self.prevPos = self.currPos;

      current = self.createSlide(pos);

      if (groupLen > 1) {
        if (loop || current.index < groupLen - 1) {
          self.createSlide(pos + 1);
        }

        if (loop || current.index > 0) {
          self.createSlide(pos - 1);
        }
      }

      self.current = current;
      self.currIndex = current.index;
      self.currPos = current.pos;

      self.trigger("beforeShow", firstRun);

      self.updateControls();

      // Validate duration length
      current.forcedDuration = undefined;

      if ($.isNumeric(duration)) {
        current.forcedDuration = duration;
      } else {
        duration = current.opts[firstRun ? "animationDuration" : "transitionDuration"];
      }

      duration = parseInt(duration, 10);

      // Check if user has swiped the slides or if still animating
      isMoved = self.isMoved(current);

      // Make sure current slide is visible
      current.$slide.addClass("fancybox-slide--current");

      // Fresh start - reveal container, current slide and start loading content
      if (firstRun) {
        if (current.opts.animationEffect && duration) {
          self.$refs.container.css("transition-duration", duration + "ms");
        }

        self.$refs.container.addClass("fancybox-is-open").trigger("focus");

        // Attempt to load content into slide
        // This will later call `afterLoad` -> `revealContent`
        self.loadSlide(current);

        self.preload("image");

        return;
      }

      // Get actual slide/stage positions (before cleaning up)
      slidePos = $.fancybox.getTranslate(previous.$slide);
      stagePos = $.fancybox.getTranslate(self.$refs.stage);

      // Clean up all slides
      $.each(self.slides, function (index, slide) {
        $.fancybox.stop(slide.$slide, true);
      });

      if (previous.pos !== current.pos) {
        previous.isComplete = false;
      }

      previous.$slide.removeClass("fancybox-slide--complete fancybox-slide--current");

      // If slides are out of place, then animate them to correct position
      if (isMoved) {
        // Calculate horizontal swipe distance
        diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);

        $.each(self.slides, function (index, slide) {
          slide.$slide.removeClass("fancybox-animated").removeClass(function (index, className) {
            return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
          });

          // Make sure that each slide is in equal distance
          // This is mostly needed for freshly added slides, because they are not yet positioned
          var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;

          $.fancybox.setTranslate(slide.$slide, {
            top: 0,
            left: leftPos - stagePos.left + diff
          });

          if (slide.pos !== current.pos) {
            slide.$slide.addClass("fancybox-slide--" + (slide.pos > current.pos ? "next" : "previous"));
          }

          // Redraw to make sure that transition will start
          forceRedraw(slide.$slide);

          // Animate the slide
          $.fancybox.animate(
            slide.$slide, {
              top: 0,
              left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter
            },
            duration,
            function () {
              slide.$slide
                .css({
                  transform: "",
                  opacity: ""
                })
                .removeClass("fancybox-slide--next fancybox-slide--previous");

              if (slide.pos === self.currPos) {
                self.complete();
              }
            }
          );
        });
      } else if (duration && current.opts.transitionEffect) {
        // Set transition effect for previously active slide
        prop = "fancybox-animated fancybox-fx-" + current.opts.transitionEffect;

        previous.$slide.addClass("fancybox-slide--" + (previous.pos > current.pos ? "next" : "previous"));

        $.fancybox.animate(
          previous.$slide,
          prop,
          duration,
          function () {
            previous.$slide.removeClass(prop).removeClass("fancybox-slide--next fancybox-slide--previous");
          },
          false
        );
      }

      if (current.isLoaded) {
        self.revealContent(current);
      } else {
        self.loadSlide(current);
      }

      self.preload("image");
    },

    // Create new "slide" element
    // These are gallery items  that are actually added to DOM
    // =======================================================

    createSlide: function (pos) {
      var self = this,
        $slide,
        index;

      index = pos % self.group.length;
      index = index < 0 ? self.group.length + index : index;

      if (!self.slides[pos] && self.group[index]) {
        $slide = $('<div class="fancybox-slide"></div>').appendTo(self.$refs.stage);

        self.slides[pos] = $.extend(true, {}, self.group[index], {
          pos: pos,
          $slide: $slide,
          isLoaded: false
        });

        self.updateSlide(self.slides[pos]);
      }

      return self.slides[pos];
    },

    // Scale image to the actual size of the image;
    // x and y values should be relative to the slide
    // ==============================================

    scaleToActual: function (x, y, duration) {
      var self = this,
        current = self.current,
        $content = current.$content,
        canvasWidth = $.fancybox.getTranslate(current.$slide).width,
        canvasHeight = $.fancybox.getTranslate(current.$slide).height,
        newImgWidth = current.width,
        newImgHeight = current.height,
        imgPos,
        posX,
        posY,
        scaleX,
        scaleY;

      if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) {
        return;
      }

      self.isAnimating = true;

      $.fancybox.stop($content);

      x = x === undefined ? canvasWidth * 0.5 : x;
      y = y === undefined ? canvasHeight * 0.5 : y;

      imgPos = $.fancybox.getTranslate($content);

      imgPos.top -= $.fancybox.getTranslate(current.$slide).top;
      imgPos.left -= $.fancybox.getTranslate(current.$slide).left;

      scaleX = newImgWidth / imgPos.width;
      scaleY = newImgHeight / imgPos.height;

      // Get center position for original image
      posX = canvasWidth * 0.5 - newImgWidth * 0.5;
      posY = canvasHeight * 0.5 - newImgHeight * 0.5;

      // Make sure image does not move away from edges
      if (newImgWidth > canvasWidth) {
        posX = imgPos.left * scaleX - (x * scaleX - x);

        if (posX > 0) {
          posX = 0;
        }

        if (posX < canvasWidth - newImgWidth) {
          posX = canvasWidth - newImgWidth;
        }
      }

      if (newImgHeight > canvasHeight) {
        posY = imgPos.top * scaleY - (y * scaleY - y);

        if (posY > 0) {
          posY = 0;
        }

        if (posY < canvasHeight - newImgHeight) {
          posY = canvasHeight - newImgHeight;
        }
      }

      self.updateCursor(newImgWidth, newImgHeight);

      $.fancybox.animate(
        $content, {
          top: posY,
          left: posX,
          scaleX: scaleX,
          scaleY: scaleY
        },
        duration || 366,
        function () {
          self.isAnimating = false;
        }
      );

      // Stop slideshow
      if (self.SlideShow && self.SlideShow.isActive) {
        self.SlideShow.stop();
      }
    },

    // Scale image to fit inside parent element
    // ========================================

    scaleToFit: function (duration) {
      var self = this,
        current = self.current,
        $content = current.$content,
        end;

      if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) {
        return;
      }

      self.isAnimating = true;

      $.fancybox.stop($content);

      end = self.getFitPos(current);

      self.updateCursor(end.width, end.height);

      $.fancybox.animate(
        $content, {
          top: end.top,
          left: end.left,
          scaleX: end.width / $content.width(),
          scaleY: end.height / $content.height()
        },
        duration || 366,
        function () {
          self.isAnimating = false;
        }
      );
    },

    // Calculate image size to fit inside viewport
    // ===========================================

    getFitPos: function (slide) {
      var self = this,
        $content = slide.$content,
        $slide = slide.$slide,
        width = slide.width || slide.opts.width,
        height = slide.height || slide.opts.height,
        maxWidth,
        maxHeight,
        minRatio,
        aspectRatio,
        rez = {};

      if (!slide.isLoaded || !$content || !$content.length) {
        return false;
      }

      maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;
      maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;

      maxWidth -=
        parseFloat($slide.css("paddingLeft")) +
        parseFloat($slide.css("paddingRight")) +
        parseFloat($content.css("marginLeft")) +
        parseFloat($content.css("marginRight"));

      maxHeight -=
        parseFloat($slide.css("paddingTop")) +
        parseFloat($slide.css("paddingBottom")) +
        parseFloat($content.css("marginTop")) +
        parseFloat($content.css("marginBottom"));

      if (!width || !height) {
        width = maxWidth;
        height = maxHeight;
      }

      minRatio = Math.min(1, maxWidth / width, maxHeight / height);

      width = minRatio * width;
      height = minRatio * height;

      // Adjust width/height to precisely fit into container
      if (width > maxWidth - 0.5) {
        width = maxWidth;
      }

      if (height > maxHeight - 0.5) {
        height = maxHeight;
      }

      if (slide.type === "image") {
        rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css("paddingTop"));
        rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css("paddingLeft"));
      } else if (slide.contentType === "video") {
        // Force aspect ratio for the video
        // "I say the whole world must learn of our peaceful ways… by force!"
        aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;

        if (height > width / aspectRatio) {
          height = width / aspectRatio;
        } else if (width > height * aspectRatio) {
          width = height * aspectRatio;
        }
      }

      rez.width = width;
      rez.height = height;

      return rez;
    },

    // Update content size and position for all slides
    // ==============================================

    update: function (e) {
      var self = this;

      $.each(self.slides, function (key, slide) {
        self.updateSlide(slide, e);
      });
    },

    // Update slide content position and size
    // ======================================

    updateSlide: function (slide, e) {
      var self = this,
        $content = slide && slide.$content,
        width = slide.width || slide.opts.width,
        height = slide.height || slide.opts.height,
        $slide = slide.$slide;

      // First, prevent caption overlap, if needed
      self.adjustCaption(slide);

      // Then resize content to fit inside the slide
      if ($content && (width || height || slide.contentType === "video") && !slide.hasError) {
        $.fancybox.stop($content);

        $.fancybox.setTranslate($content, self.getFitPos(slide));

        if (slide.pos === self.currPos) {
          self.isAnimating = false;

          self.updateCursor();
        }
      }

      // Then some adjustments
      self.adjustLayout(slide);

      if ($slide.length) {
        $slide.trigger("refresh");

        if (slide.pos === self.currPos) {
          self.$refs.toolbar
            .add(self.$refs.navigation.find(".fancybox-button--arrow_right"))
            .toggleClass("compensate-for-scrollbar", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);
        }
      }

      self.trigger("onUpdate", slide, e);
    },

    // Horizontally center slide
    // =========================

    centerSlide: function (duration) {
      var self = this,
        current = self.current,
        $slide = current.$slide;

      if (self.isClosing || !current) {
        return;
      }

      $slide.siblings().css({
        transform: "",
        opacity: ""
      });

      $slide
        .parent()
        .children()
        .removeClass("fancybox-slide--previous fancybox-slide--next");

      $.fancybox.animate(
        $slide, {
          top: 0,
          left: 0,
          opacity: 1
        },
        duration === undefined ? 0 : duration,
        function () {
          // Clean up
          $slide.css({
            transform: "",
            opacity: ""
          });

          if (!current.isComplete) {
            self.complete();
          }
        },
        false
      );
    },

    // Check if current slide is moved (swiped)
    // ========================================

    isMoved: function (slide) {
      var current = slide || this.current,
        slidePos,
        stagePos;

      if (!current) {
        return false;
      }

      stagePos = $.fancybox.getTranslate(this.$refs.stage);
      slidePos = $.fancybox.getTranslate(current.$slide);

      return (
        !current.$slide.hasClass("fancybox-animated") &&
        (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)
      );
    },

    // Update cursor style depending if content can be zoomed
    // ======================================================

    updateCursor: function (nextWidth, nextHeight) {
      var self = this,
        current = self.current,
        $container = self.$refs.container,
        canPan,
        isZoomable;

      if (!current || self.isClosing || !self.Guestures) {
        return;
      }

      $container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan");

      canPan = self.canPan(nextWidth, nextHeight);

      isZoomable = canPan ? true : self.isZoomable();

      $container.toggleClass("fancybox-is-zoomable", isZoomable);

      $("[data-fancybox-zoom]").prop("disabled", !isZoomable);

      if (canPan) {
        $container.addClass("fancybox-can-pan");
      } else if (
        isZoomable &&
        (current.opts.clickContent === "zoom" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == "zoom"))
      ) {
        $container.addClass("fancybox-can-zoomIn");
      } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== "video") {
        $container.addClass("fancybox-can-swipe");
      }
    },

    // Check if current slide is zoomable
    // ==================================

    isZoomable: function () {
      var self = this,
        current = self.current,
        fitPos;

      // Assume that slide is zoomable if:
      //   - image is still loading
      //   - actual size of the image is smaller than available area
      if (current && !self.isClosing && current.type === "image" && !current.hasError) {
        if (!current.isLoaded) {
          return true;
        }

        fitPos = self.getFitPos(current);

        if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {
          return true;
        }
      }

      return false;
    },

    // Check if current image dimensions are smaller than actual
    // =========================================================

    isScaledDown: function (nextWidth, nextHeight) {
      var self = this,
        rez = false,
        current = self.current,
        $content = current.$content;

      if (nextWidth !== undefined && nextHeight !== undefined) {
        rez = nextWidth < current.width && nextHeight < current.height;
      } else if ($content) {
        rez = $.fancybox.getTranslate($content);
        rez = rez.width < current.width && rez.height < current.height;
      }

      return rez;
    },

    // Check if image dimensions exceed parent element
    // ===============================================

    canPan: function (nextWidth, nextHeight) {
      var self = this,
        current = self.current,
        pos = null,
        rez = false;

      if (current.type === "image" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {
        rez = self.getFitPos(current);

        if (nextWidth !== undefined && nextHeight !== undefined) {
          pos = {
            width: nextWidth,
            height: nextHeight
          };
        } else if (current.isComplete) {
          pos = $.fancybox.getTranslate(current.$content);
        }

        if (pos && rez) {
          rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;
        }
      }

      return rez;
    },

    // Load content into the slide
    // ===========================

    loadSlide: function (slide) {
      var self = this,
        type,
        $slide,
        ajaxLoad;

      if (slide.isLoading || slide.isLoaded) {
        return;
      }

      slide.isLoading = true;

      if (self.trigger("beforeLoad", slide) === false) {
        slide.isLoading = false;

        return false;
      }

      type = slide.type;
      $slide = slide.$slide;

      $slide
        .off("refresh")
        .trigger("onReset")
        .addClass(slide.opts.slideClass);

      // Create content depending on the type
      switch (type) {
        case "image":
          self.setImage(slide);

          break;

        case "iframe":
          self.setIframe(slide);

          break;

        case "html":
          self.setContent(slide, slide.src || slide.content);

          break;

        case "video":
          self.setContent(
            slide,
            slide.opts.video.tpl
            .replace(/\{\{src\}\}/gi, slide.src)
            .replace("{{format}}", slide.opts.videoFormat || slide.opts.video.format || "")
            .replace("{{poster}}", slide.thumb || "")
          );

          break;

        case "inline":
          if ($(slide.src).length) {
            self.setContent(slide, $(slide.src));
          } else {
            self.setError(slide);
          }

          break;

        case "ajax":
          self.showLoading(slide);

          ajaxLoad = $.ajax(
            $.extend({}, slide.opts.ajax.settings, {
              url: slide.src,
              success: function (data, textStatus) {
                if (textStatus === "success") {
                  self.setContent(slide, data);
                }
              },
              error: function (jqXHR, textStatus) {
                if (jqXHR && textStatus !== "abort") {
                  self.setError(slide);
                }
              }
            })
          );

          $slide.one("onReset", function () {
            ajaxLoad.abort();
          });

          break;

        default:
          self.setError(slide);

          break;
      }

      return true;
    },

    // Use thumbnail image, if possible
    // ================================

    setImage: function (slide) {
      var self = this,
        ghost;

      // Check if need to show loading icon
      setTimeout(function () {
        var $img = slide.$image;

        if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {
          self.showLoading(slide);
        }
      }, 50);

      //Check if image has srcset
      self.checkSrcset(slide);

      // This will be wrapper containing both ghost and actual image
      slide.$content = $('<div class="fancybox-content"></div>')
        .addClass("fancybox-is-hidden")
        .appendTo(slide.$slide.addClass("fancybox-slide--image"));

      // If we have a thumbnail, we can display it while actual image is loading
      // Users will not stare at black screen and actual image will appear gradually
      if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {
        slide.width = slide.opts.width;
        slide.height = slide.opts.height;

        ghost = document.createElement("img");

        ghost.onerror = function () {
          $(this).remove();

          slide.$ghost = null;
        };

        ghost.onload = function () {
          self.afterLoad(slide);
        };

        slide.$ghost = $(ghost)
          .addClass("fancybox-image")
          .appendTo(slide.$content)
          .attr("src", slide.thumb);
      }

      // Start loading actual image
      self.setBigImage(slide);
    },

    // Check if image has srcset and get the source
    // ============================================
    checkSrcset: function (slide) {
      var srcset = slide.opts.srcset || slide.opts.image.srcset,
        found,
        temp,
        pxRatio,
        windowWidth;

      // If we have "srcset", then we need to find first matching "src" value.
      // This is necessary, because when you set an src attribute, the browser will preload the image
      // before any javascript or even CSS is applied.
      if (srcset) {
        pxRatio = window.devicePixelRatio || 1;
        windowWidth = window.innerWidth * pxRatio;

        temp = srcset.split(",").map(function (el) {
          var ret = {};

          el.trim()
            .split(/\s+/)
            .forEach(function (el, i) {
              var value = parseInt(el.substring(0, el.length - 1), 10);

              if (i === 0) {
                return (ret.url = el);
              }

              if (value) {
                ret.value = value;
                ret.postfix = el[el.length - 1];
              }
            });

          return ret;
        });

        // Sort by value
        temp.sort(function (a, b) {
          return a.value - b.value;
        });

        // Ok, now we have an array of all srcset values
        for (var j = 0; j < temp.length; j++) {
          var el = temp[j];

          if ((el.postfix === "w" && el.value >= windowWidth) || (el.postfix === "x" && el.value >= pxRatio)) {
            found = el;
            break;
          }
        }

        // If not found, take the last one
        if (!found && temp.length) {
          found = temp[temp.length - 1];
        }

        if (found) {
          slide.src = found.url;

          // If we have default width/height values, we can calculate height for matching source
          if (slide.width && slide.height && found.postfix == "w") {
            slide.height = (slide.width / slide.height) * found.value;
            slide.width = found.value;
          }

          slide.opts.srcset = srcset;
        }
      }
    },

    // Create full-size image
    // ======================

    setBigImage: function (slide) {
      var self = this,
        img = document.createElement("img"),
        $img = $(img);

      slide.$image = $img
        .one("error", function () {
          self.setError(slide);
        })
        .one("load", function () {
          var sizes;

          if (!slide.$ghost) {
            self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);

            self.afterLoad(slide);
          }

          if (self.isClosing) {
            return;
          }

          if (slide.opts.srcset) {
            sizes = slide.opts.sizes;

            if (!sizes || sizes === "auto") {
              sizes =
                (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? "100" : Math.round((slide.width / slide.height) * 100)) +
                "vw";
            }

            $img.attr("sizes", sizes).attr("srcset", slide.opts.srcset);
          }

          // Hide temporary image after some delay
          if (slide.$ghost) {
            setTimeout(function () {
              if (slide.$ghost && !self.isClosing) {
                slide.$ghost.hide();
              }
            }, Math.min(300, Math.max(1000, slide.height / 1600)));
          }

          self.hideLoading(slide);
        })
        .addClass("fancybox-image")
        .attr("src", slide.src)
        .appendTo(slide.$content);

      if ((img.complete || img.readyState == "complete") && $img.naturalWidth && $img.naturalHeight) {
        $img.trigger("load");
      } else if (img.error) {
        $img.trigger("error");
      }
    },

    // Computes the slide size from image size and maxWidth/maxHeight
    // ==============================================================

    resolveImageSlideSize: function (slide, imgWidth, imgHeight) {
      var maxWidth = parseInt(slide.opts.width, 10),
        maxHeight = parseInt(slide.opts.height, 10);

      // Sets the default values from the image
      slide.width = imgWidth;
      slide.height = imgHeight;

      if (maxWidth > 0) {
        slide.width = maxWidth;
        slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);
      }

      if (maxHeight > 0) {
        slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);
        slide.height = maxHeight;
      }
    },

    // Create iframe wrapper, iframe and bindings
    // ==========================================

    setIframe: function (slide) {
      var self = this,
        opts = slide.opts.iframe,
        $slide = slide.$slide,
        $iframe;

      slide.$content = $('<div class="fancybox-content' + (opts.preload ? " fancybox-is-hidden" : "") + '"></div>')
        .css(opts.css)
        .appendTo($slide);

      $slide.addClass("fancybox-slide--" + slide.contentType);

      slide.$iframe = $iframe = $(opts.tpl.replace(/\{rnd\}/g, new Date().getTime()))
        .attr(opts.attr)
        .appendTo(slide.$content);

      if (opts.preload) {
        self.showLoading(slide);

        // Unfortunately, it is not always possible to determine if iframe is successfully loaded
        // (due to browser security policy)

        $iframe.on("load.fb error.fb", function (e) {
          this.isReady = 1;

          slide.$slide.trigger("refresh");

          self.afterLoad(slide);
        });

        // Recalculate iframe content size
        // ===============================

        $slide.on("refresh.fb", function () {
          var $content = slide.$content,
            frameWidth = opts.css.width,
            frameHeight = opts.css.height,
            $contents,
            $body;

          if ($iframe[0].isReady !== 1) {
            return;
          }

          try {
            $contents = $iframe.contents();
            $body = $contents.find("body");
          } catch (ignore) {}

          // Calculate content dimensions, if it is accessible
          if ($body && $body.length && $body.children().length) {
            // Avoid scrolling to top (if multiple instances)
            $slide.css("overflow", "visible");

            $content.css({
              width: "100%",
              "max-width": "100%",
              height: "9999px"
            });

            if (frameWidth === undefined) {
              frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));
            }

            $content.css("width", frameWidth ? frameWidth : "").css("max-width", "");

            if (frameHeight === undefined) {
              frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));
            }

            $content.css("height", frameHeight ? frameHeight : "");

            $slide.css("overflow", "auto");
          }

          $content.removeClass("fancybox-is-hidden");
        });
      } else {
        self.afterLoad(slide);
      }

      $iframe.attr("src", slide.src);

      // Remove iframe if closing or changing gallery item
      $slide.one("onReset", function () {
        // This helps IE not to throw errors when closing
        try {
          $(this)
            .find("iframe")
            .hide()
            .unbind()
            .attr("src", "//about:blank");
        } catch (ignore) {}

        $(this)
          .off("refresh.fb")
          .empty();

        slide.isLoaded = false;
        slide.isRevealed = false;
      });
    },

    // Wrap and append content to the slide
    // ======================================

    setContent: function (slide, content) {
      var self = this;

      if (self.isClosing) {
        return;
      }

      self.hideLoading(slide);

      if (slide.$content) {
        $.fancybox.stop(slide.$content);
      }

      slide.$slide.empty();

      // If content is a jQuery object, then it will be moved to the slide.
      // The placeholder is created so we will know where to put it back.
      if (isQuery(content) && content.parent().length) {
        // Make sure content is not already moved to fancyBox
        if (content.hasClass("fancybox-content") || content.parent().hasClass("fancybox-content")) {
          content.parents(".fancybox-slide").trigger("onReset");
        }

        // Create temporary element marking original place of the content
        slide.$placeholder = $("<div>")
          .hide()
          .insertAfter(content);

        // Make sure content is visible
        content.css("display", "inline-block");
      } else if (!slide.hasError) {
        // If content is just a plain text, try to convert it to html
        if ($.type(content) === "string") {
          content = $("<div>")
            .append($.trim(content))
            .contents();
        }

        // If "filter" option is provided, then filter content
        if (slide.opts.filter) {
          content = $("<div>")
            .html(content)
            .find(slide.opts.filter);
        }
      }

      slide.$slide.one("onReset", function () {
        // Pause all html5 video/audio
        $(this)
          .find("video,audio")
          .trigger("pause");

        // Put content back
        if (slide.$placeholder) {
          slide.$placeholder.after(content.removeClass("fancybox-content").hide()).remove();

          slide.$placeholder = null;
        }

        // Remove custom close button
        if (slide.$smallBtn) {
          slide.$smallBtn.remove();

          slide.$smallBtn = null;
        }

        // Remove content and mark slide as not loaded
        if (!slide.hasError) {
          $(this).empty();

          slide.isLoaded = false;
          slide.isRevealed = false;
        }
      });

      $(content).appendTo(slide.$slide);

      if ($(content).is("video,audio")) {
        $(content).addClass("fancybox-video");

        $(content).wrap("<div></div>");

        slide.contentType = "video";

        slide.opts.width = slide.opts.width || $(content).attr("width");
        slide.opts.height = slide.opts.height || $(content).attr("height");
      }

      slide.$content = slide.$slide
        .children()
        .filter("div,form,main,video,audio,article,.fancybox-content")
        .first();

      slide.$content.siblings().hide();

      // Re-check if there is a valid content
      // (in some cases, ajax response can contain various elements or plain text)
      if (!slide.$content.length) {
        slide.$content = slide.$slide
          .wrapInner("<div></div>")
          .children()
          .first();
      }

      slide.$content.addClass("fancybox-content");

      slide.$slide.addClass("fancybox-slide--" + slide.contentType);

      self.afterLoad(slide);
    },

    // Display error message
    // =====================

    setError: function (slide) {
      slide.hasError = true;

      slide.$slide
        .trigger("onReset")
        .removeClass("fancybox-slide--" + slide.contentType)
        .addClass("fancybox-slide--error");

      slide.contentType = "html";

      this.setContent(slide, this.translate(slide, slide.opts.errorTpl));

      if (slide.pos === this.currPos) {
        this.isAnimating = false;
      }
    },

    // Show loading icon inside the slide
    // ==================================

    showLoading: function (slide) {
      var self = this;

      slide = slide || self.current;

      if (slide && !slide.$spinner) {
        slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))
          .appendTo(slide.$slide)
          .hide()
          .fadeIn("fast");
      }
    },

    // Remove loading icon from the slide
    // ==================================

    hideLoading: function (slide) {
      var self = this;

      slide = slide || self.current;

      if (slide && slide.$spinner) {
        slide.$spinner.stop().remove();

        delete slide.$spinner;
      }
    },

    // Adjustments after slide content has been loaded
    // ===============================================

    afterLoad: function (slide) {
      var self = this;

      if (self.isClosing) {
        return;
      }

      slide.isLoading = false;
      slide.isLoaded = true;

      self.trigger("afterLoad", slide);

      self.hideLoading(slide);

      // Add small close button
      if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {
        slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);
      }

      // Disable right click
      if (slide.opts.protect && slide.$content && !slide.hasError) {
        slide.$content.on("contextmenu.fb", function (e) {
          if (e.button == 2) {
            e.preventDefault();
          }

          return true;
        });

        // Add fake element on top of the image
        // This makes a bit harder for user to select image
        if (slide.type === "image") {
          $('<div class="fancybox-spaceball"></div>').appendTo(slide.$content);
        }
      }

      self.adjustCaption(slide);

      self.adjustLayout(slide);

      if (slide.pos === self.currPos) {
        self.updateCursor();
      }

      self.revealContent(slide);
    },

    // Prevent caption overlap,
    // fix css inconsistency across browsers
    // =====================================

    adjustCaption: function (slide) {
      var self = this,
        current = slide || self.current,
        caption = current.opts.caption,
        preventOverlap = current.opts.preventCaptionOverlap,
        $caption = self.$refs.caption,
        $clone,
        captionH = false;

      $caption.toggleClass("fancybox-caption--separate", preventOverlap);

      if (preventOverlap && caption && caption.length) {
        if (current.pos !== self.currPos) {
          $clone = $caption.clone().appendTo($caption.parent());

          $clone
            .children()
            .eq(0)
            .empty()
            .html(caption);

          captionH = $clone.outerHeight(true);

          $clone.empty().remove();
        } else if (self.$caption) {
          captionH = self.$caption.outerHeight(true);
        }

        current.$slide.css("padding-bottom", captionH || "");
      }
    },

    // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):
    // https://bugzilla.mozilla.org/show_bug.cgi?id=748518
    // ====================================================================================

    adjustLayout: function (slide) {
      var self = this,
        current = slide || self.current,
        scrollHeight,
        marginBottom,
        inlinePadding,
        actualPadding;

      if (current.isLoaded && current.opts.disableLayoutFix !== true) {
        current.$content.css("margin-bottom", "");

        // If we would always set margin-bottom for the content,
        // then it would potentially break vertical align
        if (current.$content.outerHeight() > current.$slide.height() + 0.5) {
          inlinePadding = current.$slide[0].style["padding-bottom"];
          actualPadding = current.$slide.css("padding-bottom");

          if (parseFloat(actualPadding) > 0) {
            scrollHeight = current.$slide[0].scrollHeight;

            current.$slide.css("padding-bottom", 0);

            if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {
              marginBottom = actualPadding;
            }

            current.$slide.css("padding-bottom", inlinePadding);
          }
        }

        current.$content.css("margin-bottom", marginBottom);
      }
    },

    // Make content visible
    // This method is called right after content has been loaded or
    // user navigates gallery and transition should start
    // ============================================================

    revealContent: function (slide) {
      var self = this,
        $slide = slide.$slide,
        end = false,
        start = false,
        isMoved = self.isMoved(slide),
        isRevealed = slide.isRevealed,
        effect,
        effectClassName,
        duration,
        opacity;

      slide.isRevealed = true;

      effect = slide.opts[self.firstRun ? "animationEffect" : "transitionEffect"];
      duration = slide.opts[self.firstRun ? "animationDuration" : "transitionDuration"];

      duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);

      if (isMoved || slide.pos !== self.currPos || !duration) {
        effect = false;
      }

      // Check if can zoom
      if (effect === "zoom") {
        if (slide.pos === self.currPos && duration && slide.type === "image" && !slide.hasError && (start = self.getThumbPos(slide))) {
          end = self.getFitPos(slide);
        } else {
          effect = "fade";
        }
      }

      // Zoom animation
      // ==============
      if (effect === "zoom") {
        self.isAnimating = true;

        end.scaleX = end.width / start.width;
        end.scaleY = end.height / start.height;

        // Check if we need to animate opacity
        opacity = slide.opts.zoomOpacity;

        if (opacity == "auto") {
          opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;
        }

        if (opacity) {
          start.opacity = 0.1;
          end.opacity = 1;
        }

        // Draw image at start position
        $.fancybox.setTranslate(slide.$content.removeClass("fancybox-is-hidden"), start);

        forceRedraw(slide.$content);

        // Start animation
        $.fancybox.animate(slide.$content, end, duration, function () {
          self.isAnimating = false;

          self.complete();
        });

        return;
      }

      self.updateSlide(slide);

      // Simply show content if no effect
      // ================================
      if (!effect) {
        slide.$content.removeClass("fancybox-is-hidden");

        if (!isRevealed && isMoved && slide.type === "image" && !slide.hasError) {
          slide.$content.hide().fadeIn("fast");
        }

        if (slide.pos === self.currPos) {
          self.complete();
        }

        return;
      }

      // Prepare for CSS transiton
      // =========================
      $.fancybox.stop($slide);

      //effectClassName = "fancybox-animated fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-fx-" + effect;
      effectClassName = "fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-animated fancybox-fx-" + effect;

      $slide.addClass(effectClassName).removeClass("fancybox-slide--current"); //.addClass(effectClassName);

      slide.$content.removeClass("fancybox-is-hidden");

      // Force reflow
      forceRedraw($slide);

      if (slide.type !== "image") {
        slide.$content.hide().show(0);
      }

      $.fancybox.animate(
        $slide,
        "fancybox-slide--current",
        duration,
        function () {
          $slide.removeClass(effectClassName).css({
            transform: "",
            opacity: ""
          });

          if (slide.pos === self.currPos) {
            self.complete();
          }
        },
        true
      );
    },

    // Check if we can and have to zoom from thumbnail
    //================================================

    getThumbPos: function (slide) {
      var rez = false,
        $thumb = slide.$thumb,
        thumbPos,
        btw,
        brw,
        bbw,
        blw;

      if (!$thumb || !inViewport($thumb[0])) {
        return false;
      }

      thumbPos = $.fancybox.getTranslate($thumb);

      btw = parseFloat($thumb.css("border-top-width") || 0);
      brw = parseFloat($thumb.css("border-right-width") || 0);
      bbw = parseFloat($thumb.css("border-bottom-width") || 0);
      blw = parseFloat($thumb.css("border-left-width") || 0);

      rez = {
        top: thumbPos.top + btw,
        left: thumbPos.left + blw,
        width: thumbPos.width - brw - blw,
        height: thumbPos.height - btw - bbw,
        scaleX: 1,
        scaleY: 1
      };

      return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;
    },

    // Final adjustments after current gallery item is moved to position
    // and it`s content is loaded
    // ==================================================================

    complete: function () {
      var self = this,
        current = self.current,
        slides = {},
        $el;

      if (self.isMoved() || !current.isLoaded) {
        return;
      }

      if (!current.isComplete) {
        current.isComplete = true;

        current.$slide.siblings().trigger("onReset");

        self.preload("inline");

        // Trigger any CSS transiton inside the slide
        forceRedraw(current.$slide);

        current.$slide.addClass("fancybox-slide--complete");

        // Remove unnecessary slides
        $.each(self.slides, function (key, slide) {
          if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {
            slides[slide.pos] = slide;
          } else if (slide) {
            $.fancybox.stop(slide.$slide);

            slide.$slide.off().remove();
          }
        });

        self.slides = slides;
      }

      self.isAnimating = false;

      self.updateCursor();

      self.trigger("afterShow");

      // Autoplay first html5 video/audio
      if (!!current.opts.video.autoStart) {
        current.$slide
          .find("video,audio")
          .filter(":visible:first")
          .trigger("play")
          .one("ended", function () {
            if (Document.exitFullscreen) {
              Document.exitFullscreen();
            } else if (this.webkitExitFullscreen) {
              this.webkitExitFullscreen();
            }

            self.next();
          });
      }

      // Try to focus on the first focusable element
      if (current.opts.autoFocus && current.contentType === "html") {
        // Look for the first input with autofocus attribute
        $el = current.$content.find("input[autofocus]:enabled:visible:first");

        if ($el.length) {
          $el.trigger("focus");
        } else {
          self.focus(null, true);
        }
      }

      // Avoid jumping
      current.$slide.scrollTop(0).scrollLeft(0);
    },

    // Preload next and previous slides
    // ================================

    preload: function (type) {
      var self = this,
        prev,
        next;

      if (self.group.length < 2) {
        return;
      }

      next = self.slides[self.currPos + 1];
      prev = self.slides[self.currPos - 1];

      if (prev && prev.type === type) {
        self.loadSlide(prev);
      }

      if (next && next.type === type) {
        self.loadSlide(next);
      }
    },

    // Try to find and focus on the first focusable element
    // ====================================================

    focus: function (e, firstRun) {
      var self = this,
        focusableStr = [
          "a[href]",
          "area[href]",
          'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',
          "select:not([disabled]):not([aria-hidden])",
          "textarea:not([disabled]):not([aria-hidden])",
          "button:not([disabled]):not([aria-hidden])",
          "iframe",
          "object",
          "embed",
          "video",
          "audio",
          "[contenteditable]",
          '[tabindex]:not([tabindex^="-"])'
        ].join(","),
        focusableItems,
        focusedItemIndex;

      if (self.isClosing) {
        return;
      }

      if (e || !self.current || !self.current.isComplete) {
        // Focus on any element inside fancybox
        focusableItems = self.$refs.container.find("*:visible");
      } else {
        // Focus inside current slide
        focusableItems = self.current.$slide.find("*:visible" + (firstRun ? ":not(.fancybox-close-small)" : ""));
      }

      focusableItems = focusableItems.filter(focusableStr).filter(function () {
        return $(this).css("visibility") !== "hidden" && !$(this).hasClass("disabled");
      });

      if (focusableItems.length) {
        focusedItemIndex = focusableItems.index(document.activeElement);

        if (e && e.shiftKey) {
          // Back tab
          if (focusedItemIndex < 0 || focusedItemIndex == 0) {
            e.preventDefault();

            focusableItems.eq(focusableItems.length - 1).trigger("focus");
          }
        } else {
          // Outside or Forward tab
          if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {
            if (e) {
              e.preventDefault();
            }

            focusableItems.eq(0).trigger("focus");
          }
        }
      } else {
        self.$refs.container.trigger("focus");
      }
    },

    // Activates current instance - brings container to the front and enables keyboard,
    // notifies other instances about deactivating
    // =================================================================================

    activate: function () {
      var self = this;

      // Deactivate all instances
      $(".fancybox-container").each(function () {
        var instance = $(this).data("FancyBox");

        // Skip self and closing instances
        if (instance && instance.id !== self.id && !instance.isClosing) {
          instance.trigger("onDeactivate");

          instance.removeEvents();

          instance.isVisible = false;
        }
      });

      self.isVisible = true;

      if (self.current || self.isIdle) {
        self.update();

        self.updateControls();
      }

      self.trigger("onActivate");

      self.addEvents();
    },

    // Start closing procedure
    // This will start "zoom-out" animation if needed and clean everything up afterwards
    // =================================================================================

    close: function (e, d) {
      var self = this,
        current = self.current,
        effect,
        duration,
        $content,
        domRect,
        opacity,
        start,
        end;

      var done = function () {
        self.cleanUp(e);
      };

      if (self.isClosing) {
        return false;
      }

      self.isClosing = true;

      // If beforeClose callback prevents closing, make sure content is centered
      if (self.trigger("beforeClose", e) === false) {
        self.isClosing = false;

        requestAFrame(function () {
          self.update();
        });

        return false;
      }

      // Remove all events
      // If there are multiple instances, they will be set again by "activate" method
      self.removeEvents();

      $content = current.$content;
      effect = current.opts.animationEffect;
      duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;

      current.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated");

      if (e !== true) {
        $.fancybox.stop(current.$slide);
      } else {
        effect = false;
      }

      // Remove other slides
      current.$slide
        .siblings()
        .trigger("onReset")
        .remove();

      // Trigger animations
      if (duration) {
        self.$refs.container
          .removeClass("fancybox-is-open")
          .addClass("fancybox-is-closing")
          .css("transition-duration", duration + "ms");
      }

      // Clean up
      self.hideLoading(current);

      self.hideControls(true);

      self.updateCursor();

      // Check if possible to zoom-out
      if (
        effect === "zoom" &&
        !($content && duration && current.type === "image" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))
      ) {
        effect = "fade";
      }

      if (effect === "zoom") {
        $.fancybox.stop($content);

        domRect = $.fancybox.getTranslate($content);

        start = {
          top: domRect.top,
          left: domRect.left,
          scaleX: domRect.width / end.width,
          scaleY: domRect.height / end.height,
          width: end.width,
          height: end.height
        };

        // Check if we need to animate opacity
        opacity = current.opts.zoomOpacity;

        if (opacity == "auto") {
          opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;
        }

        if (opacity) {
          end.opacity = 0;
        }

        $.fancybox.setTranslate($content, start);

        forceRedraw($content);

        $.fancybox.animate($content, end, duration, done);

        return true;
      }

      if (effect && duration) {
        $.fancybox.animate(
          current.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),
          "fancybox-animated fancybox-fx-" + effect,
          duration,
          done
        );
      } else {
        // If skip animation
        if (e === true) {
          setTimeout(done, duration);
        } else {
          done();
        }
      }

      return true;
    },

    // Final adjustments after removing the instance
    // =============================================

    cleanUp: function (e) {
      var self = this,
        instance,
        $focus = self.current.opts.$orig,
        x,
        y;

      self.current.$slide.trigger("onReset");

      self.$refs.container.empty().remove();

      self.trigger("afterClose", e);

      // Place back focus
      if (!!self.current.opts.backFocus) {
        if (!$focus || !$focus.length || !$focus.is(":visible")) {
          $focus = self.$trigger;
        }

        if ($focus && $focus.length) {
          x = window.scrollX;
          y = window.scrollY;

          $focus.trigger("focus");

          $("html, body")
            .scrollTop(y)
            .scrollLeft(x);
        }
      }

      self.current = null;

      // Check if there are other instances
      instance = $.fancybox.getInstance();

      if (instance) {
        instance.activate();
      } else {
        $("body").removeClass("fancybox-active compensate-for-scrollbar");

        $("#fancybox-style-noscroll").remove();
      }
    },

    // Call callback and trigger an event
    // ==================================

    trigger: function (name, slide) {
      var args = Array.prototype.slice.call(arguments, 1),
        self = this,
        obj = slide && slide.opts ? slide : self.current,
        rez;

      if (obj) {
        args.unshift(obj);
      } else {
        obj = self;
      }

      args.unshift(self);

      if ($.isFunction(obj.opts[name])) {
        rez = obj.opts[name].apply(obj, args);
      }

      if (rez === false) {
        return rez;
      }

      if (name === "afterClose" || !self.$refs) {
        $D.trigger(name + ".fb", args);
      } else {
        self.$refs.container.trigger(name + ".fb", args);
      }
    },

    // Update infobar values, navigation button states and reveal caption
    // ==================================================================

    updateControls: function () {
      var self = this,
        current = self.current,
        index = current.index,
        $container = self.$refs.container,
        $caption = self.$refs.caption,
        caption = current.opts.caption;

      // Recalculate content dimensions
      current.$slide.trigger("refresh");

      // Set caption
      if (caption && caption.length) {
        self.$caption = $caption;

        $caption
          .children()
          .eq(0)
          .html(caption);
      } else {
        self.$caption = null;
      }

      if (!self.hasHiddenControls && !self.isIdle) {
        self.showControls();
      }

      // Update info and navigation elements
      $container.find("[data-fancybox-count]").html(self.group.length);
      $container.find("[data-fancybox-index]").html(index + 1);

      $container.find("[data-fancybox-prev]").prop("disabled", !current.opts.loop && index <= 0);
      $container.find("[data-fancybox-next]").prop("disabled", !current.opts.loop && index >= self.group.length - 1);

      if (current.type === "image") {
        // Re-enable buttons; update download button source
        $container
          .find("[data-fancybox-zoom]")
          .show()
          .end()
          .find("[data-fancybox-download]")
          .attr("href", current.opts.image.src || current.src)
          .show();
      } else if (current.opts.toolbar) {
        $container.find("[data-fancybox-download],[data-fancybox-zoom]").hide();
      }

      // Make sure focus is not on disabled button/element
      if ($(document.activeElement).is(":hidden,[disabled]")) {
        self.$refs.container.trigger("focus");
      }
    },

    // Hide toolbar and caption
    // ========================

    hideControls: function (andCaption) {
      var self = this,
        arr = ["infobar", "toolbar", "nav"];

      if (andCaption || !self.current.opts.preventCaptionOverlap) {
        arr.push("caption");
      }

      this.$refs.container.removeClass(
        arr
        .map(function (i) {
          return "fancybox-show-" + i;
        })
        .join(" ")
      );

      this.hasHiddenControls = true;
    },

    showControls: function () {
      var self = this,
        opts = self.current ? self.current.opts : self.opts,
        $container = self.$refs.container;

      self.hasHiddenControls = false;
      self.idleSecondsCounter = 0;

      $container
        .toggleClass("fancybox-show-toolbar", !!(opts.toolbar && opts.buttons))
        .toggleClass("fancybox-show-infobar", !!(opts.infobar && self.group.length > 1))
        .toggleClass("fancybox-show-caption", !!self.$caption)
        .toggleClass("fancybox-show-nav", !!(opts.arrows && self.group.length > 1))
        .toggleClass("fancybox-is-modal", !!opts.modal);
    },

    // Toggle toolbar and caption
    // ==========================

    toggleControls: function () {
      if (this.hasHiddenControls) {
        this.showControls();
      } else {
        this.hideControls();
      }
    }
  });

  $.fancybox = {
    version: "3.5.7",
    defaults: defaults,

    // Get current instance and execute a command.
    //
    // Examples of usage:
    //
    //   $instance = $.fancybox.getInstance();
    //   $.fancybox.getInstance().jumpTo( 1 );
    //   $.fancybox.getInstance( 'jumpTo', 1 );
    //   $.fancybox.getInstance( function() {
    //       console.info( this.currIndex );
    //   });
    // ======================================================

    getInstance: function (command) {
      var instance = $('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),
        args = Array.prototype.slice.call(arguments, 1);

      if (instance instanceof FancyBox) {
        if ($.type(command) === "string") {
          instance[command].apply(instance, args);
        } else if ($.type(command) === "function") {
          command.apply(instance, args);
        }

        return instance;
      }

      return false;
    },

    // Create new instance
    // ===================

    open: function (items, opts, index) {
      return new FancyBox(items, opts, index);
    },

    // Close current or all instances
    // ==============================

    close: function (all) {
      var instance = this.getInstance();

      if (instance) {
        instance.close();

        // Try to find and close next instance
        if (all === true) {
          this.close(all);
        }
      }
    },

    // Close all instances and unbind all events
    // =========================================

    destroy: function () {
      this.close(true);

      $D.add("body").off("click.fb-start", "**");
    },

    // Try to detect mobile devices
    // ============================

    isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),

    // Detect if 'translate3d' support is available
    // ============================================

    use3d: (function () {
      var div = document.createElement("div");

      return (
        window.getComputedStyle &&
        window.getComputedStyle(div) &&
        window.getComputedStyle(div).getPropertyValue("transform") &&
        !(document.documentMode && document.documentMode < 11)
      );
    })(),

    // Helper function to get current visual state of an element
    // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]
    // =====================================================================

    getTranslate: function ($el) {
      var domRect;

      if (!$el || !$el.length) {
        return false;
      }

      domRect = $el[0].getBoundingClientRect();

      return {
        top: domRect.top || 0,
        left: domRect.left || 0,
        width: domRect.width,
        height: domRect.height,
        opacity: parseFloat($el.css("opacity"))
      };
    },

    // Shortcut for setting "translate3d" properties for element
    // Can set be used to set opacity, too
    // ========================================================

    setTranslate: function ($el, props) {
      var str = "",
        css = {};

      if (!$el || !props) {
        return;
      }

      if (props.left !== undefined || props.top !== undefined) {
        str =
          (props.left === undefined ? $el.position().left : props.left) +
          "px, " +
          (props.top === undefined ? $el.position().top : props.top) +
          "px";

        if (this.use3d) {
          str = "translate3d(" + str + ", 0px)";
        } else {
          str = "translate(" + str + ")";
        }
      }

      if (props.scaleX !== undefined && props.scaleY !== undefined) {
        str += " scale(" + props.scaleX + ", " + props.scaleY + ")";
      } else if (props.scaleX !== undefined) {
        str += " scaleX(" + props.scaleX + ")";
      }

      if (str.length) {
        css.transform = str;
      }

      if (props.opacity !== undefined) {
        css.opacity = props.opacity;
      }

      if (props.width !== undefined) {
        css.width = props.width;
      }

      if (props.height !== undefined) {
        css.height = props.height;
      }

      return $el.css(css);
    },

    // Simple CSS transition handler
    // =============================

    animate: function ($el, to, duration, callback, leaveAnimationName) {
      var self = this,
        from;

      if ($.isFunction(duration)) {
        callback = duration;
        duration = null;
      }

      self.stop($el);

      from = self.getTranslate($el);

      $el.on(transitionEnd, function (e) {
        // Skip events from child elements and z-index change
        if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == "z-index")) {
          return;
        }

        self.stop($el);

        if ($.isNumeric(duration)) {
          $el.css("transition-duration", "");
        }

        if ($.isPlainObject(to)) {
          if (to.scaleX !== undefined && to.scaleY !== undefined) {
            self.setTranslate($el, {
              top: to.top,
              left: to.left,
              width: from.width * to.scaleX,
              height: from.height * to.scaleY,
              scaleX: 1,
              scaleY: 1
            });
          }
        } else if (leaveAnimationName !== true) {
          $el.removeClass(to);
        }

        if ($.isFunction(callback)) {
          callback(e);
        }
      });

      if ($.isNumeric(duration)) {
        $el.css("transition-duration", duration + "ms");
      }

      // Start animation by changing CSS properties or class name
      if ($.isPlainObject(to)) {
        if (to.scaleX !== undefined && to.scaleY !== undefined) {
          delete to.width;
          delete to.height;

          if ($el.parent().hasClass("fancybox-slide--image")) {
            $el.parent().addClass("fancybox-is-scaling");
          }
        }

        $.fancybox.setTranslate($el, to);
      } else {
        $el.addClass(to);
      }

      // Make sure that `transitionend` callback gets fired
      $el.data(
        "timer",
        setTimeout(function () {
          $el.trigger(transitionEnd);
        }, duration + 33)
      );
    },

    stop: function ($el, callCallback) {
      if ($el && $el.length) {
        clearTimeout($el.data("timer"));

        if (callCallback) {
          $el.trigger(transitionEnd);
        }

        $el.off(transitionEnd).css("transition-duration", "");

        $el.parent().removeClass("fancybox-is-scaling");
      }
    }
  };

  // Default click handler for "fancyboxed" links
  // ============================================

  function _run(e, opts) {
    var items = [],
      index = 0,
      $target,
      value,
      instance;

    // Avoid opening multiple times
    if (e && e.isDefaultPrevented()) {
      return;
    }

    e.preventDefault();

    opts = opts || {};

    if (e && e.data) {
      opts = mergeOpts(e.data.options, opts);
    }

    $target = opts.$target || $(e.currentTarget).trigger("blur");
    instance = $.fancybox.getInstance();

    if (instance && instance.$trigger && instance.$trigger.is($target)) {
      return;
    }

    if (opts.selector) {
      items = $(opts.selector);
    } else {
      // Get all related items and find index for clicked one
      value = $target.attr("data-fancybox") || "";

      if (value) {
        items = e.data ? e.data.items : [];
        items = items.length ? items.filter('[data-fancybox="' + value + '"]') : $('[data-fancybox="' + value + '"]');
      } else {
        items = [$target];
      }
    }

    index = $(items).index($target);

    // Sometimes current item can not be found
    if (index < 0) {
      index = 0;
    }

    instance = $.fancybox.open(items, opts, index);

    // Save last active element
    instance.$trigger = $target;
  }

  // Create a jQuery plugin
  // ======================

  $.fn.fancybox = function (options) {
    var selector;

    options = options || {};
    selector = options.selector || false;

    if (selector) {
      // Use body element instead of document so it executes first
      $("body")
        .off("click.fb-start", selector)
        .on("click.fb-start", selector, {
          options: options
        }, _run);
    } else {
      this.off("click.fb-start").on(
        "click.fb-start", {
          items: this,
          options: options
        },
        _run
      );
    }

    return this;
  };

  // Self initializing plugin for all elements having `data-fancybox` attribute
  // ==========================================================================

  $D.on("click.fb-start", "[data-fancybox]", _run);

  // Enable "trigger elements"
  // =========================

  $D.on("click.fb-start", "[data-fancybox-trigger]", function (e) {
    $('[data-fancybox="' + $(this).attr("data-fancybox-trigger") + '"]')
      .eq($(this).attr("data-fancybox-index") || 0)
      .trigger("click.fb-start", {
        $trigger: $(this)
      });
  });

  // Track focus event for better accessibility styling
  // ==================================================
  (function () {
    var buttonStr = ".fancybox-button",
      focusStr = "fancybox-focus",
      $pressed = null;

    $D.on("mousedown mouseup focus blur", buttonStr, function (e) {
      switch (e.type) {
        case "mousedown":
          $pressed = $(this);
          break;
        case "mouseup":
          $pressed = null;
          break;
        case "focusin":
          $(buttonStr).removeClass(focusStr);

          if (!$(this).is($pressed) && !$(this).is("[disabled]")) {
            $(this).addClass(focusStr);
          }
          break;
        case "focusout":
          $(buttonStr).removeClass(focusStr);
          break;
      }
    });
  })();
})(window, document, jQuery);
// ==========================================================================
//
// Media
// Adds additional media type support
//
// ==========================================================================
(function ($) {
  "use strict";

  // Object containing properties for each media type
  var defaults = {
    youtube: {
      matcher: /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,
      params: {
        autoplay: 1,
        autohide: 1,
        fs: 1,
        rel: 0,
        hd: 1,
        wmode: "transparent",
        enablejsapi: 1,
        html5: 1
      },
      paramPlace: 8,
      type: "iframe",
      url: "https://www.youtube-nocookie.com/embed/$4",
      thumb: "https://img.youtube.com/vi/$4/hqdefault.jpg"
    },

    vimeo: {
      matcher: /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,
      params: {
        autoplay: 1,
        hd: 1,
        show_title: 1,
        show_byline: 1,
        show_portrait: 0,
        fullscreen: 1
      },
      paramPlace: 3,
      type: "iframe",
      url: "//player.vimeo.com/video/$2"
    },

    instagram: {
      matcher: /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
      type: "image",
      url: "//$1/p/$2/media/?size=l"
    },

    // Examples:
    // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
    // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z
    // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en
    // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572
    gmap_place: {
      matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,
      type: "iframe",
      url: function (rez) {
        return (
          "//maps.google." +
          rez[2] +
          "/?ll=" +
          (rez[9] ? rez[9] + "&z=" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\//, "&") : "") : rez[12] + "").replace(/\?/, "&") +
          "&output=" +
          (rez[12] && rez[12].indexOf("layer=c") > 0 ? "svembed" : "embed")
        );
      }
    },

    // Examples:
    // https://www.google.com/maps/search/Empire+State+Building/
    // https://www.google.com/maps/search/?api=1&query=centurylink+field
    // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393
    gmap_search: {
      matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,
      type: "iframe",
      url: function (rez) {
        return "//maps.google." + rez[2] + "/maps?q=" + rez[5].replace("query=", "q=").replace("api=1", "") + "&output=embed";
      }
    }
  };

  // Formats matching url to final form
  var format = function (url, rez, params) {
    if (!url) {
      return;
    }

    params = params || "";

    if ($.type(params) === "object") {
      params = $.param(params, true);
    }

    $.each(rez, function (key, value) {
      url = url.replace("$" + key, value || "");
    });

    if (params.length) {
      url += (url.indexOf("?") > 0 ? "&" : "?") + params;
    }

    return url;
  };

  $(document).on("objectNeedsType.fb", function (e, instance, item) {
    var url = item.src || "",
      type = false,
      media,
      thumb,
      rez,
      params,
      urlParams,
      paramObj,
      provider;

    media = $.extend(true, {}, defaults, item.opts.media);

    // Look for any matching media type
    $.each(media, function (providerName, providerOpts) {
      rez = url.match(providerOpts.matcher);

      if (!rez) {
        return;
      }

      type = providerOpts.type;
      provider = providerName;
      paramObj = {};

      if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {
        urlParams = rez[providerOpts.paramPlace];

        if (urlParams[0] == "?") {
          urlParams = urlParams.substring(1);
        }

        urlParams = urlParams.split("&");

        for (var m = 0; m < urlParams.length; ++m) {
          var p = urlParams[m].split("=", 2);

          if (p.length == 2) {
            paramObj[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
          }
        }
      }

      params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);

      url =
        $.type(providerOpts.url) === "function" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);

      thumb =
        $.type(providerOpts.thumb) === "function" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);

      if (providerName === "youtube") {
        url = url.replace(/&t=((\d+)m)?(\d+)s/, function (match, p1, m, s) {
          return "&start=" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));
        });
      } else if (providerName === "vimeo") {
        url = url.replace("&%23", "#");
      }

      return false;
    });

    // If it is found, then change content type and update the url

    if (type) {
      if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {
        item.opts.thumb = thumb;
      }

      if (type === "iframe") {
        item.opts = $.extend(true, item.opts, {
          iframe: {
            preload: false,
            attr: {
              scrolling: "no"
            }
          }
        });
      }

      $.extend(item, {
        type: type,
        src: url,
        origSrc: item.src,
        contentSource: provider,
        contentType: type === "image" ? "image" : provider == "gmap_place" || provider == "gmap_search" ? "map" : "video"
      });
    } else if (url) {
      item.type = item.opts.defaultType;
    }
  });

  // Load YouTube/Video API on request to detect when video finished playing
  var VideoAPILoader = {
    youtube: {
      src: "https://www.youtube.com/iframe_api",
      class: "YT",
      loading: false,
      loaded: false
    },

    vimeo: {
      src: "https://player.vimeo.com/api/player.js",
      class: "Vimeo",
      loading: false,
      loaded: false
    },

    load: function (vendor) {
      var _this = this,
        script;

      if (this[vendor].loaded) {
        setTimeout(function () {
          _this.done(vendor);
        });
        return;
      }

      if (this[vendor].loading) {
        return;
      }

      this[vendor].loading = true;

      script = document.createElement("script");
      script.type = "text/javascript";
      script.src = this[vendor].src;

      if (vendor === "youtube") {
        window.onYouTubeIframeAPIReady = function () {
          _this[vendor].loaded = true;
          _this.done(vendor);
        };
      } else {
        script.onload = function () {
          _this[vendor].loaded = true;
          _this.done(vendor);
        };
      }

      document.body.appendChild(script);
    },
    done: function (vendor) {
      var instance, $el, player;

      if (vendor === "youtube") {
        delete window.onYouTubeIframeAPIReady;
      }

      instance = $.fancybox.getInstance();

      if (instance) {
        $el = instance.current.$content.find("iframe");

        if (vendor === "youtube" && YT !== undefined && YT) {
          player = new YT.Player($el.attr("id"), {
            events: {
              onStateChange: function (e) {
                if (e.data == 0) {
                  instance.next();
                }
              }
            }
          });
        } else if (vendor === "vimeo" && Vimeo !== undefined && Vimeo) {
          player = new Vimeo.Player($el);

          player.on("ended", function () {
            instance.next();
          });
        }
      }
    }
  };

  $(document).on({
    "afterShow.fb": function (e, instance, current) {
      if (instance.group.length > 1 && (current.contentSource === "youtube" || current.contentSource === "vimeo")) {
        VideoAPILoader.load(current.contentSource);
      }
    }
  });
})(jQuery);
// ==========================================================================
//
// Guestures
// Adds touch guestures, handles click and tap events
//
// ==========================================================================
(function (window, document, $) {
  "use strict";

  var requestAFrame = (function () {
    return (
      window.requestAnimationFrame ||
      window.webkitRequestAnimationFrame ||
      window.mozRequestAnimationFrame ||
      window.oRequestAnimationFrame ||
      // if all else fails, use setTimeout
      function (callback) {
        return window.setTimeout(callback, 1000 / 60);
      }
    );
  })();

  var cancelAFrame = (function () {
    return (
      window.cancelAnimationFrame ||
      window.webkitCancelAnimationFrame ||
      window.mozCancelAnimationFrame ||
      window.oCancelAnimationFrame ||
      function (id) {
        window.clearTimeout(id);
      }
    );
  })();

  var getPointerXY = function (e) {
    var result = [];

    e = e.originalEvent || e || window.e;
    e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];

    for (var key in e) {
      if (e[key].pageX) {
        result.push({
          x: e[key].pageX,
          y: e[key].pageY
        });
      } else if (e[key].clientX) {
        result.push({
          x: e[key].clientX,
          y: e[key].clientY
        });
      }
    }

    return result;
  };

  var distance = function (point2, point1, what) {
    if (!point1 || !point2) {
      return 0;
    }

    if (what === "x") {
      return point2.x - point1.x;
    } else if (what === "y") {
      return point2.y - point1.y;
    }

    return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
  };

  var isClickable = function ($el) {
    if (
      $el.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe') ||
      $.isFunction($el.get(0).onclick) ||
      $el.data("selectable")
    ) {
      return true;
    }

    // Check for attributes like data-fancybox-next or data-fancybox-close
    for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {
      if (atts[i].nodeName.substr(0, 14) === "data-fancybox-") {
        return true;
      }
    }

    return false;
  };

  var hasScrollbars = function (el) {
    var overflowY = window.getComputedStyle(el)["overflow-y"],
      overflowX = window.getComputedStyle(el)["overflow-x"],
      vertical = (overflowY === "scroll" || overflowY === "auto") && el.scrollHeight > el.clientHeight,
      horizontal = (overflowX === "scroll" || overflowX === "auto") && el.scrollWidth > el.clientWidth;

    return vertical || horizontal;
  };

  var isScrollable = function ($el) {
    var rez = false;

    while (true) {
      rez = hasScrollbars($el.get(0));

      if (rez) {
        break;
      }

      $el = $el.parent();

      if (!$el.length || $el.hasClass("fancybox-stage") || $el.is("body")) {
        break;
      }
    }

    return rez;
  };

  var Guestures = function (instance) {
    var self = this;

    self.instance = instance;

    self.$bg = instance.$refs.bg;
    self.$stage = instance.$refs.stage;
    self.$container = instance.$refs.container;

    self.destroy();

    self.$container.on("touchstart.fb.touch mousedown.fb.touch", $.proxy(self, "ontouchstart"));
  };

  Guestures.prototype.destroy = function () {
    var self = this;

    self.$container.off(".fb.touch");

    $(document).off(".fb.touch");

    if (self.requestId) {
      cancelAFrame(self.requestId);
      self.requestId = null;
    }

    if (self.tapped) {
      clearTimeout(self.tapped);
      self.tapped = null;
    }
  };

  Guestures.prototype.ontouchstart = function (e) {
    var self = this,
      $target = $(e.target),
      instance = self.instance,
      current = instance.current,
      $slide = current.$slide,
      $content = current.$content,
      isTouchDevice = e.type == "touchstart";

    // Do not respond to both (touch and mouse) events
    if (isTouchDevice) {
      self.$container.off("mousedown.fb.touch");
    }

    // Ignore right click
    if (e.originalEvent && e.originalEvent.button == 2) {
      return;
    }

    // Ignore taping on links, buttons, input elements
    if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {
      return;
    }
    // Ignore clicks on the scrollbar
    if (!$target.is("img") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {
      return;
    }

    // Ignore clicks while zooming or closing
    if (!current || instance.isAnimating || current.$slide.hasClass("fancybox-animated")) {
      e.stopPropagation();
      e.preventDefault();

      return;
    }

    self.realPoints = self.startPoints = getPointerXY(e);

    if (!self.startPoints.length) {
      return;
    }

    // Allow other scripts to catch touch event if "touch" is set to false
    if (current.touch) {
      e.stopPropagation();
    }

    self.startEvent = e;

    self.canTap = true;
    self.$target = $target;
    self.$content = $content;
    self.opts = current.opts.touch;

    self.isPanning = false;
    self.isSwiping = false;
    self.isZooming = false;
    self.isScrolling = false;
    self.canPan = instance.canPan();

    self.startTime = new Date().getTime();
    self.distanceX = self.distanceY = self.distance = 0;

    self.canvasWidth = Math.round($slide[0].clientWidth);
    self.canvasHeight = Math.round($slide[0].clientHeight);

    self.contentLastPos = null;
    self.contentStartPos = $.fancybox.getTranslate(self.$content) || {
      top: 0,
      left: 0
    };
    self.sliderStartPos = $.fancybox.getTranslate($slide);

    // Since position will be absolute, but we need to make it relative to the stage
    self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);

    self.sliderStartPos.top -= self.stagePos.top;
    self.sliderStartPos.left -= self.stagePos.left;

    self.contentStartPos.top -= self.stagePos.top;
    self.contentStartPos.left -= self.stagePos.left;

    $(document)
      .off(".fb.touch")
      .on(isTouchDevice ? "touchend.fb.touch touchcancel.fb.touch" : "mouseup.fb.touch mouseleave.fb.touch", $.proxy(self, "ontouchend"))
      .on(isTouchDevice ? "touchmove.fb.touch" : "mousemove.fb.touch", $.proxy(self, "ontouchmove"));

    if ($.fancybox.isMobile) {
      document.addEventListener("scroll", self.onscroll, true);
    }

    // Skip if clicked outside the sliding area
    if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {
      if ($target.is(".fancybox-image")) {
        e.preventDefault();
      }

      if (!($.fancybox.isMobile && $target.parents(".fancybox-caption").length)) {
        return;
      }
    }

    self.isScrollable = isScrollable($target) || isScrollable($target.parent());

    // Check if element is scrollable and try to prevent default behavior (scrolling)
    if (!($.fancybox.isMobile && self.isScrollable)) {
      e.preventDefault();
    }

    // One finger or mouse click - swipe or pan an image
    if (self.startPoints.length === 1 || current.hasError) {
      if (self.canPan) {
        $.fancybox.stop(self.$content);

        self.isPanning = true;
      } else {
        self.isSwiping = true;
      }

      self.$container.addClass("fancybox-is-grabbing");
    }

    // Two fingers - zoom image
    if (self.startPoints.length === 2 && current.type === "image" && (current.isLoaded || current.$ghost)) {
      self.canTap = false;
      self.isSwiping = false;
      self.isPanning = false;

      self.isZooming = true;

      $.fancybox.stop(self.$content);

      self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();
      self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();

      self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;
      self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;

      self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);
    }
  };

  Guestures.prototype.onscroll = function (e) {
    var self = this;

    self.isScrolling = true;

    document.removeEventListener("scroll", self.onscroll, true);
  };

  Guestures.prototype.ontouchmove = function (e) {
    var self = this;

    // Make sure user has not released over iframe or disabled element
    if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {
      self.ontouchend(e);
      return;
    }

    if (self.isScrolling) {
      self.canTap = false;
      return;
    }

    self.newPoints = getPointerXY(e);

    if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {
      return;
    }

    if (!(self.isSwiping && self.isSwiping === true)) {
      e.preventDefault();
    }

    self.distanceX = distance(self.newPoints[0], self.startPoints[0], "x");
    self.distanceY = distance(self.newPoints[0], self.startPoints[0], "y");

    self.distance = distance(self.newPoints[0], self.startPoints[0]);

    // Skip false ontouchmove events (Chrome)
    if (self.distance > 0) {
      if (self.isSwiping) {
        self.onSwipe(e);
      } else if (self.isPanning) {
        self.onPan();
      } else if (self.isZooming) {
        self.onZoom();
      }
    }
  };

  Guestures.prototype.onSwipe = function (e) {
    var self = this,
      instance = self.instance,
      swiping = self.isSwiping,
      left = self.sliderStartPos.left || 0,
      angle;

    // If direction is not yet determined
    if (swiping === true) {
      // We need at least 10px distance to correctly calculate an angle
      if (Math.abs(self.distance) > 10) {
        self.canTap = false;

        if (instance.group.length < 2 && self.opts.vertical) {
          self.isSwiping = "y";
        } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === "auto" && $(window).width() > 800)) {
          self.isSwiping = "x";
        } else {
          angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);

          self.isSwiping = angle > 45 && angle < 135 ? "y" : "x";
        }

        if (self.isSwiping === "y" && $.fancybox.isMobile && self.isScrollable) {
          self.isScrolling = true;

          return;
        }

        instance.isDragging = self.isSwiping;

        // Reset points to avoid jumping, because we dropped first swipes to calculate the angle
        self.startPoints = self.newPoints;

        $.each(instance.slides, function (index, slide) {
          var slidePos, stagePos;

          $.fancybox.stop(slide.$slide);

          slidePos = $.fancybox.getTranslate(slide.$slide);
          stagePos = $.fancybox.getTranslate(instance.$refs.stage);

          slide.$slide
            .css({
              transform: "",
              opacity: "",
              "transition-duration": ""
            })
            .removeClass("fancybox-animated")
            .removeClass(function (index, className) {
              return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
            });

          if (slide.pos === instance.current.pos) {
            self.sliderStartPos.top = slidePos.top - stagePos.top;
            self.sliderStartPos.left = slidePos.left - stagePos.left;
          }

          $.fancybox.setTranslate(slide.$slide, {
            top: slidePos.top - stagePos.top,
            left: slidePos.left - stagePos.left
          });
        });

        // Stop slideshow
        if (instance.SlideShow && instance.SlideShow.isActive) {
          instance.SlideShow.stop();
        }
      }

      return;
    }

    // Sticky edges
    if (swiping == "x") {
      if (
        self.distanceX > 0 &&
        (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))
      ) {
        left = left + Math.pow(self.distanceX, 0.8);
      } else if (
        self.distanceX < 0 &&
        (self.instance.group.length < 2 ||
          (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))
      ) {
        left = left - Math.pow(-self.distanceX, 0.8);
      } else {
        left = left + self.distanceX;
      }
    }

    self.sliderLastPos = {
      top: swiping == "x" ? 0 : self.sliderStartPos.top + self.distanceY,
      left: left
    };

    if (self.requestId) {
      cancelAFrame(self.requestId);

      self.requestId = null;
    }

    self.requestId = requestAFrame(function () {
      if (self.sliderLastPos) {
        $.each(self.instance.slides, function (index, slide) {
          var pos = slide.pos - self.instance.currPos;

          $.fancybox.setTranslate(slide.$slide, {
            top: self.sliderLastPos.top,
            left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter
          });
        });

        self.$container.addClass("fancybox-is-sliding");
      }
    });
  };

  Guestures.prototype.onPan = function () {
    var self = this;

    // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)
    if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {
      self.startPoints = self.newPoints;
      return;
    }

    self.canTap = false;

    self.contentLastPos = self.limitMovement();

    if (self.requestId) {
      cancelAFrame(self.requestId);
    }

    self.requestId = requestAFrame(function () {
      $.fancybox.setTranslate(self.$content, self.contentLastPos);
    });
  };

  // Make panning sticky to the edges
  Guestures.prototype.limitMovement = function () {
    var self = this;

    var canvasWidth = self.canvasWidth;
    var canvasHeight = self.canvasHeight;

    var distanceX = self.distanceX;
    var distanceY = self.distanceY;

    var contentStartPos = self.contentStartPos;

    var currentOffsetX = contentStartPos.left;
    var currentOffsetY = contentStartPos.top;

    var currentWidth = contentStartPos.width;
    var currentHeight = contentStartPos.height;

    var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;

    if (currentWidth > canvasWidth) {
      newOffsetX = currentOffsetX + distanceX;
    } else {
      newOffsetX = currentOffsetX;
    }

    newOffsetY = currentOffsetY + distanceY;

    // Slow down proportionally to traveled distance
    minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);
    minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);

    maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);
    maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);

    //   ->
    if (distanceX > 0 && newOffsetX > minTranslateX) {
      newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;
    }

    //    <-
    if (distanceX < 0 && newOffsetX < maxTranslateX) {
      newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;
    }

    //   \/
    if (distanceY > 0 && newOffsetY > minTranslateY) {
      newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;
    }

    //   /\
    if (distanceY < 0 && newOffsetY < maxTranslateY) {
      newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;
    }

    return {
      top: newOffsetY,
      left: newOffsetX
    };
  };

  Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {
    var self = this;

    var canvasWidth = self.canvasWidth;
    var canvasHeight = self.canvasHeight;

    if (newWidth > canvasWidth) {
      newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;
      newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;
    } else {
      // Center horizontally
      newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);
    }

    if (newHeight > canvasHeight) {
      newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;
      newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;
    } else {
      // Center vertically
      newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);
    }

    return {
      top: newOffsetY,
      left: newOffsetX
    };
  };

  Guestures.prototype.onZoom = function () {
    var self = this;

    // Calculate current distance between points to get pinch ratio and new width and height
    var contentStartPos = self.contentStartPos;

    var currentWidth = contentStartPos.width;
    var currentHeight = contentStartPos.height;

    var currentOffsetX = contentStartPos.left;
    var currentOffsetY = contentStartPos.top;

    var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);

    var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;

    var newWidth = Math.floor(currentWidth * pinchRatio);
    var newHeight = Math.floor(currentHeight * pinchRatio);

    // This is the translation due to pinch-zooming
    var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;
    var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;

    // Point between the two touches
    var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();
    var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();

    // And this is the translation due to translation of the centerpoint
    // between the two fingers
    var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;
    var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;

    // The new offset is the old/current one plus the total translation
    var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);
    var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);

    var newPos = {
      top: newOffsetY,
      left: newOffsetX,
      scaleX: pinchRatio,
      scaleY: pinchRatio
    };

    self.canTap = false;

    self.newWidth = newWidth;
    self.newHeight = newHeight;

    self.contentLastPos = newPos;

    if (self.requestId) {
      cancelAFrame(self.requestId);
    }

    self.requestId = requestAFrame(function () {
      $.fancybox.setTranslate(self.$content, self.contentLastPos);
    });
  };

  Guestures.prototype.ontouchend = function (e) {
    var self = this;

    var swiping = self.isSwiping;
    var panning = self.isPanning;
    var zooming = self.isZooming;
    var scrolling = self.isScrolling;

    self.endPoints = getPointerXY(e);
    self.dMs = Math.max(new Date().getTime() - self.startTime, 1);

    self.$container.removeClass("fancybox-is-grabbing");

    $(document).off(".fb.touch");

    document.removeEventListener("scroll", self.onscroll, true);

    if (self.requestId) {
      cancelAFrame(self.requestId);

      self.requestId = null;
    }

    self.isSwiping = false;
    self.isPanning = false;
    self.isZooming = false;
    self.isScrolling = false;

    self.instance.isDragging = false;

    if (self.canTap) {
      return self.onTap(e);
    }

    self.speed = 100;

    // Speed in px/ms
    self.velocityX = (self.distanceX / self.dMs) * 0.5;
    self.velocityY = (self.distanceY / self.dMs) * 0.5;

    if (panning) {
      self.endPanning();
    } else if (zooming) {
      self.endZooming();
    } else {
      self.endSwiping(swiping, scrolling);
    }

    return;
  };

  Guestures.prototype.endSwiping = function (swiping, scrolling) {
    var self = this,
      ret = false,
      len = self.instance.group.length,
      distanceX = Math.abs(self.distanceX),
      canAdvance = swiping == "x" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),
      speedX = 300;

    self.sliderLastPos = null;

    // Close if swiped vertically / navigate if horizontally
    if (swiping == "y" && !scrolling && Math.abs(self.distanceY) > 50) {
      // Continue vertical movement
      $.fancybox.animate(
        self.instance.current.$slide, {
          top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,
          opacity: 0
        },
        200
      );
      ret = self.instance.close(true, 250);
    } else if (canAdvance && self.distanceX > 0) {
      ret = self.instance.previous(speedX);
    } else if (canAdvance && self.distanceX < 0) {
      ret = self.instance.next(speedX);
    }

    if (ret === false && (swiping == "x" || swiping == "y")) {
      self.instance.centerSlide(200);
    }

    self.$container.removeClass("fancybox-is-sliding");
  };

  // Limit panning from edges
  // ========================
  Guestures.prototype.endPanning = function () {
    var self = this,
      newOffsetX,
      newOffsetY,
      newPos;

    if (!self.contentLastPos) {
      return;
    }

    if (self.opts.momentum === false || self.dMs > 350) {
      newOffsetX = self.contentLastPos.left;
      newOffsetY = self.contentLastPos.top;
    } else {
      // Continue movement
      newOffsetX = self.contentLastPos.left + self.velocityX * 500;
      newOffsetY = self.contentLastPos.top + self.velocityY * 500;
    }

    newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);

    newPos.width = self.contentStartPos.width;
    newPos.height = self.contentStartPos.height;

    $.fancybox.animate(self.$content, newPos, 366);
  };

  Guestures.prototype.endZooming = function () {
    var self = this;

    var current = self.instance.current;

    var newOffsetX, newOffsetY, newPos, reset;

    var newWidth = self.newWidth;
    var newHeight = self.newHeight;

    if (!self.contentLastPos) {
      return;
    }

    newOffsetX = self.contentLastPos.left;
    newOffsetY = self.contentLastPos.top;

    reset = {
      top: newOffsetY,
      left: newOffsetX,
      width: newWidth,
      height: newHeight,
      scaleX: 1,
      scaleY: 1
    };

    // Reset scalex/scaleY values; this helps for perfomance and does not break animation
    $.fancybox.setTranslate(self.$content, reset);

    if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {
      self.instance.scaleToFit(150);
    } else if (newWidth > current.width || newHeight > current.height) {
      self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);
    } else {
      newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);

      $.fancybox.animate(self.$content, newPos, 150);
    }
  };

  Guestures.prototype.onTap = function (e) {
    var self = this;
    var $target = $(e.target);

    var instance = self.instance;
    var current = instance.current;

    var endPoints = (e && getPointerXY(e)) || self.startPoints;

    var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;
    var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;

    var where;

    var process = function (prefix) {
      var action = current.opts[prefix];

      if ($.isFunction(action)) {
        action = action.apply(instance, [current, e]);
      }

      if (!action) {
        return;
      }

      switch (action) {
        case "close":
          instance.close(self.startEvent);

          break;

        case "toggleControls":
          instance.toggleControls();

          break;

        case "next":
          instance.next();

          break;

        case "nextOrClose":
          if (instance.group.length > 1) {
            instance.next();
          } else {
            instance.close(self.startEvent);
          }

          break;

        case "zoom":
          if (current.type == "image" && (current.isLoaded || current.$ghost)) {
            if (instance.canPan()) {
              instance.scaleToFit();
            } else if (instance.isScaledDown()) {
              instance.scaleToActual(tapX, tapY);
            } else if (instance.group.length < 2) {
              instance.close(self.startEvent);
            }
          }

          break;
      }
    };

    // Ignore right click
    if (e.originalEvent && e.originalEvent.button == 2) {
      return;
    }

    // Skip if clicked on the scrollbar
    if (!$target.is("img") && tapX > $target[0].clientWidth + $target.offset().left) {
      return;
    }

    // Check where is clicked
    if ($target.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container")) {
      where = "Outside";
    } else if ($target.is(".fancybox-slide")) {
      where = "Slide";
    } else if (
      instance.current.$content &&
      instance.current.$content
      .find($target)
      .addBack()
      .filter($target).length
    ) {
      where = "Content";
    } else {
      return;
    }

    // Check if this is a double tap
    if (self.tapped) {
      // Stop previously created single tap
      clearTimeout(self.tapped);
      self.tapped = null;

      // Skip if distance between taps is too big
      if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {
        return this;
      }

      // OK, now we assume that this is a double-tap
      process("dblclick" + where);
    } else {
      // Single tap will be processed if user has not clicked second time within 300ms
      // or there is no need to wait for double-tap
      self.tapX = tapX;
      self.tapY = tapY;

      if (current.opts["dblclick" + where] && current.opts["dblclick" + where] !== current.opts["click" + where]) {
        self.tapped = setTimeout(function () {
          self.tapped = null;

          if (!instance.isAnimating) {
            process("click" + where);
          }
        }, 500);
      } else {
        process("click" + where);
      }
    }

    return this;
  };

  $(document)
    .on("onActivate.fb", function (e, instance) {
      if (instance && !instance.Guestures) {
        instance.Guestures = new Guestures(instance);
      }
    })
    .on("beforeClose.fb", function (e, instance) {
      if (instance && instance.Guestures) {
        instance.Guestures.destroy();
      }
    });
})(window, document, jQuery);
// ==========================================================================
//
// SlideShow
// Enables slideshow functionality
//
// Example of usage:
// $.fancybox.getInstance().SlideShow.start()
//
// ==========================================================================
(function (document, $) {
  "use strict";

  $.extend(true, $.fancybox.defaults, {
    btnTpl: {
      slideShow: '<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}">' +
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 5.4v13.2l11-6.6z"/></svg>' +
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z"/></svg>' +
        "</button>"
    },
    slideShow: {
      autoStart: false,
      speed: 3000,
      progress: true
    }
  });

  var SlideShow = function (instance) {
    this.instance = instance;
    this.init();
  };

  $.extend(SlideShow.prototype, {
    timer: null,
    isActive: false,
    $button: null,

    init: function () {
      var self = this,
        instance = self.instance,
        opts = instance.group[instance.currIndex].opts.slideShow;

      self.$button = instance.$refs.toolbar.find("[data-fancybox-play]").on("click", function () {
        self.toggle();
      });

      if (instance.group.length < 2 || !opts) {
        self.$button.hide();
      } else if (opts.progress) {
        self.$progress = $('<div class="fancybox-progress"></div>').appendTo(instance.$refs.inner);
      }
    },

    set: function (force) {
      var self = this,
        instance = self.instance,
        current = instance.current;

      // Check if reached last element
      if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {
        if (self.isActive && current.contentType !== "video") {
          if (self.$progress) {
            $.fancybox.animate(self.$progress.show(), {
              scaleX: 1
            }, current.opts.slideShow.speed);
          }

          self.timer = setTimeout(function () {
            if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {
              instance.jumpTo(0);
            } else {
              instance.next();
            }
          }, current.opts.slideShow.speed);
        }
      } else {
        self.stop();
        instance.idleSecondsCounter = 0;
        instance.showControls();
      }
    },

    clear: function () {
      var self = this;

      clearTimeout(self.timer);

      self.timer = null;

      if (self.$progress) {
        self.$progress.removeAttr("style").hide();
      }
    },

    start: function () {
      var self = this,
        current = self.instance.current;

      if (current) {
        self.$button
          .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)
          .removeClass("fancybox-button--play")
          .addClass("fancybox-button--pause");

        self.isActive = true;

        if (current.isComplete) {
          self.set(true);
        }

        self.instance.trigger("onSlideShowChange", true);
      }
    },

    stop: function () {
      var self = this,
        current = self.instance.current;

      self.clear();

      self.$button
        .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)
        .removeClass("fancybox-button--pause")
        .addClass("fancybox-button--play");

      self.isActive = false;

      self.instance.trigger("onSlideShowChange", false);

      if (self.$progress) {
        self.$progress.removeAttr("style").hide();
      }
    },

    toggle: function () {
      var self = this;

      if (self.isActive) {
        self.stop();
      } else {
        self.start();
      }
    }
  });

  $(document).on({
    "onInit.fb": function (e, instance) {
      if (instance && !instance.SlideShow) {
        instance.SlideShow = new SlideShow(instance);
      }
    },

    "beforeShow.fb": function (e, instance, current, firstRun) {
      var SlideShow = instance && instance.SlideShow;

      if (firstRun) {
        if (SlideShow && current.opts.slideShow.autoStart) {
          SlideShow.start();
        }
      } else if (SlideShow && SlideShow.isActive) {
        SlideShow.clear();
      }
    },

    "afterShow.fb": function (e, instance, current) {
      var SlideShow = instance && instance.SlideShow;

      if (SlideShow && SlideShow.isActive) {
        SlideShow.set();
      }
    },

    "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
      var SlideShow = instance && instance.SlideShow;

      // "P" or Spacebar
      if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is("button,a,input")) {
        keypress.preventDefault();

        SlideShow.toggle();
      }
    },

    "beforeClose.fb onDeactivate.fb": function (e, instance) {
      var SlideShow = instance && instance.SlideShow;

      if (SlideShow) {
        SlideShow.stop();
      }
    }
  });

  // Page Visibility API to pause slideshow when window is not active
  $(document).on("visibilitychange", function () {
    var instance = $.fancybox.getInstance(),
      SlideShow = instance && instance.SlideShow;

    if (SlideShow && SlideShow.isActive) {
      if (document.hidden) {
        SlideShow.clear();
      } else {
        SlideShow.set();
      }
    }
  });
})(document, jQuery);
// ==========================================================================
//
// FullScreen
// Adds fullscreen functionality
//
// ==========================================================================
(function (document, $) {
  "use strict";

  // Collection of methods supported by user browser
  var fn = (function () {
    var fnMap = [
      ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"],
      // new WebKit
      [
        "webkitRequestFullscreen",
        "webkitExitFullscreen",
        "webkitFullscreenElement",
        "webkitFullscreenEnabled",
        "webkitfullscreenchange",
        "webkitfullscreenerror"
      ],
      // old WebKit (Safari 5.1)
      [
        "webkitRequestFullScreen",
        "webkitCancelFullScreen",
        "webkitCurrentFullScreenElement",
        "webkitCancelFullScreen",
        "webkitfullscreenchange",
        "webkitfullscreenerror"
      ],
      [
        "mozRequestFullScreen",
        "mozCancelFullScreen",
        "mozFullScreenElement",
        "mozFullScreenEnabled",
        "mozfullscreenchange",
        "mozfullscreenerror"
      ],
      ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]
    ];

    var ret = {};

    for (var i = 0; i < fnMap.length; i++) {
      var val = fnMap[i];

      if (val && val[1] in document) {
        for (var j = 0; j < val.length; j++) {
          ret[fnMap[0][j]] = val[j];
        }

        return ret;
      }
    }

    return false;
  })();

  if (fn) {
    var FullScreen = {
      request: function (elem) {
        elem = elem || document.documentElement;

        elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);
      },
      exit: function () {
        document[fn.exitFullscreen]();
      },
      toggle: function (elem) {
        elem = elem || document.documentElement;

        if (this.isFullscreen()) {
          this.exit();
        } else {
          this.request(elem);
        }
      },
      isFullscreen: function () {
        return Boolean(document[fn.fullscreenElement]);
      },
      enabled: function () {
        return Boolean(document[fn.fullscreenEnabled]);
      }
    };

    $.extend(true, $.fancybox.defaults, {
      btnTpl: {
        fullScreen: '<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fsenter" title="{{FULL_SCREEN}}">' +
          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>' +
          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"/></svg>' +
          "</button>"
      },
      fullScreen: {
        autoStart: false
      }
    });

    $(document).on(fn.fullscreenchange, function () {
      var isFullscreen = FullScreen.isFullscreen(),
        instance = $.fancybox.getInstance();

      if (instance) {
        // If image is zooming, then force to stop and reposition properly
        if (instance.current && instance.current.type === "image" && instance.isAnimating) {
          instance.isAnimating = false;

          instance.update(true, true, 0);

          if (!instance.isComplete) {
            instance.complete();
          }
        }

        instance.trigger("onFullscreenChange", isFullscreen);

        instance.$refs.container.toggleClass("fancybox-is-fullscreen", isFullscreen);

        instance.$refs.toolbar
          .find("[data-fancybox-fullscreen]")
          .toggleClass("fancybox-button--fsenter", !isFullscreen)
          .toggleClass("fancybox-button--fsexit", isFullscreen);
      }
    });
  }

  $(document).on({
    "onInit.fb": function (e, instance) {
      var $container;

      if (!fn) {
        instance.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();

        return;
      }

      if (instance && instance.group[instance.currIndex].opts.fullScreen) {
        $container = instance.$refs.container;

        $container.on("click.fb-fullscreen", "[data-fancybox-fullscreen]", function (e) {
          e.stopPropagation();
          e.preventDefault();

          FullScreen.toggle();
        });

        if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {
          FullScreen.request();
        }

        // Expose API
        instance.FullScreen = FullScreen;
      } else if (instance) {
        instance.$refs.toolbar.find("[data-fancybox-fullscreen]").hide();
      }
    },

    "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
      // "F"
      if (instance && instance.FullScreen && keycode === 70) {
        keypress.preventDefault();

        instance.FullScreen.toggle();
      }
    },

    "beforeClose.fb": function (e, instance) {
      if (instance && instance.FullScreen && instance.$refs.container.hasClass("fancybox-is-fullscreen")) {
        FullScreen.exit();
      }
    }
  });
})(document, jQuery);
// ==========================================================================
//
// Thumbs
// Displays thumbnails in a grid
//
// ==========================================================================
(function (document, $) {
  "use strict";

  var CLASS = "fancybox-thumbs",
    CLASS_ACTIVE = CLASS + "-active";

  // Make sure there are default values
  $.fancybox.defaults = $.extend(
    true, {
      btnTpl: {
        thumbs: '<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}">' +
          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z"/></svg>' +
          "</button>"
      },
      thumbs: {
        autoStart: false, // Display thumbnails on opening
        hideOnClose: true, // Hide thumbnail grid when closing animation starts
        parentEl: ".fancybox-container", // Container is injected into this element
        axis: "y" // Vertical (y) or horizontal (x) scrolling
      }
    },
    $.fancybox.defaults
  );

  var FancyThumbs = function (instance) {
    this.init(instance);
  };

  $.extend(FancyThumbs.prototype, {
    $button: null,
    $grid: null,
    $list: null,
    isVisible: false,
    isActive: false,

    init: function (instance) {
      var self = this,
        group = instance.group,
        enabled = 0;

      self.instance = instance;
      self.opts = group[instance.currIndex].opts.thumbs;

      instance.Thumbs = self;

      self.$button = instance.$refs.toolbar.find("[data-fancybox-thumbs]");

      // Enable thumbs if at least two group items have thumbnails
      for (var i = 0, len = group.length; i < len; i++) {
        if (group[i].thumb) {
          enabled++;
        }

        if (enabled > 1) {
          break;
        }
      }

      if (enabled > 1 && !!self.opts) {
        self.$button.removeAttr("style").on("click", function () {
          self.toggle();
        });

        self.isActive = true;
      } else {
        self.$button.hide();
      }
    },

    create: function () {
      var self = this,
        instance = self.instance,
        parentEl = self.opts.parentEl,
        list = [],
        src;

      if (!self.$grid) {
        // Create main element
        self.$grid = $('<div class="' + CLASS + " " + CLASS + "-" + self.opts.axis + '"></div>').appendTo(
          instance.$refs.container
          .find(parentEl)
          .addBack()
          .filter(parentEl)
        );

        // Add "click" event that performs gallery navigation
        self.$grid.on("click", "a", function () {
          instance.jumpTo($(this).attr("data-index"));
        });
      }

      // Build the list
      if (!self.$list) {
        self.$list = $('<div class="' + CLASS + '__list">').appendTo(self.$grid);
      }

      $.each(instance.group, function (i, item) {
        src = item.thumb;

        if (!src && item.type === "image") {
          src = item.src;
        }

        list.push(
          '<a href="javascript:;" tabindex="0" data-index="' +
          i +
          '"' +
          (src && src.length ? ' style="background-image:url(' + src + ')"' : 'class="fancybox-thumbs-missing"') +
          "></a>"
        );
      });

      self.$list[0].innerHTML = list.join("");

      if (self.opts.axis === "x") {
        // Set fixed width for list element to enable horizontal scrolling
        self.$list.width(
          parseInt(self.$grid.css("padding-right"), 10) +
          instance.group.length *
          self.$list
          .children()
          .eq(0)
          .outerWidth(true)
        );
      }
    },

    focus: function (duration) {
      var self = this,
        $list = self.$list,
        $grid = self.$grid,
        thumb,
        thumbPos;

      if (!self.instance.current) {
        return;
      }

      thumb = $list
        .children()
        .removeClass(CLASS_ACTIVE)
        .filter('[data-index="' + self.instance.current.index + '"]')
        .addClass(CLASS_ACTIVE);

      thumbPos = thumb.position();

      // Check if need to scroll to make current thumb visible
      if (self.opts.axis === "y" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {
        $list.stop().animate({
            scrollTop: $list.scrollTop() + thumbPos.top
          },
          duration
        );
      } else if (
        self.opts.axis === "x" &&
        (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))
      ) {
        $list
          .parent()
          .stop()
          .animate({
              scrollLeft: thumbPos.left
            },
            duration
          );
      }
    },

    update: function () {
      var that = this;
      that.instance.$refs.container.toggleClass("fancybox-show-thumbs", this.isVisible);

      if (that.isVisible) {
        if (!that.$grid) {
          that.create();
        }

        that.instance.trigger("onThumbsShow");

        that.focus(0);
      } else if (that.$grid) {
        that.instance.trigger("onThumbsHide");
      }

      // Update content position
      that.instance.update();
    },

    hide: function () {
      this.isVisible = false;
      this.update();
    },

    show: function () {
      this.isVisible = true;
      this.update();
    },

    toggle: function () {
      this.isVisible = !this.isVisible;
      this.update();
    }
  });

  $(document).on({
    "onInit.fb": function (e, instance) {
      var Thumbs;

      if (instance && !instance.Thumbs) {
        Thumbs = new FancyThumbs(instance);

        if (Thumbs.isActive && Thumbs.opts.autoStart === true) {
          Thumbs.show();
        }
      }
    },

    "beforeShow.fb": function (e, instance, item, firstRun) {
      var Thumbs = instance && instance.Thumbs;

      if (Thumbs && Thumbs.isVisible) {
        Thumbs.focus(firstRun ? 0 : 250);
      }
    },

    "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
      var Thumbs = instance && instance.Thumbs;

      // "G"
      if (Thumbs && Thumbs.isActive && keycode === 71) {
        keypress.preventDefault();

        Thumbs.toggle();
      }
    },

    "beforeClose.fb": function (e, instance) {
      var Thumbs = instance && instance.Thumbs;

      if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {
        Thumbs.$grid.hide();
      }
    }
  });
})(document, jQuery);
//// ==========================================================================
//
// Share
// Displays simple form for sharing current url
//
// ==========================================================================
(function (document, $) {
  "use strict";

  $.extend(true, $.fancybox.defaults, {
    btnTpl: {
      share: '<button data-fancybox-share class="fancybox-button fancybox-button--share" title="{{SHARE}}">' +
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2.55 19c1.4-8.4 9.1-9.8 11.9-9.8V5l7 7-7 6.3v-3.5c-2.8 0-10.5 2.1-11.9 4.2z"/></svg>' +
        "</button>"
    },
    share: {
      url: function (instance, item) {
        return (
          (!instance.currentHash && !(item.type === "inline" || item.type === "html") ? item.origSrc || item.src : false) || window.location
        );
      },
      tpl: '<div class="fancybox-share">' +
        "<h1>{{SHARE}}</h1>" +
        "<p>" +
        '<a class="fancybox-share__button fancybox-share__button--fb" href="https://www.facebook.com/sharer/sharer.php?u={{url}}">' +
        '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196" /></svg>' +
        "<span>Facebook</span>" +
        "</a>" +
        '<a class="fancybox-share__button fancybox-share__button--tw" href="https://twitter.com/intent/tweet?url={{url}}&text={{descr}}">' +
        '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z" /></svg>' +
        "<span>Twitter</span>" +
        "</a>" +
        '<a class="fancybox-share__button fancybox-share__button--pt" href="https://www.pinterest.com/pin/create/button/?url={{url}}&description={{descr}}&media={{media}}">' +
        '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m265 56c-109 0-164 78-164 144 0 39 15 74 47 87 5 2 10 0 12-5l4-19c2-6 1-8-3-13-9-11-15-25-15-45 0-58 43-110 113-110 62 0 96 38 96 88 0 67-30 122-73 122-24 0-42-19-36-44 6-29 20-60 20-81 0-19-10-35-31-35-25 0-44 26-44 60 0 21 7 36 7 36l-30 125c-8 37-1 83 0 87 0 3 4 4 5 2 2-3 32-39 42-75l16-64c8 16 31 29 56 29 74 0 124-67 124-157 0-69-58-132-146-132z" fill="#fff"/></svg>' +
        "<span>Pinterest</span>" +
        "</a>" +
        "</p>" +
        '<p><input class="fancybox-share__input" type="text" value="{{url_raw}}" onclick="select()" /></p>' +
        "</div>"
    }
  });

  function escapeHtml(string) {
    var entityMap = {
      "&": "&amp;",
      "<": "&lt;",
      ">": "&gt;",
      '"': "&quot;",
      "'": "&#39;",
      "/": "&#x2F;",
      "`": "&#x60;",
      "=": "&#x3D;"
    };

    return String(string).replace(/[&<>"'`=\/]/g, function (s) {
      return entityMap[s];
    });
  }

  $(document).on("click", "[data-fancybox-share]", function () {
    var instance = $.fancybox.getInstance(),
      current = instance.current || null,
      url,
      tpl;

    if (!current) {
      return;
    }

    if ($.type(current.opts.share.url) === "function") {
      url = current.opts.share.url.apply(current, [instance, current]);
    }

    tpl = current.opts.share.tpl
      .replace(/\{\{media\}\}/g, current.type === "image" ? encodeURIComponent(current.src) : "")
      .replace(/\{\{url\}\}/g, encodeURIComponent(url))
      .replace(/\{\{url_raw\}\}/g, escapeHtml(url))
      .replace(/\{\{descr\}\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : "");

    $.fancybox.open({
      src: instance.translate(instance, tpl),
      type: "html",
      opts: {
        touch: false,
        animationEffect: false,
        afterLoad: function (shareInstance, shareCurrent) {
          // Close self if parent instance is closing
          instance.$refs.container.one("beforeClose.fb", function () {
            shareInstance.close(null, 0);
          });

          // Opening links in a popup window
          shareCurrent.$content.find(".fancybox-share__button").click(function () {
            window.open(this.href, "Share", "width=550, height=450");
            return false;
          });
        },
        mobile: {
          autoFocus: false
        }
      }
    });
  });
})(document, jQuery);
// ==========================================================================
//
// Hash
// Enables linking to each modal
//
// ==========================================================================
(function (window, document, $) {
  "use strict";

  // Simple $.escapeSelector polyfill (for jQuery prior v3)
  if (!$.escapeSelector) {
    $.escapeSelector = function (sel) {
      var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
      var fcssescape = function (ch, asCodePoint) {
        if (asCodePoint) {
          // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
          if (ch === "\0") {
            return "\uFFFD";
          }

          // Control characters and (dependent upon position) numbers get escaped as code points
          return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
        }

        // Other potentially-special ASCII characters get backslash-escaped
        return "\\" + ch;
      };

      return (sel + "").replace(rcssescape, fcssescape);
    };
  }

  // Get info about gallery name and current index from url
  function parseUrl() {
    var hash = window.location.hash.substr(1),
      rez = hash.split("-"),
      index = rez.length > 1 && /^\+?\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,
      gallery = rez.join("-");

    return {
      hash: hash,
      /* Index is starting from 1 */
      index: index < 1 ? 1 : index,
      gallery: gallery
    };
  }

  // Trigger click evnt on links to open new fancyBox instance
  function triggerFromUrl(url) {
    if (url.gallery !== "") {
      // If we can find element matching 'data-fancybox' atribute,
      // then triggering click event should start fancyBox
      $("[data-fancybox='" + $.escapeSelector(url.gallery) + "']")
        .eq(url.index - 1)
        .focus()
        .trigger("click.fb-start");
    }
  }

  // Get gallery name from current instance
  function getGalleryID(instance) {
    var opts, ret;

    if (!instance) {
      return false;
    }

    opts = instance.current ? instance.current.opts : instance.opts;
    ret = opts.hash || (opts.$orig ? opts.$orig.data("fancybox") || opts.$orig.data("fancybox-trigger") : "");

    return ret === "" ? false : ret;
  }

  // Start when DOM becomes ready
  $(function () {
    // Check if user has disabled this module
    if ($.fancybox.defaults.hash === false) {
      return;
    }

    // Update hash when opening/closing fancyBox
    $(document).on({
      "onInit.fb": function (e, instance) {
        var url, gallery;

        if (instance.group[instance.currIndex].opts.hash === false) {
          return;
        }

        url = parseUrl();
        gallery = getGalleryID(instance);

        // Make sure gallery start index matches index from hash
        if (gallery && url.gallery && gallery == url.gallery) {
          instance.currIndex = url.index - 1;
        }
      },

      "beforeShow.fb": function (e, instance, current, firstRun) {
        var gallery;

        if (!current || current.opts.hash === false) {
          return;
        }

        // Check if need to update window hash
        gallery = getGalleryID(instance);

        if (!gallery) {
          return;
        }

        // Variable containing last hash value set by fancyBox
        // It will be used to determine if fancyBox needs to close after hash change is detected
        instance.currentHash = gallery + (instance.group.length > 1 ? "-" + (current.index + 1) : "");

        // If current hash is the same (this instance most likely is opened by hashchange), then do nothing
        if (window.location.hash === "#" + instance.currentHash) {
          return;
        }

        if (firstRun && !instance.origHash) {
          instance.origHash = window.location.hash;
        }

        if (instance.hashTimer) {
          clearTimeout(instance.hashTimer);
        }

        // Update hash
        instance.hashTimer = setTimeout(function () {
          if ("replaceState" in window.history) {
            window.history[firstRun ? "pushState" : "replaceState"]({},
              document.title,
              window.location.pathname + window.location.search + "#" + instance.currentHash
            );

            if (firstRun) {
              instance.hasCreatedHistory = true;
            }
          } else {
            window.location.hash = instance.currentHash;
          }

          instance.hashTimer = null;
        }, 300);
      },

      "beforeClose.fb": function (e, instance, current) {
        if (!current || current.opts.hash === false) {
          return;
        }

        clearTimeout(instance.hashTimer);

        // Goto previous history entry
        if (instance.currentHash && instance.hasCreatedHistory) {
          window.history.back();
        } else if (instance.currentHash) {
          if ("replaceState" in window.history) {
            window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || ""));
          } else {
            window.location.hash = instance.origHash;
          }
        }

        instance.currentHash = null;
      }
    });

    // Check if need to start/close after url has changed
    $(window).on("hashchange.fb", function () {
      var url = parseUrl(),
        fb = null;

      // Find last fancyBox instance that has "hash"
      $.each(
        $(".fancybox-container")
        .get()
        .reverse(),
        function (index, value) {
          var tmp = $(value).data("FancyBox");

          if (tmp && tmp.currentHash) {
            fb = tmp;
            return false;
          }
        }
      );

      if (fb) {
        // Now, compare hash values
        if (fb.currentHash !== url.gallery + "-" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {
          fb.currentHash = null;

          fb.close();
        }
      } else if (url.gallery !== "") {
        triggerFromUrl(url);
      }
    });

    // Check current hash and trigger click event on matching element to start fancyBox, if needed
    setTimeout(function () {
      if (!$.fancybox.getInstance()) {
        triggerFromUrl(parseUrl());
      }
    }, 50);
  });
})(window, document, jQuery);
// ==========================================================================
//
// Wheel
// Basic mouse weheel support for gallery navigation
//
// ==========================================================================
(function (document, $) {
  "use strict";

  var prevTime = new Date().getTime();

  $(document).on({
    "onInit.fb": function (e, instance, current) {
      instance.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll", function (e) {
        var current = instance.current,
          currTime = new Date().getTime();

        if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === "auto" && current.type !== "image")) {
          return;
        }

        e.preventDefault();
        e.stopPropagation();

        if (current.$slide.hasClass("fancybox-animated")) {
          return;
        }

        e = e.originalEvent || e;

        if (currTime - prevTime < 250) {
          return;
        }

        prevTime = currTime;

        instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? "next" : "previous"]();
      });
    }
  });
})(document, jQuery);
/*!
 * jQuery Form Plugin
 * version: 3.46.0-2013.11.21
 * Requires jQuery v1.5 or later
 * Copyright (c) 2013 M. Alsup
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Project repository: https://github.com/malsup/form
 * Dual licensed under the MIT and GPL licenses.
 * https://github.com/malsup/form#copyright-and-license
 */
/*global ActiveXObject */

// AMD support
(function (factory) {
    if (typeof define === 'function' && define.amd) {
        // using AMD; register as anon module
        define(['jquery'], factory);
    } else {
        // no AMD; invoke directly
        factory( (typeof(jQuery) != 'undefined') ? jQuery : window.Zepto );
    }
}

(function($) {
"use strict";

/*
    Usage Note:
    -----------
    Do not use both ajaxSubmit and ajaxForm on the same form.  These
    functions are mutually exclusive.  Use ajaxSubmit if you want
    to bind your own submit handler to the form.  For example,

    $(document).ready(function() {
        $('#myForm').on('submit', function(e) {
            e.preventDefault(); // <-- important
            $(this).ajaxSubmit({
                target: '#output'
            });
        });
    });

    Use ajaxForm when you want the plugin to manage all the event binding
    for you.  For example,

    $(document).ready(function() {
        $('#myForm').ajaxForm({
            target: '#output'
        });
    });

    You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
    form does not have to exist when you invoke ajaxForm:

    $('#myForm').ajaxForm({
        delegation: true,
        target: '#output'
    });

    When using ajaxForm, the ajaxSubmit function will be invoked for you
    at the appropriate time.
*/

/**
 * Feature detection
 */
var feature = {};
feature.fileapi = $("<input type='file'/>").get(0).files !== undefined;
feature.formdata = window.FormData !== undefined;

var hasProp = !!$.fn.prop;

// attr2 uses prop when it can but checks the return type for
// an expected string.  this accounts for the case where a form 
// contains inputs with names like "action" or "method"; in those
// cases "prop" returns the element
$.fn.attr2 = function() {
    if ( ! hasProp )
        return this.attr.apply(this, arguments);
    var val = this.prop.apply(this, arguments);
    if ( ( val && val.jquery ) || typeof val === 'string' )
        return val;
    return this.attr.apply(this, arguments);
};

/**
 * ajaxSubmit() provides a mechanism for immediately submitting
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
    /*jshint scripturl:true */

    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
    if (!this.length) {
        log('ajaxSubmit: skipping submit process - no element selected');
        return this;
    }

    var method, action, url, $form = this;

    if (typeof options == 'function') {
        options = { success: options };
    }
    else if ( options === undefined ) {
        options = {};
    }

    method = options.type || this.attr2('method');
    action = options.url  || this.attr2('action');

    url = (typeof action === 'string') ? $.trim(action) : '';
    url = url || window.location.href || '';
    if (url) {
        // clean url (don't include hash vaue)
        url = (url.match(/^([^#]+)/)||[])[1];
    }

    options = $.extend(true, {
        url:  url,
        success: $.ajaxSettings.success,
        type: method || $.ajaxSettings.type,
        iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
    }, options);

    // hook for manipulating the form data before it is extracted;
    // convenient for use with rich editors like tinyMCE or FCKEditor
    var veto = {};
    this.trigger('form-pre-serialize', [this, options, veto]);
    if (veto.veto) {
        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
        return this;
    }

    // provide opportunity to alter form data before it is serialized
    if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
        log('ajaxSubmit: submit aborted via beforeSerialize callback');
        return this;
    }

    var traditional = options.traditional;
    if ( traditional === undefined ) {
        traditional = $.ajaxSettings.traditional;
    }

    var elements = [];
    var qx, a = this.formToArray(options.semantic, elements);
    if (options.data) {
        options.extraData = options.data;
        qx = $.param(options.data, traditional);
    }

    // give pre-submit callback an opportunity to abort the submit
    if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
        log('ajaxSubmit: submit aborted via beforeSubmit callback');
        return this;
    }

    // fire vetoable 'validate' event
    this.trigger('form-submit-validate', [a, this, options, veto]);
    if (veto.veto) {
        log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
        return this;
    }

    var q = $.param(a, traditional);
    if (qx) {
        q = ( q ? (q + '&' + qx) : qx );
    }
    if (options.type.toUpperCase() == 'GET') {
        options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
        options.data = null;  // data is null for 'get'
    }
    else {
        options.data = q; // data is the query string for 'post'
    }

    var callbacks = [];
    if (options.resetForm) {
        callbacks.push(function() { $form.resetForm(); });
    }
    if (options.clearForm) {
        callbacks.push(function() { $form.clearForm(options.includeHidden); });
    }

    // perform a load on the target only if dataType is not provided
    if (!options.dataType && options.target) {
        var oldSuccess = options.success || function(){};
        callbacks.push(function(data) {
            var fn = options.replaceTarget ? 'replaceWith' : 'html';
            $(options.target)[fn](data).each(oldSuccess, arguments);
        });
    }
    else if (options.success) {
        callbacks.push(options.success);
    }

    options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
        var context = options.context || this ;    // jQuery 1.4+ supports scope context
        for (var i=0, max=callbacks.length; i < max; i++) {
            callbacks[i].apply(context, [data, status, xhr || $form, $form]);
        }
    };

    if (options.error) {
        var oldError = options.error;
        options.error = function(xhr, status, error) {
            var context = options.context || this;
            oldError.apply(context, [xhr, status, error, $form]);
        };
    }

     if (options.complete) {
        var oldComplete = options.complete;
        options.complete = function(xhr, status) {
            var context = options.context || this;
            oldComplete.apply(context, [xhr, status, $form]);
        };
    }

    // are there files to upload?

    // [value] (issue #113), also see comment:
    // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219
    var fileInputs = $('input[type=file]:enabled', this).filter(function() { return $(this).val() !== ''; });

    var hasFileInputs = fileInputs.length > 0;
    var mp = 'multipart/form-data';
    var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);

    var fileAPI = feature.fileapi && feature.formdata;
    log("fileAPI :" + fileAPI);
    var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;

    var jqxhr;

    // options.iframe allows user to force iframe mode
    // 06-NOV-09: now defaulting to iframe mode if file input is detected
    if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
        // hack to fix Safari hang (thanks to Tim Molendijk for this)
        // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
        if (options.closeKeepAlive) {
            $.get(options.closeKeepAlive, function() {
                jqxhr = fileUploadIframe(a);
            });
        }
        else {
            jqxhr = fileUploadIframe(a);
        }
    }
    else if ((hasFileInputs || multipart) && fileAPI) {
        jqxhr = fileUploadXhr(a);
    }
    else {
        jqxhr = $.ajax(options);
    }

    $form.removeData('jqxhr').data('jqxhr', jqxhr);

    // clear element array
    for (var k=0; k < elements.length; k++)
        elements[k] = null;

    // fire 'notify' event
    this.trigger('form-submit-notify', [this, options]);
    return this;

    // utility fn for deep serialization
    function deepSerialize(extraData){
        var serialized = $.param(extraData, options.traditional).split('&');
        var len = serialized.length;
        var result = [];
        var i, part;
        for (i=0; i < len; i++) {
            // #252; undo param space replacement
            serialized[i] = serialized[i].replace(/\+/g,' ');
            part = serialized[i].split('=');
            // #278; use array instead of object storage, favoring array serializations
            result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]);
        }
        return result;
    }

     // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
    function fileUploadXhr(a) {
        var formdata = new FormData();

        for (var i=0; i < a.length; i++) {
            formdata.append(a[i].name, a[i].value);
        }

        if (options.extraData) {
            var serializedData = deepSerialize(options.extraData);
            for (i=0; i < serializedData.length; i++)
                if (serializedData[i])
                    formdata.append(serializedData[i][0], serializedData[i][1]);
        }

        options.data = null;

        var s = $.extend(true, {}, $.ajaxSettings, options, {
            contentType: false,
            processData: false,
            cache: false,
            type: method || 'POST'
        });

        if (options.uploadProgress) {
            // workaround because jqXHR does not expose upload property
            s.xhr = function() {
                var xhr = $.ajaxSettings.xhr();
                if (xhr.upload) {
                    xhr.upload.addEventListener('progress', function(event) {
                        var percent = 0;
                        var position = event.loaded || event.position; /*event.position is deprecated*/
                        var total = event.total;
                        if (event.lengthComputable) {
                            percent = Math.ceil(position / total * 100);
                        }
                        options.uploadProgress(event, position, total, percent);
                    }, false);
                }
                return xhr;
            };
        }

        s.data = null;
        var beforeSend = s.beforeSend;
        s.beforeSend = function(xhr, o) {
            //Send FormData() provided by user
            if (options.formData)
                o.data = options.formData;
            else
                o.data = formdata;
            if(beforeSend)
                beforeSend.call(this, xhr, o);
        };
        return $.ajax(s);
    }

    // private function for handling file uploads (hat tip to YAHOO!)
    function fileUploadIframe(a) {
        var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
        var deferred = $.Deferred();

        // #341
        deferred.abort = function(status) {
            xhr.abort(status);
        };

        if (a) {
            // ensure that every serialized input is still enabled
            for (i=0; i < elements.length; i++) {
                el = $(elements[i]);
                if ( hasProp )
                    el.prop('disabled', false);
                else
                    el.removeAttr('disabled');
            }
        }

        s = $.extend(true, {}, $.ajaxSettings, options);
        s.context = s.context || s;
        id = 'jqFormIO' + (new Date().getTime());
        if (s.iframeTarget) {
            $io = $(s.iframeTarget);
            n = $io.attr2('name');
            if (!n)
                 $io.attr2('name', id);
            else
                id = n;
        }
        else {
            $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
            $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
        }
        io = $io[0];


        xhr = { // mock object
            aborted: 0,
            responseText: null,
            responseXML: null,
            status: 0,
            statusText: 'n/a',
            getAllResponseHeaders: function() {},
            getResponseHeader: function() {},
            setRequestHeader: function() {},
            abort: function(status) {
                var e = (status === 'timeout' ? 'timeout' : 'aborted');
                log('aborting upload... ' + e);
                this.aborted = 1;

                try { // #214, #257
                    if (io.contentWindow.document.execCommand) {
                        io.contentWindow.document.execCommand('Stop');
                    }
                }
                catch(ignore) {}

                $io.attr('src', s.iframeSrc); // abort op in progress
                xhr.error = e;
                if (s.error)
                    s.error.call(s.context, xhr, e, status);
                if (g)
                    $.event.trigger("ajaxError", [xhr, s, e]);
                if (s.complete)
                    s.complete.call(s.context, xhr, e);
            }
        };

        g = s.global;
        // trigger ajax global events so that activity/block indicators work like normal
        if (g && 0 === $.active++) {
            $.event.trigger("ajaxStart");
        }
        if (g) {
            $.event.trigger("ajaxSend", [xhr, s]);
        }

        if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
            if (s.global) {
                $.active--;
            }
            deferred.reject();
            return deferred;
        }
        if (xhr.aborted) {
            deferred.reject();
            return deferred;
        }

        // add submitting element to data if we know it
        sub = form.clk;
        if (sub) {
            n = sub.name;
            if (n && !sub.disabled) {
                s.extraData = s.extraData || {};
                s.extraData[n] = sub.value;
                if (sub.type == "image") {
                    s.extraData[n+'.x'] = form.clk_x;
                    s.extraData[n+'.y'] = form.clk_y;
                }
            }
        }

        var CLIENT_TIMEOUT_ABORT = 1;
        var SERVER_ABORT = 2;
                
        function getDoc(frame) {
            /* it looks like contentWindow or contentDocument do not
             * carry the protocol property in ie8, when running under ssl
             * frame.document is the only valid response document, since
             * the protocol is know but not on the other two objects. strange?
             * "Same origin policy" http://en.wikipedia.org/wiki/Same_origin_policy
             */
            
            var doc = null;
            
            // IE8 cascading access check
            try {
                if (frame.contentWindow) {
                    doc = frame.contentWindow.document;
                }
            } catch(err) {
                // IE8 access denied under ssl & missing protocol
                log('cannot get iframe.contentWindow document: ' + err);
            }

            if (doc) { // successful getting content
                return doc;
            }

            try { // simply checking may throw in ie8 under ssl or mismatched protocol
                doc = frame.contentDocument ? frame.contentDocument : frame.document;
            } catch(err) {
                // last attempt
                log('cannot get iframe.contentDocument: ' + err);
                doc = frame.document;
            }
            return doc;
        }

        // Rails CSRF hack (thanks to Yvan Barthelemy)
        var csrf_token = $('meta[name=csrf-token]').attr('content');
        var csrf_param = $('meta[name=csrf-param]').attr('content');
        if (csrf_param && csrf_token) {
            s.extraData = s.extraData || {};
            s.extraData[csrf_param] = csrf_token;
        }

        // take a breath so that pending repaints get some cpu time before the upload starts
        function doSubmit() {
            // make sure form attrs are set
            var t = $form.attr2('target'), a = $form.attr2('action');

            // update form attrs in IE friendly way
            form.setAttribute('target',id);
            if (!method || /post/i.test(method) ) {
                form.setAttribute('method', 'POST');
            }
            if (a != s.url) {
                form.setAttribute('action', s.url);
            }

            // ie borks in some cases when setting encoding
            if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
                $form.attr({
                    encoding: 'multipart/form-data',
                    enctype:  'multipart/form-data'
                });
            }

            // support timout
            if (s.timeout) {
                timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
            }

            // look for server aborts
            function checkState() {
                try {
                    var state = getDoc(io).readyState;
                    log('state = ' + state);
                    if (state && state.toLowerCase() == 'uninitialized')
                        setTimeout(checkState,50);
                }
                catch(e) {
                    log('Server abort: ' , e, ' (', e.name, ')');
                    cb(SERVER_ABORT);
                    if (timeoutHandle)
                        clearTimeout(timeoutHandle);
                    timeoutHandle = undefined;
                }
            }

            // add "extra" data to form if provided in options
            var extraInputs = [];
            try {
                if (s.extraData) {
                    for (var n in s.extraData) {
                        if (s.extraData.hasOwnProperty(n)) {
                           // if using the $.param format that allows for multiple values with the same name
                           if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
                               extraInputs.push(
                               $('<input type="hidden" name="'+s.extraData[n].name+'">').val(s.extraData[n].value)
                                   .appendTo(form)[0]);
                           } else {
                               extraInputs.push(
                               $('<input type="hidden" name="'+n+'">').val(s.extraData[n])
                                   .appendTo(form)[0]);
                           }
                        }
                    }
                }

                if (!s.iframeTarget) {
                    // add iframe to doc and submit the form
                    $io.appendTo('body');
                }
                if (io.attachEvent)
                    io.attachEvent('onload', cb);
                else
                    io.addEventListener('load', cb, false);
                setTimeout(checkState,15);

                try {
                    form.submit();
                } catch(err) {
                    // just in case form has element with name/id of 'submit'
                    var submitFn = document.createElement('form').submit;
                    submitFn.apply(form);
                }
            }
            finally {
                // reset attrs and remove "extra" input elements
                form.setAttribute('action',a);
                if(t) {
                    form.setAttribute('target', t);
                } else {
                    $form.removeAttr('target');
                }
                $(extraInputs).remove();
            }
        }

        if (s.forceSync) {
            doSubmit();
        }
        else {
            setTimeout(doSubmit, 10); // this lets dom updates render
        }

        var data, doc, domCheckCount = 50, callbackProcessed;

        function cb(e) {
            if (xhr.aborted || callbackProcessed) {
                return;
            }
            
            doc = getDoc(io);
            if(!doc) {
                log('cannot access response document');
                e = SERVER_ABORT;
            }
            if (e === CLIENT_TIMEOUT_ABORT && xhr) {
                xhr.abort('timeout');
                deferred.reject(xhr, 'timeout');
                return;
            }
            else if (e == SERVER_ABORT && xhr) {
                xhr.abort('server abort');
                deferred.reject(xhr, 'error', 'server abort');
                return;
            }

            if (!doc || doc.location.href == s.iframeSrc) {
                // response not received yet
                if (!timedOut)
                    return;
            }
            if (io.detachEvent)
                io.detachEvent('onload', cb);
            else
                io.removeEventListener('load', cb, false);

            var status = 'success', errMsg;
            try {
                if (timedOut) {
                    throw 'timeout';
                }

                var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
                log('isXml='+isXml);
                if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
                    if (--domCheckCount) {
                        // in some browsers (Opera) the iframe DOM is not always traversable when
                        // the onload callback fires, so we loop a bit to accommodate
                        log('requeing onLoad callback, DOM not available');
                        setTimeout(cb, 250);
                        return;
                    }
                    // let this fall through because server response could be an empty document
                    //log('Could not access iframe DOM after mutiple tries.');
                    //throw 'DOMException: not available';
                }

                //log('response detected');
                var docRoot = doc.body ? doc.body : doc.documentElement;
                xhr.responseText = docRoot ? docRoot.innerHTML : null;
                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
                if (isXml)
                    s.dataType = 'xml';
                xhr.getResponseHeader = function(header){
                    var headers = {'content-type': s.dataType};
                    return headers[header.toLowerCase()];
                };
                // support for XHR 'status' & 'statusText' emulation :
                if (docRoot) {
                    xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
                    xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
                }

                var dt = (s.dataType || '').toLowerCase();
                var scr = /(json|script|text)/.test(dt);
                if (scr || s.textarea) {
                    // see if user embedded response in textarea
                    var ta = doc.getElementsByTagName('textarea')[0];
                    if (ta) {
                        xhr.responseText = ta.value;
                        // support for XHR 'status' & 'statusText' emulation :
                        xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
                        xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
                    }
                    else if (scr) {
                        // account for browsers injecting pre around json response
                        var pre = doc.getElementsByTagName('pre')[0];
                        var b = doc.getElementsByTagName('body')[0];
                        if (pre) {
                            xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
                        }
                        else if (b) {
                            xhr.responseText = b.textContent ? b.textContent : b.innerText;
                        }
                    }
                }
                else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {
                    xhr.responseXML = toXml(xhr.responseText);
                }

                try {
                    data = httpData(xhr, dt, s);
                }
                catch (err) {
                    status = 'parsererror';
                    xhr.error = errMsg = (err || status);
                }
            }
            catch (err) {
                log('error caught: ',err);
                status = 'error';
                xhr.error = errMsg = (err || status);
            }

            if (xhr.aborted) {
                log('upload aborted');
                status = null;
            }

            if (xhr.status) { // we've set xhr.status
                status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
            }

            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
            if (status === 'success') {
                if (s.success)
                    s.success.call(s.context, data, 'success', xhr);
                deferred.resolve(xhr.responseText, 'success', xhr);
                if (g)
                    $.event.trigger("ajaxSuccess", [xhr, s]);
            }
            else if (status) {
                if (errMsg === undefined)
                    errMsg = xhr.statusText;
                if (s.error)
                    s.error.call(s.context, xhr, status, errMsg);
                deferred.reject(xhr, 'error', errMsg);
                if (g)
                    $.event.trigger("ajaxError", [xhr, s, errMsg]);
            }

            if (g)
                $.event.trigger("ajaxComplete", [xhr, s]);

            if (g && ! --$.active) {
                $.event.trigger("ajaxStop");
            }

            if (s.complete)
                s.complete.call(s.context, xhr, status);

            callbackProcessed = true;
            if (s.timeout)
                clearTimeout(timeoutHandle);

            // clean up
            setTimeout(function() {
                if (!s.iframeTarget)
                    $io.remove();
                else  //adding else to clean up existing iframe response.
                    $io.attr('src', s.iframeSrc);
                xhr.responseXML = null;
            }, 100);
        }

        var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
            if (window.ActiveXObject) {
                doc = new ActiveXObject('Microsoft.XMLDOM');
                doc.async = 'false';
                doc.loadXML(s);
            }
            else {
                doc = (new DOMParser()).parseFromString(s, 'text/xml');
            }
            return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
        };
        var parseJSON = $.parseJSON || function(s) {
            /*jslint evil:true */
            return window['eval']('(' + s + ')');
        };

        var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4

            var ct = xhr.getResponseHeader('content-type') || '',
                xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
                data = xml ? xhr.responseXML : xhr.responseText;

            if (xml && data.documentElement.nodeName === 'parsererror') {
                if ($.error)
                    $.error('parsererror');
            }
            if (s && s.dataFilter) {
                data = s.dataFilter(data, type);
            }
            if (typeof data === 'string') {
                if (type === 'json' || !type && ct.indexOf('json') >= 0) {
                    data = parseJSON(data);
                } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
                    $.globalEval(data);
                }
            }
            return data;
        };

        return deferred;
    }
};

/**
 * ajaxForm() provides a mechanism for fully automating form submission.
 *
 * The advantages of using this method instead of ajaxSubmit() are:
 *
 * 1: This method will include coordinates for <input type="image" /> elements (if the element
 *    is used to submit the form).
 * 2. This method will include the submit element's name/value data (for the element that was
 *    used to submit the form).
 * 3. This method binds the submit() method to the form for you.
 *
 * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
 * passes the options argument along after properly binding events for submit elements and
 * the form itself.
 */
$.fn.ajaxForm = function(options) {
    options = options || {};
    options.delegation = options.delegation && $.isFunction($.fn.on);

    // in jQuery 1.3+ we can fix mistakes with the ready state
    if (!options.delegation && this.length === 0) {
        var o = { s: this.selector, c: this.context };
        if (!$.isReady && o.s) {
            log('DOM not ready, queuing ajaxForm');
            $(function() {
                $(o.s,o.c).ajaxForm(options);
            });
            return this;
        }
        // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
        log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
        return this;
    }

    if ( options.delegation ) {
        $(document)
            .off('submit.form-plugin', this.selector, doAjaxSubmit)
            .off('click.form-plugin', this.selector, captureSubmittingElement)
            .on('submit.form-plugin', this.selector, options, doAjaxSubmit)
            .on('click.form-plugin', this.selector, options, captureSubmittingElement);
        return this;
    }

    return this.ajaxFormUnbind()
        .bind('submit.form-plugin', options, doAjaxSubmit)
        .bind('click.form-plugin', options, captureSubmittingElement);
};

// private event handlers
function doAjaxSubmit(e) {
    /*jshint validthis:true */
    var options = e.data;
    if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
        e.preventDefault();
        $(e.target).ajaxSubmit(options); // #365
    }
}

function captureSubmittingElement(e) {
    /*jshint validthis:true */
    var target = e.target;
    var $el = $(target);
    if (!($el.is("[type=submit],[type=image]"))) {
        // is this a child element of the submit el?  (ex: a span within a button)
        var t = $el.closest('[type=submit]');
        if (t.length === 0) {
            return;
        }
        target = t[0];
    }
    var form = this;
    form.clk = target;
    if (target.type == 'image') {
        if (e.offsetX !== undefined) {
            form.clk_x = e.offsetX;
            form.clk_y = e.offsetY;
        } else if (typeof $.fn.offset == 'function') {
            var offset = $el.offset();
            form.clk_x = e.pageX - offset.left;
            form.clk_y = e.pageY - offset.top;
        } else {
            form.clk_x = e.pageX - target.offsetLeft;
            form.clk_y = e.pageY - target.offsetTop;
        }
    }
    // clear form vars
    setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
}


// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
$.fn.ajaxFormUnbind = function() {
    return this.unbind('submit.form-plugin click.form-plugin');
};

/**
 * formToArray() gathers form element data into an array of objects that can
 * be passed to any of the following ajax functions: $.get, $.post, or load.
 * Each object in the array has both a 'name' and 'value' property.  An example of
 * an array for a simple login form might be:
 *
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
 *
 * It is this array that is passed to pre-submit callback functions provided to the
 * ajaxSubmit() and ajaxForm() methods.
 */
$.fn.formToArray = function(semantic, elements) {
    var a = [];
    if (this.length === 0) {
        return a;
    }

    var form = this[0];
    var els = semantic ? form.getElementsByTagName('*') : form.elements;
    if (!els) {
        return a;
    }

    var i,j,n,v,el,max,jmax;
    for(i=0, max=els.length; i < max; i++) {
        el = els[i];
        n = el.name;
        if (!n || el.disabled) {
            continue;
        }

        if (semantic && form.clk && el.type == "image") {
            // handle image inputs on the fly when semantic == true
            if(form.clk == el) {
                a.push({name: n, value: $(el).val(), type: el.type });
                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
            }
            continue;
        }

        v = $.fieldValue(el, true);
        if (v && v.constructor == Array) {
            if (elements)
                elements.push(el);
            for(j=0, jmax=v.length; j < jmax; j++) {
                a.push({name: n, value: v[j]});
            }
        }
        else if (feature.fileapi && el.type == 'file') {
            if (elements)
                elements.push(el);
            var files = el.files;
            if (files.length) {
                for (j=0; j < files.length; j++) {
                    a.push({name: n, value: files[j], type: el.type});
                }
            }
            else {
                // #180
                a.push({ name: n, value: '', type: el.type });
            }
        }
        else if (v !== null && typeof v != 'undefined') {
            if (elements)
                elements.push(el);
            a.push({name: n, value: v, type: el.type, required: el.required});
        }
    }

    if (!semantic && form.clk) {
        // input type=='image' are not found in elements array! handle it here
        var $input = $(form.clk), input = $input[0];
        n = input.name;
        if (n && !input.disabled && input.type == 'image') {
            a.push({name: n, value: $input.val()});
            a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
        }
    }
    return a;
};

/**
 * Serializes form data into a 'submittable' string. This method will return a string
 * in the format: name1=value1&amp;name2=value2
 */
$.fn.formSerialize = function(semantic) {
    //hand off to jQuery.param for proper encoding
    return $.param(this.formToArray(semantic));
};

/**
 * Serializes all field elements in the jQuery object into a query string.
 * This method will return a string in the format: name1=value1&amp;name2=value2
 */
$.fn.fieldSerialize = function(successful) {
    var a = [];
    this.each(function() {
        var n = this.name;
        if (!n) {
            return;
        }
        var v = $.fieldValue(this, successful);
        if (v && v.constructor == Array) {
            for (var i=0,max=v.length; i < max; i++) {
                a.push({name: n, value: v[i]});
            }
        }
        else if (v !== null && typeof v != 'undefined') {
            a.push({name: this.name, value: v});
        }
    });
    //hand off to jQuery.param for proper encoding
    return $.param(a);
};

/**
 * Returns the value(s) of the element in the matched set.  For example, consider the following form:
 *
 *  <form><fieldset>
 *      <input name="A" type="text" />
 *      <input name="A" type="text" />
 *      <input name="B" type="checkbox" value="B1" />
 *      <input name="B" type="checkbox" value="B2"/>
 *      <input name="C" type="radio" value="C1" />
 *      <input name="C" type="radio" value="C2" />
 *  </fieldset></form>
 *
 *  var v = $('input[type=text]').fieldValue();
 *  // if no values are entered into the text inputs
 *  v == ['','']
 *  // if values entered into the text inputs are 'foo' and 'bar'
 *  v == ['foo','bar']
 *
 *  var v = $('input[type=checkbox]').fieldValue();
 *  // if neither checkbox is checked
 *  v === undefined
 *  // if both checkboxes are checked
 *  v == ['B1', 'B2']
 *
 *  var v = $('input[type=radio]').fieldValue();
 *  // if neither radio is checked
 *  v === undefined
 *  // if first radio is checked
 *  v == ['C1']
 *
 * The successful argument controls whether or not the field element must be 'successful'
 * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
 * The default value of the successful argument is true.  If this value is false the value(s)
 * for each element is returned.
 *
 * Note: This method *always* returns an array.  If no valid value can be determined the
 *    array will be empty, otherwise it will contain one or more values.
 */
$.fn.fieldValue = function(successful) {
    for (var val=[], i=0, max=this.length; i < max; i++) {
        var el = this[i];
        var v = $.fieldValue(el, successful);
        if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
            continue;
        }
        if (v.constructor == Array)
            $.merge(val, v);
        else
            val.push(v);
    }
    return val;
};

/**
 * Returns the value of the field element.
 */
$.fieldValue = function(el, successful) {
    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
    if (successful === undefined) {
        successful = true;
    }

    if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
        (t == 'checkbox' || t == 'radio') && !el.checked ||
        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
        tag == 'select' && el.selectedIndex == -1)) {
            return null;
    }

    if (tag == 'select') {
        var index = el.selectedIndex;
        if (index < 0) {
            return null;
        }
        var a = [], ops = el.options;
        var one = (t == 'select-one');
        var max = (one ? index+1 : ops.length);
        for(var i=(one ? index : 0); i < max; i++) {
            var op = ops[i];
            if (op.selected) {
                var v = op.value;
                if (!v) { // extra pain for IE...
                    v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
                }
                if (one) {
                    return v;
                }
                a.push(v);
            }
        }
        return a;
    }
    return $(el).val();
};

/**
 * Clears the form data.  Takes the following actions on the form's input fields:
 *  - input text fields will have their 'value' property set to the empty string
 *  - select elements will have their 'selectedIndex' property set to -1
 *  - checkbox and radio inputs will have their 'checked' property set to false
 *  - inputs of type submit, button, reset, and hidden will *not* be effected
 *  - button elements will *not* be effected
 */
$.fn.clearForm = function(includeHidden) {
    return this.each(function() {
        $('input,select,textarea', this).clearFields(includeHidden);
    });
};

/**
 * Clears the selected form elements.
 */
$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
    var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
    return this.each(function() {
        var t = this.type, tag = this.tagName.toLowerCase();
        if (re.test(t) || tag == 'textarea') {
            this.value = '';
        }
        else if (t == 'checkbox' || t == 'radio') {
            this.checked = false;
        }
        else if (tag == 'select') {
            this.selectedIndex = -1;
        }
		else if (t == "file") {
			if (/MSIE/.test(navigator.userAgent)) {
				$(this).replaceWith($(this).clone(true));
			} else {
				$(this).val('');
			}
		}
        else if (includeHidden) {
            // includeHidden can be the value true, or it can be a selector string
            // indicating a special test; for example:
            //  $('#myForm').clearForm('.special:hidden')
            // the above would clean hidden inputs that have the class of 'special'
            if ( (includeHidden === true && /hidden/.test(t)) ||
                 (typeof includeHidden == 'string' && $(this).is(includeHidden)) )
                this.value = '';
        }
    });
};

/**
 * Resets the form data.  Causes all form elements to be reset to their original value.
 */
$.fn.resetForm = function() {
    return this.each(function() {
        // guard against an input with the name of 'reset'
        // note that IE reports the reset function as an 'object'
        if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
            this.reset();
        }
    });
};

/**
 * Enables or disables any matching elements.
 */
$.fn.enable = function(b) {
    if (b === undefined) {
        b = true;
    }
    return this.each(function() {
        this.disabled = !b;
    });
};

/**
 * Checks/unchecks any matching checkboxes or radio buttons and
 * selects/deselects and matching option elements.
 */
$.fn.selected = function(select) {
    if (select === undefined) {
        select = true;
    }
    return this.each(function() {
        var t = this.type;
        if (t == 'checkbox' || t == 'radio') {
            this.checked = select;
        }
        else if (this.tagName.toLowerCase() == 'option') {
            var $sel = $(this).parent('select');
            if (select && $sel[0] && $sel[0].type == 'select-one') {
                // deselect all other options
                $sel.find('option').selected(false);
            }
            this.selected = select;
        }
    });
};

// expose debug var
$.fn.ajaxSubmit.debug = false;

// helper fn for console logging
function log() {
    if (!$.fn.ajaxSubmit.debug)
        return;
    var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
    if (window.console && window.console.log) {
        window.console.log(msg);
    }
    else if (window.opera && window.opera.postError) {
        window.opera.postError(msg);
    }
}

}));


/**
 * jQuery Masonry v2.1.08
 * A dynamic layout plugin for jQuery
 * The flip-side of CSS Floats
 * http://masonry.desandro.com
 *
 * Licensed under the MIT license.
 * Copyright 2012 David DeSandro
 */
(function(e,t,n){"use strict";var r=t.event,i;r.special.smartresize={setup:function(){t(this).bind("resize",r.special.smartresize.handler)},teardown:function(){t(this).unbind("resize",r.special.smartresize.handler)},handler:function(e,t){var n=this,s=arguments;e.type="smartresize",i&&clearTimeout(i),i=setTimeout(function(){r.dispatch.apply(n,s)},t==="execAsap"?0:100)}},t.fn.smartresize=function(e){return e?this.bind("smartresize",e):this.trigger("smartresize",["execAsap"])},t.Mason=function(e,n){this.element=t(n),this._create(e),this._init()},t.Mason.settings={isResizable:!0,isAnimated:!1,animationOptions:{queue:!1,duration:500},gutterWidth:0,isRTL:!1,isFitWidth:!1,containerStyle:{position:"relative"}},t.Mason.prototype={_filterFindBricks:function(e){var t=this.options.itemSelector;return t?e.filter(t).add(e.find(t)):e},_getBricks:function(e){var t=this._filterFindBricks(e).css({position:"absolute"}).addClass("masonry-brick");return t},_create:function(n){this.options=t.extend(!0,{},t.Mason.settings,n),this.styleQueue=[];var r=this.element[0].style;this.originalStyle={height:r.height||""};var i=this.options.containerStyle;for(var s in i)this.originalStyle[s]=r[s]||"";this.element.css(i),this.horizontalDirection=this.options.isRTL?"right":"left";var o=this.element.css("padding-"+this.horizontalDirection),u=this.element.css("padding-top");this.offset={x:o?parseInt(o,10):0,y:u?parseInt(u,10):0},this.isFluid=this.options.columnWidth&&typeof this.options.columnWidth=="function";var a=this;setTimeout(function(){a.element.addClass("masonry")},0),this.options.isResizable&&t(e).bind("smartresize.masonry",function(){a.resize()}),this.reloadItems()},_init:function(e){this._getColumns(),this._reLayout(e)},option:function(e,n){t.isPlainObject(e)&&(this.options=t.extend(!0,this.options,e))},layout:function(e,t){for(var n=0,r=e.length;n<r;n++)this._placeBrick(e[n]);var i={};i.height=Math.max.apply(Math,this.colYs);if(this.options.isFitWidth){var s=0;n=this.cols;while(--n){if(this.colYs[n]!==0)break;s++}i.width=(this.cols-s)*this.columnWidth-this.options.gutterWidth}this.styleQueue.push({$el:this.element,style:i});var o=this.isLaidOut?this.options.isAnimated?"animate":"css":"css",u=this.options.animationOptions,a;for(n=0,r=this.styleQueue.length;n<r;n++)a=this.styleQueue[n],a.$el[o](a.style,u);this.styleQueue=[],t&&t.call(e),this.isLaidOut=!0},_getColumns:function(){var e=this.options.isFitWidth?this.element.parent():this.element,t=e.width();this.columnWidth=this.isFluid?this.options.columnWidth(t):this.options.columnWidth||this.$bricks.outerWidth(!0)||t,this.columnWidth+=this.options.gutterWidth,this.cols=Math.floor((t+this.options.gutterWidth)/this.columnWidth),this.cols=Math.max(this.cols,1)},_placeBrick:function(e){var n=t(e),r,i,s,o,u;r=Math.ceil(n.outerWidth(!0)/this.columnWidth),r=Math.min(r,this.cols);if(r===1)s=this.colYs;else{i=this.cols+1-r,s=[];for(u=0;u<i;u++)o=this.colYs.slice(u,u+r),s[u]=Math.max.apply(Math,o)}var a=Math.min.apply(Math,s),f=0;for(var l=0,c=s.length;l<c;l++)if(s[l]===a){f=l;break}var h={top:a+this.offset.y};h[this.horizontalDirection]=this.columnWidth*f+this.offset.x,this.styleQueue.push({$el:n,style:h});var p=a+n.outerHeight(!0),d=this.cols+1-c;for(l=0;l<d;l++)this.colYs[f+l]=p},resize:function(){var e=this.cols;this._getColumns(),(this.isFluid||this.cols!==e)&&this._reLayout()},_reLayout:function(e){var t=this.cols;this.colYs=[];while(t--)this.colYs.push(0);this.layout(this.$bricks,e)},reloadItems:function(){this.$bricks=this._getBricks(this.element.children())},reload:function(e){this.reloadItems(),this._init(e)},appended:function(e,t,n){if(t){this._filterFindBricks(e).css({top:this.element.height()});var r=this;setTimeout(function(){r._appended(e,n)},1)}else this._appended(e,n)},_appended:function(e,t){var n=this._getBricks(e);this.$bricks=this.$bricks.add(n),this.layout(n,t)},remove:function(e){this.$bricks=this.$bricks.not(e),e.remove()},destroy:function(){this.$bricks.removeClass("masonry-brick").each(function(){this.style.position="",this.style.top="",this.style.left=""});var n=this.element[0].style;for(var r in this.originalStyle)n[r]=this.originalStyle[r];this.element.unbind(".masonry").removeClass("masonry").removeData("masonry"),t(e).unbind(".masonry")}},t.fn.imagesLoaded=function(e){function u(){e.call(n,r)}function a(e){var n=e.target;n.src!==s&&t.inArray(n,o)===-1&&(o.push(n),--i<=0&&(setTimeout(u),r.unbind(".imagesLoaded",a)))}var n=this,r=n.find("img").add(n.filter("img")),i=r.length,s="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",o=[];return i||u(),r.bind("load.imagesLoaded error.imagesLoaded",a).each(function(){var e=this.src;this.src=s,this.src=e}),n};var s=function(t){e.console&&e.console.error(t)};t.fn.masonry=function(e){if(typeof e=="string"){var n=Array.prototype.slice.call(arguments,1);this.each(function(){var r=t.data(this,"masonry");if(!r){s("cannot call methods on masonry prior to initialization; attempted to call method '"+e+"'");return}if(!t.isFunction(r[e])||e.charAt(0)==="_"){s("no such method '"+e+"' for masonry instance");return}r[e].apply(r,n)})}else this.each(function(){var n=t.data(this,"masonry");n?(n.option(e||{}),n._init()):t.data(this,"masonry",new t.Mason(e,this))});return this}})(window,jQuery);
/*!
 * JavaScript Cookie v2.2.1
 * https://github.com/js-cookie/js-cookie
 *
 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
 * Released under the MIT license
 */
;(function (factory) {
	var registeredInModuleLoader;
	if (typeof define === 'function' && define.amd) {
		define(factory);
		registeredInModuleLoader = true;
	}
	if (typeof exports === 'object') {
		module.exports = factory();
		registeredInModuleLoader = true;
	}
	if (!registeredInModuleLoader) {
		var OldCookies = window.Cookies;
		var api = window.Cookies = factory();
		api.noConflict = function () {
			window.Cookies = OldCookies;
			return api;
		};
	}
}(function () {
	function extend () {
		var i = 0;
		var result = {};
		for (; i < arguments.length; i++) {
			var attributes = arguments[ i ];
			for (var key in attributes) {
				result[key] = attributes[key];
			}
		}
		return result;
	}

	function decode (s) {
		return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
	}

	function init (converter) {
		function api() {}

		function set (key, value, attributes) {
			if (typeof document === 'undefined') {
				return;
			}

			attributes = extend({
				path: '/'
			}, api.defaults, attributes);

			if (typeof attributes.expires === 'number') {
				attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);
			}

			// We're using "expires" because "max-age" is not supported by IE
			attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';

			try {
				var result = JSON.stringify(value);
				if (/^[\{\[]/.test(result)) {
					value = result;
				}
			} catch (e) {}

			value = converter.write ?
				converter.write(value, key) :
				encodeURIComponent(String(value))
					.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);

			key = encodeURIComponent(String(key))
				.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)
				.replace(/[\(\)]/g, escape);

			var stringifiedAttributes = '';
			for (var attributeName in attributes) {
				if (!attributes[attributeName]) {
					continue;
				}
				stringifiedAttributes += '; ' + attributeName;
				if (attributes[attributeName] === true) {
					continue;
				}

				// Considers RFC 6265 section 5.2:
				// ...
				// 3.  If the remaining unparsed-attributes contains a %x3B (";")
				//     character:
				// Consume the characters of the unparsed-attributes up to,
				// not including, the first %x3B (";") character.
				// ...
				stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
			}

			return (document.cookie = key + '=' + value + stringifiedAttributes);
		}

		function get (key, json) {
			if (typeof document === 'undefined') {
				return;
			}

			var jar = {};
			// To prevent the for loop in the first place assign an empty array
			// in case there are no cookies at all.
			var cookies = document.cookie ? document.cookie.split('; ') : [];
			var i = 0;

			for (; i < cookies.length; i++) {
				var parts = cookies[i].split('=');
				var cookie = parts.slice(1).join('=');

				if (!json && cookie.charAt(0) === '"') {
					cookie = cookie.slice(1, -1);
				}

				try {
					var name = decode(parts[0]);
					cookie = (converter.read || converter)(cookie, name) ||
						decode(cookie);

					if (json) {
						try {
							cookie = JSON.parse(cookie);
						} catch (e) {}
					}

					jar[name] = cookie;

					if (key === name) {
						break;
					}
				} catch (e) {}
			}

			return key ? jar[key] : jar;
		}

		api.set = set;
		api.get = function (key) {
			return get(key, false /* read as raw */);
		};
		api.getJSON = function (key) {
			return get(key, true /* read as json */);
		};
		api.remove = function (key, attributes) {
			set(key, '', extend(attributes, {
				expires: -1
			}));
		};

		api.defaults = {};

		api.withConverter = init;

		return api;
	}

	return init(function () {});
}));

/*
* loglevel - https://github.com/pimterry/loglevel
*
* Copyright (c) 2013 Tim Perry
* Licensed under the MIT license.
*/
(function (root, definition) {
    "use strict";
    if (typeof define === 'function' && define.amd) {
        define(definition);
    } else if (typeof module === 'object' && module.exports) {
        module.exports = definition();
    } else {
        root.log = definition();
    }
}(this, function () {
    "use strict";

    // Slightly dubious tricks to cut down minimized file size
    var noop = function() {};
    var undefinedType = "undefined";

    var logMethods = [
        "trace",
        "debug",
        "info",
        "warn",
        "error"
    ];

    // Cross-browser bind equivalent that works at least back to IE6
    function bindMethod(obj, methodName) {
        var method = obj[methodName];
        if (typeof method.bind === 'function') {
            return method.bind(obj);
        } else {
            try {
                return Function.prototype.bind.call(method, obj);
            } catch (e) {
                // Missing bind shim or IE8 + Modernizr, fallback to wrapping
                return function() {
                    return Function.prototype.apply.apply(method, [obj, arguments]);
                };
            }
        }
    }

    // Build the best logging method possible for this env
    // Wherever possible we want to bind, not wrap, to preserve stack traces
    function realMethod(methodName) {
        if (methodName === 'debug') {
            methodName = 'log';
        }

        if (typeof console === undefinedType) {
            return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives
        } else if (console[methodName] !== undefined) {
            return bindMethod(console, methodName);
        } else if (console.log !== undefined) {
            return bindMethod(console, 'log');
        } else {
            return noop;
        }
    }

    // These private functions always need `this` to be set properly

    function replaceLoggingMethods(level, loggerName) {
        /*jshint validthis:true */
        for (var i = 0; i < logMethods.length; i++) {
            var methodName = logMethods[i];
            this[methodName] = (i < level) ?
                noop :
                this.methodFactory(methodName, level, loggerName);
        }

        // Define log.log as an alias for log.debug
        this.log = this.debug;
    }

    // In old IE versions, the console isn't present until you first open it.
    // We build realMethod() replacements here that regenerate logging methods
    function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {
        return function () {
            if (typeof console !== undefinedType) {
                replaceLoggingMethods.call(this, level, loggerName);
                this[methodName].apply(this, arguments);
            }
        };
    }

    // By default, we use closely bound real methods wherever possible, and
    // otherwise we wait for a console to appear, and then try again.
    function defaultMethodFactory(methodName, level, loggerName) {
        /*jshint validthis:true */
        return realMethod(methodName) ||
               enableLoggingWhenConsoleArrives.apply(this, arguments);
    }

    function Logger(name, defaultLevel, factory) {
      var self = this;
      var currentLevel;
      var storageKey = "loglevel";
      if (name) {
        storageKey += ":" + name;
      }

      function persistLevelIfPossible(levelNum) {
          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();

          if (typeof window === undefinedType) return;

          // Use localStorage if available
          try {
              window.localStorage[storageKey] = levelName;
              return;
          } catch (ignore) {}

          // Use session cookie as fallback
          try {
              window.document.cookie =
                encodeURIComponent(storageKey) + "=" + levelName + ";";
          } catch (ignore) {}
      }

      function getPersistedLevel() {
          var storedLevel;

          if (typeof window === undefinedType) return;

          try {
              storedLevel = window.localStorage[storageKey];
          } catch (ignore) {}

          // Fallback to cookies if local storage gives us nothing
          if (typeof storedLevel === undefinedType) {
              try {
                  var cookie = window.document.cookie;
                  var location = cookie.indexOf(
                      encodeURIComponent(storageKey) + "=");
                  if (location !== -1) {
                      storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];
                  }
              } catch (ignore) {}
          }

          // If the stored level is not valid, treat it as if nothing was stored.
          if (self.levels[storedLevel] === undefined) {
              storedLevel = undefined;
          }

          return storedLevel;
      }

      /*
       *
       * Public logger API - see https://github.com/pimterry/loglevel for details
       *
       */

      self.name = name;

      self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3,
          "ERROR": 4, "SILENT": 5};

      self.methodFactory = factory || defaultMethodFactory;

      self.getLevel = function () {
          return currentLevel;
      };

      self.setLevel = function (level, persist) {
          if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
              level = self.levels[level.toUpperCase()];
          }
          if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
              currentLevel = level;
              if (persist !== false) {  // defaults to true
                  persistLevelIfPossible(level);
              }
              replaceLoggingMethods.call(self, level, name);
              if (typeof console === undefinedType && level < self.levels.SILENT) {
                  return "No console available for logging";
              }
          } else {
              throw "log.setLevel() called with invalid level: " + level;
          }
      };

      self.setDefaultLevel = function (level) {
          if (!getPersistedLevel()) {
              self.setLevel(level, false);
          }
      };

      self.enableAll = function(persist) {
          self.setLevel(self.levels.TRACE, persist);
      };

      self.disableAll = function(persist) {
          self.setLevel(self.levels.SILENT, persist);
      };

      // Initialize with the right level
      var initialLevel = getPersistedLevel();
      if (initialLevel == null) {
          initialLevel = defaultLevel == null ? "WARN" : defaultLevel;
      }
      self.setLevel(initialLevel, false);
    }

    /*
     *
     * Top-level API
     *
     */

    var defaultLogger = new Logger();

    var _loggersByName = {};
    defaultLogger.getLogger = function getLogger(name) {
        if (typeof name !== "string" || name === "") {
          throw new TypeError("You must supply a name when creating a logger.");
        }

        var logger = _loggersByName[name];
        if (!logger) {
          logger = _loggersByName[name] = new Logger(
            name, defaultLogger.getLevel(), defaultLogger.methodFactory);
        }
        return logger;
    };

    // Grab the current global log variable in case of overwrite
    var _log = (typeof window !== undefinedType) ? window.log : undefined;
    defaultLogger.noConflict = function() {
        if (typeof window !== undefinedType &&
               window.log === defaultLogger) {
            window.log = _log;
        }

        return defaultLogger;
    };

    defaultLogger.getLoggers = function getLoggers() {
        return _loggersByName;
    };

    return defaultLogger;
}));

/*
     _ _      _       _
 ___| (_) ___| | __  (_)___
/ __| | |/ __| |/ /  | / __|
\__ \ | | (__|   < _ | \__ \
|___/_|_|\___|_|\_(_)/ |___/
                   |__/

 Version: 1.8.0
  Author: Ken Wheeler
 Website: http://kenwheeler.github.io
    Docs: http://kenwheeler.github.io/slick
    Repo: http://github.com/kenwheeler/slick
  Issues: http://github.com/kenwheeler/slick/issues

 */
/* global window, document, define, jQuery, setInterval, clearInterval */
;(function(factory) {
    'use strict';
    if (typeof define === 'function' && define.amd) {
        define(['jquery'], factory);
    } else if (typeof exports !== 'undefined') {
        module.exports = factory(require('jquery'));
    } else {
        factory(jQuery);
    }

}(function($) {
    'use strict';
    var Slick = window.Slick || {};

    Slick = (function() {

        var instanceUid = 0;

        function Slick(element, settings) {

            var _ = this, dataSettings;

            _.defaults = {
                accessibility: true,
                adaptiveHeight: false,
                appendArrows: $(element),
                appendDots: $(element),
                arrows: true,
                asNavFor: null,
                prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
                nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
                autoplay: false,
                autoplaySpeed: 3000,
                centerMode: false,
                centerPadding: '50px',
                cssEase: 'ease',
                customPaging: function(slider, i) {
                    return $('<button type="button" />').text(i + 1);
                },
                dots: false,
                dotsClass: 'slick-dots',
                draggable: true,
                easing: 'linear',
                edgeFriction: 0.35,
                fade: false,
                focusOnSelect: false,
                focusOnChange: false,
                infinite: true,
                initialSlide: 0,
                lazyLoad: 'ondemand',
                mobileFirst: false,
                pauseOnHover: true,
                pauseOnFocus: true,
                pauseOnDotsHover: false,
                respondTo: 'window',
                responsive: null,
                rows: 1,
                rtl: false,
                slide: '',
                slidesPerRow: 1,
                slidesToShow: 1,
                slidesToScroll: 1,
                speed: 500,
                swipe: true,
                swipeToSlide: false,
                touchMove: true,
                touchThreshold: 5,
                useCSS: true,
                useTransform: true,
                variableWidth: false,
                vertical: false,
                verticalSwiping: false,
                waitForAnimate: true,
                zIndex: 1000
            };

            _.initials = {
                animating: false,
                dragging: false,
                autoPlayTimer: null,
                currentDirection: 0,
                currentLeft: null,
                currentSlide: 0,
                direction: 1,
                $dots: null,
                listWidth: null,
                listHeight: null,
                loadIndex: 0,
                $nextArrow: null,
                $prevArrow: null,
                scrolling: false,
                slideCount: null,
                slideWidth: null,
                $slideTrack: null,
                $slides: null,
                sliding: false,
                slideOffset: 0,
                swipeLeft: null,
                swiping: false,
                $list: null,
                touchObject: {},
                transformsEnabled: false,
                unslicked: false
            };

            $.extend(_, _.initials);

            _.activeBreakpoint = null;
            _.animType = null;
            _.animProp = null;
            _.breakpoints = [];
            _.breakpointSettings = [];
            _.cssTransitions = false;
            _.focussed = false;
            _.interrupted = false;
            _.hidden = 'hidden';
            _.paused = true;
            _.positionProp = null;
            _.respondTo = null;
            _.rowCount = 1;
            _.shouldClick = true;
            _.$slider = $(element);
            _.$slidesCache = null;
            _.transformType = null;
            _.transitionType = null;
            _.visibilityChange = 'visibilitychange';
            _.windowWidth = 0;
            _.windowTimer = null;

            dataSettings = $(element).data('slick') || {};

            _.options = $.extend({}, _.defaults, settings, dataSettings);

            _.currentSlide = _.options.initialSlide;

            _.originalSettings = _.options;

            if (typeof document.mozHidden !== 'undefined') {
                _.hidden = 'mozHidden';
                _.visibilityChange = 'mozvisibilitychange';
            } else if (typeof document.webkitHidden !== 'undefined') {
                _.hidden = 'webkitHidden';
                _.visibilityChange = 'webkitvisibilitychange';
            }

            _.autoPlay = $.proxy(_.autoPlay, _);
            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
            _.changeSlide = $.proxy(_.changeSlide, _);
            _.clickHandler = $.proxy(_.clickHandler, _);
            _.selectHandler = $.proxy(_.selectHandler, _);
            _.setPosition = $.proxy(_.setPosition, _);
            _.swipeHandler = $.proxy(_.swipeHandler, _);
            _.dragHandler = $.proxy(_.dragHandler, _);
            _.keyHandler = $.proxy(_.keyHandler, _);

            _.instanceUid = instanceUid++;

            // A simple way to check for HTML strings
            // Strict HTML recognition (must start with <)
            // Extracted from jQuery v1.11 source
            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;


            _.registerBreakpoints();
            _.init(true);

        }

        return Slick;

    }());

    Slick.prototype.activateADA = function() {
        var _ = this;

        _.$slideTrack.find('.slick-active').attr({
            'aria-hidden': 'false'
        }).find('a, input, button, select').attr({
            'tabindex': '0'
        });

    };

    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {

        var _ = this;

        if (typeof(index) === 'boolean') {
            addBefore = index;
            index = null;
        } else if (index < 0 || (index >= _.slideCount)) {
            return false;
        }

        _.unload();

        if (typeof(index) === 'number') {
            if (index === 0 && _.$slides.length === 0) {
                $(markup).appendTo(_.$slideTrack);
            } else if (addBefore) {
                $(markup).insertBefore(_.$slides.eq(index));
            } else {
                $(markup).insertAfter(_.$slides.eq(index));
            }
        } else {
            if (addBefore === true) {
                $(markup).prependTo(_.$slideTrack);
            } else {
                $(markup).appendTo(_.$slideTrack);
            }
        }

        _.$slides = _.$slideTrack.children(this.options.slide);

        _.$slideTrack.children(this.options.slide).detach();

        _.$slideTrack.append(_.$slides);

        _.$slides.each(function(index, element) {
            $(element).attr('data-slick-index', index);
        });

        _.$slidesCache = _.$slides;

        _.reinit();

    };

    Slick.prototype.animateHeight = function() {
        var _ = this;
        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
            _.$list.animate({
                height: targetHeight
            }, _.options.speed);
        }
    };

    Slick.prototype.animateSlide = function(targetLeft, callback) {

        var animProps = {},
            _ = this;

        _.animateHeight();

        if (_.options.rtl === true && _.options.vertical === false) {
            targetLeft = -targetLeft;
        }
        if (_.transformsEnabled === false) {
            if (_.options.vertical === false) {
                _.$slideTrack.animate({
                    left: targetLeft
                }, _.options.speed, _.options.easing, callback);
            } else {
                _.$slideTrack.animate({
                    top: targetLeft
                }, _.options.speed, _.options.easing, callback);
            }

        } else {

            if (_.cssTransitions === false) {
                if (_.options.rtl === true) {
                    _.currentLeft = -(_.currentLeft);
                }
                $({
                    animStart: _.currentLeft
                }).animate({
                    animStart: targetLeft
                }, {
                    duration: _.options.speed,
                    easing: _.options.easing,
                    step: function(now) {
                        now = Math.ceil(now);
                        if (_.options.vertical === false) {
                            animProps[_.animType] = 'translate(' +
                                now + 'px, 0px)';
                            _.$slideTrack.css(animProps);
                        } else {
                            animProps[_.animType] = 'translate(0px,' +
                                now + 'px)';
                            _.$slideTrack.css(animProps);
                        }
                    },
                    complete: function() {
                        if (callback) {
                            callback.call();
                        }
                    }
                });

            } else {

                _.applyTransition();
                targetLeft = Math.ceil(targetLeft);

                if (_.options.vertical === false) {
                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
                } else {
                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
                }
                _.$slideTrack.css(animProps);

                if (callback) {
                    setTimeout(function() {

                        _.disableTransition();

                        callback.call();
                    }, _.options.speed);
                }

            }

        }

    };

    Slick.prototype.getNavTarget = function() {

        var _ = this,
            asNavFor = _.options.asNavFor;

        if ( asNavFor && asNavFor !== null ) {
            asNavFor = $(asNavFor).not(_.$slider);
        }

        return asNavFor;

    };

    Slick.prototype.asNavFor = function(index) {

        var _ = this,
            asNavFor = _.getNavTarget();

        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
            asNavFor.each(function() {
                var target = $(this).slick('getSlick');
                if(!target.unslicked) {
                    target.slideHandler(index, true);
                }
            });
        }

    };

    Slick.prototype.applyTransition = function(slide) {

        var _ = this,
            transition = {};

        if (_.options.fade === false) {
            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
        } else {
            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
        }

        if (_.options.fade === false) {
            _.$slideTrack.css(transition);
        } else {
            _.$slides.eq(slide).css(transition);
        }

    };

    Slick.prototype.autoPlay = function() {

        var _ = this;

        _.autoPlayClear();

        if ( _.slideCount > _.options.slidesToShow ) {
            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
        }

    };

    Slick.prototype.autoPlayClear = function() {

        var _ = this;

        if (_.autoPlayTimer) {
            clearInterval(_.autoPlayTimer);
        }

    };

    Slick.prototype.autoPlayIterator = function() {

        var _ = this,
            slideTo = _.currentSlide + _.options.slidesToScroll;

        if ( !_.paused && !_.interrupted && !_.focussed ) {

            if ( _.options.infinite === false ) {

                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
                    _.direction = 0;
                }

                else if ( _.direction === 0 ) {

                    slideTo = _.currentSlide - _.options.slidesToScroll;

                    if ( _.currentSlide - 1 === 0 ) {
                        _.direction = 1;
                    }

                }

            }

            _.slideHandler( slideTo );

        }

    };

    Slick.prototype.buildArrows = function() {

        var _ = this;

        if (_.options.arrows === true ) {

            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');

            if( _.slideCount > _.options.slidesToShow ) {

                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');

                if (_.htmlExpr.test(_.options.prevArrow)) {
                    _.$prevArrow.prependTo(_.options.appendArrows);
                }

                if (_.htmlExpr.test(_.options.nextArrow)) {
                    _.$nextArrow.appendTo(_.options.appendArrows);
                }

                if (_.options.infinite !== true) {
                    _.$prevArrow
                        .addClass('slick-disabled')
                        .attr('aria-disabled', 'true');
                }

            } else {

                _.$prevArrow.add( _.$nextArrow )

                    .addClass('slick-hidden')
                    .attr({
                        'aria-disabled': 'true',
                        'tabindex': '-1'
                    });

            }

        }

    };

    Slick.prototype.buildDots = function() {

        var _ = this,
            i, dot;

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {

            _.$slider.addClass('slick-dotted');

            dot = $('<ul />').addClass(_.options.dotsClass);

            for (i = 0; i <= _.getDotCount(); i += 1) {
                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
            }

            _.$dots = dot.appendTo(_.options.appendDots);

            _.$dots.find('li').first().addClass('slick-active');

        }

    };

    Slick.prototype.buildOut = function() {

        var _ = this;

        _.$slides =
            _.$slider
                .children( _.options.slide + ':not(.slick-cloned)')
                .addClass('slick-slide');

        _.slideCount = _.$slides.length;

        _.$slides.each(function(index, element) {
            $(element)
                .attr('data-slick-index', index)
                .data('originalStyling', $(element).attr('style') || '');
        });

        _.$slider.addClass('slick-slider');

        _.$slideTrack = (_.slideCount === 0) ?
            $('<div class="slick-track"/>').appendTo(_.$slider) :
            _.$slides.wrapAll('<div class="slick-track"/>').parent();

        _.$list = _.$slideTrack.wrap(
            '<div class="slick-list"/>').parent();
        _.$slideTrack.css('opacity', 0);

        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
            _.options.slidesToScroll = 1;
        }

        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');

        _.setupInfinite();

        _.buildArrows();

        _.buildDots();

        _.updateDots();


        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);

        if (_.options.draggable === true) {
            _.$list.addClass('draggable');
        }

    };

    Slick.prototype.buildRows = function() {

        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;

        newSlides = document.createDocumentFragment();
        originalSlides = _.$slider.children();

        if(_.options.rows > 0) {

            slidesPerSection = _.options.slidesPerRow * _.options.rows;
            numOfSlides = Math.ceil(
                originalSlides.length / slidesPerSection
            );

            for(a = 0; a < numOfSlides; a++){
                var slide = document.createElement('div');
                for(b = 0; b < _.options.rows; b++) {
                    var row = document.createElement('div');
                    for(c = 0; c < _.options.slidesPerRow; c++) {
                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
                        if (originalSlides.get(target)) {
                            row.appendChild(originalSlides.get(target));
                        }
                    }
                    slide.appendChild(row);
                }
                newSlides.appendChild(slide);
            }

            _.$slider.empty().append(newSlides);
            _.$slider.children().children().children()
                .css({
                    'width':(100 / _.options.slidesPerRow) + '%',
                    'display': 'inline-block'
                });

        }

    };

    Slick.prototype.checkResponsive = function(initial, forceUpdate) {

        var _ = this,
            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
        var sliderWidth = _.$slider.width();
        var windowWidth = window.innerWidth || $(window).width();

        if (_.respondTo === 'window') {
            respondToWidth = windowWidth;
        } else if (_.respondTo === 'slider') {
            respondToWidth = sliderWidth;
        } else if (_.respondTo === 'min') {
            respondToWidth = Math.min(windowWidth, sliderWidth);
        }

        if ( _.options.responsive &&
            _.options.responsive.length &&
            _.options.responsive !== null) {

            targetBreakpoint = null;

            for (breakpoint in _.breakpoints) {
                if (_.breakpoints.hasOwnProperty(breakpoint)) {
                    if (_.originalSettings.mobileFirst === false) {
                        if (respondToWidth < _.breakpoints[breakpoint]) {
                            targetBreakpoint = _.breakpoints[breakpoint];
                        }
                    } else {
                        if (respondToWidth > _.breakpoints[breakpoint]) {
                            targetBreakpoint = _.breakpoints[breakpoint];
                        }
                    }
                }
            }

            if (targetBreakpoint !== null) {
                if (_.activeBreakpoint !== null) {
                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
                        _.activeBreakpoint =
                            targetBreakpoint;
                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
                            _.unslick(targetBreakpoint);
                        } else {
                            _.options = $.extend({}, _.originalSettings,
                                _.breakpointSettings[
                                    targetBreakpoint]);
                            if (initial === true) {
                                _.currentSlide = _.options.initialSlide;
                            }
                            _.refresh(initial);
                        }
                        triggerBreakpoint = targetBreakpoint;
                    }
                } else {
                    _.activeBreakpoint = targetBreakpoint;
                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
                        _.unslick(targetBreakpoint);
                    } else {
                        _.options = $.extend({}, _.originalSettings,
                            _.breakpointSettings[
                                targetBreakpoint]);
                        if (initial === true) {
                            _.currentSlide = _.options.initialSlide;
                        }
                        _.refresh(initial);
                    }
                    triggerBreakpoint = targetBreakpoint;
                }
            } else {
                if (_.activeBreakpoint !== null) {
                    _.activeBreakpoint = null;
                    _.options = _.originalSettings;
                    if (initial === true) {
                        _.currentSlide = _.options.initialSlide;
                    }
                    _.refresh(initial);
                    triggerBreakpoint = targetBreakpoint;
                }
            }

            // only trigger breakpoints during an actual break. not on initialize.
            if( !initial && triggerBreakpoint !== false ) {
                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
            }
        }

    };

    Slick.prototype.changeSlide = function(event, dontAnimate) {

        var _ = this,
            $target = $(event.currentTarget),
            indexOffset, slideOffset, unevenOffset;

        // If target is a link, prevent default action.
        if($target.is('a')) {
            event.preventDefault();
        }

        // If target is not the <li> element (ie: a child), find the <li>.
        if(!$target.is('li')) {
            $target = $target.closest('li');
        }

        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;

        switch (event.data.message) {

            case 'previous':
                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
                if (_.slideCount > _.options.slidesToShow) {
                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
                }
                break;

            case 'next':
                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
                if (_.slideCount > _.options.slidesToShow) {
                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
                }
                break;

            case 'index':
                var index = event.data.index === 0 ? 0 :
                    event.data.index || $target.index() * _.options.slidesToScroll;

                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
                $target.children().trigger('focus');
                break;

            default:
                return;
        }

    };

    Slick.prototype.checkNavigable = function(index) {

        var _ = this,
            navigables, prevNavigable;

        navigables = _.getNavigableIndexes();
        prevNavigable = 0;
        if (index > navigables[navigables.length - 1]) {
            index = navigables[navigables.length - 1];
        } else {
            for (var n in navigables) {
                if (index < navigables[n]) {
                    index = prevNavigable;
                    break;
                }
                prevNavigable = navigables[n];
            }
        }

        return index;
    };

    Slick.prototype.cleanUpEvents = function() {

        var _ = this;

        if (_.options.dots && _.$dots !== null) {

            $('li', _.$dots)
                .off('click.slick', _.changeSlide)
                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));

            if (_.options.accessibility === true) {
                _.$dots.off('keydown.slick', _.keyHandler);
            }
        }

        _.$slider.off('focus.slick blur.slick');

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);

            if (_.options.accessibility === true) {
                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
            }
        }

        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);

        _.$list.off('click.slick', _.clickHandler);

        $(document).off(_.visibilityChange, _.visibility);

        _.cleanUpSlideEvents();

        if (_.options.accessibility === true) {
            _.$list.off('keydown.slick', _.keyHandler);
        }

        if (_.options.focusOnSelect === true) {
            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
        }

        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);

        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);

        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);

        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);

    };

    Slick.prototype.cleanUpSlideEvents = function() {

        var _ = this;

        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));

    };

    Slick.prototype.cleanUpRows = function() {

        var _ = this, originalSlides;

        if(_.options.rows > 0) {
            originalSlides = _.$slides.children().children();
            originalSlides.removeAttr('style');
            _.$slider.empty().append(originalSlides);
        }

    };

    Slick.prototype.clickHandler = function(event) {

        var _ = this;

        if (_.shouldClick === false) {
            event.stopImmediatePropagation();
            event.stopPropagation();
            event.preventDefault();
        }

    };

    Slick.prototype.destroy = function(refresh) {

        var _ = this;

        _.autoPlayClear();

        _.touchObject = {};

        _.cleanUpEvents();

        $('.slick-cloned', _.$slider).detach();

        if (_.$dots) {
            _.$dots.remove();
        }

        if ( _.$prevArrow && _.$prevArrow.length ) {

            _.$prevArrow
                .removeClass('slick-disabled slick-arrow slick-hidden')
                .removeAttr('aria-hidden aria-disabled tabindex')
                .css('display','');

            if ( _.htmlExpr.test( _.options.prevArrow )) {
                _.$prevArrow.remove();
            }
        }

        if ( _.$nextArrow && _.$nextArrow.length ) {

            _.$nextArrow
                .removeClass('slick-disabled slick-arrow slick-hidden')
                .removeAttr('aria-hidden aria-disabled tabindex')
                .css('display','');

            if ( _.htmlExpr.test( _.options.nextArrow )) {
                _.$nextArrow.remove();
            }
        }


        if (_.$slides) {

            _.$slides
                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
                .removeAttr('aria-hidden')
                .removeAttr('data-slick-index')
                .each(function(){
                    $(this).attr('style', $(this).data('originalStyling'));
                });

            _.$slideTrack.children(this.options.slide).detach();

            _.$slideTrack.detach();

            _.$list.detach();

            _.$slider.append(_.$slides);
        }

        _.cleanUpRows();

        _.$slider.removeClass('slick-slider');
        _.$slider.removeClass('slick-initialized');
        _.$slider.removeClass('slick-dotted');

        _.unslicked = true;

        if(!refresh) {
            _.$slider.trigger('destroy', [_]);
        }

    };

    Slick.prototype.disableTransition = function(slide) {

        var _ = this,
            transition = {};

        transition[_.transitionType] = '';

        if (_.options.fade === false) {
            _.$slideTrack.css(transition);
        } else {
            _.$slides.eq(slide).css(transition);
        }

    };

    Slick.prototype.fadeSlide = function(slideIndex, callback) {

        var _ = this;

        if (_.cssTransitions === false) {

            _.$slides.eq(slideIndex).css({
                zIndex: _.options.zIndex
            });

            _.$slides.eq(slideIndex).animate({
                opacity: 1
            }, _.options.speed, _.options.easing, callback);

        } else {

            _.applyTransition(slideIndex);

            _.$slides.eq(slideIndex).css({
                opacity: 1,
                zIndex: _.options.zIndex
            });

            if (callback) {
                setTimeout(function() {

                    _.disableTransition(slideIndex);

                    callback.call();
                }, _.options.speed);
            }

        }

    };

    Slick.prototype.fadeSlideOut = function(slideIndex) {

        var _ = this;

        if (_.cssTransitions === false) {

            _.$slides.eq(slideIndex).animate({
                opacity: 0,
                zIndex: _.options.zIndex - 2
            }, _.options.speed, _.options.easing);

        } else {

            _.applyTransition(slideIndex);

            _.$slides.eq(slideIndex).css({
                opacity: 0,
                zIndex: _.options.zIndex - 2
            });

        }

    };

    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {

        var _ = this;

        if (filter !== null) {

            _.$slidesCache = _.$slides;

            _.unload();

            _.$slideTrack.children(this.options.slide).detach();

            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);

            _.reinit();

        }

    };

    Slick.prototype.focusHandler = function() {

        var _ = this;

        _.$slider
            .off('focus.slick blur.slick')
            .on('focus.slick blur.slick', '*', function(event) {

            event.stopImmediatePropagation();
            var $sf = $(this);

            setTimeout(function() {

                if( _.options.pauseOnFocus ) {
                    _.focussed = $sf.is(':focus');
                    _.autoPlay();
                }

            }, 0);

        });
    };

    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {

        var _ = this;
        return _.currentSlide;

    };

    Slick.prototype.getDotCount = function() {

        var _ = this;

        var breakPoint = 0;
        var counter = 0;
        var pagerQty = 0;

        if (_.options.infinite === true) {
            if (_.slideCount <= _.options.slidesToShow) {
                 ++pagerQty;
            } else {
                while (breakPoint < _.slideCount) {
                    ++pagerQty;
                    breakPoint = counter + _.options.slidesToScroll;
                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
                }
            }
        } else if (_.options.centerMode === true) {
            pagerQty = _.slideCount;
        } else if(!_.options.asNavFor) {
            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
        }else {
            while (breakPoint < _.slideCount) {
                ++pagerQty;
                breakPoint = counter + _.options.slidesToScroll;
                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
            }
        }

        return pagerQty - 1;

    };

    Slick.prototype.getLeft = function(slideIndex) {

        var _ = this,
            targetLeft,
            verticalHeight,
            verticalOffset = 0,
            targetSlide,
            coef;

        _.slideOffset = 0;
        verticalHeight = _.$slides.first().outerHeight(true);

        if (_.options.infinite === true) {
            if (_.slideCount > _.options.slidesToShow) {
                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
                coef = -1

                if (_.options.vertical === true && _.options.centerMode === true) {
                    if (_.options.slidesToShow === 2) {
                        coef = -1.5;
                    } else if (_.options.slidesToShow === 1) {
                        coef = -2
                    }
                }
                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
            }
            if (_.slideCount % _.options.slidesToScroll !== 0) {
                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
                    if (slideIndex > _.slideCount) {
                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
                    } else {
                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
                    }
                }
            }
        } else {
            if (slideIndex + _.options.slidesToShow > _.slideCount) {
                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
            }
        }

        if (_.slideCount <= _.options.slidesToShow) {
            _.slideOffset = 0;
            verticalOffset = 0;
        }

        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
        } else if (_.options.centerMode === true && _.options.infinite === true) {
            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
        } else if (_.options.centerMode === true) {
            _.slideOffset = 0;
            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
        }

        if (_.options.vertical === false) {
            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
        } else {
            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
        }

        if (_.options.variableWidth === true) {

            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
            } else {
                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
            }

            if (_.options.rtl === true) {
                if (targetSlide[0]) {
                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
                } else {
                    targetLeft =  0;
                }
            } else {
                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
            }

            if (_.options.centerMode === true) {
                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
                } else {
                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
                }

                if (_.options.rtl === true) {
                    if (targetSlide[0]) {
                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
                    } else {
                        targetLeft =  0;
                    }
                } else {
                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
                }

                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
            }
        }

        return targetLeft;

    };

    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {

        var _ = this;

        return _.options[option];

    };

    Slick.prototype.getNavigableIndexes = function() {

        var _ = this,
            breakPoint = 0,
            counter = 0,
            indexes = [],
            max;

        if (_.options.infinite === false) {
            max = _.slideCount;
        } else {
            breakPoint = _.options.slidesToScroll * -1;
            counter = _.options.slidesToScroll * -1;
            max = _.slideCount * 2;
        }

        while (breakPoint < max) {
            indexes.push(breakPoint);
            breakPoint = counter + _.options.slidesToScroll;
            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
        }

        return indexes;

    };

    Slick.prototype.getSlick = function() {

        return this;

    };

    Slick.prototype.getSlideCount = function() {

        var _ = this,
            slidesTraversed, swipedSlide, centerOffset;

        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;

        if (_.options.swipeToSlide === true) {
            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
                    swipedSlide = slide;
                    return false;
                }
            });

            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;

            return slidesTraversed;

        } else {
            return _.options.slidesToScroll;
        }

    };

    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {

        var _ = this;

        _.changeSlide({
            data: {
                message: 'index',
                index: parseInt(slide)
            }
        }, dontAnimate);

    };

    Slick.prototype.init = function(creation) {

        var _ = this;

        if (!$(_.$slider).hasClass('slick-initialized')) {

            $(_.$slider).addClass('slick-initialized');

            _.buildRows();
            _.buildOut();
            _.setProps();
            _.startLoad();
            _.loadSlider();
            _.initializeEvents();
            _.updateArrows();
            _.updateDots();
            _.checkResponsive(true);
            _.focusHandler();

        }

        if (creation) {
            _.$slider.trigger('init', [_]);
        }

        if (_.options.accessibility === true) {
            _.initADA();
        }

        if ( _.options.autoplay ) {

            _.paused = false;
            _.autoPlay();

        }

    };

    Slick.prototype.initADA = function() {
        var _ = this,
                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
                    return (val >= 0) && (val < _.slideCount);
                });

        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
            'aria-hidden': 'true',
            'tabindex': '-1'
        }).find('a, input, button, select').attr({
            'tabindex': '-1'
        });

        if (_.$dots !== null) {
            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
                var slideControlIndex = tabControlIndexes.indexOf(i);

                $(this).attr({
                    'role': 'tabpanel',
                    'id': 'slick-slide' + _.instanceUid + i,
                    'tabindex': -1
                });

                if (slideControlIndex !== -1) {
                   var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex
                   if ($('#' + ariaButtonControl).length) {
                     $(this).attr({
                         'aria-describedby': ariaButtonControl
                     });
                   }
                }
            });

            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
                var mappedSlideIndex = tabControlIndexes[i];

                $(this).attr({
                    'role': 'presentation'
                });

                $(this).find('button').first().attr({
                    'role': 'tab',
                    'id': 'slick-slide-control' + _.instanceUid + i,
                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
                    'aria-label': (i + 1) + ' of ' + numDotGroups,
                    'aria-selected': null,
                    'tabindex': '-1'
                });

            }).eq(_.currentSlide).find('button').attr({
                'aria-selected': 'true',
                'tabindex': '0'
            }).end();
        }

        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
          if (_.options.focusOnChange) {
            _.$slides.eq(i).attr({'tabindex': '0'});
          } else {
            _.$slides.eq(i).removeAttr('tabindex');
          }
        }

        _.activateADA();

    };

    Slick.prototype.initArrowEvents = function() {

        var _ = this;

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
            _.$prevArrow
               .off('click.slick')
               .on('click.slick', {
                    message: 'previous'
               }, _.changeSlide);
            _.$nextArrow
               .off('click.slick')
               .on('click.slick', {
                    message: 'next'
               }, _.changeSlide);

            if (_.options.accessibility === true) {
                _.$prevArrow.on('keydown.slick', _.keyHandler);
                _.$nextArrow.on('keydown.slick', _.keyHandler);
            }
        }

    };

    Slick.prototype.initDotEvents = function() {

        var _ = this;

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
            $('li', _.$dots).on('click.slick', {
                message: 'index'
            }, _.changeSlide);

            if (_.options.accessibility === true) {
                _.$dots.on('keydown.slick', _.keyHandler);
            }
        }

        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {

            $('li', _.$dots)
                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));

        }

    };

    Slick.prototype.initSlideEvents = function() {

        var _ = this;

        if ( _.options.pauseOnHover ) {

            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));

        }

    };

    Slick.prototype.initializeEvents = function() {

        var _ = this;

        _.initArrowEvents();

        _.initDotEvents();
        _.initSlideEvents();

        _.$list.on('touchstart.slick mousedown.slick', {
            action: 'start'
        }, _.swipeHandler);
        _.$list.on('touchmove.slick mousemove.slick', {
            action: 'move'
        }, _.swipeHandler);
        _.$list.on('touchend.slick mouseup.slick', {
            action: 'end'
        }, _.swipeHandler);
        _.$list.on('touchcancel.slick mouseleave.slick', {
            action: 'end'
        }, _.swipeHandler);

        _.$list.on('click.slick', _.clickHandler);

        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));

        if (_.options.accessibility === true) {
            _.$list.on('keydown.slick', _.keyHandler);
        }

        if (_.options.focusOnSelect === true) {
            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
        }

        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));

        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));

        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);

        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
        $(_.setPosition);

    };

    Slick.prototype.initUI = function() {

        var _ = this;

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {

            _.$prevArrow.show();
            _.$nextArrow.show();

        }

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {

            _.$dots.show();

        }

    };

    Slick.prototype.keyHandler = function(event) {

        var _ = this;
         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
            if (event.keyCode === 37 && _.options.accessibility === true) {
                _.changeSlide({
                    data: {
                        message: _.options.rtl === true ? 'next' :  'previous'
                    }
                });
            } else if (event.keyCode === 39 && _.options.accessibility === true) {
                _.changeSlide({
                    data: {
                        message: _.options.rtl === true ? 'previous' : 'next'
                    }
                });
            }
        }

    };

    Slick.prototype.lazyLoad = function() {

        var _ = this,
            loadRange, cloneRange, rangeStart, rangeEnd;

        function loadImages(imagesScope) {

            $('img[data-lazy]', imagesScope).each(function() {

                var image = $(this),
                    imageSource = $(this).attr('data-lazy'),
                    imageSrcSet = $(this).attr('data-srcset'),
                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
                    imageToLoad = document.createElement('img');

                imageToLoad.onload = function() {

                    image
                        .animate({ opacity: 0 }, 100, function() {

                            if (imageSrcSet) {
                                image
                                    .attr('srcset', imageSrcSet );

                                if (imageSizes) {
                                    image
                                        .attr('sizes', imageSizes );
                                }
                            }

                            image
                                .attr('src', imageSource)
                                .animate({ opacity: 1 }, 200, function() {
                                    image
                                        .removeAttr('data-lazy data-srcset data-sizes')
                                        .removeClass('slick-loading');
                                });
                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
                        });

                };

                imageToLoad.onerror = function() {

                    image
                        .removeAttr( 'data-lazy' )
                        .removeClass( 'slick-loading' )
                        .addClass( 'slick-lazyload-error' );

                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);

                };

                imageToLoad.src = imageSource;

            });

        }

        if (_.options.centerMode === true) {
            if (_.options.infinite === true) {
                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
                rangeEnd = rangeStart + _.options.slidesToShow + 2;
            } else {
                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
            }
        } else {
            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
            if (_.options.fade === true) {
                if (rangeStart > 0) rangeStart--;
                if (rangeEnd <= _.slideCount) rangeEnd++;
            }
        }

        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);

        if (_.options.lazyLoad === 'anticipated') {
            var prevSlide = rangeStart - 1,
                nextSlide = rangeEnd,
                $slides = _.$slider.find('.slick-slide');

            for (var i = 0; i < _.options.slidesToScroll; i++) {
                if (prevSlide < 0) prevSlide = _.slideCount - 1;
                loadRange = loadRange.add($slides.eq(prevSlide));
                loadRange = loadRange.add($slides.eq(nextSlide));
                prevSlide--;
                nextSlide++;
            }
        }

        loadImages(loadRange);

        if (_.slideCount <= _.options.slidesToShow) {
            cloneRange = _.$slider.find('.slick-slide');
            loadImages(cloneRange);
        } else
        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
            loadImages(cloneRange);
        } else if (_.currentSlide === 0) {
            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
            loadImages(cloneRange);
        }

    };

    Slick.prototype.loadSlider = function() {

        var _ = this;

        _.setPosition();

        _.$slideTrack.css({
            opacity: 1
        });

        _.$slider.removeClass('slick-loading');

        _.initUI();

        if (_.options.lazyLoad === 'progressive') {
            _.progressiveLazyLoad();
        }

    };

    Slick.prototype.next = Slick.prototype.slickNext = function() {

        var _ = this;

        _.changeSlide({
            data: {
                message: 'next'
            }
        });

    };

    Slick.prototype.orientationChange = function() {

        var _ = this;

        _.checkResponsive();
        _.setPosition();

    };

    Slick.prototype.pause = Slick.prototype.slickPause = function() {

        var _ = this;

        _.autoPlayClear();
        _.paused = true;

    };

    Slick.prototype.play = Slick.prototype.slickPlay = function() {

        var _ = this;

        _.autoPlay();
        _.options.autoplay = true;
        _.paused = false;
        _.focussed = false;
        _.interrupted = false;

    };

    Slick.prototype.postSlide = function(index) {

        var _ = this;

        if( !_.unslicked ) {

            _.$slider.trigger('afterChange', [_, index]);

            _.animating = false;

            if (_.slideCount > _.options.slidesToShow) {
                _.setPosition();
            }

            _.swipeLeft = null;

            if ( _.options.autoplay ) {
                _.autoPlay();
            }

            if (_.options.accessibility === true) {
                _.initADA();

                if (_.options.focusOnChange) {
                    var $currentSlide = $(_.$slides.get(_.currentSlide));
                    $currentSlide.attr('tabindex', 0).focus();
                }
            }

        }

    };

    Slick.prototype.prev = Slick.prototype.slickPrev = function() {

        var _ = this;

        _.changeSlide({
            data: {
                message: 'previous'
            }
        });

    };

    Slick.prototype.preventDefault = function(event) {

        event.preventDefault();

    };

    Slick.prototype.progressiveLazyLoad = function( tryCount ) {

        tryCount = tryCount || 1;

        var _ = this,
            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
            image,
            imageSource,
            imageSrcSet,
            imageSizes,
            imageToLoad;

        if ( $imgsToLoad.length ) {

            image = $imgsToLoad.first();
            imageSource = image.attr('data-lazy');
            imageSrcSet = image.attr('data-srcset');
            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');
            imageToLoad = document.createElement('img');

            imageToLoad.onload = function() {

                if (imageSrcSet) {
                    image
                        .attr('srcset', imageSrcSet );

                    if (imageSizes) {
                        image
                            .attr('sizes', imageSizes );
                    }
                }

                image
                    .attr( 'src', imageSource )
                    .removeAttr('data-lazy data-srcset data-sizes')
                    .removeClass('slick-loading');

                if ( _.options.adaptiveHeight === true ) {
                    _.setPosition();
                }

                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
                _.progressiveLazyLoad();

            };

            imageToLoad.onerror = function() {

                if ( tryCount < 3 ) {

                    /**
                     * try to load the image 3 times,
                     * leave a slight delay so we don't get
                     * servers blocking the request.
                     */
                    setTimeout( function() {
                        _.progressiveLazyLoad( tryCount + 1 );
                    }, 500 );

                } else {

                    image
                        .removeAttr( 'data-lazy' )
                        .removeClass( 'slick-loading' )
                        .addClass( 'slick-lazyload-error' );

                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);

                    _.progressiveLazyLoad();

                }

            };

            imageToLoad.src = imageSource;

        } else {

            _.$slider.trigger('allImagesLoaded', [ _ ]);

        }

    };

    Slick.prototype.refresh = function( initializing ) {

        var _ = this, currentSlide, lastVisibleIndex;

        lastVisibleIndex = _.slideCount - _.options.slidesToShow;

        // in non-infinite sliders, we don't want to go past the
        // last visible index.
        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
            _.currentSlide = lastVisibleIndex;
        }

        // if less slides than to show, go to start.
        if ( _.slideCount <= _.options.slidesToShow ) {
            _.currentSlide = 0;

        }

        currentSlide = _.currentSlide;

        _.destroy(true);

        $.extend(_, _.initials, { currentSlide: currentSlide });

        _.init();

        if( !initializing ) {

            _.changeSlide({
                data: {
                    message: 'index',
                    index: currentSlide
                }
            }, false);

        }

    };

    Slick.prototype.registerBreakpoints = function() {

        var _ = this, breakpoint, currentBreakpoint, l,
            responsiveSettings = _.options.responsive || null;

        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {

            _.respondTo = _.options.respondTo || 'window';

            for ( breakpoint in responsiveSettings ) {

                l = _.breakpoints.length-1;

                if (responsiveSettings.hasOwnProperty(breakpoint)) {
                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;

                    // loop through the breakpoints and cut out any existing
                    // ones with the same breakpoint number, we don't want dupes.
                    while( l >= 0 ) {
                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
                            _.breakpoints.splice(l,1);
                        }
                        l--;
                    }

                    _.breakpoints.push(currentBreakpoint);
                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;

                }

            }

            _.breakpoints.sort(function(a, b) {
                return ( _.options.mobileFirst ) ? a-b : b-a;
            });

        }

    };

    Slick.prototype.reinit = function() {

        var _ = this;

        _.$slides =
            _.$slideTrack
                .children(_.options.slide)
                .addClass('slick-slide');

        _.slideCount = _.$slides.length;

        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
        }

        if (_.slideCount <= _.options.slidesToShow) {
            _.currentSlide = 0;
        }

        _.registerBreakpoints();

        _.setProps();
        _.setupInfinite();
        _.buildArrows();
        _.updateArrows();
        _.initArrowEvents();
        _.buildDots();
        _.updateDots();
        _.initDotEvents();
        _.cleanUpSlideEvents();
        _.initSlideEvents();

        _.checkResponsive(false, true);

        if (_.options.focusOnSelect === true) {
            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
        }

        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);

        _.setPosition();
        _.focusHandler();

        _.paused = !_.options.autoplay;
        _.autoPlay();

        _.$slider.trigger('reInit', [_]);

    };

    Slick.prototype.resize = function() {

        var _ = this;

        if ($(window).width() !== _.windowWidth) {
            clearTimeout(_.windowDelay);
            _.windowDelay = window.setTimeout(function() {
                _.windowWidth = $(window).width();
                _.checkResponsive();
                if( !_.unslicked ) { _.setPosition(); }
            }, 50);
        }
    };

    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {

        var _ = this;

        if (typeof(index) === 'boolean') {
            removeBefore = index;
            index = removeBefore === true ? 0 : _.slideCount - 1;
        } else {
            index = removeBefore === true ? --index : index;
        }

        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
            return false;
        }

        _.unload();

        if (removeAll === true) {
            _.$slideTrack.children().remove();
        } else {
            _.$slideTrack.children(this.options.slide).eq(index).remove();
        }

        _.$slides = _.$slideTrack.children(this.options.slide);

        _.$slideTrack.children(this.options.slide).detach();

        _.$slideTrack.append(_.$slides);

        _.$slidesCache = _.$slides;

        _.reinit();

    };

    Slick.prototype.setCSS = function(position) {

        var _ = this,
            positionProps = {},
            x, y;

        if (_.options.rtl === true) {
            position = -position;
        }
        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';

        positionProps[_.positionProp] = position;

        if (_.transformsEnabled === false) {
            _.$slideTrack.css(positionProps);
        } else {
            positionProps = {};
            if (_.cssTransitions === false) {
                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
                _.$slideTrack.css(positionProps);
            } else {
                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
                _.$slideTrack.css(positionProps);
            }
        }

    };

    Slick.prototype.setDimensions = function() {

        var _ = this;

        if (_.options.vertical === false) {
            if (_.options.centerMode === true) {
                _.$list.css({
                    padding: ('0px ' + _.options.centerPadding)
                });
            }
        } else {
            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
            if (_.options.centerMode === true) {
                _.$list.css({
                    padding: (_.options.centerPadding + ' 0px')
                });
            }
        }

        _.listWidth = _.$list.width();
        _.listHeight = _.$list.height();


        if (_.options.vertical === false && _.options.variableWidth === false) {
            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));

        } else if (_.options.variableWidth === true) {
            _.$slideTrack.width(5000 * _.slideCount);
        } else {
            _.slideWidth = Math.ceil(_.listWidth);
            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
        }

        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);

    };

    Slick.prototype.setFade = function() {

        var _ = this,
            targetLeft;

        _.$slides.each(function(index, element) {
            targetLeft = (_.slideWidth * index) * -1;
            if (_.options.rtl === true) {
                $(element).css({
                    position: 'relative',
                    right: targetLeft,
                    top: 0,
                    zIndex: _.options.zIndex - 2,
                    opacity: 0
                });
            } else {
                $(element).css({
                    position: 'relative',
                    left: targetLeft,
                    top: 0,
                    zIndex: _.options.zIndex - 2,
                    opacity: 0
                });
            }
        });

        _.$slides.eq(_.currentSlide).css({
            zIndex: _.options.zIndex - 1,
            opacity: 1
        });

    };

    Slick.prototype.setHeight = function() {

        var _ = this;

        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
            _.$list.css('height', targetHeight);
        }

    };

    Slick.prototype.setOption =
    Slick.prototype.slickSetOption = function() {

        /**
         * accepts arguments in format of:
         *
         *  - for changing a single option's value:
         *     .slick("setOption", option, value, refresh )
         *
         *  - for changing a set of responsive options:
         *     .slick("setOption", 'responsive', [{}, ...], refresh )
         *
         *  - for updating multiple values at once (not responsive)
         *     .slick("setOption", { 'option': value, ... }, refresh )
         */

        var _ = this, l, item, option, value, refresh = false, type;

        if( $.type( arguments[0] ) === 'object' ) {

            option =  arguments[0];
            refresh = arguments[1];
            type = 'multiple';

        } else if ( $.type( arguments[0] ) === 'string' ) {

            option =  arguments[0];
            value = arguments[1];
            refresh = arguments[2];

            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {

                type = 'responsive';

            } else if ( typeof arguments[1] !== 'undefined' ) {

                type = 'single';

            }

        }

        if ( type === 'single' ) {

            _.options[option] = value;


        } else if ( type === 'multiple' ) {

            $.each( option , function( opt, val ) {

                _.options[opt] = val;

            });


        } else if ( type === 'responsive' ) {

            for ( item in value ) {

                if( $.type( _.options.responsive ) !== 'array' ) {

                    _.options.responsive = [ value[item] ];

                } else {

                    l = _.options.responsive.length-1;

                    // loop through the responsive object and splice out duplicates.
                    while( l >= 0 ) {

                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {

                            _.options.responsive.splice(l,1);

                        }

                        l--;

                    }

                    _.options.responsive.push( value[item] );

                }

            }

        }

        if ( refresh ) {

            _.unload();
            _.reinit();

        }

    };

    Slick.prototype.setPosition = function() {

        var _ = this;

        _.setDimensions();

        _.setHeight();

        if (_.options.fade === false) {
            _.setCSS(_.getLeft(_.currentSlide));
        } else {
            _.setFade();
        }

        _.$slider.trigger('setPosition', [_]);

    };

    Slick.prototype.setProps = function() {

        var _ = this,
            bodyStyle = document.body.style;

        _.positionProp = _.options.vertical === true ? 'top' : 'left';

        if (_.positionProp === 'top') {
            _.$slider.addClass('slick-vertical');
        } else {
            _.$slider.removeClass('slick-vertical');
        }

        if (bodyStyle.WebkitTransition !== undefined ||
            bodyStyle.MozTransition !== undefined ||
            bodyStyle.msTransition !== undefined) {
            if (_.options.useCSS === true) {
                _.cssTransitions = true;
            }
        }

        if ( _.options.fade ) {
            if ( typeof _.options.zIndex === 'number' ) {
                if( _.options.zIndex < 3 ) {
                    _.options.zIndex = 3;
                }
            } else {
                _.options.zIndex = _.defaults.zIndex;
            }
        }

        if (bodyStyle.OTransform !== undefined) {
            _.animType = 'OTransform';
            _.transformType = '-o-transform';
            _.transitionType = 'OTransition';
            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
        }
        if (bodyStyle.MozTransform !== undefined) {
            _.animType = 'MozTransform';
            _.transformType = '-moz-transform';
            _.transitionType = 'MozTransition';
            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
        }
        if (bodyStyle.webkitTransform !== undefined) {
            _.animType = 'webkitTransform';
            _.transformType = '-webkit-transform';
            _.transitionType = 'webkitTransition';
            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
        }
        if (bodyStyle.msTransform !== undefined) {
            _.animType = 'msTransform';
            _.transformType = '-ms-transform';
            _.transitionType = 'msTransition';
            if (bodyStyle.msTransform === undefined) _.animType = false;
        }
        if (bodyStyle.transform !== undefined && _.animType !== false) {
            _.animType = 'transform';
            _.transformType = 'transform';
            _.transitionType = 'transition';
        }
        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
    };


    Slick.prototype.setSlideClasses = function(index) {

        var _ = this,
            centerOffset, allSlides, indexOffset, remainder;

        allSlides = _.$slider
            .find('.slick-slide')
            .removeClass('slick-active slick-center slick-current')
            .attr('aria-hidden', 'true');

        _.$slides
            .eq(index)
            .addClass('slick-current');

        if (_.options.centerMode === true) {

            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;

            centerOffset = Math.floor(_.options.slidesToShow / 2);

            if (_.options.infinite === true) {

                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
                    _.$slides
                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                } else {

                    indexOffset = _.options.slidesToShow + index;
                    allSlides
                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                }

                if (index === 0) {

                    allSlides
                        .eq(allSlides.length - 1 - _.options.slidesToShow)
                        .addClass('slick-center');

                } else if (index === _.slideCount - 1) {

                    allSlides
                        .eq(_.options.slidesToShow)
                        .addClass('slick-center');

                }

            }

            _.$slides
                .eq(index)
                .addClass('slick-center');

        } else {

            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {

                _.$slides
                    .slice(index, index + _.options.slidesToShow)
                    .addClass('slick-active')
                    .attr('aria-hidden', 'false');

            } else if (allSlides.length <= _.options.slidesToShow) {

                allSlides
                    .addClass('slick-active')
                    .attr('aria-hidden', 'false');

            } else {

                remainder = _.slideCount % _.options.slidesToShow;
                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;

                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {

                    allSlides
                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                } else {

                    allSlides
                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
                        .addClass('slick-active')
                        .attr('aria-hidden', 'false');

                }

            }

        }

        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
            _.lazyLoad();
        }
    };

    Slick.prototype.setupInfinite = function() {

        var _ = this,
            i, slideIndex, infiniteCount;

        if (_.options.fade === true) {
            _.options.centerMode = false;
        }

        if (_.options.infinite === true && _.options.fade === false) {

            slideIndex = null;

            if (_.slideCount > _.options.slidesToShow) {

                if (_.options.centerMode === true) {
                    infiniteCount = _.options.slidesToShow + 1;
                } else {
                    infiniteCount = _.options.slidesToShow;
                }

                for (i = _.slideCount; i > (_.slideCount -
                        infiniteCount); i -= 1) {
                    slideIndex = i - 1;
                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
                        .attr('data-slick-index', slideIndex - _.slideCount)
                        .prependTo(_.$slideTrack).addClass('slick-cloned');
                }
                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {
                    slideIndex = i;
                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
                        .attr('data-slick-index', slideIndex + _.slideCount)
                        .appendTo(_.$slideTrack).addClass('slick-cloned');
                }
                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
                    $(this).attr('id', '');
                });

            }

        }

    };

    Slick.prototype.interrupt = function( toggle ) {

        var _ = this;

        if( !toggle ) {
            _.autoPlay();
        }
        _.interrupted = toggle;

    };

    Slick.prototype.selectHandler = function(event) {

        var _ = this;

        var targetElement =
            $(event.target).is('.slick-slide') ?
                $(event.target) :
                $(event.target).parents('.slick-slide');

        var index = parseInt(targetElement.attr('data-slick-index'));

        if (!index) index = 0;

        if (_.slideCount <= _.options.slidesToShow) {

            _.slideHandler(index, false, true);
            return;

        }

        _.slideHandler(index);

    };

    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {

        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
            _ = this, navTarget;

        sync = sync || false;

        if (_.animating === true && _.options.waitForAnimate === true) {
            return;
        }

        if (_.options.fade === true && _.currentSlide === index) {
            return;
        }

        if (sync === false) {
            _.asNavFor(index);
        }

        targetSlide = index;
        targetLeft = _.getLeft(targetSlide);
        slideLeft = _.getLeft(_.currentSlide);

        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;

        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
            if (_.options.fade === false) {
                targetSlide = _.currentSlide;
                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
                    _.animateSlide(slideLeft, function() {
                        _.postSlide(targetSlide);
                    });
                } else {
                    _.postSlide(targetSlide);
                }
            }
            return;
        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
            if (_.options.fade === false) {
                targetSlide = _.currentSlide;
                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
                    _.animateSlide(slideLeft, function() {
                        _.postSlide(targetSlide);
                    });
                } else {
                    _.postSlide(targetSlide);
                }
            }
            return;
        }

        if ( _.options.autoplay ) {
            clearInterval(_.autoPlayTimer);
        }

        if (targetSlide < 0) {
            if (_.slideCount % _.options.slidesToScroll !== 0) {
                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
            } else {
                animSlide = _.slideCount + targetSlide;
            }
        } else if (targetSlide >= _.slideCount) {
            if (_.slideCount % _.options.slidesToScroll !== 0) {
                animSlide = 0;
            } else {
                animSlide = targetSlide - _.slideCount;
            }
        } else {
            animSlide = targetSlide;
        }

        _.animating = true;

        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);

        oldSlide = _.currentSlide;
        _.currentSlide = animSlide;

        _.setSlideClasses(_.currentSlide);

        if ( _.options.asNavFor ) {

            navTarget = _.getNavTarget();
            navTarget = navTarget.slick('getSlick');

            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
                navTarget.setSlideClasses(_.currentSlide);
            }

        }

        _.updateDots();
        _.updateArrows();

        if (_.options.fade === true) {
            if (dontAnimate !== true) {

                _.fadeSlideOut(oldSlide);

                _.fadeSlide(animSlide, function() {
                    _.postSlide(animSlide);
                });

            } else {
                _.postSlide(animSlide);
            }
            _.animateHeight();
            return;
        }

        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
            _.animateSlide(targetLeft, function() {
                _.postSlide(animSlide);
            });
        } else {
            _.postSlide(animSlide);
        }

    };

    Slick.prototype.startLoad = function() {

        var _ = this;

        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {

            _.$prevArrow.hide();
            _.$nextArrow.hide();

        }

        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {

            _.$dots.hide();

        }

        _.$slider.addClass('slick-loading');

    };

    Slick.prototype.swipeDirection = function() {

        var xDist, yDist, r, swipeAngle, _ = this;

        xDist = _.touchObject.startX - _.touchObject.curX;
        yDist = _.touchObject.startY - _.touchObject.curY;
        r = Math.atan2(yDist, xDist);

        swipeAngle = Math.round(r * 180 / Math.PI);
        if (swipeAngle < 0) {
            swipeAngle = 360 - Math.abs(swipeAngle);
        }

        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
            return (_.options.rtl === false ? 'left' : 'right');
        }
        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
            return (_.options.rtl === false ? 'left' : 'right');
        }
        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
            return (_.options.rtl === false ? 'right' : 'left');
        }
        if (_.options.verticalSwiping === true) {
            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
                return 'down';
            } else {
                return 'up';
            }
        }

        return 'vertical';

    };

    Slick.prototype.swipeEnd = function(event) {

        var _ = this,
            slideCount,
            direction;

        _.dragging = false;
        _.swiping = false;

        if (_.scrolling) {
            _.scrolling = false;
            return false;
        }

        _.interrupted = false;
        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;

        if ( _.touchObject.curX === undefined ) {
            return false;
        }

        if ( _.touchObject.edgeHit === true ) {
            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
        }

        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {

            direction = _.swipeDirection();

            switch ( direction ) {

                case 'left':
                case 'down':

                    slideCount =
                        _.options.swipeToSlide ?
                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
                            _.currentSlide + _.getSlideCount();

                    _.currentDirection = 0;

                    break;

                case 'right':
                case 'up':

                    slideCount =
                        _.options.swipeToSlide ?
                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
                            _.currentSlide - _.getSlideCount();

                    _.currentDirection = 1;

                    break;

                default:


            }

            if( direction != 'vertical' ) {

                _.slideHandler( slideCount );
                _.touchObject = {};
                _.$slider.trigger('swipe', [_, direction ]);

            }

        } else {

            if ( _.touchObject.startX !== _.touchObject.curX ) {

                _.slideHandler( _.currentSlide );
                _.touchObject = {};

            }

        }

    };

    Slick.prototype.swipeHandler = function(event) {

        var _ = this;

        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
            return;
        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
            return;
        }

        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
            event.originalEvent.touches.length : 1;

        _.touchObject.minSwipe = _.listWidth / _.options
            .touchThreshold;

        if (_.options.verticalSwiping === true) {
            _.touchObject.minSwipe = _.listHeight / _.options
                .touchThreshold;
        }

        switch (event.data.action) {

            case 'start':
                _.swipeStart(event);
                break;

            case 'move':
                _.swipeMove(event);
                break;

            case 'end':
                _.swipeEnd(event);
                break;

        }

    };

    Slick.prototype.swipeMove = function(event) {

        var _ = this,
            edgeWasHit = false,
            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;

        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;

        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
            return false;
        }

        curLeft = _.getLeft(_.currentSlide);

        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;

        _.touchObject.swipeLength = Math.round(Math.sqrt(
            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));

        verticalSwipeLength = Math.round(Math.sqrt(
            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));

        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
            _.scrolling = true;
            return false;
        }

        if (_.options.verticalSwiping === true) {
            _.touchObject.swipeLength = verticalSwipeLength;
        }

        swipeDirection = _.swipeDirection();

        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
            _.swiping = true;
            event.preventDefault();
        }

        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
        if (_.options.verticalSwiping === true) {
            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
        }


        swipeLength = _.touchObject.swipeLength;

        _.touchObject.edgeHit = false;

        if (_.options.infinite === false) {
            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
                _.touchObject.edgeHit = true;
            }
        }

        if (_.options.vertical === false) {
            _.swipeLeft = curLeft + swipeLength * positionOffset;
        } else {
            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
        }
        if (_.options.verticalSwiping === true) {
            _.swipeLeft = curLeft + swipeLength * positionOffset;
        }

        if (_.options.fade === true || _.options.touchMove === false) {
            return false;
        }

        if (_.animating === true) {
            _.swipeLeft = null;
            return false;
        }

        _.setCSS(_.swipeLeft);

    };

    Slick.prototype.swipeStart = function(event) {

        var _ = this,
            touches;

        _.interrupted = true;

        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
            _.touchObject = {};
            return false;
        }

        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
            touches = event.originalEvent.touches[0];
        }

        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;

        _.dragging = true;

    };

    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {

        var _ = this;

        if (_.$slidesCache !== null) {

            _.unload();

            _.$slideTrack.children(this.options.slide).detach();

            _.$slidesCache.appendTo(_.$slideTrack);

            _.reinit();

        }

    };

    Slick.prototype.unload = function() {

        var _ = this;

        $('.slick-cloned', _.$slider).remove();

        if (_.$dots) {
            _.$dots.remove();
        }

        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
            _.$prevArrow.remove();
        }

        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
            _.$nextArrow.remove();
        }

        _.$slides
            .removeClass('slick-slide slick-active slick-visible slick-current')
            .attr('aria-hidden', 'true')
            .css('width', '');

    };

    Slick.prototype.unslick = function(fromBreakpoint) {

        var _ = this;
        _.$slider.trigger('unslick', [_, fromBreakpoint]);
        _.destroy();

    };

    Slick.prototype.updateArrows = function() {

        var _ = this,
            centerOffset;

        centerOffset = Math.floor(_.options.slidesToShow / 2);

        if ( _.options.arrows === true &&
            _.slideCount > _.options.slidesToShow &&
            !_.options.infinite ) {

            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            if (_.currentSlide === 0) {

                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {

                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {

                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');

            }

        }

    };

    Slick.prototype.updateDots = function() {

        var _ = this;

        if (_.$dots !== null) {

            _.$dots
                .find('li')
                    .removeClass('slick-active')
                    .end();

            _.$dots
                .find('li')
                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
                .addClass('slick-active');

        }

    };

    Slick.prototype.visibility = function() {

        var _ = this;

        if ( _.options.autoplay ) {

            if ( document[_.hidden] ) {

                _.interrupted = true;

            } else {

                _.interrupted = false;

            }

        }

    };

    $.fn.slick = function() {
        var _ = this,
            opt = arguments[0],
            args = Array.prototype.slice.call(arguments, 1),
            l = _.length,
            i,
            ret;
        for (i = 0; i < l; i++) {
            if (typeof opt == 'object' || typeof opt == 'undefined')
                _[i].slick = new Slick(_[i], opt);
            else
                ret = _[i].slick[opt].apply(_[i].slick, args);
            if (typeof ret != 'undefined') return ret;
        }
        return _;
    };

}));

/**
 *
 * MAIN JAVASCRIPT MODULES: Sono i moduli principali.
 *
 * @author   Andrea Dell'Orco <ado@netnext.it>
 * @version  v 1.2
 *
 * Modulo core  NON ECMA 6
 */
var Engine = (function() {
    var functionsOnReady = [];
    /**
     * Avvia l'engine
     */
    function start() {
        executeOnReady();
    }
    /**
     * Esegue fisicamente le azioni in coda
     */
    var executeOnReady = function() {
        functionsOnReady.sort(compareRule);
        $(document).ready(function() {
            for (var i in functionsOnReady) {
                functionsOnReady[i].action();
            }
        });
    };
    /**
     * Regola di comparazione delle priorità
     * @param  {[type]} a
     * @param  {[type]} b
     * @return {any}
     */
    var compareRule = function(a, b) {
        if (a.priority > b.priority) return -1;
        else if (a.last_nom > b.last_nom) return 1;
        else return 0;
    };
    /**
     * Funzione che sostituisce la classica document ready di jquery
     * @param {Function}  action Funzione di callback da eseguire
     * @param {string =      "unkown"}    code     Codice identificativo dell'azione
     * @param {number =      1}           priority Priorità nell'esecuzione, maggiore è il valore, più alta è la priorità
     */
    function onReady(action, priority) {
        if (typeof priority == "undefined") priority = 1;
        functionsOnReady.push({
            action: action,
            priority: priority
        });
    }
    return {
        onReady:onReady,
        start:start
    };

})();
Engine.start();

Engine.onReady(function() {
    showElements();
});




$(window).scroll(function(){
    showElements();
});

function showElements(){    
    $( ".anim" ).each(function( index ) {
        if ($(this).isInViewport()) {
            $(this).addClass('visible');
        } else {
            $(this).removeClass('visible');
        }
    });
}


$('.img_full_width').slick({
    infinite: true,
    autoplay: true,
    autoplaySpeed: 2000,
    pauseOnHover: false,
    touchMove: true,
    arrows: false,
  });

  $( '.slideGallery' ).each( function() {
    $( this ).slick({
        infinite: true,
        autoplay: true,
        autoplaySpeed: 2000,
        pauseOnHover: false,
        touchMove: true,
        arrows: false,
        // arrows: true,
        // prevArrow: $(this).parents('.galleryBlock').find('.Aprev'),
        // nextArrow: $(this).parents('.galleryBlock').find('.Anext'),
      });
    });


  $.fn.isInViewport = function() {
    var elementTop = $(this).offset().top;
    var elementBottom = elementTop + $(this).outerHeight();

    var viewportTop = $(window).scrollTop();
    var viewportBottom = viewportTop + $(window).height();

    return elementBottom > viewportTop && elementTop < viewportBottom;
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsImpxdWVyeS11aS5taW4uanMiLCJjb3JlLmpzIiwiYWpheC5qcyIsImFkZGl0aW9uYWwvYWJhUm91dGluZ051bWJlci5qcyIsImFkZGl0aW9uYWwvYWNjZXB0LmpzIiwiYWRkaXRpb25hbC9hZGRpdGlvbmFsLmpzIiwiYWRkaXRpb25hbC9hbHBoYW51bWVyaWMuanMiLCJhZGRpdGlvbmFsL2JhbmthY2NvdW50TkwuanMiLCJhZGRpdGlvbmFsL2Jhbmtvcmdpcm9hY2NvdW50TkwuanMiLCJhZGRpdGlvbmFsL2JpYy5qcyIsImFkZGl0aW9uYWwvY2lmRVMuanMiLCJhZGRpdGlvbmFsL2NuaEJSLmpzIiwiYWRkaXRpb25hbC9jbnBqQlIuanMiLCJhZGRpdGlvbmFsL2NwZkJSLmpzIiwiYWRkaXRpb25hbC9jcmVkaXRjYXJkLmpzIiwiYWRkaXRpb25hbC9jcmVkaXRjYXJkdHlwZXMuanMiLCJhZGRpdGlvbmFsL2N1cnJlbmN5LmpzIiwiYWRkaXRpb25hbC9kYXRlRkEuanMiLCJhZGRpdGlvbmFsL2RhdGVJVEEuanMiLCJhZGRpdGlvbmFsL2RhdGVOTC5qcyIsImFkZGl0aW9uYWwvZXh0ZW5zaW9uLmpzIiwiYWRkaXRpb25hbC9naXJvYWNjb3VudE5MLmpzIiwiYWRkaXRpb25hbC9ncmVhdGVyVGhhbi5qcyIsImFkZGl0aW9uYWwvZ3JlYXRlclRoYW5FcXVhbC5qcyIsImFkZGl0aW9uYWwvaWJhbi5qcyIsImFkZGl0aW9uYWwvaW50ZWdlci5qcyIsImFkZGl0aW9uYWwvaXB2NC5qcyIsImFkZGl0aW9uYWwvaXB2Ni5qcyIsImFkZGl0aW9uYWwvbGVzc1RoYW4uanMiLCJhZGRpdGlvbmFsL2xlc3NUaGFuRXF1YWwuanMiLCJhZGRpdGlvbmFsL2xldHRlcnNvbmx5LmpzIiwiYWRkaXRpb25hbC9sZXR0ZXJzd2l0aGJhc2ljcHVuYy5qcyIsImFkZGl0aW9uYWwvbWF4ZmlsZXMuanMiLCJhZGRpdGlvbmFsL21heHNpemUuanMiLCJhZGRpdGlvbmFsL21heHNpemV0b3RhbC5qcyIsImFkZGl0aW9uYWwvbW9iaWxlTkwuanMiLCJhZGRpdGlvbmFsL21vYmlsZVJVLmpzIiwiYWRkaXRpb25hbC9tb2JpbGVVSy5qcyIsImFkZGl0aW9uYWwvbmV0bWFzay5qcyIsImFkZGl0aW9uYWwvbmllRVMuanMiLCJhZGRpdGlvbmFsL25pZkVTLmpzIiwiYWRkaXRpb25hbC9uaXBQTC5qcyIsImFkZGl0aW9uYWwvbmlzQlIuanMiLCJhZGRpdGlvbmFsL25vdEVxdWFsVG8uanMiLCJhZGRpdGlvbmFsL25vd2hpdGVzcGFjZS5qcyIsImFkZGl0aW9uYWwvcGF0dGVybi5qcyIsImFkZGl0aW9uYWwvcGhvbmVOTC5qcyIsImFkZGl0aW9uYWwvcGhvbmVQTC5qcyIsImFkZGl0aW9uYWwvcGhvbmVzVUsuanMiLCJhZGRpdGlvbmFsL3Bob25lVUsuanMiLCJhZGRpdGlvbmFsL3Bob25lVVMuanMiLCJhZGRpdGlvbmFsL3Bvc3RhbGNvZGVCUi5qcyIsImFkZGl0aW9uYWwvcG9zdGFsQ29kZUNBLmpzIiwiYWRkaXRpb25hbC9wb3N0YWxjb2RlSVQuanMiLCJhZGRpdGlvbmFsL3Bvc3RhbGNvZGVOTC5qcyIsImFkZGl0aW9uYWwvcG9zdGNvZGVVSy5qcyIsImFkZGl0aW9uYWwvcmVxdWlyZV9mcm9tX2dyb3VwLmpzIiwiYWRkaXRpb25hbC9za2lwX29yX2ZpbGxfbWluaW11bS5qcyIsImFkZGl0aW9uYWwvc3RhdGVzVVMuanMiLCJhZGRpdGlvbmFsL3N0cmlwcGVkbWlubGVuZ3RoLmpzIiwiYWRkaXRpb25hbC90aW1lLmpzIiwiYWRkaXRpb25hbC90aW1lMTJoLmpzIiwiYWRkaXRpb25hbC91cmwyLmpzIiwiYWRkaXRpb25hbC92aW5VUy5qcyIsImFkZGl0aW9uYWwvemlwY29kZVVTLmpzIiwiYWRkaXRpb25hbC96aXByYW5nZS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19hci5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19hei5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19iZy5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19ibl9CRC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19jYS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19jcy5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19kYS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19kZS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19lbC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19lcy5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19lc19BUi5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19lc19QRS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19ldC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19ldS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19mYS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19maS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19mci5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19nZS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19nbC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19oZS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19oci5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19odS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19oeV9BTS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19pZC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19pcy5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19pdC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19qYS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19rYS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19ray5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19rby5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19sdC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19sdi5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19tay5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19teS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19ubC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19uby5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19wbC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19wdF9CUi5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19wdF9QVC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19yby5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19ydS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19zZC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19zaS5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19zay5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19zbC5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19zci5qcyIsImxvY2FsaXphdGlvbi9tZXNzYWdlc19zcl9sYXQuanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfc3YuanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfdGguanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfdGouanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfdHIuanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfdWsuanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfdXIuanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfdmkuanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfemguanMiLCJsb2NhbGl6YXRpb24vbWVzc2FnZXNfemhfVFcuanMiLCJsb2NhbGl6YXRpb24vbWV0aG9kc19kZS5qcyIsImxvY2FsaXphdGlvbi9tZXRob2RzX2VzX0NMLmpzIiwibG9jYWxpemF0aW9uL21ldGhvZHNfZmkuanMiLCJsb2NhbGl6YXRpb24vbWV0aG9kc19pdC5qcyIsImxvY2FsaXphdGlvbi9tZXRob2RzX25sLmpzIiwibG9jYWxpemF0aW9uL21ldGhvZHNfcHQuanMiLCJqcXVlcnkuZmFuY3lib3guanMiLCJqcXVlcnkuZm9ybS5qcyIsImpxdWVyeS5tYXNvbnJ5Lm1pbi5qcyIsImpzLmNvb2tpZS5qcyIsImxvZ2xldmVsLmpzIiwic2xpY2svc2xpY2suanMiLCJtYWluLmpzIl0sIm5hbWVzIjpbImdsb2JhbCIsImZhY3RvcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jdW1lbnQiLCJ3IiwiRXJyb3IiLCJ3aW5kb3ciLCJub0dsb2JhbCIsImFyciIsImdldFByb3RvIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJzbGljZSIsImNvbmNhdCIsInB1c2giLCJpbmRleE9mIiwiY2xhc3MydHlwZSIsInRvU3RyaW5nIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJjYWxsIiwic3VwcG9ydCIsImlzRnVuY3Rpb24iLCJvYmoiLCJub2RlVHlwZSIsImlzV2luZG93IiwicHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyIsInR5cGUiLCJzcmMiLCJub25jZSIsIm5vTW9kdWxlIiwiRE9NRXZhbCIsImNvZGUiLCJub2RlIiwiZG9jIiwiaSIsInZhbCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0IiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiaGVhZCIsImFwcGVuZENoaWxkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwidG9UeXBlIiwidmVyc2lvbiIsImpRdWVyeSIsInNlbGVjdG9yIiwiY29udGV4dCIsImZuIiwiaW5pdCIsInJ0cmltIiwicHJvdG90eXBlIiwianF1ZXJ5IiwiY29uc3RydWN0b3IiLCJsZW5ndGgiLCJ0b0FycmF5IiwiZ2V0IiwibnVtIiwicHVzaFN0YWNrIiwiZWxlbXMiLCJyZXQiLCJtZXJnZSIsInByZXZPYmplY3QiLCJlYWNoIiwiY2FsbGJhY2siLCJtYXAiLCJlbGVtIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJmaXJzdCIsImVxIiwibGFzdCIsImxlbiIsImoiLCJlbmQiLCJzb3J0Iiwic3BsaWNlIiwiZXh0ZW5kIiwib3B0aW9ucyIsIm5hbWUiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJjbG9uZSIsInRhcmdldCIsImRlZXAiLCJpc1BsYWluT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwidW5kZWZpbmVkIiwiZXhwYW5kbyIsIk1hdGgiLCJyYW5kb20iLCJyZXBsYWNlIiwiaXNSZWFkeSIsImVycm9yIiwibXNnIiwibm9vcCIsInByb3RvIiwiQ3RvciIsImlzRW1wdHlPYmplY3QiLCJnbG9iYWxFdmFsIiwiaXNBcnJheUxpa2UiLCJ0cmltIiwibWFrZUFycmF5IiwicmVzdWx0cyIsImluQXJyYXkiLCJzZWNvbmQiLCJncmVwIiwiaW52ZXJ0IiwiY2FsbGJhY2tJbnZlcnNlIiwibWF0Y2hlcyIsImNhbGxiYWNrRXhwZWN0IiwiYXJnIiwidmFsdWUiLCJndWlkIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJzcGxpdCIsInRvTG93ZXJDYXNlIiwiU2l6emxlIiwiRXhwciIsImdldFRleHQiLCJpc1hNTCIsInRva2VuaXplIiwiY29tcGlsZSIsInNlbGVjdCIsIm91dGVybW9zdENvbnRleHQiLCJzb3J0SW5wdXQiLCJoYXNEdXBsaWNhdGUiLCJzZXREb2N1bWVudCIsImRvY0VsZW0iLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJjb250YWlucyIsIkRhdGUiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwibm9ubmF0aXZlU2VsZWN0b3JDYWNoZSIsInNvcnRPcmRlciIsImEiLCJiIiwicG9wIiwicHVzaF9uYXRpdmUiLCJsaXN0IiwiYm9vbGVhbnMiLCJ3aGl0ZXNwYWNlIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJSZWdFeHAiLCJyY29tbWEiLCJyY29tYmluYXRvcnMiLCJyZGVzY2VuZCIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsInJodG1sIiwicmlucHV0cyIsInJoZWFkZXIiLCJybmF0aXZlIiwicnF1aWNrRXhwciIsInJzaWJsaW5nIiwicnVuZXNjYXBlIiwiZnVuZXNjYXBlIiwiXyIsImVzY2FwZWQiLCJlc2NhcGVkV2hpdGVzcGFjZSIsImhpZ2giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJyY3NzZXNjYXBlIiwiZmNzc2VzY2FwZSIsImNoIiwiYXNDb2RlUG9pbnQiLCJjaGFyQ29kZUF0IiwidW5sb2FkSGFuZGxlciIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJkaXNhYmxlZCIsIm5vZGVOYW1lIiwiZGlyIiwibmV4dCIsImNoaWxkTm9kZXMiLCJlIiwiZWxzIiwic2VlZCIsIm0iLCJuaWQiLCJtYXRjaCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsIm93bmVyRG9jdW1lbnQiLCJleGVjIiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsInRlc3QiLCJ0b1NlbGVjdG9yIiwiam9pbiIsInRlc3RDb250ZXh0IiwicXVlcnlTZWxlY3RvckFsbCIsInFzYUVycm9yIiwicmVtb3ZlQXR0cmlidXRlIiwia2V5cyIsImNhY2hlIiwia2V5IiwiY2FjaGVMZW5ndGgiLCJzaGlmdCIsIm1hcmtGdW5jdGlvbiIsImFzc2VydCIsImVsIiwiYWRkSGFuZGxlIiwiYXR0cnMiLCJoYW5kbGVyIiwiYXR0ckhhbmRsZSIsInNpYmxpbmdDaGVjayIsImN1ciIsImRpZmYiLCJzb3VyY2VJbmRleCIsIm5leHRTaWJsaW5nIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVEaXNhYmxlZFBzZXVkbyIsImlzRGlzYWJsZWQiLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJuYW1lc3BhY2UiLCJuYW1lc3BhY2VVUkkiLCJkb2N1bWVudEVsZW1lbnQiLCJoYXNDb21wYXJlIiwic3ViV2luZG93IiwiZGVmYXVsdFZpZXciLCJ0b3AiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiZ2V0QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiZmlsdGVyIiwiYXR0cklkIiwiZmluZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJ0bXAiLCJpbm5lckhUTUwiLCJpbnB1dCIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJlbGVtZW50cyIsImF0dHIiLCJzcGVjaWZpZWQiLCJlc2NhcGUiLCJzZWwiLCJ1bmlxdWVTb3J0IiwiZHVwbGljYXRlcyIsImRldGVjdER1cGxpY2F0ZXMiLCJzb3J0U3RhYmxlIiwidGV4dENvbnRlbnQiLCJmaXJzdENoaWxkIiwibm9kZVZhbHVlIiwic2VsZWN0b3JzIiwiY3JlYXRlUHNldWRvIiwicmVsYXRpdmUiLCJwcmVGaWx0ZXIiLCJleGNlc3MiLCJ1bnF1b3RlZCIsIm5vZGVOYW1lU2VsZWN0b3IiLCJwYXR0ZXJuIiwib3BlcmF0b3IiLCJjaGVjayIsInJlc3VsdCIsIndoYXQiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwieG1sIiwidW5pcXVlQ2FjaGUiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJwYXJlbnQiLCJ1c2VDYWNoZSIsImxhc3RDaGlsZCIsInVuaXF1ZUlEIiwicHNldWRvIiwiYXJncyIsInNldEZpbHRlcnMiLCJpZHgiLCJtYXRjaGVkIiwibWF0Y2hlciIsInVubWF0Y2hlZCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJsb2NhdGlvbiIsImFjdGl2ZUVsZW1lbnQiLCJoYXNGb2N1cyIsImhyZWYiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJzZWxlY3RlZCIsInNlbGVjdGVkSW5kZXgiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsImZpbHRlcnMiLCJwYXJzZU9ubHkiLCJ0b2tlbnMiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJjb21iaW5hdG9yIiwiYmFzZSIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsIm11bHRpcGxlQ29udGV4dHMiLCJjb250ZXh0cyIsImNvbmRlbnNlIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsInByZU1hcCIsInBvc3RNYXAiLCJwcmVleGlzdGluZyIsIm1hdGNoZXJJbiIsIm1hdGNoZXJPdXQiLCJtYXRjaGVyRnJvbVRva2VucyIsImNoZWNrQ29udGV4dCIsImxlYWRpbmdSZWxhdGl2ZSIsImltcGxpY2l0UmVsYXRpdmUiLCJtYXRjaENvbnRleHQiLCJtYXRjaEFueUNvbnRleHQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwidG9rZW4iLCJjb21waWxlZCIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsImlzWE1MRG9jIiwiZXNjYXBlU2VsZWN0b3IiLCJ1bnRpbCIsInRydW5jYXRlIiwiaXMiLCJzaWJsaW5ncyIsIm4iLCJybmVlZHNDb250ZXh0IiwibmVlZHNDb250ZXh0IiwicnNpbmdsZVRhZyIsIndpbm5vdyIsInF1YWxpZmllciIsIm5vdCIsInNlbGYiLCJyb290alF1ZXJ5Iiwicm9vdCIsInBhcnNlSFRNTCIsInJlYWR5IiwicnBhcmVudHNwcmV2IiwiZ3VhcmFudGVlZFVuaXF1ZSIsImNoaWxkcmVuIiwiY29udGVudHMiLCJwcmV2IiwiaGFzIiwidGFyZ2V0cyIsImwiLCJjbG9zZXN0IiwiaW5kZXgiLCJwcmV2QWxsIiwiYWRkIiwiYWRkQmFjayIsInNpYmxpbmciLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsInByZXZVbnRpbCIsImNvbnRlbnREb2N1bWVudCIsImNvbnRlbnQiLCJyZXZlcnNlIiwicm5vdGh0bWx3aGl0ZSIsImNyZWF0ZU9wdGlvbnMiLCJvYmplY3QiLCJmbGFnIiwiQ2FsbGJhY2tzIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJxdWV1ZSIsImZpcmluZ0luZGV4IiwiZmlyZSIsIm9uY2UiLCJzdG9wT25GYWxzZSIsInJlbW92ZSIsImVtcHR5IiwiZGlzYWJsZSIsImxvY2siLCJmaXJlV2l0aCIsIklkZW50aXR5IiwidiIsIlRocm93ZXIiLCJleCIsImFkb3B0VmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9WYWx1ZSIsIm1ldGhvZCIsInByb21pc2UiLCJmYWlsIiwidGhlbiIsIkRlZmVycmVkIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJwaXBlIiwiZm5zIiwibmV3RGVmZXIiLCJ0dXBsZSIsInJldHVybmVkIiwicHJvZ3Jlc3MiLCJub3RpZnkiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJvblByb2dyZXNzIiwibWF4RGVwdGgiLCJkZXB0aCIsInNwZWNpYWwiLCJ0aGF0IiwibWlnaHRUaHJvdyIsIlR5cGVFcnJvciIsIm5vdGlmeVdpdGgiLCJyZXNvbHZlV2l0aCIsInByb2Nlc3MiLCJleGNlcHRpb25Ib29rIiwic3RhY2tUcmFjZSIsInJlamVjdFdpdGgiLCJnZXRTdGFja0hvb2siLCJzZXRUaW1lb3V0Iiwic3RhdGVTdHJpbmciLCJ3aGVuIiwic2luZ2xlVmFsdWUiLCJyZW1haW5pbmciLCJyZXNvbHZlQ29udGV4dHMiLCJyZXNvbHZlVmFsdWVzIiwibWFzdGVyIiwidXBkYXRlRnVuYyIsInJlcnJvck5hbWVzIiwic3RhY2siLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJyZWFkeUV4Y2VwdGlvbiIsInJlYWR5TGlzdCIsInJlYWR5V2FpdCIsIndhaXQiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVhZHlTdGF0ZSIsImRvU2Nyb2xsIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwicm1zUHJlZml4IiwicmRhc2hBbHBoYSIsImZjYW1lbENhc2UiLCJhbGwiLCJsZXR0ZXIiLCJ0b1VwcGVyQ2FzZSIsImNhbWVsQ2FzZSIsInN0cmluZyIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJ1aWQiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsInNldCIsImRhdGEiLCJwcm9wIiwiaGFzRGF0YSIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZ2V0RGF0YSIsIkpTT04iLCJwYXJzZSIsImRhdGFBdHRyIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJob29rcyIsIl9xdWV1ZUhvb2tzIiwic3RvcCIsInNldHRlciIsImNsZWFyUXVldWUiLCJjb3VudCIsImRlZmVyIiwicG51bSIsInNvdXJjZSIsInJjc3NOdW0iLCJjc3NFeHBhbmQiLCJpc0F0dGFjaGVkIiwiY29tcG9zZWQiLCJnZXRSb290Tm9kZSIsImlzSGlkZGVuV2l0aGluVHJlZSIsInN0eWxlIiwiZGlzcGxheSIsImNzcyIsInN3YXAiLCJvbGQiLCJhZGp1c3RDU1MiLCJ2YWx1ZVBhcnRzIiwidHdlZW4iLCJhZGp1c3RlZCIsInNjYWxlIiwibWF4SXRlcmF0aW9ucyIsImN1cnJlbnRWYWx1ZSIsImluaXRpYWwiLCJ1bml0IiwiY3NzTnVtYmVyIiwiaW5pdGlhbEluVW5pdCIsImRlZmF1bHREaXNwbGF5TWFwIiwiZ2V0RGVmYXVsdERpc3BsYXkiLCJib2R5Iiwic2hvd0hpZGUiLCJzaG93IiwidmFsdWVzIiwiaGlkZSIsInRvZ2dsZSIsInJjaGVja2FibGVUeXBlIiwicnRhZ05hbWUiLCJyc2NyaXB0VHlwZSIsIndyYXBNYXAiLCJvcHRpb24iLCJ0aGVhZCIsImNvbCIsInRyIiwidGQiLCJfZGVmYXVsdCIsIm9wdGdyb3VwIiwidGJvZHkiLCJ0Zm9vdCIsImNvbGdyb3VwIiwiY2FwdGlvbiIsInRoIiwiZ2V0QWxsIiwic2V0R2xvYmFsRXZhbCIsInJlZkVsZW1lbnRzIiwiYnVpbGRGcmFnbWVudCIsInNjcmlwdHMiLCJzZWxlY3Rpb24iLCJpZ25vcmVkIiwid3JhcCIsImF0dGFjaGVkIiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50Iiwibm9kZXMiLCJjcmVhdGVUZXh0Tm9kZSIsImh0bWxQcmVmaWx0ZXIiLCJkaXYiLCJjaGVja0Nsb25lIiwiY2xvbmVOb2RlIiwibm9DbG9uZUNoZWNrZWQiLCJya2V5RXZlbnQiLCJybW91c2VFdmVudCIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwiZXhwZWN0U3luYyIsInNhZmVBY3RpdmVFbGVtZW50IiwiZXJyIiwib24iLCJ0eXBlcyIsIm9uZSIsIm9yaWdGbiIsImV2ZW50Iiwib2ZmIiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmoiLCJoYW5kbGVycyIsIm5hbWVzcGFjZXMiLCJvcmlnVHlwZSIsImVsZW1EYXRhIiwiaGFuZGxlIiwidHJpZ2dlcmVkIiwiZGlzcGF0Y2giLCJkZWxlZ2F0ZVR5cGUiLCJiaW5kVHlwZSIsImRlbGVnYXRlQ291bnQiLCJzZXR1cCIsIm1hcHBlZFR5cGVzIiwib3JpZ0NvdW50IiwidGVhcmRvd24iLCJyZW1vdmVFdmVudCIsIm5hdGl2ZUV2ZW50IiwiZml4IiwiaGFuZGxlclF1ZXVlIiwiZGVsZWdhdGVUYXJnZXQiLCJwcmVEaXNwYXRjaCIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiY3VycmVudFRhcmdldCIsImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwicm5hbWVzcGFjZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwicG9zdERpc3BhdGNoIiwibWF0Y2hlZEhhbmRsZXJzIiwibWF0Y2hlZFNlbGVjdG9ycyIsImJ1dHRvbiIsImFkZFByb3AiLCJob29rIiwiRXZlbnQiLCJlbnVtZXJhYmxlIiwib3JpZ2luYWxFdmVudCIsIndyaXRhYmxlIiwibG9hZCIsIm5vQnViYmxlIiwiY2xpY2siLCJsZXZlcmFnZU5hdGl2ZSIsInRyaWdnZXIiLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsIm5vdEFzeW5jIiwic2F2ZWQiLCJpc1RyaWdnZXIiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJwcm9wcyIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJyZWxhdGVkVGFyZ2V0IiwidGltZVN0YW1wIiwibm93IiwiaXNTaW11bGF0ZWQiLCJhbHRLZXkiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNoYW5nZWRUb3VjaGVzIiwiY3RybEtleSIsImRldGFpbCIsImV2ZW50UGhhc2UiLCJtZXRhS2V5IiwicGFnZVgiLCJwYWdlWSIsInNoaWZ0S2V5IiwidmlldyIsImNoYXJDb2RlIiwia2V5Q29kZSIsImJ1dHRvbnMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwicG9pbnRlcklkIiwicG9pbnRlclR5cGUiLCJzY3JlZW5YIiwic2NyZWVuWSIsInRhcmdldFRvdWNoZXMiLCJ0b0VsZW1lbnQiLCJ0b3VjaGVzIiwid2hpY2giLCJmb2N1cyIsImJsdXIiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicnhodG1sVGFnIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyY2xlYW5TY3JpcHQiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJkaXNhYmxlU2NyaXB0IiwicmVzdG9yZVNjcmlwdCIsImNsb25lQ29weUV2ZW50IiwiZGVzdCIsInBkYXRhT2xkIiwicGRhdGFDdXIiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZml4SW5wdXQiLCJkb21NYW5pcCIsImNvbGxlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJ2YWx1ZUlzRnVuY3Rpb24iLCJodG1sIiwiX2V2YWxVcmwiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImRhdGFBbmRFdmVudHMiLCJkZWVwRGF0YUFuZEV2ZW50cyIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZGV0YWNoIiwiYXBwZW5kIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwicmVwbGFjZVdpdGgiLCJyZXBsYWNlQ2hpbGQiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsIm9yaWdpbmFsIiwiaW5zZXJ0Iiwicm51bW5vbnB4IiwiZ2V0U3R5bGVzIiwib3BlbmVyIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInJib3hTdHlsZSIsImNvbXB1dGVTdHlsZVRlc3RzIiwiY29udGFpbmVyIiwiY3NzVGV4dCIsImRpdlN0eWxlIiwicGl4ZWxQb3NpdGlvblZhbCIsInJlbGlhYmxlTWFyZ2luTGVmdFZhbCIsInJvdW5kUGl4ZWxNZWFzdXJlcyIsIm1hcmdpbkxlZnQiLCJyaWdodCIsInBpeGVsQm94U3R5bGVzVmFsIiwiYm94U2l6aW5nUmVsaWFibGVWYWwiLCJ3aWR0aCIsInBvc2l0aW9uIiwic2Nyb2xsYm94U2l6ZVZhbCIsIm9mZnNldFdpZHRoIiwibWVhc3VyZSIsInJvdW5kIiwicGFyc2VGbG9hdCIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiYm94U2l6aW5nUmVsaWFibGUiLCJwaXhlbEJveFN0eWxlcyIsInBpeGVsUG9zaXRpb24iLCJyZWxpYWJsZU1hcmdpbkxlZnQiLCJzY3JvbGxib3hTaXplIiwiY3VyQ1NTIiwiY29tcHV0ZWQiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImFkZEdldEhvb2tJZiIsImNvbmRpdGlvbkZuIiwiaG9va0ZuIiwiY3NzUHJlZml4ZXMiLCJlbXB0eVN0eWxlIiwidmVuZG9yUHJvcHMiLCJ2ZW5kb3JQcm9wTmFtZSIsImNhcE5hbWUiLCJmaW5hbFByb3BOYW1lIiwiZmluYWwiLCJjc3NQcm9wcyIsInJkaXNwbGF5c3dhcCIsInJjdXN0b21Qcm9wIiwiY3NzU2hvdyIsInZpc2liaWxpdHkiLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFdlaWdodCIsInNldFBvc2l0aXZlTnVtYmVyIiwic3VidHJhY3QiLCJtYXgiLCJib3hNb2RlbEFkanVzdG1lbnQiLCJkaW1lbnNpb24iLCJib3giLCJpc0JvcmRlckJveCIsInN0eWxlcyIsImNvbXB1dGVkVmFsIiwiZXh0cmEiLCJkZWx0YSIsImNlaWwiLCJnZXRXaWR0aE9ySGVpZ2h0IiwiYm94U2l6aW5nTmVlZGVkIiwidmFsdWVJc0JvcmRlckJveCIsIm9mZnNldFByb3AiLCJnZXRDbGllbnRSZWN0cyIsImNzc0hvb2tzIiwib3BhY2l0eSIsIm9yaWdOYW1lIiwiaXNDdXN0b21Qcm9wIiwic2V0UHJvcGVydHkiLCJpc0Zpbml0ZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbGJveFNpemVCdWdneSIsImxlZnQiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kIiwiZXhwYW5kZWQiLCJwYXJ0cyIsIlR3ZWVuIiwiZWFzaW5nIiwicHJvcEhvb2tzIiwicnVuIiwicGVyY2VudCIsImVhc2VkIiwiZHVyYXRpb24iLCJwb3MiLCJzdGVwIiwiZngiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwibGluZWFyIiwicCIsInN3aW5nIiwiY29zIiwiUEkiLCJmeE5vdyIsImluUHJvZ3Jlc3MiLCJyZnh0eXBlcyIsInJydW4iLCJzY2hlZHVsZSIsImhpZGRlbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImludGVydmFsIiwidGljayIsImNyZWF0ZUZ4Tm93IiwiZ2VuRngiLCJpbmNsdWRlV2lkdGgiLCJoZWlnaHQiLCJjcmVhdGVUd2VlbiIsImFuaW1hdGlvbiIsIkFuaW1hdGlvbiIsInR3ZWVuZXJzIiwiZGVmYXVsdFByZWZpbHRlciIsIm9wdHMiLCJvbGRmaXJlIiwicHJvcFR3ZWVuIiwicmVzdG9yZURpc3BsYXkiLCJpc0JveCIsImFuaW0iLCJkYXRhU2hvdyIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJwcm9wRmlsdGVyIiwic3BlY2lhbEVhc2luZyIsInByb3BlcnRpZXMiLCJzdG9wcGVkIiwicHJlZmlsdGVycyIsImN1cnJlbnRUaW1lIiwic3RhcnRUaW1lIiwidHdlZW5zIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiZ290b0VuZCIsImJpbmQiLCJjb21wbGV0ZSIsInRpbWVyIiwidHdlZW5lciIsInByZWZpbHRlciIsInNwZWVkIiwib3B0Iiwic3BlZWRzIiwiZmFkZVRvIiwidG8iLCJhbmltYXRlIiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJmaW5pc2giLCJzdG9wUXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwic2xvdyIsImZhc3QiLCJkZWxheSIsInRpbWUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY2hlY2tPbiIsIm9wdFNlbGVjdGVkIiwicmFkaW9WYWx1ZSIsImJvb2xIb29rIiwicmVtb3ZlQXR0ciIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYm9vbCIsImF0dHJOYW1lcyIsImdldHRlciIsImxvd2VyY2FzZU5hbWUiLCJyZm9jdXNhYmxlIiwicmNsaWNrYWJsZSIsInJlbW92ZVByb3AiLCJwcm9wRml4IiwidGFiaW5kZXgiLCJwYXJzZUludCIsInN0cmlwQW5kQ29sbGFwc2UiLCJnZXRDbGFzcyIsImNsYXNzZXNUb0FycmF5IiwiYWRkQ2xhc3MiLCJjbGFzc2VzIiwiY3VyVmFsdWUiLCJjbGF6eiIsImZpbmFsVmFsdWUiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwic3RhdGVWYWwiLCJpc1ZhbGlkVmFsdWUiLCJjbGFzc05hbWVzIiwiaGFzQ2xhc3MiLCJycmV0dXJuIiwidmFsSG9va3MiLCJvcHRpb25TZXQiLCJmb2N1c2luIiwicmZvY3VzTW9ycGgiLCJzdG9wUHJvcGFnYXRpb25DYWxsYmFjayIsIm9ubHlIYW5kbGVycyIsImJ1YmJsZVR5cGUiLCJvbnR5cGUiLCJsYXN0RWxlbWVudCIsImV2ZW50UGF0aCIsInBhcmVudFdpbmRvdyIsInNpbXVsYXRlIiwidHJpZ2dlckhhbmRsZXIiLCJhdHRhY2hlcyIsInJxdWVyeSIsInBhcnNlWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwicmJyYWNrZXQiLCJyQ1JMRiIsInJzdWJtaXR0ZXJUeXBlcyIsInJzdWJtaXR0YWJsZSIsImJ1aWxkUGFyYW1zIiwidHJhZGl0aW9uYWwiLCJwYXJhbSIsInMiLCJ2YWx1ZU9yRnVuY3Rpb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInIyMCIsInJoYXNoIiwicmFudGlDYWNoZSIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwidHJhbnNwb3J0cyIsImFsbFR5cGVzIiwib3JpZ2luQW5jaG9yIiwiYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwic3RydWN0dXJlIiwiZGF0YVR5cGVFeHByZXNzaW9uIiwiZGF0YVR5cGUiLCJkYXRhVHlwZXMiLCJpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsImpxWEhSIiwiaW5zcGVjdGVkIiwic2Vla2luZ1RyYW5zcG9ydCIsImluc3BlY3QiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwiYWpheFNldHRpbmdzIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsInJlc3BvbnNlcyIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJtaW1lVHlwZSIsImdldFJlc3BvbnNlSGVhZGVyIiwiY29udmVydGVycyIsImFqYXhDb252ZXJ0IiwicmVzcG9uc2UiLCJpc1N1Y2Nlc3MiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwicmVzcG9uc2VGaWVsZHMiLCJkYXRhRmlsdGVyIiwidGhyb3dzIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsInVybCIsImlzTG9jYWwiLCJwcm90b2NvbCIsInByb2Nlc3NEYXRhIiwiYXN5bmMiLCJjb250ZW50VHlwZSIsImFjY2VwdHMiLCJqc29uIiwiYWpheFNldHVwIiwic2V0dGluZ3MiLCJhamF4UHJlZmlsdGVyIiwiYWpheFRyYW5zcG9ydCIsImFqYXgiLCJ0cmFuc3BvcnQiLCJjYWNoZVVSTCIsInJlc3BvbnNlSGVhZGVyc1N0cmluZyIsInJlc3BvbnNlSGVhZGVycyIsInRpbWVvdXRUaW1lciIsInVybEFuY2hvciIsImZpcmVHbG9iYWxzIiwidW5jYWNoZWQiLCJjYWxsYmFja0NvbnRleHQiLCJnbG9iYWxFdmVudENvbnRleHQiLCJjb21wbGV0ZURlZmVycmVkIiwic3RhdHVzQ29kZSIsInJlcXVlc3RIZWFkZXJzIiwicmVxdWVzdEhlYWRlcnNOYW1lcyIsInN0ckFib3J0IiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsIm92ZXJyaWRlTWltZVR5cGUiLCJzdGF0dXMiLCJhYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJjcm9zc0RvbWFpbiIsImhvc3QiLCJoYXNDb250ZW50IiwiaWZNb2RpZmllZCIsImhlYWRlcnMiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwibW9kaWZpZWQiLCJnZXRKU09OIiwiZ2V0U2NyaXB0Iiwid3JhcEFsbCIsImZpcnN0RWxlbWVudENoaWxkIiwid3JhcElubmVyIiwiaHRtbElzRnVuY3Rpb24iLCJ1bndyYXAiLCJ2aXNpYmxlIiwib2Zmc2V0SGVpZ2h0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHJTdWNjZXNzU3RhdHVzIiwieGhyU3VwcG9ydGVkIiwiY29ycyIsImVycm9yQ2FsbGJhY2siLCJvcGVuIiwidXNlcm5hbWUiLCJ4aHJGaWVsZHMiLCJvbmxvYWQiLCJvbmVycm9yIiwib25hYm9ydCIsIm9udGltZW91dCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlVGV4dCIsImJpbmFyeSIsInNjcmlwdEF0dHJzIiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwiY3JlYXRlSFRNTERvY3VtZW50IiwiaW1wbGVtZW50YXRpb24iLCJrZWVwU2NyaXB0cyIsInBhcnNlZCIsInBhcmFtcyIsImFuaW1hdGVkIiwib2Zmc2V0Iiwic2V0T2Zmc2V0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImNhbGN1bGF0ZVBvc2l0aW9uIiwiY3VyRWxlbSIsInVzaW5nIiwicmVjdCIsIndpbiIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJvZmZzZXRQYXJlbnQiLCJwYXJlbnRPZmZzZXQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJob3ZlciIsImZuT3ZlciIsImZuT3V0IiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwicHJveHkiLCJob2xkUmVhZHkiLCJob2xkIiwicGFyc2VKU09OIiwiaXNOdW1lcmljIiwiaXNOYU4iLCJkZWZpbmUiLCJhbWQiLCJfalF1ZXJ5IiwiXyQiLCIkIiwibm9Db25mbGljdCIsIl9jdXJJbnN0IiwiX2tleUV2ZW50IiwiX2Rpc2FibGVkSW5wdXRzIiwiX2RhdGVwaWNrZXJTaG93aW5nIiwiX2luRGlhbG9nIiwiX21haW5EaXZJZCIsIl9pbmxpbmVDbGFzcyIsIl9hcHBlbmRDbGFzcyIsIl90cmlnZ2VyQ2xhc3MiLCJfZGlhbG9nQ2xhc3MiLCJfZGlzYWJsZUNsYXNzIiwiX3Vuc2VsZWN0YWJsZUNsYXNzIiwiX2N1cnJlbnRDbGFzcyIsIl9kYXlPdmVyQ2xhc3MiLCJyZWdpb25hbCIsImNsb3NlVGV4dCIsInByZXZUZXh0IiwibmV4dFRleHQiLCJjdXJyZW50VGV4dCIsIm1vbnRoTmFtZXMiLCJtb250aE5hbWVzU2hvcnQiLCJkYXlOYW1lcyIsImRheU5hbWVzU2hvcnQiLCJkYXlOYW1lc01pbiIsIndlZWtIZWFkZXIiLCJkYXRlRm9ybWF0IiwiZmlyc3REYXkiLCJpc1JUTCIsInNob3dNb250aEFmdGVyWWVhciIsInllYXJTdWZmaXgiLCJfZGVmYXVsdHMiLCJzaG93T24iLCJzaG93QW5pbSIsInNob3dPcHRpb25zIiwiZGVmYXVsdERhdGUiLCJhcHBlbmRUZXh0IiwiYnV0dG9uVGV4dCIsImJ1dHRvbkltYWdlIiwiYnV0dG9uSW1hZ2VPbmx5IiwiaGlkZUlmTm9QcmV2TmV4dCIsIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXQiLCJnb3RvQ3VycmVudCIsImNoYW5nZU1vbnRoIiwiY2hhbmdlWWVhciIsInllYXJSYW5nZSIsInNob3dPdGhlck1vbnRocyIsInNlbGVjdE90aGVyTW9udGhzIiwic2hvd1dlZWsiLCJjYWxjdWxhdGVXZWVrIiwiaXNvODYwMVdlZWsiLCJzaG9ydFllYXJDdXRvZmYiLCJtaW5EYXRlIiwibWF4RGF0ZSIsImJlZm9yZVNob3dEYXkiLCJiZWZvcmVTaG93Iiwib25TZWxlY3QiLCJvbkNoYW5nZU1vbnRoWWVhciIsIm9uQ2xvc2UiLCJudW1iZXJPZk1vbnRocyIsInNob3dDdXJyZW50QXRQb3MiLCJzdGVwTW9udGhzIiwic3RlcEJpZ01vbnRocyIsImFsdEZpZWxkIiwiYWx0Rm9ybWF0IiwiY29uc3RyYWluSW5wdXQiLCJzaG93QnV0dG9uUGFuZWwiLCJhdXRvU2l6ZSIsImVuIiwiZHBEaXYiLCJvIiwiZGF0ZXBpY2tlciIsIl9pc0Rpc2FibGVkRGF0ZXBpY2tlciIsImlubGluZSIsInIiLCJlbGVtZW50IiwiX3JlZnJlc2giLCJfdHJpZ2dlciIsInVpIiwiaCIsIndpZGdldCIsIldpZGdldCIsIl9jcmVhdGVXaWRnZXQiLCJfcHJvdG8iLCJfY2hpbGRDb25zdHJ1Y3RvcnMiLCJfc3VwZXIiLCJfc3VwZXJBcHBseSIsIndpZGdldEV2ZW50UHJlZml4Iiwid2lkZ2V0TmFtZSIsIndpZGdldEZ1bGxOYW1lIiwiYnJpZGdlIiwiY2hhckF0IiwiX2luaXQiLCJkZWZhdWx0RWxlbWVudCIsImNyZWF0ZSIsInV1aWQiLCJldmVudE5hbWVzcGFjZSIsImJpbmRpbmdzIiwiaG92ZXJhYmxlIiwiZm9jdXNhYmxlIiwiY2xhc3Nlc0VsZW1lbnRMb29rdXAiLCJfb24iLCJkZXN0cm95IiwiX2dldENyZWF0ZU9wdGlvbnMiLCJfY3JlYXRlIiwiX3NldE9wdGlvbkRpc2FibGVkIiwiX2dldENyZWF0ZUV2ZW50RGF0YSIsIl9kZXN0cm95IiwiX3JlbW92ZUNsYXNzIiwiX3NldE9wdGlvbnMiLCJfc2V0T3B0aW9uIiwiX3NldE9wdGlvbkNsYXNzZXMiLCJfY2xhc3NlcyIsIl90b2dnbGVDbGFzcyIsImVuYWJsZSIsIl91bnRyYWNrQ2xhc3Nlc0VsZW1lbnQiLCJfYWRkQ2xhc3MiLCJjIiwiX29mZiIsIl9kZWxheSIsIl9ob3ZlcmFibGUiLCJfZm9jdXNhYmxlIiwiZm9jdXNvdXQiLCJlZmZlY3QiLCJlZmZlY3RzIiwidSIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsImFicyIsImQiLCJzY3JvbGxiYXJXaWR0aCIsImNsaWVudFdpZHRoIiwiZ2V0U2Nyb2xsSW5mbyIsImlzRG9jdW1lbnQiLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsImdldFdpdGhpbkluZm8iLCJvZiIsImYiLCJnIiwid2l0aGluIiwieSIsImNvbGxpc2lvbiIsImsiLCJhdCIsIngiLCJDIiwiRCIsIkkiLCJteSIsIm1hcmdpblRvcCIsInRhcmdldFdpZHRoIiwidGFyZ2V0SGVpZ2h0IiwiZWxlbVdpZHRoIiwiZWxlbUhlaWdodCIsImNvbGxpc2lvblBvc2l0aW9uIiwiY29sbGlzaW9uV2lkdGgiLCJjb2xsaXNpb25IZWlnaHQiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJpbXBvcnRhbnQiLCJmaXQiLCJmbGlwIiwiZmxpcGZpdCIsImRpc2FibGVTZWxlY3Rpb24iLCJlbmFibGVTZWxlY3Rpb24iLCJkZWYiLCJmbG9vciIsIm1vZCIsIl9yZ2JhIiwicmUiLCJzcGFjZSIsInRyYW5zcGFyZW50IiwiQ29sb3IiLCJyZ2JhIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwiaHNsYSIsImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiLCJkZWdyZWVzIiwiYmFja2dyb3VuZENvbG9yIiwiYWxwaGEiLCJmcm9tIiwiX3NwYWNlIiwidHJhbnNpdGlvbiIsImJsZW5kIiwidG9SZ2JhU3RyaW5nIiwidG9Ic2xhU3RyaW5nIiwidG9IZXhTdHJpbmciLCJtaW4iLCJfaHNsYSIsImNvbG9ySW5pdCIsImJvcmRlckNvbG9yIiwibmFtZXMiLCJhcXVhIiwiYmxhY2siLCJmdWNoc2lhIiwiZ3JheSIsImxpbWUiLCJtYXJvb24iLCJuYXZ5Iiwib2xpdmUiLCJwdXJwbGUiLCJzaWx2ZXIiLCJ0ZWFsIiwid2hpdGUiLCJ5ZWxsb3ciLCJjdXJyZW50U3R5bGUiLCJib3JkZXJCb3R0b20iLCJib3JkZXJMZWZ0IiwiYm9yZGVyUmlnaHQiLCJib3JkZXJUb3AiLCJib3JkZXJXaWR0aCIsInNldEF0dHIiLCJhbmltYXRlQ2xhc3MiLCJzd2l0Y2hDbGFzcyIsImJvdHRvbSIsInVpQmFja0NvbXBhdCIsInNhdmUiLCJyZXN0b3JlIiwic2V0TW9kZSIsImNyZWF0ZVdyYXBwZXIiLCJmb250U2l6ZSIsImJhY2tncm91bmQiLCJ6SW5kZXgiLCJyZW1vdmVXcmFwcGVyIiwibW9kZSIsInNjYWxlZERpbWVuc2lvbnMiLCJjbGlwVG9Cb3giLCJjbGlwIiwic2F2ZVN0eWxlIiwicmVzdG9yZVN0eWxlIiwiZ2V0QmFzZWxpbmUiLCJjcmVhdGVQbGFjZWhvbGRlciIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwicmVtb3ZlUGxhY2Vob2xkZXIiLCJjbGVhblVwIiwic2V0VHJhbnNpdGlvbiIsImNzc1VuaXQiLCJjc3NDbGlwIiwidHJhbnNmZXIiLCJpbm5lckhlaWdodCIsImlubmVyV2lkdGgiLCJjbGlwSW5pdCIsInBvdyIsIlNpbmUiLCJDaXJjIiwic3FydCIsIkVsYXN0aWMiLCJzaW4iLCJCYWNrIiwiQm91bmNlIiwidXAiLCJkb3duIiwiZGlyZWN0aW9uIiwiZGlzdGFuY2UiLCJ0aW1lcyIsInBpZWNlcyIsInNpemUiLCJob3JpekZpcnN0IiwiYmFja2dyb3VuZEltYWdlIiwiY29sb3IiLCJvcmlnaW4iLCJmYWRlIiwiZm9ybSIsImZvcm1SZXNldE1peGluIiwiX2Zvcm1SZXNldEhhbmRsZXIiLCJyZWZyZXNoIiwiX2JpbmRGb3JtUmVzZXRIYW5kbGVyIiwiX3VuYmluZEZvcm1SZXNldEhhbmRsZXIiLCJzdWJzdHJpbmciLCJCQUNLU1BBQ0UiLCJDT01NQSIsIkRFTEVURSIsIkRPV04iLCJFTkQiLCJFTlRFUiIsIkVTQ0FQRSIsIkhPTUUiLCJMRUZUIiwiUEFHRV9ET1dOIiwiUEFHRV9VUCIsIlBFUklPRCIsIlJJR0hUIiwiU1BBQ0UiLCJUQUIiLCJVUCIsImxhYmVscyIsInNjcm9sbFBhcmVudCIsInRhYmJhYmxlIiwidW5pcXVlSWQiLCJyZW1vdmVVbmlxdWVJZCIsImNvbGxhcHNpYmxlIiwiaGVhZGVyIiwiaGVpZ2h0U3R5bGUiLCJpY29ucyIsImFjdGl2ZUhlYWRlciIsImFjdGl2YXRlIiwiYmVmb3JlQWN0aXZhdGUiLCJoaWRlUHJvcHMiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJzaG93UHJvcHMiLCJwcmV2U2hvdyIsInByZXZIaWRlIiwiX3Byb2Nlc3NQYW5lbHMiLCJwYW5lbCIsIl9jcmVhdGVJY29ucyIsIl9kZXN0cm95SWNvbnMiLCJfYWN0aXZhdGUiLCJfc2V0dXBFdmVudHMiLCJfa2V5ZG93biIsIl9ldmVudEhhbmRsZXIiLCJfcGFuZWxLZXlEb3duIiwicGFuZWxzIiwiX2ZpbmRBY3RpdmUiLCJrZXlkb3duIiwib2xkSGVhZGVyIiwib2xkUGFuZWwiLCJuZXdIZWFkZXIiLCJuZXdQYW5lbCIsIl90b2dnbGUiLCJfYW5pbWF0ZSIsIl90b2dnbGVDb21wbGV0ZSIsInN1Ym1lbnUiLCJpdGVtcyIsIm1lbnVzIiwicm9sZSIsImFjdGl2ZU1lbnUiLCJtb3VzZUhhbmRsZWQiLCJwcmV2aW91c0ZpbHRlciIsImNvbGxhcHNlQWxsIiwiX2Nsb3NlT25Eb2N1bWVudENsaWNrIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJfbW92ZSIsInByZXZpb3VzIiwiY29sbGFwc2UiLCJmaWx0ZXJUaW1lciIsIl9maWx0ZXJNZW51SXRlbXMiLCJfaXNEaXZpZGVyIiwiX2l0ZW1Sb2xlIiwibWVudSIsImxpc3Rib3giLCJfc2Nyb2xsSW50b1ZpZXciLCJfY2xvc2UiLCJfc3RhcnRPcGVuaW5nIiwiaXRlbSIsIl9oYXNTY3JvbGwiLCJfb3BlbiIsImlzRmlyc3RJdGVtIiwiaXNMYXN0SXRlbSIsImF1dG9Gb2N1cyIsIm1pbkxlbmd0aCIsImNoYW5nZSIsImNsb3NlIiwic2VhcmNoIiwicmVxdWVzdEluZGV4IiwicGVuZGluZyIsImlzTXVsdGlMaW5lIiwiX2lzQ29udGVudEVkaXRhYmxlIiwidmFsdWVNZXRob2QiLCJpc05ld01lbnUiLCJfdmFsdWUiLCJ0ZXJtIiwiX3NlYXJjaFRpbWVvdXQiLCJrZXlwcmVzcyIsInNlbGVjdGVkSXRlbSIsImNhbmNlbEJsdXIiLCJzZWFyY2hpbmciLCJfY2hhbmdlIiwiX2luaXRTb3VyY2UiLCJfYXBwZW5kVG8iLCJtb3VzZWRvd24iLCJtZW51Zm9jdXMiLCJsaXZlUmVnaW9uIiwibWVudXNlbGVjdCIsIl9pc0V2ZW50VGFyZ2V0SW5XaWRnZXQiLCJfY2xvc2VPbkNsaWNrT3V0c2lkZSIsImF1dG9jb21wbGV0ZSIsIl9zZWFyY2giLCJjYW5jZWxTZWFyY2giLCJfcmVzcG9uc2UiLCJfX3Jlc3BvbnNlIiwiX25vcm1hbGl6ZSIsIl9zdWdnZXN0IiwibGFiZWwiLCJfcmVuZGVyTWVudSIsIl9yZXNpemVNZW51IiwiX3JlbmRlckl0ZW1EYXRhIiwiX3JlbmRlckl0ZW0iLCJlc2NhcGVSZWdleCIsIm1lc3NhZ2VzIiwibm9SZXN1bHRzIiwib25seVZpc2libGUiLCJjb250cm9sZ3JvdXBMYWJlbCIsImNoZWNrYm94cmFkaW8iLCJzZWxlY3RtZW51Iiwic3Bpbm5lciIsIl9lbmhhbmNlIiwiX2NhbGxDaGlsZE1ldGhvZCIsImNoaWxkV2lkZ2V0cyIsIl9pbml0V2lkZ2V0cyIsIl9yZXNvbHZlQ2xhc3Nlc1ZhbHVlcyIsIl91cGRhdGVDb3JuZXJDbGFzcyIsIl9idWlsZFNpbXBsZU9wdGlvbnMiLCJtaWRkbGUiLCJvbmx5IiwiX3NwaW5uZXJPcHRpb25zIiwiX2J1dHRvbk9wdGlvbnMiLCJfY2hlY2tib3hyYWRpb09wdGlvbnMiLCJfc2VsZWN0bWVudU9wdGlvbnMiLCJpY29uIiwiX3JlYWRUeXBlIiwib3JpZ2luYWxMYWJlbCIsIm91dGVySFRNTCIsIl91cGRhdGVMYWJlbCIsIl91cGRhdGVJY29uIiwiX2dldFJhZGlvR3JvdXAiLCJfdG9nZ2xlQ2xhc3NlcyIsImljb25TcGFjZSIsImljb25Qb3NpdGlvbiIsInNob3dMYWJlbCIsImlzSW5wdXQiLCJoYXNUaXRsZSIsImtleXVwIiwiX3VwZGF0ZVRvb2x0aXAiLCJ0aXRsZSIsIl9hdHRhY2hJY29uIiwiX2F0dGFjaEljb25TcGFjZSIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJ0YWdOYW1lIiwiYnV0dG9uc2V0IiwiY29udHJvbGdyb3VwIiwibWFya2VyQ2xhc3NOYW1lIiwibWF4Um93cyIsIl93aWRnZXREYXRlcGlja2VyIiwic2V0RGVmYXVsdHMiLCJfYXR0YWNoRGF0ZXBpY2tlciIsIl9uZXdJbnN0IiwiX2Nvbm5lY3REYXRlcGlja2VyIiwiX2lubGluZURhdGVwaWNrZXIiLCJzZWxlY3RlZERheSIsInNlbGVjdGVkTW9udGgiLCJzZWxlY3RlZFllYXIiLCJkcmF3TW9udGgiLCJkcmF3WWVhciIsIl9hdHRhY2htZW50cyIsIl9kb0tleURvd24iLCJfZG9LZXlQcmVzcyIsIl9kb0tleVVwIiwiX2F1dG9TaXplIiwiX2Rpc2FibGVEYXRlcGlja2VyIiwiX2dldCIsIl9zaG93RGF0ZXBpY2tlciIsImFsdCIsIl9sYXN0SW5wdXQiLCJfaGlkZURhdGVwaWNrZXIiLCJzZXRNb250aCIsInNldERhdGUiLCJnZXREYXkiLCJfZm9ybWF0RGF0ZSIsIl9zZXREYXRlIiwiX2dldERlZmF1bHREYXRlIiwiX3VwZGF0ZURhdGVwaWNrZXIiLCJfdXBkYXRlQWx0ZXJuYXRlIiwiX2RpYWxvZ0RhdGVwaWNrZXIiLCJfZGlhbG9nSW5zdCIsIl9kaWFsb2dJbnB1dCIsIl9wb3MiLCJjbGllbnRIZWlnaHQiLCJibG9ja1VJIiwiX2Rlc3Ryb3lEYXRlcGlja2VyIiwiX2VuYWJsZURhdGVwaWNrZXIiLCJjdXJzb3IiLCJfZ2V0SW5zdCIsIl9vcHRpb25EYXRlcGlja2VyIiwiX2dldERhdGVEYXRlcGlja2VyIiwiX2dldE1pbk1heERhdGUiLCJfY2hhbmdlRGF0ZXBpY2tlciIsIl9yZWZyZXNoRGF0ZXBpY2tlciIsIl9zZXREYXRlRGF0ZXBpY2tlciIsIl9zZXREYXRlRnJvbUZpZWxkIiwiX2dldERhdGUiLCJfc2VsZWN0RGF5IiwiX2FkanVzdERhdGUiLCJfY2xlYXJEYXRlIiwiX2dvdG9Ub2RheSIsIl9wb3NzaWJsZUNoYXJzIiwibGFzdFZhbCIsInBhcnNlRGF0ZSIsIl9nZXRGb3JtYXRDb25maWciLCJfZmluZFBvcyIsIl9jaGVja09mZnNldCIsIl9zaG91bGRGb2N1c0lucHV0IiwiX2dlbmVyYXRlSFRNTCIsIl9hdHRhY2hIYW5kbGVycyIsIl9nZXROdW1iZXJPZk1vbnRocyIsInllYXJzaHRtbCIsIl90aWR5RGlhbG9nIiwidW5ibG9ja1VJIiwiX2NoZWNrRXh0ZXJuYWxDbGljayIsIl9hZGp1c3RJbnN0RGF0ZSIsImN1cnJlbnREYXkiLCJjdXJyZW50TW9udGgiLCJjdXJyZW50WWVhciIsImdldERhdGUiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwiX25vdGlmeUNoYW5nZSIsIl9zZWxlY3RNb250aFllYXIiLCJfc2VsZWN0RGF0ZSIsImZvcm1hdERhdGUiLCJub1dlZWtlbmRzIiwiZ2V0VGltZSIsInN1YnN0ciIsIl90aWNrc1RvMTk3MCIsIl9nZXREYXlzSW5Nb250aCIsIl9kYXlsaWdodFNhdmluZ0FkanVzdCIsIkFUT00iLCJDT09LSUUiLCJJU09fODYwMSIsIlJGQ184MjIiLCJSRkNfODUwIiwiUkZDXzEwMzYiLCJSRkNfMTEyMyIsIlJGQ18yODIyIiwiUlNTIiwiVElDS1MiLCJUSU1FU1RBTVAiLCJXM0MiLCJfcmVzdHJpY3RNaW5NYXgiLCJfZGV0ZXJtaW5lRGF0ZSIsInNldEhvdXJzIiwic2V0TWludXRlcyIsInNldFNlY29uZHMiLCJzZXRNaWxsaXNlY29uZHMiLCJnZXRIb3VycyIsInRvZGF5Iiwic2VsZWN0RGF5Iiwic2VsZWN0TW9udGgiLCJzZWxlY3RZZWFyIiwiVCIsIlAiLCJNIiwiUyIsIkgiLCJ6IiwiTyIsIkEiLCJOIiwiVyIsIkUiLCJGIiwiTCIsIlIiLCJCIiwiWSIsInEiLCJLIiwiVSIsIlYiLCJYIiwiRyIsIlEiLCJKIiwiWiIsInRlIiwiX2NhbkFkanVzdE1vbnRoIiwiX2lzSW5SYW5nZSIsIl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlciIsIl9nZXRGaXJzdERheU9mTW9udGgiLCJpbml0aWFsaXplZCIsImllIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiY2FuY2VsIiwiX21vdXNlSW5pdCIsIl9tb3VzZURvd24iLCJzdGFydGVkIiwiX21vdXNlRGVzdHJveSIsIl9tb3VzZU1vdmVEZWxlZ2F0ZSIsIl9tb3VzZVVwRGVsZWdhdGUiLCJfbW91c2VNb3ZlZCIsIl9tb3VzZVN0YXJ0ZWQiLCJfbW91c2VVcCIsIl9tb3VzZURvd25FdmVudCIsIl9tb3VzZUNhcHR1cmUiLCJtb3VzZURlbGF5TWV0IiwiX21vdXNlRGVsYXlUaW1lciIsIl9tb3VzZURpc3RhbmNlTWV0IiwiX21vdXNlRGVsYXlNZXQiLCJfbW91c2VTdGFydCIsIl9tb3VzZU1vdmUiLCJkb2N1bWVudE1vZGUiLCJpZ25vcmVNaXNzaW5nV2hpY2giLCJfbW91c2VEcmFnIiwiX21vdXNlU3RvcCIsInBsdWdpbiIsInBsdWdpbnMiLCJzYWZlQmx1ciIsIm1vdXNlIiwiYWRkQ2xhc3NlcyIsImF4aXMiLCJjb25uZWN0VG9Tb3J0YWJsZSIsImNvbnRhaW5tZW50IiwiY3Vyc29yQXQiLCJncmlkIiwiaGVscGVyIiwiaWZyYW1lRml4IiwicmVmcmVzaFBvc2l0aW9ucyIsInJldmVydCIsInJldmVydER1cmF0aW9uIiwic2NvcGUiLCJzY3JvbGwiLCJzY3JvbGxTZW5zaXRpdml0eSIsInNjcm9sbFNwZWVkIiwic25hcCIsInNuYXBNb2RlIiwic25hcFRvbGVyYW5jZSIsImRyYWciLCJfc2V0UG9zaXRpb25SZWxhdGl2ZSIsIl9zZXRIYW5kbGVDbGFzc05hbWUiLCJfcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lIiwiZGVzdHJveU9uQ2xlYXIiLCJfZ2V0SGFuZGxlIiwiX2JsdXJBY3RpdmVFbGVtZW50IiwiX2Jsb2NrRnJhbWVzIiwiaWZyYW1lQmxvY2tzIiwiX3VuYmxvY2tGcmFtZXMiLCJfY3JlYXRlSGVscGVyIiwiX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMiLCJkZG1hbmFnZXIiLCJfY2FjaGVNYXJnaW5zIiwiY3NzUG9zaXRpb24iLCJoYXNGaXhlZEFuY2VzdG9yIiwicG9zaXRpb25BYnMiLCJfcmVmcmVzaE9mZnNldHMiLCJvcmlnaW5hbFBvc2l0aW9uIiwiX2dlbmVyYXRlUG9zaXRpb24iLCJvcmlnaW5hbFBhZ2VYIiwib3JpZ2luYWxQYWdlWSIsIl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyIiwiX3NldENvbnRhaW5tZW50IiwiX2NsZWFyIiwiZHJvcEJlaGF2aW91ciIsInByZXBhcmVPZmZzZXRzIiwiZHJhZ1N0YXJ0IiwibWFyZ2lucyIsIl9nZXRQYXJlbnRPZmZzZXQiLCJfZ2V0UmVsYXRpdmVPZmZzZXQiLCJfY29udmVydFBvc2l0aW9uVG8iLCJfdWlIYXNoIiwiZHJvcCIsImRyb3BwZWQiLCJkcmFnU3RvcCIsImhhbmRsZUVsZW1lbnQiLCJoZWxwZXJQcm9wb3J0aW9ucyIsIl9pc1Jvb3ROb2RlIiwicmVsYXRpdmVDb250YWluZXIiLCJjYW5jZWxIZWxwZXJSZW1vdmFsIiwic29ydGFibGVzIiwic29ydGFibGUiLCJpc092ZXIiLCJfc3RvcmVkQ1NTIiwicGxhY2Vob2xkZXIiLCJfaGVscGVyIiwiX2ludGVyc2VjdHNXaXRoIiwiY29udGFpbmVyQ2FjaGUiLCJfcGFyZW50IiwiY3VycmVudEl0ZW0iLCJmcm9tT3V0c2lkZSIsIl9yZXZlcnQiLCJfY3Vyc29yIiwiX29wYWNpdHkiLCJzY3JvbGxQYXJlbnROb3RIaWRkZW4iLCJvdmVyZmxvd09mZnNldCIsInNuYXBFbGVtZW50cyIsInNuYXBwaW5nIiwicmVsZWFzZSIsInNuYXBJdGVtIiwiX3pJbmRleCIsImRyYWdnYWJsZSIsImFsc29SZXNpemUiLCJhbmltYXRlRHVyYXRpb24iLCJhbmltYXRlRWFzaW5nIiwiYXNwZWN0UmF0aW8iLCJhdXRvSGlkZSIsImdob3N0IiwiaGFuZGxlcyIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsInJlc2l6ZSIsIl9udW0iLCJfaXNOdW1iZXIiLCJfYXNwZWN0UmF0aW8iLCJvcmlnaW5hbEVsZW1lbnQiLCJfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyIsInJlc2l6YWJsZSIsImVsZW1lbnRJc1dyYXBwZXIiLCJvcmlnaW5hbFJlc2l6ZVN0eWxlIiwiem9vbSIsIl9wcm9wb3J0aW9uYWxseVJlc2l6ZSIsIl9zZXR1cEhhbmRsZXMiLCJfaGFuZGxlcyIsInJlc2l6aW5nIiwiX3JlbW92ZUhhbmRsZXMiLCJzZSIsInN3IiwibmUiLCJudyIsIl9yZW5kZXJBeGlzIiwiX3JlbmRlclByb3h5Iiwib3JpZ2luYWxTaXplIiwic2l6ZURpZmYiLCJvcmlnaW5hbE1vdXNlUG9zaXRpb24iLCJfcHJvcGFnYXRlIiwiX3VwZGF0ZVByZXZQcm9wZXJ0aWVzIiwiX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzIiwiX3VwZGF0ZVJhdGlvIiwiX3Jlc3BlY3RTaXplIiwiX3VwZGF0ZUNhY2hlIiwiX2FwcGx5Q2hhbmdlcyIsInByZXZQb3NpdGlvbiIsInByZXZTaXplIiwiX3ZCb3VuZGFyaWVzIiwiX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyIsIm91dGVyRGltZW5zaW9ucyIsImVsZW1lbnRPZmZzZXQiLCJjb250YWluZXJFbGVtZW50IiwiY29udGFpbmVyT2Zmc2V0IiwiY29udGFpbmVyUG9zaXRpb24iLCJwYXJlbnREYXRhIiwiY29udGFpbmVyU2l6ZSIsImF1dG9PcGVuIiwiY2xvc2VPbkVzY2FwZSIsIm1vZGFsIiwiYmVmb3JlQ2xvc2UiLCJyZXNpemVTdGFydCIsInJlc2l6ZVN0b3AiLCJzaXplUmVsYXRlZE9wdGlvbnMiLCJyZXNpemFibGVSZWxhdGVkT3B0aW9ucyIsIm9yaWdpbmFsQ3NzIiwib3JpZ2luYWxUaXRsZSIsIl9jcmVhdGVXcmFwcGVyIiwidWlEaWFsb2ciLCJfY3JlYXRlVGl0bGViYXIiLCJfY3JlYXRlQnV0dG9uUGFuZSIsIl9tYWtlRHJhZ2dhYmxlIiwiX21ha2VSZXNpemFibGUiLCJfaXNPcGVuIiwiX3RyYWNrRm9jdXMiLCJfdW50cmFja0luc3RhbmNlIiwiX2Rlc3Ryb3lPdmVybGF5IiwiX2ZvY3VzZWRFbGVtZW50IiwiX2hpZGUiLCJpc09wZW4iLCJtb3ZlVG9Ub3AiLCJfbW92ZVRvVG9wIiwiX2ZvY3VzVGFiYmFibGUiLCJfc2l6ZSIsIl9wb3NpdGlvbiIsIl9jcmVhdGVPdmVybGF5Iiwib3ZlcmxheSIsIl9zaG93IiwiX21ha2VGb2N1c1RhcmdldCIsInVpRGlhbG9nQnV0dG9uUGFuZSIsInVpRGlhbG9nVGl0bGViYXJDbG9zZSIsIl9rZWVwRm9jdXMiLCJ1aURpYWxvZ1RpdGxlYmFyIiwiX3RpdGxlIiwidWlCdXR0b25TZXQiLCJfY3JlYXRlQnV0dG9ucyIsIl9taW5IZWlnaHQiLCJfdHJhY2tpbmdJbnN0YW5jZXMiLCJfYWxsb3dJbnRlcmFjdGlvbiIsImRpYWxvZyIsImRpYWxvZ0NsYXNzIiwiYWNjZXB0IiwiZ3JlZWR5IiwidG9sZXJhbmNlIiwiZGVhY3RpdmF0ZSIsIm91dCIsIm92ZXIiLCJpc292ZXIiLCJpc291dCIsInByb3BvcnRpb25zIiwiX2FkZFRvTWFuYWdlciIsImRyb3BwYWJsZXMiLCJfc3BsaWNlIiwiX2FkZEFjdGl2ZUNsYXNzIiwiX2RlYWN0aXZhdGUiLCJfcmVtb3ZlQWN0aXZlQ2xhc3MiLCJfb3ZlciIsIl9hZGRIb3ZlckNsYXNzIiwiX291dCIsIl9yZW1vdmVIb3ZlckNsYXNzIiwiX2Ryb3AiLCJkcm9wcGFibGUiLCJpbnRlcnNlY3QiLCJhYnNvbHV0ZSIsImdyZWVkeUNoaWxkIiwiaG92ZXJDbGFzcyIsImFjdGl2ZUNsYXNzIiwib2xkVmFsdWUiLCJfY29uc3RyYWluZWRWYWx1ZSIsInZhbHVlRGl2IiwiX3JlZnJlc2hWYWx1ZSIsImluZGV0ZXJtaW5hdGUiLCJfcGVyY2VudGFnZSIsInRvRml4ZWQiLCJvdmVybGF5RGl2IiwiYXV0b1JlZnJlc2giLCJzZWxlY3RpbmciLCJ1bnNlbGVjdGVkIiwidW5zZWxlY3RpbmciLCJkcmFnZ2VkIiwiZWxlbWVudFBvcyIsInNlbGVjdGVlcyIsIiRlbGVtZW50Iiwic3RhcnRzZWxlY3RlZCIsIm9wb3MiLCJpZHMiLCJfZHJhd0J1dHRvbiIsIl9kcmF3TWVudSIsIl9yZW5kZXJlZCIsIm1lbnVJdGVtcyIsIl9wYXJzZU9wdGlvbiIsImJ1dHRvbkl0ZW0iLCJfcmVuZGVyQnV0dG9uSXRlbSIsIl9yZXNpemVCdXR0b24iLCJfYnV0dG9uRXZlbnRzIiwiX3JlZnJlc2hNZW51IiwibWVudVdyYXAiLCJtZW51SW5zdGFuY2UiLCJfc2V0U2VsZWN0aW9uIiwiX3NlbGVjdCIsImZvY3VzSW5kZXgiLCJfZ2V0U2VsZWN0ZWRJdGVtIiwiX3BhcnNlT3B0aW9ucyIsIl9zZXRBcmlhIiwiX3RvZ2dsZUF0dHIiLCJfZG9jdW1lbnRDbGljayIsInJhbmdlIiwibWVudVdpZGdldCIsIl9zZXRUZXh0IiwiZ2V0U2VsZWN0aW9uIiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZVJhbmdlIiwiX3NlbGVjdEZvY3VzZWRJdGVtIiwib3JpZW50YXRpb24iLCJzbGlkZSIsIm51bVBhZ2VzIiwiX2tleVNsaWRpbmciLCJfbW91c2VTbGlkaW5nIiwiX2FuaW1hdGVPZmYiLCJfaGFuZGxlSW5kZXgiLCJfZGV0ZWN0T3JpZW50YXRpb24iLCJfY2FsY3VsYXRlTmV3TWF4IiwiX2NyZWF0ZVJhbmdlIiwiX2NyZWF0ZUhhbmRsZXMiLCJfdmFsdWVNaW4iLCJfaGFuZGxlRXZlbnRzIiwiZWxlbWVudFNpemUiLCJfbm9ybVZhbHVlRnJvbU1vdXNlIiwiX3ZhbHVlTWF4IiwiX2xhc3RDaGFuZ2VkVmFsdWUiLCJfc3RhcnQiLCJfY2xpY2tPZmZzZXQiLCJfc2xpZGUiLCJfc3RvcCIsIl90cmltQWxpZ25WYWx1ZSIsImhhbmRsZUluZGV4IiwiX2hhc011bHRpcGxlVmFsdWVzIiwiX3ZhbHVlcyIsIl9yZWZyZXNoUmFuZ2UiLCJfcHJlY2lzaW9uIiwiX3ByZWNpc2lvbk9mIiwiY29ubmVjdFdpdGgiLCJkcm9wT25FbXB0eSIsImZvcmNlUGxhY2Vob2xkZXJTaXplIiwiZm9yY2VIZWxwZXJTaXplIiwiYmVmb3JlU3RvcCIsInJlY2VpdmUiLCJ1cGRhdGUiLCJfaXNPdmVyQXhpcyIsIl9pc0Zsb2F0aW5nIiwiaW5zdGFuY2UiLCJyZXZlcnRpbmciLCJfcmVmcmVzaEl0ZW1zIiwiX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zIiwiY3VycmVudENvbnRhaW5lciIsImRvbVBvc2l0aW9uIiwiX2NyZWF0ZVBsYWNlaG9sZGVyIiwic3RvcmVkQ3Vyc29yIiwic3RvcmVkU3R5bGVzaGVldCIsIl9zdG9yZWRPcGFjaXR5IiwiX3N0b3JlZFpJbmRleCIsIl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zIiwiY29udGFpbmVycyIsImRyYWdnaW5nIiwibGFzdFBvc2l0aW9uQWJzIiwiX2ludGVyc2VjdHNXaXRoUG9pbnRlciIsIl9pbnRlcnNlY3RzV2l0aFNpZGVzIiwiX3JlYXJyYW5nZSIsIl9jb250YWN0Q29udGFpbmVycyIsIl9ub0ZpbmFsU29ydCIsIl9nZXRJdGVtc0FzalF1ZXJ5IiwiY29ubmVjdGVkIiwiYXR0cmlidXRlIiwiZXhwcmVzc2lvbiIsImZvcmNlUG9pbnRlckZvckNvbnRhaW5lcnMiLCJmbG9hdGluZyIsIl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24iLCJfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24iLCJfY29ubmVjdFdpdGgiLCJ0b2xlcmFuY2VFbGVtZW50IiwiY3VzdG9tIiwicmVmcmVzaENvbnRhaW5lcnMiLCJfY3JlYXRlVHJQbGFjZWhvbGRlciIsImNvdW50ZXIiLCJzZW5kZXIiLCJjdWx0dXJlIiwiaW5jcmVtZW50YWwiLCJudW1iZXJGb3JtYXQiLCJwYWdlIiwic3BpbiIsIl9kcmF3IiwiX2V2ZW50cyIsIm1vdXNld2hlZWwiLCJzcGlubmluZyIsIl9zcGluIiwibW91c2V3aGVlbFRpbWVyIiwiX3JlcGVhdCIsInVpU3Bpbm5lciIsIl9hZGp1c3RWYWx1ZSIsIl9pbmNyZW1lbnQiLCJfcGFyc2UiLCJfZm9ybWF0IiwiR2xvYmFsaXplIiwiZm9ybWF0IiwiaXNWYWxpZCIsInN0ZXBVcCIsIl9zdGVwVXAiLCJzdGVwRG93biIsIl9zdGVwRG93biIsInBhZ2VVcCIsInBhZ2VEb3duIiwiX3VpU3Bpbm5lckh0bWwiLCJfYnV0dG9uSHRtbCIsImJlZm9yZUxvYWQiLCJfaXNMb2NhbCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJ1bm5pbmciLCJfcHJvY2Vzc1RhYnMiLCJfaW5pdGlhbEFjdGl2ZSIsInRhYnMiLCJhbmNob3JzIiwidGFiIiwiX2dldFBhbmVsRm9yVGFiIiwiX3RhYktleWRvd24iLCJfaGFuZGxlUGFnZU5hdiIsImFjdGl2YXRpbmciLCJfZm9jdXNOZXh0VGFiIiwiX3BhbmVsS2V5ZG93biIsIl9maW5kTmV4dFRhYiIsIl9zZXR1cEhlaWdodFN0eWxlIiwiX3Nhbml0aXplU2VsZWN0b3IiLCJ0YWJsaXN0IiwiX2dldExpc3QiLCJfY3JlYXRlUGFuZWwiLCJvbGRUYWIiLCJuZXdUYWIiLCJfZ2V0SW5kZXgiLCJfYWpheFNldHRpbmdzIiwidHJhY2siLCJfYWRkRGVzY3JpYmVkQnkiLCJfcmVtb3ZlRGVzY3JpYmVkQnkiLCJtb3VzZW92ZXIiLCJ0b29sdGlwcyIsImRpc2FibGVkVGl0bGVzIiwiX3VwZGF0ZUNvbnRlbnQiLCJfZGlzYWJsZSIsIl9lbmFibGUiLCJfcmVnaXN0ZXJDbG9zZUhhbmRsZXJzIiwiX2ZpbmQiLCJ0b29sdGlwIiwiX3Rvb2x0aXAiLCJtb3VzZW1vdmUiLCJkZWxheWVkU2hvdyIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl9yZW1vdmVUb29sdGlwIiwiY2xvc2luZyIsImhpZGluZyIsInRvb2x0aXBDbGFzcyIsInZhbGlkYXRlIiwiZGVidWciLCJ2YWxpZGF0b3IiLCJvbnN1Ym1pdCIsInN1Ym1pdEJ1dHRvbiIsImNhbmNlbFN1Ym1pdCIsInN1Ym1pdEhhbmRsZXIiLCJmb3JtU3VibWl0dGVkIiwiY3VycmVudEZvcm0iLCJwZW5kaW5nUmVxdWVzdCIsImZvY3VzSW52YWxpZCIsInZhbGlkIiwiZXJyb3JMaXN0IiwicnVsZXMiLCJjb21tYW5kIiwiaXNDb250ZW50RWRpdGFibGUiLCJzdGF0aWNSdWxlcyIsImV4aXN0aW5nUnVsZXMiLCJmaWx0ZXJlZCIsIm5vcm1hbGl6ZVJ1bGUiLCJub3JtYWxpemVSdWxlcyIsImNsYXNzUnVsZXMiLCJhdHRyaWJ1dGVSdWxlcyIsImRhdGFSdWxlcyIsInJlcXVpcmVkIiwicmVtb3RlIiwiYmxhbmsiLCJmaWxsZWQiLCJ1bmNoZWNrZWQiLCJkZWZhdWx0cyIsImVycm9yQ2xhc3MiLCJwZW5kaW5nQ2xhc3MiLCJ2YWxpZENsYXNzIiwiZXJyb3JFbGVtZW50IiwiZm9jdXNDbGVhbnVwIiwiZXJyb3JDb250YWluZXIiLCJlcnJvckxhYmVsQ29udGFpbmVyIiwiaWdub3JlIiwiaWdub3JlVGl0bGUiLCJvbmZvY3VzaW4iLCJsYXN0QWN0aXZlIiwidW5oaWdobGlnaHQiLCJoaWRlVGhlc2UiLCJlcnJvcnNGb3IiLCJvbmZvY3Vzb3V0IiwiY2hlY2thYmxlIiwic3VibWl0dGVkIiwib3B0aW9uYWwiLCJvbmtleXVwIiwiZXhjbHVkZWRLZXlzIiwiZWxlbWVudFZhbHVlIiwiaW52YWxpZCIsIm9uY2xpY2siLCJoaWdobGlnaHQiLCJmaW5kQnlOYW1lIiwiZW1haWwiLCJkYXRlIiwiZGF0ZUlTTyIsIm51bWJlciIsImRpZ2l0cyIsImVxdWFsVG8iLCJtYXhsZW5ndGgiLCJtaW5sZW5ndGgiLCJyYW5nZWxlbmd0aCIsImF1dG9DcmVhdGVSYW5nZXMiLCJsYWJlbENvbnRhaW5lciIsImVycm9yQ29udGV4dCIsInZhbHVlQ2FjaGUiLCJldmVudFR5cGUiLCJpbnZhbGlkSGFuZGxlciIsImNoZWNrRm9ybSIsImVycm9yTWFwIiwic2hvd0Vycm9ycyIsInByZXBhcmVGb3JtIiwiY3VycmVudEVsZW1lbnRzIiwiY2xlYW5FbGVtZW50IiwiY2xlYW4iLCJjaGVja0VsZW1lbnQiLCJ2YWxpZGF0aW9uVGFyZ2V0Rm9yIiwicnMiLCJncm91cCIsInByZXBhcmVFbGVtZW50IiwidGVzdGdyb3VwIiwibnVtYmVyT2ZJbnZhbGlkcyIsInRvSGlkZSIsImVycm9ycyIsInN1Y2Nlc3NMaXN0IiwiZGVmYXVsdFNob3dFcnJvcnMiLCJyZXNldEZvcm0iLCJoaWRlRXJyb3JzIiwicmVzZXRFbGVtZW50cyIsIm9iamVjdExlbmd0aCIsImFkZFdyYXBwZXIiLCJmaW5kTGFzdEFjdGl2ZSIsInJ1bGVzQ2FjaGUiLCJyZXNldEludGVybmFscyIsInRvU2hvdyIsInZhbGlkaXR5IiwiYmFkSW5wdXQiLCJsYXN0SW5kZXhPZiIsInJ1bGVzQ291bnQiLCJkZXBlbmRlbmN5TWlzbWF0Y2giLCJydWxlIiwibm9ybWFsaXplciIsInBhcmFtZXRlcnMiLCJtZXRob2RzIiwiZm9ybWF0QW5kQWRkIiwibG9nIiwiY3VzdG9tRGF0YU1lc3NhZ2UiLCJjdXN0b21NZXNzYWdlIiwiZmluZERlZmluZWQiLCJkZWZhdWx0TWVzc2FnZSIsInRoZXJlZ2V4IiwidG9Ub2dnbGUiLCJ3cmFwcGVyIiwidmFsaWRFbGVtZW50cyIsImludmFsaWRFbGVtZW50cyIsInBsYWNlIiwiZXJyb3JJRCIsImVsZW1lbnRJRCIsImlkT3JOYW1lIiwiZGVzY3JpYmVkQnkiLCJlcnJvclBsYWNlbWVudCIsImVzY2FwZUNzc01ldGEiLCJkZXNjcmliZXIiLCJnZXRMZW5ndGgiLCJkZXBlbmQiLCJkZXBlbmRUeXBlcyIsInN0YXJ0UmVxdWVzdCIsInN0b3BSZXF1ZXN0IiwicHJldmlvdXNWYWx1ZSIsImNsYXNzUnVsZVNldHRpbmdzIiwiY3JlZGl0Y2FyZCIsImFkZENsYXNzUnVsZXMiLCJub3JtYWxpemVBdHRyaWJ1dGVSdWxlIiwiTnVtYmVyIiwiZGVwZW5kcyIsImtlZXBSdWxlIiwicGFyYW1ldGVyIiwidHJhbnNmb3JtZWQiLCJhZGRNZXRob2QiLCJjYWxsZWQiLCJlcnJvck1lc3NhZ2UiLCJzdXBwb3J0ZWRUeXBlcyIsIm5vdFN1cHBvcnRlZCIsImRlY2ltYWxQbGFjZXMiLCJ0b0ludCIsImRlY2ltYWxzIiwib3B0aW9uRGF0YVN0cmluZyIsIm9yaWdpbmFsTWVzc2FnZSIsInBvcnQiLCJwZW5kaW5nUmVxdWVzdHMiLCJjaGVja3N1bSIsInR5cGVQYXJhbSIsIm9wdGlvbmFsVmFsdWUiLCJyZWdleCIsImZpbGVzIiwic3RyaXBIdG1sIiwidmFsdWVTdHJpcHBlZCIsImFjY291bnQiLCJzdW0iLCJmYWN0b3IiLCJkaWdpdCIsImJhbmthY2NvdW50TkwiLCJnaXJvYWNjb3VudE5MIiwiY2lmUmVnRXgiLCJjb250cm9sIiwiYWxsX3N1bSIsImV2ZW5fc3VtIiwib2RkX3N1bSIsImNvbnRyb2xfZGlnaXQiLCJjb250cm9sX2xldHRlciIsImlzT2RkIiwiZHNjIiwiZmlyc3RDaGFyIiwiZmlyc3RDTiIsInNlY29uZENOIiwidGFtYW5obyIsIm51bWVyb3MiLCJkaWdpdG9zIiwic29tYSIsInJlc3VsdGFkbyIsImlsIiwiY2hlY2tSZXN1bHQiLCJjbiIsIm5DaGVjayIsIm5EaWdpdCIsImJFdmVuIiwiY0RpZ2l0IiwidmFsaWRUeXBlcyIsIm1hc3RlcmNhcmQiLCJ2aXNhIiwiYW1leCIsImRpbmVyc2NsdWIiLCJlbnJvdXRlIiwiZGlzY292ZXIiLCJqY2IiLCJ1bmtub3duIiwiaXNQYXJhbVN0cmluZyIsInN5bWJvbCIsInNvZnQiLCJhZGF0YSIsImdnIiwibW0iLCJhYWFhIiwieGRhdGEiLCJVVEMiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImliYW4iLCJpYmFuY2hlY2tkaWdpdHMiLCJsZWFkaW5nWmVyb2VzIiwiY1Jlc3QiLCJjT3BlcmF0b3IiLCJjb3VudHJ5Y29kZSIsImliYW5jaGVjayIsImNDaGFyIiwiYmJhbnBhdHRlcm4iLCJiYmFuY291bnRyeXBhdHRlcm5zIiwiaWJhbnJlZ2V4cCIsIm1pbmltYWxJQkFObGVuZ3RoIiwidG90YWxTaXplIiwicGhvbmVfbnVtYmVyIiwicnVQaG9uZV9udW1iZXIiLCJuaWVSZWdFeCIsInZhbGlkQ2hhcnMiLCJhcnJTdGVwcyIsImludFN1bSIsImludDIiLCJpbnRDb250cm9sTnIiLCJkdiIsIm11bHRpcGxpZXIiLCJyZWdleHAiLCJjZXBfdmFsdWUiLCIkZmllbGRzIiwiJGZpZWxkc0ZpcnN0IiwibnVtYmVyRmlsbGVkIiwiaXNEZWZhdWx0IiwiY2FzZVNlbnNpdGl2ZSIsImluY2x1ZGVUZXJyaXRvcmllcyIsImluY2x1ZGVNaWxpdGFyeSIsIkxMIiwiVkwiLCJGTCIsImNkIiwiY2R2IiwiZXh0ZW5zaW9uIiwiaXB2NCIsImlwdjYiLCJyZXF1aXJlX2Zyb21fZ3JvdXAiLCJsZXR0ZXJzb25seSIsIm5vd2hpdGVzcGFjZSIsIm1pbldvcmRzIiwibWF4V29yZHMiLCJub3RFcXVhbFRvIiwiaW50ZWdlciIsInJhbmdlV29yZHMiLCJhbHBoYW51bWVyaWMiLCJiYW5rb3JnaXJvYWNjb3VudE5MIiwiYmljIiwiY2lmRVMiLCJjcGZCUiIsImNyZWRpdGNhcmR0eXBlcyIsImN1cnJlbmN5IiwibGV0dGVyc3dpdGhiYXNpY3B1bmMiLCJtb2JpbGVOTCIsIm1vYmlsZVVLIiwibmV0bWFzayIsIm5pZUVTIiwibmlmRVMiLCJuaXBQTCIsInBob25lTkwiLCJwaG9uZXNVSyIsInBob25lVUsiLCJwaG9uZVVTIiwicG9zdGFsY29kZUJSIiwicG9zdGFsQ29kZUNBIiwicG9zdGFsY29kZUlUIiwicG9zdGFsY29kZU5MIiwicG9zdGNvZGVVSyIsInNraXBfb3JfZmlsbF9taW5pbXVtIiwic3RhdGVVUyIsInN0cmlwcGVkbWlubGVuZ3RoIiwidGltZTEyaCIsInZpblVTIiwiemlwY29kZVVTIiwiemlwcmFuZ2UiLCJkYXRlRkEiLCJkYXRlSVRBIiwiZW1haWwyIiwidXJsMiIsImRhdGVOTCIsInBob25lUEwiLCJuaXNCUiIsImNuaEJSIiwiY25wakJSIiwiaW5mbyIsInN0dWZmIiwiZmFuY3lib3giLCJjbG9zZUV4aXN0aW5nIiwibG9vcCIsImd1dHRlciIsImtleWJvYXJkIiwicHJldmVudENhcHRpb25PdmVybGFwIiwiYXJyb3dzIiwiaW5mb2JhciIsInNtYWxsQnRuIiwidG9vbGJhciIsImlkbGVUaW1lIiwicHJvdGVjdCIsInByZWxvYWQiLCJpZnJhbWUiLCJ0cGwiLCJzY3JvbGxpbmciLCJ2aWRlbyIsImF1dG9TdGFydCIsImRlZmF1bHRUeXBlIiwiYW5pbWF0aW9uRWZmZWN0IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJ6b29tT3BhY2l0eSIsInRyYW5zaXRpb25FZmZlY3QiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJzbGlkZUNsYXNzIiwiYmFzZUNsYXNzIiwiYmFzZVRwbCIsInNwaW5uZXJUcGwiLCJlcnJvclRwbCIsImJ0blRwbCIsImRvd25sb2FkIiwiYXJyb3dMZWZ0IiwiYXJyb3dSaWdodCIsInBhcmVudEVsIiwiaGlkZVNjcm9sbGJhciIsImJhY2tGb2N1cyIsInRyYXBGb2N1cyIsImZ1bGxTY3JlZW4iLCJ0b3VjaCIsIm1vbWVudHVtIiwibWVkaWEiLCJzbGlkZVNob3ciLCJ0aHVtYnMiLCJoaWRlT25DbG9zZSIsIndoZWVsIiwib25Jbml0IiwiYWZ0ZXJMb2FkIiwiYWZ0ZXJTaG93IiwiYWZ0ZXJDbG9zZSIsIm9uQWN0aXZhdGUiLCJvbkRlYWN0aXZhdGUiLCJjbGlja0NvbnRlbnQiLCJjbGlja1NsaWRlIiwiY2xpY2tPdXRzaWRlIiwiZGJsY2xpY2tDb250ZW50IiwiZGJsY2xpY2tTbGlkZSIsImRibGNsaWNrT3V0c2lkZSIsIm1vYmlsZSIsImkxOG4iLCJDTE9TRSIsIk5FWFQiLCJQUkVWIiwiRVJST1IiLCJQTEFZX1NUQVJUIiwiUExBWV9TVE9QIiwiRlVMTF9TQ1JFRU4iLCJUSFVNQlMiLCJET1dOTE9BRCIsIlNIQVJFIiwiWk9PTSIsImRlIiwiJFciLCIkRCIsImlzUXVlcnkiLCJyZXF1ZXN0QUZyYW1lIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib1JlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFGcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwid2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJtb3pDYW5jZWxBbmltYXRpb25GcmFtZSIsIm9DYW5jZWxBbmltYXRpb25GcmFtZSIsInRyYW5zaXRpb25FbmQiLCJ0cmFuc2l0aW9ucyIsIk9UcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIldlYmtpdFRyYW5zaXRpb24iLCJmb3JjZVJlZHJhdyIsIiRlbCIsIm1lcmdlT3B0cyIsIm9wdHMxIiwib3B0czIiLCJyZXoiLCJpblZpZXdwb3J0IiwiZWxlbUNlbnRlciIsImVsZW1lbnRGcm9tUG9pbnQiLCJGYW5jeUJveCIsImlzTW9iaWxlIiwiY3VyckluZGV4IiwicHJldkluZGV4IiwicHJldlBvcyIsImN1cnJQb3MiLCJmaXJzdFJ1biIsInNsaWRlcyIsImFkZENvbnRlbnQiLCJmaXJzdEl0ZW0iLCJmaXJzdEl0ZW1PcHRzIiwiJGNvbnRhaW5lciIsImJ1dHRvblN0ciIsImdldEluc3RhbmNlIiwidHJhbnNsYXRlIiwiJHJlZnMiLCJmb3JFYWNoIiwianVtcFRvIiwic3RyIiwiJGl0ZW0iLCJmb3VuZCIsInNyY1BhcnRzIiwiJG9yaWciLCIkdGh1bWIiLCIkdHJpZ2dlciIsInRodW1iIiwidXBkYXRlQ29udHJvbHMiLCJUaHVtYnMiLCJpc0FjdGl2ZSIsImFkZEV2ZW50cyIsInJlbW92ZUV2ZW50cyIsImlzU2NhbGVkRG93biIsInJlcXVlc3RJZCIsInN0YWdlIiwia2V5Y29kZSIsImlkbGVTZWNvbmRzQ291bnRlciIsImlzSWRsZSIsInNob3dDb250cm9scyIsImlkbGVJbnRlcnZhbCIsImlzRHJhZ2dpbmciLCJoaWRlQ29udHJvbHMiLCJncm91cExlbiIsImlzTW92ZWQiLCJzbGlkZVBvcyIsInN0YWdlUG9zIiwiaXNDbG9zaW5nIiwiaXNBbmltYXRpbmciLCJjcmVhdGVTbGlkZSIsImZvcmNlZER1cmF0aW9uIiwiJHNsaWRlIiwibG9hZFNsaWRlIiwiZ2V0VHJhbnNsYXRlIiwiaXNDb21wbGV0ZSIsImxlZnRQb3MiLCJzZXRUcmFuc2xhdGUiLCJ0cmFuc2Zvcm0iLCJpc0xvYWRlZCIsInJldmVhbENvbnRlbnQiLCJ1cGRhdGVTbGlkZSIsInNjYWxlVG9BY3R1YWwiLCIkY29udGVudCIsImNhbnZhc1dpZHRoIiwiY2FudmFzSGVpZ2h0IiwibmV3SW1nV2lkdGgiLCJuZXdJbWdIZWlnaHQiLCJpbWdQb3MiLCJwb3NYIiwicG9zWSIsInNjYWxlWCIsInNjYWxlWSIsImhhc0Vycm9yIiwidXBkYXRlQ3Vyc29yIiwiU2xpZGVTaG93Iiwic2NhbGVUb0ZpdCIsImdldEZpdFBvcyIsIm1pblJhdGlvIiwicmF0aW8iLCJhZGp1c3RDYXB0aW9uIiwiYWRqdXN0TGF5b3V0IiwibmF2aWdhdGlvbiIsImNlbnRlclNsaWRlIiwibmV4dFdpZHRoIiwibmV4dEhlaWdodCIsImNhblBhbiIsImlzWm9vbWFibGUiLCJHdWVzdHVyZXMiLCJmaXRQb3MiLCJhamF4TG9hZCIsImlzTG9hZGluZyIsInNldEltYWdlIiwic2V0SWZyYW1lIiwic2V0Q29udGVudCIsInZpZGVvRm9ybWF0Iiwic2V0RXJyb3IiLCJzaG93TG9hZGluZyIsInRleHRTdGF0dXMiLCIkaW1nIiwiJGltYWdlIiwiY2hlY2tTcmNzZXQiLCIkZ2hvc3QiLCJzZXRCaWdJbWFnZSIsInNyY3NldCIsInB4UmF0aW8iLCJ3aW5kb3dXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJwb3N0Zml4IiwiaW1nIiwic2l6ZXMiLCJyZXNvbHZlSW1hZ2VTbGlkZVNpemUiLCJuYXR1cmFsV2lkdGgiLCJuYXR1cmFsSGVpZ2h0IiwiaGlkZUxvYWRpbmciLCJpbWdXaWR0aCIsImltZ0hlaWdodCIsIiRpZnJhbWUiLCJmcmFtZVdpZHRoIiwiZnJhbWVIZWlnaHQiLCIkY29udGVudHMiLCIkYm9keSIsImlzUmV2ZWFsZWQiLCIkcGxhY2Vob2xkZXIiLCIkc21hbGxCdG4iLCIkc3Bpbm5lciIsInByZXZlbnRPdmVybGFwIiwiJGNhcHRpb24iLCIkY2xvbmUiLCJjYXB0aW9uSCIsImlubGluZVBhZGRpbmciLCJhY3R1YWxQYWRkaW5nIiwiZGlzYWJsZUxheW91dEZpeCIsImVmZmVjdENsYXNzTmFtZSIsImdldFRodW1iUG9zIiwidGh1bWJQb3MiLCJidHciLCJicnciLCJiYnciLCJibHciLCJEb2N1bWVudCIsImV4aXRGdWxsc2NyZWVuIiwid2Via2l0RXhpdEZ1bGxzY3JlZW4iLCJmb2N1c2FibGVTdHIiLCJmb2N1c2FibGVJdGVtcyIsImZvY3VzZWRJdGVtSW5kZXgiLCJpc1Zpc2libGUiLCJkb21SZWN0IiwiJGZvY3VzIiwic2Nyb2xsWCIsInNjcm9sbFkiLCJoYXNIaWRkZW5Db250cm9scyIsImFuZENhcHRpb24iLCJ0b2dnbGVDb250cm9scyIsInVzZTNkIiwibGVhdmVBbmltYXRpb25OYW1lIiwicHJvcGVydHlOYW1lIiwiY2FsbENhbGxiYWNrIiwiX3J1biIsIiR0YXJnZXQiLCJmb2N1c1N0ciIsIiRwcmVzc2VkIiwieW91dHViZSIsImF1dG9wbGF5IiwiYXV0b2hpZGUiLCJmcyIsInJlbCIsImhkIiwid21vZGUiLCJlbmFibGVqc2FwaSIsImh0bWw1IiwicGFyYW1QbGFjZSIsInZpbWVvIiwic2hvd190aXRsZSIsInNob3dfYnlsaW5lIiwic2hvd19wb3J0cmFpdCIsImZ1bGxzY3JlZW4iLCJpbnN0YWdyYW0iLCJnbWFwX3BsYWNlIiwiZ21hcF9zZWFyY2giLCJ1cmxQYXJhbXMiLCJwYXJhbU9iaiIsInByb3ZpZGVyIiwicHJvdmlkZXJOYW1lIiwicHJvdmlkZXJPcHRzIiwicDEiLCJvcmlnU3JjIiwiY29udGVudFNvdXJjZSIsIlZpZGVvQVBJTG9hZGVyIiwibG9hZGluZyIsImxvYWRlZCIsInZlbmRvciIsIl90aGlzIiwib25Zb3VUdWJlSWZyYW1lQVBJUmVhZHkiLCJwbGF5ZXIiLCJZVCIsIlBsYXllciIsIm9uU3RhdGVDaGFuZ2UiLCJWaW1lbyIsImdldFBvaW50ZXJYWSIsInBvaW50MiIsInBvaW50MSIsImlzQ2xpY2thYmxlIiwiYXR0cyIsImhhc1Njcm9sbGJhcnMiLCJpc1Njcm9sbGFibGUiLCIkYmciLCJiZyIsIiRzdGFnZSIsInRhcHBlZCIsIm9udG91Y2hzdGFydCIsImlzVG91Y2hEZXZpY2UiLCJyZWFsUG9pbnRzIiwic3RhcnRQb2ludHMiLCJzdGFydEV2ZW50IiwiY2FuVGFwIiwiaXNQYW5uaW5nIiwiaXNTd2lwaW5nIiwiaXNab29taW5nIiwiaXNTY3JvbGxpbmciLCJkaXN0YW5jZVgiLCJkaXN0YW5jZVkiLCJjb250ZW50TGFzdFBvcyIsImNvbnRlbnRTdGFydFBvcyIsInNsaWRlclN0YXJ0UG9zIiwib25zY3JvbGwiLCJjZW50ZXJQb2ludFN0YXJ0WCIsImNlbnRlclBvaW50U3RhcnRZIiwicGVyY2VudGFnZU9mSW1hZ2VBdFBpbmNoUG9pbnRYIiwicGVyY2VudGFnZU9mSW1hZ2VBdFBpbmNoUG9pbnRZIiwic3RhcnREaXN0YW5jZUJldHdlZW5GaW5nZXJzIiwib250b3VjaG1vdmUiLCJvbnRvdWNoZW5kIiwibmV3UG9pbnRzIiwib25Td2lwZSIsIm9uUGFuIiwib25ab29tIiwic3dpcGluZyIsImFuZ2xlIiwiYXRhbjIiLCJzbGlkZXJMYXN0UG9zIiwibGltaXRNb3ZlbWVudCIsImN1cnJlbnRPZmZzZXRYIiwiY3VycmVudE9mZnNldFkiLCJjdXJyZW50V2lkdGgiLCJjdXJyZW50SGVpZ2h0IiwibWluVHJhbnNsYXRlWCIsIm1pblRyYW5zbGF0ZVkiLCJtYXhUcmFuc2xhdGVYIiwibWF4VHJhbnNsYXRlWSIsIm5ld09mZnNldFgiLCJuZXdPZmZzZXRZIiwibGltaXRQb3NpdGlvbiIsIm5ld1dpZHRoIiwibmV3SGVpZ2h0IiwiZW5kRGlzdGFuY2VCZXR3ZWVuRmluZ2VycyIsInBpbmNoUmF0aW8iLCJ0cmFuc2xhdGVGcm9tWm9vbWluZ1giLCJ0cmFuc2xhdGVGcm9tWm9vbWluZ1kiLCJjZW50ZXJQb2ludEVuZFgiLCJjZW50ZXJQb2ludEVuZFkiLCJ0cmFuc2xhdGVGcm9tVHJhbnNsYXRpbmdYIiwidHJhbnNsYXRlRnJvbVRyYW5zbGF0aW5nWSIsIm5ld1BvcyIsInBhbm5pbmciLCJ6b29taW5nIiwiZW5kUG9pbnRzIiwiZE1zIiwib25UYXAiLCJ2ZWxvY2l0eVgiLCJ2ZWxvY2l0eVkiLCJlbmRQYW5uaW5nIiwiZW5kWm9vbWluZyIsImVuZFN3aXBpbmciLCJjYW5BZHZhbmNlIiwic3BlZWRYIiwidGFwWCIsInRhcFkiLCJ3aGVyZSIsImFjdGlvbiIsIiRidXR0b24iLCIkcHJvZ3Jlc3MiLCJpbm5lciIsImZvcmNlIiwiY2xlYXIiLCJmbk1hcCIsIkZ1bGxTY3JlZW4iLCJyZXF1ZXN0IiwicmVxdWVzdEZ1bGxzY3JlZW4iLCJBTExPV19LRVlCT0FSRF9JTlBVVCIsImV4aXQiLCJpc0Z1bGxzY3JlZW4iLCJCb29sZWFuIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJlbmFibGVkIiwiZnVsbHNjcmVlbkVuYWJsZWQiLCJmdWxsc2NyZWVuY2hhbmdlIiwiQ0xBU1MiLCJDTEFTU19BQ1RJVkUiLCJGYW5jeVRodW1icyIsIiRncmlkIiwiJGxpc3QiLCJzaGFyZSIsImN1cnJlbnRIYXNoIiwiZXNjYXBlSHRtbCIsImVudGl0eU1hcCIsInNoYXJlSW5zdGFuY2UiLCJzaGFyZUN1cnJlbnQiLCJwYXJzZVVybCIsImdhbGxlcnkiLCJ0cmlnZ2VyRnJvbVVybCIsImdldEdhbGxlcnlJRCIsIm9yaWdIYXNoIiwiaGFzaFRpbWVyIiwiaGlzdG9yeSIsInBhdGhuYW1lIiwiaGFzQ3JlYXRlZEhpc3RvcnkiLCJiYWNrIiwicmVwbGFjZVN0YXRlIiwiZmIiLCJwcmV2VGltZSIsImN1cnJUaW1lIiwiZGVsdGFZIiwiZGVsdGFYIiwid2hlZWxEZWx0YSIsIlplcHRvIiwiZmVhdHVyZSIsImZpbGVhcGkiLCJmb3JtZGF0YSIsIkZvcm1EYXRhIiwiaGFzUHJvcCIsImF0dHIyIiwiYWpheFN1Ym1pdCIsIiRmb3JtIiwiaWZyYW1lU3JjIiwidmV0byIsImJlZm9yZVNlcmlhbGl6ZSIsInF4IiwiZm9ybVRvQXJyYXkiLCJzZW1hbnRpYyIsImV4dHJhRGF0YSIsImJlZm9yZVN1Ym1pdCIsImNhbGxiYWNrcyIsImNsZWFyRm9ybSIsImluY2x1ZGVIaWRkZW4iLCJvbGRTdWNjZXNzIiwicmVwbGFjZVRhcmdldCIsIm9sZEVycm9yIiwib2xkQ29tcGxldGUiLCJmaWxlSW5wdXRzIiwiaGFzRmlsZUlucHV0cyIsIm1wIiwibXVsdGlwYXJ0IiwiZmlsZUFQSSIsInNob3VsZFVzZUZyYW1lIiwianF4aHIiLCJjbG9zZUtlZXBBbGl2ZSIsImZpbGVVcGxvYWRJZnJhbWUiLCJmaWxlVXBsb2FkWGhyIiwiZGVlcFNlcmlhbGl6ZSIsInNlcmlhbGl6ZWQiLCJwYXJ0Iiwic2VyaWFsaXplZERhdGEiLCJ1cGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsImZvcm1EYXRhIiwiJGlvIiwiaW8iLCJzdWIiLCJ0aW1lZE91dCIsInRpbWVvdXRIYW5kbGUiLCJpZnJhbWVUYXJnZXQiLCJhYm9ydGVkIiwicmVzcG9uc2VYTUwiLCJjb250ZW50V2luZG93IiwiZXhlY0NvbW1hbmQiLCJjbGsiLCJjbGtfeCIsImNsa195IiwiQ0xJRU5UX1RJTUVPVVRfQUJPUlQiLCJTRVJWRVJfQUJPUlQiLCJnZXREb2MiLCJmcmFtZSIsImNzcmZfdG9rZW4iLCJjc3JmX3BhcmFtIiwiZG9TdWJtaXQiLCJza2lwRW5jb2RpbmdPdmVycmlkZSIsImVuY29kaW5nIiwiZW5jdHlwZSIsImNiIiwiY2hlY2tTdGF0ZSIsImV4dHJhSW5wdXRzIiwic3VibWl0Rm4iLCJmb3JjZVN5bmMiLCJkb21DaGVja0NvdW50IiwiY2FsbGJhY2tQcm9jZXNzZWQiLCJkZXRhY2hFdmVudCIsImVyck1zZyIsImlzWG1sIiwiWE1MRG9jdW1lbnQiLCJvcGVyYSIsImRvY1Jvb3QiLCJkdCIsInNjciIsInRleHRhcmVhIiwidGEiLCJwcmUiLCJpbm5lclRleHQiLCJ0b1htbCIsImh0dHBEYXRhIiwiQWN0aXZlWE9iamVjdCIsImxvYWRYTUwiLCJhamF4Rm9ybSIsImRlbGVnYXRpb24iLCJkb0FqYXhTdWJtaXQiLCJjYXB0dXJlU3VibWl0dGluZ0VsZW1lbnQiLCJhamF4Rm9ybVVuYmluZCIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJqbWF4IiwiZmllbGRWYWx1ZSIsIiRpbnB1dCIsImZvcm1TZXJpYWxpemUiLCJmaWVsZFNlcmlhbGl6ZSIsInN1Y2Nlc3NmdWwiLCJvcHMiLCJvcCIsImNsZWFyRmllbGRzIiwiY2xlYXJJbnB1dHMiLCIkc2VsIiwicG9zdEVycm9yIiwic21hcnRyZXNpemUiLCJNYXNvbiIsImlzUmVzaXphYmxlIiwiaXNBbmltYXRlZCIsImFuaW1hdGlvbk9wdGlvbnMiLCJndXR0ZXJXaWR0aCIsImlzRml0V2lkdGgiLCJjb250YWluZXJTdHlsZSIsIl9maWx0ZXJGaW5kQnJpY2tzIiwiaXRlbVNlbGVjdG9yIiwiX2dldEJyaWNrcyIsInN0eWxlUXVldWUiLCJvcmlnaW5hbFN0eWxlIiwiaG9yaXpvbnRhbERpcmVjdGlvbiIsImlzRmx1aWQiLCJjb2x1bW5XaWR0aCIsInJlbG9hZEl0ZW1zIiwiX2dldENvbHVtbnMiLCJfcmVMYXlvdXQiLCJsYXlvdXQiLCJfcGxhY2VCcmljayIsImNvbFlzIiwiY29scyIsImlzTGFpZE91dCIsIiRicmlja3MiLCJyZWxvYWQiLCJhcHBlbmRlZCIsIl9hcHBlbmRlZCIsImltYWdlc0xvYWRlZCIsIm1hc29ucnkiLCJyZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIiLCJPbGRDb29raWVzIiwiQ29va2llcyIsImFwaSIsImRlY29kZSIsImNvbnZlcnRlciIsInBhdGgiLCJleHBpcmVzIiwidG9VVENTdHJpbmciLCJzdHJpbmdpZnkiLCJ3cml0ZSIsInN0cmluZ2lmaWVkQXR0cmlidXRlcyIsImF0dHJpYnV0ZU5hbWUiLCJjb29raWUiLCJqYXIiLCJjb29raWVzIiwicmVhZCIsIndpdGhDb252ZXJ0ZXIiLCJkZWZpbml0aW9uIiwidW5kZWZpbmVkVHlwZSIsImxvZ01ldGhvZHMiLCJiaW5kTWV0aG9kIiwibWV0aG9kTmFtZSIsIkZ1bmN0aW9uIiwicmVhbE1ldGhvZCIsInJlcGxhY2VMb2dnaW5nTWV0aG9kcyIsImxldmVsIiwibG9nZ2VyTmFtZSIsIm1ldGhvZEZhY3RvcnkiLCJlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzIiwiZGVmYXVsdE1ldGhvZEZhY3RvcnkiLCJMb2dnZXIiLCJkZWZhdWx0TGV2ZWwiLCJjdXJyZW50TGV2ZWwiLCJzdG9yYWdlS2V5IiwicGVyc2lzdExldmVsSWZQb3NzaWJsZSIsImxldmVsTnVtIiwibGV2ZWxOYW1lIiwibG9jYWxTdG9yYWdlIiwiZ2V0UGVyc2lzdGVkTGV2ZWwiLCJzdG9yZWRMZXZlbCIsImxldmVscyIsImdldExldmVsIiwic2V0TGV2ZWwiLCJwZXJzaXN0IiwiU0lMRU5UIiwic2V0RGVmYXVsdExldmVsIiwiZW5hYmxlQWxsIiwiVFJBQ0UiLCJkaXNhYmxlQWxsIiwiaW5pdGlhbExldmVsIiwiZGVmYXVsdExvZ2dlciIsIl9sb2dnZXJzQnlOYW1lIiwiZ2V0TG9nZ2VyIiwibG9nZ2VyIiwiX2xvZyIsImdldExvZ2dlcnMiLCJyZXF1aXJlIiwiU2xpY2siLCJpbnN0YW5jZVVpZCIsImRhdGFTZXR0aW5ncyIsImFjY2Vzc2liaWxpdHkiLCJhZGFwdGl2ZUhlaWdodCIsImFwcGVuZEFycm93cyIsImFwcGVuZERvdHMiLCJhc05hdkZvciIsInByZXZBcnJvdyIsIm5leHRBcnJvdyIsImF1dG9wbGF5U3BlZWQiLCJjZW50ZXJNb2RlIiwiY2VudGVyUGFkZGluZyIsImNzc0Vhc2UiLCJjdXN0b21QYWdpbmciLCJzbGlkZXIiLCJkb3RzIiwiZG90c0NsYXNzIiwiZWRnZUZyaWN0aW9uIiwiZm9jdXNPblNlbGVjdCIsImZvY3VzT25DaGFuZ2UiLCJpbmZpbml0ZSIsImluaXRpYWxTbGlkZSIsImxhenlMb2FkIiwibW9iaWxlRmlyc3QiLCJwYXVzZU9uSG92ZXIiLCJwYXVzZU9uRm9jdXMiLCJwYXVzZU9uRG90c0hvdmVyIiwicmVzcG9uZFRvIiwicmVzcG9uc2l2ZSIsInJvd3MiLCJydGwiLCJzbGlkZXNQZXJSb3ciLCJzbGlkZXNUb1Nob3ciLCJzbGlkZXNUb1Njcm9sbCIsInN3aXBlIiwic3dpcGVUb1NsaWRlIiwidG91Y2hNb3ZlIiwidG91Y2hUaHJlc2hvbGQiLCJ1c2VDU1MiLCJ1c2VUcmFuc2Zvcm0iLCJ2YXJpYWJsZVdpZHRoIiwidmVydGljYWxTd2lwaW5nIiwid2FpdEZvckFuaW1hdGUiLCJpbml0aWFscyIsImFuaW1hdGluZyIsImF1dG9QbGF5VGltZXIiLCJjdXJyZW50RGlyZWN0aW9uIiwiY3VycmVudExlZnQiLCJjdXJyZW50U2xpZGUiLCIkZG90cyIsImxpc3RXaWR0aCIsImxpc3RIZWlnaHQiLCJsb2FkSW5kZXgiLCIkbmV4dEFycm93IiwiJHByZXZBcnJvdyIsInNsaWRlQ291bnQiLCJzbGlkZVdpZHRoIiwiJHNsaWRlVHJhY2siLCIkc2xpZGVzIiwic2xpZGluZyIsInNsaWRlT2Zmc2V0Iiwic3dpcGVMZWZ0IiwidG91Y2hPYmplY3QiLCJ0cmFuc2Zvcm1zRW5hYmxlZCIsInVuc2xpY2tlZCIsImFjdGl2ZUJyZWFrcG9pbnQiLCJhbmltVHlwZSIsImFuaW1Qcm9wIiwiYnJlYWtwb2ludHMiLCJicmVha3BvaW50U2V0dGluZ3MiLCJjc3NUcmFuc2l0aW9ucyIsImZvY3Vzc2VkIiwiaW50ZXJydXB0ZWQiLCJwYXVzZWQiLCJwb3NpdGlvblByb3AiLCJyb3dDb3VudCIsInNob3VsZENsaWNrIiwiJHNsaWRlciIsIiRzbGlkZXNDYWNoZSIsInRyYW5zZm9ybVR5cGUiLCJ0cmFuc2l0aW9uVHlwZSIsInZpc2liaWxpdHlDaGFuZ2UiLCJ3aW5kb3dUaW1lciIsIm1vekhpZGRlbiIsIndlYmtpdEhpZGRlbiIsImF1dG9QbGF5IiwiYXV0b1BsYXlDbGVhciIsImF1dG9QbGF5SXRlcmF0b3IiLCJjaGFuZ2VTbGlkZSIsImNsaWNrSGFuZGxlciIsInNlbGVjdEhhbmRsZXIiLCJzZXRQb3NpdGlvbiIsInN3aXBlSGFuZGxlciIsImRyYWdIYW5kbGVyIiwia2V5SGFuZGxlciIsImh0bWxFeHByIiwicmVnaXN0ZXJCcmVha3BvaW50cyIsImFjdGl2YXRlQURBIiwiYWRkU2xpZGUiLCJzbGlja0FkZCIsIm1hcmt1cCIsImFkZEJlZm9yZSIsInVubG9hZCIsInJlaW5pdCIsImFuaW1hdGVIZWlnaHQiLCJhbmltYXRlU2xpZGUiLCJ0YXJnZXRMZWZ0IiwiYW5pbVByb3BzIiwiYW5pbVN0YXJ0IiwiYXBwbHlUcmFuc2l0aW9uIiwiZGlzYWJsZVRyYW5zaXRpb24iLCJnZXROYXZUYXJnZXQiLCJzbGljayIsInNsaWRlSGFuZGxlciIsInNsaWRlVG8iLCJidWlsZEFycm93cyIsImJ1aWxkRG90cyIsImRvdCIsImdldERvdENvdW50IiwiYnVpbGRPdXQiLCJzZXR1cEluZmluaXRlIiwidXBkYXRlRG90cyIsInNldFNsaWRlQ2xhc3NlcyIsImJ1aWxkUm93cyIsIm5ld1NsaWRlcyIsIm51bU9mU2xpZGVzIiwib3JpZ2luYWxTbGlkZXMiLCJzbGlkZXNQZXJTZWN0aW9uIiwicm93IiwiY2hlY2tSZXNwb25zaXZlIiwiZm9yY2VVcGRhdGUiLCJicmVha3BvaW50IiwidGFyZ2V0QnJlYWtwb2ludCIsInJlc3BvbmRUb1dpZHRoIiwidHJpZ2dlckJyZWFrcG9pbnQiLCJzbGlkZXJXaWR0aCIsInVuc2xpY2siLCJkb250QW5pbWF0ZSIsImluZGV4T2Zmc2V0IiwidW5ldmVuT2Zmc2V0IiwiY2hlY2tOYXZpZ2FibGUiLCJuYXZpZ2FibGVzIiwicHJldk5hdmlnYWJsZSIsImdldE5hdmlnYWJsZUluZGV4ZXMiLCJjbGVhblVwRXZlbnRzIiwiaW50ZXJydXB0IiwiY2xlYW5VcFNsaWRlRXZlbnRzIiwib3JpZW50YXRpb25DaGFuZ2UiLCJjbGVhblVwUm93cyIsImZhZGVTbGlkZSIsInNsaWRlSW5kZXgiLCJmYWRlU2xpZGVPdXQiLCJmaWx0ZXJTbGlkZXMiLCJzbGlja0ZpbHRlciIsImZvY3VzSGFuZGxlciIsIiRzZiIsImdldEN1cnJlbnQiLCJzbGlja0N1cnJlbnRTbGlkZSIsImJyZWFrUG9pbnQiLCJwYWdlclF0eSIsImdldExlZnQiLCJ2ZXJ0aWNhbEhlaWdodCIsInZlcnRpY2FsT2Zmc2V0IiwidGFyZ2V0U2xpZGUiLCJjb2VmIiwiZ2V0T3B0aW9uIiwic2xpY2tHZXRPcHRpb24iLCJpbmRleGVzIiwiZ2V0U2xpY2siLCJnZXRTbGlkZUNvdW50Iiwic2xpZGVzVHJhdmVyc2VkIiwic3dpcGVkU2xpZGUiLCJjZW50ZXJPZmZzZXQiLCJnb1RvIiwic2xpY2tHb1RvIiwiY3JlYXRpb24iLCJzZXRQcm9wcyIsInN0YXJ0TG9hZCIsImxvYWRTbGlkZXIiLCJpbml0aWFsaXplRXZlbnRzIiwidXBkYXRlQXJyb3dzIiwiaW5pdEFEQSIsIm51bURvdEdyb3VwcyIsInRhYkNvbnRyb2xJbmRleGVzIiwic2xpZGVDb250cm9sSW5kZXgiLCJhcmlhQnV0dG9uQ29udHJvbCIsIm1hcHBlZFNsaWRlSW5kZXgiLCJpbml0QXJyb3dFdmVudHMiLCJpbml0RG90RXZlbnRzIiwiaW5pdFNsaWRlRXZlbnRzIiwiaW5pdFVJIiwibG9hZFJhbmdlIiwiY2xvbmVSYW5nZSIsInJhbmdlU3RhcnQiLCJyYW5nZUVuZCIsImxvYWRJbWFnZXMiLCJpbWFnZXNTY29wZSIsImltYWdlU291cmNlIiwiaW1hZ2VTcmNTZXQiLCJpbWFnZVNpemVzIiwiaW1hZ2VUb0xvYWQiLCJwcmV2U2xpZGUiLCJuZXh0U2xpZGUiLCJwcm9ncmVzc2l2ZUxhenlMb2FkIiwic2xpY2tOZXh0IiwicGF1c2UiLCJzbGlja1BhdXNlIiwicGxheSIsInNsaWNrUGxheSIsInBvc3RTbGlkZSIsIiRjdXJyZW50U2xpZGUiLCJzbGlja1ByZXYiLCJ0cnlDb3VudCIsIiRpbWdzVG9Mb2FkIiwiaW5pdGlhbGl6aW5nIiwibGFzdFZpc2libGVJbmRleCIsImN1cnJlbnRCcmVha3BvaW50IiwicmVzcG9uc2l2ZVNldHRpbmdzIiwid2luZG93RGVsYXkiLCJyZW1vdmVTbGlkZSIsInNsaWNrUmVtb3ZlIiwicmVtb3ZlQmVmb3JlIiwicmVtb3ZlQWxsIiwic2V0Q1NTIiwicG9zaXRpb25Qcm9wcyIsInNldERpbWVuc2lvbnMiLCJzZXRGYWRlIiwic2V0SGVpZ2h0Iiwic2V0T3B0aW9uIiwic2xpY2tTZXRPcHRpb24iLCJib2R5U3R5bGUiLCJtc1RyYW5zaXRpb24iLCJPVHJhbnNmb3JtIiwicGVyc3BlY3RpdmVQcm9wZXJ0eSIsIndlYmtpdFBlcnNwZWN0aXZlIiwiTW96VHJhbnNmb3JtIiwiTW96UGVyc3BlY3RpdmUiLCJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSIsImFsbFNsaWRlcyIsInJlbWFpbmRlciIsImV2ZW5Db2VmIiwiaW5maW5pdGVDb3VudCIsInRhcmdldEVsZW1lbnQiLCJzeW5jIiwiYW5pbVNsaWRlIiwib2xkU2xpZGUiLCJzbGlkZUxlZnQiLCJuYXZUYXJnZXQiLCJzd2lwZURpcmVjdGlvbiIsInhEaXN0IiwieURpc3QiLCJzd2lwZUFuZ2xlIiwic3RhcnRYIiwiY3VyWCIsInN0YXJ0WSIsImN1clkiLCJzd2lwZUVuZCIsInN3aXBlTGVuZ3RoIiwiZWRnZUhpdCIsIm1pblN3aXBlIiwiZmluZ2VyQ291bnQiLCJzd2lwZVN0YXJ0Iiwic3dpcGVNb3ZlIiwiZWRnZVdhc0hpdCIsInBvc2l0aW9uT2Zmc2V0IiwidmVydGljYWxTd2lwZUxlbmd0aCIsInVuZmlsdGVyU2xpZGVzIiwic2xpY2tVbmZpbHRlciIsImZyb21CcmVha3BvaW50IiwiRW5naW5lIiwiZnVuY3Rpb25zT25SZWFkeSIsImV4ZWN1dGVPblJlYWR5IiwiY29tcGFyZVJ1bGUiLCJwcmlvcml0eSIsImxhc3Rfbm9tIiwib25SZWFkeSIsInNob3dFbGVtZW50cyIsImlzSW5WaWV3cG9ydCIsImVsZW1lbnRUb3AiLCJlbGVtZW50Qm90dG9tIiwidmlld3BvcnRUb3AiLCJ2aWV3cG9ydEJvdHRvbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWFBLEVBQUUsUUFBUSxFQUFFQSxNQUFNLEVBQUVDLFFBQVEsRUFBRTs7Q0FFN0IsWUFBWTs7Q0FFWixHQUFHLEVBQUUsT0FBT0MsT0FBTyxJQUFJLFNBQVMsR0FBRyxPQUFPQSxNQUFNLENBQUNDLFFBQVEsSUFBSSxTQUFTLEVBQUU7Ozs7Ozs7OztFQVN2RUQsTUFBTSxDQUFDQyxRQUFRLEVBQUVILE1BQU0sQ0FBQ0ksU0FBUztHQUNoQ0gsT0FBTyxFQUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFO0dBQ3hCLFFBQVEsRUFBRUssRUFBRSxFQUFFO0lBQ2IsR0FBRyxFQUFFLENBQUNBLENBQUMsQ0FBQ0QsU0FBUyxFQUFFO0tBQ2xCLE1BQU0sSUFBSUUsS0FBSyxFQUFFLDJDQUEyQyxDQUFDO0lBQzlEO0lBQ0EsT0FBT0wsT0FBTyxFQUFFSSxFQUFFLENBQUM7R0FDcEIsQ0FBQztDQUNILEVBQUUsS0FBSztFQUNOSixPQUFPLEVBQUVELE9BQU8sQ0FBQztDQUNsQjs7O0FBR0QsRUFBRSxDQUFDLEVBQUUsT0FBT08sT0FBTyxJQUFJLFlBQVksRUFBRUEsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUVBLE1BQU0sRUFBRUMsU0FBUyxFQUFFOzs7Ozs7QUFNakYsWUFBWTs7QUFFWixJQUFJQyxJQUFJLEVBQUUsQ0FBQyxDQUFDOztBQUVaLElBQUlMLFNBQVMsRUFBRUcsTUFBTSxDQUFDSCxRQUFROztBQUU5QixJQUFJTSxTQUFTLEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYzs7QUFFcEMsSUFBSUMsTUFBTSxFQUFFSixHQUFHLENBQUNJLEtBQUs7O0FBRXJCLElBQUlDLE9BQU8sRUFBRUwsR0FBRyxDQUFDSyxNQUFNOztBQUV2QixJQUFJQyxLQUFLLEVBQUVOLEdBQUcsQ0FBQ00sSUFBSTs7QUFFbkIsSUFBSUMsUUFBUSxFQUFFUCxH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QyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDQyxVQUFVLENBQUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsVUFBVSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsRUFBRSxDQUFDQyxVQUFVLENBQUMsS0FBSyxDQUFDQyxXQUFXLENBQUMsRUFBRSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUNDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUNDLGVBQWUsQ0FBQyxLQUFLLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNqWCxRQUFRLENBQUMsTUFBTSxDQUFDa1gsYUFBYSxDQUFDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLElBQUksQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxFQUFFLENBQUNDLFFBQVEsQ0FBQyxFQUFFLENBQUNDLFNBQVMsQ0FBQyxFQUFFLENBQUNDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNsaUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNpYyxDQUFDLENBQUM3aUIsTUFBTSxDQUFDLElBQUksQ0FBQzBtQyxTQUFTLENBQUMsSUFBSSxDQUFDaEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQSxRQUFRLENBQUNxRCxFQUFFLENBQUNsbUIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwbEMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM3aUIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwbEMsUUFBUSxDQUFDcUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDQyxLQUFLLENBQUNyMUIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUNvaUIsVUFBVSxDQUFDLDZGQUE2RixDQUFDLENBQUMsQ0FBQyxTQUFTdHhCLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsZ0ZBQWdGLENBQUMsT0FBTzhKLENBQUMsQ0FBQ21iLEVBQUUsQ0FBQyxVQUFVLENBQUNqbEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDMlUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDL3NCLFNBQVMsQ0FBQzVPLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFZ25CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzJVLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQy9zQixTQUFTLENBQUM1TyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRWduQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMyVSxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUNwVixFQUFFLENBQUMsV0FBVyxDQUFDamxCLENBQUMsQ0FBQzhyQyxDQUFDLENBQUMsQ0FBQyxTQUFTQSxDQUFDLENBQUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNDLHFCQUFxQixDQUFDL2hDLENBQUMsQ0FBQ2dpQyxNQUFNLENBQUNoaUMsQ0FBQyxDQUFDNGhDLEtBQUssQ0FBQzM2QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDakgsQ0FBQyxDQUFDZ0UsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3lYLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3hOLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDdEssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDeXNCLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDM1UsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDc1UsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDMXNCLFNBQVMsQ0FBQzVPLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFZ25CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3NVLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzFzQixTQUFTLENBQUM1TyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRWduQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNzVSxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLFNBQVMveUIsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQ2lILENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJcThCLEVBQUUsR0FBR3I4QixDQUFDLENBQUMsSUFBSSxFQUFFQSxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3Z5QixDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT3Z5QixDQUFDLENBQUMsU0FBU29pQyxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsSUFBSSxDQUFDcWlDLE9BQU8sQ0FBQ2xzQyxHQUFHLENBQUMsQ0FBQyxDQUFDeWxCLENBQUMsQ0FBQ3ZqQixLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUNncUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3RpQyxDQUFDLEdBQUcsSUFBSSxDQUFDcWlDLE9BQU8sQ0FBQ2xzQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ29zQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzNtQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDNW1CLENBQUMsQ0FBQzRtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM1bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQzFyQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUkyckMsQ0FBQyxDQUFDLENBQUMsQ0FBQzUwQixDQUFDLENBQUNyVSxLQUFLLENBQUNuQyxTQUFTLENBQUM1QyxLQUFLLENBQUNtbkIsQ0FBQyxDQUFDaUgsU0FBUyxDQUFDLFFBQVEsQ0FBQzdpQixDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsR0FBRyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDdDFCLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQzhyQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUN6UCxDQUFDLENBQUMzVyxDQUFDLENBQUM5RixLQUFLLENBQUNwSixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM2bEIsQ0FBQyxFQUFFQSxDQUFDLENBQUM3aUIsTUFBTSxFQUFFa00sQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDLENBQUNnbEIsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQ3YwQixDQUFDLENBQUMsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ2lILFNBQVMsQ0FBQyxDQUFDakgsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxRQUFRLENBQUMxaUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDSyxDQUFDLENBQUN6aUMsQ0FBQyxDQUFDekUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeUUsQ0FBQyxDQUFDQSxDQUFDLENBQUN6RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSXNTLENBQUMsQ0FBQzQwQixDQUFDLENBQUMsR0FBRyxDQUFDemlDLENBQUMsQ0FBQyxPQUFPdXlCLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDQSxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDK21CLE1BQU0sQ0FBQyxDQUFDL21CLENBQUMsQ0FBQ25pQixPQUFPLENBQUM4NEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQ1YsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMzRCxNQUFNLENBQUM2OUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDelcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDMEksQ0FBQyxDQUFDclMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3dFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDbFYsQ0FBQyxDQUFDNk4sQ0FBQyxDQUFDLENBQUMsQ0FBQytOLENBQUMsQ0FBQzZtQixDQUFDLENBQUMsQ0FBQzdtQixDQUFDLENBQUM2bUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDNm1CLENBQUMsQ0FBQyxDQUFDemlDLENBQUMsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQ3BtQixDQUFDLENBQUM2bUIsQ0FBQyxDQUFDLENBQUN6aUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDNGIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUM0aUMsYUFBYSxDQUFDLENBQUN0cUMsU0FBUyxDQUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDb3JDLGFBQWEsQ0FBQ2huQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUlnaUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM3aUIsTUFBTSxDQUFDaXBDLENBQUMsQ0FBQ3QxQixDQUFDLENBQUMsQ0FBQzVWLE9BQU8sQ0FBQ3k3QixDQUFDLENBQUN6N0IsT0FBTyxDQUFDK3JDLE1BQU0sQ0FBQ2puQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDdzVCLENBQUMsQ0FBQyxDQUFDdVEsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQyxJQUFJakgsQ0FBQyxDQUFDaUgsQ0FBQyxDQUFDbkUsT0FBTyxDQUFDNGlCLENBQUMsQ0FBQzhtQixNQUFNLENBQUMzcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDb0UsQ0FBQyxDQUFDbkUsT0FBTyxDQUFDLENBQUM0aUIsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQ3M2QixDQUFDLENBQUMsUUFBUSxDQUFDdnlCLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxPQUFPM1csQ0FBQyxDQUFDdm1CLFVBQVUsQ0FBQ2s5QixDQUFDLENBQUMsQ0FBQyxDQUFDNlAsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzRiLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzFsQixDQUFDLENBQUNtQixTQUFTLENBQUMySSxDQUFDLENBQUMsQ0FBQzNILEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLFNBQVNvVSxDQUFDLENBQUNrUCxDQUFDLENBQUMsQ0FBQyxPQUFPMWxCLENBQUMsQ0FBQ21CLFNBQVMsQ0FBQzJJLENBQUMsQ0FBQyxDQUFDM0gsS0FBSyxDQUFDLElBQUksQ0FBQ3VqQixDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUM2c0MsTUFBTSxDQUFDZixDQUFDLENBQUMsSUFBSSxDQUFDZ0IsV0FBVyxDQUFDLE9BQU8sSUFBSSxDQUFDRCxNQUFNLENBQUNubkIsQ0FBQyxDQUFDLElBQUksQ0FBQ29uQixXQUFXLENBQUN0MkIsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQ2w2QixLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUN5cUMsTUFBTSxDQUFDN3NDLENBQUMsQ0FBQyxJQUFJLENBQUM4c0MsV0FBVyxDQUFDaEIsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ29pQyxDQUFDLENBQUNwaUMsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDM3FDLFNBQVMsQ0FBQ3VrQixDQUFDLENBQUM4bUIsTUFBTSxDQUFDM3BDLE1BQU0sQ0FBQ29FLENBQUMsQ0FBQyxDQUFDOGxDLGlCQUFpQixDQUFDdjJCLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQzhsQyxpQkFBaUIsRUFBRWpqQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDb2lDLENBQUMsQ0FBQyxDQUFDN3FDLFdBQVcsQ0FBQ3lxQyxDQUFDLENBQUNqL0IsU0FBUyxDQUFDMC9CLENBQUMsQ0FBQ1MsVUFBVSxDQUFDbGpDLENBQUMsQ0FBQ21qQyxjQUFjLENBQUN0MUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ25CLENBQUMsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQ3lVLENBQUMsQ0FBQ28yQixrQkFBa0IsQ0FBQyxRQUFRLENBQUM5aUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDbUIsU0FBUyxDQUFDdWtCLENBQUMsQ0FBQzhtQixNQUFNLENBQUNuUSxDQUFDLENBQUN4dkIsU0FBUyxDQUFDLEdBQUcsQ0FBQ3d2QixDQUFDLENBQUMyUSxVQUFVLENBQUNsQixDQUFDLENBQUM5ckMsQ0FBQyxDQUFDMnNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPbjJCLENBQUMsQ0FBQ28yQixrQkFBa0IsQ0FBQyxDQUFDNXNDLENBQUMsQ0FBQzRzQyxrQkFBa0IsQ0FBQ251QyxJQUFJLENBQUNxdEMsQ0FBQyxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQ1UsTUFBTSxDQUFDcGpDLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQzNwQyxNQUFNLENBQUMsUUFBUSxDQUFDaUgsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ21CLENBQUMsQ0FBQzFZLElBQUksQ0FBQ21ELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBwQyxDQUFDLENBQUMsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ3VQLENBQUMsQ0FBQ2xWLE1BQU0sQ0FBQzJGLENBQUMsQ0FBQzZrQyxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQzlyQyxFQUFFLEdBQUd3VyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxDQUFDaHRDLGNBQWMsQ0FBQ2tCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHcThCLENBQUMsRUFBRSxDQUFDdnlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ3JpQixhQUFhLENBQUNnNUIsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUNyaUIsYUFBYSxDQUFDeUcsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM4bUIsTUFBTSxDQUFDM3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ2lILENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQzNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN3NUIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLE9BQU92eUIsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM4bUIsTUFBTSxDQUFDVSxNQUFNLENBQUMsUUFBUSxDQUFDcGpDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ21CLFNBQVMsQ0FBQzhyQyxjQUFjLEVBQUVuakMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQzhJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDLElBQUlzMUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPdDFCLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQzBRLENBQUMsQ0FBQzFZLElBQUksQ0FBQ21ELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhwQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU9KLENBQUMsQ0FBQyxJQUFJLENBQUN4cUMsTUFBTSxFQUFFLFVBQVUsR0FBR2tWLENBQUMsQ0FBQyxJQUFJLENBQUN6VSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL0IsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQ3BtQixDQUFDLENBQUMxRyxJQUFJLENBQUMsSUFBSSxDQUFDcWQsQ0FBQyxDQUFDLENBQUMsTUFBTSxVQUFVLEdBQUc3bEIsQ0FBQyxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3ZtQixVQUFVLENBQUMyc0MsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHQSxDQUFDLENBQUMyMkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNudEMsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQ3QxQixDQUFDLENBQUMsQ0FBQ3JVLEtBQUssQ0FBQzJwQyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDLENBQUNqSCxDQUFDLEdBQUc4ckMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHOXJDLENBQUMsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ2xzQyxDQUFDLEVBQUVBLENBQUMsQ0FBQ29CLE1BQU0sQ0FBQzhxQyxDQUFDLENBQUN4cUMsU0FBUyxDQUFDMUIsQ0FBQyxDQUFDd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM1aEIsS0FBSyxDQUFDLGtCQUFrQixDQUFDMFMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDNWhCLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQ2dHLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyw0QkFBNEIsQ0FBQzBNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUNqbEMsQ0FBQyxDQUFDM0YsTUFBTSxFQUFFLENBQUNrVixDQUFDLENBQUNrUCxDQUFDLENBQUM4bUIsTUFBTSxDQUFDM3BDLE1BQU0sQ0FBQ1YsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDcVUsQ0FBQyxDQUFDLENBQUNoWSxNQUFNLENBQUN5SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSStILENBQUMsQ0FBQzRiLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUNxZCxDQUFDLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDNlksTUFBTSxDQUFDbk0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMxTSxDQUFDLENBQUNzakMsS0FBSyxFQUFFdGpDLENBQUMsQ0FBQ3NqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMxbkIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDLElBQUksQ0FBQ3FkLENBQUMsQ0FBQyxJQUFJcjhCLENBQUMsQ0FBQ3dXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQyxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDK21CLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQy9tQixDQUFDLENBQUMrbUIsTUFBTSxDQUFDRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xuQixDQUFDLENBQUMrbUIsTUFBTSxDQUFDdHJDLFNBQVMsQ0FBQyxDQUFDNnJDLFVBQVUsQ0FBQyxRQUFRLENBQUNELGlCQUFpQixDQUFDLEVBQUUsQ0FBQ00sY0FBYyxDQUFDLE9BQU8sQ0FBQ3ZxQyxPQUFPLENBQUMsQ0FBQ20zQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUN4d0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDNmpDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ1osYUFBYSxDQUFDLFFBQVEsQ0FBQzVpQyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzFsQixDQUFDLEVBQUUsSUFBSSxDQUFDcXRDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNsQixPQUFPLENBQUN6bUIsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3V0QyxJQUFJLENBQUNoQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNpQixjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQ08sSUFBSSxDQUFDLElBQUksQ0FBQ0UsUUFBUSxDQUFDL25CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ29CLFNBQVMsQ0FBQ2hvQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lvQixTQUFTLENBQUNqb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrb0Isb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM1dEMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDMGxCLENBQUMsQ0FBQzFHLElBQUksQ0FBQ2hmLENBQUMsQ0FBQyxJQUFJLENBQUNpdEMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQ1ksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzFCLE9BQU8sQ0FBQyxDQUFDM3lCLE1BQU0sQ0FBQyxRQUFRLENBQUNrTSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDdmlCLE1BQU0sR0FBR25ELENBQUMsRUFBRSxJQUFJLENBQUM4dEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNod0MsUUFBUSxDQUFDNG5CLENBQUMsQ0FBQzFsQixDQUFDLENBQUMrZ0IsS0FBSyxDQUFDL2dCLENBQUMsQ0FBQ3VLLGFBQWEsQ0FBQ3ZLLENBQUMsQ0FBQ2xDLFFBQVEsRUFBRWtDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQy9CLE1BQU0sQ0FBQ3luQixDQUFDLENBQUMsSUFBSSxDQUFDNW5CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ29QLFdBQVcsRUFBRSxJQUFJLENBQUNwUCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN3OUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN4NEIsT0FBTyxDQUFDNGlCLENBQUMsQ0FBQzhtQixNQUFNLENBQUMzcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ2lyQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUNqa0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa2tDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbHJDLE9BQU8sQ0FBQzJHLFFBQVEsRUFBRSxJQUFJLENBQUN3a0Msa0JBQWtCLENBQUMsSUFBSSxDQUFDbnJDLE9BQU8sQ0FBQzJHLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQzRpQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM2QixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNkLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ1csaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNHLG1CQUFtQixDQUFDeG9CLENBQUMsQ0FBQzFoQixJQUFJLENBQUNncUMsT0FBTyxDQUFDdG9CLENBQUMsQ0FBQzFoQixJQUFJLENBQUNvcEMsS0FBSyxDQUFDMW5CLENBQUMsQ0FBQzFoQixJQUFJLENBQUM4cEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWhrQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3FrQyxRQUFRLENBQUMsQ0FBQyxDQUFDem9CLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsSUFBSSxDQUFDNnJDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQ2xvQixDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUNza0MsWUFBWSxDQUFDcHVDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeW1CLE9BQU8sQ0FBQzdtQixHQUFHLENBQUMsSUFBSSxDQUFDa29CLGNBQWMsQ0FBQyxDQUFDN3RCLFVBQVUsQ0FBQyxJQUFJLENBQUNzdEIsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDbG5CLEdBQUcsQ0FBQyxJQUFJLENBQUNrb0IsY0FBYyxDQUFDLENBQUN4VSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDeVUsUUFBUSxDQUFDbm9CLEdBQUcsQ0FBQyxJQUFJLENBQUNrb0IsY0FBYyxDQUFDLENBQUMsQ0FBQ1csUUFBUSxDQUFDem9CLENBQUMsQ0FBQzFoQixJQUFJLENBQUN3b0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNMLE9BQU8sQ0FBQyxDQUFDeHBCLE1BQU0sQ0FBQyxRQUFRLENBQUM3WSxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHMUgsU0FBUyxDQUFDZCxNQUFNLENBQUMsT0FBT29rQixDQUFDLENBQUM4bUIsTUFBTSxDQUFDM3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBT2dILENBQUMsQ0FBQyxFQUFFLENBQUM3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvMUIsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3pFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ3lFLENBQUMsQ0FBQ3V5QixDQUFDLENBQUM1d0IsS0FBSyxDQUFDLENBQUMsQ0FBQzR3QixDQUFDLENBQUMvNkIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDa1YsQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM4bUIsTUFBTSxDQUFDM3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQ2dILENBQUMsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQy82QixNQUFNLENBQUMsQ0FBQyxDQUFDd3FDLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUN0MUIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDQSxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNoaUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQ2wxQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRy9FLFNBQVMsQ0FBQ2QsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUdrVixDQUFDLENBQUMxTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwTSxDQUFDLENBQUMxTSxDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHb0MsU0FBUyxDQUFDZCxNQUFNLENBQUMsT0FBTyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUN3QixPQUFPLENBQUNnSCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDaEgsT0FBTyxDQUFDZ0gsQ0FBQyxDQUFDLENBQUM3QyxDQUFDLENBQUM2QyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3F1QyxXQUFXLENBQUNwbkMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNvbkMsV0FBVyxDQUFDLFFBQVEsQ0FBQzNvQixDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsRUFBRSxHQUFHNGIsQ0FBQyxDQUFDLElBQUksQ0FBQzRvQixVQUFVLENBQUN4a0MsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDd2tDLFVBQVUsQ0FBQyxRQUFRLENBQUM1b0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsTUFBTSxTQUFTLEdBQUc0YixDQUFDLEVBQUUsSUFBSSxDQUFDNm9CLGlCQUFpQixDQUFDemtDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQzRpQixDQUFDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxVQUFVLEdBQUc0YixDQUFDLEVBQUUsSUFBSSxDQUFDdW9CLGtCQUFrQixDQUFDbmtDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDeWtDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQ3prQyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsR0FBRyxDQUFDeFcsRUFBRSxHQUFHOEosQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLElBQUksQ0FBQ28zQixvQkFBb0IsQ0FBQzV0QyxDQUFDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ20zQixPQUFPLENBQUNqNkIsQ0FBQyxDQUFDLEVBQUV3VyxDQUFDLEVBQUVBLENBQUMsQ0FBQ2xWLE1BQU0sRUFBRSxDQUFDKzZCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQ2hWLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0c0MsWUFBWSxDQUFDNTNCLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUN3VSxRQUFRLENBQUMsQ0FBQ3JDLE9BQU8sQ0FBQzlQLENBQUMsQ0FBQ2h4QixJQUFJLENBQUNyTCxDQUFDLENBQUNpNkIsT0FBTyxDQUFDbndCLENBQUMsQ0FBQ2lPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrMkIsa0JBQWtCLENBQUMsUUFBUSxDQUFDdm9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytvQixZQUFZLENBQUMsSUFBSSxDQUFDakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNTLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ3ZuQixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMG9CLFlBQVksQ0FBQyxJQUFJLENBQUNWLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUNVLFlBQVksQ0FBQyxJQUFJLENBQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNlLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDTCxXQUFXLENBQUMsQ0FBQzVrQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNpUSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzIwQixXQUFXLENBQUMsQ0FBQzVrQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMra0MsUUFBUSxDQUFDLFFBQVEsQ0FBQzFrQyxDQUFDLENBQUMsQ0FBQyxTQUFTOUosQ0FBQyxDQUFDQSxDQUFDLENBQUM4ckMsQ0FBQyxDQUFDLENBQUMsSUFBSTdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUNzQixNQUFNLENBQUM0cUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ2psQyxDQUFDLENBQUN1UCxDQUFDLENBQUNvM0Isb0JBQW9CLENBQUM1dEMsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQyxDQUFDLEVBQUV4bUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3plLENBQUMsQ0FBQzZDLENBQUMsQ0FBQ2lPLEdBQUcsQ0FBQzJOLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDelAsTUFBTSxDQUFDaFAsQ0FBQyxDQUFDekYsR0FBRyxDQUFDLENBQUMsQ0FBQ2hELE1BQU0sQ0FBQ3NMLENBQUMsQ0FBQ3FpQyxPQUFPLENBQUMzcUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2trQixDQUFDLENBQUN6ZSxDQUFDLENBQUM2UCxHQUFHLENBQUNoTixDQUFDLENBQUNxaUMsT0FBTyxDQUFDLENBQUMzcUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDZ1YsQ0FBQyxDQUFDbzNCLG9CQUFvQixDQUFDNXRDLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUMsQ0FBQyxDQUFDamxDLENBQUMsQ0FBQ28xQixDQUFDLENBQUM1OUIsSUFBSSxDQUFDdUIsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQyxDQUFDLENBQUNKLENBQUMsRUFBRWhpQyxDQUFDLENBQUNtd0IsT0FBTyxDQUFDajZCLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUMsQ0FBQyxFQUFFN1AsQ0FBQyxDQUFDNTlCLElBQUksQ0FBQ3FMLENBQUMsQ0FBQ213QixPQUFPLENBQUNqNkIsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJN1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTzFNLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQ3NwQyxPQUFPLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUNsUyxPQUFPLENBQUMsSUFBSSxDQUFDbjNCLE9BQU8sQ0FBQ20zQixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ253QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrakMsR0FBRyxDQUFDL2pDLENBQUMsQ0FBQ3FpQyxPQUFPLENBQUMsQ0FBQzN5QixNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDMVAsQ0FBQyxDQUFDdUIsSUFBSSxFQUFFckwsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDdUIsSUFBSSxDQUFDbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNMLENBQUMsQ0FBQytuQixLQUFLLEVBQUU3eEIsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDK25CLEtBQUssQ0FBQzFuQixLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ2t5QixDQUFDLENBQUNyeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMyakMsc0JBQXNCLENBQUMsUUFBUSxDQUFDN2tDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDMGxCLENBQUMsQ0FBQzNqQixJQUFJLENBQUMvQixDQUFDLENBQUM0dEMsb0JBQW9CLENBQUMsUUFBUSxDQUFDdlIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHa1AsQ0FBQyxDQUFDamhCLE9BQU8sQ0FBQ3FGLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQ3FULENBQUMsQ0FBQyxFQUFFLENBQUN4VyxDQUFDLENBQUM0dEMsb0JBQW9CLENBQUN2UixDQUFDLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQ00sR0FBRyxDQUFDaE4sQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRzQyxZQUFZLENBQUMsUUFBUSxDQUFDMW9CLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDeXVDLFlBQVksQ0FBQy9vQixDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNHVDLFNBQVMsQ0FBQyxRQUFRLENBQUNscEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUN5dUMsWUFBWSxDQUFDL29CLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5dUMsWUFBWSxDQUFDLFFBQVEsQ0FBQy9vQixDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBT0EsQ0FBQyxDQUFDQSxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDLElBQUl3VyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU9rUCxDQUFDLEVBQUUsSUFBSSxHQUFHQSxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDLENBQUNqYSxLQUFLLENBQUNyYixDQUFDLENBQUMxTSxDQUFDLENBQUM5SixDQUFDLENBQUNxTCxJQUFJLENBQUNtTCxDQUFDLENBQUNrUCxDQUFDLENBQUM1YixDQUFDLENBQUNxaUMsT0FBTyxDQUFDMzFCLENBQUMsQ0FBQyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDem1CLENBQUMsQ0FBQzNOLEdBQUcsQ0FBQ3NrQixDQUFDLENBQUMsQ0FBQyxPQUFPeVAsQ0FBQyxDQUFDSyxPQUFPLENBQUM3UixXQUFXLENBQUMsSUFBSSxDQUFDa1UsUUFBUSxDQUFDMUMsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3dSLEdBQUcsQ0FBQyxRQUFRLENBQUMvakMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU9oaUMsQ0FBQyxFQUFFLENBQUN1eUIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUN3VyxDQUFDLENBQUNrUCxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeXRDLFFBQVEsQ0FBQyxJQUFJLENBQUNBLFFBQVEsQ0FBQzExQixHQUFHLENBQUMvWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ21zQyxPQUFPLENBQUMzMUIsQ0FBQyxDQUFDLElBQUksQ0FBQ2cyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM5bUIsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQ3M2QixDQUFDLENBQUMsUUFBUSxDQUFDQSxDQUFDLENBQUNwMUIsQ0FBQyxDQUFDLENBQUMsU0FBU2lsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU9waUMsQ0FBQyxFQUFFZ2lDLENBQUMsQ0FBQ2hwQyxPQUFPLENBQUMyRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2ljLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2dWLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU96ekIsQ0FBQyxDQUFDNmtDLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUM5RSxLQUFLLENBQUMycEMsQ0FBQyxDQUFDMXBDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPNkUsQ0FBQyxFQUFFLENBQUNpbEMsQ0FBQyxDQUFDaG5DLElBQUksQ0FBQytCLENBQUMsQ0FBQy9CLElBQUksQ0FBQytCLENBQUMsQ0FBQy9CLElBQUksRUFBRWduQyxDQUFDLENBQUNobkMsSUFBSSxFQUFFd2dCLENBQUMsQ0FBQ3hnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUlxbkMsQ0FBQyxDQUFDbFEsQ0FBQyxDQUFDbHlCLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDd04sQ0FBQyxDQUFDNDBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1QsQ0FBQyxDQUFDMEIsY0FBYyxDQUFDcUIsQ0FBQyxDQUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDc0MsQ0FBQyxDQUFDcjRCLENBQUMsQ0FBQ3lPLEVBQUUsQ0FBQ3ROLENBQUMsQ0FBQ2szQixDQUFDLENBQUMzQyxDQUFDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUNpbEIsRUFBRSxDQUFDdE4sQ0FBQyxDQUFDdTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNEMsSUFBSSxDQUFDLFFBQVEsQ0FBQ2hsQyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQ3FGLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzJGLElBQUksQ0FBQyxJQUFJLENBQUN3aUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsY0FBYyxDQUFDMWpDLENBQUMsQ0FBQ3diLEdBQUcsQ0FBQ3RsQixDQUFDLENBQUMsQ0FBQ3NsQixHQUFHLENBQUN0bEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeXRDLFFBQVEsQ0FBQy9uQixDQUFDLENBQUMsSUFBSSxDQUFDK25CLFFBQVEsQ0FBQzMyQixHQUFHLENBQUNoTixDQUFDLENBQUMsQ0FBQ3RJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtc0MsU0FBUyxDQUFDam9CLENBQUMsQ0FBQyxJQUFJLENBQUNpb0IsU0FBUyxDQUFDNzJCLEdBQUcsQ0FBQ2hOLENBQUMsQ0FBQyxDQUFDdEksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2tzQyxTQUFTLENBQUNob0IsQ0FBQyxDQUFDLElBQUksQ0FBQ2dvQixTQUFTLENBQUM1MkIsR0FBRyxDQUFDaE4sQ0FBQyxDQUFDLENBQUN0SSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V0QyxNQUFNLENBQUMsUUFBUSxDQUFDcnBCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLFNBQVM5SixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTzBsQixDQUFDLENBQUMyVyxDQUFDLENBQUMzVyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUN2akIsS0FBSyxDQUFDazZCLENBQUMsQ0FBQ2o2QixTQUFTLENBQUMsQ0FBQyxJQUFJaTZCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTy9mLFVBQVUsQ0FBQ3RjLENBQUMsQ0FBQzhKLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDa2xDLFVBQVUsQ0FBQyxRQUFRLENBQUNsbEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNGpDLFNBQVMsQ0FBQyxJQUFJLENBQUNBLFNBQVMsQ0FBQzMxQixHQUFHLENBQUNqTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrakMsR0FBRyxDQUFDL2pDLENBQUMsQ0FBQyxDQUFDaWhCLFVBQVUsQ0FBQyxRQUFRLENBQUNqaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOGtDLFNBQVMsQ0FBQ2xwQixDQUFDLENBQUM1YixDQUFDLENBQUNtZCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDK0QsVUFBVSxDQUFDLFFBQVEsQ0FBQ2xoQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNza0MsWUFBWSxDQUFDMW9CLENBQUMsQ0FBQzViLENBQUMsQ0FBQ21kLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnb0IsVUFBVSxDQUFDLFFBQVEsQ0FBQ25sQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2akMsU0FBUyxDQUFDLElBQUksQ0FBQ0EsU0FBUyxDQUFDNTFCLEdBQUcsQ0FBQ2pPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytqQyxHQUFHLENBQUMvakMsQ0FBQyxDQUFDLENBQUNneEIsT0FBTyxDQUFDLFFBQVEsQ0FBQ2h4QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4a0MsU0FBUyxDQUFDbHBCLENBQUMsQ0FBQzViLENBQUMsQ0FBQ21kLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUNpb0IsUUFBUSxDQUFDLFFBQVEsQ0FBQ3BsQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNza0MsWUFBWSxDQUFDMW9CLENBQUMsQ0FBQzViLENBQUMsQ0FBQ21kLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvbEIsUUFBUSxDQUFDLFFBQVEsQ0FBQ3ZpQyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQyxJQUFJLENBQUNuRSxPQUFPLENBQUNnSCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUN1eUIsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ2tDLEtBQUssQ0FBQzVuQixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDUixJQUFJLENBQUMsQ0FBQ3NLLENBQUMsR0FBRyxJQUFJLENBQUNpakMsaUJBQWlCLENBQUNqakMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lqQyxpQkFBaUIsQ0FBQ2pqQyxDQUFDLENBQUMsQ0FBQ3hFLFdBQVcsQ0FBQyxDQUFDLENBQUN0RixDQUFDLENBQUNtRCxNQUFNLENBQUMsSUFBSSxDQUFDZ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ0wsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQzhuQixhQUFhLENBQUMsR0FBRyxDQUFDdFIsRUFBRSxHQUFHczFCLENBQUMsQ0FBQ3QxQixFQUFFLEdBQUd4VyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDL2pCLE9BQU8sQ0FBQ3BvQixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDdm1CLFVBQVUsQ0FBQzhILENBQUMsQ0FBQyxFQUFFQSxDQUFDLENBQUM5RSxLQUFLLENBQUMsSUFBSSxDQUFDZ3FDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbnNDLENBQUMsQ0FBQyxDQUFDeEIsTUFBTSxDQUFDNjlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUVyOEIsQ0FBQyxDQUFDNG9CLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xELENBQUMsQ0FBQzNqQixJQUFJLENBQUMsQ0FBQ29nQixJQUFJLENBQUMsUUFBUSxDQUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDdlksQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDK21CLE1BQU0sQ0FBQ3RyQyxTQUFTLENBQUMsR0FBRyxDQUFDMkksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDdXlCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU90MUIsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxDQUFDMjRCLE1BQU0sQ0FBQzM0QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUl2UCxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDMTFCLENBQUMsQ0FBQ0EsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPQSxDQUFDLENBQUN4VyxDQUFDLENBQUN3VyxDQUFDLENBQUMyNEIsTUFBTSxFQUFFbnZDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQzBNLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLENBQUNvZCxRQUFRLENBQUNwZCxDQUFDLENBQUMsQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDLENBQUN5ZSxDQUFDLENBQUN2aEIsYUFBYSxDQUFDcVMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3dnQixRQUFRLENBQUM4VSxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDZ2lCLEtBQUssRUFBRTZELENBQUMsQ0FBQzdELEtBQUssQ0FBQ2hpQixDQUFDLENBQUNnaUIsS0FBSyxDQUFDLENBQUN2eEIsQ0FBQyxFQUFFeWUsQ0FBQyxDQUFDMHBCLE9BQU8sRUFBRTFwQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDRCxNQUFNLENBQUNqRCxDQUFDLENBQUMsQ0FBQzdQLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDMDFCLENBQUMsR0FBR3BpQyxDQUFDLEVBQUV1eUIsQ0FBQyxDQUFDNlAsQ0FBQyxDQUFDLENBQUM3UCxDQUFDLENBQUM2UCxDQUFDLENBQUMsQ0FBQzExQixDQUFDLENBQUNvZCxRQUFRLENBQUNwZCxDQUFDLENBQUMrYyxNQUFNLENBQUN1WSxDQUFDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQ2xqQixLQUFLLENBQUMsUUFBUSxDQUFDblosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ2lDLENBQUMsRUFBRUEsQ0FBQyxDQUFDN3NDLElBQUksQ0FBQ285QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM4bUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzFpQyxDQUFDLENBQUM0YixDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNxdkIsVUFBVSxDQUFDM0osQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJwQixDQUFDLENBQUN2a0MsSUFBSSxDQUFDNGEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDdWxCLFVBQVUsQ0FBQzNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMycEIsQ0FBQyxDQUFDdmtDLElBQUksQ0FBQzRhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTQSxDQUFDLENBQUM4SixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxPQUFPNDVCLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQ25YLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTcThCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHOUosQ0FBQyxDQUFDWCxRQUFRLENBQUMsQ0FBQzB2QixLQUFLLENBQUNqbEIsQ0FBQyxDQUFDaWxCLEtBQUssQ0FBQyxDQUFDLENBQUNvRyxNQUFNLENBQUNyckIsQ0FBQyxDQUFDcXJCLE1BQU0sQ0FBQyxDQUFDLENBQUM4UCxNQUFNLENBQUMsQ0FBQzkzQixHQUFHLENBQUMsQ0FBQyxDQUFDMGxCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbk4sQ0FBQyxDQUFDcG1CLFFBQVEsQ0FBQ1UsQ0FBQyxDQUFDLENBQUMsQ0FBQyt1QixLQUFLLENBQUNqbEIsQ0FBQyxDQUFDaWxCLEtBQUssQ0FBQyxDQUFDLENBQUNvRyxNQUFNLENBQUNyckIsQ0FBQyxDQUFDcXJCLE1BQU0sQ0FBQyxDQUFDLENBQUM4UCxNQUFNLENBQUMsQ0FBQzkzQixHQUFHLENBQUNyRCxDQUFDLENBQUNrcUIsU0FBUyxDQUFDLENBQUMsQ0FBQ25CLElBQUksQ0FBQy9vQixDQUFDLENBQUNtcUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNqMEIsQ0FBQyxDQUFDb25CLGNBQWMsQ0FBQyxDQUFDMkgsS0FBSyxDQUFDLENBQUMsQ0FBQ29HLE1BQU0sQ0FBQyxDQUFDLENBQUM4UCxNQUFNLENBQUMsQ0FBQzkzQixHQUFHLENBQUNuTixDQUFDLENBQUMycEIsS0FBSyxDQUFDa0osSUFBSSxDQUFDN3lCLENBQUMsQ0FBQzBwQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNxRixLQUFLLENBQUNqbEIsQ0FBQyxDQUFDd2xDLFVBQVUsQ0FBQyxDQUFDLENBQUNuYSxNQUFNLENBQUNyckIsQ0FBQyxDQUFDeWxDLFdBQVcsQ0FBQyxDQUFDLENBQUN0SyxNQUFNLENBQUNuN0IsQ0FBQyxDQUFDbTdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJenVCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUNwb0MsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQ3JxQixDQUFDLENBQUN2RCxJQUFJLENBQUM4ckMsR0FBRyxDQUFDdEQsQ0FBQyxDQUFDLG1CQUFtQixDQUFDSyxDQUFDLENBQUMsbUJBQW1CLENBQUM1MEIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDazNCLENBQUMsQ0FBQyxNQUFNLENBQUNRLENBQUMsQ0FBQyxJQUFJLENBQUNJLENBQUMsQ0FBQy9wQixDQUFDLENBQUMxa0IsRUFBRSxDQUFDZ3VCLFFBQVEsQ0FBQ3RKLENBQUMsQ0FBQ3NKLFFBQVEsQ0FBQyxDQUFDMGdCLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBR2w1QixDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDLElBQUkxTSxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDLHlJQUF5SSxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDL2tCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT29PLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQ3dILE1BQU0sQ0FBQ21QLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUM1YyxXQUFXLENBQUNtTixDQUFDLENBQUNwYixHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDamhCLENBQUMsQ0FBQzhyQyxDQUFDLENBQUM1YyxXQUFXLENBQUNwbEIsQ0FBQyxHQUFHOUosQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzVCxXQUFXLENBQUMsQ0FBQ3RULENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDaEQsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUM0dkMsYUFBYSxDQUFDLFFBQVEsQ0FBQzlsQyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDOEosQ0FBQyxDQUFDeEssUUFBUSxFQUFFd0ssQ0FBQyxDQUFDK2xDLFVBQVUsQ0FBQyxFQUFFLENBQUMvbEMsQ0FBQyxDQUFDcWlDLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUNvYixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDeEssUUFBUSxFQUFFd0ssQ0FBQyxDQUFDK2xDLFVBQVUsQ0FBQyxFQUFFLENBQUMvbEMsQ0FBQyxDQUFDcWlDLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUN6SyxDQUFDLENBQUMsUUFBUSxHQUFHeFcsQ0FBQyxFQUFFLE1BQU0sR0FBR0EsQ0FBQyxFQUFFOEosQ0FBQyxDQUFDaWxCLEtBQUssQ0FBQ2psQixDQUFDLENBQUNxaUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDMkQsV0FBVyxDQUFDaEUsQ0FBQyxDQUFDLFFBQVEsR0FBR3pQLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsRUFBRXZ5QixDQUFDLENBQUNxckIsTUFBTSxDQUFDcnJCLENBQUMsQ0FBQ3FpQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM0RCxZQUFZLENBQUMsTUFBTSxDQUFDaGhCLEtBQUssQ0FBQytjLENBQUMsQ0FBQ3BtQixDQUFDLENBQUNzSixRQUFRLENBQUMwZ0IsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2YSxNQUFNLENBQUMzZSxDQUFDLENBQUNrUCxDQUFDLENBQUNzSixRQUFRLENBQUMwZ0IsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTSxhQUFhLENBQUMsUUFBUSxDQUFDbG1DLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDNWIsQ0FBQyxFQUFFN0wsTUFBTSxDQUFDLENBQUNvK0IsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDcG1CLFFBQVEsQ0FBQ1UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUMsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDWCxRQUFRLENBQUN5c0MsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLEVBQUUsQ0FBQzdsQixDQUFDLENBQUMsTUFBTSxDQUFDMjFCLE9BQU8sQ0FBQ25zQyxDQUFDLENBQUNWLFFBQVEsQ0FBQys4QixDQUFDLENBQUN3VCxVQUFVLENBQUNyNUIsQ0FBQyxDQUFDeXVCLE1BQU0sQ0FBQzZHLENBQUMsQ0FBQ3BtQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ203QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNwUyxJQUFJLENBQUMsQ0FBQyxDQUFDMWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzhtQixVQUFVLENBQUNqMEIsQ0FBQyxDQUFDaTBCLFVBQVUsQ0FBQyxDQUFDLENBQUNELFNBQVMsQ0FBQ2gwQixDQUFDLENBQUNnMEIsU0FBUyxDQUFDLENBQUMsQ0FBQ2pGLEtBQUssQ0FBQy91QixDQUFDLENBQUNzdkMsVUFBVSxDQUFDLENBQUMsQ0FBQ25hLE1BQU0sQ0FBQ24xQixDQUFDLENBQUN1dkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdwQixDQUFDLENBQUMxa0IsRUFBRSxDQUFDZ3VCLFFBQVEsQ0FBQyxRQUFRLENBQUN4WSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ3k1QixFQUFFLENBQUMsT0FBT1IsQ0FBQyxDQUFDdHRDLEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDb1UsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzJULENBQUMsQ0FBQyxDQUFDLElBQUk2NEIsQ0FBQyxDQUFDbGIsQ0FBQyxDQUFDK2IsQ0FBQyxDQUFDQyxDQUFDLENBQUNsbUMsQ0FBQyxDQUFDdEIsQ0FBQyxDQUFDbVIsQ0FBQyxDQUFDNEwsQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDeTVCLEVBQUUsQ0FBQyxDQUFDL29DLENBQUMsQ0FBQ3dlLENBQUMsQ0FBQ3NKLFFBQVEsQ0FBQ2doQixhQUFhLENBQUN4NUIsQ0FBQyxDQUFDNDVCLE1BQU0sQ0FBQyxDQUFDQyxDQUFDLENBQUMzcUIsQ0FBQyxDQUFDc0osUUFBUSxDQUFDNGdCLGFBQWEsQ0FBQzFvQyxDQUFDLENBQUMsQ0FBQ25KLENBQUMsQ0FBQyxDQUFDeVksQ0FBQyxDQUFDODVCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQ2pyQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNrckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU81bkMsQ0FBQyxDQUFDMHpCLENBQUMsQ0FBQ3ZpQixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDc04sY0FBYyxFQUFFLENBQUM1USxDQUFDLENBQUNnNkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDcmMsQ0FBQyxDQUFDeHJCLENBQUMsQ0FBQ29tQixLQUFLLENBQUNtaEIsQ0FBQyxDQUFDdm5DLENBQUMsQ0FBQ3dzQixNQUFNLENBQUNnYixDQUFDLENBQUN4bkMsQ0FBQyxDQUFDczhCLE1BQU0sQ0FBQ2g3QixDQUFDLENBQUN5YixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDc3RDLENBQUMsQ0FBQyxDQUFDenFCLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJMmpCLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDblIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR3JGLENBQUMsQ0FBQ3NCLE1BQU0sRUFBRSxDQUFDdEIsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ3BoQyxJQUFJLENBQUM5SyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDeEIsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyt0QyxDQUFDLENBQUN6aEMsSUFBSSxDQUFDOUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ3hCLE1BQU0sQ0FBQ3dCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUNwaEMsSUFBSSxDQUFDOUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VzQyxDQUFDLENBQUN6aEMsSUFBSSxDQUFDOUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMwbEIsQ0FBQyxDQUFDL04sQ0FBQyxDQUFDbk4sSUFBSSxDQUFDeEssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUM2TixDQUFDLENBQUNuTixJQUFJLENBQUN4SyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V3QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzdxQixDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDcTRCLENBQUMsQ0FBQ3JrQyxJQUFJLENBQUN4SyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzZ1QyxDQUFDLENBQUNya0MsSUFBSSxDQUFDeEssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHakMsQ0FBQyxDQUFDdUQsTUFBTSxFQUFFLENBQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBR3lZLENBQUMsQ0FBQ2c2QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUN2bUMsQ0FBQyxDQUFDNG9CLElBQUksRUFBRXNCLENBQUMsQ0FBQyxRQUFRLEdBQUczZCxDQUFDLENBQUNnNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUN2bUMsQ0FBQyxDQUFDNG9CLElBQUksRUFBRXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUczZCxDQUFDLENBQUNnNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDdm1DLENBQUMsQ0FBQ2tELEdBQUcsRUFBRStpQyxDQUFDLENBQUMsUUFBUSxHQUFHMTVCLENBQUMsQ0FBQ2c2QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3ZtQyxDQUFDLENBQUNrRCxHQUFHLEVBQUUraUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDYixDQUFDLENBQUN2bEMsQ0FBQyxDQUFDeW1DLENBQUMsQ0FBQ0MsRUFBRSxDQUFDcmMsQ0FBQyxDQUFDK2IsQ0FBQyxDQUFDLENBQUNqbUMsQ0FBQyxDQUFDNG9CLElBQUksRUFBRXdjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BsQyxDQUFDLENBQUNrRCxHQUFHLEVBQUVraUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3R0QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJczZCLENBQUMsQ0FBQzZQLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDN21CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQy9OLENBQUMsQ0FBQzQwQixDQUFDLENBQUMrQyxVQUFVLENBQUMsQ0FBQyxDQUFDVCxDQUFDLENBQUN0QyxDQUFDLENBQUNnRCxXQUFXLENBQUMsQ0FBQyxDQUFDRSxDQUFDLENBQUN6dkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzJJLENBQUMsQ0FBQzNJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUN5d0MsQ0FBQyxDQUFDOTRCLENBQUMsQ0FBQzgzQixDQUFDLENBQUN6dkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQ3F3QyxDQUFDLENBQUN0aEIsS0FBSyxDQUFDMmhCLENBQUMsQ0FBQzdCLENBQUMsQ0FBQ2xtQyxDQUFDLENBQUMzSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDcXdDLENBQUMsQ0FBQ2xiLE1BQU0sQ0FBQ3diLENBQUMsQ0FBQ2pyQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDb0gsQ0FBQyxDQUFDLENBQUMybUMsQ0FBQyxDQUFDOW1DLENBQUMsQ0FBQ3ltQyxDQUFDLENBQUNNLEVBQUUsQ0FBQ3RFLENBQUMsQ0FBQytDLFVBQVUsQ0FBQyxDQUFDLENBQUMvQyxDQUFDLENBQUNnRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLzRCLENBQUMsQ0FBQ3E2QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNGLENBQUMsQ0FBQzlkLElBQUksRUFBRWxiLENBQUMsQ0FBQyxRQUFRLEdBQUduQixDQUFDLENBQUNxNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNGLENBQUMsQ0FBQzlkLElBQUksRUFBRWxiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUduQixDQUFDLENBQUNxNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDRixDQUFDLENBQUN4akMsR0FBRyxFQUFFMGhDLENBQUMsQ0FBQyxRQUFRLEdBQUdyNEIsQ0FBQyxDQUFDcTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDRixDQUFDLENBQUN4akMsR0FBRyxFQUFFMGhDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhCLENBQUMsQ0FBQzlkLElBQUksRUFBRStkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0QsQ0FBQyxDQUFDeGpDLEdBQUcsRUFBRXlqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2VSxDQUFDLENBQUMsQ0FBQzFOLFVBQVUsQ0FBQzhnQixDQUFDLENBQUNxQixTQUFTLENBQUNub0MsQ0FBQyxDQUFDLENBQUMrYyxDQUFDLENBQUMzakIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQytILENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN0ZCxRQUFRLENBQUNqeEIsQ0FBQyxDQUFDK0wsQ0FBQyxDQUFDLENBQUMsRUFBRTRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUN0ZCxRQUFRLENBQUNqeEIsQ0FBQyxDQUFDK0wsQ0FBQyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDMndDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUM1YyxDQUFDLENBQUM2YyxZQUFZLENBQUNkLENBQUMsQ0FBQ2UsU0FBUyxDQUFDdDVCLENBQUMsQ0FBQ3U1QixVQUFVLENBQUNyQyxDQUFDLENBQUNzQyxpQkFBaUIsQ0FBQzlVLENBQUMsQ0FBQytVLGNBQWMsQ0FBQ1gsQ0FBQyxDQUFDWSxlQUFlLENBQUNYLENBQUMsQ0FBQ3pMLE1BQU0sQ0FBQyxDQUFDb0ssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNDLEVBQUUsQ0FBQ3I2QixDQUFDLENBQUNxNkIsRUFBRSxDQUFDTCxFQUFFLENBQUNoNkIsQ0FBQyxDQUFDZzZCLEVBQUUsQ0FBQ0osTUFBTSxDQUFDbHBDLENBQUMsQ0FBQ2hGLElBQUksQ0FBQ3FxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQy8xQixDQUFDLENBQUNtdkIsS0FBSyxFQUFFLENBQUN1RyxDQUFDLENBQUMsUUFBUSxDQUFDeG1CLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUNxbUMsQ0FBQyxDQUFDdGQsSUFBSSxDQUFDOGQsQ0FBQyxDQUFDOWQsSUFBSSxDQUFDN3lCLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ3FxQixDQUFDLENBQUN4YyxDQUFDLENBQUMwa0IsQ0FBQyxDQUFDOFQsQ0FBQyxDQUFDaGpDLEdBQUcsQ0FBQ3dqQyxDQUFDLENBQUN4akMsR0FBRyxDQUFDKytCLENBQUMsQ0FBQzdQLENBQUMsQ0FBQzZULENBQUMsQ0FBQ3JCLENBQUMsQ0FBQ1EsQ0FBQyxDQUFDLENBQUNsc0MsTUFBTSxDQUFDLENBQUNncEMsT0FBTyxDQUFDcnlCLENBQUMsQ0FBQytZLElBQUksQ0FBQ3NkLENBQUMsQ0FBQ3RkLElBQUksQ0FBQzFsQixHQUFHLENBQUNnakMsQ0FBQyxDQUFDaGpDLEdBQUcsQ0FBQzRoQixLQUFLLENBQUNvRixDQUFDLENBQUNnQixNQUFNLENBQUMrYSxDQUFDLENBQUMsQ0FBQy9ELE9BQU8sQ0FBQyxDQUFDQSxPQUFPLENBQUNJLENBQUMsQ0FBQzFaLElBQUksQ0FBQzhkLENBQUMsQ0FBQzlkLElBQUksQ0FBQzFsQixHQUFHLENBQUN3akMsQ0FBQyxDQUFDeGpDLEdBQUcsQ0FBQzRoQixLQUFLLENBQUNwWCxDQUFDLENBQUN3ZCxNQUFNLENBQUMwWixDQUFDLENBQUMsQ0FBQ3lDLFVBQVUsQ0FBQyxDQUFDLENBQUN0eEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzhKLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQ3luQyxRQUFRLENBQUMsQ0FBQyxDQUFDckYsQ0FBQyxDQUFDLEtBQUssQ0FBQzdQLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDMWtCLENBQUMsQ0FBQ3djLENBQUMsRUFBRUEsQ0FBQyxDQUFDbHRCLENBQUMsQ0FBQzZDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxFQUFFLENBQUNxdkMsQ0FBQyxDQUFDaUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDekMsQ0FBQyxDQUFDcUIsQ0FBQyxFQUFFQSxDQUFDLENBQUNqcEMsQ0FBQyxDQUFDbzFCLENBQUMsQ0FBQzZQLENBQUMsQ0FBQyxFQUFFLENBQUNtRCxDQUFDLENBQUNrQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUNsQyxDQUFDLENBQUNtQyxTQUFTLENBQUMxRixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDLENBQUM3QyxDQUFDLENBQUNqSCxDQUFDLENBQUMsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNvMUIsQ0FBQyxDQUFDLENBQUNwMUIsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQzExQixDQUFDLENBQUNtdkIsS0FBSyxDQUFDMW1DLElBQUksQ0FBQyxJQUFJLENBQUN5bUIsQ0FBQyxDQUFDMnBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlDLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQ3ZmLENBQUMsQ0FBQzdpQixNQUFNLENBQUM4dEMsQ0FBQyxDQUFDLENBQUNoTCxLQUFLLENBQUN1RyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3RkLFFBQVEsQ0FBQyxDQUFDeWlCLEdBQUcsQ0FBQyxDQUFDNWUsSUFBSSxDQUFDLFFBQVEsQ0FBQ25OLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3NtQyxNQUFNLENBQUM1NUIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQy84QixRQUFRLENBQUMrOEIsQ0FBQyxDQUFDcEksVUFBVSxDQUFDb0ksQ0FBQyxDQUFDNEksTUFBTSxDQUFDcFMsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQ28xQixDQUFDLENBQUN0TixLQUFLLENBQUNtZCxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDbU4sSUFBSSxDQUFDL29CLENBQUMsQ0FBQ3FuQyxpQkFBaUIsQ0FBQ3hpQixVQUFVLENBQUM0ZCxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQ3YwQixDQUFDLENBQUN1MEIsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQ3NuQyxjQUFjLENBQUNucUMsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDc25DLGNBQWMsQ0FBQ25xQyxDQUFDLENBQUNzbEMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU1MEIsQ0FBQyxDQUFDLENBQUMzWCxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDbU4sSUFBSSxDQUFDMFosQ0FBQyxDQUFDemlDLENBQUMsQ0FBQ3NuQyxjQUFjLENBQUNucUMsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDbU4sSUFBSSxFQUFFMFosQ0FBQyxDQUFDdnNDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ21OLElBQUksQ0FBQ2xiLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFNDBCLENBQUMsQ0FBQy8xQixDQUFDLENBQUMrMUIsQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQ25CLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQzZDLENBQUMsQ0FBQ3NuQyxjQUFjLENBQUM1NkIsQ0FBQyxDQUFDKzFCLENBQUMsQ0FBQyxDQUFDLENBQUM3bUIsQ0FBQyxDQUFDbU4sSUFBSSxFQUFFMFosQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQyxDQUFDLENBQUMrTixDQUFDLENBQUNtTixJQUFJLEVBQUVsYixDQUFDLENBQUMrTixDQUFDLENBQUNtTixJQUFJLENBQUNpWixDQUFDLENBQUNwbUIsQ0FBQyxDQUFDbU4sSUFBSSxDQUFDcVosQ0FBQyxDQUFDeG1CLENBQUMsQ0FBQ21OLElBQUksQ0FBQyxDQUFDLENBQUMxbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQ3VZLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3NtQyxNQUFNLENBQUM1NUIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQy84QixRQUFRLENBQUMrOEIsQ0FBQyxDQUFDckksU0FBUyxDQUFDcUksQ0FBQyxDQUFDNEksTUFBTSxDQUFDOTNCLEdBQUcsQ0FBQ2xHLENBQUMsQ0FBQzZDLENBQUMsQ0FBQ3NtQyxNQUFNLENBQUNqYixNQUFNLENBQUMrVyxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDdlksR0FBRyxDQUFDckQsQ0FBQyxDQUFDcW5DLGlCQUFpQixDQUFDTCxTQUFTLENBQUN2RSxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQ3YwQixDQUFDLENBQUN1MEIsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQ3VuQyxlQUFlLENBQUNwcUMsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDdW5DLGVBQWUsQ0FBQ3BxQyxDQUFDLENBQUNzbEMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU1MEIsQ0FBQyxDQUFDLENBQUMzWCxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdlksR0FBRyxDQUFDby9CLENBQUMsQ0FBQ3ppQyxDQUFDLENBQUN1bkMsZUFBZSxDQUFDcHFDLENBQUMsQ0FBQ3VQLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQ3ZZLEdBQUcsRUFBRW8vQixDQUFDLENBQUN2c0MsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdlksR0FBRyxDQUFDd0ssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU0MEIsQ0FBQyxDQUFDLzFCLENBQUMsQ0FBQysxQixDQUFDLENBQUM1MEIsQ0FBQyxDQUFDbkIsQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDdW5DLGVBQWUsQ0FBQzc2QixDQUFDLENBQUMrMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzdtQixDQUFDLENBQUN2WSxHQUFHLEVBQUVvL0IsQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQyxDQUFDLENBQUMrTixDQUFDLENBQUN2WSxHQUFHLEVBQUV3SyxDQUFDLENBQUMrTixDQUFDLENBQUN2WSxHQUFHLENBQUMyK0IsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQysrQixDQUFDLENBQUN4bUIsQ0FBQyxDQUFDdlksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDdWtDLElBQUksQ0FBQyxDQUFDN2UsSUFBSSxDQUFDLFFBQVEsQ0FBQ25OLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQzFNLENBQUMsQ0FBQ3NtQyxNQUFNLENBQUN0RSxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDeXVCLE1BQU0sQ0FBQ3BTLElBQUksQ0FBQ3JjLENBQUMsQ0FBQ3lkLFVBQVUsQ0FBQ2lZLENBQUMsQ0FBQzExQixDQUFDLENBQUN1WSxLQUFLLENBQUN3ZCxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDbFgsUUFBUSxDQUFDa1gsQ0FBQyxDQUFDeWQsVUFBVSxDQUFDemQsQ0FBQyxDQUFDeXVCLE1BQU0sQ0FBQ3BTLElBQUksQ0FBQ2xiLENBQUMsQ0FBQytOLENBQUMsQ0FBQ21OLElBQUksQ0FBQy9vQixDQUFDLENBQUNxbkMsaUJBQWlCLENBQUN4aUIsVUFBVSxDQUFDa2dCLENBQUMsQ0FBQ2wzQixDQUFDLENBQUM0MEIsQ0FBQyxDQUFDOEMsQ0FBQyxDQUFDMTNCLENBQUMsQ0FBQzdOLENBQUMsQ0FBQ3NuQyxjQUFjLENBQUNsRixDQUFDLENBQUNLLENBQUMsQ0FBQ2tELENBQUMsQ0FBQyxNQUFNLEdBQUczbEMsQ0FBQyxDQUFDK21DLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL21DLENBQUMsQ0FBQ21uQyxTQUFTLENBQUMsT0FBTyxHQUFHbm5DLENBQUMsQ0FBQyttQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMvbUMsQ0FBQyxDQUFDbW5DLFNBQVMsQ0FBQyxDQUFDLENBQUM5YyxDQUFDLENBQUMsTUFBTSxHQUFHcnFCLENBQUMsQ0FBQzBtQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMxbUMsQ0FBQyxDQUFDaW5DLFdBQVcsQ0FBQyxPQUFPLEdBQUdqbkMsQ0FBQyxDQUFDMG1DLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMW1DLENBQUMsQ0FBQ2luQyxXQUFXLENBQUMsQ0FBQyxDQUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwbUMsQ0FBQyxDQUFDbTdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0SixDQUFDLENBQUMsQ0FBQzd1QyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDbU4sSUFBSSxDQUFDNGMsQ0FBQyxDQUFDdGIsQ0FBQyxDQUFDK2IsQ0FBQyxDQUFDcG1DLENBQUMsQ0FBQ3NuQyxjQUFjLENBQUNsRixDQUFDLENBQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlyQyxDQUFDLEVBQUVpSCxDQUFDLENBQUM0bkMsQ0FBQyxDQUFDLENBQUM3dUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzBsQixDQUFDLENBQUNtTixJQUFJLEVBQUU0YyxDQUFDLENBQUN0YixDQUFDLENBQUMrYixDQUFDLENBQUMsQ0FBQyxDQUFDYixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNoVCxDQUFDLENBQUMzVyxDQUFDLENBQUNtTixJQUFJLENBQUMvb0IsQ0FBQyxDQUFDcW5DLGlCQUFpQixDQUFDeGlCLFVBQVUsQ0FBQzhnQixDQUFDLENBQUN0YixDQUFDLENBQUMrYixDQUFDLENBQUMzRCxDQUFDLENBQUMsQ0FBQ2xRLENBQUMsQ0FBQyxDQUFDLEVBQUVnVCxDQUFDLENBQUNwb0MsQ0FBQyxDQUFDbzFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzNXLENBQUMsQ0FBQ21OLElBQUksRUFBRTRjLENBQUMsQ0FBQ3RiLENBQUMsQ0FBQytiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQy9pQyxHQUFHLENBQUMsUUFBUSxDQUFDdVksQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDc21DLE1BQU0sQ0FBQ3RFLENBQUMsQ0FBQ3QxQixDQUFDLENBQUN5dUIsTUFBTSxDQUFDOTNCLEdBQUcsQ0FBQ3FKLENBQUMsQ0FBQ3dkLFNBQVMsQ0FBQ2tZLENBQUMsQ0FBQzExQixDQUFDLENBQUMyZSxNQUFNLENBQUNvWCxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDbFgsUUFBUSxDQUFDa1gsQ0FBQyxDQUFDd2QsU0FBUyxDQUFDeGQsQ0FBQyxDQUFDeXVCLE1BQU0sQ0FBQzkzQixHQUFHLENBQUN3SyxDQUFDLENBQUMrTixDQUFDLENBQUN2WSxHQUFHLENBQUNyRCxDQUFDLENBQUNxbkMsaUJBQWlCLENBQUNMLFNBQVMsQ0FBQ2pDLENBQUMsQ0FBQ2wzQixDQUFDLENBQUM0MEIsQ0FBQyxDQUFDOEMsQ0FBQyxDQUFDMTNCLENBQUMsQ0FBQzdOLENBQUMsQ0FBQ3VuQyxlQUFlLENBQUNuRixDQUFDLENBQUNLLENBQUMsQ0FBQ2tELENBQUMsQ0FBQyxLQUFLLEdBQUczbEMsQ0FBQyxDQUFDK21DLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzFjLENBQUMsQ0FBQ3NiLENBQUMsQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQ29uQyxVQUFVLENBQUMsUUFBUSxHQUFHcG5DLENBQUMsQ0FBQyttQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMvbUMsQ0FBQyxDQUFDb25DLFVBQVUsQ0FBQyxDQUFDLENBQUNoQixDQUFDLENBQUMsS0FBSyxHQUFHcG1DLENBQUMsQ0FBQzBtQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMxbUMsQ0FBQyxDQUFDa25DLFlBQVksQ0FBQyxRQUFRLEdBQUdsbkMsQ0FBQyxDQUFDMG1DLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMW1DLENBQUMsQ0FBQ2tuQyxZQUFZLENBQUMsQ0FBQyxDQUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNybUMsQ0FBQyxDQUFDbTdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0SixDQUFDLENBQUMsQ0FBQ3hTLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQ2duQixDQUFDLENBQUMrYixDQUFDLENBQUNDLENBQUMsQ0FBQ3JtQyxDQUFDLENBQUN1bkMsZUFBZSxDQUFDbkYsQ0FBQyxDQUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLEVBQUVwMUIsQ0FBQyxDQUFDNG5DLENBQUMsQ0FBQyxDQUFDeFMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzNXLENBQUMsQ0FBQ3ZZLEdBQUcsRUFBRWduQixDQUFDLENBQUMrYixDQUFDLENBQUNDLENBQUMsQ0FBQyxDQUFDLENBQUNkLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3J2QyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdlksR0FBRyxDQUFDckQsQ0FBQyxDQUFDcW5DLGlCQUFpQixDQUFDTCxTQUFTLENBQUMzYyxDQUFDLENBQUMrYixDQUFDLENBQUNDLENBQUMsQ0FBQzVELENBQUMsQ0FBQyxDQUFDdnNDLENBQUMsQ0FBQyxDQUFDLEVBQUVxdkMsQ0FBQyxDQUFDcG9DLENBQUMsQ0FBQ2pILENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzBsQixDQUFDLENBQUN2WSxHQUFHLEVBQUVnbkIsQ0FBQyxDQUFDK2IsQ0FBQyxDQUFDQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3dCLE9BQU8sQ0FBQyxDQUFDOWUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNuTixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdGQsUUFBUSxDQUFDMGlCLElBQUksQ0FBQzdlLElBQUksQ0FBQzF3QixLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQ3NqQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdGQsUUFBUSxDQUFDeWlCLEdBQUcsQ0FBQzVlLElBQUksQ0FBQzF3QixLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDK0ssR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN1WSxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdGQsUUFBUSxDQUFDMGlCLElBQUksQ0FBQ3ZrQyxHQUFHLENBQUNoTCxLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQ3NqQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdGQsUUFBUSxDQUFDeWlCLEdBQUcsQ0FBQ3RrQyxHQUFHLENBQUNoTCxLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NqQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdGQsUUFBUSxDQUFDdEosQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQzZpQixDQUFDLENBQUN6VyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQytQLElBQUksQ0FBQzBHLENBQUMsQ0FBQ3pXLElBQUksQ0FBQ2MsWUFBWSxDQUFDMlYsQ0FBQyxDQUFDelcsSUFBSSxDQUFDYyxZQUFZLENBQUMsUUFBUSxDQUFDakcsQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUM5SixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzBsQixDQUFDLENBQUMxRyxJQUFJLENBQUNoZixDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUNBLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzFHLElBQUksQ0FBQ2xWLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzFrQixFQUFFLENBQUM2QixNQUFNLENBQUMsQ0FBQyt1QyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlsc0IsQ0FBQyxDQUFDLGVBQWUsR0FBRzVuQixRQUFRLENBQUNxQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUM4a0IsRUFBRSxDQUFDUyxDQUFDLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDQSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMEIsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lxQixlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3ZzQixHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJdXBCLENBQUMsQ0FBQyxhQUFhLENBQUNRLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQ0ksQ0FBQyxDQUFDLHFCQUFxQixDQUFDdGIsQ0FBQyxDQUFDek8sQ0FBQyxDQUFDQSxDQUFDLENBQUMwcEIsT0FBTyxDQUFDLENBQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3pwQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxTQUFTOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDZ1QsQ0FBQyxDQUFDdmxDLENBQUMsQ0FBQ3RLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFa21CLENBQUMsQ0FBQzFsQixDQUFDLEVBQUUsQ0FBQzhKLENBQUMsQ0FBQ2dvQyxHQUFHLENBQUMsSUFBSSxDQUFDaG9DLENBQUMsQ0FBQ2dvQyxHQUFHLENBQUMsQ0FBQ3BzQixDQUFDLENBQUMyVyxDQUFDLENBQUMwVixLQUFLLENBQUMsQ0FBQyxDQUFDcnNCLENBQUMsQ0FBQzJKLFVBQVUsQ0FBQzNKLENBQUMsQ0FBQyxDQUFDd2hCLEtBQUssQ0FBQ3hoQixDQUFDLENBQUMsQ0FBQzViLENBQUMsQ0FBQ2dvQyxHQUFHLENBQUN6VixDQUFDLENBQUMyVixHQUFHLENBQUMsQ0FBQ3RzQixDQUFDLENBQUMyVyxDQUFDLENBQUMyVixHQUFHLENBQUMsQ0FBQzNWLENBQUMsQ0FBQzJWLEdBQUcsQ0FBQyxDQUFDLENBQUN0c0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDL0ssR0FBRyxDQUFDK0ssQ0FBQyxDQUFDL0ssR0FBRyxDQUFDNUwsQ0FBQyxDQUFDLENBQUMsU0FBUzJXLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzFrQixDQUFDLENBQUMsQ0FBQyxDQUFDbkIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQzRWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPanlDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDc0YsV0FBVyxDQUFDLENBQUMsQ0FBQzRxQyxDQUFDLENBQUMzRCxDQUFDLENBQUMsUUFBUSxDQUFDN21CLENBQUMsQ0FBQ29tQixDQUFDLENBQUMsQ0FBQyxJQUFJN2tDLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUNKLENBQUMsQ0FBQ29HLEVBQUUsQ0FBQzFuQyxJQUFJLENBQUN4SyxDQUFDLENBQUMsQ0FBQ3VzQyxDQUFDLENBQUNMLENBQUMsRUFBRUosQ0FBQyxDQUFDcnNCLEtBQUssQ0FBQ3lzQixDQUFDLENBQUMsQ0FBQ3YwQixDQUFDLENBQUNtMEIsQ0FBQyxDQUFDcUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPNUYsQ0FBQyxDQUFDLENBQUN0bEMsQ0FBQyxDQUFDbzFCLENBQUMsQ0FBQzFrQixDQUFDLENBQUMsQ0FBQzQwQixDQUFDLENBQUMsQ0FBQ2xRLENBQUMsQ0FBQ3dTLENBQUMsQ0FBQ2wzQixDQUFDLENBQUMsQ0FBQ3JNLEtBQUssQ0FBQyxDQUFDckUsQ0FBQyxDQUFDNG5DLENBQUMsQ0FBQ2wzQixDQUFDLENBQUMsQ0FBQ3JNLEtBQUssQ0FBQyxDQUFDa0wsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQzRWLEtBQUssQ0FBQ2hyQyxDQUFDLENBQUNnckMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNub0MsQ0FBQyxDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQ2xWLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBR2tWLENBQUMsQ0FBQ3hMLElBQUksQ0FBQyxDQUFDLEVBQUUwYSxDQUFDLENBQUM3aUIsTUFBTSxDQUFDMlQsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3NHLFdBQVcsQ0FBQyxDQUFDL1YsQ0FBQyxDQUFDLENBQUN5UCxDQUFDLENBQUM5ckMsQ0FBQyxDQUFDLENBQUMsU0FBU3dXLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUM0YixDQUFDLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJb21CLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsNEpBQTRKLENBQUNpbEMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDSyxDQUFDLENBQUMsQ0FBQyxDQUFDMkYsRUFBRSxDQUFDLHFGQUFxRixDQUFDenlCLEtBQUssQ0FBQyxRQUFRLENBQUNpRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd3NCLEVBQUUsQ0FBQyw2R0FBNkcsQ0FBQ3p5QixLQUFLLENBQUMsUUFBUSxDQUFDaUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3dzQixFQUFFLENBQUMsMENBQTBDLENBQUN6eUIsS0FBSyxDQUFDLFFBQVEsQ0FBQ2lHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQ2tVLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2tVLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2tVLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd3NCLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQ3p5QixLQUFLLENBQUMsUUFBUSxDQUFDaUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDa1UsUUFBUSxDQUFDbFUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNrVSxRQUFRLENBQUNsVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2tVLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3c0IsRUFBRSxDQUFDLDJHQUEyRyxDQUFDQyxLQUFLLENBQUMsTUFBTSxDQUFDMXlCLEtBQUssQ0FBQyxRQUFRLENBQUNpRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMvTixDQUFDLENBQUMrTixDQUFDLENBQUMyc0IsS0FBSyxDQUFDLFFBQVEsQ0FBQ3ZvQyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSWtQLENBQUMsQ0FBQzJzQixLQUFLLENBQUNyeEMsRUFBRSxDQUFDeWUsS0FBSyxDQUFDM1YsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDcTRCLENBQUMsQ0FBQyxDQUFDeUQsSUFBSSxDQUFDLENBQUMzcEIsS0FBSyxDQUFDLENBQUM0cEIsR0FBRyxDQUFDLENBQUM5Z0MsR0FBRyxDQUFDLENBQUMsQ0FBQ2pTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQ2d6QyxLQUFLLENBQUMsQ0FBQy9nQyxHQUFHLENBQUMsQ0FBQyxDQUFDalMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDaXpDLElBQUksQ0FBQyxDQUFDaGhDLEdBQUcsQ0FBQyxDQUFDLENBQUNqUyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDa3pDLElBQUksQ0FBQyxDQUFDL3BCLEtBQUssQ0FBQyxDQUFDZ3FCLEdBQUcsQ0FBQyxDQUFDbGhDLEdBQUcsQ0FBQyxDQUFDLENBQUNqUyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUNvekMsVUFBVSxDQUFDLENBQUNuaEMsR0FBRyxDQUFDLENBQUMsQ0FBQ2pTLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQ3F6QyxTQUFTLENBQUMsQ0FBQ3BoQyxHQUFHLENBQUMsQ0FBQyxDQUFDalMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNnZDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDMEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDemdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQ29DLE9BQU8sQ0FBQyxDQUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDd2hCLE9BQU8sQ0FBQyxDQUFDZCxHQUFHLENBQUMsR0FBRyxDQUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdEMsQ0FBQyxDQUFDOTNCLENBQUMsQ0FBQ3pZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ2kxQixDQUFDLENBQUN6TyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3cUIsQ0FBQyxDQUFDeHFCLENBQUMsQ0FBQzNqQixJQUFJLENBQUNveUIsQ0FBQyxDQUFDcFQsS0FBSyxDQUFDdU4sT0FBTyxDQUFDLGlDQUFpQyxDQUFDbWhCLENBQUMsQ0FBQzZDLElBQUksQ0FBQ25lLENBQUMsQ0FBQ3BULEtBQUssQ0FBQ2d5QixlQUFlLENBQUNyMEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd3hDLENBQUMsQ0FBQ3JCLENBQUMsQ0FBQyxRQUFRLENBQUNucEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3dCLEtBQUssQ0FBQyxHQUFHLENBQUNvYSxDQUFDLENBQUM1YixDQUFDLENBQUM2ZSxLQUFLLENBQUNxcUIsS0FBSyxDQUFDLENBQUN2aEMsR0FBRyxDQUFDLENBQUMsQ0FBQ2pTLElBQUksQ0FBQyxTQUFTLENBQUNzeUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ242QixDQUFDLENBQUMzVyxFQUFFLENBQUMwa0IsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQzhVLENBQUMsQ0FBQ3hXLFNBQVMsQ0FBQyxDQUFDc2UsS0FBSyxDQUFDLFFBQVEsQ0FBQ2pKLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUNLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQy8xQixDQUFDLEdBQUcxTSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNtb0MsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6N0IsQ0FBQyxDQUFDcFYsTUFBTSxFQUFFb1YsQ0FBQyxDQUFDblgsUUFBUSxDQUFDLEVBQUUsQ0FBQ21YLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDeUssR0FBRyxDQUFDaGEsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzZDLENBQUMsQ0FBQyxDQUFDLElBQUl1bEMsQ0FBQyxDQUFDLElBQUksQ0FBQ0ksQ0FBQyxDQUFDL3BCLENBQUMsQ0FBQ2xtQixJQUFJLENBQUNnWCxDQUFDLENBQUMsQ0FBQzJkLENBQUMsQ0FBQyxJQUFJLENBQUM4ZCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT2hyQyxDQUFDLEdBQUc2QyxDQUFDLEVBQUUsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUN2UCxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDSyxDQUFDLENBQUMsQ0FBQ2tELENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUdBLENBQUMsQ0FBQyxJQUFJLENBQUNod0IsS0FBSyxDQUFDNGMsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxFQUFFczFCLENBQUMsQ0FBQzlvQixRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUd5c0IsQ0FBQyxDQUFDLENBQUNTLENBQUMsQ0FBQ3JCLENBQUMsQ0FBQ3lELElBQUksQ0FBQzNwQixLQUFLLENBQUMsUUFBUSxDQUFDakQsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNxcUIsQ0FBQyxDQUFDcnFCLENBQUMsQ0FBQzJILEdBQUcsQ0FBQyxDQUFDelIsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDMkgsR0FBRyxDQUFDLENBQUMzSCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHMmxDLENBQUMsQ0FBQyxDQUFDajVCLEVBQUUsV0FBV21CLENBQUMsQ0FBQ3U0QixDQUFDLENBQUNyQixDQUFDLENBQUMsUUFBUSxDQUFDbnBCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDd0IsS0FBSyxDQUFDLEVBQUUsQ0FBQytqQyxDQUFDLENBQUN2bEMsQ0FBQyxDQUFDd0IsS0FBSyxDQUFDLENBQUNrTCxDQUFDLENBQUMxTSxDQUFDLENBQUN3QixLQUFLLENBQUMsQ0FBQy9NLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyeEMsQ0FBQyxDQUFDckIsQ0FBQyxDQUFDLFFBQVEsQ0FBQy9rQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsSUFBSXlQLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQy93QixLQUFLLENBQUM0a0MsQ0FBQyxDQUFDN1QsQ0FBQyxDQUFDMVQsS0FBSyxDQUFDLFFBQVEsQ0FBQ2pELENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDdWxDLENBQUMsQ0FBQ3ZELENBQUMsQ0FBQyxFQUFFelAsQ0FBQyxDQUFDN0UsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRzlSLENBQUMsRUFBRSxJQUFJLEVBQUVsUCxDQUFDLENBQUNrUCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMycEIsQ0FBQyxDQUFDdkQsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLENBQUM3RSxFQUFFLENBQUM2WCxDQUFDLENBQUM0QyxLQUFLLENBQUMsQ0FBQzVDLENBQUMsQ0FBQ3ZELENBQUMsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQzJILEdBQUcsQ0FBQyxDQUFDelIsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1bEMsQ0FBQyxDQUFDdkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ2poQixPQUFPLENBQUMsSUFBSSxDQUFDNHFDLENBQUMsQ0FBQ3ZELENBQUMsQ0FBQyxDQUFDdnRDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOHdDLENBQUMsQ0FBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQzRXLElBQUksRUFBRSxDQUFDNUQsQ0FBQyxDQUFDNEMsS0FBSyxDQUFDNVYsQ0FBQyxDQUFDNFcsSUFBSSxDQUFDNUQsQ0FBQyxDQUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQyxDQUFDd00sRUFBRSxDQUFDLFFBQVEsQ0FBQ29QLENBQUMsQ0FBQyxDQUFDLElBQUkxbEIsQ0FBQyxDQUFDMlgsQ0FBQyxDQUFDK04sQ0FBQyxDQUFDLENBQUMyVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPMDVCLENBQUMsQ0FBQ3JCLENBQUMsQ0FBQyxRQUFRLENBQUNucEIsQ0FBQyxDQUFDb21CLENBQUMsQ0FBQyxDQUFDLElBQUk3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUM4ckMsQ0FBQyxDQUFDeGdDLEtBQUssQ0FBQyxDQUFDLE9BQU80Z0MsQ0FBQyxFQUFFLENBQUNqbEMsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3hnQyxLQUFLLENBQUMsRUFBRXdnQyxDQUFDLENBQUN0VSxFQUFFLEVBQUVzVSxDQUFDLENBQUN0VSxFQUFFLENBQUNoaEIsQ0FBQyxDQUFDeTdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDL0IsQ0FBQyxDQUFDcEUsQ0FBQyxDQUFDbmpCLEtBQUssQ0FBQyxRQUFRLENBQUNqRCxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUVrc0MsQ0FBQyxDQUFDbHNDLENBQUMsQ0FBQ3lSLEdBQUcsQ0FBQyxDQUFDNHFCLENBQUMsQ0FBQzZQLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUN5UixHQUFHLENBQUMsR0FBR3hLLENBQUMsQ0FBQ2pILENBQUMsQ0FBQ3lSLEdBQUcsQ0FBQyxDQUFDM0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDNlcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXh0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU9vbUMsQ0FBQyxDQUFDckIsQ0FBQyxDQUFDLFFBQVEsQ0FBQzd1QyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQy93QixLQUFLLENBQUMsRUFBRW9hLENBQUMsQ0FBQ2puQixJQUFJLENBQUN1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdmUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDZ3NDLFVBQVUsQ0FBQyxRQUFRLENBQUN6dEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSXV5QixDQUFDLENBQUMxa0IsQ0FBQyxDQUFDK04sQ0FBQyxDQUFDLENBQUNsUCxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDNlcsTUFBTSxDQUFDLENBQUMsQ0FBQ3BILENBQUMsQ0FBQytDLENBQUMsQ0FBQ3I0QixDQUFDLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDK3JDLEtBQUssQ0FBQyxDQUFDLENBQUNyN0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQ3UwQixDQUFDLENBQUNqbEMsQ0FBQyxDQUFDNmtDLENBQUMsQ0FBQ3hnQyxLQUFLLENBQUMsRUFBRXdnQyxDQUFDLENBQUN0VSxFQUFFLENBQUN2d0IsQ0FBQyxDQUFDZ3JDLEtBQUssQ0FBQyxDQUFDMUYsQ0FBQyxDQUFDTCxDQUFDLENBQUMzdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPODlCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDeGdDLEtBQUssQ0FBQyxDQUFDNGtDLENBQUMsQ0FBQ3BFLENBQUMsQ0FBQ25qQixLQUFLLENBQUMsUUFBUSxDQUFDakQsQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDLENBQUMsSUFBSXMxQixDQUFDLENBQUN0MUIsQ0FBQyxDQUFDL0UsR0FBRyxDQUFDeEssQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ0osQ0FBQyxDQUFDLENBQUNuMEIsQ0FBQyxDQUFDMGtCLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxDQUFDK0MsQ0FBQyxDQUFDUSxDQUFDLENBQUM3NEIsQ0FBQyxDQUFDaFgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHbVksQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHMVEsQ0FBQyxDQUFDc2xDLENBQUMsQ0FBQ1QsQ0FBQyxDQUFDLENBQUNuMEIsQ0FBQyxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDbUQsR0FBRyxFQUFFLENBQUNyNkIsQ0FBQyxDQUFDMVEsQ0FBQyxDQUFDNG5DLENBQUMsQ0FBQ21ELEdBQUcsQ0FBQyxDQUFDLENBQUMvcUMsQ0FBQyxFQUFFNG5DLENBQUMsQ0FBQ21ELEdBQUcsQ0FBQy9xQyxDQUFDLENBQUMwUSxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDbUQsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDL3FDLENBQUMsRUFBRTRuQyxDQUFDLENBQUNtRCxHQUFHLENBQUMsQ0FBQyxDQUFDekYsQ0FBQyxDQUFDVCxDQUFDLENBQUMsQ0FBQzlyQyxDQUFDLENBQUMsQ0FBQzJYLENBQUMsQ0FBQzFRLENBQUMsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDN0MsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQyxDQUFDKzFCLENBQUMsQ0FBQyxDQUFDLENBQUM2RyxLQUFLLENBQUMsUUFBUSxDQUFDdHBDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDbW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJanlDLENBQUMsQ0FBQyxJQUFJLENBQUNpeUMsS0FBSyxDQUFDMXpDLEtBQUssQ0FBQyxDQUFDLENBQUM4OUIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ21ILEdBQUcsQ0FBQyxDQUFDLENBQUNxUCxDQUFDLENBQUNtQixDQUFDLENBQUM3TixDQUFDLENBQUMsQ0FBQ21vQyxLQUFLLENBQUMsT0FBT3Q2QixDQUFDLENBQUMrTixDQUFDLENBQUN6akIsR0FBRyxDQUFDakMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzBsQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMnRCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl2cEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUN6akIsR0FBRyxDQUFDLElBQUksQ0FBQ2d3QyxLQUFLLENBQUMsUUFBUSxDQUFDdnNCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFNGIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRzFsQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDbUgsR0FBRyxDQUFDLENBQUMsQ0FBQzJDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDZ0wsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQ3NvQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJeHBDLENBQUMsQ0FBQyxPQUFPLENBQUM5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDempCLEdBQUcsQ0FBQyxJQUFJLENBQUN5d0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUNodEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUU0YixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDNGIsQ0FBQyxDQUFDaGlCLElBQUksQ0FBQzByQixLQUFLLENBQUMsR0FBRyxDQUFDMUosQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcxbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ21ILEdBQUcsQ0FBQyxDQUFDLENBQUMyQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUNBLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ2dMLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUN1b0MsV0FBVyxDQUFDLFFBQVEsQ0FBQ3pwQyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQ2l5QyxLQUFLLENBQUMxekMsS0FBSyxDQUFDLENBQUMsQ0FBQzg5QixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDbUgsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPMkMsQ0FBQyxFQUFFOUosQ0FBQyxDQUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzQ5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzNXLENBQUMsQ0FBQ3pqQixHQUFHLENBQUNqQyxDQUFDLENBQUMsUUFBUSxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM5bUIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRzhtQixDQUFDLENBQUNwa0IsTUFBTSxDQUFDLEdBQUcsQ0FBQ29rQixDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMxYSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ3BNLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQ3F6QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQ29CLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxN0IsQ0FBQyxDQUFDM1csRUFBRSxDQUFDeWUsS0FBSyxDQUFDdGUsU0FBUyxDQUFDd1csQ0FBQyxDQUFDM1csRUFBRSxDQUFDNnRDLENBQUMsQ0FBQzZELElBQUksQ0FBQ2xiLEVBQUUsQ0FBQyxRQUFRLENBQUM5UixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNsUCxDQUFDLENBQUNrUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDb21CLENBQUMsQ0FBQ3BtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDemUsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd21CLENBQUMsQ0FBQ3hvQyxJQUFJLENBQUM0dEIsR0FBRyxDQUFDK0ssQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsQ0FBQ1MsQ0FBQyxDQUFDN29DLElBQUksQ0FBQzh2QyxHQUFHLENBQUNuWCxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxDQUFDbjBCLENBQUMsQ0FBQ3UwQixDQUFDLENBQUNLLENBQUMsQ0FBQ3NDLENBQUMsQ0FBQzNDLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDOEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ1IsQ0FBQyxDQUFDLE9BQU8va0MsQ0FBQyxDQUFDeWlDLENBQUMsR0FBR0wsQ0FBQyxDQUFDLENBQUMsQ0FBQzdQLENBQUMsR0FBRzZQLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzExQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUNuMEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQ25CLENBQUMsR0FBRzAxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNKLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDMWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMwa0IsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQzNYLENBQUMsQ0FBQyxDQUFDLEdBQUcyWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTAzQixDQUFDLENBQUMxM0IsQ0FBQyxDQUFDazNCLENBQUMsQ0FBQ2wzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ25yQyxJQUFJLENBQUMwckIsS0FBSyxDQUFDdGxCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzlKLENBQUMsQ0FBQ3F2QyxDQUFDLENBQUMsSUFBSSxFQUFFcG9DLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUM0bkMsQ0FBQyxDQUFDNkQsSUFBSSxDQUFDTyxJQUFJLENBQUMsUUFBUSxDQUFDdnRCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUVBLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUVBLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUVBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM0YixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDMWxCLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyVyxDQUFDLENBQUMzVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3plLENBQUMsQ0FBQyxFQUFFLEVBQUVvMUIsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ3E4QixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQyxDQUFDLENBQUM3UCxDQUFDLENBQUNwMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQ3ZELElBQUksQ0FBQzByQixLQUFLLENBQUMsR0FBRyxDQUFDNVksQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQ2psQyxDQUFDLENBQUM2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwRyxJQUFJLENBQUMwckIsS0FBSyxDQUFDLEdBQUcsQ0FBQzVZLENBQUMsQ0FBQzAxQixDQUFDLENBQUNqbEMsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BHLElBQUksQ0FBQzByQixLQUFLLENBQUMsR0FBRyxDQUFDNVksQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQ2psQyxDQUFDLENBQUM2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ29FLENBQUMsQ0FBQ3JCLENBQUMsQ0FBQyxRQUFRLENBQUN4UyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsSUFBSXMxQixDQUFDLENBQUN0MUIsQ0FBQyxDQUFDbVMsS0FBSyxDQUFDMWhCLENBQUMsQ0FBQ3VQLENBQUMsQ0FBQ2xMLEtBQUssQ0FBQ2loQyxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDZ2hCLEVBQUUsQ0FBQ3FYLENBQUMsQ0FBQ3I0QixDQUFDLENBQUN5OEIsSUFBSSxDQUFDdDdCLENBQUMsQ0FBQzNXLEVBQUUsQ0FBQ3E3QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUNBLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2tRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3RsQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDLENBQUNzbEMsQ0FBQyxDQUFDLElBQUksQ0FBQzBGLEtBQUssQ0FBQyxDQUFDLENBQUM1VixDQUFDLEdBQUd2eUIsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDN0MsQ0FBQyxDQUFDLENBQUMxSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUlpWSxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDeG1CLENBQUMsQ0FBQ2xtQixJQUFJLENBQUM2OEIsQ0FBQyxDQUFDLENBQUNnVCxDQUFDLENBQUMsT0FBTyxHQUFHbkQsQ0FBQyxFQUFFLFFBQVEsR0FBR0EsQ0FBQyxDQUFDN1AsQ0FBQyxDQUFDajZCLFNBQVMsQ0FBQ3F0QyxDQUFDLENBQUMsSUFBSSxDQUFDeG9DLENBQUMsQ0FBQyxDQUFDMUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPMnhDLENBQUMsQ0FBQ3BFLENBQUMsQ0FBQyxRQUFRLENBQUNwbUIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSXV5QixDQUFDLENBQUNnVCxDQUFDLENBQUMsUUFBUSxHQUFHbkQsQ0FBQyxDQUFDeG1CLENBQUMsQ0FBQzViLENBQUMsQ0FBQzJILEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTRxQixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDb1QsQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQzJILEdBQUcsQ0FBQyxDQUFDLENBQUNnK0IsQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQzJILEdBQUcsQ0FBQyxDQUFDelIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMra0MsQ0FBQyxDQUFDLENBQUNyNEIsQ0FBQyxDQUFDbUIsQ0FBQyxDQUFDazNCLENBQUMsQ0FBQ1ksQ0FBQyxDQUFDLENBQUMsQ0FBQ2o1QixDQUFDLENBQUN2UCxDQUFDLENBQUMsQ0FBQ3dvQyxDQUFDLENBQUNqNUIsQ0FBQyxDQUFDLENBQUNtQixDQUFDLENBQUM4M0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ1MsQ0FBQyxDQUFDcEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQ2hpQyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQzJYLENBQUMsQ0FBQzNXLEVBQUUsQ0FBQzhJLENBQUMsQ0FBQyxFQUFFLENBQUM2TixDQUFDLENBQUMzVyxFQUFFLENBQUM4SSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxJQUFJczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUN5ZSxDQUFDLENBQUNsbUIsSUFBSSxDQUFDZ1gsQ0FBQyxDQUFDLENBQUMrMUIsQ0FBQyxDQUFDLE9BQU8sR0FBR3ppQyxDQUFDLENBQUMsSUFBSSxDQUFDMnBDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDcFgsQ0FBQyxDQUFDMWtCLENBQUMsQ0FBQyxJQUFJLENBQUM0MEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDc0MsQ0FBQyxDQUFDbDNCLENBQUMsQ0FBQzNYLENBQUMsQ0FBQ3lSLEdBQUcsQ0FBQyxDQUFDLE1BQU0sV0FBVyxHQUFHeEssQ0FBQyxDQUFDNG5DLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRzVuQyxDQUFDLEVBQUUsQ0FBQ3VQLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDdlgsSUFBSSxDQUFDLElBQUksQ0FBQzR2QyxDQUFDLENBQUMsQ0FBQzVuQyxDQUFDLENBQUN5ZSxDQUFDLENBQUNsbUIsSUFBSSxDQUFDZ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUVBLENBQUMsRUFBRXhXLENBQUMsQ0FBQ3laLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUd4UyxDQUFDLEVBQUUsQ0FBQzZrQyxDQUFDLENBQUNJLENBQUMsQ0FBQzFoQyxJQUFJLENBQUNnTSxDQUFDLENBQUMsQ0FBQ3MxQixDQUFDLEVBQUUsQ0FBQ3QxQixDQUFDLENBQUNxNEIsQ0FBQyxDQUFDeGYsVUFBVSxDQUFDeWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNuMEIsQ0FBQyxDQUFDM1gsQ0FBQyxDQUFDeVIsR0FBRyxDQUFDLENBQUMrRSxDQUFDLENBQUMsSUFBSSxDQUFDKzFCLENBQUMsQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDZ1EsSUFBSSxDQUFDLFFBQVEsQ0FBQzdkLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUM4SixDQUFDLENBQUN6RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM2cUMsQ0FBQyxDQUFDbHdDLENBQUMsQ0FBQyxRQUFRLENBQUM4SixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMyTSxRQUFRLENBQUNyeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQytlLEdBQUcsQ0FBQyxRQUFRLENBQUNqVixDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxJQUFJczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxHQUFHMTFCLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBR2tQLENBQUMsQ0FBQ2xtQixJQUFJLENBQUNnWCxDQUFDLENBQUMsRUFBRSxDQUFDczFCLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ21CLENBQUMsQ0FBQ20wQixDQUFDLEVBQUV0MUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2k1QixDQUFDLENBQUM2QyxJQUFJLEVBQUUsQ0FBQyxHQUFHOTdCLENBQUMsQ0FBQ3k3QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNockMsQ0FBQyxDQUFDLGlCQUFpQixHQUFHakgsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDckosVUFBVSxDQUFDcUosQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHb2lDLENBQUMsRUFBRSxhQUFhLEdBQUdBLENBQUMsQ0FBQyxFQUFFamxDLENBQUMsRUFBRUEsQ0FBQyxDQUFDOFosS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDbXJCLENBQUMsQ0FBQ3htQixDQUFDLENBQUN6RSxHQUFHLENBQUNoYSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDQSxDQUFDLENBQUN4RyxVQUFVLENBQUMsS0FBSyxDQUFDOHJDLENBQUMsQ0FBQyxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDQSxDQUFDLENBQUM0OEIsS0FBSyxDQUFDbEgsQ0FBQyxFQUFFLGFBQWEsR0FBR0EsQ0FBQyxDQUFDQSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMxMUIsQ0FBQyxDQUFDQSxDQUFDLENBQUM2OEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUN2cEMsQ0FBQyxDQUFDaVgsS0FBSyxDQUFDL2dCLENBQUMsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDLEtBQUssQ0FBQysxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN21CLENBQUMsQ0FBQ3FPLEVBQUUsQ0FBQ0QsSUFBSSxDQUFDOXpCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzhKLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUM0cEMsU0FBUyxFQUFFLENBQUM1cEMsQ0FBQyxDQUFDbUgsS0FBSyxDQUFDMEcsQ0FBQyxDQUFDN04sQ0FBQyxDQUFDNUgsSUFBSSxDQUFDbEMsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUNwSCxHQUFHLENBQUNpVixDQUFDLENBQUM3TixDQUFDLENBQUNwSCxHQUFHLENBQUMsQ0FBQ29ILENBQUMsQ0FBQzRwQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2h1QixDQUFDLENBQUMyTSxRQUFRLENBQUNyeUIsQ0FBQyxDQUFDLENBQUMrZSxHQUFHLENBQUNqVixDQUFDLENBQUM1SCxJQUFJLENBQUM0SCxDQUFDLENBQUNtSCxLQUFLLENBQUNraUMsVUFBVSxDQUFDcnBDLENBQUMsQ0FBQ3BILEdBQUcsQ0FBQ29ILENBQUMsQ0FBQytwQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsYyxDQUFDLENBQUNnUSxJQUFJLENBQUMxZ0IsQ0FBQyxDQUFDLENBQUN5ZSxDQUFDLENBQUMyTSxRQUFRLENBQUNzaEIsV0FBVyxDQUFDLENBQUN4Z0IsTUFBTSxDQUFDLFFBQVEsQ0FBQ3pOLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT29tQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUNsd0MsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQyxRQUFRLENBQUN1eUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDM1csQ0FBQyxDQUFDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQzJzQixLQUFLLENBQUN1QixLQUFLLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDLFNBQVMsQ0FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUNzQixPQUFPLENBQUMsU0FBUyxDQUFDQyxJQUFJLENBQUMsU0FBUyxDQUFDeEIsS0FBSyxDQUFDLFNBQVMsQ0FBQ3lCLElBQUksQ0FBQyxTQUFTLENBQUNDLE1BQU0sQ0FBQyxTQUFTLENBQUNDLElBQUksQ0FBQyxTQUFTLENBQUNDLEtBQUssQ0FBQyxTQUFTLENBQUNDLE1BQU0sQ0FBQyxTQUFTLENBQUM5QixHQUFHLENBQUMsU0FBUyxDQUFDK0IsTUFBTSxDQUFDLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDLFNBQVMsQ0FBQ3JDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDcHZCLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDbVIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTcnFCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDUyxhQUFhLENBQUMyQyxXQUFXLENBQUNwRCxDQUFDLENBQUNTLGFBQWEsQ0FBQzJDLFdBQVcsQ0FBQ2doQixnQkFBZ0IsQ0FBQ3BrQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNBLENBQUMsQ0FBQzRxQyxZQUFZLENBQUM1SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDdDFCLENBQUMsRUFBRUEsQ0FBQyxDQUFDbFYsTUFBTSxFQUFFa1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzZsQixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDbFYsTUFBTSxDQUFDKzZCLENBQUMsRUFBRSxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPN2xCLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQyxFQUFFLENBQUM4ckMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ25ILFNBQVMsQ0FBQ3ZlLENBQUMsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUN4VyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDQSxFQUFFLEdBQUd3VyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU9BLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQyxFQUFFLENBQUM4ckMsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPOHJDLENBQUMsQ0FBQyxTQUFTOXJDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNvMUIsRUFBRSxHQUFHcjhCLENBQUMsQ0FBQzhyQyxDQUFDLENBQUM5ckMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsR0FBR3lQLENBQUMsRUFBRSxDQUFDdDFCLENBQUMsQ0FBQzZsQixDQUFDLENBQUMsRUFBRSxDQUFDM1csQ0FBQyxDQUFDcU8sRUFBRSxDQUFDRCxJQUFJLENBQUN1SSxDQUFDLENBQUMsRUFBRSxDQUFDNkssS0FBSyxDQUFDN1gsVUFBVSxDQUFDeWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM3a0MsQ0FBQyxDQUFDbzFCLENBQUMsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPN2tDLENBQUMsQ0FBQyxJQUFJbzFCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUN3YyxNQUFNLENBQUMsQ0FBQyxDQUFDMmhCLFlBQVksQ0FBQyxDQUFDLENBQUNoQixXQUFXLENBQUMsQ0FBQyxDQUFDaUIsVUFBVSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQ2ppQixNQUFNLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNyTixDQUFDLENBQUMzakIsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMrSCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUNxTyxFQUFFLENBQUNELElBQUksQ0FBQzl6QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMwbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUdBLENBQUMsQ0FBQ2hqQixHQUFHLEVBQUUsQ0FBQ2dqQixDQUFDLENBQUNzdkIsT0FBTyxFQUFFLENBQUMsR0FBR3R2QixDQUFDLENBQUNtTyxHQUFHLEVBQUUsQ0FBQ25PLENBQUMsQ0FBQ3N2QixPQUFPLENBQUMsRUFBRSxDQUFDN2dCLENBQUMsQ0FBQ3BULEtBQUssQ0FBQzJFLENBQUMsQ0FBQ3hqQixJQUFJLENBQUNsQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDaGpCLEdBQUcsQ0FBQyxDQUFDZ2pCLENBQUMsQ0FBQ3N2QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3R2QixDQUFDLENBQUMxa0IsRUFBRSxDQUFDZ1gsT0FBTyxFQUFFLENBQUMwTixDQUFDLENBQUMxa0IsRUFBRSxDQUFDZ1gsT0FBTyxDQUFDLFFBQVEsQ0FBQzBOLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDM04sR0FBRyxDQUFDLElBQUksRUFBRTJOLENBQUMsQ0FBQyxJQUFJLENBQUM1akIsVUFBVSxDQUFDLElBQUksQ0FBQ0EsVUFBVSxDQUFDNEwsTUFBTSxDQUFDZ1ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzBwQixPQUFPLENBQUM2RixZQUFZLENBQUMsUUFBUSxDQUFDeitCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQyxDQUFDLElBQUlLLENBQUMsQ0FBQzdtQixDQUFDLENBQUMwUixLQUFLLENBQUMwVSxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDL3lCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkyeUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ3llLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3dtQixDQUFDLENBQUNqbEMsQ0FBQyxDQUFDa0ksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQ3dJLENBQUMsQ0FBQzQwQixDQUFDLENBQUNqMUIsUUFBUSxDQUFDclEsQ0FBQyxDQUFDMkcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDb0ssT0FBTyxDQUFDLENBQUMsQ0FBQy9RLENBQUMsQ0FBQzBRLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMVYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWpDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDOVosRUFBRSxDQUFDNUwsQ0FBQyxDQUFDaVIsS0FBSyxDQUFDbkgsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQzNqQixJQUFJLENBQUNzNkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQzNXLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDLEVBQUU3QyxDQUFDLENBQUM2QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMwTSxDQUFDLENBQUMxTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQyxDQUFDLENBQUNuMEIsQ0FBQyxDQUFDQSxDQUFDLENBQUMxVixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ1MsR0FBRyxDQUFDb0gsQ0FBQyxDQUFDLElBQUksQ0FBQzhCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ08sSUFBSSxDQUFDbk0sQ0FBQyxDQUFDLElBQUksQ0FBQ2lSLEtBQUssQ0FBQyxJQUFJLENBQUN2TyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDdUUsQ0FBQyxDQUFDa0ksSUFBSSxDQUFDLE9BQU8sQ0FBQys4QixDQUFDLENBQUMsQ0FBQ3YwQixDQUFDLENBQUNBLENBQUMsQ0FBQzFWLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk2SCxDQUFDLENBQUMsSUFBSSxDQUFDOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ2pMLFFBQVEsQ0FBQyxDQUFDLENBQUM0aEIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzBwQyxDQUFDLENBQUMsQ0FBQ3B6QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM2ZCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ2gzQixDQUFDLENBQUNrYSxPQUFPLENBQUNwUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzhCLEVBQUUsQ0FBQzZyQixPQUFPLENBQUMsSUFBSSxDQUFDdHJCLElBQUksQ0FBQ2t3QixDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUNzYSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ29MLENBQUMsQ0FBQ2xKLElBQUksQ0FBQ3JhLEtBQUssQ0FBQ3VqQixDQUFDLENBQUMvTixDQUFDLENBQUNuVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNrRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ29sQyxDQUFDLENBQUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQzNqQixJQUFJLENBQUNLLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkwSCxDQUFDLENBQUMsSUFBSSxDQUFDOEIsRUFBRSxDQUFDOFosQ0FBQyxDQUFDM2pCLElBQUksQ0FBQyxJQUFJLENBQUNvSyxJQUFJLENBQUMsUUFBUSxDQUFDdVosQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUNtWCxHQUFHLENBQUN5RSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzZtQixDQUFDLENBQUN2VixRQUFRLENBQUMvM0IsSUFBSSxDQUFDZ0ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQzZCLE1BQU0sQ0FBQyxDQUFDbTNCLFFBQVEsQ0FBQyxRQUFRLENBQUNsd0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsQ0FBQyxPQUFPelAsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQzZGLFlBQVksQ0FBQ2gyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM4WSxHQUFHLENBQUMvWCxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQzNILEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NqQixDQUFDLENBQUMxa0IsRUFBRSxDQUFDZzVCLFFBQVEsQ0FBQyxDQUFDSyxXQUFXLENBQUMsUUFBUSxDQUFDdndCLENBQUMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsT0FBTzFwQyxTQUFTLENBQUNkLE1BQU0sQ0FBQyxDQUFDLENBQUNva0IsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQzZGLFlBQVksQ0FBQ2gyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUN1YSxNQUFNLENBQUN4WixDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQzNILEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NqQixDQUFDLENBQUMxa0IsRUFBRSxDQUFDcTVCLFdBQVcsQ0FBQyxDQUFDQyxXQUFXLENBQUMsUUFBUSxDQUFDeHdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxFQUFFLE9BQU9vMUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHQSxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQzZGLFlBQVksQ0FBQ2gyQyxJQUFJLENBQUMsSUFBSSxDQUFDbzlCLENBQUMsQ0FBQyxDQUFDdGtCLEdBQUcsQ0FBQy9YLENBQUMsQ0FBQyxDQUFDLENBQUN3WixNQUFNLENBQUN4WixDQUFDLENBQUMsQ0FBQ3dXLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDLENBQUM2QyxDQUFDLENBQUMzSCxLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQ3NqQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDNkYsWUFBWSxDQUFDaDJDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQ3FqQixNQUFNLENBQUN0aUIsQ0FBQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQ3M1QixXQUFXLENBQUMsQ0FBQzRhLFdBQVcsQ0FBQyxRQUFRLENBQUNwckMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsT0FBT3BtQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDNkYsWUFBWSxDQUFDaDJDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzhZLEdBQUcsQ0FBQy9YLENBQUMsQ0FBQ3daLE1BQU0sQ0FBQzFQLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTaGlDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxPQUFPa1AsQ0FBQyxDQUFDcmlCLGFBQWEsQ0FBQ3lHLENBQUMsQ0FBQyxFQUFFLENBQUM5SixDQUFDLENBQUM4SixDQUFDLENBQUNBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcWxDLE1BQU0sQ0FBQyxDQUFDcmxDLENBQUMsQ0FBQyxDQUFDcWxDLE1BQU0sQ0FBQ3JsQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU5SixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdm1CLFVBQVUsQ0FBQ2EsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3dXLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU9BLENBQUMsRUFBRTBsQixDQUFDLENBQUNxTyxFQUFFLENBQUN1RCxNQUFNLENBQUN0M0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDd1csQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdm1CLFVBQVUsQ0FBQ2s5QixDQUFDLENBQUMsRUFBRSxDQUFDN2xCLENBQUMsQ0FBQzZsQixDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3I4QixDQUFDLEVBQUUwbEIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQ2lILENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFcjhCLENBQUMsQ0FBQzR6QixRQUFRLENBQUM5cEIsQ0FBQyxDQUFDOHBCLFFBQVEsQ0FBQ2xPLENBQUMsQ0FBQ3FPLEVBQUUsQ0FBQ3pPLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8rVyxDQUFDLENBQUNBLENBQUMsQ0FBQ0EsRUFBRSxHQUFHM1csQ0FBQyxDQUFDcU8sRUFBRSxDQUFDdUQsTUFBTSxDQUFDNVIsQ0FBQyxDQUFDcU8sRUFBRSxDQUFDdUQsTUFBTSxDQUFDK0UsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUNxTyxFQUFFLENBQUN1RCxNQUFNLENBQUN0VSxRQUFRLENBQUNsWixDQUFDLENBQUNrdEIsUUFBUSxDQUFDeGdCLENBQUMsRUFBRXhXLENBQUMsQ0FBQ2czQixRQUFRLENBQUNsdEIsQ0FBQyxDQUFDLFNBQVM5SixDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNBLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBT0EsQ0FBQyxFQUFFNGIsQ0FBQyxDQUFDcU8sRUFBRSxDQUFDdUQsTUFBTSxDQUFDeHRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPQSxDQUFDLEVBQUU0YixDQUFDLENBQUMwcEIsT0FBTyxDQUFDRCxNQUFNLENBQUNybEMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUN2bUIsVUFBVSxDQUFDMkssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU9BLENBQUMsRUFBRUEsQ0FBQyxDQUFDcWxDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTOVMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ3dsQyxVQUFVLENBQUMsQ0FBQyxDQUFDalQsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3lsQyxXQUFXLENBQUMsQ0FBQyxDQUFDLzRCLENBQUMsQ0FBQyx1SUFBdUksQ0FBQ3MxQixDQUFDLENBQUN0MUIsQ0FBQyxDQUFDaE0sSUFBSSxDQUFDa2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDbHZCLEdBQUcsQ0FBQ2tpQixVQUFVLENBQUN5YyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNsZCxLQUFLLENBQUMsTUFBTSxHQUFHa2QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQ3F2QixVQUFVLENBQUN5YyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FKLE1BQU0sQ0FBQyxNQUFNLEdBQUdySixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLENBQUNoTixVQUFVLENBQUN5YyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2paLElBQUksQ0FBQ3hELFVBQVUsQ0FBQ3ljLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3pXLElBQUksRUFBRXlXLENBQUMsQ0FBQ3pXLElBQUksQ0FBQzhELE9BQU8sRUFBRTJTLENBQUMsQ0FBQ3pXLElBQUksQ0FBQzhELE9BQU8sQ0FBQ2l5QixRQUFRLEVBQUUsQ0FBQ3RmLENBQUMsQ0FBQ3pXLElBQUksQ0FBQzhELE9BQU8sQ0FBQ2l5QixRQUFRLENBQUMsUUFBUSxDQUFDbDdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDOUosQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyxDQUFDZ2YsSUFBSSxDQUFDeXdCLENBQUMsQ0FBQyxFQUFFM2xDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUN6VyxJQUFJLENBQUM4RCxPQUFPLENBQUNpeUIsUUFBUSxDQUFDLENBQUMsQ0FBQ3RmLENBQUMsQ0FBQzB2QixZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUUxdkIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQzZpQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDLENBQUNpRyxJQUFJLENBQUMsUUFBUSxDQUFDM3ZCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDeEksTUFBTSxDQUFDKzZCLENBQUMsQ0FBQ3I4QixDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRzhKLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQzFHLElBQUksQ0FBQzZ2QixDQUFDLENBQUMva0MsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM0UsS0FBSyxDQUFDalgsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzV2QixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQzFNLENBQUMsQ0FBQ3hJLE1BQU0sQ0FBQ2tWLENBQUMsQ0FBQzZsQixDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLElBQUksR0FBR3Z5QixDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3I4QixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDNnZCLENBQUMsQ0FBQy9rQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQ25YLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1MUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzd2QixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxNQUFNLFFBQVEsR0FBR0EsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ3BQLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUN4TSxDQUFDLENBQUMsQ0FBQzByQyxhQUFhLENBQUMsUUFBUSxDQUFDMXJDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDb0gsTUFBTSxDQUFDLENBQUMsQ0FBQ29GLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE9BQU94TSxDQUFDLENBQUNvSCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUlsUixDQUFDLENBQUMsQ0FBQyt1QixLQUFLLENBQUNqbEIsQ0FBQyxDQUFDd2xDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbmEsTUFBTSxDQUFDcnJCLENBQUMsQ0FBQ3lsQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUN6bEMsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNvYixDQUFDLENBQUMzVyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNzVSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQy9ZLEdBQUcsQ0FBQyxDQUFDdzBCLFFBQVEsQ0FBQyxNQUFNLENBQUNDLFVBQVUsQ0FBQyxhQUFhLENBQUMxaUIsTUFBTSxDQUFDLE1BQU0sQ0FBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2YyxDQUFDLENBQUMsQ0FBQ3VZLEtBQUssQ0FBQ2psQixDQUFDLENBQUNpbEIsS0FBSyxDQUFDLENBQUMsQ0FBQ29HLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUNxckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDaHVDLFFBQVEsQ0FBQ21VLGFBQWEsQ0FBQyxHQUFHLENBQUM2NUIsQ0FBQyxDQUFDcGhDLEVBQUUsQ0FBQyxLQUFLLENBQUN6RCxDQUFDLENBQUMsQ0FBQzZrQyxDQUFDLENBQUNodUMsUUFBUSxDQUFDbWtCLElBQUksQ0FBQyxPQUFPblksQ0FBQyxDQUFDZ2EsSUFBSSxDQUFDdVksQ0FBQyxDQUFDLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdnaUMsQ0FBQyxFQUFFcG1CLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQ3dELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUMsQ0FBQyxFQUFFcG1CLENBQUMsQ0FBQ29tQixDQUFDLENBQUMsQ0FBQzFqQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUNpVSxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDb0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUdwSCxDQUFDLENBQUNtWCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQ29iLENBQUMsQ0FBQ3BiLEdBQUcsQ0FBQyxDQUFDK04sUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUNsbEIsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLENBQUMrTixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0SixDQUFDLENBQUM3aUIsTUFBTSxDQUFDN0MsQ0FBQyxDQUFDLENBQUNndkIsUUFBUSxDQUFDbGxCLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzAwQixNQUFNLENBQUM3ckMsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lFLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMyakIsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQ29iLENBQUMsQ0FBQyxDQUFDNkssS0FBSyxDQUFDdE4sUUFBUSxDQUFDNTVCLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUNyOEIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUNtWCxHQUFHLENBQUMsQ0FBQytOLFFBQVEsQ0FBQyxVQUFVLENBQUM3aEIsR0FBRyxDQUFDLENBQUMsQ0FBQzBsQixJQUFJLENBQUMsQ0FBQyxDQUFDakUsS0FBSyxDQUFDLE1BQU0sQ0FBQ3VtQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDcnJDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQ3pLLENBQUMsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3BiLEdBQUcsQ0FBQ2poQixDQUFDLENBQUMsQ0FBQ21pQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUN5ekIsYUFBYSxDQUFDLFFBQVEsQ0FBQzlyQyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDbEMsUUFBUSxDQUFDbVUsYUFBYSxDQUFDLE9BQU9uSSxDQUFDLENBQUNvSCxNQUFNLENBQUMsQ0FBQyxDQUFDb0YsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQ3hNLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUNxYyxXQUFXLENBQUN6akIsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHOUosQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQ3dELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLEVBQUUwbEIsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyxDQUFDb29CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDdGUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQzZpQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDLENBQUN4dUMsT0FBTyxDQUFDLFFBQVEsQ0FBQ3VtQyxNQUFNLENBQUMsUUFBUSxDQUFDcjlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNELE1BQU0sQ0FBQ3JsQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMzVyxDQUFDLENBQUMwcEIsT0FBTyxDQUFDRCxNQUFNLENBQUNybEMsQ0FBQyxDQUFDLENBQUMrckMsSUFBSSxDQUFDNzFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQ3laLGdCQUFnQixDQUFDLFFBQVEsQ0FBQ3B3QixDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHOEosQ0FBQyxDQUFDLE1BQU0sQ0FBQ3FyQixNQUFNLENBQUMsQ0FBQyxDQUFDcEcsS0FBSyxDQUFDLENBQUMsQ0FBQ3dnQixXQUFXLENBQUMsQ0FBQyxDQUFDRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSWpULENBQUMsQ0FBQyxZQUFZLEdBQUdyOEIsQ0FBQyxDQUFDLENBQUM4SixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxVQUFVLEdBQUd4VyxDQUFDLENBQUMsQ0FBQzhKLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQ3FyQixNQUFNLENBQUN6UCxDQUFDLENBQUN5UCxNQUFNLENBQUMsQ0FBQyxDQUFDM2UsQ0FBQyxDQUFDdVksS0FBSyxDQUFDckosQ0FBQyxDQUFDcUosS0FBSyxDQUFDLENBQUMsQ0FBQ3NOLENBQUMsQ0FBQ2tULFdBQVcsQ0FBQzdwQixDQUFDLENBQUM2cEIsV0FBVyxDQUFDLENBQUMsQ0FBQy80QixDQUFDLENBQUM4NEIsVUFBVSxDQUFDNXBCLENBQUMsQ0FBQzRwQixVQUFVLENBQUMsQ0FBQyxDQUFDalQsQ0FBQyxDQUFDLENBQUMsQ0FBQzBaLFNBQVMsQ0FBQyxRQUFRLENBQUNyd0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDcUosS0FBSyxDQUFDckosQ0FBQyxDQUFDc3dCLElBQUksQ0FBQ3BuQixLQUFLLENBQUNsSixDQUFDLENBQUNzd0IsSUFBSSxDQUFDbmpCLElBQUksQ0FBQ3NDLE1BQU0sQ0FBQ3pQLENBQUMsQ0FBQ3N3QixJQUFJLENBQUNiLE1BQU0sQ0FBQ3p2QixDQUFDLENBQUNzd0IsSUFBSSxDQUFDN29DLEdBQUcsQ0FBQzBsQixJQUFJLENBQUNuTixDQUFDLENBQUNzd0IsSUFBSSxDQUFDbmpCLElBQUksQ0FBQzFsQixHQUFHLENBQUN1WSxDQUFDLENBQUNzd0IsSUFBSSxDQUFDN29DLEdBQUcsQ0FBQyxDQUFDLENBQUM2QixPQUFPLENBQUMsUUFBUSxDQUFDMFcsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMzVyxDQUFDLENBQUN2TSxLQUFLLENBQUMsQ0FBQyxDQUFDclAsQ0FBQyxDQUFDLENBQUMsRUFBRXV5QixDQUFDLENBQUN6NUIsTUFBTSxDQUFDVCxLQUFLLENBQUNrNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNzlCLE1BQU0sQ0FBQzY5QixDQUFDLENBQUN6NUIsTUFBTSxDQUFDa0gsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzVGLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ20yQixTQUFTLENBQUMsUUFBUSxDQUFDdndCLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMxRyxJQUFJLENBQUNxd0IsQ0FBQyxDQUFDM3BCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNFLEtBQUssQ0FBQ3VOLE9BQU8sQ0FBQyxDQUFDLENBQUM0bkIsWUFBWSxDQUFDLFFBQVEsQ0FBQ3h3QixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM0UsS0FBSyxDQUFDdU4sT0FBTyxDQUFDNUksQ0FBQyxDQUFDMUcsSUFBSSxDQUFDcXdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzNwQixDQUFDLENBQUMvRixVQUFVLENBQUMwdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3dHLElBQUksQ0FBQyxRQUFRLENBQUNud0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUNwUCxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxRQUFRLEdBQUd4TSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsTUFBTSxHQUFHOEosQ0FBQyxDQUFDLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQ3FzQyxXQUFXLENBQUMsUUFBUSxDQUFDendCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQzNXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDMWxCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDQSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDQSxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDcXJCLE1BQU0sQ0FBQyxNQUFNLENBQUN6UCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQzJXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDQSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDQSxDQUFDLENBQUMzVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUNpbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQzBoQixDQUFDLENBQUNwVSxDQUFDLENBQUNnVSxDQUFDLENBQUNyd0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ28yQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUN0c0MsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDekssQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDa2xCLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBT2xsQixDQUFDLENBQUNtWCxHQUFHLENBQUMsQ0FBQzZ2QixTQUFTLENBQUNobkMsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDbzFCLFlBQVksQ0FBQ3ZzQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMwTixVQUFVLENBQUM3a0IsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDcTFCLFdBQVcsQ0FBQ3hzQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDcXVCLFVBQVUsQ0FBQ3hsQyxDQUFDLENBQUN3bEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUN6bEMsQ0FBQyxDQUFDeWxDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQ3prQyxJQUFJLENBQUN1eEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLFVBQVUsQ0FBQ3I4QixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDaWtCLFdBQVcsQ0FBQzdqQixDQUFDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxDQUFDRCxPQUFPLENBQUMsZ0JBQWdCLENBQUNsVyxJQUFJLENBQUNoQixDQUFDLENBQUNtWCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDK1AsVUFBVSxDQUFDLFFBQVEsQ0FBQzhmLFNBQVMsQ0FBQ2huQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUNvMUIsWUFBWSxDQUFDdnNDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQzBOLFVBQVUsQ0FBQzdrQixDQUFDLENBQUNtWCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUNxMUIsV0FBVyxDQUFDeHNDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUNuWCxDQUFDLENBQUNtWCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcXVCLFVBQVUsQ0FBQ3hsQyxDQUFDLENBQUN3bEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUN6bEMsQ0FBQyxDQUFDeWxDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZWLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDbHdCLENBQUMsQ0FBQ2tWLElBQUksQ0FBQzZ2QixDQUFDLENBQUMsYUFBYSxDQUFDN3VDLENBQUMsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUNtWCxHQUFHLENBQUMsQ0FBQytOLFFBQVEsQ0FBQ3FOLENBQUMsQ0FBQ3hKLElBQUksQ0FBQ3JjLENBQUMsQ0FBQ3FjLElBQUksQ0FBQzFsQixHQUFHLENBQUNxSixDQUFDLENBQUNySixHQUFHLENBQUMsQ0FBQyxDQUFDbk4sQ0FBQyxDQUFDLENBQUN1MkMsaUJBQWlCLENBQUMsUUFBUSxDQUFDN3dCLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMra0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQzd1QyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDbFYsQ0FBQyxDQUFDLENBQUM5SixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDd1osTUFBTSxDQUFDLENBQUMsQ0FBQ2tNLENBQUMsQ0FBQy9GLFVBQVUsQ0FBQzdWLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBzQyxPQUFPLENBQUMsUUFBUSxDQUFDMXNDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQzhHLFlBQVksQ0FBQ3BzQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzBwQixPQUFPLENBQUNtSCxpQkFBaUIsQ0FBQ3pzQyxDQUFDLENBQUMsQ0FBQyxDQUFDMnNDLGFBQWEsQ0FBQyxRQUFRLENBQUMzc0MsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzNqQixJQUFJLENBQUMvQixDQUFDLENBQUMsUUFBUSxDQUFDMGxCLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxJQUFJOHJDLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUM0c0MsT0FBTyxDQUFDMTJDLENBQUMsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3QxQixDQUFDLENBQUN4VyxDQUFDLENBQUMsQ0FBQzhyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLENBQUN5UCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQzZCLE1BQU0sQ0FBQyxDQUFDc3NDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVNudkMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsU0FBUzlKLENBQUMsQ0FBQyxDQUFDLENBQUNrc0MsQ0FBQyxDQUFDdnNCLFVBQVUsQ0FBQzh2QixDQUFDLENBQUMsQ0FBQy9wQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDb0gsT0FBTyxDQUFDdEssQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHN1AsQ0FBQyxDQUFDd1osSUFBSSxFQUFFM0osQ0FBQyxDQUFDN3BCLElBQUksQ0FBQyxDQUFDLENBQUNwYixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVNBLENBQUMsQ0FBQyxDQUFDLENBQUN5ZSxDQUFDLENBQUN2bUIsVUFBVSxDQUFDb3RDLENBQUMsQ0FBQyxFQUFFQSxDQUFDLENBQUN0dEMsSUFBSSxDQUFDaXRDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeG1CLENBQUMsQ0FBQ3ZtQixVQUFVLENBQUMySyxDQUFDLENBQUMsRUFBRUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJb2lDLENBQUMsQ0FBQ3htQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMyVyxDQUFDLENBQUN3WixJQUFJLENBQUNoSCxDQUFDLENBQUNwakMsS0FBSyxDQUFDLENBQUMsQ0FBQ2lhLENBQUMsQ0FBQzB2QixZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUV0SixDQUFDLENBQUMsTUFBTSxHQUFHelAsQ0FBQyxDQUFDd1osSUFBSSxDQUFDLENBQUMzSixDQUFDLENBQUN2MEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDdlgsSUFBSSxDQUFDaXRDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdQLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQzUxQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHcUIsQ0FBQyxDQUFDLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQ3UwQixDQUFDLENBQUN2MEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDdlgsSUFBSSxDQUFDaXRDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdQLENBQUMsQ0FBQ3AxQixDQUFDLENBQUMsQ0FBQyxJQUFJbzFCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMzSCxLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQ29VLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzBwQixPQUFPLENBQUNELE1BQU0sQ0FBQzlTLENBQUMsQ0FBQzhTLE1BQU0sQ0FBQyxDQUFDckQsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQ3EvQixJQUFJLENBQUM1dUMsQ0FBQyxDQUFDbzFCLENBQUMsQ0FBQ2xqQixLQUFLLENBQUMreUIsQ0FBQyxDQUFDamxDLENBQUMsRUFBRSxJQUFJLENBQUNzbEMsQ0FBQyxDQUFDbFEsQ0FBQyxDQUFDckYsUUFBUSxDQUFDcmYsQ0FBQyxDQUFDMGtCLENBQUMsQ0FBQ3daLElBQUksQ0FBQ2hILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3ZsQyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzJXLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzBwQixPQUFPLENBQUN5RyxJQUFJLENBQUM3MUMsQ0FBQyxDQUFDMlgsQ0FBQyxDQUFDLEVBQUVtMEIsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQ2dmLElBQUksQ0FBQ3l3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1osQ0FBQyxDQUFDcHdDLElBQUksQ0FBQzQ5QixDQUFDLENBQUMsQ0FBQ3lQLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBR3pQLENBQUMsRUFBRUEsQ0FBQyxHQUFHeVAsQ0FBQyxFQUFFLE1BQU0sR0FBR3pQLENBQUMsQ0FBQyxFQUFFcjhCLENBQUMsQ0FBQ21pQixJQUFJLENBQUMsQ0FBQyxDQUFDMnBCLENBQUMsRUFBRSxNQUFNLEdBQUd6UCxDQUFDLEVBQUUzVyxDQUFDLENBQUMwcEIsT0FBTyxDQUFDNkcsU0FBUyxDQUFDajJDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ3ZtQixVQUFVLENBQUMySyxDQUFDLENBQUMsRUFBRUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU80YixDQUFDLENBQUNxTyxFQUFFLENBQUN6TyxHQUFHLEVBQUUsQ0FBQzlPLENBQUMsQ0FBQ21CLENBQUMsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQyxDQUFDMGtCLENBQUMsQ0FBQ3pJLFFBQVEsQ0FBQzJZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3hxQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3dxQyxDQUFDLEVBQUVBLENBQUMsQ0FBQ3R0QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDZ0ksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2xGLElBQUksQ0FBQ3N0QyxDQUFDLENBQUMsQ0FBQ3R0QyxJQUFJLENBQUMvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtWixLQUFLLENBQUMreUIsQ0FBQyxDQUFDbUQsQ0FBQyxDQUFDLENBQUNsMkIsS0FBSyxDQUFDK3lCLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUMsQ0FBQyxDQUFDbWlCLElBQUksQ0FBQyxRQUFRLENBQUN1RCxDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQzJXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3I4QixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsT0FBTzNXLENBQUMsQ0FBQ3ZqQixLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxJQUFJb1UsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDM0gsS0FBSyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsT0FBT29VLENBQUMsQ0FBQ3EvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzFHLE1BQU0sQ0FBQ2x3QyxJQUFJLENBQUMsSUFBSSxDQUFDdVgsQ0FBQztBQUNsdytCLENBQUMsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQ21oQixJQUFJLENBQUMsQ0FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQ3FELENBQUMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDMlcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDcjhCLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxPQUFPM1csQ0FBQyxDQUFDdmpCLEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLElBQUlvVSxDQUFDLENBQUMxTSxDQUFDLENBQUMzSCxLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxPQUFPb1UsQ0FBQyxDQUFDcS9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDMUcsTUFBTSxDQUFDbHdDLElBQUksQ0FBQyxJQUFJLENBQUN1WCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrUCxDQUFDLENBQUMxa0IsRUFBRSxDQUFDcWhCLElBQUksQ0FBQyxDQUFDQyxNQUFNLENBQUMsUUFBUSxDQUFDb0QsQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUMyVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNyOEIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPQSxDQUFDLENBQUMsT0FBTzNXLENBQUMsQ0FBQ3ZqQixLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxJQUFJb1UsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDM0gsS0FBSyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsT0FBT29VLENBQUMsQ0FBQ3EvQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzFHLE1BQU0sQ0FBQ2x3QyxJQUFJLENBQUMsSUFBSSxDQUFDdVgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQ3NoQixNQUFNLENBQUMsQ0FBQ28wQixPQUFPLENBQUMsUUFBUSxDQUFDNXNDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDaWhCLEdBQUcsQ0FBQ25YLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPM1csQ0FBQyxDQUFDM2pCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQzJqQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3RCLE9BQU8sQ0FBQ29MLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDaE4sVUFBVSxDQUFDcnZCLENBQUMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUNzYSxPQUFPLENBQUMsUUFBUSxDQUFDanhCLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQyxJQUFJLENBQUN6RSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQ3lFLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQyxLQUFLLENBQUN1WSxDQUFDLENBQUNrSixLQUFLLENBQUMsS0FBSyxDQUFDbEosQ0FBQyxDQUFDeXZCLE1BQU0sQ0FBQyxLQUFLLENBQUN6dkIsQ0FBQyxDQUFDbU4sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDd0osQ0FBQyxDQUFDLElBQUksQ0FBQ3BiLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDMjFCLFFBQVEsQ0FBQyxRQUFRLENBQUM5c0MsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMzVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNsUCxDQUFDLENBQUNrUCxDQUFDLENBQUM1YixDQUFDLENBQUMwdEIsRUFBRSxDQUFDLENBQUNzVSxDQUFDLENBQUMsT0FBTyxHQUFHdDFCLENBQUMsQ0FBQ3lLLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQ2hhLENBQUMsQ0FBQ3llLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQ3dtQixDQUFDLENBQUNKLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMrc0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1WSxDQUFDLENBQUNULENBQUMsQ0FBQzdrQyxDQUFDLENBQUNndEIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0YyxDQUFDLENBQUNuQixDQUFDLENBQUN5dUIsTUFBTSxDQUFDLENBQUMsQ0FBQzRKLENBQUMsQ0FBQyxDQUFDMWhDLEdBQUcsQ0FBQ3dLLENBQUMsQ0FBQ3hLLEdBQUcsQ0FBQysrQixDQUFDLENBQUNyWixJQUFJLENBQUNsYixDQUFDLENBQUNrYixJQUFJLENBQUMwWixDQUFDLENBQUNwWCxNQUFNLENBQUMzZSxDQUFDLENBQUNxZ0MsV0FBVyxDQUFDLENBQUMsQ0FBQzluQixLQUFLLENBQUN2WSxDQUFDLENBQUNzZ0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDekgsQ0FBQyxDQUFDaFQsQ0FBQyxDQUFDNEksTUFBTSxDQUFDLENBQUMsQ0FBQ3dLLENBQUMsQ0FBQy9wQixDQUFDLENBQUMseUNBQXlDLENBQUMsQ0FBQytILFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQ3VNLFFBQVEsQ0FBQ2x3QixDQUFDLENBQUN3RCxTQUFTLENBQUMsQ0FBQzJULEdBQUcsQ0FBQyxDQUFDOVQsR0FBRyxDQUFDa2lDLENBQUMsQ0FBQ2xpQyxHQUFHLENBQUMrK0IsQ0FBQyxDQUFDclosSUFBSSxDQUFDd2MsQ0FBQyxDQUFDeGMsSUFBSSxDQUFDMFosQ0FBQyxDQUFDcFgsTUFBTSxDQUFDa0gsQ0FBQyxDQUFDd2EsV0FBVyxDQUFDLENBQUMsQ0FBQzluQixLQUFLLENBQUNzTixDQUFDLENBQUN5YSxVQUFVLENBQUMsQ0FBQyxDQUFDOW5CLFFBQVEsQ0FBQzhjLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQ3JVLE9BQU8sQ0FBQ29YLENBQUMsQ0FBQy9rQyxDQUFDLENBQUM4cEIsUUFBUSxDQUFDOXBCLENBQUMsQ0FBQ3lwQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ2tjLENBQUMsQ0FBQ2oyQixNQUFNLENBQUMsQ0FBQyxDQUFDa00sQ0FBQyxDQUFDdm1CLFVBQVUsQ0FBQ2EsQ0FBQyxDQUFDLEVBQUVBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ3FPLEVBQUUsQ0FBQ0QsSUFBSSxDQUFDa2lCLElBQUksQ0FBQyxRQUFRLENBQUNsc0MsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ2l0QyxRQUFRLEVBQUUsQ0FBQ2p0QyxDQUFDLENBQUNtSCxLQUFLLENBQUN5VSxDQUFDLENBQUM1YixDQUFDLENBQUM1SCxJQUFJLENBQUMsQ0FBQ3kwQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPN3NDLENBQUMsQ0FBQ3BILEdBQUcsRUFBRSxDQUFDb0gsQ0FBQyxDQUFDcEgsR0FBRyxDQUFDMjVCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUNwSCxHQUFHLENBQUNvSCxDQUFDLENBQUM1SCxJQUFJLENBQUMsQ0FBQyxDQUFDNEgsQ0FBQyxDQUFDaXRDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcnhCLENBQUMsQ0FBQzViLENBQUMsQ0FBQzVILElBQUksQ0FBQyxDQUFDeTBDLE9BQU8sQ0FBQyxDQUFDeHBDLEdBQUcsQ0FBQ3JELENBQUMsQ0FBQytwQixHQUFHLENBQUMsQ0FBQy9wQixDQUFDLENBQUNwSCxHQUFHLENBQUN5SyxHQUFHLENBQUNyRCxDQUFDLENBQUNtSCxLQUFLLENBQUM5RCxHQUFHLENBQUMsQ0FBQ3JELENBQUMsQ0FBQ21ILEtBQUssQ0FBQzlELEdBQUcsQ0FBQ3loQixLQUFLLENBQUM5a0IsQ0FBQyxDQUFDK3BCLEdBQUcsQ0FBQyxDQUFDL3BCLENBQUMsQ0FBQ3BILEdBQUcsQ0FBQ2tzQixLQUFLLENBQUM5a0IsQ0FBQyxDQUFDbUgsS0FBSyxDQUFDMmQsS0FBSyxDQUFDLENBQUM5a0IsQ0FBQyxDQUFDbUgsS0FBSyxDQUFDMmQsS0FBSyxDQUFDdW1CLE1BQU0sQ0FBQ3JyQyxDQUFDLENBQUMrcEIsR0FBRyxDQUFDLENBQUMvcEIsQ0FBQyxDQUFDcEgsR0FBRyxDQUFDeXlDLE1BQU0sQ0FBQ3JyQyxDQUFDLENBQUNtSCxLQUFLLENBQUNra0MsTUFBTSxDQUFDLENBQUNyckMsQ0FBQyxDQUFDbUgsS0FBSyxDQUFDa2tDLE1BQU0sQ0FBQ3RpQixJQUFJLENBQUMvb0IsQ0FBQyxDQUFDK3BCLEdBQUcsQ0FBQyxDQUFDL3BCLENBQUMsQ0FBQ3BILEdBQUcsQ0FBQ213QixJQUFJLENBQUMvb0IsQ0FBQyxDQUFDbUgsS0FBSyxDQUFDNGhCLElBQUksQ0FBQyxDQUFDL29CLENBQUMsQ0FBQ21ILEtBQUssQ0FBQzRoQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL29CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDMmpCLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzhKLENBQUMsQ0FBQyxDQUFDLE9BQU9wRyxJQUFJLENBQUNzekMsR0FBRyxDQUFDbHRDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQ2lILENBQUMsQ0FBQyxDQUFDbXRDLElBQUksQ0FBQyxRQUFRLENBQUN2eEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUNoaUIsSUFBSSxDQUFDMndCLEdBQUcsQ0FBQzNPLENBQUMsQ0FBQ2hpQixJQUFJLENBQUM0d0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0aUIsSUFBSSxDQUFDLFFBQVEsQ0FBQ3h4QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ2hpQixJQUFJLENBQUN5ekMsSUFBSSxDQUFDLENBQUMsQ0FBQ3p4QixDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMweEIsT0FBTyxDQUFDLFFBQVEsQ0FBQzF4QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBR0EsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQ2hpQixJQUFJLENBQUNzekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3R4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2hpQixJQUFJLENBQUMyekMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMzeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDaGlCLElBQUksQ0FBQzR3QixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ2dqQixJQUFJLENBQUMsUUFBUSxDQUFDNXhCLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzZ4QixNQUFNLENBQUMsUUFBUSxDQUFDN3hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUNwRyxJQUFJLENBQUNzekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFaDNDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUNoaUIsSUFBSSxDQUFDc3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDaDNDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzBELElBQUksQ0FBQ3N6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNsdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzRiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQytILENBQUMsQ0FBQyxRQUFRLENBQUNBLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzZOLE1BQU0sQ0FBQyxRQUFRLENBQUN6cEIsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDNk4sTUFBTSxDQUFDLFNBQVMsQ0FBQ3pwQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM0YixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzZOLE1BQU0sQ0FBQyxXQUFXLENBQUN6cEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDNGIsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUNBLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSXdxQixDQUFDLENBQUN4cUIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQzFwQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDakksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDcjlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDLENBQUNtYixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUNqRyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUNrRyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM1a0IsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDeWUsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDMWlCLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDcFksQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDb21CLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUM0dEMsU0FBUyxFQUFFLElBQUksQ0FBQ3p3QyxDQUFDLENBQUN1UCxDQUFDLENBQUNtZ0MsT0FBTyxDQUFDLENBQUMsQ0FBQ3pLLENBQUMsQ0FBQyxDQUFDOEosSUFBSSxDQUFDdHdCLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNvRSxDQUFDLENBQUMsQ0FBQyxDQUFDc2xDLENBQUMsQ0FBQzdtQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDZ0gsaUJBQWlCLENBQUM1L0IsQ0FBQyxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDOEosSUFBSSxDQUFDM1osQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksQ0FBQyxDQUFDOEosSUFBSSxDQUFDM1osQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUdoaUMsQ0FBQyxDQUFDK3JDLElBQUksRUFBRSxDQUFDci9CLENBQUMsQ0FBQ21nQyxPQUFPLENBQUN6SyxDQUFDLENBQUM4SixJQUFJLENBQUMsQ0FBQ3pKLENBQUMsRUFBRUEsQ0FBQyxDQUFDdHJCLEdBQUcsQ0FBQ3lFLENBQUMsQ0FBQzBwQixPQUFPLENBQUMyRyxTQUFTLENBQUM3SixDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUM4SixJQUFJLENBQUMvdUMsQ0FBQyxDQUFDLENBQUNzbEMsQ0FBQyxFQUFFQSxDQUFDLENBQUM5VSxPQUFPLENBQUMvUixDQUFDLENBQUMwcEIsT0FBTyxDQUFDMkcsU0FBUyxDQUFDN0osQ0FBQyxDQUFDLENBQUNwaUMsQ0FBQyxDQUFDOHBCLFFBQVEsQ0FBQzlwQixDQUFDLENBQUN5cEIsTUFBTSxDQUFDLENBQUMvYyxDQUFDLENBQUNpaEIsT0FBTyxDQUFDeVUsQ0FBQyxDQUFDLENBQUMveUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDeWEsUUFBUSxDQUFDOXBCLENBQUMsQ0FBQzhwQixRQUFRLENBQUNMLE1BQU0sQ0FBQ3pwQixDQUFDLENBQUN5cEIsTUFBTSxDQUFDeUQsUUFBUSxDQUFDaDNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNqSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ3llLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3dtQixDQUFDLENBQUNwaUMsQ0FBQyxDQUFDK3JDLElBQUksQ0FBQ3RKLENBQUMsQ0FBQyxNQUFNLEdBQUdMLENBQUMsQ0FBQ3YwQixDQUFDLENBQUMsTUFBTSxHQUFHdTBCLENBQUMsQ0FBQzJDLENBQUMsQ0FBQy9rQyxDQUFDLENBQUM0dEMsU0FBUyxFQUFFLElBQUksQ0FBQ3JJLENBQUMsQ0FBQ3ZsQyxDQUFDLENBQUM2dEMsUUFBUSxDQUFDbEksQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQzh0QyxLQUFLLEVBQUUsQ0FBQyxDQUFDempCLENBQUMsQ0FBQyxDQUFDLENBQUNzYixDQUFDLENBQUMsQ0FBQzkzQixDQUFDLEVBQUU0MEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJELENBQUMsQ0FBQ3BtQyxDQUFDLENBQUM4cEIsUUFBUSxDQUFDTyxDQUFDLENBQUNnYyxDQUFDLENBQUNybUMsQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQ3RwQixDQUFDLENBQUMsSUFBSSxHQUFHNGtDLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDbG1DLENBQUMsQ0FBQyxJQUFJLEdBQUdrbUMsQ0FBQyxFQUFFLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLzBCLENBQUMsQ0FBQyxDQUFDLENBQUM1UyxDQUFDLENBQUNELENBQUMsQ0FBQ2tTLEtBQUssQ0FBQyxDQUFDLENBQUM3WCxNQUFNLENBQUMsR0FBRyxDQUFDb2tCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNnSCxpQkFBaUIsQ0FBQ252QyxDQUFDLENBQUMsQ0FBQzZrQyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDZ2EsR0FBRyxDQUFDaFgsQ0FBQyxDQUFDLENBQUNvbEMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ3BvQyxDQUFDLENBQUMsS0FBSyxHQUFHZ0QsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwTixDQUFDLEVBQUUsQ0FBQ25CLENBQUMsQ0FBQyxDQUFDOGIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOWIsQ0FBQyxDQUFDdk0sQ0FBQyxDQUFDLENBQUM2aEMsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ2dhLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNBLEdBQUcsQ0FBQ2hYLENBQUMsQ0FBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBtQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQzVYLE9BQU8sQ0FBQ2poQixDQUFDLENBQUMwNUIsQ0FBQyxDQUFDQyxDQUFDLENBQUMsQ0FBQyxDQUFDNUQsQ0FBQyxFQUFFLENBQUM4QyxDQUFDLEVBQUUzckMsSUFBSSxDQUFDc3pDLEdBQUcsQ0FBQyxDQUFDLENBQUN2SCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2o1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3ZNLENBQUMsQ0FBQyxDQUFDNmhDLENBQUMsQ0FBQzJELENBQUMsQ0FBQzMxQixDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDdWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcHlCLENBQUMsQ0FBQyxDQUFDLENBQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDMG1DLENBQUMsQ0FBQ3BvQyxDQUFDLENBQUN3d0IsT0FBTyxDQUFDNEUsQ0FBQyxDQUFDNlQsQ0FBQyxDQUFDQyxDQUFDLENBQUMsQ0FBQzFZLE9BQU8sQ0FBQ2poQixDQUFDLENBQUMwNUIsQ0FBQyxDQUFDQyxDQUFDLENBQUMsQ0FBQ2QsQ0FBQyxDQUFDOUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQzlDLENBQUMsRUFBRSxDQUFDbFEsQ0FBQyxDQUFDLENBQUMvSixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMrSixDQUFDLENBQUNweUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMwbUMsQ0FBQyxDQUFDcG9DLENBQUMsQ0FBQ3d3QixPQUFPLENBQUM0RSxDQUFDLENBQUM2VCxDQUFDLENBQUNDLENBQUMsQ0FBQyxDQUFDLENBQUNscEMsQ0FBQyxDQUFDa1MsS0FBSyxDQUFDblosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3BnQyxPQUFPLENBQUMvSCxDQUFDLENBQUNDLENBQUMsQ0FBQ2l0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDek8sQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ2pJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3plLENBQUMsQ0FBQzZDLENBQUMsQ0FBQzR0QyxTQUFTLEVBQUUsVUFBVSxDQUFDeEwsQ0FBQyxDQUFDLE1BQU0sR0FBR2psQyxDQUFDLENBQUNzbEMsQ0FBQyxDQUFDTCxDQUFDLEVBQUUsWUFBWSxHQUFHamxDLENBQUMsQ0FBQzBRLENBQUMsQ0FBQ3UwQixDQUFDLEVBQUUsVUFBVSxHQUFHamxDLENBQUMsQ0FBQ28xQixDQUFDLENBQUN5UCxDQUFDLENBQUM2SyxPQUFPLENBQUMsQ0FBQyxDQUFDbmdDLENBQUMsQ0FBQ3cvQixJQUFJLENBQUMsQ0FBQzdvQyxHQUFHLENBQUN3SyxDQUFDLENBQUMsQ0FBQzBrQixDQUFDLENBQUM4WSxNQUFNLENBQUM5WSxDQUFDLENBQUNsdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDa3ZCLENBQUMsQ0FBQ2x2QixHQUFHLENBQUN5aEIsS0FBSyxDQUFDMmQsQ0FBQyxDQUFDLENBQUNsUSxDQUFDLENBQUN6TixLQUFLLENBQUN5TixDQUFDLENBQUN4SixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUN3SixDQUFDLENBQUN6TixLQUFLLENBQUN1bUIsTUFBTSxDQUFDeDlCLENBQUMsQ0FBQyxDQUFDMGtCLENBQUMsQ0FBQzhZLE1BQU0sQ0FBQzlZLENBQUMsQ0FBQ2x2QixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNrdkIsQ0FBQyxDQUFDOFksTUFBTSxDQUFDdGlCLElBQUksQ0FBQzBaLENBQUMsQ0FBQyxDQUFDbFEsQ0FBQyxDQUFDek4sS0FBSyxDQUFDeU4sQ0FBQyxDQUFDeEosSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDd0osQ0FBQyxDQUFDeEosSUFBSSxDQUFDLENBQUNuTixDQUFDLENBQUMwcEIsT0FBTyxDQUFDZ0gsaUJBQWlCLENBQUN0SyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUdoaUMsQ0FBQyxDQUFDK3JDLElBQUksRUFBRSxDQUFDL0osQ0FBQyxDQUFDNkssT0FBTyxDQUFDbmdDLENBQUMsQ0FBQ3cvQixJQUFJLENBQUMsQ0FBQ3gvQixDQUFDLENBQUN3L0IsSUFBSSxDQUFDM1osQ0FBQyxDQUFDLENBQUN5UCxDQUFDLENBQUNyVSxPQUFPLENBQUNqaEIsQ0FBQyxDQUFDLENBQUMyQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUN5YSxRQUFRLENBQUM5cEIsQ0FBQyxDQUFDOHBCLFFBQVEsQ0FBQ0wsTUFBTSxDQUFDenBCLENBQUMsQ0FBQ3lwQixNQUFNLENBQUN5RCxRQUFRLENBQUNoM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ2pJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNrUCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQytyQyxJQUFJLENBQUM1dUMsQ0FBQyxDQUFDLE1BQU0sR0FBRzZrQyxDQUFDLENBQUNJLENBQUMsQ0FBQ3BpQyxDQUFDLENBQUM0dEMsU0FBUyxFQUFFLE1BQU0sQ0FBQ25MLENBQUMsQ0FBQyxJQUFJLEdBQUdMLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDdjBCLENBQUMsQ0FBQyxJQUFJLEdBQUd1MEIsQ0FBQyxFQUFFLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMyQyxDQUFDLENBQUMsSUFBSSxHQUFHbDNCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDMDNCLENBQUMsQ0FBQyxDQUFDL2MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDNU0sQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ2dILGlCQUFpQixDQUFDNS9CLENBQUMsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUM2dEMsUUFBUSxFQUFFbmhDLENBQUMsQ0FBQyxLQUFLLEdBQUcrMUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhDLENBQUMsQ0FBQzlDLENBQUMsQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQzBrQixDQUFDLENBQUNwMUIsQ0FBQyxFQUFFLENBQUN1UCxDQUFDLENBQUN5SyxHQUFHLENBQUNvdUIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzlDLENBQUMsQ0FBQyxDQUFDc0MsQ0FBQyxDQUFDeFMsQ0FBQyxDQUFDZ1QsQ0FBQyxDQUFDL2MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOWIsQ0FBQyxDQUFDaWhCLE9BQU8sQ0FBQzRYLENBQUMsQ0FBQyxDQUFDbDJCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3lhLFFBQVEsQ0FBQzlwQixDQUFDLENBQUM4cEIsUUFBUSxDQUFDTCxNQUFNLENBQUN6cEIsQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQ3lELFFBQVEsQ0FBQ2gzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDakksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDcjlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLFNBQVNxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ24xQixDQUFDLENBQUN6SSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUN5SSxDQUFDLENBQUM1RixNQUFNLEdBQUcrdEMsQ0FBQyxDQUFDSSxDQUFDLEVBQUVqNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTQSxDQUFDLENBQUMsQ0FBQyxDQUFDMmQsQ0FBQyxDQUFDbFQsR0FBRyxDQUFDLENBQUMrUCxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQ3RMLENBQUMsQ0FBQ3hlLENBQUMsQ0FBQyxDQUFDc1MsTUFBTSxDQUFDLENBQUMsQ0FBQ3haLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSThyQyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQ2szQixDQUFDLENBQUNRLENBQUMsQ0FBQ3ZsQyxDQUFDLENBQUMrdEMsTUFBTSxDQUFDbjBDLElBQUksQ0FBQzByQixLQUFLLENBQUMxckIsSUFBSSxDQUFDeXpDLElBQUksQ0FBQ3J0QyxDQUFDLENBQUMrdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwSSxDQUFDLENBQUNKLENBQUMsQ0FBQ2xiLENBQUMsQ0FBQ3pPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3dxQixDQUFDLENBQUNwbUMsQ0FBQyxDQUFDK3JDLElBQUksQ0FBQzFGLENBQUMsQ0FBQyxNQUFNLEdBQUdELENBQUMsQ0FBQ2ptQyxDQUFDLENBQUNrcUIsQ0FBQyxDQUFDaFMsSUFBSSxDQUFDLENBQUMsQ0FBQ2xCLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUNna0IsTUFBTSxDQUFDLENBQUMsQ0FBQ3Q4QixDQUFDLENBQUNqRixJQUFJLENBQUNxdUIsSUFBSSxDQUFDb0MsQ0FBQyxDQUFDbWIsVUFBVSxDQUFDLENBQUMsQ0FBQ0csQ0FBQyxDQUFDLENBQUMzMUIsQ0FBQyxDQUFDcFcsSUFBSSxDQUFDcXVCLElBQUksQ0FBQ29DLENBQUMsQ0FBQ29iLFdBQVcsQ0FBQyxDQUFDLENBQUNGLENBQUMsQ0FBQyxDQUFDbm9DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM0a0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VELENBQUMsQ0FBQ3ZELENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDUyxDQUFDLENBQUN0aUMsQ0FBQyxDQUFDa0QsR0FBRyxDQUFDMitCLENBQUMsQ0FBQ2h5QixDQUFDLENBQUMrMEIsQ0FBQyxDQUFDL0MsQ0FBQyxDQUFDLENBQUN1RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcG9DLENBQUMsQ0FBQyxDQUFDLENBQUN3b0MsQ0FBQyxDQUFDeG9DLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNpbEMsQ0FBQyxDQUFDamlDLENBQUMsQ0FBQzRvQixJQUFJLENBQUM1ckIsQ0FBQyxDQUFDMEIsQ0FBQyxDQUFDZ1AsQ0FBQyxDQUFDMVEsQ0FBQyxDQUFDLENBQUN3b0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RiLENBQUMsQ0FBQ2p4QixLQUFLLENBQUMsQ0FBQyxDQUFDdXFCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzNKLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzdDLEdBQUcsQ0FBQyxDQUFDK04sUUFBUSxDQUFDLFVBQVUsQ0FBQ2dDLFVBQVUsQ0FBQyxTQUFTLENBQUM2QixJQUFJLENBQUMsQ0FBQzVyQixDQUFDLENBQUMwQixDQUFDLENBQUN3RSxHQUFHLENBQUMsQ0FBQzIrQixDQUFDLENBQUNoeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzVJLE1BQU0sQ0FBQyxDQUFDLENBQUM4b0IsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMvWSxHQUFHLENBQUMsQ0FBQytOLFFBQVEsQ0FBQyxVQUFVLENBQUNpSCxRQUFRLENBQUMsUUFBUSxDQUFDbEgsS0FBSyxDQUFDcG1CLENBQUMsQ0FBQ3dzQixNQUFNLENBQUNyYixDQUFDLENBQUMrWSxJQUFJLENBQUNxWixDQUFDLENBQUMsQ0FBQ2lFLENBQUMsQ0FBQ3g0QixDQUFDLENBQUNoUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3RSxHQUFHLENBQUNvL0IsQ0FBQyxDQUFDLENBQUM0RCxDQUFDLENBQUN0QixDQUFDLENBQUMvMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd1ksT0FBTyxDQUFDNmQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMVksT0FBTyxDQUFDLENBQUM1RSxJQUFJLENBQUNxWixDQUFDLENBQUMsQ0FBQ2lFLENBQUMsQ0FBQyxDQUFDLENBQUN4NEIsQ0FBQyxDQUFDaFAsQ0FBQyxDQUFDLENBQUN3RSxHQUFHLENBQUNvL0IsQ0FBQyxDQUFDLENBQUM0RCxDQUFDLENBQUMsQ0FBQyxDQUFDdEIsQ0FBQyxDQUFDLzBCLENBQUMsQ0FBQyxDQUFDd1ksT0FBTyxDQUFDNmQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JtQyxDQUFDLENBQUM4cEIsUUFBUSxFQUFFLEdBQUcsQ0FBQzlwQixDQUFDLENBQUN5cEIsTUFBTSxDQUFDOEksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ2pJLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxNQUFNLEdBQUd2eUIsQ0FBQyxDQUFDK3JDLElBQUksQ0FBQ253QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6RSxHQUFHLENBQUMsU0FBUyxDQUFDb2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzVFLE9BQU8sQ0FBQyxDQUFDbkYsT0FBTyxDQUFDK0osQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbGpCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3lhLFFBQVEsQ0FBQzlwQixDQUFDLENBQUM4cEIsUUFBUSxDQUFDTCxNQUFNLENBQUN6cEIsQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQ3lELFFBQVEsQ0FBQ2gzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDakksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDcjlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDK3JDLElBQUksQ0FBQy9KLENBQUMsQ0FBQyxNQUFNLEdBQUd0MUIsQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDLE1BQU0sR0FBR3VQLENBQUMsQ0FBQzAxQixDQUFDLENBQUNwaUMsQ0FBQyxDQUFDZ3VDLElBQUksRUFBRSxFQUFFLENBQUN2TCxDQUFDLENBQUMsV0FBVyxDQUFDL2hDLElBQUksQ0FBQzBoQyxDQUFDLENBQUMsQ0FBQ3YwQixDQUFDLENBQUMsQ0FBQyxDQUFDN04sQ0FBQyxDQUFDaXVDLFVBQVUsQ0FBQ2xKLENBQUMsQ0FBQ2wzQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMwM0IsQ0FBQyxDQUFDdmxDLENBQUMsQ0FBQzhwQixRQUFRLENBQUMsQ0FBQyxDQUFDNmIsQ0FBQyxDQUFDL3BCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNnSCxpQkFBaUIsQ0FBQy9aLENBQUMsQ0FBQyxDQUFDbEksQ0FBQyxDQUFDa0ksQ0FBQyxDQUFDc2EsT0FBTyxDQUFDLENBQUMsQ0FBQ3pHLENBQUMsQ0FBQyxDQUFDOEYsSUFBSSxDQUFDdHdCLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNzeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2djLENBQUMsQ0FBQyxDQUFDNkYsSUFBSSxDQUFDdHdCLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNzeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xxQixDQUFDLENBQUMsQ0FBQ2txQixDQUFDLENBQUMwYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzFhLENBQUMsQ0FBQzBhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsbUMsQ0FBQyxDQUFDMHpCLENBQUMsQ0FBQ2xqQixLQUFLLENBQUMsQ0FBQyxDQUFDN1gsTUFBTSxDQUFDaXJDLENBQUMsRUFBRSxDQUFDTCxDQUFDLENBQUN0UyxRQUFRLENBQUMyUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDdGlDLENBQUMsQ0FBQ2hELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2lwQyxDQUFDLENBQUM4RixJQUFJLENBQUNuSCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNDLENBQUMsQ0FBQ2lFLENBQUMsQ0FBQzZGLElBQUksQ0FBQ25ILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM0MsQ0FBQyxDQUFDaUUsQ0FBQyxDQUFDNkYsSUFBSSxDQUFDbkgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL0MsQ0FBQyxFQUFFLENBQUN6UCxDQUFDLENBQUNzYSxPQUFPLENBQUN4RyxDQUFDLENBQUM2RixJQUFJLENBQUMsQ0FBQ3ZHLENBQUMsRUFBRUEsQ0FBQyxDQUFDeHVCLEdBQUcsQ0FBQ3lFLENBQUMsQ0FBQzBwQixPQUFPLENBQUMyRyxTQUFTLENBQUM1RixDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUM2RixJQUFJLENBQUM3aEIsQ0FBQyxDQUFDLENBQUNrSSxDQUFDLENBQUNsakIsS0FBSyxDQUFDLFFBQVEsQ0FBQ25aLENBQUMsQ0FBQyxDQUFDeXZDLENBQUMsRUFBRUEsQ0FBQyxDQUFDaFksT0FBTyxDQUFDL1IsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQzJHLFNBQVMsQ0FBQzdGLENBQUMsQ0FBQyxDQUFDYixDQUFDLENBQUN2bEMsQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQyxDQUFDa0UsT0FBTyxDQUFDL1IsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQzJHLFNBQVMsQ0FBQzVGLENBQUMsQ0FBQyxDQUFDZCxDQUFDLENBQUN2bEMsQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQyxDQUFDdnpCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeTNCLE9BQU8sQ0FBQ3lZLENBQUMsQ0FBQ2IsQ0FBQyxDQUFDdmxDLENBQUMsQ0FBQ3lwQixNQUFNLENBQUMsQ0FBQ2tFLE9BQU8sQ0FBQzBZLENBQUMsQ0FBQ2QsQ0FBQyxDQUFDdmxDLENBQUMsQ0FBQ3lwQixNQUFNLENBQUMsQ0FBQ3BhLEtBQUssQ0FBQ25aLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNwZ0MsT0FBTyxDQUFDcXRCLENBQUMsQ0FBQzF6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDK2MsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ2pJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDdThCLGVBQWUsQ0FBQzFXLENBQUMsQ0FBQ3BiLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHblgsQ0FBQyxDQUFDK3JDLElBQUksRUFBRSxDQUFDci9CLENBQUMsQ0FBQzhiLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzVNLENBQUMsQ0FBQzBwQixPQUFPLENBQUM2RyxTQUFTLENBQUM1WixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcGIsR0FBRyxDQUFDLENBQUMrMkIsZUFBZSxDQUFDLE1BQU0sQ0FBQ2pGLGVBQWUsQ0FBQ2pwQyxDQUFDLENBQUNtdUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUN4Z0IsT0FBTyxDQUFDamhCLENBQUMsQ0FBQyxDQUFDMkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDeWEsUUFBUSxDQUFDOXBCLENBQUMsQ0FBQzhwQixRQUFRLENBQUNMLE1BQU0sQ0FBQ3pwQixDQUFDLENBQUN5cEIsTUFBTSxDQUFDeUQsUUFBUSxDQUFDaDNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNqSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ3llLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3dtQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQ2szQixDQUFDLENBQUMva0MsQ0FBQyxDQUFDK3JDLElBQUksQ0FBQ3hHLENBQUMsQ0FBQyxRQUFRLEdBQUdSLENBQUMsQ0FBQ1ksQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQzBYLEtBQUssRUFBRSxNQUFNLENBQUMyUyxDQUFDLENBQUNycUIsQ0FBQyxDQUFDb3VDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQ2hJLENBQUMsQ0FBQ2pwQyxDQUFDLENBQUNnYSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUNrdkIsQ0FBQyxDQUFDbHBDLENBQUMsQ0FBQytuQixRQUFRLENBQUMsQ0FBQyxDQUFDL2tCLENBQUMsQ0FBQ3liLENBQUMsQ0FBQzBwQixPQUFPLENBQUMwRyxnQkFBZ0IsQ0FBQzd1QyxDQUFDLENBQUMsQ0FBQzBCLENBQUMsQ0FBQ21CLENBQUMsQ0FBQ21wQyxJQUFJLEVBQUVocEMsQ0FBQyxDQUFDNlAsQ0FBQyxDQUFDaFEsQ0FBQyxDQUFDMHRCLEVBQUUsRUFBRTlSLENBQUMsQ0FBQzBwQixPQUFPLENBQUMwRyxnQkFBZ0IsQ0FBQzd1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5ZSxDQUFDLENBQUMwcEIsT0FBTyxDQUFDZ0gsaUJBQWlCLENBQUNudkMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHNG5DLENBQUMsRUFBRSxDQUFDL0MsQ0FBQyxDQUFDbmpDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDbVIsQ0FBQyxDQUFDQSxDQUFDLENBQUNneUIsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDLENBQUN5OEIsSUFBSSxDQUFDLENBQUM1QyxDQUFDLENBQUMxbkMsQ0FBQyxDQUFDd3NCLE1BQU0sQ0FBQ2xyQixDQUFDLENBQUNrckIsTUFBTSxDQUFDc2IsQ0FBQyxDQUFDOW5DLENBQUMsQ0FBQ29tQixLQUFLLENBQUM5a0IsQ0FBQyxDQUFDOGtCLEtBQUssQ0FBQyxDQUFDeUksRUFBRSxDQUFDLENBQUM2WSxDQUFDLENBQUN2MkIsQ0FBQyxDQUFDcWIsTUFBTSxDQUFDbHJCLENBQUMsQ0FBQ2tyQixNQUFNLENBQUNzYixDQUFDLENBQUMzMkIsQ0FBQyxDQUFDaVYsS0FBSyxDQUFDOWtCLENBQUMsQ0FBQzhrQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHMGdCLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUNqNUIsQ0FBQyxDQUFDeThCLElBQUksQ0FBQzVDLENBQUMsR0FBRzc1QixDQUFDLENBQUNnaEIsRUFBRSxDQUFDNlksQ0FBQyxFQUFFLENBQUMxbkMsQ0FBQyxDQUFDK2MsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3FILGFBQWEsQ0FBQ3h2QyxDQUFDLENBQUNzbEMsQ0FBQyxDQUFDLzFCLENBQUMsQ0FBQ3k4QixJQUFJLENBQUM1QyxDQUFDLENBQUMxbkMsQ0FBQyxDQUFDLENBQUNtUixDQUFDLENBQUM0TCxDQUFDLENBQUMwcEIsT0FBTyxDQUFDcUgsYUFBYSxDQUFDeHZDLENBQUMsQ0FBQ3NsQyxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDZ2hCLEVBQUUsQ0FBQzZZLENBQUMsQ0FBQ3YyQixDQUFDLENBQUMsQ0FBQyxDQUFDdEQsQ0FBQyxDQUFDeThCLElBQUksQ0FBQ3hDLENBQUMsR0FBR2o2QixDQUFDLENBQUNnaEIsRUFBRSxDQUFDaVosQ0FBQyxFQUFFLENBQUM5bkMsQ0FBQyxDQUFDK2MsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3FILGFBQWEsQ0FBQ3h2QyxDQUFDLENBQUMwUSxDQUFDLENBQUNuQixDQUFDLENBQUN5OEIsSUFBSSxDQUFDeEMsQ0FBQyxDQUFDOW5DLENBQUMsQ0FBQyxDQUFDbVIsQ0FBQyxDQUFDNEwsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3FILGFBQWEsQ0FBQ3h2QyxDQUFDLENBQUMwUSxDQUFDLENBQUNuQixDQUFDLENBQUNnaEIsRUFBRSxDQUFDaVosQ0FBQyxDQUFDMzJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRzIxQixDQUFDLEVBQUUsTUFBTSxHQUFHQSxDQUFDLENBQUMsRUFBRWo1QixDQUFDLENBQUN5OEIsSUFBSSxDQUFDNUMsQ0FBQyxHQUFHNzVCLENBQUMsQ0FBQ2doQixFQUFFLENBQUM2WSxDQUFDLEVBQUUsQ0FBQzFuQyxDQUFDLENBQUMrYyxDQUFDLENBQUMwcEIsT0FBTyxDQUFDcUgsYUFBYSxDQUFDeHZDLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUMxMUIsQ0FBQyxDQUFDeThCLElBQUksQ0FBQzVDLENBQUMsQ0FBQzFuQyxDQUFDLENBQUMsQ0FBQ21SLENBQUMsQ0FBQzRMLENBQUMsQ0FBQzBwQixPQUFPLENBQUNxSCxhQUFhLENBQUN4dkMsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQzExQixDQUFDLENBQUNnaEIsRUFBRSxDQUFDNlksQ0FBQyxDQUFDdjJCLENBQUMsQ0FBQyxDQUFDLENBQUNxYSxDQUFDLEVBQUUsQ0FBQ2tJLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzBwQixPQUFPLENBQUMrRyxXQUFXLENBQUNoaUIsQ0FBQyxDQUFDbHFCLENBQUMsQ0FBQyxDQUFDdEIsQ0FBQyxDQUFDd0UsR0FBRyxDQUFDLENBQUNsRCxDQUFDLENBQUNzbEMsV0FBVyxDQUFDNW1DLENBQUMsQ0FBQzRtQyxXQUFXLENBQUMsQ0FBQ2xULENBQUMsQ0FBQ2dVLENBQUMsQ0FBQ0YsQ0FBQyxDQUFDaGpDLEdBQUcsQ0FBQ3hFLENBQUMsQ0FBQ2txQixJQUFJLENBQUMsQ0FBQzVvQixDQUFDLENBQUNxbEMsVUFBVSxDQUFDM21DLENBQUMsQ0FBQzJtQyxVQUFVLENBQUMsQ0FBQ2pULENBQUMsQ0FBQ29VLENBQUMsQ0FBQ04sQ0FBQyxDQUFDdGQsSUFBSSxDQUFDL1ksQ0FBQyxDQUFDM00sR0FBRyxDQUFDLENBQUNsRCxDQUFDLENBQUNzbEMsV0FBVyxDQUFDejFCLENBQUMsQ0FBQ3kxQixXQUFXLENBQUMsQ0FBQ2xULENBQUMsQ0FBQ2dVLENBQUMsQ0FBQ0YsQ0FBQyxDQUFDaGpDLEdBQUcsQ0FBQzJNLENBQUMsQ0FBQytZLElBQUksQ0FBQyxDQUFDNW9CLENBQUMsQ0FBQ3FsQyxVQUFVLENBQUN4MUIsQ0FBQyxDQUFDdzFCLFVBQVUsQ0FBQyxDQUFDalQsQ0FBQyxDQUFDb1UsQ0FBQyxDQUFDTixDQUFDLENBQUN0ZCxJQUFJLENBQUMsQ0FBQzVyQixDQUFDLENBQUNnYSxHQUFHLENBQUN0WSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRzhtQyxDQUFDLEVBQUUsTUFBTSxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDbEQsQ0FBQyxDQUFDQSxDQUFDLENBQUMvdEMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNBLE1BQU0sQ0FBQzB0QyxDQUFDLENBQUMsQ0FBQ3YwQixDQUFDLENBQUNBLENBQUMsQ0FBQ25aLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDeUksQ0FBQyxDQUFDMkcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDN0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSS9CLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMyVyxDQUFDLENBQUMzVyxDQUFDLENBQUMwcEIsT0FBTyxDQUFDMEcsZ0JBQWdCLENBQUM5MUMsQ0FBQyxDQUFDLENBQUM4ckMsQ0FBQyxDQUFDLENBQUMzVyxNQUFNLENBQUNrSCxDQUFDLENBQUNsSCxNQUFNLENBQUMzZSxDQUFDLENBQUN5OEIsSUFBSSxDQUFDNUMsQ0FBQyxDQUFDdGhCLEtBQUssQ0FBQ3NOLENBQUMsQ0FBQ3ROLEtBQUssQ0FBQ3ZZLENBQUMsQ0FBQ3k4QixJQUFJLENBQUN4QyxDQUFDLENBQUNsQixXQUFXLENBQUNsVCxDQUFDLENBQUNrVCxXQUFXLENBQUMvNEIsQ0FBQyxDQUFDeThCLElBQUksQ0FBQzVDLENBQUMsQ0FBQ2YsVUFBVSxDQUFDalQsQ0FBQyxDQUFDaVQsVUFBVSxDQUFDOTRCLENBQUMsQ0FBQ3k4QixJQUFJLENBQUN4QyxDQUFDLENBQUMsQ0FBQ3hwQyxDQUFDLENBQUMsQ0FBQ2t1QixNQUFNLENBQUNrSCxDQUFDLENBQUNsSCxNQUFNLENBQUMzZSxDQUFDLENBQUNnaEIsRUFBRSxDQUFDNlksQ0FBQyxDQUFDdGhCLEtBQUssQ0FBQ3NOLENBQUMsQ0FBQ3ROLEtBQUssQ0FBQ3ZZLENBQUMsQ0FBQ2doQixFQUFFLENBQUNpWixDQUFDLENBQUNsQixXQUFXLENBQUNsVCxDQUFDLENBQUNsSCxNQUFNLENBQUMzZSxDQUFDLENBQUNnaEIsRUFBRSxDQUFDNlksQ0FBQyxDQUFDZixVQUFVLENBQUNqVCxDQUFDLENBQUN0TixLQUFLLENBQUN2WSxDQUFDLENBQUNnaEIsRUFBRSxDQUFDaVosQ0FBQyxDQUFDLENBQUNqNkIsQ0FBQyxDQUFDeThCLElBQUksQ0FBQzVDLENBQUMsR0FBRzc1QixDQUFDLENBQUNnaEIsRUFBRSxDQUFDNlksQ0FBQyxFQUFFLENBQUN2RSxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3FILGFBQWEsQ0FBQ3oyQyxDQUFDLENBQUN1c0MsQ0FBQyxDQUFDLzFCLENBQUMsQ0FBQ3k4QixJQUFJLENBQUM1QyxDQUFDLENBQUN2RSxDQUFDLENBQUMsQ0FBQzdrQyxDQUFDLENBQUN5ZSxDQUFDLENBQUMwcEIsT0FBTyxDQUFDcUgsYUFBYSxDQUFDejJDLENBQUMsQ0FBQ3VzQyxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDZ2hCLEVBQUUsQ0FBQzZZLENBQUMsQ0FBQ3BwQyxDQUFDLENBQUMsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDeThCLElBQUksQ0FBQ3hDLENBQUMsR0FBR2o2QixDQUFDLENBQUNnaEIsRUFBRSxDQUFDaVosQ0FBQyxFQUFFLENBQUMzRSxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3FILGFBQWEsQ0FBQ3oyQyxDQUFDLENBQUMyWCxDQUFDLENBQUNuQixDQUFDLENBQUN5OEIsSUFBSSxDQUFDeEMsQ0FBQyxDQUFDM0UsQ0FBQyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3FILGFBQWEsQ0FBQ3oyQyxDQUFDLENBQUMyWCxDQUFDLENBQUNuQixDQUFDLENBQUNnaEIsRUFBRSxDQUFDaVosQ0FBQyxDQUFDeHBDLENBQUMsQ0FBQyxDQUFDLENBQUNvb0MsQ0FBQyxFQUFFM3BCLENBQUMsQ0FBQzBwQixPQUFPLENBQUM2RyxTQUFTLENBQUNqMkMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ2loQixHQUFHLENBQUM2cUIsQ0FBQyxDQUFDLENBQUM5ckMsQ0FBQyxDQUFDeTNCLE9BQU8sQ0FBQ3h3QixDQUFDLENBQUM2QyxDQUFDLENBQUM4cEIsUUFBUSxDQUFDOXBCLENBQUMsQ0FBQ3lwQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzhiLENBQUMsRUFBRTNwQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDOEcsWUFBWSxDQUFDbDJDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2lILENBQUMsQ0FBQ3d3QixPQUFPLENBQUMzZCxDQUFDLENBQUMsQ0FBQ1gsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDeWEsUUFBUSxDQUFDOXBCLENBQUMsQ0FBQzhwQixRQUFRLENBQUNMLE1BQU0sQ0FBQ3pwQixDQUFDLENBQUN5cEIsTUFBTSxDQUFDeUQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWx0QixDQUFDLENBQUM3QyxDQUFDLENBQUNnK0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUduckIsQ0FBQyxDQUFDd1ksT0FBTyxFQUFFcnJCLENBQUMsQ0FBQ2dhLEdBQUcsQ0FBQyxTQUFTLENBQUN0WSxDQUFDLENBQUMycEIsT0FBTyxDQUFDLENBQUMrYyxDQUFDLEVBQUUsQ0FBQ3BvQyxDQUFDLENBQUNnYSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBR2l2QixDQUFDLENBQUMsVUFBVSxDQUFDQSxDQUFDLENBQUMsQ0FBQ2pMLE1BQU0sQ0FBQ243QixDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzBwQixPQUFPLENBQUM2RyxTQUFTLENBQUNodkMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2pILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNqSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQzFNLENBQUMsQ0FBQytyQyxJQUFJLENBQUMvSixDQUFDLENBQUNsUyxRQUFRLENBQUM5dkIsQ0FBQyxDQUFDNHBCLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBR2tHLFFBQVEsQ0FBQzl2QixDQUFDLENBQUM0cEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUdsZCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDb3dDLElBQUksQ0FBQ3Z0QixDQUFDLENBQUMwcEIsT0FBTyxDQUFDMEcsZ0JBQWdCLENBQUN6WixDQUFDLENBQUMsQ0FBQzdFLEVBQUUsQ0FBQzlSLENBQUMsQ0FBQzBwQixPQUFPLENBQUMwRyxnQkFBZ0IsQ0FBQ3paLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUM0dEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDUSxNQUFNLENBQUNwdUMsQ0FBQyxDQUFDb3VDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDcHVDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNxdUMsSUFBSSxFQUFFLENBQUNseEMsQ0FBQyxDQUFDZ3NDLElBQUksQ0FBQzNnQixPQUFPLENBQUMsQ0FBQyxDQUFDcnJCLENBQUMsQ0FBQ3V3QixFQUFFLENBQUNsRixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM1TSxDQUFDLENBQUMwcEIsT0FBTyxDQUFDRCxNQUFNLENBQUMySSxJQUFJLENBQUM3NEMsSUFBSSxDQUFDLElBQUksQ0FBQ2dJLENBQUMsQ0FBQ2pILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDakksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDcjlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2lILENBQUMsQ0FBQyxDQUFDcXVDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3prQixPQUFPLENBQUNrRyxRQUFRLENBQUM5dkIsQ0FBQyxDQUFDNHBCLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDaE8sQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ0QsTUFBTSxDQUFDM3RCLEtBQUssQ0FBQ3ZpQixJQUFJLENBQUMsSUFBSSxDQUFDbzlCLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ2pJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQzFNLENBQUMsQ0FBQytyQyxJQUFJLENBQUMvSixDQUFDLENBQUMsTUFBTSxHQUFHdDFCLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQyxNQUFNLEdBQUd1UCxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDSixDQUFDLEVBQUU3a0MsQ0FBQyxDQUFDc2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ppQyxDQUFDLENBQUM4dEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMxTCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdjBCLENBQUMsQ0FBQzdOLENBQUMsQ0FBQzhwQixRQUFRLENBQUMyWSxDQUFDLENBQUNzQyxDQUFDLENBQUMsQ0FBQyxDQUFDUSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxDQUFDLENBQUNwVCxDQUFDLENBQUNsakIsS0FBSyxDQUFDLENBQUMsQ0FBQzdYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ3dxQyxDQUFDLEVBQUUsQ0FBQ3pQLENBQUMsQ0FBQy9sQixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDK2xCLENBQUMsQ0FBQ3BiLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNrQixJQUFJLENBQUMsQ0FBQyxDQUFDMHNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RDLENBQUMsQ0FBQzhDLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNoVCxDQUFDLENBQUM1RSxPQUFPLENBQUMsQ0FBQ25GLE9BQU8sQ0FBQ3VjLENBQUMsQ0FBQyxDQUFDbDNCLENBQUMsQ0FBQzdOLENBQUMsQ0FBQ3lwQixNQUFNLENBQUMsQ0FBQ3NiLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3hTLENBQUMsQ0FBQzVFLE9BQU8sQ0FBQyxDQUFDbkYsT0FBTyxDQUFDdWMsQ0FBQyxDQUFDLENBQUNsM0IsQ0FBQyxDQUFDN04sQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQyxDQUFDOEksQ0FBQyxDQUFDbGpCLEtBQUssQ0FBQ25aLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNwZ0MsT0FBTyxDQUFDcXRCLENBQUMsQ0FBQ29ULENBQUMsQ0FBQ2xELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3bUIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ2pJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDcjlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzdsQixDQUFDLENBQUNrUCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQzR0QyxTQUFTLEVBQUUsTUFBTSxDQUFDendDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQzZ0QyxRQUFRLEVBQUUsRUFBRSxDQUFDekwsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQzh0QyxLQUFLLEVBQUUsQ0FBQyxDQUFDckwsQ0FBQyxDQUFDLENBQUMsQ0FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQ3YwQixDQUFDLENBQUNqVSxJQUFJLENBQUMwckIsS0FBSyxDQUFDdGxCLENBQUMsQ0FBQzhwQixRQUFRLENBQUMyWSxDQUFDLENBQUMsQ0FBQ3NDLENBQUMsQ0FBQyxJQUFJLEdBQUcvQyxDQUFDLEVBQUUsTUFBTSxHQUFHQSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQ3VELENBQUMsQ0FBQyxJQUFJLEdBQUd2RCxDQUFDLEVBQUUsTUFBTSxHQUFHQSxDQUFDLENBQUMyRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0YixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNDLENBQUMsQ0FBQzM1QixDQUFDLENBQUMyQyxLQUFLLENBQUMsQ0FBQyxDQUFDN1gsTUFBTSxDQUFDLEdBQUcsQ0FBQ29rQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDZ0gsaUJBQWlCLENBQUM1L0IsQ0FBQyxDQUFDLENBQUNpNUIsQ0FBQyxDQUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDcG9DLENBQUMsQ0FBQ2t0QixDQUFDLENBQUMwYSxDQUFDLENBQUMsQ0FBQyxDQUFDUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3BvQyxDQUFDLENBQUNpcEMsQ0FBQyxDQUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNwb0MsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDaWhCLE9BQU8sQ0FBQ2dZLENBQUMsQ0FBQzkzQixDQUFDLENBQUM3TixDQUFDLENBQUN5cEIsTUFBTSxDQUFDLENBQUMyWSxDQUFDLENBQUM3UCxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDN2xCLENBQUMsQ0FBQ2loQixPQUFPLENBQUN0RCxDQUFDLENBQUN4YyxDQUFDLENBQUM3TixDQUFDLENBQUN5cEIsTUFBTSxDQUFDLENBQUNrRSxPQUFPLENBQUN5WSxDQUFDLENBQUN2NEIsQ0FBQyxDQUFDN04sQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQyxDQUFDL2MsQ0FBQyxDQUFDaWhCLE9BQU8sQ0FBQ3RELENBQUMsQ0FBQ3hjLENBQUMsQ0FBQzdOLENBQUMsQ0FBQ3lwQixNQUFNLENBQUMsQ0FBQ2tFLE9BQU8sQ0FBQ2dZLENBQUMsQ0FBQzkzQixDQUFDLENBQUMsQ0FBQyxDQUFDN04sQ0FBQyxDQUFDeXBCLE1BQU0sQ0FBQyxDQUFDcGEsS0FBSyxDQUFDblosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ3BnQyxPQUFPLENBQUN3SCxDQUFDLENBQUMyNUIsQ0FBQyxDQUFDNUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdtQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDakksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDcjlCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUNwbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDemUsQ0FBQyxDQUFDLENBQUN1d0MsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM1a0IsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDakUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNzZCxDQUFDLENBQUNwaUMsQ0FBQyxDQUFDK3JDLElBQUksQ0FBQ3RKLENBQUMsQ0FBQ3ppQyxDQUFDLENBQUM0dEMsU0FBUyxFQUFFLE1BQU0sQ0FBQy8vQixDQUFDLENBQUMsSUFBSSxHQUFHNDBCLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDc0MsQ0FBQyxDQUFDLElBQUksR0FBR3RDLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQzhDLENBQUMsQ0FBQ3ZsQyxDQUFDLENBQUM2dEMsUUFBUSxFQUFFN0wsQ0FBQyxDQUFDLEtBQUssR0FBR24wQixDQUFDLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4M0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL3BCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNnSCxpQkFBaUIsQ0FBQ3RLLENBQUMsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDNkssT0FBTyxDQUFDLENBQUMsQ0FBQ25nQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDOWMsUUFBUSxDQUFDLENBQUMsQ0FBQ3JYLENBQUMsQ0FBQyxDQUFDODNCLENBQUMsQ0FBQzkzQixDQUFDLENBQUMsQ0FBQyxDQUFDazNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsQ0FBQyxDQUFDNzRCLENBQUMsQ0FBQ2k1QixDQUFDLENBQUN1RyxJQUFJLENBQUNsSyxDQUFDLENBQUM2SyxPQUFPLENBQUMsQ0FBQyxDQUFDbEgsQ0FBQyxDQUFDdUcsSUFBSSxDQUFDL3VDLENBQUMsQ0FBQ3NsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa0QsQ0FBQyxDQUFDdUcsSUFBSSxDQUFDL3VDLENBQUMsQ0FBQ3NsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBR0wsQ0FBQyxFQUFFLENBQUNKLENBQUMsQ0FBQzZLLE9BQU8sQ0FBQ2xILENBQUMsQ0FBQ3VHLElBQUksQ0FBQyxDQUFDbEssQ0FBQyxDQUFDN3FCLEdBQUcsQ0FBQ3RKLENBQUMsQ0FBQzgzQixDQUFDLENBQUM5M0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzgzQixDQUFDLENBQUN1RyxJQUFJLENBQUMzWixDQUFDLENBQUNvVCxDQUFDLENBQUM5M0IsQ0FBQyxDQUFDLENBQUNuQixDQUFDLENBQUMsQ0FBQ3MxQixDQUFDLENBQUNyVSxPQUFPLENBQUNnWSxDQUFDLENBQUMsQ0FBQ3QyQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUN5YSxRQUFRLENBQUM5cEIsQ0FBQyxDQUFDOHBCLFFBQVEsQ0FBQ0wsTUFBTSxDQUFDenBCLENBQUMsQ0FBQ3lwQixNQUFNLENBQUN5RCxRQUFRLENBQUNoM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSWt3QyxDQUFDLENBQUN4cUIsQ0FBQyxDQUFDMHZCLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDbEYsQ0FBQyxDQUFDeHFCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNqSSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQ3I5QixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNreEIsUUFBUSxDQUFDOXNDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUNxQixTQUFTLENBQUMsUUFBUSxDQUFDM3RDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQzNYLENBQUMsQ0FBQzBKLFFBQVEsQ0FBQ3BFLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLEdBQUdxUyxDQUFDLENBQUMsQ0FBQ25CLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQ1MsVUFBVSxDQUFDcXJDLENBQUMsQ0FBQ3QxQixDQUFDLENBQUN6VCxJQUFJLENBQUMvQyxDQUFDLENBQUNtUyxJQUFJLEVBQUUyNUIsQ0FBQyxFQUFFLEtBQUssR0FBR3QxQixDQUFDLENBQUM5TSxRQUFRLENBQUNwRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMyQixDQUFDLENBQUN5ZSxDQUFDLENBQUMsZUFBZSxDQUFDb21CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMzRixNQUFNLENBQUMsQ0FBQyxFQUFFMkYsQ0FBQyxDQUFDcVAsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDeEwsSUFBSSxDQUFDNk0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3UwQixDQUFDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUN5SixRQUFRLENBQUN5aUMsQ0FBQyxFQUFFLENBQUNLLENBQUMsQ0FBQzdtQixDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUM0WCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyMEIsQ0FBQyxFQUFFLENBQUNMLENBQUMsQ0FBQyxDQUFDSyxDQUFDLENBQUM5aUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDeWlDLENBQUMsQ0FBQyxHQUFHLEdBQUd2MEIsQ0FBQyxDQUFDM1gsQ0FBQyxDQUFDbVMsSUFBSSxFQUFFa3FCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDNlAsQ0FBQyxFQUFFeG1CLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQ3NXLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRXhNLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDNmlCLENBQUMsQ0FBQ3pXLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDMCtCLFNBQVMsQ0FBQyxRQUFRLENBQUM3akMsQ0FBQyxDQUFDLENBQUMsT0FBTzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUNxQixTQUFTLENBQUM3akMsQ0FBQyxDQUFDLElBQUksRUFBRTRiLENBQUMsQ0FBQ3ZXLElBQUksQ0FBQ3JGLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3FCLFNBQVMsQ0FBQ2pvQixDQUFDLENBQUMxa0IsRUFBRSxDQUFDbzNDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDeGdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzhOLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMweUIsSUFBSSxDQUFDLENBQUMsQ0FBQzF5QixDQUFDLENBQUM0bUIsRUFBRSxDQUFDK0wsY0FBYyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXh1QyxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNwSixVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJdGMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDa1YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMwRyxDQUFDLENBQUMzakIsSUFBSSxDQUFDL0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdTRDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNKLElBQUksQ0FBQyxJQUFJLENBQUNqTSxPQUFPLENBQUNpTSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsSUFBSSxDQUFDOTJDLE1BQU0sQ0FBQyxDQUFDLElBQUlva0IsQ0FBQyxDQUFDLElBQUksQ0FBQzB5QixJQUFJLENBQUNwNUIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMwRyxDQUFDLENBQUNwa0IsTUFBTSxFQUFFLElBQUksQ0FBQzgyQyxJQUFJLENBQUNuekIsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQ3F6QixpQkFBaUIsQ0FBQyxDQUFDNXlCLENBQUMsQ0FBQ2puQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDMjVDLElBQUksQ0FBQ3A1QixJQUFJLENBQUMseUJBQXlCLENBQUMwRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMreUIsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDTCxJQUFJLENBQUM5MkMsTUFBTSxDQUFDLENBQUMsSUFBSXdJLENBQUMsQ0FBQyxJQUFJLENBQUNzdUMsSUFBSSxDQUFDcDVCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDbFYsQ0FBQyxDQUFDbEgsTUFBTSxDQUFDOGlCLENBQUMsQ0FBQ2poQixPQUFPLENBQUMsSUFBSSxDQUFDcUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3hJLE1BQU0sQ0FBQyxJQUFJLENBQUM4MkMsSUFBSSxDQUFDcDVCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQ2xWLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3N1QyxJQUFJLENBQUN6NEIsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUMyRixHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUdJLENBQUMsQ0FBQzFrQixFQUFFLENBQUNJLE1BQU0sQ0FBQ3MzQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNoekIsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMrSCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxTQUFTcThCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDLENBQUMsT0FBT3BtQixDQUFDLENBQUMzakIsSUFBSSxDQUFDeVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4VyxDQUFDLEVBQUVxdkIsVUFBVSxDQUFDM0osQ0FBQyxDQUFDekUsR0FBRyxDQUFDblgsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ3V5QixDQUFDLEVBQUUsQ0FBQ3I4QixDQUFDLEVBQUVxdkIsVUFBVSxDQUFDM0osQ0FBQyxDQUFDekUsR0FBRyxDQUFDblgsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ2dpQyxDQUFDLEVBQUUsQ0FBQzlyQyxDQUFDLEVBQUVxdkIsVUFBVSxDQUFDM0osQ0FBQyxDQUFDekUsR0FBRyxDQUFDblgsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJd1csQ0FBQyxDQUFDLE9BQU8sR0FBR3hXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzhyQyxDQUFDLENBQUM5ckMsQ0FBQyxDQUFDc0YsV0FBVyxDQUFDLENBQUMsQ0FBQzJCLENBQUMsQ0FBQyxDQUFDNnZDLFVBQVUsQ0FBQ3B4QixDQUFDLENBQUMxa0IsRUFBRSxDQUFDODFDLFVBQVUsQ0FBQ0QsV0FBVyxDQUFDbnhCLENBQUMsQ0FBQzFrQixFQUFFLENBQUM2MUMsV0FBVyxDQUFDdkgsVUFBVSxDQUFDNXBCLENBQUMsQ0FBQzFrQixFQUFFLENBQUNzdUMsVUFBVSxDQUFDQyxXQUFXLENBQUM3cEIsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQ3V1QyxXQUFXLENBQUMsQ0FBQzdwQixDQUFDLENBQUMxa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQ2hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzhKLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUdBLENBQUMsQ0FBQzdDLENBQUMsQ0FBQyxPQUFPLENBQUNqSCxDQUFDLENBQUMsQ0FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQzhDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDMmpCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQzZxQixDQUFDLENBQUN6UCxDQUFDLENBQUMsSUFBSSxDQUFDdnlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQyxPQUFPLENBQUNoQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM4SixDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxNQUFNLFFBQVEsRUFBRSxPQUFPMU0sQ0FBQyxDQUFDN0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQ2pILENBQUMsQ0FBQyxDQUFDZixJQUFJLENBQUMsSUFBSSxDQUFDNkssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDL0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMyakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDekUsR0FBRyxDQUFDNnFCLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxJQUFJLENBQUN2eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQ2dYLE9BQU8sQ0FBQyxRQUFRLENBQUMwTixDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzNOLEdBQUcsQ0FBQyxJQUFJLEVBQUUyTixDQUFDLENBQUMsSUFBSSxDQUFDNWpCLFVBQVUsQ0FBQyxJQUFJLENBQUNBLFVBQVUsQ0FBQzRMLE1BQU0sQ0FBQ2dZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQyxDQUFDNHVCLFNBQVMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUNDLE1BQU0sQ0FBQyxFQUFFLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUNDLEdBQUcsQ0FBQyxFQUFFLENBQUNDLEtBQUssQ0FBQyxFQUFFLENBQUNDLE1BQU0sQ0FBQyxFQUFFLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUNDLFNBQVMsQ0FBQyxFQUFFLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUNDLE1BQU0sQ0FBQyxHQUFHLENBQUNDLEtBQUssQ0FBQyxFQUFFLENBQUNDLEtBQUssQ0FBQyxFQUFFLENBQUNDLEdBQUcsQ0FBQyxDQUFDLENBQUNDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQ2gwQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDbjJCLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl1UCxDQUFDLENBQUMsc0NBQXNDLENBQUMsT0FBTyxRQUFRLENBQUM1YixDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUNsRyxPQUFPLENBQUM4aEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzFrQixFQUFFLENBQUMyNEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTd2QyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM2TixNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDQSxNQUFNLENBQUNyNEMsTUFBTSxDQUFDLElBQUksQ0FBQ0ksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2k0QyxNQUFNLENBQUMsQ0FBQyxDQUFDbmpDLENBQUMsQ0FBQyxJQUFJLENBQUNsVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM0VixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUNta0IsQ0FBQyxDQUFDLElBQUksQ0FBQ2x0QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUNrdEIsQ0FBQyxFQUFFLENBQUN2eUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3hILEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzRWLE9BQU8sQ0FBQyxDQUFDLENBQUMzVixJQUFJLENBQUMsQ0FBQyxDQUFDdXBDLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUNpTyxHQUFHLENBQUNqTyxDQUFDLENBQUN4SSxNQUFNLENBQUN3SSxDQUFDLENBQUN5TSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDdlcsQ0FBQyxDQUFDLGFBQWEsQ0FBQzBsQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDbjJCLGNBQWMsQ0FBQ2ttQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM3bEIsQ0FBQyxDQUFDQSxDQUFDLENBQUN1QixHQUFHLENBQUMrekIsQ0FBQyxDQUFDbCtCLElBQUksQ0FBQzVOLENBQUMsQ0FBQyxDQUFDZ1ksT0FBTyxDQUFDaFksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBCLFNBQVMsQ0FBQzhVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzFrQixFQUFFLENBQUM0NEMsWUFBWSxDQUFDLFFBQVEsQ0FBQzl2QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQ2loQixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUNvYixDQUFDLENBQUMsVUFBVSxHQUFHcjhCLENBQUMsQ0FBQ3dXLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUNnaUMsQ0FBQyxDQUFDLElBQUksQ0FBQzV6QixPQUFPLENBQUMsQ0FBQyxDQUFDeEssTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTVELENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPMlcsQ0FBQyxFQUFFLFFBQVEsR0FBR3Z5QixDQUFDLENBQUNtWCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN6SyxDQUFDLENBQUMxTCxJQUFJLENBQUNoQixDQUFDLENBQUNtWCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUNuWCxDQUFDLENBQUNtWCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUNuWCxDQUFDLENBQUNtWCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMzZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxPQUFPLEdBQUd0QyxDQUFDLEVBQUU4ckMsQ0FBQyxDQUFDeHFDLE1BQU0sQ0FBQ3dxQyxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ25iLGFBQWEsRUFBRXpNLFFBQVEsQ0FBQyxDQUFDLENBQUM0bkIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQzZpQixDQUFDLENBQUN6VyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzRxQyxRQUFRLENBQUMsUUFBUSxDQUFDL3ZDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdlcsSUFBSSxDQUFDckYsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxJQUFJLEVBQUVyOEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDcThCLENBQUMsRUFBRXI4QixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUwbEIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3FCLFNBQVMsQ0FBQzdqQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUMxa0IsRUFBRSxDQUFDNkIsTUFBTSxDQUFDLENBQUNpM0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXAwQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMySSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUNBLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRWdiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcTBCLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDaDRDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQytJLElBQUksQ0FBQyxJQUFJLENBQUNKLEVBQUUsQ0FBQyxFQUFFZ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDc1QsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RULENBQUMsQ0FBQzhtQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM1ckMsT0FBTyxDQUFDLFFBQVEsQ0FBQ2tDLE9BQU8sQ0FBQyxDQUFDczhCLE1BQU0sQ0FBQyxDQUFDLENBQUMzSCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUN3QyxPQUFPLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUMrZixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMzMEIsS0FBSyxDQUFDLE9BQU8sQ0FBQzQwQixNQUFNLENBQUMsc0NBQXNDLENBQUNDLFdBQVcsQ0FBQyxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDQyxZQUFZLENBQUMsc0JBQXNCLENBQUNILE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDSSxRQUFRLENBQUMsSUFBSSxDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDQyxjQUFjLENBQUMsTUFBTSxDQUFDQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUNDLFVBQVUsQ0FBQyxNQUFNLENBQUNDLGFBQWEsQ0FBQyxNQUFNLENBQUN4bEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDeWxCLFNBQVMsQ0FBQyxDQUFDSixjQUFjLENBQUMsTUFBTSxDQUFDQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUNDLFVBQVUsQ0FBQyxNQUFNLENBQUNDLGFBQWEsQ0FBQyxNQUFNLENBQUN4bEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDNlksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWxrQyxDQUFDLENBQUMsSUFBSSxDQUFDaEgsT0FBTyxDQUFDLElBQUksQ0FBQyszQyxRQUFRLENBQUMsSUFBSSxDQUFDQyxRQUFRLENBQUNwMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrcEIsU0FBUyxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLElBQUksQ0FBQ3pDLE9BQU8sQ0FBQ2g5QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDckYsQ0FBQyxDQUFDa3dDLFdBQVcsRUFBRWx3QyxDQUFDLENBQUNzMUIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRXQxQixDQUFDLENBQUNzMUIsTUFBTSxFQUFFLENBQUN0MUIsQ0FBQyxDQUFDczFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyYixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2p4QyxDQUFDLENBQUNzMUIsTUFBTSxFQUFFLENBQUN0MUIsQ0FBQyxDQUFDczFCLE1BQU0sRUFBRSxJQUFJLENBQUMwQyxPQUFPLENBQUN4Z0MsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDOHFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzhCLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDK0wsTUFBTSxDQUFDLElBQUksQ0FBQzdhLE1BQU0sQ0FBQzRiLEtBQUssQ0FBQyxJQUFJLENBQUM1YixNQUFNLENBQUM5OUIsTUFBTSxDQUFDLElBQUksQ0FBQzg5QixNQUFNLENBQUN4MUIsSUFBSSxDQUFDLENBQUMsQ0FBQzhiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdTFCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlueEMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUN2NUIsT0FBTyxDQUFDcTNDLEtBQUssQ0FBQzlkLENBQUMsRUFBRSxDQUFDdnlCLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNrcEIsU0FBUyxDQUFDOWtDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLENBQUN1eUIsQ0FBQyxDQUFDNGQsTUFBTSxDQUFDLENBQUNud0MsQ0FBQyxDQUFDNGpCLFNBQVMsQ0FBQyxJQUFJLENBQUNvVSxPQUFPLENBQUMsQ0FBQzloQyxDQUFDLENBQUMsSUFBSSxDQUFDby9CLE1BQU0sQ0FBQzluQixRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxJQUFJLENBQUM4MkIsWUFBWSxDQUFDcHVDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM0ZCxNQUFNLENBQUMsQ0FBQ3JMLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUMsSUFBSSxDQUFDcThCLENBQUMsQ0FBQytkLFlBQVksQ0FBQyxDQUFDeEwsU0FBUyxDQUFDLElBQUksQ0FBQzlNLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ29aLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzlNLFlBQVksQ0FBQyxJQUFJLENBQUN0TSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUNBLE9BQU8sQ0FBQ3hxQixRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzIwQixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJem9CLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDblQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzhJLE9BQU8sQ0FBQzlJLFVBQVUsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDK2dCLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbUIsYUFBYSxDQUFDLENBQUMsQ0FBQ3gxQixDQUFDLENBQUMsSUFBSSxDQUFDb2MsT0FBTyxDQUFDbDRCLElBQUksQ0FBQyxDQUFDLENBQUNxWCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDK1gsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLENBQUMrZ0IsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDajNDLE9BQU8sQ0FBQ28zQyxXQUFXLEVBQUV4MEIsQ0FBQyxDQUFDekUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDcXRCLFVBQVUsQ0FBQyxRQUFRLENBQUM1b0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsTUFBTSxRQUFRLEdBQUc0YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5MUIsU0FBUyxDQUFDcnhDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUc0YixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDdWlCLEtBQUssRUFBRSxJQUFJLENBQUN5cEIsSUFBSSxDQUFDLElBQUksQ0FBQ2hOLE9BQU8sQ0FBQyxJQUFJLENBQUNoL0IsT0FBTyxDQUFDdWlCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQysxQixZQUFZLENBQUN0eEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMraUMsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRzRiLENBQUMsRUFBRTViLENBQUMsRUFBRSxJQUFJLENBQUNoSCxPQUFPLENBQUNzOEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQytiLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUd6MUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDdzFCLGFBQWEsQ0FBQyxDQUFDLENBQUNweEMsQ0FBQyxFQUFFLElBQUksQ0FBQ214QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDaE4sa0JBQWtCLENBQUMsUUFBUSxDQUFDdm9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21uQixNQUFNLENBQUNubkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeW1CLE9BQU8sQ0FBQ2g5QixJQUFJLENBQUMsZUFBZSxDQUFDdVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK29CLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDL29CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytvQixZQUFZLENBQUMsSUFBSSxDQUFDM00sT0FBTyxDQUFDL3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMrcEIsT0FBTyxDQUFDbDRCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOGIsQ0FBQyxDQUFDLENBQUMsQ0FBQzIxQixRQUFRLENBQUMsUUFBUSxDQUFDdnhDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLENBQUNvZixNQUFNLEVBQUUsQ0FBQ3BmLENBQUMsQ0FBQ3dmLE9BQU8sQ0FBQyxDQUFDLElBQUl0cEIsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDc1MsQ0FBQyxDQUFDLElBQUksQ0FBQ3lGLE9BQU8sQ0FBQ3hnQyxNQUFNLENBQUNrVixDQUFDLENBQUMsSUFBSSxDQUFDc3JCLE9BQU8sQ0FBQ2pxQixLQUFLLENBQUMvTixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQzJvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDaGlDLENBQUMsQ0FBQ2lnQixPQUFPLENBQUMsQ0FBQyxLQUFLL3BCLENBQUMsQ0FBQ3U1QyxLQUFLLENBQUMsS0FBS3Y1QyxDQUFDLENBQUM4NEMsSUFBSSxDQUFDaE4sQ0FBQyxDQUFDLElBQUksQ0FBQ2hLLE9BQU8sQ0FBQyxDQUFDdHJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzZsQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBS3I4QixDQUFDLENBQUNtNUMsSUFBSSxDQUFDLEtBQUtuNUMsQ0FBQyxDQUFDMDVDLEVBQUUsQ0FBQzVOLENBQUMsQ0FBQyxJQUFJLENBQUNoSyxPQUFPLENBQUMsQ0FBQ3RyQixDQUFDLENBQUMsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBS3I4QixDQUFDLENBQUN3NUMsS0FBSyxDQUFDLEtBQUt4NUMsQ0FBQyxDQUFDZzVDLEtBQUssQ0FBQyxJQUFJLENBQUNzQyxhQUFhLENBQUN4eEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs5SixDQUFDLENBQUNrNUMsSUFBSSxDQUFDcE4sQ0FBQyxDQUFDLElBQUksQ0FBQ2hLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzloQyxDQUFDLENBQUMrNEMsR0FBRyxDQUFDak4sQ0FBQyxDQUFDLElBQUksQ0FBQ2hLLE9BQU8sQ0FBQ3pGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lQLENBQUMsRUFBRSxDQUFDcG1CLENBQUMsQ0FBQzViLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDZ00sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdVcsQ0FBQyxDQUFDb21CLENBQUMsQ0FBQyxDQUFDMzhCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUN1VyxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDLENBQUMxakIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDdGUsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ20wQixhQUFhLENBQUMsUUFBUSxDQUFDenhDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNpZ0IsT0FBTyxHQUFHckUsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUMydkIsRUFBRSxFQUFFNXZDLENBQUMsQ0FBQ3dmLE9BQU8sRUFBRTVELENBQUMsQ0FBQzViLENBQUMsQ0FBQ21kLGFBQWEsQ0FBQyxDQUFDelAsSUFBSSxDQUFDLENBQUMsQ0FBQzRRLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDbXdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl6dUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQyxJQUFJLENBQUNpNEMsY0FBYyxDQUFDLENBQUMsQ0FBQ2p4QyxDQUFDLENBQUNzMUIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFdDFCLENBQUMsQ0FBQ2t3QyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNsWSxPQUFPLENBQUN4Z0MsTUFBTSxDQUFDLENBQUN3SSxDQUFDLENBQUNzMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDMVosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDczFCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrYixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDL2IsTUFBTSxDQUFDOTlCLE1BQU0sRUFBRSxDQUFDb2tCLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQyxJQUFJLENBQUM2bEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQy9NLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBDLE9BQU8sQ0FBQ3hnQyxNQUFNLEdBQUcsSUFBSSxDQUFDd2dDLE9BQU8sQ0FBQ2wwQixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQ3RNLE1BQU0sQ0FBQyxDQUFDd0ksQ0FBQyxDQUFDczFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLE1BQU0sQ0FBQzFaLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5MUIsU0FBUyxDQUFDejNDLElBQUksQ0FBQzR0QixHQUFHLENBQUMsQ0FBQyxDQUFDeG5CLENBQUMsQ0FBQ3MxQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3QxQixDQUFDLENBQUNzMUIsTUFBTSxDQUFDLElBQUksQ0FBQzBDLE9BQU8sQ0FBQ2pxQixLQUFLLENBQUMsSUFBSSxDQUFDdW5CLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzhiLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDMk8sY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXIxQixDQUFDLENBQUMsSUFBSSxDQUFDb2MsT0FBTyxDQUFDaDRCLENBQUMsQ0FBQyxJQUFJLENBQUMweEMsTUFBTSxDQUFDLElBQUksQ0FBQzFaLE9BQU8sQ0FBQyxJQUFJLENBQUNxSyxPQUFPLENBQUN2K0IsSUFBSSxDQUFDLElBQUksQ0FBQzlLLE9BQU8sQ0FBQ20zQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUNyTCxTQUFTLENBQUMsSUFBSSxDQUFDOU0sT0FBTyxDQUFDLG1EQUFtRCxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDMFosTUFBTSxDQUFDLElBQUksQ0FBQzFaLE9BQU8sQ0FBQ2w0QixJQUFJLENBQUMsQ0FBQyxDQUFDOEQsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUMyVSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3VzQixTQUFTLENBQUMsSUFBSSxDQUFDNE0sTUFBTSxDQUFDLHNCQUFzQixDQUFDLG1DQUFtQyxDQUFDLENBQUMxeEMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDZ2xDLElBQUksQ0FBQ3BwQixDQUFDLENBQUM1TyxHQUFHLENBQUMsSUFBSSxDQUFDZ3JCLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ04sSUFBSSxDQUFDaGxDLENBQUMsQ0FBQ2dOLEdBQUcsQ0FBQyxJQUFJLENBQUMwa0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwUCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJdGlDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUN1NUIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ2s2QyxXQUFXLENBQUMxakMsQ0FBQyxDQUFDLElBQUksQ0FBQzIxQixPQUFPLENBQUNqN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrdUIsTUFBTSxDQUFDLElBQUksQ0FBQ3FjLFdBQVcsQ0FBQ3o3QyxDQUFDLENBQUNvL0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDd1AsU0FBUyxDQUFDLElBQUksQ0FBQ3hQLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDZ1AsWUFBWSxDQUFDLElBQUksQ0FBQ2hQLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLElBQUksQ0FBQ3dQLFNBQVMsQ0FBQyxJQUFJLENBQUN4UCxNQUFNLENBQUN4MUIsSUFBSSxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQ3cxQixNQUFNLENBQUN4MUIsSUFBSSxDQUFDLENBQUMsQ0FBQ3VZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMmYsT0FBTyxDQUFDM3lCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUNwTixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJK0gsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ2d3QyxRQUFRLENBQUMsQ0FBQyxDQUFDM3FDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQ2t0QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDNE0sQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3lkLFFBQVEsQ0FBQyxDQUFDLENBQUMzcUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDckYsQ0FBQyxDQUFDcUYsSUFBSSxDQUFDLGVBQWUsQ0FBQ3FILENBQUMsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ2x0QixJQUFJLENBQUMsaUJBQWlCLENBQUNuUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0SixJQUFJLENBQUMsQ0FBQyxDQUFDdUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMyeUIsT0FBTyxDQUFDaHJCLEdBQUcsQ0FBQyxJQUFJLENBQUNzb0IsTUFBTSxDQUFDLENBQUNqd0IsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDaUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hJLElBQUksQ0FBQyxDQUFDLENBQUN1RixJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ2tULElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK2MsTUFBTSxDQUFDOTlCLE1BQU0sQ0FBQyxJQUFJLENBQUM4OUIsTUFBTSxDQUFDandCLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQ2lELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeEksSUFBSSxDQUFDLENBQUMsQ0FBQ3VGLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJ5QixPQUFPLENBQUN4L0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDNk0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4ckMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNHLFlBQVksQ0FBQ3A3QyxDQUFDLENBQUNxbEIsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHZ1gsQ0FBQyxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDMmUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnWCxPQUFPLENBQUM1MUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDeFUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSS9CLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMyVyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDaWhCLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEdBQUdvYixDQUFDLEVBQUUsT0FBTyxHQUFHQSxDQUFDLEVBQUUsQ0FBQ3Z5QixDQUFDLEVBQUU5SixDQUFDLENBQUN1dkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDek4sT0FBTyxDQUFDLy9CLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDK0gsQ0FBQyxFQUFFNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNnBCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN6TixPQUFPLENBQUNsNEIsSUFBSSxDQUFDLENBQUMsQ0FBQzdILElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDMmpCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3lQLE1BQU0sQ0FBQ3p4QixJQUFJLENBQUM0dEIsR0FBRyxDQUFDLENBQUMsQ0FBQ3huQixDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNteEIsV0FBVyxDQUFDLENBQUMsQ0FBQ254QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN5UCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsVSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHb2IsQ0FBQyxFQUFFLENBQUN2eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnNEIsT0FBTyxDQUFDbDRCLElBQUksQ0FBQyxDQUFDLENBQUM3SCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL0IsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3BQLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQ3RXLENBQUMsRUFBRTBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN2RCxJQUFJLENBQUMsQ0FBQyxDQUFDclksQ0FBQyxDQUFDcEcsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQ3huQixDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDa1UsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDbjFCLENBQUMsRUFBRTBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhTLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNxeEMsU0FBUyxDQUFDLFFBQVEsQ0FBQ3J4QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQ3k3QyxXQUFXLENBQUMzeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM5SixDQUFDLEdBQUcsSUFBSSxDQUFDby9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDcC9CLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLElBQUksQ0FBQ28vQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa2MsYUFBYSxDQUFDLENBQUNuNEMsTUFBTSxDQUFDbkQsQ0FBQyxDQUFDaW5CLGFBQWEsQ0FBQ2puQixDQUFDLENBQUNvbkIsY0FBYyxDQUFDMUIsQ0FBQyxDQUFDMWhCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeTNDLFdBQVcsQ0FBQyxRQUFRLENBQUMzeEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxRQUFRLEVBQUUsT0FBT0EsQ0FBQyxDQUFDLElBQUksQ0FBQ2c0QixPQUFPLENBQUN4L0IsRUFBRSxDQUFDd0gsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwMUIsWUFBWSxDQUFDLFFBQVEsQ0FBQ3R4QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLENBQUMwN0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDNXhDLENBQUMsRUFBRTRiLENBQUMsQ0FBQzNqQixJQUFJLENBQUMrSCxDQUFDLENBQUN6RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDcWdCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnbEMsSUFBSSxDQUFDLElBQUksQ0FBQ2hOLE9BQU8sQ0FBQy9wQixHQUFHLENBQUMsSUFBSSxDQUFDK3BCLE9BQU8sQ0FBQ2w0QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpa0MsR0FBRyxDQUFDLElBQUksQ0FBQy9MLE9BQU8sQ0FBQzloQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2dEMsR0FBRyxDQUFDLElBQUksQ0FBQy9MLE9BQU8sQ0FBQ2w0QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM4eEMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMU0sVUFBVSxDQUFDLElBQUksQ0FBQ2xOLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ21OLFVBQVUsQ0FBQyxJQUFJLENBQUNuTixPQUFPLENBQUMsQ0FBQyxDQUFDd1osYUFBYSxDQUFDLFFBQVEsQ0FBQ3h4QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsSUFBSSxDQUFDMVQsT0FBTyxDQUFDZ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMxTSxNQUFNLENBQUNuNEIsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDbWQsYUFBYSxDQUFDLENBQUNpbEIsQ0FBQyxDQUFDamxDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRzZrQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNTLENBQUMsQ0FBQ0wsQ0FBQyxFQUFFMTFCLENBQUMsQ0FBQ3dqQyxXQUFXLENBQUNyaUMsQ0FBQyxDQUFDNDBCLENBQUMsQ0FBQzdtQixDQUFDLENBQUMsQ0FBQyxDQUFDemUsQ0FBQyxDQUFDMkMsSUFBSSxDQUFDLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUMvQyxDQUFDLENBQUNsaUMsSUFBSSxDQUFDLENBQUMsQ0FBQ3lsQyxDQUFDLENBQUMsQ0FBQ3NNLFNBQVMsQ0FBQzdQLENBQUMsQ0FBQzhQLFFBQVEsQ0FBQy9NLENBQUMsQ0FBQ2dOLFNBQVMsQ0FBQ3RQLENBQUMsQ0FBQzdtQixDQUFDLENBQUMsQ0FBQyxDQUFDemUsQ0FBQyxDQUFDNjBDLFFBQVEsQ0FBQ25rQyxDQUFDLENBQUMsQ0FBQzdOLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUM4a0IsQ0FBQyxFQUFFLENBQUMxMUIsQ0FBQyxDQUFDd2pDLFdBQVcsRUFBRSxJQUFJLENBQUMzTixRQUFRLENBQUMsZ0JBQWdCLENBQUN2aUMsQ0FBQyxDQUFDdWxDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM3NEIsQ0FBQyxDQUFDNG9CLE1BQU0sQ0FBQ21OLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN6SyxPQUFPLENBQUNqcUIsS0FBSyxDQUFDNVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbTRCLE1BQU0sQ0FBQzhNLENBQUMsQ0FBQ3htQixDQUFDLENBQUMsQ0FBQyxDQUFDemUsQ0FBQyxDQUFDLElBQUksQ0FBQzgwQyxPQUFPLENBQUMxTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNqQixZQUFZLENBQUN0QyxDQUFDLENBQUMsNEJBQTRCLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3QxQixDQUFDLENBQUMyakMsS0FBSyxFQUFFLENBQUNuNkMsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQ3gwQixRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxJQUFJLENBQUM4MkIsWUFBWSxDQUFDcHVDLENBQUMsQ0FBQyxJQUFJLENBQUN3VyxDQUFDLENBQUMyakMsS0FBSyxDQUFDQyxZQUFZLENBQUMsQ0FBQ3hMLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUMsSUFBSSxDQUFDd1csQ0FBQyxDQUFDMmpDLEtBQUssQ0FBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQy9OLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2tDLFlBQVksQ0FBQ25uQyxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQzJuQyxTQUFTLENBQUMzbkMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLGlCQUFpQixDQUFDLENBQUN1UCxDQUFDLENBQUMyakMsS0FBSyxFQUFFLENBQUM5ZCxDQUFDLENBQUNwMUIsQ0FBQyxDQUFDcVEsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUMsSUFBSSxDQUFDODJCLFlBQVksQ0FBQy9SLENBQUMsQ0FBQyxJQUFJLENBQUM3bEIsQ0FBQyxDQUFDMmpDLEtBQUssQ0FBQ0YsTUFBTSxDQUFDLENBQUNyTCxTQUFTLENBQUN2UyxDQUFDLENBQUMsSUFBSSxDQUFDN2xCLENBQUMsQ0FBQzJqQyxLQUFLLENBQUNDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeEwsU0FBUyxDQUFDM25DLENBQUMsQ0FBQzJDLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ215QyxPQUFPLENBQUMsUUFBUSxDQUFDanlDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUM4SixDQUFDLENBQUNneUMsUUFBUSxDQUFDemYsQ0FBQyxDQUFDLElBQUksQ0FBQ3dlLFFBQVEsQ0FBQ3Y1QyxNQUFNLENBQUMsSUFBSSxDQUFDdTVDLFFBQVEsQ0FBQy93QyxDQUFDLENBQUM4eEMsUUFBUSxDQUFDLElBQUksQ0FBQ2YsUUFBUSxDQUFDOWlDLEdBQUcsQ0FBQyxJQUFJLENBQUMraUMsUUFBUSxDQUFDLENBQUM1NkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMjZCLFFBQVEsQ0FBQzc2QyxDQUFDLENBQUMsSUFBSSxDQUFDODZDLFFBQVEsQ0FBQ3plLENBQUMsQ0FBQyxJQUFJLENBQUN2NUIsT0FBTyxDQUFDMjBCLE9BQU8sQ0FBQyxJQUFJLENBQUN1a0IsUUFBUSxDQUFDaDhDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUNoYSxJQUFJLENBQUMsQ0FBQyxDQUFDcmlCLENBQUMsQ0FBQ21pQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzg1QixlQUFlLENBQUNueUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUNsdEIsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUNrdEIsQ0FBQyxDQUFDN2tCLElBQUksQ0FBQyxDQUFDLENBQUNySSxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDblAsQ0FBQyxDQUFDc0IsTUFBTSxFQUFFKzZCLENBQUMsQ0FBQy82QixNQUFNLENBQUMrNkIsQ0FBQyxDQUFDN2tCLElBQUksQ0FBQyxDQUFDLENBQUNySSxJQUFJLENBQUMsQ0FBQ2lELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3BTLENBQUMsQ0FBQ3NCLE1BQU0sRUFBRSxJQUFJLENBQUN3Z0MsT0FBTyxDQUFDcDBCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHa3NCLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3ZXLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNBLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25QLENBQUMsQ0FBQ21QLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUNxSSxJQUFJLENBQUMsQ0FBQyxDQUFDckksSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDaUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRwQyxRQUFRLENBQUMsUUFBUSxDQUFDdDJCLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDLElBQUksQ0FBQ2lsQyxDQUFDLENBQUMsQ0FBQyxDQUFDSyxDQUFDLENBQUM3bUIsQ0FBQyxDQUFDekUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDdEosQ0FBQyxDQUFDK04sQ0FBQyxDQUFDcGtCLE1BQU0sRUFBRSxDQUFDLENBQUN3SSxDQUFDLENBQUN4SSxNQUFNLEVBQUVva0IsQ0FBQyxDQUFDN04sS0FBSyxDQUFDLENBQUMsQ0FBQy9OLENBQUMsQ0FBQytOLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ2czQixDQUFDLENBQUMsSUFBSSxDQUFDL3JDLE9BQU8sQ0FBQzIwQixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM0WCxDQUFDLENBQUMxM0IsQ0FBQyxFQUFFazNCLENBQUMsQ0FBQzRJLElBQUksRUFBRTVJLENBQUMsQ0FBQ1ksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4b0MsQ0FBQyxDQUFDZzFDLGVBQWUsQ0FBQ2o4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU9xdkMsQ0FBQyxFQUFFLENBQUN2RCxDQUFDLENBQUN1RCxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBT0EsQ0FBQyxFQUFFLENBQUM3NEIsQ0FBQyxDQUFDNjRCLENBQUMsQ0FBQyxDQUFDNzRCLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFNjRCLENBQUMsQ0FBQzliLE1BQU0sRUFBRXNiLENBQUMsQ0FBQ3RiLE1BQU0sQ0FBQ3VZLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFdUQsQ0FBQyxDQUFDemIsUUFBUSxFQUFFaWIsQ0FBQyxDQUFDamIsUUFBUSxDQUFDOXBCLENBQUMsQ0FBQ3hJLE1BQU0sQ0FBQ29rQixDQUFDLENBQUNwa0IsTUFBTSxDQUFDLENBQUMrNkIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDdkQsSUFBSSxDQUFDLENBQUMsQ0FBQ290QixXQUFXLENBQUMsQ0FBQyxDQUFDemxDLENBQUMsQ0FBQzJ0QixPQUFPLENBQUMsSUFBSSxDQUFDOGlCLFNBQVMsQ0FBQyxDQUFDM21CLFFBQVEsQ0FBQ2tZLENBQUMsQ0FBQ3ZZLE1BQU0sQ0FBQy9jLENBQUMsQ0FBQ3NkLElBQUksQ0FBQyxRQUFRLENBQUNwTyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDa2YsR0FBRyxDQUFDdGxCLElBQUksQ0FBQzByQixLQUFLLENBQUMxSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDckQsSUFBSSxDQUFDLENBQUMsQ0FBQ29WLE9BQU8sQ0FBQyxJQUFJLENBQUNtakIsU0FBUyxDQUFDLENBQUNobkIsUUFBUSxDQUFDa1ksQ0FBQyxDQUFDdlksTUFBTSxDQUFDL2MsQ0FBQyxDQUFDd2dCLFFBQVEsQ0FBQ3lZLENBQUMsQ0FBQzNiLElBQUksQ0FBQyxRQUFRLENBQUNwTyxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ2dwQixHQUFHLENBQUN0bEIsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQzFKLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRzFsQixDQUFDLENBQUNpZixJQUFJLENBQUMsYUFBYSxHQUFHc3RCLENBQUMsRUFBRSxDQUFDTCxDQUFDLEVBQUVsc0MsQ0FBQyxDQUFDZ3BCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRy9oQixDQUFDLENBQUNuRSxPQUFPLENBQUNvM0MsV0FBVyxFQUFFLENBQUNsNkMsQ0FBQyxDQUFDZ3BCLEdBQUcsQ0FBQ3RsQixJQUFJLENBQUMwckIsS0FBSyxDQUFDaU4sQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3lsQyxXQUFXLENBQUMsQ0FBQyxDQUFDckQsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQzJ0QixPQUFPLENBQUMsSUFBSSxDQUFDOGlCLFNBQVMsQ0FBQ3pPLENBQUMsQ0FBQ3QxQixDQUFDLENBQUNpNUIsQ0FBQyxDQUFDLENBQUMvcEIsQ0FBQyxDQUFDK1IsT0FBTyxDQUFDLElBQUksQ0FBQ21qQixTQUFTLENBQUM5TyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDaTVCLENBQUMsQ0FBQyxDQUFDLENBQUN3TSxlQUFlLENBQUMsUUFBUSxDQUFDdjJCLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM0YixDQUFDLENBQUNrMkIsUUFBUSxDQUFDNTdDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQzBOLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNDJCLFlBQVksQ0FBQ3RrQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxJQUFJLENBQUNza0MsWUFBWSxDQUFDcHVDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDNHVDLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ3hJLE1BQU0sRUFBRSxDQUFDd0ksQ0FBQyxDQUFDb0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzVELFNBQVMsQ0FBQ3hELENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1RCxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMrK0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMzbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2bkIsaUJBQWlCLENBQUMsUUFBUSxDQUFDVyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDelQsYUFBYSxDQUFDLEtBQUssQ0FBQ2pTLENBQUMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDekQsSUFBSSxDQUFDLE9BQU9uWSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDekQsSUFBSSxDQUFDLENBQUNuWSxDQUFDLENBQUNKLFFBQVEsRUFBRSxDQUFDSSxDQUFDLENBQUM0YixDQUFDLENBQUN6RCxJQUFJLENBQUMsQ0FBQ25ZLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQzVyQyxPQUFPLENBQUMsUUFBUSxDQUFDeXNDLGNBQWMsQ0FBQyxNQUFNLENBQUM3VSxLQUFLLENBQUMsR0FBRyxDQUFDMTFCLE9BQU8sQ0FBQyxDQUFDcTNDLEtBQUssQ0FBQyxDQUFDK0IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUNDLEtBQUssQ0FBQyxLQUFLLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUNwdEIsUUFBUSxDQUFDLENBQUM2aEIsRUFBRSxDQUFDLFVBQVUsQ0FBQ0wsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDNkwsSUFBSSxDQUFDLE1BQU0sQ0FBQ3Z4QixJQUFJLENBQUMsSUFBSSxDQUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDaGxCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ21vQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzTyxVQUFVLENBQUMsSUFBSSxDQUFDblEsT0FBTyxDQUFDLElBQUksQ0FBQ29RLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNwUSxPQUFPLENBQUMyTixRQUFRLENBQUMsQ0FBQyxDQUFDM3FDLElBQUksQ0FBQyxDQUFDa3RDLElBQUksQ0FBQyxJQUFJLENBQUN2NUMsT0FBTyxDQUFDdTVDLElBQUksQ0FBQ2pxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN3OEIsU0FBUyxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQ2YsR0FBRyxDQUFDLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDbm9CLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMwQixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDdGQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQ2s1QixDQUFDLENBQUMzVyxDQUFDLENBQUNBLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2bkIsaUJBQWlCLENBQUMsSUFBSSxDQUFDam5CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5K0MsWUFBWSxFQUFFdjhDLENBQUMsQ0FBQzhXLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDeFYsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDdUUsTUFBTSxDQUFDaUUsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ2tkLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3UxQixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3Y4QyxDQUFDLENBQUN5WCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUNuVyxNQUFNLENBQUMsSUFBSSxDQUFDNnhCLE1BQU0sQ0FBQ3JwQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUM3MUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFK2xCLENBQUMsQ0FBQ3prQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUN0VyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM2cUMsT0FBTyxDQUFDL2pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ1gsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUNBLE1BQU0sQ0FBQ2xuQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM1VyxNQUFNLEVBQUVxM0IsWUFBWSxDQUFDLElBQUksQ0FBQzFCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQ250QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMweUMsY0FBYyxDQUFDLENBQUMsSUFBSXg4QyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUN5VSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUN5a0IsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDbWQsYUFBYSxDQUFDLENBQUNqbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQytSLFlBQVksQ0FBQy9SLENBQUMsQ0FBQzlsQixRQUFRLENBQUMsQ0FBQyxDQUFDZSxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUN1VCxLQUFLLENBQUMvZ0IsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDclIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUNILEtBQUssQ0FBQyxRQUFRLENBQUNuRixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQ28vQixNQUFNLEVBQUUsSUFBSSxDQUFDK00sT0FBTyxDQUFDditCLElBQUksQ0FBQyxJQUFJLENBQUM5SyxPQUFPLENBQUNxNUMsS0FBSyxDQUFDLENBQUM3NUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDd0gsQ0FBQyxFQUFFLElBQUksQ0FBQytnQixLQUFLLENBQUNuRixDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzhxQixJQUFJLENBQUMsUUFBUSxDQUFDaGhCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lsQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL3VDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQyxJQUFJLENBQUM2bEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDem1CLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2bkIsaUJBQWlCLENBQUMsSUFBSSxDQUFDam5CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrQyxDQUFDLEVBQUUsSUFBSSxDQUFDeThDLFdBQVcsQ0FBQzN5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzR4QyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNuRCxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzFLLEdBQUcsQ0FBQyxJQUFJLENBQUMvdkMsUUFBUSxDQUFDLENBQUNvcUIsS0FBSyxDQUFDLFFBQVEsQ0FBQ3hDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2czQixxQkFBcUIsQ0FBQ2gzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMrMkIsV0FBVyxDQUFDLzJCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzYyQixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlya0MsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUN2K0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDb3JCLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDaDVCLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ3dOLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDeWlDLGNBQWMsQ0FBQyxDQUFDLENBQUMvZ0IsVUFBVSxDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDbVQsT0FBTyxDQUFDblQsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUNwckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDb0ssT0FBTyxDQUFDLENBQUMsQ0FBQ2doQixVQUFVLENBQUMsdUVBQXVFLENBQUMsQ0FBQytnQixjQUFjLENBQUMsQ0FBQyxDQUFDNTNCLElBQUksQ0FBQyxDQUFDLENBQUNuaUIsQ0FBQyxDQUFDc1gsUUFBUSxDQUFDLENBQUMsQ0FBQ3ZWLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkrSCxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM1YixDQUFDLENBQUNrVixJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRWxWLENBQUMsQ0FBQzBQLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM2aEMsUUFBUSxDQUFDLFFBQVEsQ0FBQ3Z4QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM2QyxDQUFDLENBQUNpZ0IsT0FBTyxDQUFDLENBQUMsS0FBS3JFLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDc3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUNzRCxZQUFZLENBQUM3eUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ3F2QixTQUFTLENBQUMsSUFBSSxDQUFDd0QsUUFBUSxDQUFDOXlDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNtdkIsSUFBSSxDQUFDLElBQUksQ0FBQzJELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDL3lDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNndkIsR0FBRyxDQUFDLElBQUksQ0FBQzhELEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDL3lDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUMydkIsRUFBRSxDQUFDLElBQUksQ0FBQ29ELFFBQVEsQ0FBQ2h6QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDK3VCLElBQUksQ0FBQyxJQUFJLENBQUNsdkMsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDb3ZCLElBQUksQ0FBQyxJQUFJLENBQUM0RCxRQUFRLENBQUNqekMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ3d2QixLQUFLLENBQUMsSUFBSSxDQUFDbmEsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUM5b0IsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDNmMsTUFBTSxDQUFDcnBCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNpdkIsS0FBSyxDQUFDLEtBQUt0ekIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUN5dkIsS0FBSyxDQUFDLElBQUksQ0FBQzJCLFNBQVMsQ0FBQ3J4QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDa3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUM4RCxRQUFRLENBQUNqekMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzdDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ28xQixDQUFDLENBQUMsSUFBSSxDQUFDbWdCLGNBQWMsRUFBRSxFQUFFLENBQUMxUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDaWdCLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFamdCLENBQUMsQ0FBQ2lnQixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUNqZ0IsQ0FBQyxDQUFDaWdCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQ2hoQixNQUFNLENBQUNDLFlBQVksQ0FBQ2MsQ0FBQyxDQUFDaWdCLE9BQU8sQ0FBQyxDQUFDNE8sWUFBWSxDQUFDLElBQUksQ0FBQ3FrQixXQUFXLENBQUMsQ0FBQ3htQyxDQUFDLEdBQUc2bEIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQzZsQixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDLElBQUksQ0FBQ2k5QyxnQkFBZ0IsQ0FBQ3ptQyxDQUFDLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQzhyQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUc5ckMsQ0FBQyxDQUFDNlgsS0FBSyxDQUFDLElBQUksQ0FBQ3VuQixNQUFNLENBQUN4MUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3cxQixNQUFNLENBQUNobkIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDcFksQ0FBQyxDQUFDQSxDQUFDLENBQUNzQixNQUFNLEVBQUUsQ0FBQ2tWLENBQUMsQ0FBQ3pOLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDYyxDQUFDLENBQUNpZ0IsT0FBTyxDQUFDLENBQUMvcEIsQ0FBQyxDQUFDLElBQUksQ0FBQ2k5QyxnQkFBZ0IsQ0FBQ3ptQyxDQUFDLENBQUMsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDc0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDdXBCLEtBQUssQ0FBQy9nQixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN3OEMsY0FBYyxDQUFDaG1DLENBQUMsQ0FBQyxJQUFJLENBQUN3bUMsV0FBVyxDQUFDLElBQUksQ0FBQ2pPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDeU4sY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ0EsY0FBYyxDQUFDdjFDLENBQUMsRUFBRTZDLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyt6QixTQUFTLENBQUMsUUFBUSxDQUFDejFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBaLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDOW9CLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOG9CLE1BQU0sQ0FBQzluQixRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQ2hXLE1BQU0sQ0FBQyxJQUFJLENBQUM2eEIsTUFBTSxDQUFDek4sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDN2YsTUFBTSxDQUFDNmYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNnlCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl6dUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQyxJQUFJLENBQUNpbEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3BwQyxPQUFPLENBQUNxM0MsS0FBSyxDQUFDK0IsT0FBTyxDQUFDM1AsQ0FBQyxDQUFDLElBQUksQ0FBQ0osT0FBTyxDQUFDditCLElBQUksQ0FBQyxJQUFJLENBQUM5SyxPQUFPLENBQUNzNUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDM04sWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3RDLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUN0TSxNQUFNLENBQUMsQ0FBQys2QixDQUFDLENBQUNrUSxDQUFDLENBQUM3K0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMyVSxJQUFJLENBQUMsQ0FBQyxDQUFDbFQsSUFBSSxDQUFDLENBQUNrdEMsSUFBSSxDQUFDLElBQUksQ0FBQ3Y1QyxPQUFPLENBQUN1NUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUN0NkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSStILENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzFsQixDQUFDLENBQUM4SixDQUFDLENBQUMwTixJQUFJLENBQUMsQ0FBQyxDQUFDNmtCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL1gsQ0FBQyxDQUFDMm5DLFNBQVMsQ0FBQ3ZTLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDNlAsQ0FBQyxDQUFDLENBQUNsc0MsQ0FBQyxDQUFDbVAsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQ2dlLE9BQU8sQ0FBQ2tQLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3FGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQ25QLENBQUMsQ0FBQ21QLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5L0IsU0FBUyxDQUFDdlMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3lpQyxDQUFDLENBQUN4MEIsR0FBRyxDQUFDLElBQUksQ0FBQ28wQixPQUFPLENBQUMsQ0FBQ25zQyxDQUFDLENBQUM4SixDQUFDLENBQUM4RCxJQUFJLENBQUMsSUFBSSxDQUFDOUssT0FBTyxDQUFDcTVDLEtBQUssQ0FBQyxDQUFDbjhDLENBQUMsQ0FBQzhXLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQy9VLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkrSCxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6ZSxDQUFDLENBQUNpMkMsVUFBVSxDQUFDcHpDLENBQUMsQ0FBQyxFQUFFN0MsQ0FBQyxDQUFDMm5DLFNBQVMsQ0FBQzlrQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMwTSxDQUFDLENBQUN4VyxDQUFDLENBQUM4VyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQ2cxQixDQUFDLENBQUN0MUIsQ0FBQyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDUixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUNnakMsUUFBUSxDQUFDLENBQUMsQ0FBQzNxQyxJQUFJLENBQUMsQ0FBQ2lELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ2lxQyxJQUFJLENBQUMsSUFBSSxDQUFDYyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN2TyxTQUFTLENBQUNwNEIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDbzRCLFNBQVMsQ0FBQzlDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQzBOLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDeUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUNpd0IsTUFBTSxFQUFFLENBQUMxWixDQUFDLENBQUNwZixRQUFRLENBQUMsSUFBSSxDQUFDNmxDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUN0VSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNxeUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDQyxJQUFJLENBQUMsVUFBVSxDQUFDQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDdjZDLE9BQU8sQ0FBQ3U1QyxJQUFJLENBQUMsQ0FBQyxDQUFDL04sVUFBVSxDQUFDLFFBQVEsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHNGIsQ0FBQyxDQUFDLENBQUMsSUFBSTFsQixDQUFDLENBQUMsSUFBSSxDQUFDbXNDLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDd2dDLFlBQVksQ0FBQ3B1QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ3EzQyxLQUFLLENBQUMrQixPQUFPLENBQUMsQ0FBQ3ROLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUMsSUFBSSxDQUFDOEosQ0FBQyxDQUFDb3lDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ3JQLE1BQU0sQ0FBQ25uQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxDQUFDbWtDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ3ZvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtbkIsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ltQixPQUFPLENBQUNoOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQ3VXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMrb0IsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMvb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ21GLEtBQUssQ0FBQyxRQUFRLENBQUNuRixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsSUFBSSxDQUFDc1UsSUFBSSxDQUFDcEYsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsT0FBTyxHQUFHQSxDQUFDLENBQUNsbUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDODlDLGVBQWUsQ0FBQ3h6QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzMUIsTUFBTSxDQUFDdDFCLENBQUMsQ0FBQ3pILEtBQUssQ0FBQyxDQUFDLENBQUNnNkIsQ0FBQyxDQUFDLElBQUksQ0FBQytDLE1BQU0sQ0FBQzluQixRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUNzM0IsU0FBUyxDQUFDdlMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3Y1QixPQUFPLENBQUN1NUMsSUFBSSxFQUFFLElBQUksQ0FBQ2xRLE9BQU8sQ0FBQ2g5QixJQUFJLENBQUMsdUJBQXVCLENBQUNrdEIsQ0FBQyxDQUFDbHRCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDcUgsQ0FBQyxDQUFDLElBQUksQ0FBQzRvQixNQUFNLENBQUNsdUIsTUFBTSxDQUFDLENBQUMsQ0FBQzBHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQ04sUUFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDczNCLFNBQVMsQ0FBQ3A0QixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUNrUCxDQUFDLEVBQUUsU0FBUyxHQUFHQSxDQUFDLENBQUNsbUIsSUFBSSxDQUFDLElBQUksQ0FBQys5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3RtQixLQUFLLENBQUMsSUFBSSxDQUFDOFgsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDd08sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQy9rQixLQUFLLENBQUMsQ0FBQ3g0QixDQUFDLENBQUM4SixDQUFDLENBQUN3TixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUN0WCxDQUFDLENBQUNzQixNQUFNLEVBQUVva0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQzVhLElBQUksQ0FBQzRhLENBQUMsQ0FBQ2xtQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUNnK0MsYUFBYSxDQUFDeDlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3M4QyxVQUFVLENBQUN4eUMsQ0FBQyxDQUFDb0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQzNtQixDQUFDLENBQUMsQ0FBQyszQixJQUFJLENBQUMzekMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd3pDLGVBQWUsQ0FBQyxRQUFRLENBQUN4ekMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dSLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzE5QyxDQUFDLENBQUNxdkIsVUFBVSxDQUFDM0osQ0FBQyxDQUFDekUsR0FBRyxDQUFDLElBQUksQ0FBQ3E3QixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2pnQixDQUFDLENBQUNoTixVQUFVLENBQUMzSixDQUFDLENBQUN6RSxHQUFHLENBQUMsSUFBSSxDQUFDcTdCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzlsQyxDQUFDLENBQUMxTSxDQUFDLENBQUNtN0IsTUFBTSxDQUFDLENBQUMsQ0FBQzkzQixHQUFHLENBQUMsSUFBSSxDQUFDbXZDLFVBQVUsQ0FBQ3JYLE1BQU0sQ0FBQyxDQUFDLENBQUM5M0IsR0FBRyxDQUFDbk4sQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxJQUFJLENBQUN3USxVQUFVLENBQUN0b0IsU0FBUyxDQUFDLENBQUMsQ0FBQy9zQixDQUFDLENBQUMsSUFBSSxDQUFDcTFDLFVBQVUsQ0FBQ25uQixNQUFNLENBQUMsQ0FBQyxDQUFDK1csQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQ3lsQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQy80QixDQUFDLENBQUMsSUFBSSxDQUFDOGxDLFVBQVUsQ0FBQ3RvQixTQUFTLENBQUM4WCxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzAxQixDQUFDLENBQUNqbEMsQ0FBQyxFQUFFLElBQUksQ0FBQ3ExQyxVQUFVLENBQUN0b0IsU0FBUyxDQUFDOFgsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQ3BGLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUU2dUIsWUFBWSxDQUFDLElBQUksQ0FBQzFCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQ21JLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQ2dQLFlBQVksQ0FBQyxJQUFJLENBQUNoUCxNQUFNLENBQUM5bkIsUUFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDKzBCLFFBQVEsQ0FBQyxNQUFNLENBQUMzbUIsQ0FBQyxDQUFDLENBQUMrM0IsSUFBSSxDQUFDLElBQUksQ0FBQ3JlLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ29lLGFBQWEsQ0FBQyxRQUFRLENBQUM5M0IsQ0FBQyxDQUFDLENBQUNpVCxZQUFZLENBQUMsSUFBSSxDQUFDMUIsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHdlIsQ0FBQyxDQUFDdlcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOG5CLEtBQUssQ0FBQyxJQUFJLENBQUM4WCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN3TyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0ksS0FBSyxDQUFDajRCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOFMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDbWxCLEtBQUssQ0FBQyxRQUFRLENBQUM3ekMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUNvdEMsRUFBRSxDQUFDLElBQUksQ0FBQzdRLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ3Q4QixPQUFPLENBQUNrc0IsUUFBUSxDQUFDLENBQUMySixZQUFZLENBQUMsSUFBSSxDQUFDMUIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDa1YsT0FBTyxDQUFDditCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQ2tKLEdBQUcsQ0FBQ2hOLENBQUMsQ0FBQ29PLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDbUssSUFBSSxDQUFDLENBQUMsQ0FBQ2xULElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUNyRixDQUFDLENBQUNxWSxJQUFJLENBQUMsQ0FBQyxDQUFDNlcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDN3BCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM2ZixRQUFRLENBQUNodkIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3k4QyxXQUFXLENBQUMsUUFBUSxDQUFDM3lDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDMjRCLFlBQVksQ0FBQyxJQUFJLENBQUMxQixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUNBLEtBQUssQ0FBQyxJQUFJLENBQUM4WCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJMVMsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxJQUFJLENBQUNtc0MsT0FBTyxDQUFDem1CLENBQUMsQ0FBQzViLENBQUMsRUFBRUEsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUN5VSxPQUFPLENBQUMsSUFBSSxDQUFDdTBCLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQ3l1QixDQUFDLENBQUMvNkIsTUFBTSxFQUFFLENBQUMrNkIsQ0FBQyxDQUFDLElBQUksQ0FBQzhQLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ29SLE1BQU0sQ0FBQ2xoQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN2UixJQUFJLENBQUNoaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc2tDLFlBQVksQ0FBQy9SLENBQUMsQ0FBQ3p1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMwdUMsVUFBVSxDQUFDamdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzdELEtBQUssQ0FBQyxDQUFDLENBQUMra0IsTUFBTSxDQUFDLFFBQVEsQ0FBQzczQixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUMwWixNQUFNLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUNsdUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpN0IsT0FBTyxDQUFDLENBQUN6bUIsQ0FBQyxDQUFDOVgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDeVUsSUFBSSxDQUFDLENBQUMsQ0FBQ2xULElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUNBLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3V0QyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM1eUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDNGIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUN5VSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUN0VyxNQUFNLENBQUMsQ0FBQzQ3QyxVQUFVLENBQUMsUUFBUSxDQUFDeDNCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQzVhLElBQUksQ0FBQzRhLENBQUMsQ0FBQ3RsQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzI4QyxRQUFRLENBQUMsUUFBUSxDQUFDcjNCLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsSUFBSSxDQUFDczFCLE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU0sQ0FBQ2x1QixNQUFNLENBQUMsQ0FBQyxDQUFDMEcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUN1MEIsT0FBTyxDQUFDLENBQUNyaUMsQ0FBQyxFQUFFQSxDQUFDLENBQUN4SSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUNpOEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMxeUIsS0FBSyxDQUFDbkYsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcXBCLE1BQU0sQ0FBQyxRQUFRLENBQUN6TixDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLElBQUksQ0FBQ3MxQixNQUFNLEVBQUUsSUFBSSxDQUFDQSxNQUFNLENBQUM5bkIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDMUosSUFBSSxDQUFDLElBQUksQ0FBQzlLLE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUMsQ0FBQzk1QyxLQUFLLENBQUMsQ0FBQyxDQUFDeUgsQ0FBQyxFQUFFQSxDQUFDLENBQUN4SSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUNxOEMsS0FBSyxDQUFDN3pDLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2OUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbGtCLEtBQUssQ0FBQ25GLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNGLElBQUksQ0FBQyxRQUFRLENBQUM4YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUNuM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ28zQixRQUFRLENBQUMsUUFBUSxDQUFDcDNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ20zQixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQ24zQixDQUFDLENBQUMsQ0FBQyxDQUFDazRCLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDeGUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUN0bkIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDeFcsTUFBTSxDQUFDLENBQUN1OEMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUN6ZSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUNBLE1BQU0sQ0FBQ2huQixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM5VyxNQUFNLENBQUMsQ0FBQ3U3QyxLQUFLLENBQUMsUUFBUSxDQUFDbjNCLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQytDLE1BQU0sRUFBRSxDQUFDL0MsQ0FBQyxDQUFDLE9BQU8sR0FBRzNXLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQyxJQUFJLENBQUMwWixNQUFNLENBQUMsT0FBTyxHQUFHMVosQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQ3BqQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4OEIsTUFBTSxDQUFDMVosQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDcGpCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDKzVCLENBQUMsRUFBRUEsQ0FBQyxDQUFDLzZCLE1BQU0sRUFBRSxJQUFJLENBQUM4OUIsTUFBTSxFQUFFLENBQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDaWdCLFVBQVUsQ0FBQzF1QyxJQUFJLENBQUMsSUFBSSxDQUFDOUssT0FBTyxDQUFDcTVDLEtBQUssQ0FBQyxDQUFDcnlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytnQixLQUFLLENBQUM3cUIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUN1Z0IsUUFBUSxDQUFDLFFBQVEsQ0FBQzl5QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUM0b0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDeWUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ0gsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDcmhCLENBQUMsQ0FBQyxJQUFJLENBQUMrQyxNQUFNLENBQUM2RixNQUFNLENBQUMsQ0FBQyxDQUFDOTNCLEdBQUcsQ0FBQ3FKLENBQUMsQ0FBQyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDaFgsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpSyxNQUFNLENBQUNobkIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDclcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTy9CLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQ2lsQyxNQUFNLENBQUMsQ0FBQyxDQUFDOTNCLEdBQUcsQ0FBQ2t2QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxVSxLQUFLLENBQUMvZ0IsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2cUIsS0FBSyxDQUFDL2dCLENBQUMsQ0FBQyxJQUFJLENBQUN3eUMsVUFBVSxDQUFDMXVDLElBQUksQ0FBQyxJQUFJLENBQUM5SyxPQUFPLENBQUNxNUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDL2MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN4MUIsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM2eUMsWUFBWSxDQUFDLFFBQVEsQ0FBQzd5QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUM0b0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDd2UsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ0YsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDcmhCLENBQUMsQ0FBQyxJQUFJLENBQUMrQyxNQUFNLENBQUM2RixNQUFNLENBQUMsQ0FBQyxDQUFDOTNCLEdBQUcsQ0FBQ3FKLENBQUMsQ0FBQyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDaFgsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpSyxNQUFNLENBQUN0bkIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDL1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTy9CLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDaWxDLE1BQU0sQ0FBQyxDQUFDLENBQUM5M0IsR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxVSxLQUFLLENBQUMvZ0IsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2cUIsS0FBSyxDQUFDL2dCLENBQUMsQ0FBQyxJQUFJLENBQUN3eUMsVUFBVSxDQUFDMXVDLElBQUksQ0FBQyxJQUFJLENBQUM5SyxPQUFPLENBQUNxNUMsS0FBSyxDQUFDLENBQUM5NUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3VILElBQUksQ0FBQ0UsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDNHpDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDdlIsT0FBTyxDQUFDb0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNwRCxPQUFPLENBQUNsdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNwWixNQUFNLENBQUMsUUFBUSxDQUFDaUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDczFCLE1BQU0sQ0FBQyxJQUFJLENBQUNBLE1BQU0sRUFBRTFaLENBQUMsQ0FBQzViLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDeVUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUk1WCxDQUFDLENBQUMsQ0FBQ3k5QyxJQUFJLENBQUMsSUFBSSxDQUFDcmUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUMzbkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDblcsTUFBTSxFQUFFLElBQUksQ0FBQ203QyxXQUFXLENBQUMzeUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdWlDLFFBQVEsQ0FBQyxRQUFRLENBQUN2aUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQ2k5QyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUNuekMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ2xHLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQ3k0QixDQUFDLENBQUN6MEIsTUFBTSxDQUFDLEdBQUcsQ0FBQzVILENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3M4QyxVQUFVLENBQUMxdUMsSUFBSSxDQUFDLElBQUksQ0FBQzlLLE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUMsQ0FBQ3p1QyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUNBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8ydUIsQ0FBQyxDQUFDdnhCLElBQUksQ0FBQzRhLENBQUMsQ0FBQ3BoQixJQUFJLENBQUNvaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDcE8sUUFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUNsWCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzbEIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDNXJDLE9BQU8sQ0FBQyxRQUFRLENBQUN5c0MsY0FBYyxDQUFDLFNBQVMsQ0FBQ3ZxQyxPQUFPLENBQUMsQ0FBQzJxQixRQUFRLENBQUMsSUFBSSxDQUFDcXdCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RsQixLQUFLLENBQUMsR0FBRyxDQUFDdWxCLFNBQVMsQ0FBQyxDQUFDLENBQUMvdUIsUUFBUSxDQUFDLENBQUM2aEIsRUFBRSxDQUFDLFVBQVUsQ0FBQ0wsRUFBRSxDQUFDLGFBQWEsQ0FBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDOXZCLE1BQU0sQ0FBQyxJQUFJLENBQUN3OUIsTUFBTSxDQUFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDLElBQUksQ0FBQ3B6QixLQUFLLENBQUMsSUFBSSxDQUFDc1ksSUFBSSxDQUFDLElBQUksQ0FBQ3ZFLFFBQVEsQ0FBQyxJQUFJLENBQUNzZixNQUFNLENBQUMsSUFBSSxDQUFDcjRDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ3M0QyxZQUFZLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDcFEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWxrQyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDemlDLFFBQVEsQ0FBQ3BFLFdBQVcsQ0FBQyxDQUFDLENBQUN3bUMsQ0FBQyxDQUFDLFVBQVUsR0FBR3QxQixDQUFDLENBQUN2UCxDQUFDLENBQUMsT0FBTyxHQUFHdVAsQ0FBQztBQUN6MCtCLElBQUksQ0FBQzZuQyxXQUFXLENBQUN2UyxDQUFDLEVBQUUsQ0FBQzdrQyxDQUFDLEVBQUUsSUFBSSxDQUFDcTNDLGtCQUFrQixDQUFDLElBQUksQ0FBQ25TLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ29TLFdBQVcsQ0FBQyxJQUFJLENBQUNwUyxPQUFPLENBQUNMLENBQUMsRUFBRTdrQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ3UzQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNVAsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDekMsT0FBTyxDQUFDaDlCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDMCtCLEdBQUcsQ0FBQyxJQUFJLENBQUMxQixPQUFPLENBQUMsQ0FBQ3VQLE9BQU8sQ0FBQyxRQUFRLENBQUNsbEMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzIxQixPQUFPLENBQUNsdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU9uVixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzhKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk4ckMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDLE1BQU0sQ0FBQ3ZULENBQUMsQ0FBQ3VULE9BQU8sQ0FBQyxDQUFDLEtBQUsraEIsQ0FBQyxDQUFDdU4sT0FBTyxDQUFDdnZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMreUMsS0FBSyxDQUFDLGNBQWMsQ0FBQ3JtQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBS3MxQixDQUFDLENBQUNzTixTQUFTLENBQUN0dkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyt5QyxLQUFLLENBQUMsVUFBVSxDQUFDcm1DLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLczFCLENBQUMsQ0FBQzROLEVBQUUsQ0FBQzV2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNDlCLFNBQVMsQ0FBQyxVQUFVLENBQUNseEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUtzMUIsQ0FBQyxDQUFDZ04sSUFBSSxDQUFDaHZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0OUIsU0FBUyxDQUFDLE1BQU0sQ0FBQ2x4QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBS3MxQixDQUFDLENBQUNrTixLQUFLLENBQUMsSUFBSSxDQUFDb0UsSUFBSSxDQUFDaGUsTUFBTSxFQUFFLENBQUN0MUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDNFEsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnMkIsSUFBSSxDQUFDdjNDLE1BQU0sQ0FBQzJRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUtzMUIsQ0FBQyxDQUFDMk4sR0FBRyxDQUFDLElBQUksQ0FBQzJELElBQUksQ0FBQ2hlLE1BQU0sRUFBRSxJQUFJLENBQUNnZSxJQUFJLENBQUN2M0MsTUFBTSxDQUFDMlEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUtzMUIsQ0FBQyxDQUFDbU4sTUFBTSxDQUFDLElBQUksQ0FBQ21FLElBQUksQ0FBQ2pSLE9BQU8sQ0FBQzcxQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMrbkMsV0FBVyxFQUFFLElBQUksQ0FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDVCxLQUFLLENBQUN6bkMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzRRLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDcG5CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyK0MsY0FBYyxDQUFDbm9DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ29vQyxRQUFRLENBQUMsUUFBUSxDQUFDdmlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3Z5QixDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1MEMsV0FBVyxFQUFFLElBQUksQ0FBQ2pCLElBQUksQ0FBQ2pSLE9BQU8sQ0FBQzcxQixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRStsQixDQUFDLENBQUNqVixjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDcG5CLENBQUMsQ0FBQyxDQUFDLElBQUl3VyxDQUFDLENBQUNrUCxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQyxNQUFNLENBQUNzUyxDQUFDLENBQUN0UyxPQUFPLENBQUMsQ0FBQyxLQUFLdlQsQ0FBQyxDQUFDNmlDLE9BQU8sQ0FBQyxJQUFJLENBQUN3RCxLQUFLLENBQUMsY0FBYyxDQUFDeGdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLN2xCLENBQUMsQ0FBQzRpQyxTQUFTLENBQUMsSUFBSSxDQUFDeUQsS0FBSyxDQUFDLFVBQVUsQ0FBQ3hnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzdsQixDQUFDLENBQUNrakMsRUFBRSxDQUFDLElBQUksQ0FBQ2hTLFNBQVMsQ0FBQyxVQUFVLENBQUNyTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzdsQixDQUFDLENBQUNzaUMsSUFBSSxDQUFDLElBQUksQ0FBQ3BSLFNBQVMsQ0FBQyxNQUFNLENBQUNyTCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3B1QixLQUFLLENBQUMsUUFBUSxDQUFDeVgsQ0FBQyxDQUFDLENBQUMsT0FBTzJXLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUMwQixjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1M0IsY0FBYyxDQUFDajVCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ21GLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2cwQixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMzekIsSUFBSSxDQUFDLFFBQVEsQ0FBQ3BGLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDbzVCLFVBQVUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDQSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDbm1CLFlBQVksQ0FBQyxJQUFJLENBQUNvbUIsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDZCxLQUFLLENBQUN2NEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDczVCLE9BQU8sQ0FBQ3Q1QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3U1QixXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzdCLElBQUksQ0FBQzEzQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMrSCxRQUFRLENBQUMsSUFBSSxDQUFDeXhCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlCLElBQUksQ0FBQyxDQUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2g2QixJQUFJLENBQUMsQ0FBQyxDQUFDKzZCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUN4TyxTQUFTLENBQUMsSUFBSSxDQUFDd08sSUFBSSxDQUFDalIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQzBCLEdBQUcsQ0FBQyxJQUFJLENBQUN1UCxJQUFJLENBQUNqUixPQUFPLENBQUMsQ0FBQ2dULFNBQVMsQ0FBQyxRQUFRLENBQUNyMUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMDNCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvUCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQytQLFVBQVUsQ0FBQyxJQUFJLENBQUMzUyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUd6bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZuQixpQkFBaUIsQ0FBQyxJQUFJLENBQUNqbkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDcXVDLE9BQU8sQ0FBQy9qQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnM0IsU0FBUyxDQUFDLFFBQVEsQ0FBQ3QxQyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNnb0MsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMxMEMsQ0FBQyxDQUFDZ2UsYUFBYSxFQUFFLFFBQVEsQ0FBQ2hkLElBQUksQ0FBQ2hCLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQ3RvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNDlDLElBQUksQ0FBQ3R5QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2h0QixRQUFRLENBQUNxbkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDTyxDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQ2lsQixPQUFPLENBQUN0ZSxDQUFDLENBQUNnZSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDdFIsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDeTlDLElBQUksQ0FBQ3orQixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNxdEIsUUFBUSxDQUFDLE9BQU8sQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQzJ6QyxJQUFJLENBQUNqbkMsQ0FBQyxDQUFDLENBQUMsRUFBRTFNLENBQUMsQ0FBQ2dlLGFBQWEsRUFBRSxNQUFNLENBQUNoZCxJQUFJLENBQUNoQixDQUFDLENBQUNnZSxhQUFhLENBQUN0b0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDaS9DLE1BQU0sQ0FBQ2pvQyxDQUFDLENBQUN2UixLQUFLLENBQUMsQ0FBQ28zQixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDeTlDLElBQUksQ0FBQ3R1QyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUVxSCxDQUFDLENBQUN2UixLQUFLLENBQUNvM0IsQ0FBQyxFQUFFM1csQ0FBQyxDQUFDcGhCLElBQUksQ0FBQyszQixDQUFDLENBQUMsQ0FBQy82QixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMrOUMsVUFBVSxDQUFDL25DLFFBQVEsQ0FBQyxDQUFDLENBQUMrSyxJQUFJLENBQUMsQ0FBQyxDQUFDcUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDdGxCLElBQUksQ0FBQ2k4QixDQUFDLENBQUMsQ0FBQzVPLFFBQVEsQ0FBQyxJQUFJLENBQUM0eEIsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxRQUFRLENBQUN4MUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDeTlDLElBQUksQ0FBQ3orQixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQ3hJLENBQUMsQ0FBQyxJQUFJLENBQUNzbUMsUUFBUSxDQUFDLElBQUksQ0FBQzNRLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBR3ptQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdm5CLGlCQUFpQixDQUFDLElBQUksQ0FBQ2puQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3F1QyxPQUFPLENBQUMvakIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQzAwQixRQUFRLENBQUN0bUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3U0QixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrTixRQUFRLENBQUN0bUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FvQyxZQUFZLENBQUN4aUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ2dRLFFBQVEsQ0FBQyxRQUFRLENBQUN2aUMsQ0FBQyxDQUFDLENBQUMyekMsSUFBSSxDQUFDcGhCLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDb2lCLE1BQU0sQ0FBQ3BpQixDQUFDLENBQUNwM0IsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDeTVDLElBQUksQ0FBQyxJQUFJLENBQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDUixLQUFLLENBQUNuMEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDKzBDLFlBQVksQ0FBQ3hpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ2pCLFVBQVUsQ0FBQzM1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMyMkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDNXVCLFFBQVEsQ0FBQyxJQUFJLENBQUMzdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDbWtCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQzJzQixTQUFTLENBQUMsSUFBSSxDQUFDeVEsVUFBVSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQ3hSLEdBQUcsQ0FBQyxJQUFJLENBQUM1dkMsTUFBTSxDQUFDLENBQUNvcUIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOGpCLE9BQU8sQ0FBQ25ULFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbVYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN4VixZQUFZLENBQUMsSUFBSSxDQUFDb21CLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQzVTLE9BQU8sQ0FBQ25ULFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUNva0IsSUFBSSxDQUFDalIsT0FBTyxDQUFDM3lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNmxDLFVBQVUsQ0FBQzdsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM4MEIsVUFBVSxDQUFDLFFBQVEsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMraUMsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRzRiLENBQUMsRUFBRSxJQUFJLENBQUN1NUIsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUd2NUIsQ0FBQyxFQUFFLElBQUksQ0FBQzAzQixJQUFJLENBQUNqUixPQUFPLENBQUMxZSxRQUFRLENBQUMsSUFBSSxDQUFDeXhCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUd4NUIsQ0FBQyxFQUFFNWIsQ0FBQyxFQUFFLElBQUksQ0FBQys0QixHQUFHLEVBQUUsSUFBSSxDQUFDQSxHQUFHLENBQUN0QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNnZSxzQkFBc0IsQ0FBQyxRQUFRLENBQUN6MUMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUNvOUMsSUFBSSxDQUFDalIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU9yaUMsQ0FBQyxDQUFDM0csTUFBTSxHQUFHLElBQUksQ0FBQ2dwQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUVyaUMsQ0FBQyxDQUFDM0csTUFBTSxHQUFHbkQsQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQ3RHLENBQUMsQ0FBQzhKLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDLENBQUNxOEMsb0JBQW9CLENBQUMsUUFBUSxDQUFDOTVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzY1QixzQkFBc0IsQ0FBQzc1QixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUN1NEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDaUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXAxQyxDQUFDLENBQUMsSUFBSSxDQUFDaEgsT0FBTyxDQUFDMnFCLFFBQVEsQ0FBQyxPQUFPM2pCLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUNBLENBQUMsQ0FBQzFJLE1BQU0sRUFBRTBJLENBQUMsQ0FBQ3pLLFFBQVEsQ0FBQ3FtQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoTSxRQUFRLENBQUM4UCxJQUFJLENBQUM5RCxDQUFDLENBQUMsQ0FBQ3hILEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd0gsQ0FBQyxFQUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUN2MEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzlOLENBQUMsQ0FBQ3hJLE1BQU0sRUFBRSxDQUFDd0ksQ0FBQyxDQUFDLElBQUksQ0FBQ2hNLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ21rQixJQUFJLENBQUMsQ0FBQ25ZLENBQUMsQ0FBQyxDQUFDbTFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUluMUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUMzVyxDQUFDLENBQUNuaUIsT0FBTyxDQUFDLElBQUksQ0FBQ1QsT0FBTyxDQUFDMGQsTUFBTSxDQUFDLENBQUMsQ0FBQzFXLENBQUMsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUMwZCxNQUFNLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUMsUUFBUSxDQUFDeGdCLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ21ULFlBQVksQ0FBQy94QyxNQUFNLENBQUM1RCxDQUFDLENBQUM5SixDQUFDLENBQUMwK0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDNTdDLE9BQU8sQ0FBQzBkLE1BQU0sQ0FBQyxDQUFDeGdCLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUMwZCxNQUFNLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUMsUUFBUSxDQUFDMVcsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDd0csR0FBRyxFQUFFeEcsQ0FBQyxDQUFDd0csR0FBRyxDQUFDdEIsS0FBSyxDQUFDLENBQUMsQ0FBQ2xGLENBQUMsQ0FBQ3dHLEdBQUcsQ0FBQ25kLENBQUMsQ0FBQ3lhLElBQUksQ0FBQyxDQUFDWixHQUFHLENBQUN2L0IsQ0FBQyxDQUFDZ2YsSUFBSSxDQUFDbFYsQ0FBQyxDQUFDeXpCLFFBQVEsQ0FBQyxNQUFNLENBQUN5RSxPQUFPLENBQUMsUUFBUSxDQUFDdGMsQ0FBQyxDQUFDLENBQUNsUCxDQUFDLENBQUNrUCxDQUFDLENBQUMsQ0FBQyxDQUFDNWhCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDMFMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2dLLE1BQU0sQ0FBQyxJQUFJLENBQUMxZCxPQUFPLENBQUMwZCxNQUFNLENBQUMsQ0FBQ20rQixjQUFjLENBQUMsUUFBUSxDQUFDajVCLENBQUMsQ0FBQyxDQUFDaVQsWUFBWSxDQUFDLElBQUksQ0FBQ29tQixTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUNoUSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJamxDLENBQUMsQ0FBQyxJQUFJLENBQUM0MEMsSUFBSSxHQUFHLElBQUksQ0FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQ3orQyxDQUFDLENBQUMsSUFBSSxDQUFDbzlDLElBQUksQ0FBQ2pSLE9BQU8sQ0FBQzcxQixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMrbEIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDd0QsTUFBTSxFQUFFeEQsQ0FBQyxDQUFDNEQsT0FBTyxFQUFFNUQsQ0FBQyxDQUFDK0QsT0FBTyxFQUFFL0QsQ0FBQyxDQUFDa0UsUUFBUSxDQUFDLENBQUMsQ0FBQzlmLENBQUMsRUFBRUEsQ0FBQyxFQUFFLENBQUM5SixDQUFDLEVBQUUsQ0FBQ3E4QixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3dpQixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQ3g0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQzAxQixLQUFLLENBQUMsQ0FBQyxDQUFDMGxCLE1BQU0sQ0FBQyxRQUFRLENBQUN4NEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsT0FBTzRiLENBQUMsQ0FBQyxJQUFJLEVBQUVBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQys0QixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQy80QixDQUFDLENBQUNwa0IsTUFBTSxDQUFDLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ2k3QyxTQUFTLENBQUMsSUFBSSxDQUFDRSxLQUFLLENBQUNuMEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdWlDLFFBQVEsQ0FBQyxRQUFRLENBQUN2aUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNDFDLE9BQU8sQ0FBQ2g2QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDZzZCLE9BQU8sQ0FBQyxRQUFRLENBQUNoNkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMDRCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQ3hQLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLElBQUksQ0FBQytRLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNuL0IsTUFBTSxDQUFDLENBQUNrK0IsSUFBSSxDQUFDaDVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2s2QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTkxQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNxMEMsWUFBWSxDQUFDLE9BQU96NEIsQ0FBQyxDQUFDbWhCLEtBQUssQ0FBQyxRQUFRLENBQUNuaEIsQ0FBQyxDQUFDLENBQUM1YixDQUFDLEdBQUcsSUFBSSxDQUFDcTBDLFlBQVksRUFBRSxJQUFJLENBQUMwQixVQUFVLENBQUNuNkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMDRCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQ0EsT0FBTyxFQUFFLElBQUksQ0FBQ2hRLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ3lSLFVBQVUsQ0FBQyxRQUFRLENBQUNuNkIsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsSUFBSSxDQUFDbzZCLFVBQVUsQ0FBQ3A2QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJtQixRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDN3pCLE9BQU8sQ0FBQ2tOLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDMkcsUUFBUSxFQUFFaWMsQ0FBQyxFQUFFQSxDQUFDLENBQUNwa0IsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDcStDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQ0ksUUFBUSxDQUFDcjZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJtQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrUixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNVLEtBQUssQ0FBQyxRQUFRLENBQUN2NEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaTZCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNwQyxNQUFNLENBQUM3M0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzYzQixNQUFNLENBQUMsUUFBUSxDQUFDNzNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ29wQixJQUFJLENBQUMsSUFBSSxDQUFDaHhDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUNzL0MsSUFBSSxDQUFDalIsT0FBTyxDQUFDNzFCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzhtQyxJQUFJLENBQUNqUixPQUFPLENBQUM5cEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrNkIsSUFBSSxDQUFDdHlCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMHpCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNuUyxRQUFRLENBQUMsT0FBTyxDQUFDM21CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3M1QixPQUFPLENBQUMsUUFBUSxDQUFDdDVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ28zQixRQUFRLEdBQUcsSUFBSSxDQUFDMkIsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNwUyxRQUFRLENBQUMsUUFBUSxDQUFDM21CLENBQUMsQ0FBQyxDQUFDKzNCLElBQUksQ0FBQyxJQUFJLENBQUNvQixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUNpQixVQUFVLENBQUMsUUFBUSxDQUFDaDJDLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQ3hJLE1BQU0sRUFBRXdJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2syQyxLQUFLLEVBQUVsMkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN0UsS0FBSyxDQUFDNkUsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDempCLEdBQUcsQ0FBQzZILENBQUMsQ0FBQyxRQUFRLENBQUNBLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU9BLENBQUMsQ0FBQyxDQUFDazJDLEtBQUssQ0FBQ2wyQyxDQUFDLENBQUM3RSxLQUFLLENBQUM2RSxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNpSCxDQUFDLENBQUMsQ0FBQ2syQyxLQUFLLENBQUNsMkMsQ0FBQyxDQUFDazJDLEtBQUssRUFBRWwyQyxDQUFDLENBQUM3RSxLQUFLLENBQUNBLEtBQUssQ0FBQzZFLENBQUMsQ0FBQzdFLEtBQUssRUFBRTZFLENBQUMsQ0FBQ2syQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRCxRQUFRLENBQUMsUUFBUSxDQUFDajJDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDbzlDLElBQUksQ0FBQ2pSLE9BQU8sQ0FBQzF5QixLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dtQyxXQUFXLENBQUNqZ0QsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMDBDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNwQixJQUFJLENBQUM3RSxPQUFPLENBQUMsQ0FBQyxDQUFDdjRDLENBQUMsQ0FBQ21pQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQys5QixXQUFXLENBQUMsQ0FBQyxDQUFDbGdELENBQUMsQ0FBQ2d2QixRQUFRLENBQUN0SixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUNvdEMsRUFBRSxDQUFDLElBQUksQ0FBQzlELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ3JwQyxPQUFPLENBQUNrc0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNsc0IsT0FBTyxDQUFDZzdDLFNBQVMsRUFBRSxJQUFJLENBQUNWLElBQUksQ0FBQ3h6QyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lrQyxHQUFHLENBQUMsSUFBSSxDQUFDL3ZDLFFBQVEsQ0FBQyxDQUFDcWhELFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ2UsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXg2QixDQUFDLENBQUMsSUFBSSxDQUFDMDNCLElBQUksQ0FBQ2pSLE9BQU8sQ0FBQ3ptQixDQUFDLENBQUM0cEIsVUFBVSxDQUFDNXJDLElBQUksQ0FBQzR0QixHQUFHLENBQUM1TCxDQUFDLENBQUNxSixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUN1Z0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbkQsT0FBTyxDQUFDbUQsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJRLFdBQVcsQ0FBQyxRQUFRLENBQUNuMkMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMsSUFBSSxDQUFDM1csQ0FBQyxDQUFDM2pCLElBQUksQ0FBQy9CLENBQUMsQ0FBQyxRQUFRLENBQUMwbEIsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzhqQixlQUFlLENBQUNyMkMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtZ0QsZUFBZSxDQUFDLFFBQVEsQ0FBQ3o2QixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3MyQyxXQUFXLENBQUMxNkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNrVixJQUFJLENBQUMsc0JBQXNCLENBQUNsVixDQUFDLENBQUMsQ0FBQyxDQUFDczJDLFdBQVcsQ0FBQyxRQUFRLENBQUN0MkMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsT0FBTzBsQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUN3SCxNQUFNLENBQUN4SCxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUN0bEIsSUFBSSxDQUFDSixDQUFDLENBQUNnZ0QsS0FBSyxDQUFDLENBQUMsQ0FBQ3Z5QixRQUFRLENBQUMzakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyt5QyxLQUFLLENBQUMsUUFBUSxDQUFDbjNCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDc3pDLElBQUksQ0FBQ2pSLE9BQU8sQ0FBQzcxQixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDOG1DLElBQUksQ0FBQ1EsV0FBVyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUM5eUMsSUFBSSxDQUFDNGEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDMDNCLElBQUksQ0FBQ1MsVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMveUMsSUFBSSxDQUFDNGEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyNEIsV0FBVyxFQUFFLElBQUksQ0FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDdEIsSUFBSSxDQUFDdHlCLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3N5QixJQUFJLENBQUMxM0IsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbzBDLE1BQU0sQ0FBQyxJQUFJLENBQUNwMEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDMGlDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDNFEsSUFBSSxDQUFDalIsT0FBTyxDQUFDLENBQUNzUyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ0YsV0FBVyxDQUFDcDhDLEtBQUssQ0FBQyxJQUFJLENBQUNncUMsT0FBTyxDQUFDL3BDLFNBQVMsQ0FBQyxDQUFDLENBQUNzbEMsU0FBUyxDQUFDLFFBQVEsQ0FBQ2hpQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdTBDLFdBQVcsRUFBRSxJQUFJLENBQUNqQixJQUFJLENBQUNqUixPQUFPLENBQUM3MUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN1bUMsS0FBSyxDQUFDbjNCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2szQixrQkFBa0IsQ0FBQyxRQUFRLENBQUM1NEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsQ0FBQ3BrQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJd0ksQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDekcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxTQUFTLEdBQUduVixDQUFDLENBQUMsSUFBSSxDQUFDdzBDLGtCQUFrQixDQUFDNTRCLENBQUMsQ0FBQ3hVLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUdwSCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM3aUIsTUFBTSxDQUFDNmlCLENBQUMsQ0FBQzRtQixFQUFFLENBQUNtVCxZQUFZLENBQUMsQ0FBQ1ksV0FBVyxDQUFDLFFBQVEsQ0FBQzM2QixDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUM5aEIsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM4SixNQUFNLENBQUMsUUFBUSxDQUFDNUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUN6MEIsTUFBTSxDQUFDOGQsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ21ULFlBQVksQ0FBQ1ksV0FBVyxDQUFDcmdELENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8wbEIsQ0FBQyxDQUFDL2dCLElBQUksQ0FBQ21GLENBQUMsQ0FBQyxRQUFRLENBQUM0YixDQUFDLENBQUMsQ0FBQyxPQUFPMlcsQ0FBQyxDQUFDdnhCLElBQUksQ0FBQzRhLENBQUMsQ0FBQ3M2QixLQUFLLEVBQUV0NkIsQ0FBQyxDQUFDemdCLEtBQUssRUFBRXlnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsaUJBQWlCLENBQUM5bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ21ULFlBQVksQ0FBQyxDQUFDMzhDLE9BQU8sQ0FBQyxDQUFDdzlDLFFBQVEsQ0FBQyxDQUFDQyxTQUFTLENBQUMsb0JBQW9CLENBQUMvN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQ2toQixDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMscURBQXFELENBQUMsQ0FBQyxDQUFDLENBQUNtNkIsVUFBVSxDQUFDLFFBQVEsQ0FBQy8xQyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQzhzQyxXQUFXLENBQUMxcUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDVSxPQUFPLENBQUMyRyxRQUFRLEVBQUUsSUFBSSxDQUFDazJDLFlBQVksRUFBRSxDQUFDMy9DLENBQUMsQ0FBQzhKLENBQUMsRUFBRUEsQ0FBQyxDQUFDeEksTUFBTSxDQUFDLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ3c5QyxRQUFRLENBQUM5N0MsT0FBTyxDQUFDc0YsQ0FBQyxDQUFDeEksTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDd0IsT0FBTyxDQUFDdzlDLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQy9uQyxRQUFRLENBQUMsQ0FBQyxDQUFDK0ssSUFBSSxDQUFDLENBQUMsQ0FBQ3FELENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ3RsQixJQUFJLENBQUNKLENBQUMsQ0FBQyxDQUFDeXRCLFFBQVEsQ0FBQyxJQUFJLENBQUM0eEIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzM1QixDQUFDLENBQUM0bUIsRUFBRSxDQUFDbVQsWUFBWSxDQUFDLElBQUl0UCxDQUFDLENBQUMseUJBQXlCLENBQUN6cUIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDNXJDLE9BQU8sQ0FBQyxRQUFRLENBQUN5c0MsY0FBYyxDQUFDLE9BQU8sQ0FBQ3ZxQyxPQUFPLENBQUMsQ0FBQzQwQyxTQUFTLENBQUMsWUFBWSxDQUFDanVDLFFBQVEsQ0FBQyxJQUFJLENBQUMrMkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDckUsS0FBSyxDQUFDLENBQUMxMEIsTUFBTSxDQUFDLHNFQUFzRSxDQUFDZzVCLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDQyxhQUFhLENBQUMsNkNBQTZDLENBQUNDLFVBQVUsQ0FBQyxRQUFRLENBQUNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM1UyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2UyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNBLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzFVLE9BQU8sQ0FBQ2g5QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQ29wQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNwSyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyUyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUNDLFlBQVksQ0FBQ3BoQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUN3c0IsT0FBTyxDQUFDblQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2wyQixPQUFPLENBQUNxNUMsS0FBSyxDQUFDc0UsaUJBQWlCLEVBQUUsSUFBSSxDQUFDdFUsT0FBTyxDQUFDditCLElBQUksQ0FBQyxJQUFJLENBQUM5SyxPQUFPLENBQUNxNUMsS0FBSyxDQUFDc0UsaUJBQWlCLENBQUMsQ0FBQzd5QyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQzJKLFFBQVEsQ0FBQyxDQUFDLENBQUNtckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDc2UsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWwzQyxDQUFDLENBQUMsSUFBSSxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsSUFBSSxDQUFDZSxPQUFPLENBQUNxNUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzlmLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxJQUFJczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT3VQLENBQUMsQ0FBQyxtQkFBbUIsR0FBRzZsQixDQUFDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUNxaUMsT0FBTyxDQUFDditCLElBQUksQ0FBQzRJLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQy9wQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJK0gsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDd04sUUFBUSxDQUFDLGlDQUFpQyxDQUFDLENBQUNoVyxNQUFNLEVBQUV3SSxDQUFDLENBQUN5TixRQUFRLENBQUMsQ0FBQyxDQUFDK3FCLE9BQU8sQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLENBQUMsQ0FBQ3g0QixDQUFDLENBQUM4a0MsU0FBUyxDQUFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDeEIsTUFBTSxDQUFDc3RDLENBQUMsQ0FBQ3RxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDa2tCLENBQUMsQ0FBQzFrQixFQUFFLENBQUNxN0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3AxQixDQUFDLENBQUM2QyxDQUFDLENBQUMsR0FBRyxDQUFDdXlCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsR0FBRyxDQUFDdXlCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNud0IsQ0FBQyxDQUFDcWlDLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUM0SSxDQUFDLENBQUMsQ0FBQ3pVLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl5VSxDQUFDLENBQUNrUCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQzZsQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQzZQLENBQUMsQ0FBQ3htQixDQUFDLENBQUM4bUIsTUFBTSxDQUFDM3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ29FLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUdvMUIsQ0FBQyxFQUFFLENBQUM3bEIsQ0FBQyxDQUFDdEYsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDNVAsTUFBTSxDQUFDLENBQUN3cUMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ3QxQixDQUFDLENBQUM2bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDeVAsQ0FBQyxFQUFFLENBQUNJLENBQUMsQ0FBQ2pTLE9BQU8sQ0FBQ253QixDQUFDLENBQUNtM0MscUJBQXFCLENBQUMvVSxDQUFDLENBQUNqUyxPQUFPLENBQUM2UixDQUFDLENBQUMsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQzZsQixDQUFDLENBQUMsQ0FBQzZQLENBQUMsQ0FBQyxDQUFDLElBQUlLLENBQUMsQ0FBQy8xQixDQUFDLENBQUM2bEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMzVyxDQUFDLENBQUMxRyxJQUFJLENBQUN1dEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDVCxDQUFDLENBQUNBLENBQUMsQ0FBQ3QxQixDQUFDLENBQUM2bEIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUN2QixJQUFJLENBQUM4dEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN3VSxZQUFZLENBQUNyN0IsQ0FBQyxDQUFDQSxDQUFDLENBQUN6UCxNQUFNLENBQUNqVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzR1QyxTQUFTLENBQUMsSUFBSSxDQUFDbVMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQ0QsZ0JBQWdCLENBQUMsUUFBUSxDQUFDaDNDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2kzQyxZQUFZLENBQUNoL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSS9CLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMyVyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDZ2YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUNxZCxDQUFDLEVBQUVBLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsRUFBRXV5QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbzNDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ3g3QixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLDZFQUE2RSxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUM4a0IsbUJBQW1CLENBQUNyM0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDbXdCLE9BQU8sQ0FBQytsQixLQUFLLENBQUMsSUFBSSxDQUFDNVIsWUFBWSxDQUFDMW9CLENBQUMsQ0FBQyxJQUFJLENBQUMxbEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNHVDLFNBQVMsQ0FBQ2xwQixDQUFDLENBQUMsSUFBSSxDQUFDMlcsQ0FBQyxDQUFDLENBQUMsQ0FBQzhrQixtQkFBbUIsQ0FBQyxRQUFRLENBQUN6N0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOEMsT0FBTyxDQUFDNDBDLFNBQVMsQ0FBQ3JiLENBQUMsQ0FBQyxDQUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT29DLENBQUMsQ0FBQ3BDLE9BQU8sQ0FBQ253QixDQUFDLENBQUMsQ0FBQyxDQUFDczNDLE1BQU0sQ0FBQyxFQUFFLENBQUMvK0MsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQ3VDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQ3ZDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUNxaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDMzdCLENBQUMsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDLENBQUNpbEIsZUFBZSxDQUFDLFFBQVEsQ0FBQzU3QixDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLElBQUksQ0FBQ3EzQyxtQkFBbUIsQ0FBQ3o3QixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTzViLENBQUMsQ0FBQ213QixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDbndCLENBQUMsQ0FBQ213QixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUNud0IsQ0FBQyxDQUFDLENBQUN5M0MsY0FBYyxDQUFDLFFBQVEsQ0FBQzc3QixDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3k3QixtQkFBbUIsQ0FBQ3o3QixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzg3QixxQkFBcUIsQ0FBQyxRQUFRLENBQUM5N0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUN5N0IsbUJBQW1CLENBQUN6N0IsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQys3QixrQkFBa0IsQ0FBQyxRQUFRLENBQUMvN0IsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDaEgsT0FBTyxDQUFDNDBDLFNBQVMsQ0FBQyxNQUFNLENBQUMzb0IsS0FBSyxDQUFDamxCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNtd0IsT0FBTyxDQUFDLENBQUNtbkIsTUFBTSxDQUFDLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDLytDLEtBQUssQ0FBQyxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDeUgsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDdkgsSUFBSSxDQUFDLENBQUMsMkJBQTJCLENBQUN1SCxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDdTNDLElBQUksQ0FBQyxDQUFDLDJCQUEyQixDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDMzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3U3QixxQkFBcUIsQ0FBQyxRQUFRLENBQUNuM0MsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzNXLENBQUMsQ0FBQzNqQixJQUFJLENBQUMrSCxDQUFDLENBQUMsUUFBUSxDQUFDME0sQ0FBQyxDQUFDLENBQUMsSUFBSXMxQixDQUFDLENBQUM5ckMsQ0FBQyxDQUFDOEMsT0FBTyxDQUFDbTNCLE9BQU8sQ0FBQ3pqQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUNzMUIsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3BoQixJQUFJLENBQUN3bkMsQ0FBQyxDQUFDbG9DLE9BQU8sQ0FBQ3VzQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzlULENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxHQUFHLENBQUNoaUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUMsQ0FBQzVTLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeTRCLENBQUMsQ0FBQyxDQUFDaVMsVUFBVSxDQUFDLFFBQVEsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxNQUFNLFdBQVcsR0FBRzRiLENBQUMsRUFBRSxJQUFJLENBQUMwb0IsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQ3RyQyxPQUFPLENBQUM0MEMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDN0ssTUFBTSxDQUFDbm5CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRzRiLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ283QixnQkFBZ0IsQ0FBQ2gzQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5dUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNBLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl6dUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM0dUMsU0FBUyxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQzlyQyxPQUFPLENBQUM0MEMsU0FBUyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzUwQyxPQUFPLENBQUM0MEMsU0FBUyxFQUFFLElBQUksQ0FBQzlJLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUNvUyxZQUFZLENBQUMsQ0FBQyxDQUFDbDNDLENBQUMsQ0FBQyxJQUFJLENBQUNpM0MsWUFBWSxDQUFDLElBQUksQ0FBQ2orQyxPQUFPLENBQUMwOUMsV0FBVyxFQUFFLENBQUMxMkMsQ0FBQyxDQUFDQSxDQUFDLENBQUM0RCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzVELENBQUMsQ0FBQ3hJLE1BQU0sRUFBRSxDQUFDb2tCLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDMmpCLENBQUMsQ0FBQzJXLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3hJLENBQUMsRUFBRXhXLENBQUMsQ0FBQyxHQUFHLENBQUN3VyxDQUFDLENBQUN3MkIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSWxCLENBQUMsQ0FBQzlyQyxDQUFDLENBQUMsR0FBRyxDQUFDd1csQ0FBQyxDQUFDdzJCLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUdsakMsQ0FBQyxDQUFDeEksTUFBTSxDQUFDLE1BQU0sQ0FBQys2QixDQUFDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQzdSLE9BQU8sQ0FBQ2o2QixDQUFDLENBQUNpaEQscUJBQXFCLENBQUNuVixDQUFDLENBQUM3UixPQUFPLENBQUN6akIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzIxQixPQUFPLENBQUMzMUIsQ0FBQyxDQUFDdzJCLFVBQVUsQ0FBQyxDQUFDbEIsQ0FBQyxDQUFDLENBQUMsS0FBSzlyQyxDQUFDLENBQUNraEQsa0JBQWtCLENBQUNwM0MsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3lrQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcDdCLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQzltQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDK0wsY0FBYyxDQUFDLENBQUN6M0MsT0FBTyxDQUFDLFFBQVEsQ0FBQ2tDLE9BQU8sQ0FBQyxDQUFDMkcsUUFBUSxDQUFDLElBQUksQ0FBQ3UyQyxLQUFLLENBQUMsSUFBSSxDQUFDMEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDem5CLE9BQU8sQ0FBQyxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDOFQsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJamtDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUNxMkIsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzhVLFNBQVMsQ0FBQyxDQUFDLENBQUMzaEQsQ0FBQyxDQUFDLElBQUksQ0FBQ21zQyxPQUFPLENBQUN3TixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FHLEtBQUssQ0FBQ3Q2QixDQUFDLENBQUMxbEIsQ0FBQyxDQUFDQSxDQUFDLENBQUNzQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwK0MsS0FBSyxDQUFDMStDLE1BQU0sRUFBRW9rQixDQUFDLENBQUM1aEIsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsSUFBSSxDQUFDODlDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDNUIsS0FBSyxDQUFDem9DLFFBQVEsQ0FBQyxDQUFDLENBQUNULEdBQUcsQ0FBQyxJQUFJLENBQUNxMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwcUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNzNkIsQ0FBQyxDQUFDdWxCLGFBQWEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDdmlELFFBQVEsQ0FBQ3FtQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN0bEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5aEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNELGFBQWEsRUFBRSxDQUFDcHJDLENBQUMsQ0FBQ3dwQyxLQUFLLENBQUMsSUFBSSxDQUFDNEIsYUFBYSxDQUFDLENBQUM5M0MsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMxaUMsUUFBUSxDQUFDLElBQUksRUFBRUssQ0FBQyxFQUFFLENBQUMwTSxDQUFDLENBQUMvTSxRQUFRLENBQUNLLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUN3M0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXRvQixDQUFDLENBQUMsSUFBSSxDQUFDeW1CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzk1QixPQUFPLENBQUMsSUFBSSxDQUFDbW1DLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDMTFDLE9BQU8sQ0FBQzJHLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQzNHLE9BQU8sQ0FBQzJHLFFBQVEsQ0FBQyxJQUFJLENBQUMwaUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDMWlDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQzZrQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQ3hyQyxPQUFPLENBQUMyRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNtbEMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDQSxTQUFTLENBQUMsSUFBSSxDQUFDb1IsS0FBSyxDQUFDLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQ3hnRCxJQUFJLEVBQUUsSUFBSSxDQUFDb3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUNvUixLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxJQUFJLENBQUNsOUMsT0FBTyxDQUFDazlDLEtBQUssRUFBRSxJQUFJLENBQUNsOUMsT0FBTyxDQUFDazlDLEtBQUssR0FBRyxJQUFJLENBQUM0QixhQUFhLENBQUMsSUFBSSxDQUFDRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDOStDLE9BQU8sQ0FBQ2s5QyxLQUFLLENBQUMsSUFBSSxDQUFDNEIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDZixRQUFRLENBQUMsQ0FBQyxDQUFDbjdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2twQixTQUFTLENBQUMsSUFBSSxDQUFDb1IsS0FBSyxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDMEIsSUFBSSxFQUFFLElBQUksQ0FBQzlTLFNBQVMsQ0FBQyxJQUFJLENBQUM4UyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM3VCxHQUFHLENBQUMsQ0FBQ21RLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQ256QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrakIsU0FBUyxDQUFDLElBQUksQ0FBQ29SLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDbDFCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3NqQixZQUFZLENBQUMsSUFBSSxDQUFDNFIsS0FBSyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJNzNDLENBQUMsQ0FBQyxJQUFJLENBQUNxaUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDemlDLFFBQVEsQ0FBQ3BFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQzJzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMzc0MsSUFBSSxDQUFDLE9BQU8sR0FBR3NLLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQ2dCLElBQUksQ0FBQyxJQUFJLENBQUN0TCxJQUFJLENBQUMsRUFBRWttQixDQUFDLENBQUM1aEIsS0FBSyxDQUFDLGlEQUFpRCxDQUFDZ0csQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQ3RLLElBQUksQ0FBQyxDQUFDLENBQUNxaEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa0IsV0FBVyxDQUFDLElBQUksQ0FBQzVWLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzk1QixPQUFPLENBQUMsQ0FBQyxDQUFDbTZCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDd1QsS0FBSyxDQUFDLENBQUNnQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJbDRDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUNtc0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcHBDLElBQUksQ0FBQ3M1QixDQUFDLENBQUMsY0FBYyxDQUFDM1csQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ24yQixjQUFjLENBQUNuVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBT0EsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUMsSUFBSSxDQUFDc3VDLElBQUksQ0FBQzkyQyxNQUFNLENBQUNva0IsQ0FBQyxDQUFDLElBQUksQ0FBQzB5QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNscEMsUUFBUSxDQUFDLENBQUN4QixNQUFNLENBQUMydUIsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUMyVyxDQUFDLENBQUMsQ0FBQzN1QixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBR2dZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzB5QixJQUFJLENBQUMsQ0FBQyxDQUFDOTJDLE1BQU0sQ0FBQyxDQUFDLENBQUN3SSxDQUFDLENBQUNnTixHQUFHLENBQUMsSUFBSSxDQUFDcTFCLE9BQU8sQ0FBQyxDQUFDLENBQUN6bUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3U4QixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJbjRDLENBQUMsQ0FBQyxJQUFJLENBQUNxaUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOTVCLE9BQU8sQ0FBQyxJQUFJLENBQUNvOEIsWUFBWSxDQUFDLElBQUksQ0FBQ3VSLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQ2wyQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUM0K0MsSUFBSSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUNsaUQsSUFBSSxFQUFFLElBQUksQ0FBQ2l2QyxZQUFZLENBQUMsSUFBSSxDQUFDaVQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQzUzQyxDQUFDLENBQUMsQ0FBQzJrQyxZQUFZLENBQUMsSUFBSSxDQUFDaVQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzUzQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDdEssSUFBSSxFQUFFLElBQUksQ0FBQ3dpRCxjQUFjLENBQUMsQ0FBQyxDQUFDamdELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkrSCxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNnN0IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDNTJDLENBQUMsRUFBRUEsQ0FBQyxDQUFDc2tDLFlBQVksQ0FBQ3RrQyxDQUFDLENBQUNrMkMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3UixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzSyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaUosSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDQSxJQUFJLENBQUNsb0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwb0MsU0FBUyxDQUFDMW9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDODBCLFVBQVUsQ0FBQyxRQUFRLENBQUM1b0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsTUFBTSxPQUFPLEdBQUc0YixDQUFDLEVBQUU1YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMraUMsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRzRiLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytvQixZQUFZLENBQUMsSUFBSSxDQUFDdVIsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQ2wyQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxaUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDMWlDLFFBQVEsQ0FBQ0ssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5dUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ3dKLFdBQVcsQ0FBQyxRQUFRLENBQUNqNEMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUM0K0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDQSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUNBLElBQUksQ0FBQ2g4QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDdzhCLFNBQVMsQ0FBQ3g4QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUNrcEIsU0FBUyxDQUFDLElBQUksQ0FBQ3NULFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzFpRCxJQUFJLENBQUMsQ0FBQ1EsQ0FBQyxFQUFFOEosQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUNza0MsWUFBWSxDQUFDLElBQUksQ0FBQ3NULElBQUksQ0FBQyxJQUFJLENBQUM1M0MsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUM0dUMsU0FBUyxDQUFDLElBQUksQ0FBQzhTLElBQUksQ0FBQyx1QkFBdUIsQ0FBQzFoRCxDQUFDLENBQUMsQ0FBQzhKLENBQUMsRUFBRSxJQUFJLENBQUNza0MsWUFBWSxDQUFDLElBQUksQ0FBQ3NULElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxJQUFJLENBQUNBLElBQUksQ0FBQ2gwQixTQUFTLENBQUMsSUFBSSxDQUFDc3lCLEtBQUssQ0FBQyxDQUFDMXlCLEtBQUssQ0FBQyxJQUFJLENBQUM0MEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUNSLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQ0EsSUFBSSxDQUFDbG9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMG9DLFNBQVMsQ0FBQzFvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDa29DLElBQUksQ0FBQyxDQUFDLENBQUNJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlwOEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3M2QixLQUFLLENBQUN6b0MsUUFBUSxDQUFDLENBQUMsQ0FBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQ3ExQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1VixJQUFJLEVBQUUsQ0FBQ2g4QixDQUFDLENBQUNBLENBQUMsQ0FBQzVPLEdBQUcsQ0FBQyxJQUFJLENBQUM0cUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNRLFNBQVMsRUFBRSxDQUFDeDhCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDNU8sR0FBRyxDQUFDLElBQUksQ0FBQ29yQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeDhCLENBQUMsQ0FBQ2xNLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDd21DLEtBQUssQ0FBQzl5QixNQUFNLENBQUMsSUFBSSxDQUFDcHFCLE9BQU8sQ0FBQ2s5QyxLQUFLLENBQUMsQ0FBQyxDQUFDekgsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTd5QixDQUFDLENBQUMsSUFBSSxDQUFDeW1CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzk1QixPQUFPLENBQUN2SSxDQUFDLENBQUMsSUFBSSxDQUFDcWlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzFpQyxRQUFRLENBQUMsSUFBSSxDQUFDczRDLFdBQVcsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrb0IsWUFBWSxDQUFDLElBQUksQ0FBQ3VSLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQ3Q2QixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQ2s5QyxLQUFLLEVBQUUsSUFBSSxDQUFDOEIsWUFBWSxDQUFDLENBQUMsQ0FBQ2g0QyxDQUFDLEdBQUcsSUFBSSxDQUFDaEgsT0FBTyxDQUFDMkcsUUFBUSxFQUFFLElBQUksQ0FBQzRrQyxXQUFXLENBQUMsQ0FBQzVrQyxRQUFRLENBQUNLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUNvVSxhQUFhLENBQUNoN0IsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzVyQyxPQUFPLENBQUMsUUFBUSxDQUFDeXNDLGNBQWMsQ0FBQyxVQUFVLENBQUN2cUMsT0FBTyxDQUFDLENBQUNtM0IsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDeHdCLFFBQVEsQ0FBQyxJQUFJLENBQUNpNEMsSUFBSSxDQUFDLElBQUksQ0FBQ1MsWUFBWSxDQUFDLFdBQVcsQ0FBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUNvQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JVLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXJvQixDQUFDLENBQUM1YixDQUFDLENBQUMsSUFBSSxDQUFDK2lDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUN3VixPQUFPLENBQUMsSUFBSSxDQUFDbFcsT0FBTyxDQUFDNzFCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQ29QLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDMWlDLFFBQVEsQ0FBQyxJQUFJLEVBQUVpYyxDQUFDLEVBQUUsQ0FBQzViLENBQUMsQ0FBQ0wsUUFBUSxDQUFDaWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDazhCLGFBQWEsQ0FBQyxJQUFJLENBQUNTLE9BQU8sQ0FBQyxJQUFJLENBQUNsVyxPQUFPLENBQUNsc0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrc0MsT0FBTyxDQUFDM2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNvMUIsYUFBYSxFQUFFLENBQUM5M0MsQ0FBQyxDQUFDazJDLEtBQUssQ0FBQyxJQUFJLENBQUM0QixhQUFhLENBQUMsQ0FBQzkzQyxDQUFDLENBQUMsQ0FBQ2trQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3JyQixNQUFNLENBQUN5L0IsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDdC9DLE9BQU8sQ0FBQzQrQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM1K0MsT0FBTyxDQUFDcy9DLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUN0L0MsT0FBTyxDQUFDMkcsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDM0csT0FBTyxDQUFDMkcsUUFBUSxDQUFDLElBQUksQ0FBQzBpQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMxaUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNjRDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDblcsT0FBTyxDQUFDaDlCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNyTSxPQUFPLENBQUNrOUMsS0FBSyxFQUFFLElBQUksQ0FBQ2w5QyxPQUFPLENBQUNrOUMsS0FBSyxHQUFHLElBQUksQ0FBQzRCLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQ1MsT0FBTyxDQUFDLElBQUksQ0FBQ2xXLE9BQU8sQ0FBQ2xzQyxHQUFHLENBQUMsSUFBSSxDQUFDNkMsT0FBTyxDQUFDazlDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQzdULE9BQU8sQ0FBQzNmLElBQUksQ0FBQyxJQUFJLENBQUMxcEIsT0FBTyxDQUFDazlDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcFIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUNOLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDeHJDLE9BQU8sQ0FBQzJHLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ28zQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzFVLE9BQU8sQ0FBQzcxQixFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDdTNCLEdBQUcsQ0FBQyxDQUFDMFUsS0FBSyxDQUFDLFFBQVEsQ0FBQ3o0QyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDaWdCLE9BQU8sR0FBR3JFLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDeXZCLEtBQUssRUFBRSxDQUFDMXZDLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK2tCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ2prQixLQUFLLENBQUMsSUFBSSxDQUFDaWtCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ2prQixLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lrQixPQUFPLENBQUMvakIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3k0QixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMxVSxPQUFPLENBQUM3MUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQzYxQixPQUFPLENBQUNoOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNyTSxPQUFPLENBQUM0K0MsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDSyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQ2ovQyxPQUFPLENBQUM0K0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDYyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDdFcsT0FBTyxDQUFDaDlCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNyTSxPQUFPLENBQUNzL0MsU0FBUyxFQUFFLElBQUksQ0FBQ0ssS0FBSyxFQUFFLElBQUksQ0FBQ3RXLE9BQU8sQ0FBQ2g5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQ3JNLE9BQU8sQ0FBQ2s5QyxLQUFLLENBQUMsQ0FBQyxDQUFDK0IsV0FBVyxDQUFDLFFBQVEsQ0FBQ2o0QyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxjQUFjLEdBQUd2eUIsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxJQUFJLENBQUN2NUIsT0FBTyxDQUFDcS9DLFlBQVksQ0FBQ25pRCxDQUFDLENBQUM4ckMsQ0FBQyxDQUFDLEtBQUssR0FBR3QxQixDQUFDLEVBQUUsUUFBUSxHQUFHQSxDQUFDLENBQUMsSUFBSSxDQUFDa3JDLElBQUksQ0FBQ3JsQixDQUFDLEVBQUUsSUFBSSxDQUFDK1IsWUFBWSxDQUFDLElBQUksQ0FBQ3NULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDNStDLE9BQU8sQ0FBQzQrQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsSUFBSSxDQUFDaDhCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNrcEIsU0FBUyxDQUFDLElBQUksQ0FBQzhTLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUM1K0MsT0FBTyxDQUFDcy9DLFNBQVMsRUFBRSxJQUFJLENBQUN4VCxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDdlMsQ0FBQyxFQUFFLElBQUksQ0FBQ3VTLFNBQVMsQ0FBQyxJQUFJLENBQUM4UyxJQUFJLENBQUMsSUFBSSxDQUFDMWhELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBpRCxXQUFXLENBQUNsc0MsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOEMsU0FBUyxDQUFDLElBQUksQ0FBQzhTLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUNRLFNBQVMsRUFBRSxJQUFJLENBQUNBLFNBQVMsQ0FBQzFvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwb0MsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDQSxTQUFTLENBQUN4OEIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDa3BCLFNBQVMsQ0FBQyxJQUFJLENBQUNzVCxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzlULFlBQVksQ0FBQyxJQUFJLENBQUNzVCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDaUIsZ0JBQWdCLENBQUNuc0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMjNCLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hDLE9BQU8sQ0FBQ25ULFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMwb0IsSUFBSSxFQUFFLElBQUksQ0FBQ0EsSUFBSSxDQUFDbG9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMG9DLFNBQVMsRUFBRSxJQUFJLENBQUNBLFNBQVMsQ0FBQzFvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzhvQyxRQUFRLEVBQUUsSUFBSSxDQUFDblcsT0FBTyxDQUFDblQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMycEIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDajlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c4QixJQUFJLENBQUMsaUJBQWlCLENBQUM1MkMsSUFBSSxDQUFDNGEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ3c4QixTQUFTLENBQUMsQ0FBQyxDQUFDUSxXQUFXLENBQUMsUUFBUSxDQUFDaDlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ltQixPQUFPLENBQUMsaUJBQWlCLENBQUNyaEMsSUFBSSxDQUFDNGEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c4QixJQUFJLENBQUMsQ0FBQyxDQUFDclQsV0FBVyxDQUFDLFFBQVEsQ0FBQzNvQixDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHNGIsQ0FBQyxDQUFDMDhCLFNBQVMsQ0FBQyxJQUFJLENBQUN0L0MsT0FBTyxDQUFDcy9DLFNBQVMsQ0FBQzE4QixDQUFDLENBQUMwOEIsU0FBUyxDQUFDcGlELENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRzBsQixDQUFDLENBQUNnOEIsSUFBSSxDQUFDLElBQUksQ0FBQzUrQyxPQUFPLENBQUM0K0MsSUFBSSxDQUFDaDhCLENBQUMsQ0FBQ2c4QixJQUFJLENBQUM1M0MsQ0FBQyxFQUFFOUosQ0FBQyxFQUFFLENBQUMwbEIsQ0FBQyxDQUFDMDhCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ZWLE1BQU0sQ0FBQ25uQixDQUFDLENBQUMsQ0FBQyxDQUFDNG9CLFVBQVUsQ0FBQyxRQUFRLENBQUM1b0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHNGIsQ0FBQyxFQUFFLENBQUM1YixDQUFDLENBQUMsSUFBSSxDQUFDaTRDLFdBQVcsQ0FBQ3I4QixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0M0MsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDQSxJQUFJLENBQUNsb0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwb0MsU0FBUyxFQUFFLElBQUksQ0FBQ0EsU0FBUyxDQUFDMW9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBR2tNLENBQUMsRUFBRSxJQUFJLENBQUNxOEIsV0FBVyxDQUFDcjhCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRzRiLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQytvQixZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMza0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMDRDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUc5OEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMjhCLE9BQU8sQ0FBQyxJQUFJLENBQUNsVyxPQUFPLENBQUNsc0MsR0FBRyxDQUFDNkosQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxaUMsT0FBTyxDQUFDM2YsSUFBSSxDQUFDMWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzQzQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUNnQixXQUFXLENBQUMsSUFBSSxDQUFDNS9DLE9BQU8sQ0FBQ3EvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUNRLGdCQUFnQixDQUFDLElBQUksQ0FBQzcvQyxPQUFPLENBQUNxL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdFYsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRzRiLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQytvQixZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDM2tDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMxaUMsUUFBUSxDQUFDSyxDQUFDLENBQUNBLENBQUMsRUFBRSxJQUFJLENBQUNxaUMsT0FBTyxDQUFDcmhCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeXRCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk3eUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3ltQixPQUFPLENBQUM3MUIsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQzYxQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMxaUMsUUFBUSxDQUFDLElBQUksQ0FBQzBpQyxPQUFPLENBQUN6UixRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQ2hWLENBQUMsR0FBRyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDMkcsUUFBUSxFQUFFLElBQUksQ0FBQzRrQyxXQUFXLENBQUMsQ0FBQzVrQyxRQUFRLENBQUNpYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzg4QixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOThCLENBQUMsQ0FBQzB2QixZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzF2QixDQUFDLENBQUM4bUIsTUFBTSxDQUFDLFdBQVcsQ0FBQzltQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDN2tCLE1BQU0sQ0FBQyxDQUFDM2tCLE9BQU8sQ0FBQyxDQUFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDKzVDLEtBQUssQ0FBQyxDQUFDeUksT0FBTyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM3VSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNsckMsT0FBTyxDQUFDcy9DLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQ3QvQyxPQUFPLENBQUMxQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMwQyxPQUFPLENBQUNzL0MsU0FBUyxDQUFDLElBQUksQ0FBQ3QvQyxPQUFPLENBQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBDLE9BQU8sQ0FBQ3MvQyxTQUFTLEVBQUUsSUFBSSxDQUFDdC9DLE9BQU8sQ0FBQzFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQzBDLE9BQU8sQ0FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMwQyxPQUFPLENBQUNzL0MsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDdC9DLE9BQU8sQ0FBQzQrQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM1K0MsT0FBTyxDQUFDcTNDLEtBQUssQ0FBQ3lJLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQzkvQyxPQUFPLENBQUNxM0MsS0FBSyxDQUFDMEksU0FBUyxDQUFDLElBQUksQ0FBQy8vQyxPQUFPLENBQUM0K0MsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDNStDLE9BQU8sQ0FBQ3EzQyxLQUFLLENBQUN5SSxPQUFPLENBQUMsSUFBSSxDQUFDOS9DLE9BQU8sQ0FBQzQrQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM1K0MsT0FBTyxDQUFDcTNDLEtBQUssQ0FBQ3lJLE9BQU8sQ0FBQyxJQUFJLENBQUM5L0MsT0FBTyxDQUFDNCtDLElBQUksQ0FBQyxJQUFJLENBQUM1K0MsT0FBTyxDQUFDcTNDLEtBQUssQ0FBQ3lJLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQzkvQyxPQUFPLENBQUM0K0MsSUFBSSxDQUFDLElBQUksQ0FBQzUrQyxPQUFPLENBQUNxM0MsS0FBSyxDQUFDMEksU0FBUyxDQUFDLElBQUksQ0FBQy8vQyxPQUFPLENBQUNxL0MsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQ3RWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3lCLFVBQVUsQ0FBQyxRQUFRLENBQUM1b0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLEdBQUc0YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQy9pQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHNGIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQzFDLElBQUksQ0FBQzBKLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRzRiLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUNxM0MsS0FBSyxDQUFDeUksT0FBTyxDQUFDOTRDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRzRiLENBQUMsRUFBRSxDQUFDNWIsQ0FBQyxDQUFDODRDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQy9WLE1BQU0sQ0FBQyxNQUFNLENBQUMvaUMsQ0FBQyxDQUFDODRDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQy9WLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQy9pQyxDQUFDLENBQUMrNEMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDaFcsTUFBTSxDQUFDLE1BQU0sQ0FBQy9pQyxDQUFDLENBQUMrNEMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDaFcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMxcUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NqQixDQUFDLENBQUMxa0IsRUFBRSxDQUFDeW1CLE1BQU0sQ0FBQyxRQUFRLENBQUMzZCxDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQ3hJLE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDd2hELE9BQU8sRUFBRSxJQUFJLENBQUN4aEQsTUFBTSxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUN3aEQsT0FBTyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMzekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQ3JGLENBQUMsQ0FBQzNILEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUNzakIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ29VLGFBQWEsRUFBRWg3QixDQUFDLENBQUM1aEIsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxHQUFHMUIsU0FBUyxDQUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDby9DLGFBQWEsQ0FBQyxDQUFDZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoQixhQUFhLENBQUN2K0MsS0FBSyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzakIsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQ3ltQixNQUFNLENBQUMsQ0FBQy9CLENBQUMsQ0FBQzFrQixFQUFFLENBQUMraEQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBT3I5QixDQUFDLENBQUM0bUIsRUFBRSxDQUFDMFcsWUFBWSxFQUFFdDlCLENBQUMsQ0FBQzVoQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLEdBQUcxQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0Z0QsWUFBWSxDQUFDN2dELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUdBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUdBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0Z0QsWUFBWSxDQUFDN2dELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBT0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMrNUMsS0FBSyxFQUFFLENBQUMvNUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDKzVDLEtBQUssQ0FBQyxDQUFDMTBCLE1BQU0sQ0FBQ3JsQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMrNUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2RyxZQUFZLENBQUM3Z0QsS0FBSyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzakIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQzdrQixNQUFNLENBQUMvQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDNmlCLENBQUMsQ0FBQzRtQixFQUFFLENBQUMsQ0FBQ1AsVUFBVSxDQUFDLENBQUNuckMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJcUosQ0FBQyxDQUFDeWIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQ3c1QixDQUFDLENBQUNsN0IsU0FBUyxDQUFDLENBQUM4aEQsZUFBZSxDQUFDLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3RYLEtBQUssQ0FBQyxDQUFDdVgsV0FBVyxDQUFDLFFBQVEsQ0FBQzE5QixDQUFDLENBQUMsQ0FBQyxPQUFPemUsQ0FBQyxDQUFDLElBQUksQ0FBQ3NpQyxTQUFTLENBQUM3akIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMyOUIsaUJBQWlCLENBQUMsUUFBUSxDQUFDdjVDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUN6UCxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDSixRQUFRLENBQUNwRSxXQUFXLENBQUMsQ0FBQyxDQUFDa1IsQ0FBQyxDQUFDLEtBQUssR0FBRzZsQixDQUFDLEVBQUUsTUFBTSxHQUFHQSxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM2aUMsSUFBSSxFQUFFLENBQUMsQ0FBQ3pqQyxDQUFDLENBQUNZLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDNmlDLElBQUksQ0FBQyxDQUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQ3dYLFFBQVEsQ0FBQzU5QixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzlMLFFBQVEsQ0FBQ3RhLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUdxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQ2tuQixrQkFBa0IsQ0FBQ3o1QyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxFQUFFLElBQUksQ0FBQ2d0QyxpQkFBaUIsQ0FBQzE1QyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3dYLFFBQVEsQ0FBQyxRQUFRLENBQUN4NUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDWSxFQUFFLENBQUM5RyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDOEcsRUFBRSxDQUFDMnhCLENBQUMsQ0FBQ3B1QixLQUFLLENBQUNuRSxDQUFDLENBQUMyNUMsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQzVYLE1BQU0sQ0FBQ2pzQyxDQUFDLENBQUM2ckMsS0FBSyxDQUFDN3JDLENBQUMsQ0FBQ3dXLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDcWlCLFlBQVksQ0FBQyxxRkFBcUYsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOEQsS0FBSyxDQUFDLENBQUMsQ0FBQzBYLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ3o1QyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDa3RCLE1BQU0sQ0FBQ3hILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQ29vQixPQUFPLENBQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJXLENBQUMsQ0FBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUN1b0IsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNhLFlBQVksQ0FBQ3puQixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDckMsUUFBUSxDQUFDLElBQUksQ0FBQ2lwQixlQUFlLENBQUMsQ0FBQ2grQixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzgrQixVQUFVLENBQUMsQ0FBQzkrQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQysrQixXQUFXLENBQUMsQ0FBQy8rQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQ2cvQixRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2xrRCxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMxRyxJQUFJLENBQUNsVixDQUFDLENBQUMsWUFBWSxDQUFDOUosQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ2dnQyxRQUFRLENBQUN2MkIsUUFBUSxFQUFFLElBQUksQ0FBQzA2QyxrQkFBa0IsQ0FBQ3I2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnNkMsWUFBWSxDQUFDLFFBQVEsQ0FBQ2g2QyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQyxJQUFJLENBQUNtOUMsSUFBSSxDQUFDcGtELENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUMsSUFBSSxDQUFDa1ksSUFBSSxDQUFDcGtELENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDa3RCLE1BQU0sRUFBRWx0QixDQUFDLENBQUNrdEIsTUFBTSxDQUFDMVQsTUFBTSxDQUFDLENBQUMsQ0FBQ3ZTLENBQUMsRUFBRSxDQUFDakgsQ0FBQyxDQUFDa3RCLE1BQU0sQ0FBQ3hILENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDc2lCLFlBQVksQ0FBQyxJQUFJLENBQUMvZ0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDb2lDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUNsc0MsQ0FBQyxDQUFDa3RCLE1BQU0sQ0FBQyxDQUFDLENBQUNwakIsQ0FBQyxDQUFDd2IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMrK0IsZUFBZSxDQUFDLENBQUNya0QsQ0FBQyxDQUFDb29CLE9BQU8sRUFBRXBvQixDQUFDLENBQUNvb0IsT0FBTyxDQUFDNU8sTUFBTSxDQUFDLENBQUMsQ0FBQzZpQixDQUFDLENBQUMsSUFBSSxDQUFDK25CLElBQUksQ0FBQ3BrRCxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUdxOEIsQ0FBQyxFQUFFLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLEVBQUV2eUIsQ0FBQyxDQUFDbWIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUNvL0IsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUdob0IsQ0FBQyxFQUFFLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQzdsQixDQUFDLENBQUMsSUFBSSxDQUFDNHRDLElBQUksQ0FBQ3BrRCxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM4ckMsQ0FBQyxDQUFDLElBQUksQ0FBQ3NZLElBQUksQ0FBQ3BrRCxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNBLENBQUMsQ0FBQ29vQixPQUFPLENBQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDMCtCLElBQUksQ0FBQ3BrRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUNzVSxRQUFRLENBQUMsSUFBSSxDQUFDaU8sYUFBYSxDQUFDLENBQUM5NEIsSUFBSSxDQUFDLENBQUMxUCxHQUFHLENBQUNxc0MsQ0FBQyxDQUFDd1ksR0FBRyxDQUFDOXRDLENBQUMsQ0FBQ2lzQyxLQUFLLENBQUNqc0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDc1UsUUFBUSxDQUFDLElBQUksQ0FBQ2lPLGFBQWEsQ0FBQyxDQUFDemIsSUFBSSxDQUFDc2YsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ3ZXLElBQUksQ0FBQyxDQUFDMVAsR0FBRyxDQUFDcXNDLENBQUMsQ0FBQ3dZLEdBQUcsQ0FBQzl0QyxDQUFDLENBQUNpc0MsS0FBSyxDQUFDanNDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMxTSxDQUFDLENBQUNvaUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUNvb0IsT0FBTyxDQUFDLENBQUNwb0IsQ0FBQyxDQUFDb29CLE9BQU8sQ0FBQ25ELEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPUyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDbkUsa0JBQWtCLEVBQUVsaUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3dZLFVBQVUsR0FBR3o2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUNxbUIsVUFBVSxDQUFDeVksZUFBZSxDQUFDLENBQUMsQ0FBQzkrQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDbkUsa0JBQWtCLEVBQUVsaUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3dZLFVBQVUsR0FBR3o2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ3FtQixVQUFVLENBQUN5WSxlQUFlLENBQUMsQ0FBQyxDQUFDOStCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNzWSxlQUFlLENBQUN2NkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNzWSxlQUFlLENBQUN2NkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ282QyxTQUFTLENBQUMsUUFBUSxDQUFDeCtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMwK0IsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUN1bUIsTUFBTSxDQUFDLENBQUMsSUFBSW5pQyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsSUFBSXZsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQ1UsQ0FBQyxDQUFDLElBQUksQ0FBQ205QyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDemUsQ0FBQyxDQUFDa0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUNMLENBQUMsQ0FBQyxRQUFRLENBQUM0YixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMxbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLENBQUNrUCxDQUFDLENBQUNwa0IsTUFBTSxDQUFDa1YsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ2tQLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDbFYsTUFBTSxDQUFDdEIsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQzBsQixDQUFDLENBQUNsUCxDQUFDLENBQUMsQ0FBQ2xWLE1BQU0sQ0FBQys2QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsT0FBTzZsQixDQUFDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQzJZLFFBQVEsQ0FBQzM2QyxDQUFDLENBQUMsSUFBSSxDQUFDczZDLElBQUksQ0FBQzErQixDQUFDLENBQUN6ZSxDQUFDLENBQUNrRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDMmhDLENBQUMsQ0FBQzRZLE9BQU8sQ0FBQzU2QyxDQUFDLENBQUMsSUFBSSxDQUFDczZDLElBQUksQ0FBQzErQixDQUFDLENBQUN6ZSxDQUFDLENBQUNrRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDMmhDLENBQUMsQ0FBQzZZLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDai9CLENBQUMsQ0FBQ3pYLEtBQUssQ0FBQ2tCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDeTFDLFdBQVcsQ0FBQ2wvQixDQUFDLENBQUNvbUIsQ0FBQyxDQUFDLENBQUN4cUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDa2lELGlCQUFpQixDQUFDLFFBQVEsQ0FBQzE1QyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUN1b0IsZUFBZSxDQUFDLEVBQUUsQ0FBQzVtQixDQUFDLENBQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDaXBCLGVBQWUsQ0FBQyxDQUFDLzFCLE1BQU0sQ0FBQ2x0QixDQUFDLENBQUM2ckMsS0FBSyxDQUFDLENBQUNubUIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDbFYsQ0FBQyxDQUFDLFlBQVksQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZrRCxRQUFRLENBQUM3a0QsQ0FBQyxDQUFDLElBQUksQ0FBQzhrRCxlQUFlLENBQUM5a0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMra0QsaUJBQWlCLENBQUMva0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ2xELGdCQUFnQixDQUFDaGxELENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNnZ0MsUUFBUSxDQUFDdjJCLFFBQVEsRUFBRSxJQUFJLENBQUMwNkMsa0JBQWtCLENBQUNyNkMsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUM2ckMsS0FBSyxDQUFDNXFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDZ2tDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQ243QyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsQ0FBQyxJQUFJSSxDQUFDLENBQUNLLENBQUMsQ0FBQzUwQixDQUFDLENBQUNrM0IsQ0FBQyxDQUFDUSxDQUFDLENBQUNJLENBQUMsQ0FBQyxJQUFJLENBQUN5VixXQUFXLENBQUMsT0FBT3pWLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2xDLElBQUksRUFBRSxDQUFDLENBQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3FCLElBQUksQ0FBQyxJQUFJLENBQUM0WCxZQUFZLENBQUN6L0IsQ0FBQyxDQUFDLHlCQUF5QixDQUFDd21CLENBQUMsQ0FBQywwREFBMEQsQ0FBQyxDQUFDLElBQUksQ0FBQ2laLFlBQVksQ0FBQ2xnQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzgrQixVQUFVLENBQUMsQ0FBQ3IrQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUN3SCxNQUFNLENBQUMsSUFBSSxDQUFDaTRCLFlBQVksQ0FBQyxDQUFDMVYsQ0FBQyxDQUFDLElBQUksQ0FBQ3lWLFdBQVcsQ0FBQyxJQUFJLENBQUM1QixRQUFRLENBQUMsSUFBSSxDQUFDNkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxVixDQUFDLENBQUN6UCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN0YSxDQUFDLENBQUMxRyxJQUFJLENBQUMsSUFBSSxDQUFDbW1DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMxVixDQUFDLENBQUMsQ0FBQyxDQUFDeG9DLENBQUMsQ0FBQ3dvQyxDQUFDLENBQUN6UCxRQUFRLENBQUN4cEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUN4VyxDQUFDLENBQUNBLENBQUMsRUFBRUEsQ0FBQyxDQUFDcUIsV0FBVyxHQUFHa0YsSUFBSSxDQUFDLElBQUksQ0FBQ3ErQyxXQUFXLENBQUNuVixDQUFDLENBQUN6dkMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUNtbEQsWUFBWSxDQUFDbGxELEdBQUcsQ0FBQ0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb2xELElBQUksQ0FBQ3RaLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDeHFDLE1BQU0sQ0FBQ3dxQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcGlCLEtBQUssQ0FBQ29pQixDQUFDLENBQUNuaUIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3k3QixJQUFJLEVBQUUsQ0FBQzdZLENBQUMsQ0FBQ3p1QyxRQUFRLENBQUNpUCxlQUFlLENBQUM0aUMsV0FBVyxDQUFDaDRCLENBQUMsQ0FBQzdaLFFBQVEsQ0FBQ2lQLGVBQWUsQ0FBQ3M0QyxZQUFZLENBQUN4VyxDQUFDLENBQUMvd0MsUUFBUSxDQUFDaVAsZUFBZSxDQUFDa25CLFVBQVUsRUFBRW4yQixRQUFRLENBQUNta0IsSUFBSSxDQUFDZ1MsVUFBVSxDQUFDb2IsQ0FBQyxDQUFDdnhDLFFBQVEsQ0FBQ2lQLGVBQWUsQ0FBQ2luQixTQUFTLEVBQUVsMkIsUUFBUSxDQUFDbWtCLElBQUksQ0FBQytSLFNBQVMsQ0FBQyxJQUFJLENBQUNveEIsSUFBSSxDQUFDLENBQUM3WSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3NDLENBQUMsQ0FBQ2wzQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzAzQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzhWLFlBQVksQ0FBQ2xrQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQ21rQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDbmtDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDbWtDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzNWLENBQUMsQ0FBQ3pQLFFBQVEsQ0FBQ2dMLFFBQVEsQ0FBQzNPLENBQUMsQ0FBQyxJQUFJLENBQUN3TCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ0UsS0FBSyxDQUFDN1IsUUFBUSxDQUFDLElBQUksQ0FBQ2tPLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQ21jLGVBQWUsQ0FBQyxJQUFJLENBQUNjLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDei9CLENBQUMsQ0FBQzQvQixPQUFPLEVBQUU1L0IsQ0FBQyxDQUFDNC9CLE9BQU8sQ0FBQyxJQUFJLENBQUN6WixLQUFLLENBQUMsQ0FBQ25tQixDQUFDLENBQUMxRyxJQUFJLENBQUMsSUFBSSxDQUFDbW1DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMxVixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzhWLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ3o3QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDbFYsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUN1b0IsZUFBZSxDQUFDLEVBQUUsQ0FBQ2pqRCxDQUFDLENBQUM4SixDQUFDLENBQUNKLFFBQVEsQ0FBQ3BFLFdBQVcsQ0FBQyxDQUFDLENBQUNvZ0IsQ0FBQyxDQUFDL0YsVUFBVSxDQUFDN1YsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sR0FBRzlKLENBQUMsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDMFcsTUFBTSxDQUFDMVQsTUFBTSxDQUFDLENBQUMsQ0FBQ2hELENBQUMsQ0FBQzRSLE9BQU8sQ0FBQzVPLE1BQU0sQ0FBQyxDQUFDLENBQUM2aUIsQ0FBQyxDQUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQzRvQixlQUFlLENBQUMsQ0FBQzM5QixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQysrQixlQUFlLENBQUMsQ0FBQy8rQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQ3krQixVQUFVLENBQUMsQ0FBQ3orQixHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzArQixXQUFXLENBQUMsQ0FBQzErQixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzIrQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHamtELENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQyxFQUFFcThCLENBQUMsQ0FBQ2hDLFdBQVcsQ0FBQyxJQUFJLENBQUM0b0IsZUFBZSxDQUFDLENBQUN4cEMsS0FBSyxDQUFDLENBQUMsQ0FBQ3hQLENBQUMsR0FBR3VNLENBQUMsRUFBRSxDQUFDdk0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3U3QyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMxN0MsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQzFHLElBQUksQ0FBQ2xWLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzBNLENBQUMsQ0FBQ2trQixRQUFRLENBQUMsSUFBSSxDQUFDdW9CLGVBQWUsQ0FBQyxFQUFFLENBQUNqakQsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDSixRQUFRLENBQUNwRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBR3RGLENBQUMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDTCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNxaUMsQ0FBQyxDQUFDMWpCLE9BQU8sQ0FBQzFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzNMLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBILFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMvRyxHQUFHLENBQUMsQ0FBQyxDQUFDZ0wsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDdVQsR0FBRyxDQUFDLENBQUNxUixPQUFPLENBQUMsS0FBSyxDQUFDbXpCLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUd6bEQsQ0FBQyxFQUFFLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDYyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQ3l3QixZQUFZLENBQUMsQ0FBQzFMLENBQUMsQ0FBQy9rQixRQUFRLENBQUMsQ0FBQyxDQUFDK2lCLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDZ0MsQ0FBQyxDQUFDenVCLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDcVIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMG9CLGVBQWUsQ0FBQ2ppQixDQUFDLENBQUN6akIsR0FBRyxDQUFDLElBQUksQ0FBQzBsQyxlQUFlLENBQUMsUUFBUSxDQUFDamlCLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsR0FBRzViLENBQUMsQ0FBQyxJQUFJLENBQUM0YixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3krQixrQkFBa0IsQ0FBQyxRQUFRLENBQUNyNkMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQzFHLElBQUksQ0FBQ2xWLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzBNLENBQUMsQ0FBQ2trQixRQUFRLENBQUMsSUFBSSxDQUFDdW9CLGVBQWUsQ0FBQyxFQUFFLENBQUNqakQsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDSixRQUFRLENBQUNwRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBR3RGLENBQUMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDTCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNxaUMsQ0FBQyxDQUFDMWpCLE9BQU8sQ0FBQzFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzNMLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBILFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMvRyxHQUFHLENBQUMsQ0FBQyxDQUFDZ0wsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDdVQsR0FBRyxDQUFDLENBQUNxUixPQUFPLENBQUMsS0FBSyxDQUFDbXpCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUd6bEQsQ0FBQyxFQUFFLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDYyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQ3l3QixZQUFZLENBQUMsQ0FBQzFMLENBQUMsQ0FBQy9rQixRQUFRLENBQUMsQ0FBQyxDQUFDMGlCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDcUMsQ0FBQyxDQUFDenVCLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDcVIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMG9CLGVBQWUsQ0FBQ2ppQixDQUFDLENBQUN6akIsR0FBRyxDQUFDLElBQUksQ0FBQzBsQyxlQUFlLENBQUMsUUFBUSxDQUFDamlCLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsR0FBRzViLENBQUMsQ0FBQyxJQUFJLENBQUM0YixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lpQixlQUFlLENBQUMsSUFBSSxDQUFDQSxlQUFlLENBQUNybUMsTUFBTSxDQUFDLENBQUN3SSxDQUFDLENBQUMsQ0FBQyxDQUFDa2lDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQ3RtQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk1YixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzY5QixlQUFlLENBQUNybUMsTUFBTSxDQUFDd0ksQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDNjlCLGVBQWUsQ0FBQzc5QixDQUFDLENBQUMsR0FBRzRiLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ2dnQyxRQUFRLENBQUMsUUFBUSxDQUFDNTdDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPNGIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDbFYsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLEtBQUssMkNBQTJDLENBQUMsQ0FBQyxDQUFDMmxELGlCQUFpQixDQUFDLFFBQVEsQ0FBQzc3QyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDSSxDQUFDLENBQUNLLENBQUMsQ0FBQzUwQixDQUFDLENBQUMsSUFBSSxDQUFDK3RDLFFBQVEsQ0FBQzU3QyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRzFILFNBQVMsQ0FBQ2QsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPdEIsQ0FBQyxDQUFDLFVBQVUsR0FBR0EsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM2aUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3hDLFNBQVMsQ0FBQyxDQUFDNXhCLENBQUMsQ0FBQyxLQUFLLEdBQUczWCxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzhVLENBQUMsQ0FBQ3FvQixRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNva0IsSUFBSSxDQUFDenNDLENBQUMsQ0FBQzNYLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDd1csQ0FBQyxDQUFDeFcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPQSxDQUFDLEVBQUUsQ0FBQ3dXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMxa0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOHZCLFFBQVEsR0FBRzl2QixDQUFDLEVBQUUsSUFBSSxDQUFDNnNDLGVBQWUsQ0FBQyxDQUFDLENBQUMxWSxDQUFDLENBQUMsSUFBSSxDQUFDOFosa0JBQWtCLENBQUM5N0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvaUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJaLGNBQWMsQ0FBQ2x1QyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM0MEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3NaLGNBQWMsQ0FBQ2x1QyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMxUSxDQUFDLENBQUMwUSxDQUFDLENBQUNxb0IsUUFBUSxDQUFDeHBCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRzAxQixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcxMUIsQ0FBQyxDQUFDMHlCLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRzF5QixDQUFDLENBQUNvMEIsT0FBTyxFQUFFLENBQUNqekIsQ0FBQyxDQUFDcW9CLFFBQVEsQ0FBQzRLLE9BQU8sQ0FBQyxJQUFJLENBQUNnYSxXQUFXLENBQUNqdEMsQ0FBQyxDQUFDdTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcvMUIsQ0FBQyxDQUFDMHlCLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRzF5QixDQUFDLENBQUNxMEIsT0FBTyxFQUFFLENBQUNsekIsQ0FBQyxDQUFDcW9CLFFBQVEsQ0FBQzZLLE9BQU8sQ0FBQyxJQUFJLENBQUMrWixXQUFXLENBQUNqdEMsQ0FBQyxDQUFDNDBCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLzFCLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMvTSxRQUFRLENBQUMsSUFBSSxDQUFDMDZDLGtCQUFrQixDQUFDcjZDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzA3QyxpQkFBaUIsQ0FBQzE3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c2QyxZQUFZLENBQUNwK0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUM2TixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1c0MsU0FBUyxDQUFDdnNDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2t0QyxRQUFRLENBQUNsdEMsQ0FBQyxDQUFDbTBCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2taLGdCQUFnQixDQUFDcnRDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ290QyxpQkFBaUIsQ0FBQ3B0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ211QyxpQkFBaUIsQ0FBQyxRQUFRLENBQUNwZ0MsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMmxELGlCQUFpQixDQUFDamdDLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMrbEQsa0JBQWtCLENBQUMsUUFBUSxDQUFDcmdDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsSUFBSSxDQUFDNDdDLFFBQVEsQ0FBQ2hnQyxDQUFDLENBQUMsQ0FBQzViLENBQUMsRUFBRSxJQUFJLENBQUNpN0MsaUJBQWlCLENBQUNqN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ2s4QyxrQkFBa0IsQ0FBQyxRQUFRLENBQUN0Z0MsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUMwbEQsUUFBUSxDQUFDaGdDLENBQUMsQ0FBQyxDQUFDMWxCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzZrRCxRQUFRLENBQUM3a0QsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaTdDLGlCQUFpQixDQUFDL2tELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2dsRCxnQkFBZ0IsQ0FBQ2hsRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0bEQsa0JBQWtCLENBQUMsUUFBUSxDQUFDbGdDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDMGxELFFBQVEsQ0FBQ2hnQyxDQUFDLENBQUMsQ0FBQyxPQUFPMWxCLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUNpc0MsTUFBTSxFQUFFLElBQUksQ0FBQ2dhLGlCQUFpQixDQUFDam1ELENBQUMsQ0FBQzhKLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQ2ttRCxRQUFRLENBQUNsbUQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMrakQsVUFBVSxDQUFDLFFBQVEsQ0FBQ2o2QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3FtQixVQUFVLENBQUMyWixRQUFRLENBQUM1N0MsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUM4RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDSixDQUFDLENBQUNELEtBQUssQ0FBQ3YxQixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUN3MUIsQ0FBQyxDQUFDcEUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDaGlCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNuRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUM5OUIsQ0FBQyxDQUFDaWdCLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDckUsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3lZLGVBQWUsQ0FBQyxDQUFDLENBQUN2OUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPdVAsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLEtBQUssQ0FBQ0EsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3pELGFBQWEsQ0FBQyxRQUFRLENBQUM1aUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQzFELGFBQWEsQ0FBQyxHQUFHLENBQUN5RCxDQUFDLENBQUNELEtBQUssQ0FBQyxDQUFDcjFCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRWtQLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNvYSxVQUFVLENBQUNyOEMsQ0FBQyxDQUFDM0csTUFBTSxDQUFDMm9DLENBQUMsQ0FBQzRYLGFBQWEsQ0FBQzVYLENBQUMsQ0FBQzZYLFlBQVksQ0FBQ250QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQzBsQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDdFksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ3FtQixVQUFVLENBQUM2WSxXQUFXLENBQUM5WSxDQUFDLENBQUMsQ0FBQzlyQyxDQUFDLENBQUNtQyxLQUFLLENBQUMycEMsQ0FBQyxDQUFDNzlCLEtBQUssQ0FBQzY5QixDQUFDLENBQUM3OUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDb3VCLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BtQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDeVksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzkrQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDeVksZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM5K0IsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FhLFdBQVcsQ0FBQ3Q4QyxDQUFDLENBQUMzRyxNQUFNLENBQUMyRyxDQUFDLENBQUN3ZixPQUFPLENBQUMsQ0FBQzVELENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxWSxJQUFJLENBQUN0WSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQ3BtQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDdFksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQ3BtQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDcWEsV0FBVyxDQUFDdDhDLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQzJHLENBQUMsQ0FBQ3dmLE9BQU8sQ0FBQyxDQUFDNUQsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FZLElBQUksQ0FBQ3RZLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxWSxJQUFJLENBQUN0WSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFeGYsQ0FBQyxDQUFDMmYsT0FBTyxDQUFDLEVBQUUvRCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDc2EsVUFBVSxDQUFDdjhDLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDOEQsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFeGYsQ0FBQyxDQUFDMmYsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDM2YsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFeGYsQ0FBQyxDQUFDMmYsT0FBTyxDQUFDLEVBQUUvRCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDdWEsVUFBVSxDQUFDeDhDLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDOEQsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFeGYsQ0FBQyxDQUFDMmYsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDM2YsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFeGYsQ0FBQyxDQUFDMmYsT0FBTyxDQUFDLEVBQUUvRCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDcWEsV0FBVyxDQUFDdDhDLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQytvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDamxDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQ3dmLE9BQU8sRUFBRXhmLENBQUMsQ0FBQzJmLE9BQU8sQ0FBQzNmLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQ29CLE1BQU0sRUFBRXhELENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxYSxXQUFXLENBQUN0OEMsQ0FBQyxDQUFDM0csTUFBTSxDQUFDMkcsQ0FBQyxDQUFDd2YsT0FBTyxDQUFDLENBQUM1RCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDdFksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FZLElBQUksQ0FBQ3RZLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUN3ZixPQUFPLEVBQUV4ZixDQUFDLENBQUMyZixPQUFPLENBQUMsRUFBRS9ELENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxYSxXQUFXLENBQUN0OEMsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOEQsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFeGYsQ0FBQyxDQUFDMmYsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDM2YsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFeGYsQ0FBQyxDQUFDMmYsT0FBTyxDQUFDLEVBQUUvRCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDcWEsV0FBVyxDQUFDdDhDLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQytvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDamxDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQ3dmLE9BQU8sRUFBRXhmLENBQUMsQ0FBQzJmLE9BQU8sQ0FBQzNmLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQ29CLE1BQU0sRUFBRXhELENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxYSxXQUFXLENBQUN0OEMsQ0FBQyxDQUFDM0csTUFBTSxDQUFDMkcsQ0FBQyxDQUFDd2YsT0FBTyxDQUFDLENBQUM1RCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDdFksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FZLElBQUksQ0FBQ3RZLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUN3ZixPQUFPLEVBQUV4ZixDQUFDLENBQUMyZixPQUFPLENBQUMsRUFBRS9ELENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxYSxXQUFXLENBQUN0OEMsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzhELENBQUMsQ0FBQzZDLENBQUMsQ0FBQ3dmLE9BQU8sRUFBRXhmLENBQUMsQ0FBQzJmLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDeGlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRzZDLENBQUMsQ0FBQ2lnQixPQUFPLEVBQUVqZ0IsQ0FBQyxDQUFDd2YsT0FBTyxDQUFDNUQsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3NZLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQ3A5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDNkMsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUMsQ0FBQ3RkLENBQUMsQ0FBQ3VkLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMjhCLFdBQVcsQ0FBQyxRQUFRLENBQUNsNkMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQzJaLFFBQVEsQ0FBQzU3QyxDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQyxPQUFPdWlCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxWSxJQUFJLENBQUM1dEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQzBsQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDd2EsY0FBYyxDQUFDN2dDLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxWSxJQUFJLENBQUM1dEMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDdHpCLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLElBQUksRUFBRWMsQ0FBQyxDQUFDZ2dCLFFBQVEsQ0FBQ2hnQixDQUFDLENBQUNpZ0IsT0FBTyxDQUFDamdCLENBQUMsQ0FBQ2dnQixRQUFRLENBQUMsQ0FBQ2hnQixDQUFDLENBQUN3ZixPQUFPLEVBQUV4ZixDQUFDLENBQUMyZixPQUFPLEVBQUUsR0FBRyxDQUFDNFMsQ0FBQyxFQUFFLENBQUNyOEIsQ0FBQyxFQUFFQSxDQUFDLENBQUN0QixPQUFPLENBQUMyOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDNG5CLFFBQVEsQ0FBQyxRQUFRLENBQUNuNkMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMzVyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDMlosUUFBUSxDQUFDNTdDLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQ2s1QixDQUFDLENBQUNwdUIsS0FBSyxDQUFDaE8sR0FBRyxDQUFDLENBQUMsR0FBR284QixDQUFDLENBQUNtcUIsT0FBTyxDQUFDLEdBQUcsQ0FBQ3htRCxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQzBhLFNBQVMsQ0FBQy9nQyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDL25CLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcHVCLEtBQUssQ0FBQ291QixDQUFDLENBQUNwdUIsS0FBSyxDQUFDaE8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5bEIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQzJhLGdCQUFnQixDQUFDcnFCLENBQUMsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxFQUFFLENBQUMwbEIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ2thLGlCQUFpQixDQUFDNXBCLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ2laLGdCQUFnQixDQUFDM29CLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ2daLGlCQUFpQixDQUFDMW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDNnRDLGVBQWUsQ0FBQyxRQUFRLENBQUN2NkMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUNBLENBQUMsQ0FBQzNHLE1BQU0sRUFBRTJHLENBQUMsQ0FBQyxPQUFPLEdBQUdBLENBQUMsQ0FBQ0osUUFBUSxDQUFDcEUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDd0UsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLE9BQU8sQ0FBQzViLENBQUMsQ0FBQ3JKLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2lsQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDQyxxQkFBcUIsQ0FBQ2xpQyxDQUFDLENBQUMsRUFBRTRiLENBQUMsQ0FBQ3FtQixVQUFVLENBQUN3WSxVQUFVLEdBQUd6NkMsQ0FBQyxDQUFDLENBQUMsSUFBSXV5QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ0ksQ0FBQyxDQUFDSyxDQUFDLENBQUM1MEIsQ0FBQyxDQUFDazNCLENBQUMsQ0FBQ3hTLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ3FtQixVQUFVLENBQUMyWixRQUFRLENBQUM1N0MsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUNxbUIsVUFBVSxDQUFDdEUsUUFBUSxFQUFFL2hCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUN0RSxRQUFRLEdBQUdwTCxDQUFDLEVBQUUsQ0FBQzNXLENBQUMsQ0FBQ3FtQixVQUFVLENBQUN0RSxRQUFRLENBQUNvRSxLQUFLLENBQUMzckIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtYyxDQUFDLEVBQUUzVyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDbkUsa0JBQWtCLEVBQUVsaUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3lZLGVBQWUsQ0FBQzkrQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDdEUsUUFBUSxDQUFDeDVCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1SSxDQUFDLENBQUNrUCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDL25CLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQ3QxQixDQUFDLENBQUNBLENBQUMsQ0FBQ3JVLEtBQUssQ0FBQzJILENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lQLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDN2tDLENBQUMsQ0FBQ28xQixDQUFDLENBQUMyRCxRQUFRLENBQUM4TCxDQUFDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQ21xQixPQUFPLENBQUMsSUFBSSxDQUFDOWdDLENBQUMsQ0FBQ3FtQixVQUFVLENBQUN3WSxVQUFVLENBQUN6NkMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ2thLGlCQUFpQixDQUFDNXBCLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ2xFLFNBQVMsRUFBRSxDQUFDLzlCLENBQUMsQ0FBQzdFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQ3lnQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVosSUFBSSxFQUFFLENBQUMxL0IsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FaLElBQUksQ0FBQzEvQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDNGEsUUFBUSxDQUFDNzhDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FaLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRXQ3QyxDQUFDLENBQUM4NEIsWUFBWSxDQUFDLENBQUNzSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNvTyxPQUFPLENBQUMsQ0FBQyxDQUFDblcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBT21xQyxDQUFDLEVBQUUsT0FBTyxHQUFHeG1CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDaXJCLENBQUMsQ0FBQyxDQUFDLENBQUNLLENBQUMsQ0FBQyxDQUFDMVosSUFBSSxDQUFDbk4sQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FaLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2o0QyxHQUFHLENBQUN1WSxDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVosSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxL0IsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FaLElBQUksQ0FBQyxJQUFJLENBQUMvb0IsQ0FBQyxDQUFDd1AsS0FBSyxDQUFDcHlCLEtBQUssQ0FBQyxDQUFDLENBQUM0aUIsQ0FBQyxDQUFDd1AsS0FBSyxDQUFDNXFCLEdBQUcsQ0FBQyxDQUFDK04sUUFBUSxDQUFDLFVBQVUsQ0FBQ2hPLE9BQU8sQ0FBQyxPQUFPLENBQUM3VCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQ3VZLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNnWixpQkFBaUIsQ0FBQzFvQixDQUFDLENBQUMsQ0FBQ2tRLENBQUMsQ0FBQzdtQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDNmEsWUFBWSxDQUFDdnFCLENBQUMsQ0FBQ2tRLENBQUMsQ0FBQ0wsQ0FBQyxDQUFDLENBQUM3UCxDQUFDLENBQUN3UCxLQUFLLENBQUM1cUIsR0FBRyxDQUFDLENBQUMrTixRQUFRLENBQUN0SixDQUFDLENBQUNxbUIsVUFBVSxDQUFDbEUsU0FBUyxFQUFFbmlCLENBQUMsQ0FBQzQvQixPQUFPLENBQUMsUUFBUSxDQUFDcFosQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUNsckIsT0FBTyxDQUFDLE1BQU0sQ0FBQzZSLElBQUksQ0FBQzBaLENBQUMsQ0FBQzFaLElBQUksQ0FBQyxJQUFJLENBQUMxbEIsR0FBRyxDQUFDby9CLENBQUMsQ0FBQ3AvQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2t2QixDQUFDLENBQUM0UCxNQUFNLEVBQUUsQ0FBQ3QwQixDQUFDLENBQUMrTixDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDL25CLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQ3dTLENBQUMsQ0FBQ25wQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDL25CLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDd1AsS0FBSyxDQUFDNXFCLEdBQUcsQ0FBQyxTQUFTLENBQUNqaEIsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUNxbUIsVUFBVSxDQUFDbkUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUNsaUIsQ0FBQyxDQUFDMHBCLE9BQU8sRUFBRTFwQixDQUFDLENBQUMwcEIsT0FBTyxDQUFDRCxNQUFNLENBQUN4M0IsQ0FBQyxDQUFDLENBQUMwa0IsQ0FBQyxDQUFDd1AsS0FBSyxDQUFDMXBCLElBQUksQ0FBQ3hLLENBQUMsQ0FBQytOLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxWSxJQUFJLENBQUMvbkIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDd1MsQ0FBQyxDQUFDLENBQUN4UyxDQUFDLENBQUN3UCxLQUFLLENBQUNsMEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDQSxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbnBCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUM4YSxpQkFBaUIsQ0FBQ3hxQixDQUFDLENBQUMsRUFBRUEsQ0FBQyxDQUFDcHVCLEtBQUssQ0FBQ21hLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzFDLENBQUMsQ0FBQ3FtQixVQUFVLENBQUN0RSxRQUFRLENBQUNwTCxDQUFDLENBQUM7QUFDbjEvQixDQUFDLENBQUMsQ0FBQzBvQixpQkFBaUIsQ0FBQyxRQUFRLENBQUNqN0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbzVDLE9BQU8sQ0FBQyxDQUFDLENBQUNqNUMsQ0FBQyxDQUFDSCxDQUFDLENBQUNBLENBQUMsQ0FBQytoQyxLQUFLLENBQUNweUIsS0FBSyxDQUFDLENBQUMsQ0FBQ3lULE1BQU0sQ0FBQyxJQUFJLENBQUM0NUIsYUFBYSxDQUFDaDlDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaTlDLGVBQWUsQ0FBQ2o5QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUMycUIsa0JBQWtCLENBQUNsOUMsQ0FBQyxDQUFDLENBQUMwTSxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcDFCLENBQUMsQ0FBQyxFQUFFLENBQUNpbEMsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQytoQyxLQUFLLENBQUNqK0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMwNkIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDNEQsQ0FBQyxDQUFDNXFDLE1BQU0sQ0FBQyxDQUFDLEVBQUV3cUMsQ0FBQyxDQUFDM3BDLEtBQUssQ0FBQytwQyxDQUFDLENBQUMxcUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzSSxDQUFDLENBQUMraEMsS0FBSyxDQUFDeFIsV0FBVyxDQUFDLG1FQUFtRSxDQUFDLENBQUN0TCxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUN2WSxDQUFDLENBQUMsQ0FBQyxFQUFFMU0sQ0FBQyxDQUFDK2hDLEtBQUssQ0FBQzdSLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQ3hqQixDQUFDLENBQUMsQ0FBQ3lLLEdBQUcsQ0FBQyxPQUFPLENBQUNoYSxDQUFDLENBQUN1UCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMxTSxDQUFDLENBQUMraEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHeFAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQytoQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUN1WSxJQUFJLENBQUN0NkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDQSxDQUFDLEdBQUc0YixDQUFDLENBQUNxbUIsVUFBVSxDQUFDdEUsUUFBUSxFQUFFL2hCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNuRSxrQkFBa0IsRUFBRWxpQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDOGEsaUJBQWlCLENBQUMvOEMsQ0FBQyxDQUFDLEVBQUVBLENBQUMsQ0FBQ21FLEtBQUssQ0FBQ21hLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQ3RlLENBQUMsQ0FBQ205QyxTQUFTLEVBQUUsQ0FBQ2puRCxDQUFDLENBQUM4SixDQUFDLENBQUNtOUMsU0FBUyxDQUFDM3FDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdGMsQ0FBQyxHQUFHOEosQ0FBQyxDQUFDbTlDLFNBQVMsRUFBRW45QyxDQUFDLENBQUNtOUMsU0FBUyxFQUFFbjlDLENBQUMsQ0FBQytoQyxLQUFLLENBQUNqK0IsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUMyZixXQUFXLENBQUN6akIsQ0FBQyxDQUFDbTlDLFNBQVMsQ0FBQyxDQUFDam5ELENBQUMsQ0FBQzhKLENBQUMsQ0FBQ205QyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDSixpQkFBaUIsQ0FBQyxRQUFRLENBQUNuaEMsQ0FBQyxDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDelgsS0FBSyxFQUFFeVgsQ0FBQyxDQUFDelgsS0FBSyxDQUFDcUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUNvUCxDQUFDLENBQUN6WCxLQUFLLENBQUNxSSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQ29QLENBQUMsQ0FBQ3pYLEtBQUssQ0FBQ3FJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDc3dDLFlBQVksQ0FBQyxRQUFRLENBQUM5OEMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDK2hDLEtBQUssQ0FBQ3lELFVBQVUsQ0FBQyxDQUFDLENBQUN4RCxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDK2hDLEtBQUssQ0FBQzBELFdBQVcsQ0FBQyxDQUFDLENBQUN0b0MsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDbUUsS0FBSyxDQUFDbkUsQ0FBQyxDQUFDbUUsS0FBSyxDQUFDcWhDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcEQsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQ21FLEtBQUssQ0FBQ25FLENBQUMsQ0FBQ21FLEtBQUssQ0FBQ3NoQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2hELENBQUMsQ0FBQ3p1QyxRQUFRLENBQUNpUCxlQUFlLENBQUM0aUMsV0FBVyxDQUFDLENBQUN0VCxDQUFDLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDNW5CLFFBQVEsQ0FBQyxDQUFDbTJCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RjLENBQUMsQ0FBQzdaLFFBQVEsQ0FBQ2lQLGVBQWUsQ0FBQ3M0QyxZQUFZLENBQUMsQ0FBQ2hwQixDQUFDLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDNW5CLFFBQVEsQ0FBQyxDQUFDazJCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPaDBCLENBQUMsQ0FBQzZ5QixJQUFJLEVBQUUsSUFBSSxDQUFDdXhCLElBQUksQ0FBQ3Q2QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMwTSxDQUFDLENBQUN2UCxDQUFDLENBQUMsQ0FBQyxDQUFDakgsQ0FBQyxDQUFDNnlCLElBQUksRUFBRXdKLENBQUMsRUFBRXI4QixDQUFDLENBQUM2eUIsSUFBSSxHQUFHL29CLENBQUMsQ0FBQ21FLEtBQUssQ0FBQ2czQixNQUFNLENBQUMsQ0FBQyxDQUFDcFMsSUFBSSxDQUFDbk4sQ0FBQyxDQUFDNW5CLFFBQVEsQ0FBQyxDQUFDbTJCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDajBCLENBQUMsQ0FBQ21OLEdBQUcsRUFBRWt2QixDQUFDLEVBQUVyOEIsQ0FBQyxDQUFDbU4sR0FBRyxHQUFHckQsQ0FBQyxDQUFDbUUsS0FBSyxDQUFDZzNCLE1BQU0sQ0FBQyxDQUFDLENBQUM5M0IsR0FBRyxDQUFDKytCLENBQUMsQ0FBQ3htQixDQUFDLENBQUM1bkIsUUFBUSxDQUFDLENBQUNrMkIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNoMEIsQ0FBQyxDQUFDNnlCLElBQUksRUFBRW52QixJQUFJLENBQUM4dkMsR0FBRyxDQUFDeHpDLENBQUMsQ0FBQzZ5QixJQUFJLENBQUM3eUIsQ0FBQyxDQUFDNnlCLElBQUksQ0FBQ3JjLENBQUMsQ0FBQysxQixDQUFDLEVBQUVBLENBQUMsQ0FBQy8xQixDQUFDLENBQUM5UyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDeHZDLENBQUMsQ0FBQzZ5QixJQUFJLENBQUNyYyxDQUFDLENBQUMrMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2c0MsQ0FBQyxDQUFDbU4sR0FBRyxFQUFFekosSUFBSSxDQUFDOHZDLEdBQUcsQ0FBQ3h6QyxDQUFDLENBQUNtTixHQUFHLENBQUNuTixDQUFDLENBQUNtTixHQUFHLENBQUMyK0IsQ0FBQyxDQUFDbjBCLENBQUMsRUFBRUEsQ0FBQyxDQUFDbTBCLENBQUMsQ0FBQ3BvQyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDMUQsQ0FBQyxDQUFDSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUMsQ0FBQzJtRCxRQUFRLENBQUMsUUFBUSxDQUFDNzhDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUNxcEIsUUFBUSxDQUFDNTdDLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLElBQUksQ0FBQzR0QyxJQUFJLENBQUMvbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDdnlCLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBR0EsQ0FBQyxDQUFDdEssSUFBSSxFQUFFLENBQUMsR0FBR3NLLENBQUMsQ0FBQ3pLLFFBQVEsRUFBRXFtQixDQUFDLENBQUN6VyxJQUFJLENBQUM4RCxPQUFPLENBQUM2aEIsTUFBTSxDQUFDOXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDQSxDQUFDLENBQUMwTSxDQUFDLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBT3hXLENBQUMsQ0FBQzBsQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ203QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNqbEMsQ0FBQyxDQUFDNnlCLElBQUksQ0FBQzd5QixDQUFDLENBQUNtTixHQUFHLENBQUMsQ0FBQyxDQUFDcTNDLGVBQWUsQ0FBQyxRQUFRLENBQUMxNkMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsSUFBSSxDQUFDd2dDLFFBQVEsQ0FBQyxDQUFDeGdDLENBQUMsRUFBRTZDLENBQUMsRUFBRTdDLENBQUMsR0FBR3llLENBQUMsQ0FBQzFHLElBQUksQ0FBQ2xWLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUM4OUIsa0JBQWtCLEVBQUUsQ0FBQzVuQyxDQUFDLENBQUMsSUFBSSxDQUFDb2tELElBQUksQ0FBQ245QyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUNvMUIsQ0FBQyxDQUFDLElBQUksQ0FBQytuQixJQUFJLENBQUNuOUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNrUCxDQUFDLENBQUNxbUIsVUFBVSxDQUFDbWIsV0FBVyxDQUFDamdELENBQUMsQ0FBQyxDQUFDLENBQUN5ZSxDQUFDLENBQUMwcEIsT0FBTyxFQUFFLENBQUMxcEIsQ0FBQyxDQUFDMHBCLE9BQU8sQ0FBQ0QsTUFBTSxDQUFDbnZDLENBQUMsQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQzBwQixPQUFPLENBQUNwdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2lILENBQUMsQ0FBQzRrQyxLQUFLLENBQUN4cEIsSUFBSSxDQUFDcmlCLENBQUMsQ0FBQzBsQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDcVksSUFBSSxDQUFDbjlDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQ28xQixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUN2UCxDQUFDLENBQUM0a0MsS0FBSyxDQUFDLFdBQVcsR0FBRzdyQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBR0EsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUM3bEIsQ0FBQyxDQUFDLENBQUN4VyxDQUFDLEVBQUV3VyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ294QixrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tFLENBQUMsQ0FBQyxJQUFJLENBQUNzWSxJQUFJLENBQUNuOUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDNmtDLENBQUMsRUFBRUEsQ0FBQyxDQUFDM3BDLEtBQUssQ0FBQzhFLENBQUMsQ0FBQ2dILEtBQUssQ0FBQ2hILENBQUMsQ0FBQ2dILEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2hILENBQUMsQ0FBQ2dILEtBQUssQ0FBQ2hILENBQUMsQ0FBQ2dILEtBQUssQ0FBQ2hPLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDZ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzOUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMxYyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUNzZCxZQUFZLENBQUNsa0MsR0FBRyxDQUFDLENBQUMrTixRQUFRLENBQUMsVUFBVSxDQUFDNkQsSUFBSSxDQUFDLEdBQUcsQ0FBQzFsQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3VZLENBQUMsQ0FBQzQvQixPQUFPLEVBQUUsQ0FBQzUvQixDQUFDLENBQUN5aEMsU0FBUyxDQUFDLENBQUMsQ0FBQ3poQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUN3SCxNQUFNLENBQUMsSUFBSSxDQUFDMmUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNxZixXQUFXLENBQUMsUUFBUSxDQUFDeGhDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNtbUIsS0FBSyxDQUFDeFIsV0FBVyxDQUFDLElBQUksQ0FBQzZOLFlBQVksQ0FBQyxDQUFDNWlCLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM4aEMsbUJBQW1CLENBQUMsUUFBUSxDQUFDdDlDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzRiLENBQUMsQ0FBQ3FtQixVQUFVLENBQUN0RSxRQUFRLENBQUMsQ0FBQyxJQUFJem5DLENBQUMsQ0FBQzBsQixDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQ2s1QixDQUFDLENBQUMzVyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDMlosUUFBUSxDQUFDMWxELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBLLEVBQUUsR0FBR2diLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNqRSxVQUFVLEVBQUUsQ0FBQyxHQUFHOW5DLENBQUMsQ0FBQ2tZLE9BQU8sQ0FBQyxHQUFHLENBQUN3TixDQUFDLENBQUNxbUIsVUFBVSxDQUFDakUsVUFBVSxDQUFDLENBQUN4bUMsTUFBTSxFQUFFLENBQUN0QixDQUFDLENBQUMwNkIsUUFBUSxDQUFDaFYsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ2tYLGVBQWUsQ0FBQyxFQUFFLENBQUNqakQsQ0FBQyxDQUFDNFgsT0FBTyxDQUFDLEdBQUcsQ0FBQzhOLENBQUMsQ0FBQ3FtQixVQUFVLENBQUM5RCxhQUFhLENBQUMsQ0FBQzNtQyxNQUFNLEVBQUVva0IsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ25FLGtCQUFrQixFQUFFLENBQUMsQ0FBQ2xpQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDbEUsU0FBUyxFQUFFLENBQUNuaUIsQ0FBQyxDQUFDNC9CLE9BQU8sQ0FBQyxFQUFFdGxELENBQUMsQ0FBQzA2QixRQUFRLENBQUNoVixDQUFDLENBQUNxbUIsVUFBVSxDQUFDa1gsZUFBZSxDQUFDLEVBQUV2OUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3RFLFFBQVEsR0FBR3BMLENBQUMsQ0FBQyxFQUFFM1csQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3lZLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNEIsV0FBVyxDQUFDLFFBQVEsQ0FBQ3Q4QyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUNrUCxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUMsSUFBSSxDQUFDNFosUUFBUSxDQUFDbHZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3cxQixxQkFBcUIsQ0FBQ3gxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzZ3QyxlQUFlLENBQUN2YixDQUFDLENBQUM5ckMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHcThCLENBQUMsQ0FBQyxJQUFJLENBQUMrbkIsSUFBSSxDQUFDdFksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwb0IsaUJBQWlCLENBQUNqWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3YSxVQUFVLENBQUMsUUFBUSxDQUFDeDhDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMwTSxDQUFDLENBQUMsSUFBSSxDQUFDa3ZDLFFBQVEsQ0FBQ3JwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrbkIsSUFBSSxDQUFDNXRDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRUEsQ0FBQyxDQUFDOHdDLFVBQVUsQ0FBQyxDQUFDOXdDLENBQUMsQ0FBQ2l0QyxXQUFXLENBQUNqdEMsQ0FBQyxDQUFDOHdDLFVBQVUsQ0FBQzl3QyxDQUFDLENBQUNvdEMsU0FBUyxDQUFDcHRDLENBQUMsQ0FBQ2t0QyxhQUFhLENBQUNsdEMsQ0FBQyxDQUFDK3dDLFlBQVksQ0FBQy93QyxDQUFDLENBQUNxdEMsUUFBUSxDQUFDcnRDLENBQUMsQ0FBQ210QyxZQUFZLENBQUNudEMsQ0FBQyxDQUFDZ3hDLFdBQVcsQ0FBQyxDQUFDLENBQUN4bkQsQ0FBQyxDQUFDLElBQUl1RyxJQUFJLENBQUNpUSxDQUFDLENBQUNpdEMsV0FBVyxDQUFDempELENBQUMsQ0FBQ3luRCxPQUFPLENBQUMsQ0FBQyxDQUFDanhDLENBQUMsQ0FBQ290QyxTQUFTLENBQUNwdEMsQ0FBQyxDQUFDa3RDLGFBQWEsQ0FBQzFqRCxDQUFDLENBQUMwbkQsUUFBUSxDQUFDLENBQUMsQ0FBQ2x4QyxDQUFDLENBQUNxdEMsUUFBUSxDQUFDcnRDLENBQUMsQ0FBQ210QyxZQUFZLENBQUMzakQsQ0FBQyxDQUFDMm5ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLGFBQWEsQ0FBQ3B4QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0dkMsV0FBVyxDQUFDL3BCLENBQUMsQ0FBQyxDQUFDLENBQUN3ckIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLzlDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQyxJQUFJLENBQUM0WixRQUFRLENBQUNsdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsR0FBR3pQLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUd6UCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUN6QyxRQUFRLENBQUM1NUIsQ0FBQyxDQUFDOEMsT0FBTyxDQUFDOUMsQ0FBQyxDQUFDdVMsYUFBYSxDQUFDLENBQUN0TixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDMmlELGFBQWEsQ0FBQzliLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3NhLFdBQVcsQ0FBQzV2QyxDQUFDLENBQUMsQ0FBQyxDQUFDMnZDLFVBQVUsQ0FBQyxRQUFRLENBQUNyOEMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxJQUFJczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUN5ZSxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDa2tCLFFBQVEsQ0FBQyxJQUFJLENBQUMwTixrQkFBa0IsQ0FBQyxFQUFFLElBQUksQ0FBQzRELHFCQUFxQixDQUFDL2tDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM2a0MsQ0FBQyxDQUFDLElBQUksQ0FBQzRaLFFBQVEsQ0FBQ3orQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzZrQyxDQUFDLENBQUMyWCxXQUFXLENBQUMzWCxDQUFDLENBQUN3YixVQUFVLENBQUM1aEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDZ1csSUFBSSxDQUFDLENBQUMsQ0FBQ3NmLENBQUMsQ0FBQzRYLGFBQWEsQ0FBQzVYLENBQUMsQ0FBQ3liLFlBQVksQ0FBQ3ZuRCxDQUFDLENBQUM4ckMsQ0FBQyxDQUFDNlgsWUFBWSxDQUFDN1gsQ0FBQyxDQUFDMGIsV0FBVyxDQUFDbnJCLENBQUMsQ0FBQyxJQUFJLENBQUN5ckIsV0FBVyxDQUFDaCtDLENBQUMsQ0FBQyxJQUFJLENBQUM4NkMsV0FBVyxDQUFDOVksQ0FBQyxDQUFDQSxDQUFDLENBQUN3YixVQUFVLENBQUN4YixDQUFDLENBQUN5YixZQUFZLENBQUN6YixDQUFDLENBQUMwYixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25CLFVBQVUsQ0FBQyxRQUFRLENBQUN2OEMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnK0MsV0FBVyxDQUFDOW5ELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOG5ELFdBQVcsQ0FBQyxRQUFRLENBQUNoK0MsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDLElBQUksQ0FBQzRaLFFBQVEsQ0FBQ2x2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQyxJQUFJLEVBQUVBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQzRrRCxXQUFXLENBQUM5WSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDNzlCLEtBQUssRUFBRTY5QixDQUFDLENBQUM3OUIsS0FBSyxDQUFDaE8sR0FBRyxDQUFDRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnbEQsZ0JBQWdCLENBQUNsWixDQUFDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxJQUFJLENBQUMrbkIsSUFBSSxDQUFDdFksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDQSxDQUFDLENBQUNsNkIsS0FBSyxDQUFDMnBDLENBQUMsQ0FBQzc5QixLQUFLLENBQUM2OUIsQ0FBQyxDQUFDNzlCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2pPLENBQUMsQ0FBQzhyQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUM3OUIsS0FBSyxFQUFFNjlCLENBQUMsQ0FBQzc5QixLQUFLLENBQUNtYSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMwakIsQ0FBQyxDQUFDRyxNQUFNLENBQUMsSUFBSSxDQUFDOFksaUJBQWlCLENBQUNqWixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBZLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRCxVQUFVLENBQUN6WSxDQUFDLENBQUM3OUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPNjlCLENBQUMsQ0FBQzc5QixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU2OUIsQ0FBQyxDQUFDNzlCLEtBQUssQ0FBQ21hLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNtOEIsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUNTLGdCQUFnQixDQUFDLFFBQVEsQ0FBQ2w3QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3NZLElBQUksQ0FBQ3Q2QyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUNnaUMsQ0FBQyxFQUFFLENBQUM5ckMsQ0FBQyxDQUFDLElBQUksQ0FBQ29rRCxJQUFJLENBQUN0NkMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQ3M2QyxJQUFJLENBQUN0NkMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxJQUFJLENBQUM2cEIsUUFBUSxDQUFDcDhDLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLElBQUksQ0FBQ3V4QyxVQUFVLENBQUMvbkQsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUNxcUIsZ0JBQWdCLENBQUM1OEMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ29tQixDQUFDLENBQUMsQ0FBQzdyQyxHQUFHLENBQUN1VyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3eEMsVUFBVSxDQUFDLFFBQVEsQ0FBQ3RpQyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDaS9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDNzZDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzRnQyxXQUFXLENBQUMsUUFBUSxDQUFDaGxCLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM5SixDQUFDLENBQUMsSUFBSXVHLElBQUksQ0FBQ21mLENBQUMsQ0FBQ3VpQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT2pvRCxDQUFDLENBQUMwa0QsT0FBTyxDQUFDMWtELENBQUMsQ0FBQ3luRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDem5ELENBQUMsQ0FBQzJrRCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM3NkMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDaW9ELE9BQU8sQ0FBQyxDQUFDLENBQUNqb0QsQ0FBQyxDQUFDeWtELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3prRCxDQUFDLENBQUMwa0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDaGhELElBQUksQ0FBQ3F1QyxLQUFLLENBQUNydUMsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQyxDQUFDdGxCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeW1ELFNBQVMsQ0FBQyxRQUFRLENBQUMzOEMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUV2eUIsQ0FBQyxFQUFFLElBQUksRUFBRTlKLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPQSxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUNBLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHQSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSXdXLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDLENBQUMsQ0FBQzUwQixDQUFDLENBQUMsQ0FBQzBrQixDQUFDLENBQUNBLENBQUMsQ0FBQ3NPLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUNwQixTQUFTLENBQUNvQixlQUFlLENBQUNrRSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU9sM0IsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxJQUFJcFIsSUFBSSxDQUFDLENBQUNvaEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMvdEIsUUFBUSxDQUFDamlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzAzQixDQUFDLENBQUMsQ0FBQ2hULENBQUMsQ0FBQ0EsQ0FBQyxDQUFDME0sYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQ1EsU0FBUyxDQUFDUixhQUFhLENBQUMwRyxDQUFDLENBQUMsQ0FBQ3BULENBQUMsQ0FBQ0EsQ0FBQyxDQUFDeU0sUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQ1MsU0FBUyxDQUFDVCxRQUFRLENBQUMzVSxDQUFDLENBQUMsQ0FBQ2tJLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDd00sZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQ1UsU0FBUyxDQUFDVixlQUFlLENBQUNxSCxDQUFDLENBQUMsQ0FBQzdULENBQUMsQ0FBQ0EsQ0FBQyxDQUFDdU0sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQ1csU0FBUyxDQUFDWCxVQUFVLENBQUN1SCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbVIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbXBDLENBQUMsQ0FBQyxRQUFRLENBQUMzcUIsQ0FBQyxDQUFDLENBQUMsSUFBSTFsQixDQUFDLENBQUM4SixDQUFDLENBQUN4SSxNQUFNLENBQUNrVixDQUFDLENBQUMsQ0FBQyxFQUFFMU0sQ0FBQyxDQUFDcWpDLE1BQU0sQ0FBQzMyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdrUCxDQUFDLENBQUMsT0FBTzFsQixDQUFDLEVBQUV3VyxDQUFDLEVBQUUsQ0FBQ3hXLENBQUMsQ0FBQyxDQUFDakMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzJuQixDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDdW1DLENBQUMsQ0FBQzNxQixDQUFDLENBQUMsQ0FBQzJXLENBQUMsQ0FBQyxHQUFHLEdBQUczVyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUdBLENBQUMsRUFBRTViLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHNGIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsUCxDQUFDLENBQUMsR0FBRyxHQUFHa1AsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQ2xrQyxNQUFNLENBQUMsT0FBTyxDQUFDNE8sQ0FBQyxDQUFDLEdBQUcsQ0FBQzZsQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUNwMUIsQ0FBQyxDQUFDakgsQ0FBQyxDQUFDMDRDLFNBQVMsQ0FBQ25NLENBQUMsQ0FBQyxDQUFDcGlDLEtBQUssQ0FBQzJoQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsS0FBSyw2QkFBNkIsQ0FBQ3NsQyxDQUFDLENBQUMsT0FBT0EsQ0FBQyxFQUFFdGxDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNGLE1BQU0sQ0FBQ3M0QixRQUFRLENBQUMzeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNzcEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3ptQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLElBQUlzMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ3llLENBQUMsQ0FBQ3pqQixHQUFHLENBQUNvdUMsQ0FBQyxDQUFDdm1DLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxRQUFRLENBQUMzVyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMvaUIsSUFBSSxDQUFDLFFBQVEsQ0FBQytpQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BrQixNQUFNLENBQUN3SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4SSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDb2tCLENBQUMsQ0FBQzNqQixJQUFJLENBQUNrRixDQUFDLENBQUMsUUFBUSxDQUFDeWUsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSXV5QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU85SixDQUFDLENBQUNrb0QsTUFBTSxDQUFDM2IsQ0FBQyxDQUFDbFEsQ0FBQyxDQUFDLzZCLE1BQU0sQ0FBQyxDQUFDZ0UsV0FBVyxDQUFDLENBQUMsR0FBRysyQixDQUFDLENBQUMvMkIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDd21DLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5aUMsQ0FBQyxFQUFFbFEsQ0FBQyxDQUFDLzZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR3dxQyxDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLDJCQUEyQixDQUFDUyxDQUFDLENBQUMsQ0FBQ2tFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3p3QyxDQUFDLENBQUNtdEMsTUFBTSxDQUFDWixDQUFDLENBQUMsR0FBR3ppQyxDQUFDLENBQUNxakMsTUFBTSxDQUFDMzJCLENBQUMsQ0FBQyxDQUFDLEtBQUssaUNBQWlDLENBQUMrMUIsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQy8xQixDQUFDLENBQUMsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDeEksTUFBTSxDQUFDa1YsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUN0UCxDQUFDLENBQUMsR0FBRyxHQUFHNEMsQ0FBQyxDQUFDcWpDLE1BQU0sQ0FBQzMyQixDQUFDLENBQUMsRUFBRTY1QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUNJLENBQUMsQ0FBQyxDQUFDLENBQUN2cEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDNEMsQ0FBQyxDQUFDcWpDLE1BQU0sQ0FBQzMyQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDN04sQ0FBQyxDQUFDNUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQ3d5QyxDQUFDLENBQUMsR0FBRyxDQUFDbEIsQ0FBQyxDQUFDSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMzMUIsQ0FBQyxDQUFDL2IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQ2tNLENBQUMsQ0FBQ2xNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUNrTSxDQUFDLENBQUNzbUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3BjLENBQUMsQ0FBQytiLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQ0MsQ0FBQyxDQUFDcHlDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUNtdUMsQ0FBQyxDQUFDLElBQUkzbEMsSUFBSSxDQUFDeEksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNveUMsQ0FBQyxDQUFDakUsQ0FBQyxDQUFDeWIsV0FBVyxDQUFDLENBQUMsQ0FBQzE5QyxDQUFDLENBQUNpaUMsQ0FBQyxDQUFDd2IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMvK0MsQ0FBQyxDQUFDdWpDLENBQUMsQ0FBQ3ViLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDdmIsQ0FBQyxDQUFDLElBQUkzbEMsSUFBSSxDQUFDLENBQUN4SSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDb3FELFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDaFksQ0FBQyxDQUFDakUsQ0FBQyxDQUFDeWIsV0FBVyxDQUFDLENBQUMsQ0FBQzE5QyxDQUFDLENBQUNpaUMsQ0FBQyxDQUFDd2IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMvK0MsQ0FBQyxDQUFDdWpDLENBQUMsQ0FBQ3ViLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDcFgsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDSSxDQUFDLENBQUMsQ0FBQyxDQUFDdnBDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDdXBDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDendDLENBQUMsQ0FBQ3NCLE1BQU0sQ0FBQ2lyQyxDQUFDLEVBQUUsQ0FBQ3RsQyxDQUFDLENBQUNqSCxDQUFDLENBQUNrb0QsTUFBTSxDQUFDM2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUN6aEMsSUFBSSxDQUFDN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLDJDQUEyQyxDQUFDQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHa3BDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsSUFBSTVwQyxJQUFJLENBQUMsQ0FBQ29oRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3hYLENBQUMsRUFBRSxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxJQUFJNXBDLElBQUksQ0FBQyxDQUFDb2hELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJcGhELElBQUksQ0FBQyxDQUFDb2hELFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM5WSxDQUFDLEVBQUVzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ3IyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDN1AsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RCLENBQUMsQ0FBQ21SLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNneUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3NjLGVBQWUsQ0FBQ2pZLENBQUMsQ0FBQ2xtQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM2aEMsQ0FBQyxFQUFFbmpDLENBQUMsQ0FBQyxLQUFLLENBQUNzQixDQUFDLEVBQUUsQ0FBQ3RCLENBQUMsRUFBRW1qQyxDQUFDLENBQUMsRUFBRSxDQUFDSSxDQUFDLENBQUMsSUFBSSxDQUFDbWMscUJBQXFCLENBQUMsSUFBSTloRCxJQUFJLENBQUM0cEMsQ0FBQyxDQUFDbG1DLENBQUMsQ0FBQyxDQUFDLENBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDdWpDLENBQUMsQ0FBQ3liLFdBQVcsQ0FBQyxDQUFDLEdBQUd4WCxDQUFDLEVBQUVqRSxDQUFDLENBQUN3YixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR3o5QyxDQUFDLEVBQUVpaUMsQ0FBQyxDQUFDdWIsT0FBTyxDQUFDLENBQUMsR0FBRzkrQyxDQUFDLENBQUMsS0FBSyxjQUFjLENBQUMsT0FBT3VqQyxDQUFDLENBQUMsQ0FBQ29jLElBQUksQ0FBQyxVQUFVLENBQUNDLE1BQU0sQ0FBQyxZQUFZLENBQUNDLFFBQVEsQ0FBQyxVQUFVLENBQUNDLE9BQU8sQ0FBQyxVQUFVLENBQUNDLE9BQU8sQ0FBQyxZQUFZLENBQUNDLFFBQVEsQ0FBQyxVQUFVLENBQUNDLFFBQVEsQ0FBQyxXQUFXLENBQUNDLFFBQVEsQ0FBQyxXQUFXLENBQUNDLEdBQUcsQ0FBQyxVQUFVLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUNDLFNBQVMsQ0FBQyxHQUFHLENBQUNDLEdBQUcsQ0FBQyxVQUFVLENBQUNkLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUN6a0QsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQ3J1QyxJQUFJLENBQUNxdUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDcnVDLElBQUksQ0FBQ3F1QyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ2dXLFVBQVUsQ0FBQyxRQUFRLENBQUNyaUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM4SixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSXV5QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUN4VyxDQUFDLENBQUNBLENBQUMsQ0FBQytvQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDUSxTQUFTLENBQUNSLGFBQWEsQ0FBQytDLENBQUMsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDOG9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUNTLFNBQVMsQ0FBQ1QsUUFBUSxDQUFDN2hDLENBQUMsQ0FBQyxDQUFDakgsQ0FBQyxDQUFDQSxDQUFDLENBQUM2b0MsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQ1UsU0FBUyxDQUFDVixlQUFlLENBQUNxRCxDQUFDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUNBLENBQUMsQ0FBQzRvQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDVyxTQUFTLENBQUNYLFVBQVUsQ0FBQzJELENBQUMsQ0FBQyxRQUFRLENBQUN6aUMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUNwa0IsTUFBTSxDQUFDKzZCLENBQUMsQ0FBQyxDQUFDLEVBQUUzVyxDQUFDLENBQUN5bkIsTUFBTSxDQUFDOVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHdnlCLENBQUMsQ0FBQyxPQUFPOUosQ0FBQyxFQUFFcThCLENBQUMsRUFBRSxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDMlgsQ0FBQyxDQUFDLFFBQVEsQ0FBQytOLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3Z5QixDQUFDLENBQUMsRUFBRSxDQUFDeWlDLENBQUMsQ0FBQzdtQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzFsQixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLzZCLE1BQU0sQ0FBQyxDQUFDKzZCLENBQUMsQ0FBQyxHQUFHLENBQUNBLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUMsQ0FBQ3dTLENBQUMsQ0FBQyxRQUFRLENBQUNucEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLE9BQU9rUSxDQUFDLENBQUM3bUIsQ0FBQyxDQUFDLENBQUMyVyxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQyxDQUFDdWxDLENBQUMsQ0FBQyxFQUFFLENBQUNJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMzbEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDcGtCLE1BQU0sQ0FBQys2QixDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQ29ULENBQUMsQ0FBQyxHQUFHLEdBQUcvcEIsQ0FBQyxDQUFDeW5CLE1BQU0sQ0FBQzlRLENBQUMsQ0FBQyxFQUFFa1EsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOEMsQ0FBQyxFQUFFM3BCLENBQUMsQ0FBQ3luQixNQUFNLENBQUM5USxDQUFDLENBQUMsQ0FBQ29ULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQy9wQixDQUFDLENBQUN5bkIsTUFBTSxDQUFDOVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQ2dULENBQUMsRUFBRTEzQixDQUFDLENBQUMsR0FBRyxDQUFDN04sQ0FBQyxDQUFDMjlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDcFksQ0FBQyxFQUFFUixDQUFDLENBQUMsR0FBRyxDQUFDL2tDLENBQUMsQ0FBQzY2QyxNQUFNLENBQUMsQ0FBQyxDQUFDbnVDLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUN1RCxDQUFDLEVBQUUxM0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQ2pVLElBQUksQ0FBQzByQixLQUFLLENBQUMsQ0FBQyxJQUFJN29CLElBQUksQ0FBQ3VELENBQUMsQ0FBQzY5QyxXQUFXLENBQUMsQ0FBQyxDQUFDNzlDLENBQUMsQ0FBQzQ5QyxRQUFRLENBQUMsQ0FBQyxDQUFDNTlDLENBQUMsQ0FBQzI5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNRLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTFoRCxJQUFJLENBQUN1RCxDQUFDLENBQUM2OUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUM1WSxDQUFDLEVBQUUxM0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQzdOLENBQUMsQ0FBQzQ5QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUNyWSxDQUFDLEVBQUVSLENBQUMsQ0FBQyxHQUFHLENBQUMva0MsQ0FBQyxDQUFDNDlDLFFBQVEsQ0FBQyxDQUFDLENBQUN6Z0QsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQ21ELENBQUMsRUFBRTlDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQ3ppQyxDQUFDLENBQUM2OUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzc5QyxDQUFDLENBQUM2OUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDNzlDLENBQUMsQ0FBQzY5QyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUN0WSxDQUFDLEVBQUV2bEMsQ0FBQyxDQUFDbStDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDNVksQ0FBQyxFQUFFLEdBQUcsQ0FBQ3ZsQyxDQUFDLENBQUNtK0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNFLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUM1YixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM4QyxDQUFDLEVBQUUsR0FBRyxDQUFDSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQ0osQ0FBQyxFQUFFM3BCLENBQUMsQ0FBQ3luQixNQUFNLENBQUM5USxDQUFDLENBQUMsQ0FBQyxPQUFPZ1QsQ0FBQyxDQUFDLENBQUNrWCxjQUFjLENBQUMsUUFBUSxDQUFDN2dDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM5SixDQUFDLENBQUMsRUFBRSxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsUUFBUSxDQUFDeFcsQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMzVyxDQUFDLENBQUNwa0IsTUFBTSxDQUFDd0ksQ0FBQyxDQUFDLENBQUMsRUFBRTRiLENBQUMsQ0FBQ3luQixNQUFNLENBQUNyakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHOUosQ0FBQyxDQUFDLE9BQU9xOEIsQ0FBQyxFQUFFdnlCLENBQUMsRUFBRSxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDcGtCLE1BQU0sQ0FBQ3dJLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDdXlCLENBQUMsQ0FBQyxHQUFHLEdBQUczVyxDQUFDLENBQUN5bkIsTUFBTSxDQUFDcmpDLENBQUMsQ0FBQyxFQUFFME0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDeFcsQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQ3luQixNQUFNLENBQUNyakMsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDM1csQ0FBQyxDQUFDeW5CLE1BQU0sQ0FBQ3JqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDOUosQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUN3VyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUN4VyxDQUFDLEVBQUUsR0FBRyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDcjhCLENBQUMsRUFBRTBsQixDQUFDLENBQUN5bkIsTUFBTSxDQUFDcmpDLENBQUMsQ0FBQyxDQUFDLE9BQU85SixDQUFDLENBQUMsQ0FBQ29rRCxJQUFJLENBQUMsUUFBUSxDQUFDMStCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUc0YixDQUFDLENBQUNzYSxRQUFRLENBQUNsMkIsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUNzYSxRQUFRLENBQUNsMkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeS9CLFNBQVMsQ0FBQ3ovQixDQUFDLENBQUMsQ0FBQyxDQUFDbThDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQ3ZnQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM0YixDQUFDLENBQUN6WCxLQUFLLENBQUNoTyxHQUFHLENBQUMsQ0FBQyxHQUFHeWxCLENBQUMsQ0FBQzhnQyxPQUFPLENBQUMsQ0FBQyxJQUFJeG1ELENBQUMsQ0FBQyxJQUFJLENBQUNva0QsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzJXLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzhnQyxPQUFPLENBQUM5Z0MsQ0FBQyxDQUFDelgsS0FBSyxDQUFDeVgsQ0FBQyxDQUFDelgsS0FBSyxDQUFDaE8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1VyxDQUFDLENBQUMsSUFBSSxDQUFDc3VDLGVBQWUsQ0FBQ3AvQixDQUFDLENBQUMsQ0FBQ29tQixDQUFDLENBQUN0MUIsQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDLElBQUksQ0FBQ3kvQyxnQkFBZ0IsQ0FBQ2hoQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNvbUIsQ0FBQyxDQUFDLElBQUksQ0FBQzJhLFNBQVMsQ0FBQ3ptRCxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDcDFCLENBQUMsQ0FBQyxFQUFFdVAsQ0FBQyxDQUFDLEtBQUssQ0FBQzAxQixDQUFDLENBQUMsQ0FBQzdQLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsRUFBRSxDQUFDdXlCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQys5QixXQUFXLENBQUMzWCxDQUFDLENBQUMyYixPQUFPLENBQUMsQ0FBQyxDQUFDL2hDLENBQUMsQ0FBQ2srQixTQUFTLENBQUNsK0IsQ0FBQyxDQUFDZytCLGFBQWEsQ0FBQzVYLENBQUMsQ0FBQzRiLFFBQVEsQ0FBQyxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDbStCLFFBQVEsQ0FBQ24rQixDQUFDLENBQUNpK0IsWUFBWSxDQUFDN1gsQ0FBQyxDQUFDNmIsV0FBVyxDQUFDLENBQUMsQ0FBQ2ppQyxDQUFDLENBQUM0aEMsVUFBVSxDQUFDanJCLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQzJiLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL2hDLENBQUMsQ0FBQzZoQyxZQUFZLENBQUNsckIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDNGIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDOGhDLFdBQVcsQ0FBQ25yQixDQUFDLENBQUN5UCxDQUFDLENBQUM2YixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNOLGVBQWUsQ0FBQzNoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvL0IsZUFBZSxDQUFDLFFBQVEsQ0FBQ3AvQixDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3dqQyxlQUFlLENBQUN4akMsQ0FBQyxDQUFDLElBQUksQ0FBQ3lqQyxjQUFjLENBQUN6akMsQ0FBQyxDQUFDLElBQUksQ0FBQzArQixJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUluZixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM0aUQsY0FBYyxDQUFDLFFBQVEsQ0FBQ3IvQyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUMsUUFBUSxDQUFDa1AsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQyxJQUFJdkQsSUFBSSxDQUFDLE9BQU91RCxDQUFDLENBQUM0NkMsT0FBTyxDQUFDNTZDLENBQUMsQ0FBQzI5QyxPQUFPLENBQUMsQ0FBQyxDQUFDL2hDLENBQUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzlyQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTzBsQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDMGEsU0FBUyxDQUFDL2dDLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxWSxJQUFJLENBQUN0NkMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUMyYSxnQkFBZ0IsQ0FBQzU4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDc0YsV0FBVyxDQUFDLENBQUMsQ0FBQzZFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQ3ViLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNtYSxRQUFRLENBQUNwOEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSXZELElBQUksQ0FBQ3VsQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDbXhDLFdBQVcsQ0FBQyxDQUFDLENBQUMxZ0QsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDa3hDLFFBQVEsQ0FBQyxDQUFDLENBQUN4YixDQUFDLENBQUMxMUIsQ0FBQyxDQUFDaXhDLE9BQU8sQ0FBQyxDQUFDLENBQUNsYixDQUFDLENBQUMsc0NBQXNDLENBQUM1MEIsQ0FBQyxDQUFDNDBCLENBQUMsQ0FBQy9oQyxJQUFJLENBQUN4SyxDQUFDLENBQUMsQ0FBQzJYLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUN1MEIsQ0FBQyxFQUFFdFMsUUFBUSxDQUFDamlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUN1MEIsQ0FBQyxFQUFFLENBQUMsQ0FBQ3RTLFFBQVEsQ0FBQ2ppQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDMVEsQ0FBQyxFQUFFMnlCLFFBQVEsQ0FBQ2ppQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUN1MEIsQ0FBQyxDQUFDeG9DLElBQUksQ0FBQzh2QyxHQUFHLENBQUN0SCxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FjLGVBQWUsQ0FBQ3RjLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQzZrQyxDQUFDLEVBQUVsUyxRQUFRLENBQUNqaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDdTBCLENBQUMsQ0FBQ3hvQyxJQUFJLENBQUM4dkMsR0FBRyxDQUFDdEgsQ0FBQyxDQUFDeG1CLENBQUMsQ0FBQ3FtQixVQUFVLENBQUNxYyxlQUFlLENBQUN0YyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDLENBQUMsQ0FBQzBRLENBQUMsQ0FBQzQwQixDQUFDLENBQUMvaEMsSUFBSSxDQUFDeEssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJdUcsSUFBSSxDQUFDdWxDLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2psQyxDQUFDLENBQUMsSUFBSSxFQUFFakgsQ0FBQyxFQUFFLEVBQUUsR0FBR0EsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBT3I4QixDQUFDLENBQUM4ckMsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPQSxDQUFDLENBQUNrbkMsS0FBSyxDQUFDbG5DLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUN4VyxDQUFDLENBQUMsQ0FBQyxJQUFJdUcsSUFBSSxDQUFDdkcsQ0FBQyxDQUFDaW9ELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPaGhELENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUNBLENBQUMsQ0FBQ28xQixDQUFDLENBQUNwMUIsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDbWlELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ25pRCxDQUFDLENBQUNvaUQsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDcGlELENBQUMsQ0FBQ3FpRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNyaUQsQ0FBQyxDQUFDc2lELGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2xCLHFCQUFxQixDQUFDcGhELENBQUMsQ0FBQyxDQUFDLENBQUNvaEQscUJBQXFCLENBQUMsUUFBUSxDQUFDM2lDLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMwakMsUUFBUSxDQUFDMWpDLENBQUMsQ0FBQzhqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzlqQyxDQUFDLENBQUM4akMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM5akMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNtL0IsUUFBUSxDQUFDLFFBQVEsQ0FBQ24vQixDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQzBNLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQ2crQixhQUFhLENBQUM1WCxDQUFDLENBQUNwbUIsQ0FBQyxDQUFDaStCLFlBQVksQ0FBQzE4QyxDQUFDLENBQUMsSUFBSSxDQUFDaWlELGVBQWUsQ0FBQ3hqQyxDQUFDLENBQUMsSUFBSSxDQUFDeWpDLGNBQWMsQ0FBQ3pqQyxDQUFDLENBQUM1YixDQUFDLENBQUMsSUFBSXZELElBQUksQ0FBQyxDQUFDLENBQUNtZixDQUFDLENBQUMrOUIsV0FBVyxDQUFDLzlCLENBQUMsQ0FBQzRoQyxVQUFVLENBQUNyZ0QsQ0FBQyxDQUFDd2dELE9BQU8sQ0FBQyxDQUFDLENBQUMvaEMsQ0FBQyxDQUFDaytCLFNBQVMsQ0FBQ2wrQixDQUFDLENBQUNnK0IsYUFBYSxDQUFDaCtCLENBQUMsQ0FBQzZoQyxZQUFZLENBQUN0Z0QsQ0FBQyxDQUFDeWdELFFBQVEsQ0FBQyxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDbStCLFFBQVEsQ0FBQ24rQixDQUFDLENBQUNpK0IsWUFBWSxDQUFDaitCLENBQUMsQ0FBQzhoQyxXQUFXLENBQUN2Z0QsQ0FBQyxDQUFDMGdELFdBQVcsQ0FBQyxDQUFDLENBQUNueEMsQ0FBQyxHQUFHa1AsQ0FBQyxDQUFDZytCLGFBQWEsRUFBRTVYLENBQUMsR0FBR3BtQixDQUFDLENBQUNpK0IsWUFBWSxFQUFFM2pELENBQUMsRUFBRSxJQUFJLENBQUM0bkQsYUFBYSxDQUFDbGlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJoQyxlQUFlLENBQUMzaEMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3pYLEtBQUssRUFBRXlYLENBQUMsQ0FBQ3pYLEtBQUssQ0FBQ2hPLEdBQUcsQ0FBQ284QixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3VvQixXQUFXLENBQUNsL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd2dDLFFBQVEsQ0FBQyxRQUFRLENBQUN4Z0MsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDOGhDLFdBQVcsRUFBRTloQyxDQUFDLENBQUN6WCxLQUFLLEVBQUUsRUFBRSxHQUFHeVgsQ0FBQyxDQUFDelgsS0FBSyxDQUFDaE8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDb29ELHFCQUFxQixDQUFDLElBQUk5aEQsSUFBSSxDQUFDbWYsQ0FBQyxDQUFDOGhDLFdBQVcsQ0FBQzloQyxDQUFDLENBQUM2aEMsWUFBWSxDQUFDN2hDLENBQUMsQ0FBQzRoQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU94OUMsQ0FBQyxDQUFDLENBQUNpOUMsZUFBZSxDQUFDLFFBQVEsQ0FBQ2o5QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQ29rRCxJQUFJLENBQUN0NkMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxHQUFHLENBQUN2eUIsQ0FBQyxDQUFDWSxFQUFFLENBQUM5RyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDa0csQ0FBQyxDQUFDK2hDLEtBQUssQ0FBQ2orQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzNMLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk2SCxDQUFDLENBQUMsQ0FBQzBOLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDa08sQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FhLFdBQVcsQ0FBQy9wQixDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzRKLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOGIsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FhLFdBQVcsQ0FBQy9wQixDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ3FpQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3FELENBQUMsQ0FBQ3FtQixVQUFVLENBQUN5WSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUNpRixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQy9qQyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDdWEsVUFBVSxDQUFDanFCLENBQUMsQ0FBQyxDQUFDLENBQUNxdEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBT2hrQyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDb2EsVUFBVSxDQUFDOXBCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2g4QixZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDc3BELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU9qa0MsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQzhiLGdCQUFnQixDQUFDeHJCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V0QixVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPbGtDLENBQUMsQ0FBQ3FtQixVQUFVLENBQUM4YixnQkFBZ0IsQ0FBQ3hyQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ1QsRUFBRSxDQUFDLElBQUksQ0FBQzVrQixZQUFZLENBQUMsWUFBWSxDQUFDLENBQUN5SixDQUFDLENBQUMsSUFBSSxDQUFDekosWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ltRCxhQUFhLENBQUMsUUFBUSxDQUFDcGhDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQ2szQixDQUFDLENBQUNRLENBQUMsQ0FBQ0ksQ0FBQyxDQUFDdGIsQ0FBQyxDQUFDK2IsQ0FBQyxDQUFDQyxDQUFDLENBQUNsbUMsQ0FBQyxDQUFDdEIsQ0FBQyxDQUFDbVIsQ0FBQyxDQUFDNVMsQ0FBQyxDQUFDbXBDLENBQUMsQ0FBQ3R5QyxDQUFDLENBQUN3eUMsQ0FBQyxDQUFDRSxDQUFDLENBQUNDLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDQyxDQUFDLENBQUNpWixDQUFDLENBQUNDLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDQyxDQUFDLENBQUNDLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDQyxDQUFDLENBQUNDLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDQyxDQUFDLENBQUNDLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDQyxDQUFDLENBQUNDLENBQUMsQ0FBQyxJQUFJbmtELElBQUksQ0FBQ29rRCxDQUFDLENBQUMsSUFBSSxDQUFDdEMscUJBQXFCLENBQUMsSUFBSTloRCxJQUFJLENBQUNta0QsQ0FBQyxDQUFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQytDLENBQUMsQ0FBQ2hELFFBQVEsQ0FBQyxDQUFDLENBQUNnRCxDQUFDLENBQUNqRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ21ELENBQUMsQ0FBQyxJQUFJLENBQUN4RyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDampCLENBQUMsQ0FBQyxJQUFJLENBQUMyaEQsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDbWxDLENBQUMsQ0FBQyxJQUFJLENBQUN6RyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUNvbEMsQ0FBQyxDQUFDLElBQUksQ0FBQzFHLElBQUksQ0FBQzErQixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQ3FsQyxDQUFDLENBQUMsSUFBSSxDQUFDL0Qsa0JBQWtCLENBQUN0aEMsQ0FBQyxDQUFDLENBQUNzbEMsQ0FBQyxDQUFDLElBQUksQ0FBQzVHLElBQUksQ0FBQzErQixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQzZoQixDQUFDLENBQUMsSUFBSSxDQUFDNmMsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQ3VsQyxDQUFDLENBQUMsQ0FBQyxHQUFHRixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNHLENBQUMsQ0FBQyxJQUFJLENBQUM3QyxxQkFBcUIsQ0FBQzNpQyxDQUFDLENBQUM0aEMsVUFBVSxDQUFDLElBQUkvZ0QsSUFBSSxDQUFDbWYsQ0FBQyxDQUFDOGhDLFdBQVcsQ0FBQzloQyxDQUFDLENBQUM2aEMsWUFBWSxDQUFDN2hDLENBQUMsQ0FBQzRoQyxVQUFVLENBQUMsQ0FBQyxJQUFJL2dELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0a0QsQ0FBQyxDQUFDLElBQUksQ0FBQ3RGLGNBQWMsQ0FBQ25nQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMwbEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ZGLGNBQWMsQ0FBQ25nQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMybEMsQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQ2srQixTQUFTLENBQUNvSCxDQUFDLENBQUNNLEVBQUUsQ0FBQzVsQyxDQUFDLENBQUNtK0IsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUN3SCxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxFQUFFLEVBQUUsQ0FBQ0MsRUFBRSxFQUFFLENBQUMsQ0FBQ0YsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3RoRCxDQUFDLENBQUMsSUFBSSxDQUFDdStDLHFCQUFxQixDQUFDLElBQUk5aEQsSUFBSSxDQUFDNmtELENBQUMsQ0FBQ3pELFdBQVcsQ0FBQyxDQUFDLENBQUN5RCxDQUFDLENBQUMxRCxRQUFRLENBQUMsQ0FBQyxDQUFDcUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDSyxDQUFDLENBQUMzRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzM5QyxDQUFDLENBQUNxaEQsQ0FBQyxFQUFFQSxDQUFDLENBQUNyaEQsQ0FBQyxDQUFDcWhELENBQUMsQ0FBQ3JoRCxDQUFDLENBQUMsSUFBSSxDQUFDdStDLHFCQUFxQixDQUFDLElBQUk5aEQsSUFBSSxDQUFDK2tELEVBQUUsQ0FBQ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2aEQsQ0FBQyxDQUFDLENBQUN1aEQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM1bEMsQ0FBQyxDQUFDaytCLFNBQVMsQ0FBQ3lILENBQUMsQ0FBQzNsQyxDQUFDLENBQUNtK0IsUUFBUSxDQUFDeUgsRUFBRSxDQUFDdHJELENBQUMsQ0FBQyxJQUFJLENBQUNva0QsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQzFsQixDQUFDLENBQUM4cUQsQ0FBQyxDQUFDLElBQUksQ0FBQy9DLFVBQVUsQ0FBQy9uRCxDQUFDLENBQUMsSUFBSSxDQUFDcW9ELHFCQUFxQixDQUFDLElBQUk5aEQsSUFBSSxDQUFDK2tELEVBQUUsQ0FBQ0QsQ0FBQyxDQUFDOWpCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21mLGdCQUFnQixDQUFDaGhDLENBQUMsQ0FBQyxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUNrdkIsZUFBZSxDQUFDN2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRsQyxFQUFFLENBQUNELENBQUMsQ0FBQyxDQUFDLDRGQUE0RixDQUFDcnJELENBQUMsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDNHFELENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDNXFELENBQUMsQ0FBQyxhQUFhLENBQUM2cUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1RUFBdUUsQ0FBQzdxRCxDQUFDLENBQUMsaURBQWlELENBQUMsQ0FBQzRxRCxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzVxRCxDQUFDLENBQUMsYUFBYSxDQUFDd1csQ0FBQyxDQUFDLElBQUksQ0FBQzR0QyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDczBDLENBQUMsQ0FBQyxJQUFJLENBQUMvQyxVQUFVLENBQUN2eEMsQ0FBQyxDQUFDLElBQUksQ0FBQzZ4QyxxQkFBcUIsQ0FBQyxJQUFJOWhELElBQUksQ0FBQytrRCxFQUFFLENBQUNELENBQUMsQ0FBQzlqQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtZixnQkFBZ0IsQ0FBQ2hoQyxDQUFDLENBQUMsQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxJQUFJLENBQUN5ZixlQUFlLENBQUM3bEMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRsQyxFQUFFLENBQUNELENBQUMsQ0FBQyxDQUFDLDRGQUE0RixDQUFDNzBDLENBQUMsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDbzBDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDcDBDLENBQUMsQ0FBQyxhQUFhLENBQUNxMEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1RUFBdUUsQ0FBQ3IwQyxDQUFDLENBQUMsaURBQWlELENBQUMsQ0FBQ28wQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQ3AwQyxDQUFDLENBQUMsYUFBYSxDQUFDdlAsQ0FBQyxDQUFDLElBQUksQ0FBQ205QyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDd21CLENBQUMsQ0FBQyxJQUFJLENBQUNrWSxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFQSxDQUFDLENBQUM0aEMsVUFBVSxDQUFDNEQsQ0FBQyxDQUFDUCxDQUFDLENBQUMxakQsQ0FBQyxDQUFDNmpELENBQUMsQ0FBQyxJQUFJLENBQUMvQyxVQUFVLENBQUM5Z0QsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQyxJQUFJLENBQUN3YSxnQkFBZ0IsQ0FBQ2hoQyxDQUFDLENBQUMsQ0FBQyxDQUFDemUsQ0FBQyxDQUFDc2xDLENBQUMsQ0FBQzdtQixDQUFDLENBQUN1bUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyw4SUFBOEksQ0FBQyxJQUFJLENBQUNtWSxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQy9OLENBQUMsQ0FBQ2xWLENBQUMsQ0FBQywwREFBMEQsQ0FBQyxDQUFDbW9ELENBQUMsQ0FBQ3JlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lmLFVBQVUsQ0FBQzlsQyxDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUMsbUpBQW1KLENBQUNqbEMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDMmpELENBQUMsQ0FBQyxFQUFFLENBQUNyZSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDc0MsQ0FBQyxDQUFDalYsUUFBUSxDQUFDLElBQUksQ0FBQ3dxQixJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDbXBCLENBQUMsQ0FBQzNILEtBQUssQ0FBQzJILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDUSxDQUFDLENBQUMsSUFBSSxDQUFDK1UsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQytwQixDQUFDLENBQUMsSUFBSSxDQUFDMlUsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQ3lPLENBQUMsQ0FBQyxJQUFJLENBQUNpd0IsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQ3dxQixDQUFDLENBQUMsSUFBSSxDQUFDa1UsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQ3lxQixDQUFDLENBQUMsSUFBSSxDQUFDaVUsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDemIsQ0FBQyxDQUFDLElBQUksQ0FBQ202QyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDL2MsQ0FBQyxDQUFDLElBQUksQ0FBQ3k3QyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM1TCxDQUFDLENBQUMsSUFBSSxDQUFDc3FDLElBQUksQ0FBQzErQixDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQ3hlLENBQUMsQ0FBQyxJQUFJLENBQUM0OUMsZUFBZSxDQUFDcC9CLENBQUMsQ0FBQyxDQUFDMnFCLENBQUMsQ0FBQyxFQUFFLENBQUNFLENBQUMsQ0FBQyxDQUFDLENBQUN3YSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4YSxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3lTLE9BQU8sQ0FBQyxDQUFDLENBQUN4UyxDQUFDLENBQUMsQ0FBQyxDQUFDcWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcmEsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0MsQ0FBQyxDQUFDLElBQUksQ0FBQzBYLHFCQUFxQixDQUFDLElBQUk5aEQsSUFBSSxDQUFDK2tELEVBQUUsQ0FBQ0QsQ0FBQyxDQUFDM2xDLENBQUMsQ0FBQys5QixXQUFXLENBQUMsQ0FBQyxDQUFDN1MsQ0FBQyxDQUFDLGdCQUFnQixDQUFDaVosQ0FBQyxDQUFDLEVBQUUsQ0FBQ29CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3BCLENBQUMsRUFBRSxpQ0FBaUMsQ0FBQ2tCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDcmEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUNtWixDQUFDLEVBQUUsNEJBQTRCLENBQUNqWixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNnYSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbEIsQ0FBQyxFQUFFLDJCQUEyQixDQUFDalosQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDZ2EsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDZixDQUFDLEVBQUUsNkJBQTZCLENBQUNqWixDQUFDLENBQUMsRUFBRSxDQUFDaVosQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUNBLENBQUMsRUFBRSxzRUFBc0UsQ0FBQ2paLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUM5bEMsSUFBSSxDQUFDOGxDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0wsQ0FBQyxDQUFDcWEsQ0FBQyxDQUFDOWUsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDdnhCLElBQUksQ0FBQzhsQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdMLENBQUMsQ0FBQ3FhLENBQUMsQ0FBQ3Z1QixDQUFDLENBQUN5UCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDMmYsd0JBQXdCLENBQUMvbEMsQ0FBQyxDQUFDMmxDLENBQUMsQ0FBQ0MsRUFBRSxDQUFDSCxDQUFDLENBQUNDLENBQUMsQ0FBQzdhLENBQUMsQ0FBQyxDQUFDLEVBQUVHLENBQUMsQ0FBQyxDQUFDLENBQUNSLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLENBQUMscURBQXFELENBQUMsTUFBTSxDQUFDMlosQ0FBQyxDQUFDemEsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQytVLElBQUksQ0FBQzErQixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ2dzRCxDQUFDLENBQUMsQ0FBQ2hzRCxDQUFDLENBQUM4d0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDaWIsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQy9yRCxDQUFDLENBQUM4d0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQ1ksQ0FBQyxDQUFDc2EsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNTFCLENBQUMsQ0FBQzQxQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDRixDQUFDLEVBQUVDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQzVCLGVBQWUsQ0FBQ2tELEVBQUUsQ0FBQ0QsQ0FBQyxDQUFDLENBQUNDLEVBQUUsR0FBRzVsQyxDQUFDLENBQUNpK0IsWUFBWSxFQUFFMEgsQ0FBQyxHQUFHM2xDLENBQUMsQ0FBQ2crQixhQUFhLEVBQUUsQ0FBQ2grQixDQUFDLENBQUMrOUIsV0FBVyxDQUFDLy9DLElBQUksQ0FBQzh2QyxHQUFHLENBQUM5dEIsQ0FBQyxDQUFDKzlCLFdBQVcsQ0FBQ3VHLENBQUMsQ0FBQyxDQUFDLENBQUNDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3lCLG1CQUFtQixDQUFDSixFQUFFLENBQUNELENBQUMsQ0FBQyxDQUFDeGMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FiLENBQUMsQ0FBQ3htRCxJQUFJLENBQUNxdUIsSUFBSSxDQUFDLENBQUNrNEIsQ0FBQyxDQUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csQ0FBQyxDQUFDYyxDQUFDLENBQUMsSUFBSSxDQUFDL0gsT0FBTyxDQUFDZ0gsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ2dILENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ2lILENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLElBQUksQ0FBQy9CLHFCQUFxQixDQUFDLElBQUk5aEQsSUFBSSxDQUFDK2tELEVBQUUsQ0FBQ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BCLENBQUMsQ0FBQyxDQUFDLENBQUNJLENBQUMsQ0FBQyxDQUFDLENBQUNGLENBQUMsQ0FBQ0UsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQ1IsQ0FBQyxFQUFFLE1BQU0sQ0FBQ1MsQ0FBQyxDQUFDamIsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQytVLElBQUksQ0FBQzErQixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMwa0MsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQ3JzRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ3dzRCxDQUFDLENBQUN0Z0QsQ0FBQyxDQUFDQSxDQUFDLENBQUM5SCxLQUFLLENBQUN1akIsQ0FBQyxDQUFDelgsS0FBSyxDQUFDeVgsQ0FBQyxDQUFDelgsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbThDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ0ksQ0FBQyxDQUFDSixDQUFDLENBQUMxQyxRQUFRLENBQUMsQ0FBQyxHQUFHMkQsQ0FBQyxDQUFDWixDQUFDLENBQUNELENBQUMsRUFBRSxDQUFDMXdDLENBQUMsRUFBRSxDQUFDeXdDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRVksQ0FBQyxFQUFFQSxDQUFDLENBQUNmLENBQUMsRUFBRWdCLENBQUMsRUFBRWhCLENBQUMsQ0FBQ2dCLENBQUMsQ0FBQ2QsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUN2c0QsQ0FBQyxDQUFDOHdDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMyYixDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ0osQ0FBQyxDQUFDbkMsT0FBTyxDQUFDLENBQUMsR0FBR3RYLENBQUMsQ0FBQ3NYLE9BQU8sQ0FBQyxDQUFDLEVBQUVvRCxDQUFDLEdBQUczbEMsQ0FBQyxDQUFDZytCLGFBQWEsRUFBRWgrQixDQUFDLENBQUNnaUIsU0FBUyxFQUFFeGdDLENBQUMsQ0FBQytnRCxPQUFPLENBQUMsQ0FBQyxHQUFHbUMsQ0FBQyxDQUFDbkMsT0FBTyxDQUFDLENBQUMsRUFBRS9nRCxDQUFDLENBQUMrZ0QsT0FBTyxDQUFDLENBQUMsR0FBR3RYLENBQUMsQ0FBQ3NYLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQzNmLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDbWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDcmlCLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNvaUIsQ0FBQyxFQUFFLENBQUM3aEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM0aEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNILENBQUMsQ0FBQ25DLE9BQU8sQ0FBQyxDQUFDLEdBQUdpRCxDQUFDLENBQUNqRCxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM1ZixhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQytoQixDQUFDLENBQUNuQyxPQUFPLENBQUMsQ0FBQyxHQUFHMEMsQ0FBQyxDQUFDMUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDdUMsQ0FBQyxFQUFFLENBQUM3aEQsQ0FBQyxFQUFFLENBQUM0aEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNtRCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM2bUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQywyREFBMkQsQ0FBQ0wsQ0FBQyxDQUFDMUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMwQyxDQUFDLENBQUN6QyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDNkMsQ0FBQyxFQUFFLENBQUM3aEQsQ0FBQyxDQUFDLFFBQVEsQ0FBQzhoRCxDQUFDLENBQUMsaUNBQWlDLENBQUNMLENBQUMsQ0FBQzNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLENBQUMyQyxDQUFDLENBQUNuQyxPQUFPLENBQUMsQ0FBQyxHQUFHMEMsQ0FBQyxDQUFDMUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDbUMsQ0FBQyxDQUFDbkMsT0FBTyxDQUFDLENBQUMsR0FBR2lELENBQUMsQ0FBQ2pELE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ3VDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUNKLENBQUMsQ0FBQzNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDMkMsQ0FBQyxDQUFDMUYsT0FBTyxDQUFDMEYsQ0FBQyxDQUFDM0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJDLENBQUMsQ0FBQyxJQUFJLENBQUMvQixxQkFBcUIsQ0FBQytCLENBQUMsQ0FBQyxDQUFDUCxDQUFDLEVBQUVTLENBQUMsQ0FBQyxPQUFPLENBQUNlLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUNDLEVBQUUsRUFBRSxDQUFDLENBQUN6QixDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQ29CLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRXJhLENBQUMsR0FBR3FhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNkNBQTZDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUN0YSxDQUFDLEVBQUVvWixDQUFDLENBQUN4WixDQUFDLEVBQUVJLENBQUMsQ0FBQyxPQUFPSixDQUFDLEVBQUUxNEIsQ0FBQyxDQUFDK04sQ0FBQyxDQUFDZ2lCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJJLENBQUMsQ0FBQyxDQUFDb2Isd0JBQXdCLENBQUMsUUFBUSxDQUFDL2xDLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLENBQUMsSUFBSUssQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQ2szQixDQUFDLENBQUNRLENBQUMsQ0FBQ0ksQ0FBQyxDQUFDdGIsQ0FBQyxDQUFDK2IsQ0FBQyxDQUFDQyxDQUFDLENBQUNsbUMsQ0FBQyxDQUFDLElBQUksQ0FBQ202QyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDL2MsQ0FBQyxDQUFDLElBQUksQ0FBQ3k3QyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDNUwsQ0FBQyxDQUFDLElBQUksQ0FBQ3NxQyxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUN4ZSxDQUFDLENBQUMsbUNBQW1DLENBQUNtcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUN2RSxDQUFDLEVBQUUsQ0FBQzdoQyxDQUFDLENBQUNvbUMsQ0FBQyxFQUFFLG9DQUFvQyxDQUFDcHBDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDeWlDLENBQUMsQ0FBQ2xRLENBQUMsRUFBRUEsQ0FBQyxDQUFDc3JCLFdBQVcsQ0FBQyxDQUFDLEdBQUczbkQsQ0FBQyxDQUFDMlgsQ0FBQyxDQUFDbkIsQ0FBQyxFQUFFQSxDQUFDLENBQUNteEMsV0FBVyxDQUFDLENBQUMsR0FBRzNuRCxDQUFDLENBQUNxd0MsQ0FBQyxFQUFFLHFGQUFxRixDQUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDdEMsQ0FBQyxFQUFFc0MsQ0FBQyxFQUFFeFMsQ0FBQyxDQUFDcXJCLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMvdkMsQ0FBQyxFQUFFbkIsQ0FBQyxDQUFDa3hDLFFBQVEsQ0FBQyxDQUFDLEVBQUU3WSxDQUFDLENBQUMsRUFBRSxDQUFDd0IsQ0FBQyxFQUFFLGlCQUFpQixDQUFDeEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDQSxDQUFDLEdBQUcva0MsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQ29pQyxDQUFDLENBQUMyQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQ3dCLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDdjJCLENBQUMsRUFBRSxDQUFDNVMsQ0FBQyxFQUFFbXBDLENBQUMsQ0FBQyxDQUFDLENBQUN2RSxDQUFDLEVBQUU3aEMsQ0FBQyxFQUFFdEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMrYyxDQUFDLENBQUN1aEMsU0FBUyxDQUFDLEVBQUUsQ0FBQ3ZoQyxDQUFDLENBQUN1aEMsU0FBUyxDQUFDLEVBQUUsQ0FBQ25iLENBQUMsRUFBRSxDQUFDbmpDLENBQUMsQ0FBQ3pCLENBQUMsRUFBRSxtQ0FBbUMsQ0FBQ2xILENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQ3F2QyxDQUFDLENBQUMsSUFBSSxDQUFDK1UsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQ3JnQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNvcUMsQ0FBQyxDQUFDLENBQUMsSUFBSWxwQyxJQUFJLENBQUMsQ0FBQ29oRCxXQUFXLENBQUMsQ0FBQyxDQUFDeHpCLENBQUMsQ0FBQyxRQUFRLENBQUN6TyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDdmIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDbkssQ0FBQyxDQUFDNDVCLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQ2d6QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNoekIsQ0FBQyxDQUFDdmIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDc2xDLENBQUMsQ0FBQzdWLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2tVLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPd2hCLEtBQUssQ0FBQ3A5QixDQUFDLENBQUMsQ0FBQzJsQyxDQUFDLENBQUMzbEMsQ0FBQyxDQUFDLENBQUNvbUMsQ0FBQyxDQUFDL2IsQ0FBQyxDQUFDa2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNjLENBQUMsQ0FBQ3pzQyxJQUFJLENBQUM0dEIsR0FBRyxDQUFDNGUsQ0FBQyxDQUFDL2IsQ0FBQyxDQUFDa2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUNhLENBQUMsQ0FBQzdULENBQUMsQ0FBQzM0QixJQUFJLENBQUM0dEIsR0FBRyxDQUFDNGUsQ0FBQyxDQUFDN1QsQ0FBQyxDQUFDc3JCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pYLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDMzVCLENBQUMsQ0FBQzlTLElBQUksQ0FBQzh2QyxHQUFHLENBQUNyRCxDQUFDLENBQUMzNUIsQ0FBQyxDQUFDbXhDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hYLENBQUMsQ0FBQ3pxQixDQUFDLENBQUN1aEMsU0FBUyxFQUFFLG1GQUFtRixDQUFDOVcsQ0FBQyxFQUFFRCxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDeHFCLENBQUMsQ0FBQ3VoQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMvVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUNBLENBQUMsR0FBR2x3QyxDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDa3dDLENBQUMsQ0FBQyxXQUFXLENBQUN4cUIsQ0FBQyxDQUFDdWhDLFNBQVMsRUFBRSxXQUFXLENBQUMvL0MsQ0FBQyxFQUFFd2UsQ0FBQyxDQUFDdWhDLFNBQVMsQ0FBQ3ZoQyxDQUFDLENBQUN1aEMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLy9DLENBQUMsRUFBRSxJQUFJLENBQUNrOUMsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzVMLENBQUMsRUFBRSxDQUFDNVMsQ0FBQyxFQUFFLENBQUMsQ0FBQzRrQyxDQUFDLEVBQUU3aEMsQ0FBQyxFQUFFdEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzBuQyxDQUFDLENBQUMsQ0FBQ25wQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUNtZ0QsZUFBZSxDQUFDLFFBQVEsQ0FBQzNoQyxDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ2krQixZQUFZLENBQUMsQ0FBQyxHQUFHLEdBQUczakQsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDZytCLGFBQWEsQ0FBQyxDQUFDLEdBQUcsR0FBRzFqRCxDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDcG9DLElBQUksQ0FBQzh2QyxHQUFHLENBQUM5dEIsQ0FBQyxDQUFDKzlCLFdBQVcsQ0FBQyxJQUFJLENBQUMyRSxlQUFlLENBQUMvckIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUd4VyxDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDaWlELGVBQWUsQ0FBQ3hqQyxDQUFDLENBQUMsSUFBSSxDQUFDMmlDLHFCQUFxQixDQUFDLElBQUk5aEQsSUFBSSxDQUFDODFCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQys5QixXQUFXLENBQUN4OEMsQ0FBQyxDQUFDd2dELE9BQU8sQ0FBQyxDQUFDLENBQUMvaEMsQ0FBQyxDQUFDaytCLFNBQVMsQ0FBQ2wrQixDQUFDLENBQUNnK0IsYUFBYSxDQUFDejhDLENBQUMsQ0FBQ3lnRCxRQUFRLENBQUMsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQ20rQixRQUFRLENBQUNuK0IsQ0FBQyxDQUFDaStCLFlBQVksQ0FBQzE4QyxDQUFDLENBQUMwZ0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRzNuRCxDQUFDLEVBQUUsR0FBRyxHQUFHQSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM0bkQsYUFBYSxDQUFDbGlDLENBQUMsQ0FBQyxDQUFDLENBQUN3akMsZUFBZSxDQUFDLFFBQVEsQ0FBQ3hqQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQzZsRCxjQUFjLENBQUNuZ0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDLElBQUksQ0FBQ3dwQixjQUFjLENBQUNuZ0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDeFcsQ0FBQyxFQUFFQSxDQUFDLENBQUM4SixDQUFDLENBQUM5SixDQUFDLENBQUM4SixDQUFDLENBQUMsT0FBT3V5QixDQUFDLEVBQUU3bEIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDb3hDLGFBQWEsQ0FBQyxRQUFRLENBQUNsaUMsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQyxJQUFJLENBQUNzNkMsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDNWIsQ0FBQyxFQUFFQSxDQUFDLENBQUMzSCxLQUFLLENBQUN1akIsQ0FBQyxDQUFDelgsS0FBSyxDQUFDeVgsQ0FBQyxDQUFDelgsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDeVgsQ0FBQyxDQUFDaStCLFlBQVksQ0FBQ2orQixDQUFDLENBQUNnK0IsYUFBYSxDQUFDLENBQUMsQ0FBQ2grQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzaEMsa0JBQWtCLENBQUMsUUFBUSxDQUFDdGhDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsSUFBSSxDQUFDczZDLElBQUksQ0FBQzErQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRTViLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBT0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMrN0MsY0FBYyxDQUFDLFFBQVEsQ0FBQ25nQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3EvQyxjQUFjLENBQUN6akMsQ0FBQyxDQUFDLElBQUksQ0FBQzArQixJQUFJLENBQUMxK0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUNzK0MsZUFBZSxDQUFDLFFBQVEsQ0FBQzFpQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUN1K0MscUJBQXFCLENBQUMsSUFBSTloRCxJQUFJLENBQUNtZixDQUFDLENBQUM1YixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzI5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNpRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUNobUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJdkQsSUFBSSxDQUFDbWYsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNjZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzRHLGVBQWUsQ0FBQyxRQUFRLENBQUM3bEMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3d3QyxrQkFBa0IsQ0FBQ3RoQyxDQUFDLENBQUMsQ0FBQ29tQixDQUFDLENBQUMsSUFBSSxDQUFDdWMscUJBQXFCLENBQUMsSUFBSTloRCxJQUFJLENBQUN2RyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDMU0sQ0FBQyxFQUFFZ2lDLENBQUMsQ0FBQzRZLE9BQU8sQ0FBQyxJQUFJLENBQUMwRCxlQUFlLENBQUN0YyxDQUFDLENBQUM2YixXQUFXLENBQUMsQ0FBQyxDQUFDN2IsQ0FBQyxDQUFDNGIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOEQsVUFBVSxDQUFDOWxDLENBQUMsQ0FBQ29tQixDQUFDLENBQUMsQ0FBQyxDQUFDMGYsVUFBVSxDQUFDLFFBQVEsQ0FBQzlsQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsSUFBSSxDQUFDcXZDLGNBQWMsQ0FBQ25nQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDLElBQUksQ0FBQytaLGNBQWMsQ0FBQ25nQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUN6ZSxDQUFDLENBQUMsSUFBSSxDQUFDaWxDLENBQUMsQ0FBQyxJQUFJLENBQUNLLENBQUMsQ0FBQyxJQUFJLENBQUM2WCxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU82bUIsQ0FBQyxFQUFFLENBQUN2c0MsQ0FBQyxDQUFDdXNDLENBQUMsQ0FBQ2xuQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNnM0IsQ0FBQyxDQUFDLENBQUMsSUFBSTkxQixJQUFJLENBQUMsQ0FBQ29oRCxXQUFXLENBQUMsQ0FBQyxDQUFDMWdELENBQUMsQ0FBQzJ5QixRQUFRLENBQUM1NUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ3RTLFFBQVEsQ0FBQzU1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ21LLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDbEQsQ0FBQyxFQUFFbzFCLENBQUMsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ21LLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDK2hDLENBQUMsRUFBRTdQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN2xCLENBQUMsRUFBRTFNLENBQUMsQ0FBQ20rQyxPQUFPLENBQUMsQ0FBQyxFQUFFenhDLENBQUMsQ0FBQ3l4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDbmMsQ0FBQyxFQUFFaGlDLENBQUMsQ0FBQ20rQyxPQUFPLENBQUMsQ0FBQyxFQUFFbmMsQ0FBQyxDQUFDbWMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2hoRCxDQUFDLEVBQUU2QyxDQUFDLENBQUM2OUMsV0FBVyxDQUFDLENBQUMsRUFBRTFnRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNpbEMsQ0FBQyxFQUFFQSxDQUFDLEVBQUVwaUMsQ0FBQyxDQUFDNjlDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDakIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDaGhDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsSUFBSSxDQUFDczZDLElBQUksQ0FBQzErQixDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPNWIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPQSxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLElBQUl2RCxJQUFJLENBQUMsQ0FBQ29oRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQy90QixRQUFRLENBQUM5dkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM2Z0MsZUFBZSxDQUFDN2dDLENBQUMsQ0FBQ2kvQixhQUFhLENBQUMsSUFBSSxDQUFDcWIsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQ29qQixRQUFRLENBQUMsSUFBSSxDQUFDc2IsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQ21qQixlQUFlLENBQUMsSUFBSSxDQUFDdWIsSUFBSSxDQUFDMStCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDa2pCLFVBQVUsQ0FBQyxJQUFJLENBQUN3YixJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ2svQixXQUFXLENBQUMsUUFBUSxDQUFDbC9CLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQ3Z5QixDQUFDLEVBQUUsQ0FBQzRiLENBQUMsQ0FBQzRoQyxVQUFVLENBQUM1aEMsQ0FBQyxDQUFDKzlCLFdBQVcsQ0FBQy85QixDQUFDLENBQUM2aEMsWUFBWSxDQUFDN2hDLENBQUMsQ0FBQ2crQixhQUFhLENBQUNoK0IsQ0FBQyxDQUFDOGhDLFdBQVcsQ0FBQzloQyxDQUFDLENBQUNpK0IsWUFBWSxDQUFDLENBQUMsSUFBSW50QyxDQUFDLENBQUMxTSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU9BLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ3UrQyxxQkFBcUIsQ0FBQyxJQUFJOWhELElBQUksQ0FBQzgxQixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1K0MscUJBQXFCLENBQUMsSUFBSTloRCxJQUFJLENBQUNtZixDQUFDLENBQUM4aEMsV0FBVyxDQUFDOWhDLENBQUMsQ0FBQzZoQyxZQUFZLENBQUM3aEMsQ0FBQyxDQUFDNGhDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNTLFVBQVUsQ0FBQyxJQUFJLENBQUMzRCxJQUFJLENBQUMxK0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDLElBQUksQ0FBQ2t3QyxnQkFBZ0IsQ0FBQ2hoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMxa0IsRUFBRSxDQUFDK3FDLFVBQVUsQ0FBQyxRQUFRLENBQUNqaUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDeEksTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDb2tCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUM0ZixXQUFXLEVBQUUsQ0FBQ2ptQyxDQUFDLENBQUM1bkIsUUFBUSxDQUFDLENBQUNtbkIsRUFBRSxDQUFDLFdBQVcsQ0FBQ1MsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3FiLG1CQUFtQixDQUFDLENBQUMxaEMsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQzRmLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR2ptQyxDQUFDLENBQUMsR0FBRyxDQUFDQSxDQUFDLENBQUNxbUIsVUFBVSxDQUFDakUsVUFBVSxDQUFDLENBQUN4bUMsTUFBTSxFQUFFb2tCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQ3dILE1BQU0sQ0FBQ3hILENBQUMsQ0FBQ3FtQixVQUFVLENBQUNGLEtBQUssQ0FBQyxDQUFDLElBQUk3ckMsQ0FBQyxDQUFDc0QsS0FBSyxDQUFDbkMsU0FBUyxDQUFDNUMsS0FBSyxDQUFDVSxJQUFJLENBQUNtRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxRQUFRLEVBQUUsT0FBTzBILENBQUMsRUFBRSxZQUFZLEdBQUdBLENBQUMsRUFBRSxTQUFTLEdBQUdBLENBQUMsRUFBRSxRQUFRLEdBQUdBLENBQUMsQ0FBQyxRQUFRLEdBQUdBLENBQUMsRUFBRSxDQUFDLEdBQUcxSCxTQUFTLENBQUNkLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBT2MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDc2pCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUMsR0FBRyxDQUFDamlDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzNILEtBQUssQ0FBQ3VqQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2dEMsTUFBTSxDQUFDd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTytILENBQUMsQ0FBQzRiLENBQUMsQ0FBQ3FtQixVQUFVLENBQUMsR0FBRyxDQUFDamlDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzNILEtBQUssQ0FBQ3VqQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN2dEMsTUFBTSxDQUFDd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDc1gsaUJBQWlCLENBQUMsSUFBSSxDQUFDdjVDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ3FtQixVQUFVLENBQUMsR0FBRyxDQUFDamlDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzNILEtBQUssQ0FBQ3VqQixDQUFDLENBQUNxbUIsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2dEMsTUFBTSxDQUFDd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ3FtQixVQUFVLENBQUMsSUFBSTFQLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ3FtQixVQUFVLENBQUM0ZixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNqbUMsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3dCLElBQUksQ0FBQyxDQUFDLElBQUlobkMsSUFBSSxDQUFDLENBQUMwaEQsT0FBTyxDQUFDLENBQUMsQ0FBQ3ZpQyxDQUFDLENBQUNxbUIsVUFBVSxDQUFDbnJDLE9BQU8sQ0FBQyxRQUFRLENBQUM4a0IsQ0FBQyxDQUFDcW1CLFVBQVUsQ0FBQ3JtQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDc2YsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUNwaEQsSUFBSSxDQUFDcWhELFNBQVMsQ0FBQ0MsU0FBUyxDQUFDeG1ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJcUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDK2MsQ0FBQyxDQUFDNW5CLFFBQVEsQ0FBQyxDQUFDbW5CLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3RjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrYyxDQUFDLENBQUM4bUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDNXJDLE9BQU8sQ0FBQyxRQUFRLENBQUNrQyxPQUFPLENBQUMsQ0FBQ2lwRCxNQUFNLENBQUMseUNBQXlDLENBQUNwVSxRQUFRLENBQUMsQ0FBQyxDQUFDbmYsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDd3pCLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlsaUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNxaUMsT0FBTyxDQUFDbG5CLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDK25CLFVBQVUsQ0FBQyxRQUFRLENBQUN0bkIsQ0FBQyxDQUFDLENBQUMsT0FBTzViLENBQUMsQ0FBQ21pRCxVQUFVLENBQUN2bUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDVCxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQytuQixVQUFVLENBQUMsUUFBUSxDQUFDaHRDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcwbEIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDaGYsQ0FBQyxDQUFDbUQsTUFBTSxDQUFDMkcsQ0FBQyxDQUFDa2pDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUN0bkIsQ0FBQyxDQUFDL0YsVUFBVSxDQUFDM2YsQ0FBQyxDQUFDbUQsTUFBTSxDQUFDMkcsQ0FBQyxDQUFDa2pDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDaHRDLENBQUMsQ0FBQzBvQix3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDd2pDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoZ0IsT0FBTyxDQUFDN21CLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDMG5CLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQ29mLGtCQUFrQixFQUFFLElBQUksQ0FBQ3R1RCxRQUFRLENBQUN3bkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMwbkIsVUFBVSxDQUFDLElBQUksQ0FBQ29mLGtCQUFrQixDQUFDLENBQUM5bUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMwbkIsVUFBVSxDQUFDLElBQUksQ0FBQ3FmLGdCQUFnQixDQUFDLENBQUMsQ0FBQ0osVUFBVSxDQUFDLFFBQVEsQ0FBQ25pRCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ25CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJqRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxhQUFhLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMxaUQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMmlELGVBQWUsQ0FBQzNpRCxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsR0FBR3Z5QixDQUFDLENBQUM4Z0IsS0FBSyxDQUFDcFUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQzFULE9BQU8sQ0FBQ2lwRCxNQUFNLEVBQUVqaUQsQ0FBQyxDQUFDM0csTUFBTSxDQUFDdUcsUUFBUSxDQUFDZ2MsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUN5VSxPQUFPLENBQUMsSUFBSSxDQUFDOVUsT0FBTyxDQUFDaXBELE1BQU0sQ0FBQyxDQUFDenFELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPKzZCLENBQUMsRUFBRSxDQUFDN2xCLENBQUMsRUFBRSxJQUFJLENBQUNrMkMsYUFBYSxDQUFDNWlELENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNmlELGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQzdwRCxPQUFPLENBQUMwMUIsS0FBSyxDQUFDLElBQUksQ0FBQ20wQixhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUNDLGdCQUFnQixDQUFDdHdDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdGMsQ0FBQyxDQUFDMnNELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzdwRCxPQUFPLENBQUMwMUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxMEIsaUJBQWlCLENBQUMvaUQsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDZ2pELGNBQWMsQ0FBQ2hqRCxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3lpRCxhQUFhLENBQUMsSUFBSSxDQUFDUSxXQUFXLENBQUNqakQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5aUQsYUFBYSxDQUFDLENBQUMsQ0FBQ3ppRCxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRzFCLENBQUMsQ0FBQzFHLElBQUksQ0FBQ2xWLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxJQUFJLENBQUM2cEMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUV0bkIsQ0FBQyxDQUFDL0YsVUFBVSxDQUFDN1YsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLElBQUksQ0FBQzZwQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUNvZixrQkFBa0IsQ0FBQyxRQUFRLENBQUMxbUMsQ0FBQyxDQUFDLENBQUMsT0FBTzFsQixDQUFDLENBQUNndEQsVUFBVSxDQUFDdG5DLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMm1DLGdCQUFnQixDQUFDLFFBQVEsQ0FBQzNtQyxDQUFDLENBQUMsQ0FBQyxPQUFPMWxCLENBQUMsQ0FBQ3dzRCxRQUFRLENBQUM5bUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1bkIsUUFBUSxDQUFDbW5CLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDK25CLFVBQVUsQ0FBQyxJQUFJLENBQUNvZixrQkFBa0IsQ0FBQyxDQUFDbm5DLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDK25CLFVBQVUsQ0FBQyxJQUFJLENBQUNxZixnQkFBZ0IsQ0FBQyxDQUFDdmlELENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUN6ZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FrRCxVQUFVLENBQUMsUUFBUSxDQUFDbGpELENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN3aUQsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDNW1DLENBQUMsQ0FBQzRtQixFQUFFLENBQUNzZixFQUFFLEVBQUUsQ0FBQyxDQUFDOXRELFFBQVEsQ0FBQ212RCxZQUFZLEVBQUUsQ0FBQyxDQUFDbnZELFFBQVEsQ0FBQ212RCxZQUFZLENBQUMsRUFBRSxDQUFDbmpELENBQUMsQ0FBQzJkLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQytrQyxRQUFRLENBQUMxaUQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsQ0FBQzhnQixLQUFLLENBQUMsRUFBRSxDQUFDOWdCLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQ29CLE1BQU0sRUFBRXBmLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQ3dCLE9BQU8sRUFBRXhmLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQzJCLE9BQU8sRUFBRTNmLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQzhCLFFBQVEsQ0FBQyxJQUFJLENBQUNzakMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUNBLGtCQUFrQixDQUFDLE9BQU8sSUFBSSxDQUFDVixRQUFRLENBQUMxaUQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDQSxDQUFDLENBQUM4Z0IsS0FBSyxFQUFFOWdCLENBQUMsQ0FBQzJkLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDNmtDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDWSxVQUFVLENBQUNyakQsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3lsQyxpQkFBaUIsQ0FBQy9pRCxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNnakQsY0FBYyxDQUFDaGpELENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDeWlELGFBQWEsQ0FBQyxJQUFJLENBQUNRLFdBQVcsQ0FBQyxJQUFJLENBQUNOLGVBQWUsQ0FBQzNpRCxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5aUQsYUFBYSxDQUFDLElBQUksQ0FBQ1ksVUFBVSxDQUFDcmpELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBpRCxRQUFRLENBQUMxaUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3lpRCxhQUFhLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDMWlELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hNLFFBQVEsQ0FBQ3duQixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzBuQixVQUFVLENBQUMsSUFBSSxDQUFDb2Ysa0JBQWtCLENBQUMsQ0FBQzltQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzBuQixVQUFVLENBQUMsSUFBSSxDQUFDcWYsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUNFLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQ0EsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDemlELENBQUMsQ0FBQzNHLE1BQU0sR0FBRyxJQUFJLENBQUNzcEQsZUFBZSxDQUFDdHBELE1BQU0sRUFBRXVpQixDQUFDLENBQUMxRyxJQUFJLENBQUNsVixDQUFDLENBQUMzRyxNQUFNLENBQUMsSUFBSSxDQUFDNnBDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ29nQixVQUFVLENBQUN0akQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4aUQsZ0JBQWdCLEVBQUUsQ0FBQ2owQixZQUFZLENBQUMsSUFBSSxDQUFDaTBCLGdCQUFnQixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNBLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDTSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZrRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtQixDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUN5bEMsaUJBQWlCLENBQUMsUUFBUSxDQUFDbm5DLENBQUMsQ0FBQyxDQUFDLE9BQU9oaUIsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQzV0QixJQUFJLENBQUM4ckMsR0FBRyxDQUFDLElBQUksQ0FBQ2lkLGVBQWUsQ0FBQy9pQyxLQUFLLENBQUNoRSxDQUFDLENBQUNnRSxLQUFLLENBQUMsQ0FBQ2htQixJQUFJLENBQUM4ckMsR0FBRyxDQUFDLElBQUksQ0FBQ2lkLGVBQWUsQ0FBQzlpQyxLQUFLLENBQUNqRSxDQUFDLENBQUNpRSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzdtQixPQUFPLENBQUM2MEMsUUFBUSxDQUFDLENBQUNtVixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ0gsYUFBYSxDQUFDLENBQUNJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNWLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNobkMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQytnQixNQUFNLENBQUMsQ0FBQ3QxQyxHQUFHLENBQUMsUUFBUSxDQUFDak8sQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3BtQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDeGlDLENBQUMsQ0FBQyxDQUFDM0ksU0FBUyxDQUFDLEdBQUcsQ0FBQ3FWLEVBQUUsR0FBRzZsQixDQUFDLENBQUN5UCxDQUFDLENBQUN3aEIsT0FBTyxDQUFDOTJDLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3doQixPQUFPLENBQUM5MkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDd2hCLE9BQU8sQ0FBQzkyQyxDQUFDLENBQUMsQ0FBQy9YLElBQUksQ0FBQyxDQUFDdUIsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZYLElBQUksQ0FBQyxRQUFRLENBQUN5bUIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3BtQixDQUFDLENBQUM0bkMsT0FBTyxDQUFDeGpELENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2dpQyxDQUFDLEVBQUUsQ0FBQ3pQLENBQUMsRUFBRTNXLENBQUMsQ0FBQ3ltQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMxckMsVUFBVSxFQUFFLEVBQUUsR0FBR2lsQixDQUFDLENBQUN5bUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDMXJDLFVBQVUsQ0FBQ3BCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQ21YLENBQUMsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDeHFDLE1BQU0sQ0FBQ2tWLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNrUCxDQUFDLENBQUM1aUIsT0FBTyxDQUFDZ3BDLENBQUMsQ0FBQ3QxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFczFCLENBQUMsQ0FBQ3QxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JVLEtBQUssQ0FBQ3VqQixDQUFDLENBQUN5bUIsT0FBTyxDQUFDbnNDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWhCLFFBQVEsQ0FBQyxRQUFRLENBQUN6akQsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQ0osUUFBUSxDQUFDcEUsV0FBVyxDQUFDLENBQUMsRUFBRW9nQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ3NlLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDMUMsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxjQUFjLENBQUM5bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2toQixLQUFLLENBQUMsQ0FBQzVzRCxPQUFPLENBQUMsUUFBUSxDQUFDbXNDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQ2pxQyxPQUFPLENBQUMsQ0FBQzJxRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNoZ0MsUUFBUSxDQUFDLFFBQVEsQ0FBQ2lnQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNuSSxNQUFNLENBQUMsTUFBTSxDQUFDb0ksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM5bkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDK25DLE1BQU0sQ0FBQyxVQUFVLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzE3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMyN0IsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUNDLFdBQVcsQ0FBQyxFQUFFLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLEVBQUUsQ0FBQzF4QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMyNEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDZ1osSUFBSSxDQUFDLElBQUksQ0FBQzE5QyxLQUFLLENBQUMsSUFBSSxDQUFDaVAsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOHRCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUNsckMsT0FBTyxDQUFDaXJELE1BQU0sRUFBRSxJQUFJLENBQUNhLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM5ckQsT0FBTyxDQUFDMnFELFVBQVUsRUFBRSxJQUFJLENBQUM3ZSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDaWdCLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM3QyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMxZCxVQUFVLENBQUMsUUFBUSxDQUFDNW9CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytpQyxNQUFNLENBQUNubkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHNGIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDb3BDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNELG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxZ0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzRmLE1BQU0sRUFBRSxJQUFJLENBQUM1aEIsT0FBTyxDQUFDLENBQUM3MUIsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5NEMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNELHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMzQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ08sYUFBYSxDQUFDLFFBQVEsQ0FBQzVpRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQ2lyRCxNQUFNLEVBQUUvdEQsQ0FBQyxDQUFDeUosUUFBUSxFQUFFaWMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUN5VSxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQ3RXLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwa0IsTUFBTSxDQUFDLElBQUksQ0FBQ2dwQyxVQUFVLENBQUNsbEQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa2MsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDaXBDLGtCQUFrQixDQUFDbmxELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ29sRCxZQUFZLENBQUNsdkQsQ0FBQyxDQUFDZ3VELFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUNodUQsQ0FBQyxDQUFDZ3VELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa0IsWUFBWSxDQUFDLFFBQVEsQ0FBQ3BsRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxbEQsWUFBWSxDQUFDLElBQUksQ0FBQ3J4RCxRQUFRLENBQUM4UCxJQUFJLENBQUM5RCxDQUFDLENBQUMsQ0FBQzdILEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk2SCxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDekUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQ3dNLFFBQVEsQ0FBQzNqQixDQUFDLENBQUNvSCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNvK0IsVUFBVSxDQUFDeGxDLENBQUMsQ0FBQ3dsQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQ3psQyxDQUFDLENBQUN5bEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDdEssTUFBTSxDQUFDbjdCLENBQUMsQ0FBQ203QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtcUIsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUNBLFlBQVksQ0FBQzMxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDMjFDLFlBQVksQ0FBQyxDQUFDLENBQUNGLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ25sRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2bkIsaUJBQWlCLENBQUMsSUFBSSxDQUFDam5CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdStCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzViLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDazVCLENBQUMsQ0FBQ3prQixPQUFPLENBQUM1WCxDQUFDLENBQUMsQ0FBQ3NCLE1BQU0sRUFBRW9rQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWhCLFFBQVEsQ0FBQ3Z0RCxDQUFDLENBQUMsQ0FBQyxDQUFDK3NELFdBQVcsQ0FBQyxRQUFRLENBQUNqakQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUNpckQsTUFBTSxDQUFDLElBQUksQ0FBQ3NCLGFBQWEsQ0FBQ3ZsRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4a0MsU0FBUyxDQUFDLElBQUksQ0FBQ21mLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3VCLHVCQUF1QixDQUFDLENBQUMsQ0FBQzVwQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsRUFBRSxDQUFDN3BDLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDeHdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUN5d0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxJQUFJLENBQUMxQixNQUFNLENBQUM5c0MsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQzI0QixZQUFZLENBQUMsSUFBSSxDQUFDbVUsTUFBTSxDQUFDblUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNVQsWUFBWSxDQUFDLElBQUksQ0FBQytuQixNQUFNLENBQUMvbkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwcEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDM0IsTUFBTSxDQUFDNzFDLE9BQU8sQ0FBQyxDQUFDLENBQUN4SyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLE9BQU8sR0FBR2dZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMzZixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3F1RCxXQUFXLENBQUMsSUFBSSxDQUFDeGpCLE9BQU8sQ0FBQ2xILE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMnFCLGVBQWUsQ0FBQzlsRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrbEQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDN2dDLFFBQVEsQ0FBQyxJQUFJLENBQUM4Z0MsaUJBQWlCLENBQUNobUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaW1ELGFBQWEsQ0FBQ2ptRCxDQUFDLENBQUM0ZixLQUFLLENBQUMsSUFBSSxDQUFDc21DLGFBQWEsQ0FBQ2xtRCxDQUFDLENBQUM2ZixLQUFLLENBQUMzcEIsQ0FBQyxDQUFDNnRELFFBQVEsRUFBRSxJQUFJLENBQUNvQyx1QkFBdUIsQ0FBQ2p3RCxDQUFDLENBQUM2dEQsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDcUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM3akIsUUFBUSxDQUFDLE9BQU8sQ0FBQ3ZpQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FtRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNiLHVCQUF1QixDQUFDLENBQUMsQ0FBQzVwQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsRUFBRSxDQUFDdnZELENBQUMsQ0FBQ293RCxhQUFhLEVBQUUxcUMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUNjLGNBQWMsQ0FBQyxJQUFJLENBQUN2bUQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcWpELFVBQVUsQ0FBQ3JqRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxFQUFFN3BDLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDZSxTQUFTLENBQUMsSUFBSSxDQUFDeG1ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhsRCxlQUFlLENBQUMsUUFBUSxDQUFDbHFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3VmLE1BQU0sQ0FBQyxDQUFDOTNCLEdBQUcsQ0FBQyxJQUFJLENBQUN3aUQsV0FBVyxDQUFDeGlELEdBQUcsQ0FBQyxJQUFJLENBQUNvakQsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQzBsQixJQUFJLENBQUMsSUFBSSxDQUFDODhCLFdBQVcsQ0FBQzk4QixJQUFJLENBQUMsSUFBSSxDQUFDMDlCLE9BQU8sQ0FBQzE5QixJQUFJLENBQUN3N0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDbjlDLE1BQU0sQ0FBQyxJQUFJLENBQUNzL0MsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDeGdELFFBQVEsQ0FBQyxJQUFJLENBQUN5Z0Qsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeHJCLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQyxDQUFDMkssSUFBSSxDQUFDbk4sQ0FBQyxDQUFDZ0UsS0FBSyxDQUFDLElBQUksQ0FBQ3ViLE1BQU0sQ0FBQ3BTLElBQUksQ0FBQzFsQixHQUFHLENBQUN1WSxDQUFDLENBQUNpRSxLQUFLLENBQUMsSUFBSSxDQUFDc2IsTUFBTSxDQUFDOTNCLEdBQUcsQ0FBQyxDQUFDLENBQUNnZ0QsVUFBVSxDQUFDLFFBQVEsQ0FBQ3JqRCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMHZELGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDenFCLE1BQU0sQ0FBQy96QixNQUFNLENBQUMsSUFBSSxDQUFDcy9DLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3hoQyxRQUFRLENBQUMsSUFBSSxDQUFDOGdDLGlCQUFpQixDQUFDaG1ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZsRCxXQUFXLENBQUMsSUFBSSxDQUFDZSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDMXdELENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3MwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN0a0IsUUFBUSxDQUFDLE1BQU0sQ0FBQ3ZpQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNtd0IsUUFBUSxDQUFDLElBQUk5bUMsQ0FBQyxDQUFDa0MsS0FBSyxDQUFDLFNBQVMsQ0FBQzlkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa2xCLFFBQVEsQ0FBQ3FOLENBQUMsQ0FBQ3JOLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQysrQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNodEMsS0FBSyxDQUFDOFIsSUFBSSxDQUFDLElBQUksQ0FBQzdELFFBQVEsQ0FBQzZELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDazdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ2h0QyxLQUFLLENBQUM1VCxHQUFHLENBQUMsSUFBSSxDQUFDNmhCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUMsSUFBSSxDQUFDdVksQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLEVBQUU3cEMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUNaLElBQUksQ0FBQyxJQUFJLENBQUM3a0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NqRCxVQUFVLENBQUMsUUFBUSxDQUFDdGpELENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPM1csQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUN6c0QsT0FBTyxDQUFDc3RELGFBQWEsRUFBRSxDQUFDL3pCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDcUIsSUFBSSxDQUFDLElBQUksQ0FBQzltRCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyttRCxPQUFPLEVBQUUsQ0FBQ3gwQixDQUFDLENBQUMsSUFBSSxDQUFDdzBCLE9BQU8sQ0FBQyxJQUFJLENBQUNBLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMvdEQsT0FBTyxDQUFDb3JELE1BQU0sRUFBRSxDQUFDN3hCLENBQUMsRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQ29yRCxNQUFNLEVBQUU3eEIsQ0FBQyxFQUFFLElBQUksQ0FBQ3Y1QixPQUFPLENBQUNvckQsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFeG9DLENBQUMsQ0FBQ3ZtQixVQUFVLENBQUMsSUFBSSxDQUFDMkQsT0FBTyxDQUFDb3JELE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQ3ByRCxPQUFPLENBQUNvckQsTUFBTSxDQUFDanZELElBQUksQ0FBQyxJQUFJLENBQUNrdEMsT0FBTyxDQUFDOVAsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUMsSUFBSSxDQUFDcW9DLE1BQU0sQ0FBQyxDQUFDdDJCLE9BQU8sQ0FBQyxJQUFJLENBQUNvNEIsZ0JBQWdCLENBQUNqMkIsUUFBUSxDQUFDLElBQUksQ0FBQzkyQixPQUFPLENBQUNxckQsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNudUQsQ0FBQyxDQUFDcXNDLFFBQVEsQ0FBQyxNQUFNLENBQUN2aUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU5SixDQUFDLENBQUNtd0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOWpCLFFBQVEsQ0FBQyxNQUFNLENBQUN2aUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDcW1ELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNELFFBQVEsQ0FBQyxRQUFRLENBQUMxaUQsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNzbEQsY0FBYyxDQUFDLENBQUMsQ0FBQzFwQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsRUFBRTdwQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQ3VCLFFBQVEsQ0FBQyxJQUFJLENBQUNobkQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaW5ELGFBQWEsQ0FBQ3o2QyxFQUFFLENBQUN4TSxDQUFDLENBQUMzRyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUNncEMsT0FBTyxDQUFDL2pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzFDLENBQUMsQ0FBQzRtQixFQUFFLENBQUNraEIsS0FBSyxDQUFDcnNELFNBQVMsQ0FBQ3FyRCxRQUFRLENBQUN2dEQsSUFBSSxDQUFDLElBQUksQ0FBQzZLLENBQUMsQ0FBQyxDQUFDLENBQUNpaUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNnQyxNQUFNLENBQUN6M0MsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDazJDLFFBQVEsQ0FBQyxJQUFJOW1DLENBQUMsQ0FBQ2tDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQ3prQixNQUFNLENBQUMsSUFBSSxDQUFDZ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNna0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ25CLFVBQVUsQ0FBQyxRQUFRLENBQUNsbEQsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNoSCxPQUFPLENBQUNrakIsTUFBTSxDQUFDLENBQUMsQ0FBQ04sQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUN5VSxPQUFPLENBQUMsSUFBSSxDQUFDdTBCLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsSUFBSSxDQUFDOUssT0FBTyxDQUFDa2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMxa0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1dEQsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrQyxhQUFhLENBQUMsSUFBSSxDQUFDanVELE9BQU8sQ0FBQ2tqQixNQUFNLENBQUMsSUFBSSxDQUFDbW1CLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsSUFBSSxDQUFDOUssT0FBTyxDQUFDa2pCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ21tQixPQUFPLENBQUMsSUFBSSxDQUFDeUMsU0FBUyxDQUFDLElBQUksQ0FBQ21pQixhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDakMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMxZ0IsWUFBWSxDQUFDLElBQUksQ0FBQzJpQixhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDMUIsYUFBYSxDQUFDLFFBQVEsQ0FBQ3ZsRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ3U1QixDQUFDLENBQUMzVyxDQUFDLENBQUN2bUIsVUFBVSxDQUFDYSxDQUFDLENBQUMrdEQsTUFBTSxDQUFDLENBQUN2M0MsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzFsQixDQUFDLENBQUMrdEQsTUFBTSxDQUFDNXJELEtBQUssQ0FBQyxJQUFJLENBQUNncUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNyaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRzlKLENBQUMsQ0FBQyt0RCxNQUFNLENBQUMsSUFBSSxDQUFDNWhCLE9BQU8sQ0FBQ2pwQyxLQUFLLENBQUMsQ0FBQyxDQUFDODFCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUNtVCxPQUFPLENBQUMsT0FBTzMxQixDQUFDLENBQUMwQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM1VyxNQUFNLEVBQUVrVixDQUFDLENBQUNpWCxRQUFRLENBQUMsUUFBUSxHQUFHenRCLENBQUMsQ0FBQ3l0QixRQUFRLENBQUMsSUFBSSxDQUFDMGUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDMXJDLFVBQVUsQ0FBQ1QsQ0FBQyxDQUFDeXRCLFFBQVEsQ0FBQyxDQUFDNE8sQ0FBQyxFQUFFN2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3lpQixvQkFBb0IsQ0FBQyxDQUFDLENBQUNwNEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzIxQixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUNyaEMsSUFBSSxDQUFDMEwsQ0FBQyxDQUFDeUssR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUV6SyxDQUFDLENBQUN5SyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDekssQ0FBQyxDQUFDLENBQUNvNEMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM5akQsSUFBSSxDQUFDLElBQUksQ0FBQ3FoQyxPQUFPLENBQUNsckIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNrckIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcHJCLEtBQUssQ0FBQ2lPLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDaWhDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQ25tRCxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBT0EsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDekUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNxZ0IsQ0FBQyxDQUFDbmlCLE9BQU8sQ0FBQ3VHLENBQUMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxDQUFDK29CLElBQUksQ0FBQyxDQUFDL29CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FELEdBQUcsQ0FBQyxDQUFDckQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHQSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNtN0IsTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDL29CLENBQUMsQ0FBQytvQixJQUFJLENBQUMsSUFBSSxDQUFDMDlCLE9BQU8sQ0FBQzE5QixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcvb0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDbTdCLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQzJLLElBQUksQ0FBQyxJQUFJLENBQUNtK0IsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDamxCLENBQUMsQ0FBQzhrQixLQUFLLENBQUMsSUFBSSxDQUFDMmhDLE9BQU8sQ0FBQzE5QixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcvb0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDbTdCLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsQ0FBQ3JELENBQUMsQ0FBQ3FELEdBQUcsQ0FBQyxJQUFJLENBQUNvakQsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBR3JELENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ203QixNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUMsSUFBSSxDQUFDNmpELGlCQUFpQixDQUFDNzdCLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUNxckMsTUFBTSxDQUFDLElBQUksQ0FBQ29iLE9BQU8sQ0FBQ3BqRCxHQUFHLENBQUMsQ0FBQyxDQUFDOGpELFdBQVcsQ0FBQyxRQUFRLENBQUN2ckMsQ0FBQyxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUM1YSxJQUFJLENBQUM0YSxDQUFDLENBQUNvOUIsT0FBTyxDQUFDLEVBQUVwOUIsQ0FBQyxHQUFHLElBQUksQ0FBQzVuQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzB5RCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkxbUQsQ0FBQyxDQUFDLElBQUksQ0FBQ2s4QixZQUFZLENBQUNmLE1BQU0sQ0FBQyxDQUFDLENBQUNqbEMsQ0FBQyxDQUFDLElBQUksQ0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMyeEQsV0FBVyxFQUFFLElBQUksQ0FBQzdWLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRzU1QyxDQUFDLEVBQUUwbEIsQ0FBQyxDQUFDcGYsUUFBUSxDQUFDLElBQUksQ0FBQ3N6QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNVQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2w4QixDQUFDLENBQUMrb0IsSUFBSSxFQUFFLElBQUksQ0FBQyttQixZQUFZLENBQUMzbEIsVUFBVSxDQUFDLENBQUMsQ0FBQ25xQixDQUFDLENBQUNxRCxHQUFHLEVBQUUsSUFBSSxDQUFDeXNDLFlBQVksQ0FBQzVsQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaTlCLFdBQVcsQ0FBQyxJQUFJLENBQUNqckIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2w4QixDQUFDLENBQUMsQ0FBQ3FELEdBQUcsQ0FBQyxDQUFDLENBQUMwbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzFsQixHQUFHLENBQUNyRCxDQUFDLENBQUNxRCxHQUFHLENBQUMsQ0FBQ3lzQixRQUFRLENBQUMsSUFBSSxDQUFDb00sWUFBWSxDQUFDL2tCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDNFIsSUFBSSxDQUFDL29CLENBQUMsQ0FBQytvQixJQUFJLENBQUMsQ0FBQytHLFFBQVEsQ0FBQyxJQUFJLENBQUNvTSxZQUFZLENBQUMva0IsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd3ZDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUNoQixXQUFXLENBQUMsTUFBTSxDQUFDdGlELEdBQUcsQ0FBQyxDQUFDLENBQUMwbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUluTixDQUFDLENBQUMsSUFBSSxDQUFDeW1CLE9BQU8sQ0FBQ25kLFFBQVEsQ0FBQyxDQUFDLENBQUNsbEIsQ0FBQyxDQUFDLElBQUksQ0FBQ21uRCxXQUFXLENBQUMsSUFBSSxDQUFDclgsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDenNDLEdBQUcsQ0FBQ3VZLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQyxDQUFDeXNCLFFBQVEsQ0FBQyxJQUFJLENBQUNtMEIsTUFBTSxDQUFDOXNDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDblgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4dkMsWUFBWSxDQUFDNWxCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25CLElBQUksQ0FBQ25OLENBQUMsQ0FBQ21OLElBQUksQ0FBQyxDQUFDK0csUUFBUSxDQUFDLElBQUksQ0FBQ20wQixNQUFNLENBQUM5c0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNuWCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzh2QyxZQUFZLENBQUMzbEIsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN6eStCLENBQUMsQ0FBQ3U3QixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNlLE9BQU8sQ0FBQyxDQUFDMTlCLElBQUksQ0FBQytHLFFBQVEsQ0FBQyxJQUFJLENBQUN1UyxPQUFPLENBQUNsckIsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzlULEdBQUcsQ0FBQ3lzQixRQUFRLENBQUMsSUFBSSxDQUFDdVMsT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMyTixLQUFLLENBQUNnTCxRQUFRLENBQUMsSUFBSSxDQUFDdVMsT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUNrMEIsTUFBTSxDQUFDdmIsUUFBUSxDQUFDLElBQUksQ0FBQ3VTLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3F1Qyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBCLGlCQUFpQixDQUFDLENBQUNqaUMsS0FBSyxDQUFDLElBQUksQ0FBQ2cvQixNQUFNLENBQUN6ZSxVQUFVLENBQUMsQ0FBQyxDQUFDbmEsTUFBTSxDQUFDLElBQUksQ0FBQzQ0QixNQUFNLENBQUN4ZSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJnQixlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcG1ELENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLElBQUksQ0FBQzFULE9BQU8sQ0FBQ2dwQyxDQUFDLENBQUMsSUFBSSxDQUFDaHVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ296RCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMxNkMsQ0FBQyxDQUFDbzNDLFdBQVcsQ0FBQyxRQUFRLEdBQUdwM0MsQ0FBQyxDQUFDbzNDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsV0FBVyxDQUFDLENBQUNsb0MsQ0FBQyxDQUFDem5CLE1BQU0sQ0FBQyxDQUFDZzJCLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ1IsTUFBTSxDQUFDajFCLFFBQVEsQ0FBQzZpQixJQUFJLENBQUMsSUFBSSxDQUFDb1MsTUFBTSxDQUFDL3pCLE1BQU0sQ0FBQzJoQixJQUFJLENBQUNuTixDQUFDLENBQUN6bkIsTUFBTSxDQUFDLENBQUMrMUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpUixNQUFNLENBQUNqMUIsUUFBUSxDQUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUMvekIsTUFBTSxDQUFDL0QsR0FBRyxDQUFDdVksQ0FBQyxDQUFDem5CLE1BQU0sQ0FBQyxDQUFDZzJCLFVBQVUsQ0FBQyxDQUFDLENBQUN2TyxDQUFDLENBQUN6bkIsTUFBTSxDQUFDLENBQUM4d0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpaUMsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDLElBQUksQ0FBQ3doQyxPQUFPLENBQUMxOUIsSUFBSSxDQUFDbk4sQ0FBQyxDQUFDem5CLE1BQU0sQ0FBQyxDQUFDKzFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RPLENBQUMsQ0FBQ3puQixNQUFNLENBQUMsQ0FBQ2szQixNQUFNLENBQUMsQ0FBQyxFQUFFMlcsQ0FBQyxDQUFDN3BCLElBQUksQ0FBQ3hoQixVQUFVLENBQUNzdkMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDaWhCLGlCQUFpQixDQUFDNzdCLE1BQU0sQ0FBQyxJQUFJLENBQUNvN0IsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHcUosQ0FBQyxDQUFDbzNDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xvQyxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDLENBQUMvYyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lpQyxpQkFBaUIsQ0FBQ2ppQyxLQUFLLENBQUMsSUFBSSxDQUFDd2hDLE9BQU8sQ0FBQzE5QixJQUFJLENBQUMsQ0FBQ25OLENBQUMsQ0FBQ29tQixDQUFDLENBQUMsQ0FBQzNXLE1BQU0sQ0FBQyxDQUFDLEVBQUUyVyxDQUFDLENBQUM3cEIsSUFBSSxDQUFDeGhCLFVBQVUsQ0FBQ3N2QyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUNpaEIsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDLElBQUksQ0FBQ283QixPQUFPLENBQUNwakQsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ3FKLENBQUMsQ0FBQ28zQyxXQUFXLENBQUN2c0QsV0FBVyxHQUFHaUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDc3FELFdBQVcsQ0FBQ3AzQyxDQUFDLENBQUNvM0MsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUdwM0MsQ0FBQyxDQUFDbzNDLFdBQVcsRUFBRSxDQUFDcDNDLENBQUMsQ0FBQ28zQyxXQUFXLENBQUMsSUFBSSxDQUFDRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN0dEQsVUFBVSxDQUFDLENBQUNULENBQUMsQ0FBQzBsQixDQUFDLENBQUNsUCxDQUFDLENBQUNvM0MsV0FBVyxDQUFDLENBQUN2eEIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLEVBQUUsQ0FBQ3Z5QixDQUFDLENBQUMsZUFBZSxDQUFDZ0IsSUFBSSxDQUFDOUssQ0FBQyxDQUFDaWhCLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJzQyxXQUFXLENBQUMsQ0FBQyxDQUFDaDBCLFFBQVEsQ0FBQzU1QixDQUFDLENBQUNpaEIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzJZLFFBQVEsQ0FBQzU1QixDQUFDLENBQUNpaEIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMyWSxRQUFRLENBQUM1NUIsQ0FBQyxDQUFDaWhCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMyWSxRQUFRLENBQUM1NUIsQ0FBQyxDQUFDaWhCLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDblgsQ0FBQyxDQUFDcEcsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQytLLENBQUMsQ0FBQ3lULFdBQVcsQ0FBQ3pULENBQUMsQ0FBQ25OLFdBQVcsQ0FBQyxDQUFDbU4sQ0FBQyxDQUFDbk4sV0FBVyxDQUFDLENBQUMsQ0FBQzBLLFFBQVEsQ0FBQzU1QixDQUFDLENBQUNpaEIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzJZLFFBQVEsQ0FBQzU1QixDQUFDLENBQUNpaEIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyt2QyxpQkFBaUIsQ0FBQ2ppQyxLQUFLLENBQUMsSUFBSSxDQUFDd2hDLE9BQU8sQ0FBQzE5QixJQUFJLENBQUMsSUFBSSxDQUFDMDlCLE9BQU8sQ0FBQzNoQyxLQUFLLENBQUMsQ0FBQzlrQixDQUFDLENBQUNwRyxJQUFJLENBQUM0dEIsR0FBRyxDQUFDK0ssQ0FBQyxDQUFDMFQsWUFBWSxDQUFDMVQsQ0FBQyxDQUFDdUcsWUFBWSxDQUFDLENBQUN2RyxDQUFDLENBQUN1RyxZQUFZLENBQUMsQ0FBQyxDQUFDaEosUUFBUSxDQUFDNTVCLENBQUMsQ0FBQ2loQixHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDMlksUUFBUSxDQUFDNTVCLENBQUMsQ0FBQ2loQixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK3ZDLGlCQUFpQixDQUFDNzdCLE1BQU0sQ0FBQyxJQUFJLENBQUNvN0IsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQyxJQUFJLENBQUNvakQsT0FBTyxDQUFDcGIsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDK2IsaUJBQWlCLENBQUNseEQsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzR0RCxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzhDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ2hyQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUNrbEIsUUFBUSxDQUFDLENBQUMsSUFBSWh2QixDQUFDLENBQUMsVUFBVSxHQUFHMGxCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyVyxDQUFDLENBQUMsSUFBSSxDQUFDNDBCLFdBQVcsQ0FBQyxJQUFJLENBQUNyWCxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUN6c0MsR0FBRyxDQUFDckQsQ0FBQyxDQUFDcUQsR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUNqMUIsUUFBUSxDQUFDN0MsR0FBRyxDQUFDbk4sQ0FBQyxDQUFDLElBQUksQ0FBQ2lsQyxNQUFNLENBQUMvekIsTUFBTSxDQUFDL0QsR0FBRyxDQUFDbk4sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQ3l2RCxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUN4cUIsTUFBTSxDQUFDb3BCLE1BQU0sQ0FBQ2xoRCxHQUFHLENBQUNrdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0SSxNQUFNLENBQUNvcEIsTUFBTSxDQUFDbGhELEdBQUcsQ0FBQyxDQUFDbk4sQ0FBQyxDQUFDNnlCLElBQUksQ0FBQy9vQixDQUFDLENBQUMrb0IsSUFBSSxDQUFDLElBQUksQ0FBQ29TLE1BQU0sQ0FBQ2oxQixRQUFRLENBQUM2aUIsSUFBSSxDQUFDN3lCLENBQUMsQ0FBQyxJQUFJLENBQUNpbEMsTUFBTSxDQUFDL3pCLE1BQU0sQ0FBQzJoQixJQUFJLENBQUM3eUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQ3l2RCxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUN4cUIsTUFBTSxDQUFDb3BCLE1BQU0sQ0FBQ3g3QixJQUFJLENBQUN3SixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzRJLE1BQU0sQ0FBQ29wQixNQUFNLENBQUN4N0IsSUFBSSxDQUFDLENBQUM3eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzh2RCxpQkFBaUIsQ0FBQyxRQUFRLENBQUNwcUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsSUFBSSxDQUFDbkUsT0FBTyxDQUFDb3BDLENBQUMsQ0FBQyxJQUFJLENBQUMra0IsV0FBVyxDQUFDLElBQUksQ0FBQ3JYLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDck4sQ0FBQyxDQUFDN21CLENBQUMsQ0FBQ2dFLEtBQUssQ0FBQy9SLENBQUMsQ0FBQytOLENBQUMsQ0FBQ2lFLEtBQUssQ0FBQyxPQUFPdWlCLENBQUMsRUFBRSxJQUFJLENBQUNqSCxNQUFNLENBQUNvcEIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDcHBCLE1BQU0sQ0FBQ29wQixNQUFNLENBQUMsQ0FBQ2xoRCxHQUFHLENBQUMsSUFBSSxDQUFDeXNDLFlBQVksQ0FBQzVsQixTQUFTLENBQUMsQ0FBQyxDQUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyttQixZQUFZLENBQUMzbEIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNucUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOGpELFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQ3NELGlCQUFpQixDQUFDLENBQUM3MEIsQ0FBQyxDQUFDLElBQUksQ0FBQzYwQixpQkFBaUIsQ0FBQ2pzQixNQUFNLENBQUMsQ0FBQyxDQUFDamxDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzR0RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUN2eEIsQ0FBQyxDQUFDeEosSUFBSSxDQUFDLElBQUksQ0FBQys2QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUN2eEIsQ0FBQyxDQUFDbHZCLEdBQUcsQ0FBQyxJQUFJLENBQUN5Z0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDdnhCLENBQUMsQ0FBQ3hKLElBQUksQ0FBQyxJQUFJLENBQUMrNkIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDdnhCLENBQUMsQ0FBQ2x2QixHQUFHLENBQUMsQ0FBQyxDQUFDbk4sQ0FBQyxDQUFDLElBQUksQ0FBQzR0RCxXQUFXLENBQUNsb0MsQ0FBQyxDQUFDZ0UsS0FBSyxDQUFDLElBQUksQ0FBQ3ViLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQzJLLElBQUksQ0FBQzd5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3VzQyxDQUFDLENBQUN2c0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lsQyxNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLENBQUMsQ0FBQ25OLENBQUMsQ0FBQ2lFLEtBQUssQ0FBQyxJQUFJLENBQUNzYixNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUNuTixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzJYLENBQUMsQ0FBQzNYLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpbEMsTUFBTSxDQUFDL2MsS0FBSyxDQUFDL2EsR0FBRyxDQUFDLENBQUN1WSxDQUFDLENBQUNnRSxLQUFLLENBQUMsSUFBSSxDQUFDdWIsTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDN3lCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDdXNDLENBQUMsQ0FBQ3ZzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaWxDLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQzJLLElBQUksQ0FBQyxDQUFDbk4sQ0FBQyxDQUFDaUUsS0FBSyxDQUFDLElBQUksQ0FBQ3NiLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsQ0FBQ25OLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDMlgsQ0FBQyxDQUFDM1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lsQyxNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUMsQ0FBQyxDQUFDbEcsQ0FBQyxDQUFDNm1ELElBQUksRUFBRSxDQUFDdDNDLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQzZtRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa0MsYUFBYSxDQUFDdHNELElBQUksQ0FBQzByQixLQUFLLENBQUMsQ0FBQ3pYLENBQUMsQ0FBQyxJQUFJLENBQUNxNEMsYUFBYSxDQUFDLENBQUMvb0QsQ0FBQyxDQUFDNm1ELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN21ELENBQUMsQ0FBQzZtRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa0MsYUFBYSxDQUFDcjRDLENBQUMsQ0FBQzNYLENBQUMsQ0FBQ3dXLENBQUMsQ0FBQyxJQUFJLENBQUN5dUIsTUFBTSxDQUFDL2MsS0FBSyxDQUFDL2EsR0FBRyxFQUFFbk4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFd1csQ0FBQyxDQUFDLElBQUksQ0FBQ3l1QixNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUNuTixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUN5dUIsTUFBTSxDQUFDL2MsS0FBSyxDQUFDL2EsR0FBRyxFQUFFbk4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd1csQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDNm1ELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3QzQyxDQUFDLENBQUN2UCxDQUFDLENBQUM2bUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDdDNDLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDNm1ELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpQyxhQUFhLENBQUNyc0QsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQyxDQUFDbWQsQ0FBQyxDQUFDLElBQUksQ0FBQ3dqQixhQUFhLENBQUMsQ0FBQzlvRCxDQUFDLENBQUM2bUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3bUQsQ0FBQyxDQUFDNm1ELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpQyxhQUFhLENBQUN4akIsQ0FBQyxDQUFDdnNDLENBQUMsQ0FBQzhyQyxDQUFDLENBQUMsSUFBSSxDQUFDN0csTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxFQUFFN3lCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRThyQyxDQUFDLENBQUMsSUFBSSxDQUFDN0csTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDN3lCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhyQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUM3RyxNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLEVBQUU3eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQzdrQyxDQUFDLENBQUM2bUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDaGlCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUM2bUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDaGlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRzdrQyxDQUFDLENBQUN5bUQsSUFBSSxFQUFFLENBQUNuaEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3dqQixhQUFhLENBQUMsQ0FBQyxHQUFHLEdBQUc5b0QsQ0FBQyxDQUFDeW1ELElBQUksRUFBRSxDQUFDLzFDLENBQUMsQ0FBQyxJQUFJLENBQUNxNEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDN2lELEdBQUcsQ0FBQ3dLLENBQUMsQ0FBQyxJQUFJLENBQUNzdEIsTUFBTSxDQUFDL2MsS0FBSyxDQUFDL2EsR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUNqMUIsUUFBUSxDQUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUMvekIsTUFBTSxDQUFDL0QsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQ3NpRCxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUN4cUIsTUFBTSxDQUFDb3BCLE1BQU0sQ0FBQ2xoRCxHQUFHLENBQUMrK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNqSCxNQUFNLENBQUNvcEIsTUFBTSxDQUFDbGhELEdBQUcsQ0FBQyxDQUFDMGxCLElBQUksQ0FBQzBaLENBQUMsQ0FBQyxJQUFJLENBQUN0SCxNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLENBQUMsSUFBSSxDQUFDb1MsTUFBTSxDQUFDajFCLFFBQVEsQ0FBQzZpQixJQUFJLENBQUMsSUFBSSxDQUFDb1MsTUFBTSxDQUFDL3pCLE1BQU0sQ0FBQzJoQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDNDhCLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQ3hxQixNQUFNLENBQUNvcEIsTUFBTSxDQUFDeDdCLElBQUksQ0FBQ3FaLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDakgsTUFBTSxDQUFDb3BCLE1BQU0sQ0FBQ3g3QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNzOUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDL2hCLFlBQVksQ0FBQyxJQUFJLENBQUMyZixNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM1aEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ2dsQixtQkFBbUIsRUFBRSxJQUFJLENBQUNwRCxNQUFNLENBQUN2MEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1MEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNvRCxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNwQyxjQUFjLEVBQUUsSUFBSSxDQUFDamhCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3pCLFFBQVEsQ0FBQyxRQUFRLENBQUN2aUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLElBQUksQ0FBQ3MwQixPQUFPLENBQUMsQ0FBQyxDQUFDanJDLENBQUMsQ0FBQzRtQixFQUFFLENBQUMrZ0IsTUFBTSxDQUFDcHVELElBQUksQ0FBQyxJQUFJLENBQUM2SyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQ3Z4QixJQUFJLENBQUNoQixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzZsRCxXQUFXLENBQUMsSUFBSSxDQUFDZSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQ3IwQixDQUFDLENBQUM0SSxNQUFNLENBQUMsSUFBSSxDQUFDMHFCLFdBQVcsQ0FBQyxDQUFDanFDLENBQUMsQ0FBQyttQixNQUFNLENBQUN0ckMsU0FBUyxDQUFDa3JDLFFBQVEsQ0FBQ3B0QyxJQUFJLENBQUMsSUFBSSxDQUFDNkssQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUNpeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDLytCLFFBQVEsQ0FBQyxJQUFJLENBQUNBLFFBQVEsQ0FBQzZnQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNBLGdCQUFnQixDQUFDNXFCLE1BQU0sQ0FBQyxJQUFJLENBQUMwcUIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNqcUMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQytnQixNQUFNLENBQUN0MUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDOUcsS0FBSyxDQUFDLFFBQVEsQ0FBQ25ILENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM3QyxDQUFDLENBQUMsQ0FBQ3k5QyxJQUFJLENBQUNwaEIsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQzlQLENBQUMsQ0FBQyswQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMxckMsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDdjVCLE9BQU8sQ0FBQzZxRCxpQkFBaUIsQ0FBQyxDQUFDNXJELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkvQixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDMnJDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQ3J4RCxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDOEMsT0FBTyxDQUFDMkcsUUFBUSxFQUFFLENBQUM0eUIsQ0FBQyxDQUFDKzBCLFNBQVMsQ0FBQzN5RCxJQUFJLENBQUN1QixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDaXVELGdCQUFnQixDQUFDLENBQUMsQ0FBQ2p1RCxDQUFDLENBQUNxc0MsUUFBUSxDQUFDLFVBQVUsQ0FBQ3ZpQyxDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMEosSUFBSSxDQUFDLFFBQVEsQ0FBQ3BXLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM3QyxDQUFDLENBQUMsQ0FBQ3k5QyxJQUFJLENBQUNwaEIsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQzlQLENBQUMsQ0FBQzgwQixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pyQyxDQUFDLENBQUMzakIsSUFBSSxDQUFDczZCLENBQUMsQ0FBQyswQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJMXJDLENBQUMsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQzRyQyxNQUFNLENBQUMsQ0FBQzVyQyxDQUFDLENBQUM0ckMsTUFBTSxDQUFDLENBQUMsQ0FBQ2oxQixDQUFDLENBQUM4MEIsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUN6ckMsQ0FBQyxDQUFDeXJDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDenJDLENBQUMsQ0FBQzZyQyxVQUFVLENBQUMsQ0FBQ3ZpQyxRQUFRLENBQUN0SixDQUFDLENBQUM4ckMsV0FBVyxDQUFDdndDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzlULEdBQUcsQ0FBQ3VZLENBQUMsQ0FBQzhyQyxXQUFXLENBQUN2d0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDNFIsSUFBSSxDQUFDbk4sQ0FBQyxDQUFDOHJDLFdBQVcsQ0FBQ3Z3QyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ3lFLENBQUMsQ0FBQzBuQyxVQUFVLENBQUN0akQsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM1aUIsT0FBTyxDQUFDaXJELE1BQU0sQ0FBQ3JvQyxDQUFDLENBQUM1aUIsT0FBTyxDQUFDMnVELE9BQU8sQ0FBQyxDQUFDLENBQUMvckMsQ0FBQyxDQUFDeXJDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDenJDLENBQUMsQ0FBQzJtQixRQUFRLENBQUMsWUFBWSxDQUFDdmlDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtNEMsSUFBSSxDQUFDLFFBQVEsQ0FBQzdrRCxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUMzakIsSUFBSSxDQUFDczZCLENBQUMsQ0FBQyswQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJNTZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsSUFBSSxDQUFDQSxDQUFDLENBQUM2akIsV0FBVyxDQUFDdHpCLENBQUMsQ0FBQ3N6QixXQUFXLENBQUM3akIsQ0FBQyxDQUFDa2xCLGlCQUFpQixDQUFDMzBCLENBQUMsQ0FBQzIwQixpQkFBaUIsQ0FBQ2xsQixDQUFDLENBQUM3RyxNQUFNLENBQUMvYyxLQUFLLENBQUNtVSxDQUFDLENBQUM0SSxNQUFNLENBQUMvYyxLQUFLLENBQUM0akIsQ0FBQyxDQUFDNGxCLGVBQWUsQ0FBQzVsQixDQUFDLENBQUM2bEIsY0FBYyxDQUFDLEVBQUUsQ0FBQ243QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrUCxDQUFDLENBQUMzakIsSUFBSSxDQUFDczZCLENBQUMsQ0FBQyswQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3pCLFdBQVcsQ0FBQ3R6QixDQUFDLENBQUNzekIsV0FBVyxDQUFDLElBQUksQ0FBQ3FCLGlCQUFpQixDQUFDMzBCLENBQUMsQ0FBQzIwQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMvckIsTUFBTSxDQUFDL2MsS0FBSyxDQUFDbVUsQ0FBQyxDQUFDNEksTUFBTSxDQUFDL2MsS0FBSyxDQUFDLElBQUksR0FBRzRqQixDQUFDLEVBQUUsSUFBSSxDQUFDNGxCLGVBQWUsQ0FBQyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxFQUFFanNDLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQ3dsQyxDQUFDLENBQUNLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMzMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDd2xCLE1BQU0sRUFBRSxDQUFDeGxCLENBQUMsQ0FBQ3dsQixNQUFNLENBQUMsQ0FBQyxDQUFDajFCLENBQUMsQ0FBQ3UxQixPQUFPLENBQUM1eEQsQ0FBQyxDQUFDK3RELE1BQU0sQ0FBQzc4QyxNQUFNLENBQUMsQ0FBQyxDQUFDNDZCLENBQUMsQ0FBQytsQixXQUFXLENBQUM3eEQsQ0FBQyxDQUFDK3RELE1BQU0sQ0FBQ3RnQyxRQUFRLENBQUNxZSxDQUFDLENBQUNLLE9BQU8sQ0FBQyxDQUFDbnRCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOHNCLENBQUMsQ0FBQ2hwQyxPQUFPLENBQUMydUQsT0FBTyxDQUFDM2xCLENBQUMsQ0FBQ2hwQyxPQUFPLENBQUNpckQsTUFBTSxDQUFDamlCLENBQUMsQ0FBQ2hwQyxPQUFPLENBQUNpckQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTy90RCxDQUFDLENBQUMrdEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNqa0QsQ0FBQyxDQUFDM0csTUFBTSxDQUFDMm9DLENBQUMsQ0FBQytsQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMvbEIsQ0FBQyxDQUFDNGdCLGFBQWEsQ0FBQzVpRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUNpaEIsV0FBVyxDQUFDampELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQzdHLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsQ0FBQ2t2QixDQUFDLENBQUM0SSxNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUMyK0IsQ0FBQyxDQUFDN0csTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDd0osQ0FBQyxDQUFDNEksTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDaVosQ0FBQyxDQUFDN0csTUFBTSxDQUFDL3pCLE1BQU0sQ0FBQzJoQixJQUFJLEVBQUV3SixDQUFDLENBQUM0SSxNQUFNLENBQUMvekIsTUFBTSxDQUFDMmhCLElBQUksQ0FBQ2laLENBQUMsQ0FBQzdHLE1BQU0sQ0FBQy96QixNQUFNLENBQUMyaEIsSUFBSSxDQUFDaVosQ0FBQyxDQUFDN0csTUFBTSxDQUFDL3pCLE1BQU0sQ0FBQy9ELEdBQUcsRUFBRWt2QixDQUFDLENBQUM0SSxNQUFNLENBQUMvekIsTUFBTSxDQUFDL0QsR0FBRyxDQUFDMitCLENBQUMsQ0FBQzdHLE1BQU0sQ0FBQy96QixNQUFNLENBQUMvRCxHQUFHLENBQUNrdkIsQ0FBQyxDQUFDZ1EsUUFBUSxDQUFDLFlBQVksQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUN3MEIsT0FBTyxDQUFDL2tCLENBQUMsQ0FBQ0ssT0FBTyxDQUFDem1CLENBQUMsQ0FBQzNqQixJQUFJLENBQUNzNkIsQ0FBQyxDQUFDKzBCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ25ELGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1eEIsQ0FBQyxDQUFDdzFCLFdBQVcsQ0FBQ3gxQixDQUFDLENBQUM4UCxPQUFPLENBQUNMLENBQUMsQ0FBQ2dtQixXQUFXLENBQUN6MUIsQ0FBQyxDQUFDLENBQUN5UCxDQUFDLENBQUMrbEIsV0FBVyxFQUFFLENBQUMvbEIsQ0FBQyxDQUFDcWhCLFVBQVUsQ0FBQ3JqRCxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ2d2QixRQUFRLENBQUM4YyxDQUFDLENBQUM5YyxRQUFRLENBQUMsQ0FBQyxDQUFDOGMsQ0FBQyxDQUFDd2xCLE1BQU0sRUFBRSxDQUFDeGxCLENBQUMsQ0FBQ3dsQixNQUFNLENBQUMsQ0FBQyxDQUFDeGxCLENBQUMsQ0FBQ3FsQixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JsQixDQUFDLENBQUNocEMsT0FBTyxDQUFDaXZELE9BQU8sQ0FBQ2ptQixDQUFDLENBQUNocEMsT0FBTyxDQUFDb3JELE1BQU0sQ0FBQ3BpQixDQUFDLENBQUNocEMsT0FBTyxDQUFDb3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3BpQixDQUFDLENBQUNPLFFBQVEsQ0FBQyxLQUFLLENBQUN2aUMsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQzZrQixPQUFPLENBQUM3a0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDc2hCLFVBQVUsQ0FBQ3RqRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUNocEMsT0FBTyxDQUFDb3JELE1BQU0sQ0FBQ3BpQixDQUFDLENBQUNocEMsT0FBTyxDQUFDaXZELE9BQU8sQ0FBQ2ptQixDQUFDLENBQUNocEMsT0FBTyxDQUFDaXJELE1BQU0sQ0FBQ2ppQixDQUFDLENBQUNocEMsT0FBTyxDQUFDMnVELE9BQU8sQ0FBQzNsQixDQUFDLENBQUMwbEIsV0FBVyxFQUFFMWxCLENBQUMsQ0FBQzBsQixXQUFXLENBQUNoNEMsTUFBTSxDQUFDLENBQUMsQ0FBQ3haLENBQUMsQ0FBQyt0RCxNQUFNLENBQUN0Z0MsUUFBUSxDQUFDNE8sQ0FBQyxDQUFDdTFCLE9BQU8sQ0FBQyxDQUFDdjFCLENBQUMsQ0FBQ3V6QixlQUFlLENBQUM5bEQsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUNndkIsUUFBUSxDQUFDcU4sQ0FBQyxDQUFDeXpCLGlCQUFpQixDQUFDaG1ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQ2dRLFFBQVEsQ0FBQyxjQUFjLENBQUN2aUMsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDdzBCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ25yQyxDQUFDLENBQUMzakIsSUFBSSxDQUFDczZCLENBQUMsQ0FBQyswQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNuRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdm9DLENBQUMsQ0FBQzRtQixFQUFFLENBQUMrZ0IsTUFBTSxDQUFDdDFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM5RyxLQUFLLENBQUMsUUFBUSxDQUFDbkgsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDb21CLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQ3Y1QixPQUFPLENBQUMwVCxDQUFDLENBQUN5SyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzZxQixDQUFDLENBQUNrbUIsT0FBTyxDQUFDeDdDLENBQUMsQ0FBQ3lLLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDekssQ0FBQyxDQUFDeUssR0FBRyxDQUFDLFFBQVEsQ0FBQzZxQixDQUFDLENBQUMyWixNQUFNLENBQUMsQ0FBQyxDQUFDdmxDLElBQUksQ0FBQyxRQUFRLENBQUNwVyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUM2bEIsQ0FBQyxDQUFDdjVCLE9BQU8sQ0FBQzBULENBQUMsQ0FBQ3c3QyxPQUFPLEVBQUV0c0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDekUsR0FBRyxDQUFDLFFBQVEsQ0FBQ3pLLENBQUMsQ0FBQ3c3QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RzQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDK2dCLE1BQU0sQ0FBQ3QxQyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDOUcsS0FBSyxDQUFDLFFBQVEsQ0FBQ25ILENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzFsQixDQUFDLENBQUMrdEQsTUFBTSxDQUFDLENBQUNqaUIsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDdjVCLE9BQU8sQ0FBQzBULENBQUMsQ0FBQ3lLLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDNnFCLENBQUMsQ0FBQ21tQixRQUFRLENBQUN6N0MsQ0FBQyxDQUFDeUssR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUN6SyxDQUFDLENBQUN5SyxHQUFHLENBQUMsU0FBUyxDQUFDNnFCLENBQUMsQ0FBQ3haLE9BQU8sQ0FBQyxDQUFDLENBQUNwUyxJQUFJLENBQUMsUUFBUSxDQUFDcFcsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3Y1QixPQUFPLENBQUMwVCxDQUFDLENBQUN5N0MsUUFBUSxFQUFFdnNDLENBQUMsQ0FBQzFsQixDQUFDLENBQUMrdEQsTUFBTSxDQUFDLENBQUM5c0MsR0FBRyxDQUFDLFNBQVMsQ0FBQ3pLLENBQUMsQ0FBQ3k3QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZzQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDK2dCLE1BQU0sQ0FBQ3QxQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDOUcsS0FBSyxDQUFDLFFBQVEsQ0FBQ3lVLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNreUQscUJBQXFCLEVBQUUsQ0FBQ2x5RCxDQUFDLENBQUNreUQscUJBQXFCLENBQUNseUQsQ0FBQyxDQUFDK3RELE1BQU0sQ0FBQ25VLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1NUMsQ0FBQyxDQUFDa3lELHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHbHlELENBQUMsQ0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUdrQyxDQUFDLENBQUNreUQscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUNwUCxPQUFPLEVBQUUsQ0FBQzlpRCxDQUFDLENBQUNteUQsY0FBYyxDQUFDbnlELENBQUMsQ0FBQ2t5RCxxQkFBcUIsQ0FBQ2p0QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBwQixJQUFJLENBQUMsUUFBUSxDQUFDN2tELENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQzZsQixDQUFDLENBQUN2NUIsT0FBTyxDQUFDZ3BDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNvMUIsQ0FBQyxDQUFDNjFCLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDaG1CLENBQUMsQ0FBQzdQLENBQUMsQ0FBQ3YrQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNtSixDQUFDLEdBQUdpbEMsQ0FBQyxFQUFFLE1BQU0sR0FBR2psQyxDQUFDLENBQUM2N0MsT0FBTyxDQUFDLENBQUN0c0MsQ0FBQyxDQUFDazNDLElBQUksRUFBRSxHQUFHLEdBQUdsM0MsQ0FBQyxDQUFDazNDLElBQUksRUFBRSxDQUFDcnhCLENBQUMsQ0FBQzgxQixjQUFjLENBQUNobEQsR0FBRyxDQUFDbEcsQ0FBQyxDQUFDMjdCLFlBQVksQ0FBQzk0QixDQUFDLENBQUM2ZixLQUFLLENBQUNuVCxDQUFDLENBQUM4M0MsaUJBQWlCLENBQUNybkQsQ0FBQyxDQUFDK3NCLFNBQVMsQ0FBQzhYLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMrc0IsU0FBUyxDQUFDeGQsQ0FBQyxDQUFDKzNDLFdBQVcsQ0FBQ3prRCxDQUFDLENBQUM2ZixLQUFLLENBQUMwUyxDQUFDLENBQUM4MUIsY0FBYyxDQUFDaGxELEdBQUcsQ0FBQ3FKLENBQUMsQ0FBQzgzQyxpQkFBaUIsRUFBRSxDQUFDcm5ELENBQUMsQ0FBQytzQixTQUFTLENBQUM4WCxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDK3NCLFNBQVMsQ0FBQ3hkLENBQUMsQ0FBQyszQyxXQUFXLENBQUMsQ0FBQyxDQUFDLzNDLENBQUMsQ0FBQ2szQyxJQUFJLEVBQUUsR0FBRyxHQUFHbDNDLENBQUMsQ0FBQ2szQyxJQUFJLEVBQUUsQ0FBQ3J4QixDQUFDLENBQUM4MUIsY0FBYyxDQUFDdC9CLElBQUksQ0FBQzVyQixDQUFDLENBQUNpb0IsV0FBVyxDQUFDcGxCLENBQUMsQ0FBQzRmLEtBQUssQ0FBQ2xULENBQUMsQ0FBQzgzQyxpQkFBaUIsQ0FBQ3JuRCxDQUFDLENBQUNndEIsVUFBVSxDQUFDNlgsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ2d0QixVQUFVLENBQUN6ZCxDQUFDLENBQUMrM0MsV0FBVyxDQUFDemtELENBQUMsQ0FBQzRmLEtBQUssQ0FBQzJTLENBQUMsQ0FBQzgxQixjQUFjLENBQUN0L0IsSUFBSSxDQUFDcmMsQ0FBQyxDQUFDODNDLGlCQUFpQixFQUFFLENBQUNybkQsQ0FBQyxDQUFDZ3RCLFVBQVUsQ0FBQzZYLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNndEIsVUFBVSxDQUFDemQsQ0FBQyxDQUFDKzNDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLzNDLENBQUMsQ0FBQ2szQyxJQUFJLEVBQUUsR0FBRyxHQUFHbDNDLENBQUMsQ0FBQ2szQyxJQUFJLEVBQUUsQ0FBQzVqRCxDQUFDLENBQUM2ZixLQUFLLENBQUNqRSxDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUNsWSxTQUFTLENBQUMsQ0FBQyxDQUFDeGQsQ0FBQyxDQUFDODNDLGlCQUFpQixDQUFDeGlCLENBQUMsQ0FBQ3BtQixDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUNsWSxTQUFTLENBQUN0TyxDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUNsWSxTQUFTLENBQUMsQ0FBQyxDQUFDeGQsQ0FBQyxDQUFDKzNDLFdBQVcsQ0FBQyxDQUFDN29DLENBQUMsQ0FBQ3puQixNQUFNLENBQUMsQ0FBQ2szQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNyckIsQ0FBQyxDQUFDNmYsS0FBSyxDQUFDakUsQ0FBQyxDQUFDd21CLENBQUMsQ0FBQyxDQUFDbFksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDeGQsQ0FBQyxDQUFDODNDLGlCQUFpQixFQUFFLENBQUN4aUIsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3dtQixDQUFDLENBQUMsQ0FBQ2xZLFNBQVMsQ0FBQ3RPLENBQUMsQ0FBQ3dtQixDQUFDLENBQUMsQ0FBQ2xZLFNBQVMsQ0FBQyxDQUFDLENBQUN4ZCxDQUFDLENBQUMrM0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLzNDLENBQUMsQ0FBQ2szQyxJQUFJLEVBQUUsR0FBRyxHQUFHbDNDLENBQUMsQ0FBQ2szQyxJQUFJLEVBQUUsQ0FBQzVqRCxDQUFDLENBQUM0ZixLQUFLLENBQUNoRSxDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUNqWSxVQUFVLENBQUMsQ0FBQyxDQUFDemQsQ0FBQyxDQUFDODNDLGlCQUFpQixDQUFDeGlCLENBQUMsQ0FBQ3BtQixDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUNqWSxVQUFVLENBQUN2TyxDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUNqWSxVQUFVLENBQUMsQ0FBQyxDQUFDemQsQ0FBQyxDQUFDKzNDLFdBQVcsQ0FBQyxDQUFDN29DLENBQUMsQ0FBQ3puQixNQUFNLENBQUMsQ0FBQzh3QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNqbEIsQ0FBQyxDQUFDNGYsS0FBSyxDQUFDaEUsQ0FBQyxDQUFDd21CLENBQUMsQ0FBQyxDQUFDalksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDemQsQ0FBQyxDQUFDODNDLGlCQUFpQixFQUFFLENBQUN4aUIsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3dtQixDQUFDLENBQUMsQ0FBQ2pZLFVBQVUsQ0FBQ3ZPLENBQUMsQ0FBQ3dtQixDQUFDLENBQUMsQ0FBQ2pZLFVBQVUsQ0FBQyxDQUFDLENBQUN6ZCxDQUFDLENBQUMrM0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN6aUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFcG1CLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxFQUFFLENBQUMvNEMsQ0FBQyxDQUFDNDVDLGFBQWEsRUFBRTFxQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQ2MsY0FBYyxDQUFDaDBCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUMrZ0IsTUFBTSxDQUFDdDFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM5RyxLQUFLLENBQUMsUUFBUSxDQUFDbkgsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3Y1QixPQUFPLENBQUN1NUIsQ0FBQyxDQUFDKzFCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzFzQyxDQUFDLENBQUNsUCxDQUFDLENBQUNnNEMsSUFBSSxDQUFDbnRELFdBQVcsR0FBRzBILE1BQU0sQ0FBQ3lOLENBQUMsQ0FBQ2c0QyxJQUFJLENBQUNyUyxLQUFLLEVBQUUscUJBQXFCLENBQUMzbEMsQ0FBQyxDQUFDZzRDLElBQUksQ0FBQyxDQUFDenNELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkrSCxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDbTdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHNUksQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFOVAsQ0FBQyxDQUFDKzFCLFlBQVksQ0FBQzN6RCxJQUFJLENBQUMsQ0FBQ2cvQyxJQUFJLENBQUMsSUFBSSxDQUFDMXVCLEtBQUssQ0FBQ2psQixDQUFDLENBQUN3bEMsVUFBVSxDQUFDLENBQUMsQ0FBQ25hLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUN5bEMsV0FBVyxDQUFDLENBQUMsQ0FBQ3BpQyxHQUFHLENBQUNuTixDQUFDLENBQUNtTixHQUFHLENBQUMwbEIsSUFBSSxDQUFDN3lCLENBQUMsQ0FBQzZ5QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDODdCLElBQUksQ0FBQyxRQUFRLENBQUM3a0QsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDSyxDQUFDLENBQUM1MEIsQ0FBQyxDQUFDazNCLENBQUMsQ0FBQ1EsQ0FBQyxDQUFDSSxDQUFDLENBQUN0YixDQUFDLENBQUMrYixDQUFDLENBQUM3VCxDQUFDLENBQUN2NUIsT0FBTyxDQUFDcXRDLENBQUMsQ0FBQ0QsQ0FBQyxDQUFDd2UsYUFBYSxDQUFDemtELENBQUMsQ0FBQ2pLLENBQUMsQ0FBQ2lsQyxNQUFNLENBQUNwUyxJQUFJLENBQUNscUIsQ0FBQyxDQUFDc0IsQ0FBQyxDQUFDb3lCLENBQUMsQ0FBQzIwQixpQkFBaUIsQ0FBQ2ppQyxLQUFLLENBQUNqVixDQUFDLENBQUM5WixDQUFDLENBQUNpbEMsTUFBTSxDQUFDOTNCLEdBQUcsQ0FBQ2pHLENBQUMsQ0FBQzRTLENBQUMsQ0FBQ3VpQixDQUFDLENBQUMyMEIsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDLEdBQUcsQ0FBQ3NhLENBQUMsQ0FBQ3BULENBQUMsQ0FBQysxQixZQUFZLENBQUM5d0QsTUFBTSxDQUFDLENBQUMsQ0FBQ211QyxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ2xELENBQUMsQ0FBQ2xRLENBQUMsQ0FBQysxQixZQUFZLENBQUMzaUIsQ0FBQyxDQUFDLENBQUM1YyxJQUFJLENBQUN3SixDQUFDLENBQUNrMEIsT0FBTyxDQUFDMTlCLElBQUksQ0FBQ2xiLENBQUMsQ0FBQzQwQixDQUFDLENBQUNsUSxDQUFDLENBQUMrMUIsWUFBWSxDQUFDM2lCLENBQUMsQ0FBQyxDQUFDMWdCLEtBQUssQ0FBQzhmLENBQUMsQ0FBQ3hTLENBQUMsQ0FBQysxQixZQUFZLENBQUMzaUIsQ0FBQyxDQUFDLENBQUN0aUMsR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQ2swQixPQUFPLENBQUNwakQsR0FBRyxDQUFDa2lDLENBQUMsQ0FBQ1IsQ0FBQyxDQUFDeFMsQ0FBQyxDQUFDKzFCLFlBQVksQ0FBQzNpQixDQUFDLENBQUMsQ0FBQ3RhLE1BQU0sQ0FBQ29YLENBQUMsQ0FBQzRELENBQUMsQ0FBQ3huQyxDQUFDLEVBQUVzQixDQUFDLENBQUMwTixDQUFDLENBQUN3NEIsQ0FBQyxFQUFFdEIsQ0FBQyxDQUFDc0IsQ0FBQyxDQUFDanBDLENBQUMsRUFBRTRTLENBQUMsQ0FBQ3UxQixDQUFDLENBQUNjLENBQUMsRUFBRSxDQUFDenFCLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQysxQixDQUFDLENBQUMrMUIsWUFBWSxDQUFDM2lCLENBQUMsQ0FBQyxDQUFDZ08sSUFBSSxDQUFDbHpDLGFBQWEsQ0FBQzh4QixDQUFDLENBQUMrMUIsWUFBWSxDQUFDM2lCLENBQUMsQ0FBQyxDQUFDZ08sSUFBSSxDQUFDLENBQUMsQ0FBQ3BoQixDQUFDLENBQUMrMUIsWUFBWSxDQUFDM2lCLENBQUMsQ0FBQyxDQUFDNGlCLFFBQVEsRUFBRWgyQixDQUFDLENBQUN2NUIsT0FBTyxDQUFDMHJELElBQUksQ0FBQzhELE9BQU8sRUFBRWoyQixDQUFDLENBQUN2NUIsT0FBTyxDQUFDMHJELElBQUksQ0FBQzhELE9BQU8sQ0FBQ3J6RCxJQUFJLENBQUNvOUIsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDcmlDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzdpQixNQUFNLENBQUN3NUIsQ0FBQyxDQUFDczBCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzRCLFFBQVEsQ0FBQ2wyQixDQUFDLENBQUMrMUIsWUFBWSxDQUFDM2lCLENBQUMsQ0FBQyxDQUFDZ08sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDcGhCLENBQUMsQ0FBQysxQixZQUFZLENBQUMzaUIsQ0FBQyxDQUFDLENBQUM0aUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUduaUIsQ0FBQyxDQUFDdWUsUUFBUSxFQUFFLENBQUNqNEMsQ0FBQyxDQUFDMjVCLENBQUMsRUFBRXpzQyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDWCxDQUFDLENBQUMzbkMsQ0FBQyxDQUFDLENBQUM0a0MsQ0FBQyxDQUFDcUUsQ0FBQyxFQUFFenNDLElBQUksQ0FBQzhyQyxHQUFHLENBQUNILENBQUMsQ0FBQ3YxQixDQUFDLENBQUMsQ0FBQzdTLENBQUMsQ0FBQ2twQyxDQUFDLEVBQUV6c0MsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQ2pELENBQUMsQ0FBQzVqQyxDQUFDLENBQUMsQ0FBQ3VqQyxDQUFDLENBQUNpRSxDQUFDLEVBQUV6c0MsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQzczQixDQUFDLENBQUMxTixDQUFDLENBQUMsQ0FBQ3VNLENBQUMsRUFBRSxDQUFDeFcsQ0FBQyxDQUFDZ3ZCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUNrdkIsQ0FBQyxDQUFDcTBCLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDdmpELEdBQUcsQ0FBQzBoQyxDQUFDLENBQUN4UyxDQUFDLENBQUMyMEIsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxbEIsR0FBRyxDQUFDLENBQUMyK0IsQ0FBQyxFQUFFLENBQUM5ckMsQ0FBQyxDQUFDZ3ZCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUNrdkIsQ0FBQyxDQUFDcTBCLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDdmpELEdBQUcsQ0FBQ2tpQyxDQUFDLENBQUN4YyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzFsQixHQUFHLENBQUMsQ0FBQ2xHLENBQUMsRUFBRSxDQUFDakgsQ0FBQyxDQUFDZ3ZCLFFBQVEsQ0FBQzZELElBQUksQ0FBQ3dKLENBQUMsQ0FBQ3EwQixrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQ3ZqRCxHQUFHLENBQUMsQ0FBQyxDQUFDMGxCLElBQUksQ0FBQzBaLENBQUMsQ0FBQ2xRLENBQUMsQ0FBQzIwQixpQkFBaUIsQ0FBQ2ppQyxLQUFLLENBQUMsQ0FBQyxDQUFDOEQsSUFBSSxDQUFDLENBQUNxWixDQUFDLEVBQUUsQ0FBQ2xzQyxDQUFDLENBQUNndkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDd0osQ0FBQyxDQUFDcTBCLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDdmpELEdBQUcsQ0FBQyxDQUFDLENBQUMwbEIsSUFBSSxDQUFDbGIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tiLElBQUksQ0FBQyxDQUFDLENBQUNzQixDQUFDLENBQUMzZCxDQUFDLEVBQUVzMUIsQ0FBQyxFQUFFN2tDLENBQUMsRUFBRWlsQyxDQUFDLENBQUMsT0FBTyxHQUFHZ0UsQ0FBQyxDQUFDdWUsUUFBUSxFQUFFLENBQUNqNEMsQ0FBQyxDQUFDMjVCLENBQUMsRUFBRXpzQyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDWCxDQUFDLENBQUMvMEIsQ0FBQyxDQUFDLENBQUNneUIsQ0FBQyxDQUFDcUUsQ0FBQyxFQUFFenNDLElBQUksQ0FBQzhyQyxHQUFHLENBQUNILENBQUMsQ0FBQ25vQyxDQUFDLENBQUMsQ0FBQ0QsQ0FBQyxDQUFDa3BDLENBQUMsRUFBRXpzQyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDakQsQ0FBQyxDQUFDdGlDLENBQUMsQ0FBQyxDQUFDaWlDLENBQUMsQ0FBQ2lFLENBQUMsRUFBRXpzQyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDNzNCLENBQUMsQ0FBQ2hQLENBQUMsQ0FBQyxDQUFDNk4sQ0FBQyxFQUFFLENBQUN4VyxDQUFDLENBQUNndkIsUUFBUSxDQUFDN2hCLEdBQUcsQ0FBQ2t2QixDQUFDLENBQUNxMEIsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUN2akQsR0FBRyxDQUFDMGhDLENBQUMsQ0FBQ2hjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMWxCLEdBQUcsQ0FBQyxDQUFDMitCLENBQUMsRUFBRSxDQUFDOXJDLENBQUMsQ0FBQ2d2QixRQUFRLENBQUM3aEIsR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQ3EwQixrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQ3ZqRCxHQUFHLENBQUNraUMsQ0FBQyxDQUFDaFQsQ0FBQyxDQUFDMjBCLGlCQUFpQixDQUFDNzdCLE1BQU0sQ0FBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMWxCLEdBQUcsQ0FBQyxDQUFDbEcsQ0FBQyxFQUFFLENBQUNqSCxDQUFDLENBQUNndkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDd0osQ0FBQyxDQUFDcTBCLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDdmpELEdBQUcsQ0FBQyxDQUFDLENBQUMwbEIsSUFBSSxDQUFDMFosQ0FBQyxDQUFDLENBQUMsQ0FBQzFaLElBQUksQ0FBQyxDQUFDcVosQ0FBQyxFQUFFLENBQUNsc0MsQ0FBQyxDQUFDZ3ZCLFFBQVEsQ0FBQzZELElBQUksQ0FBQ3dKLENBQUMsQ0FBQ3EwQixrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQ3ZqRCxHQUFHLENBQUMsQ0FBQyxDQUFDMGxCLElBQUksQ0FBQ2xiLENBQUMsQ0FBQzBrQixDQUFDLENBQUMyMEIsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDLENBQUMsQ0FBQzhELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3dKLENBQUMsQ0FBQysxQixZQUFZLENBQUMzaUIsQ0FBQyxDQUFDLENBQUM0aUIsUUFBUSxFQUFFLENBQUM3N0MsQ0FBQyxFQUFFczFCLENBQUMsRUFBRTdrQyxDQUFDLEVBQUVpbEMsQ0FBQyxFQUFFL1gsQ0FBQyxDQUFDLEVBQUVrSSxDQUFDLENBQUN2NUIsT0FBTyxDQUFDMHJELElBQUksQ0FBQ0EsSUFBSSxFQUFFbnlCLENBQUMsQ0FBQ3Y1QixPQUFPLENBQUMwckQsSUFBSSxDQUFDQSxJQUFJLENBQUN2dkQsSUFBSSxDQUFDbzlCLENBQUMsQ0FBQzhQLE9BQU8sQ0FBQ3JpQyxDQUFDLENBQUM0YixDQUFDLENBQUM3aUIsTUFBTSxDQUFDdzVCLENBQUMsQ0FBQ3MwQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM0QixRQUFRLENBQUNsMkIsQ0FBQyxDQUFDKzFCLFlBQVksQ0FBQzNpQixDQUFDLENBQUMsQ0FBQ2dPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3BoQixDQUFDLENBQUMrMUIsWUFBWSxDQUFDM2lCLENBQUMsQ0FBQyxDQUFDNGlCLFFBQVEsQ0FBQzc3QyxDQUFDLEVBQUVzMUIsQ0FBQyxFQUFFN2tDLENBQUMsRUFBRWlsQyxDQUFDLEVBQUUvWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pPLENBQUMsQ0FBQzRtQixFQUFFLENBQUMrZ0IsTUFBTSxDQUFDdDFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM5RyxLQUFLLENBQUMsUUFBUSxDQUFDbkgsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQ3Y1QixPQUFPLENBQUNtRSxDQUFDLENBQUN5ZSxDQUFDLENBQUNuaEIsU0FBUyxDQUFDbWhCLENBQUMsQ0FBQ29tQixDQUFDLENBQUM5dUIsS0FBSyxDQUFDLENBQUMsQ0FBQ3JhLElBQUksQ0FBQyxRQUFRLENBQUNtSCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM0NUIsUUFBUSxDQUFDbFUsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzJZLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQ2loQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDaGEsQ0FBQyxDQUFDM0YsTUFBTSxFQUFFLENBQUNrVixDQUFDLENBQUNvakIsUUFBUSxDQUFDbFUsQ0FBQyxDQUFDemUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnYSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDeUUsQ0FBQyxDQUFDemUsQ0FBQyxDQUFDLENBQUNsRixJQUFJLENBQUMsUUFBUSxDQUFDK0gsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6RSxHQUFHLENBQUMsUUFBUSxDQUFDekssQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21YLEdBQUcsQ0FBQyxRQUFRLENBQUN6SyxDQUFDLENBQUN2UCxDQUFDLENBQUMzRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDb2tCLENBQUMsQ0FBQzRtQixFQUFFLENBQUMrZ0IsTUFBTSxDQUFDdDFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM5RyxLQUFLLENBQUMsUUFBUSxDQUFDbkgsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyt0RCxNQUFNLENBQUMsQ0FBQ2ppQixDQUFDLENBQUN6UCxDQUFDLENBQUN2NUIsT0FBTyxDQUFDMFQsQ0FBQyxDQUFDeUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM2cUIsQ0FBQyxDQUFDMG1CLE9BQU8sQ0FBQ2g4QyxDQUFDLENBQUN5SyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3pLLENBQUMsQ0FBQ3lLLEdBQUcsQ0FBQyxRQUFRLENBQUM2cUIsQ0FBQyxDQUFDNkosTUFBTSxDQUFDLENBQUMsQ0FBQ3oxQixJQUFJLENBQUMsUUFBUSxDQUFDcFcsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLElBQUk3bEIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3Y1QixPQUFPLENBQUMwVCxDQUFDLENBQUNnOEMsT0FBTyxFQUFFOXNDLENBQUMsQ0FBQzFsQixDQUFDLENBQUMrdEQsTUFBTSxDQUFDLENBQUM5c0MsR0FBRyxDQUFDLFFBQVEsQ0FBQ3pLLENBQUMsQ0FBQ2c4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlzQyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDbW1CLFNBQVMsQ0FBQy9zQyxDQUFDLENBQUM4bUIsTUFBTSxDQUFDLGNBQWMsQ0FBQzltQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDa2hCLEtBQUssQ0FBQyxDQUFDNXNELE9BQU8sQ0FBQyxRQUFRLENBQUNtc0MsaUJBQWlCLENBQUMsUUFBUSxDQUFDanFDLE9BQU8sQ0FBQyxDQUFDNHZELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ2o3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNrN0IsZUFBZSxDQUFDLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLE9BQU8sQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM3NEIsT0FBTyxDQUFDLENBQUMsaUJBQWlCLENBQUMsdUNBQXVDLENBQUMsQ0FBQzJ6QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNtRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNqRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNrRixPQUFPLENBQUMsUUFBUSxDQUFDakYsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDa0YsU0FBUyxDQUFDLElBQUksQ0FBQ2pqQyxRQUFRLENBQUMsSUFBSSxDQUFDa2pDLFNBQVMsQ0FBQyxFQUFFLENBQUNuakMsUUFBUSxDQUFDLEVBQUUsQ0FBQzRsQixNQUFNLENBQUMsRUFBRSxDQUFDd2QsTUFBTSxDQUFDLElBQUksQ0FBQ2xpRCxLQUFLLENBQUMsSUFBSSxDQUFDaVAsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDa3pDLElBQUksQ0FBQyxRQUFRLENBQUMxdEMsQ0FBQyxDQUFDLENBQUMsT0FBTzJKLFVBQVUsQ0FBQzNKLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDMnRDLFNBQVMsQ0FBQyxRQUFRLENBQUMzdEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDd2hCLEtBQUssQ0FBQzdYLFVBQVUsQ0FBQzNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2c0QixVQUFVLENBQUMsUUFBUSxDQUFDNXpDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcwbEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJb2IsQ0FBQyxDQUFDcjhCLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDd1csQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8xTSxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdsQixDQUFDLENBQUMxTSxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3czQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJbGtDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUN1NUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUN1UyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUNscEIsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ3l3RCxZQUFZLENBQUMsQ0FBQyxDQUFDdHpELENBQUMsQ0FBQzZ5RCxXQUFXLENBQUNBLFdBQVcsQ0FBQzd5RCxDQUFDLENBQUM2eUQsV0FBVyxDQUFDVSxlQUFlLENBQUMsSUFBSSxDQUFDcG5CLE9BQU8sQ0FBQ3FuQiw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQy9CLE9BQU8sQ0FBQ3p4RCxDQUFDLENBQUMrdEQsTUFBTSxFQUFFL3RELENBQUMsQ0FBQyt5RCxLQUFLLEVBQUUveUQsQ0FBQyxDQUFDeTNCLE9BQU8sQ0FBQ3ozQixDQUFDLENBQUMrdEQsTUFBTSxFQUFFLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNWhCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3ppQyxRQUFRLENBQUNTLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDZ2lDLE9BQU8sQ0FBQ3JvQixJQUFJLENBQUM0QixDQUFDLENBQUMsMERBQTBELENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxDQUFDK04sUUFBUSxDQUFDLElBQUksQ0FBQ21kLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM4TixLQUFLLENBQUMsSUFBSSxDQUFDb2QsT0FBTyxDQUFDbUQsVUFBVSxDQUFDLENBQUMsQ0FBQ25hLE1BQU0sQ0FBQyxJQUFJLENBQUNnWCxPQUFPLENBQUNvRCxXQUFXLENBQUMsQ0FBQyxDQUFDcGlDLEdBQUcsQ0FBQyxJQUFJLENBQUNnL0IsT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzRSLElBQUksQ0FBQyxJQUFJLENBQUNzWixPQUFPLENBQUNsckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2tyQixPQUFPLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUNqN0IsTUFBTSxDQUFDLENBQUMsQ0FBQzhOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDbXRCLE9BQU8sQ0FBQ3NuQixTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDNXBELENBQUMsQ0FBQyxDQUFDZ25DLFNBQVMsQ0FBQyxJQUFJLENBQUN5aUIsZUFBZSxDQUFDdHlDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQ3ExQixXQUFXLENBQUMsSUFBSSxDQUFDaWQsZUFBZSxDQUFDdHlDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQ28xQixZQUFZLENBQUMsSUFBSSxDQUFDa2QsZUFBZSxDQUFDdHlDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQzBOLFVBQVUsQ0FBQyxJQUFJLENBQUM0a0MsZUFBZSxDQUFDdHlDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2tyQixPQUFPLENBQUNsckIsR0FBRyxDQUFDblgsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeXBELGVBQWUsQ0FBQ3R5QyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzB5QyxtQkFBbUIsQ0FBQyxJQUFJLENBQUNKLGVBQWUsQ0FBQ3R5QyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDc3lDLGVBQWUsQ0FBQ3R5QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ3V5Qyw2QkFBNkIsQ0FBQy8wRCxJQUFJLENBQUMsSUFBSSxDQUFDODBELGVBQWUsQ0FBQ3R5QyxHQUFHLENBQUMsQ0FBQytOLFFBQVEsQ0FBQyxRQUFRLENBQUM0a0MsSUFBSSxDQUFDLENBQUMsQ0FBQzV5QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3V5QyxlQUFlLENBQUN0eUMsR0FBRyxDQUFDblgsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK3BELHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBQzl6RCxDQUFDLENBQUM4eUQsUUFBUSxFQUFFcHRDLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDLENBQUNsbkIsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDamxCLENBQUMsQ0FBQ3lKLFFBQVEsRUFBRSxDQUFDNHlCLENBQUMsQ0FBQytSLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDL1IsQ0FBQyxDQUFDMDNCLFFBQVEsQ0FBQzV4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDamxCLENBQUMsQ0FBQ3lKLFFBQVEsRUFBRTR5QixDQUFDLENBQUMyM0IsUUFBUSxFQUFFLENBQUMzM0IsQ0FBQyxDQUFDdVMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUN2UyxDQUFDLENBQUMwM0IsUUFBUSxDQUFDMXhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMnBDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzdkLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2dlLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSXJpRCxDQUFDLENBQUM5SixDQUFDLENBQUMsUUFBUSxDQUFDOEosQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQzZWLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQ0EsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDMkYsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDMVgsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM0TCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNrNkMsZ0JBQWdCLEVBQUUsQ0FBQzF6RCxDQUFDLENBQUMsSUFBSSxDQUFDbXNDLE9BQU8sQ0FBQyxDQUFDcmlDLENBQUMsQ0FBQyxJQUFJLENBQUNxaUMsT0FBTyxDQUFDLElBQUksQ0FBQ29uQixlQUFlLENBQUN0eUMsR0FBRyxDQUFDLENBQUMrTixRQUFRLENBQUNsbEIsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDOE4sS0FBSyxDQUFDamxCLENBQUMsQ0FBQ3dsQyxVQUFVLENBQUMsQ0FBQyxDQUFDbmEsTUFBTSxDQUFDcnJCLENBQUMsQ0FBQ3lsQyxXQUFXLENBQUMsQ0FBQyxDQUFDcGlDLEdBQUcsQ0FBQ3JELENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzRSLElBQUksQ0FBQy9vQixDQUFDLENBQUNtWCxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDME0sV0FBVyxDQUFDN2pCLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMwUCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDKzVDLGVBQWUsQ0FBQ3R5QyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzB5QyxtQkFBbUIsQ0FBQyxDQUFDM3pELENBQUMsQ0FBQyxJQUFJLENBQUN1ekQsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNqbEIsVUFBVSxDQUFDLFFBQVEsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDK2lDLE1BQU0sQ0FBQ25uQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQ3V1QyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0gsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJaHFELENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsSUFBSSxDQUFDbkUsT0FBTyxDQUFDb3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzhtQixPQUFPLENBQUMvckQsQ0FBQyxDQUFDK3JELE9BQU8sRUFBRSxDQUFDdHRDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDLENBQUM3cUMsTUFBTSxDQUFDLENBQUNrVixDQUFDLENBQUMsaUJBQWlCLENBQUMxTSxDQUFDLENBQUMsaUJBQWlCLENBQUN1eUIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDdCtCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQ20yRCxFQUFFLENBQUMsa0JBQWtCLENBQUNDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQ0MsRUFBRSxDQUFDLGtCQUFrQixDQUFDQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNOLFFBQVEsQ0FBQ3J1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3N0QyxPQUFPLENBQUMzeEQsV0FBVyxHQUFHMEgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDaXFELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQ0EsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMzMkIsQ0FBQyxDQUFDLElBQUksQ0FBQzIyQixPQUFPLENBQUMzdEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzJ0RCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNoekQsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMvNkIsTUFBTSxDQUFDdEIsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQzhKLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ3BoQixJQUFJLENBQUMrM0IsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUMsZUFBZSxDQUFDMU0sQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQ3BtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDa3BCLFNBQVMsQ0FBQzlDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQ3QxQixDQUFDLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3cUIsR0FBRyxDQUFDLENBQUMwMEIsTUFBTSxDQUFDMXVDLENBQUMsQ0FBQzB1QyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FkLE9BQU8sQ0FBQ2xwRCxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUNqZixNQUFNLENBQUM0ZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN3b0IsV0FBVyxDQUFDLFFBQVEsQ0FBQ3hxRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLElBQUksQ0FBQ3FpQyxPQUFPLENBQUMsR0FBRyxDQUFDbnNDLEVBQUUsR0FBRyxJQUFJLENBQUNnekQsT0FBTyxDQUFDLElBQUksQ0FBQ0EsT0FBTyxDQUFDaHpELENBQUMsQ0FBQyxDQUFDcUIsV0FBVyxHQUFHMEgsTUFBTSxDQUFDLElBQUksQ0FBQ2lxRCxPQUFPLENBQUNoekQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbXNDLE9BQU8sQ0FBQzcwQixRQUFRLENBQUMsSUFBSSxDQUFDMDdDLE9BQU8sQ0FBQ2h6RCxDQUFDLENBQUMsQ0FBQyxDQUFDcUMsS0FBSyxDQUFDLENBQUMsQ0FBQzhmLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2d0MsT0FBTyxDQUFDaHpELENBQUMsQ0FBQyxDQUFDb0IsTUFBTSxFQUFFLElBQUksQ0FBQzR4RCxPQUFPLENBQUNoekQsQ0FBQyxDQUFDLENBQUNYLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMnpELE9BQU8sQ0FBQ2h6RCxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDc3RDLE9BQU8sQ0FBQ2h6RCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZ0QyxHQUFHLENBQUMsSUFBSSxDQUFDbWxCLE9BQU8sQ0FBQ2h6RCxDQUFDLENBQUMsQ0FBQyxDQUFDbS9DLFNBQVMsQ0FBQ2pULENBQUMsQ0FBQytmLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5SCxnQkFBZ0IsRUFBRSxJQUFJLENBQUNILGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzdwRCxRQUFRLENBQUNTLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFLENBQUNreUIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDLElBQUksQ0FBQ3N0QyxPQUFPLENBQUNoekQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbXNDLE9BQU8sQ0FBQyxDQUFDTCxDQUFDLENBQUMsaUJBQWlCLENBQUNoaEMsSUFBSSxDQUFDOUssQ0FBQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDa1QsV0FBVyxDQUFDLENBQUMsQ0FBQ2xULENBQUMsQ0FBQ2lULFVBQVUsQ0FBQyxDQUFDLENBQUM5NEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQzFMLElBQUksQ0FBQzlLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM4SyxJQUFJLENBQUM5SyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDOEssSUFBSSxDQUFDOUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDZ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDbEIsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDekssQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytuQixxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUNBLFFBQVEsQ0FBQ2g4QyxHQUFHLENBQUMsSUFBSSxDQUFDaTdDLE9BQU8sQ0FBQ2h6RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDczBELFdBQVcsQ0FBQyxJQUFJLENBQUNub0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDNG5CLFFBQVEsQ0FBQyxJQUFJLENBQUNBLFFBQVEsQ0FBQ2g4QyxHQUFHLENBQUMsSUFBSSxDQUFDbzBCLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21tRCxRQUFRLENBQUNuaUIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21pQixRQUFRLENBQUM5dUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDaW5CLENBQUMsQ0FBQzhuQixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMxbUQsU0FBUyxFQUFFLENBQUN3K0IsQ0FBQyxDQUFDLElBQUksQ0FBQ3grQixTQUFTLENBQUNuRCxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDK2hDLENBQUMsQ0FBQ3doQixJQUFJLENBQUM1aEIsQ0FBQyxFQUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDNnJELFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQzF4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3VzQixTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUNxbEIsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRixRQUFRLENBQUN2NkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDa3pDLGFBQWEsQ0FBQyxRQUFRLENBQUM1aUQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3hXLEVBQUUsR0FBRyxJQUFJLENBQUNnekQsT0FBTyxDQUFDMzJCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxJQUFJLENBQUNzdEMsT0FBTyxDQUFDaHpELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLEdBQUd2eUIsQ0FBQyxDQUFDM0csTUFBTSxFQUFFdWlCLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQysxQixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDcVQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzFULE9BQU8sQ0FBQzJHLFFBQVEsRUFBRStNLENBQUMsQ0FBQyxDQUFDdTJDLFdBQVcsQ0FBQyxRQUFRLENBQUNqakQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxJQUFJLENBQUNocEMsT0FBTyxDQUFDbUUsQ0FBQyxDQUFDLElBQUksQ0FBQ2tsQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUM2bkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ08sWUFBWSxDQUFDLENBQUMsQ0FBQ3YwRCxDQUFDLENBQUMsSUFBSSxDQUFDb3pELElBQUksQ0FBQyxJQUFJLENBQUNyRixNQUFNLENBQUM5c0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUNvYixDQUFDLENBQUMsSUFBSSxDQUFDKzJCLElBQUksQ0FBQyxJQUFJLENBQUNyRixNQUFNLENBQUM5c0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM2cUIsQ0FBQyxDQUFDOGhCLFdBQVcsRUFBRSxDQUFDNXRELENBQUMsRUFBRTBsQixDQUFDLENBQUNvbUIsQ0FBQyxDQUFDOGhCLFdBQVcsQ0FBQyxDQUFDMzVCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDb0ksQ0FBQyxFQUFFM1csQ0FBQyxDQUFDb21CLENBQUMsQ0FBQzhoQixXQUFXLENBQUMsQ0FBQzU1QixTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lSLE1BQU0sQ0FBQyxJQUFJLENBQUM4b0IsTUFBTSxDQUFDOW9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDalcsUUFBUSxDQUFDLENBQUM2RCxJQUFJLENBQUM3eUIsQ0FBQyxDQUFDbU4sR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3liLElBQUksQ0FBQyxJQUFJLENBQUMyWixPQUFPLENBQUMsQ0FBQzFpQyxLQUFLLENBQUMsSUFBSSxDQUFDZy9CLE1BQU0sQ0FBQ2gvQixLQUFLLENBQUMsQ0FBQyxDQUFDb0csTUFBTSxDQUFDLElBQUksQ0FBQzQ0QixNQUFNLENBQUM1NEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwRyxLQUFLLENBQUM5bkIsQ0FBQyxDQUFDOG5CLEtBQUssQ0FBQyxDQUFDLENBQUNvRyxNQUFNLENBQUNsdUIsQ0FBQyxDQUFDa3VCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxL0IsWUFBWSxDQUFDLElBQUksQ0FBQy9DLE9BQU8sQ0FBQyxDQUFDMWlDLEtBQUssQ0FBQzluQixDQUFDLENBQUNxb0MsVUFBVSxDQUFDLENBQUMsQ0FBQ25hLE1BQU0sQ0FBQ2x1QixDQUFDLENBQUNzb0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4Z0IsS0FBSyxDQUFDOW5CLENBQUMsQ0FBQzhuQixLQUFLLENBQUMsQ0FBQyxDQUFDb0csTUFBTSxDQUFDbHVCLENBQUMsQ0FBQ2t1QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcy9CLFFBQVEsQ0FBQyxDQUFDMWxDLEtBQUssQ0FBQzluQixDQUFDLENBQUNxb0MsVUFBVSxDQUFDLENBQUMsQ0FBQ3JvQyxDQUFDLENBQUM4bkIsS0FBSyxDQUFDLENBQUMsQ0FBQ29HLE1BQU0sQ0FBQ2x1QixDQUFDLENBQUNzb0MsV0FBVyxDQUFDLENBQUMsQ0FBQ3RvQyxDQUFDLENBQUNrdUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzA2QixnQkFBZ0IsQ0FBQyxDQUFDaDlCLElBQUksQ0FBQzd5QixDQUFDLENBQUNtTixHQUFHLENBQUNrdkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcTRCLHFCQUFxQixDQUFDLENBQUM3aEMsSUFBSSxDQUFDL29CLENBQUMsQ0FBQzRmLEtBQUssQ0FBQ3ZjLEdBQUcsQ0FBQ3JELENBQUMsQ0FBQzZmLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQ2twQyxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8vbUIsQ0FBQyxDQUFDK21CLFdBQVcsQ0FBQy9tQixDQUFDLENBQUMrbUIsV0FBVyxDQUFDLElBQUksQ0FBQzJCLFlBQVksQ0FBQ3psQyxLQUFLLENBQUMsSUFBSSxDQUFDeWxDLFlBQVksQ0FBQ3IvQixNQUFNLEVBQUUsQ0FBQyxDQUFDM2UsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQ2dvQyxJQUFJLENBQUMsQ0FBQ3pzQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUN5RSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUN6RSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBR3pLLENBQUMsQ0FBQyxJQUFJLENBQUNrM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQ2wzQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNvNEIsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDK2xCLFVBQVUsQ0FBQyxPQUFPLENBQUM3cUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FqRCxVQUFVLENBQUMsUUFBUSxDQUFDcmpELENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUNrK0MscUJBQXFCLENBQUM1b0IsQ0FBQyxDQUFDLElBQUksQ0FBQzRoQixJQUFJLENBQUN6bUQsQ0FBQyxDQUFDNkMsQ0FBQyxDQUFDNGYsS0FBSyxDQUFDbFQsQ0FBQyxDQUFDcWMsSUFBSSxFQUFFLENBQUMsQ0FBQ3FaLENBQUMsQ0FBQ3BpQyxDQUFDLENBQUM2ZixLQUFLLENBQUNuVCxDQUFDLENBQUNySixHQUFHLEVBQUUsQ0FBQyxDQUFDby9CLENBQUMsQ0FBQyxJQUFJLENBQUN5UyxPQUFPLENBQUNsVCxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzhvQixxQkFBcUIsQ0FBQyxDQUFDLENBQUNyb0IsQ0FBQyxDQUFDLENBQUN2c0MsQ0FBQyxDQUFDdXNDLENBQUMsQ0FBQ3BxQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMySCxDQUFDLENBQUM3QyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyb0Isd0JBQXdCLENBQUMvcUQsQ0FBQyxDQUFDOGYsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwcEMsWUFBWSxFQUFFeHBELENBQUMsQ0FBQzhmLFFBQVEsQ0FBQyxFQUFFLENBQUM1cEIsQ0FBQyxDQUFDLElBQUksQ0FBQzgwRCxZQUFZLENBQUM5MEQsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUMrMEQsWUFBWSxDQUFDLzBELENBQUMsQ0FBQzhKLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2tyRCxZQUFZLENBQUNoMUQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMjBELFVBQVUsQ0FBQyxRQUFRLENBQUM3cUQsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLElBQUksQ0FBQzQ0QixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeEQsT0FBTyxFQUFFLElBQUksQ0FBQytCLDZCQUE2QixDQUFDbHlELE1BQU0sRUFBRSxJQUFJLENBQUN1eUQscUJBQXFCLENBQUMsQ0FBQyxDQUFDbnVDLENBQUMsQ0FBQ3ZoQixhQUFhLENBQUNrNEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN1NEIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ZvQixRQUFRLENBQUMsUUFBUSxDQUFDdmlDLENBQUMsQ0FBQyxJQUFJLENBQUN3aUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJvQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN0gsVUFBVSxDQUFDLFFBQVEsQ0FBQ3RqRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUloMEQsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUNLLENBQUMsQ0FBQzUwQixDQUFDLENBQUMsSUFBSSxDQUFDN1UsT0FBTyxDQUFDK3JDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUM0aUIsT0FBTyxFQUFFLENBQUN6eEQsQ0FBQyxDQUFDLElBQUksQ0FBQ3d6RCw2QkFBNkIsQ0FBQ24zQixDQUFDLENBQUNyOEIsQ0FBQyxDQUFDc0IsTUFBTSxFQUFFLFdBQVcsQ0FBQ3dKLElBQUksQ0FBQzlLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBKLFFBQVEsQ0FBQyxDQUFDOE0sQ0FBQyxDQUFDNmxCLENBQUMsRUFBRSxJQUFJLENBQUNxaEIsVUFBVSxDQUFDMTlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM2dUMsQ0FBQyxDQUFDNGxCLFFBQVEsQ0FBQ3QvQixNQUFNLENBQUMyVyxDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQyxDQUFDd1MsQ0FBQyxDQUFDNGxCLFFBQVEsQ0FBQzFsQyxLQUFLLENBQUM5bkIsQ0FBQyxDQUFDLENBQUM4bkIsS0FBSyxDQUFDOGYsQ0FBQyxDQUFDa2YsTUFBTSxDQUFDaC9CLEtBQUssQ0FBQyxDQUFDLENBQUMrYyxDQUFDLENBQUMzVyxNQUFNLENBQUMwWixDQUFDLENBQUNrZixNQUFNLENBQUM1NEIsTUFBTSxDQUFDLENBQUMsQ0FBQzNlLENBQUMsQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQzdjLFVBQVUsQ0FBQ3dmLENBQUMsQ0FBQzFDLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDNHRCLENBQUMsQ0FBQzdmLFFBQVEsQ0FBQzZELElBQUksQ0FBQ2djLENBQUMsQ0FBQ2doQixnQkFBZ0IsQ0FBQ2g5QixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMwWixDQUFDLENBQUNsZCxVQUFVLENBQUN3ZixDQUFDLENBQUMxQyxPQUFPLENBQUNsckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzR0QixDQUFDLENBQUM3ZixRQUFRLENBQUM3aEIsR0FBRyxDQUFDMGhDLENBQUMsQ0FBQ2doQixnQkFBZ0IsQ0FBQzFpRCxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUN3SyxDQUFDLENBQUM4ZixPQUFPLEVBQUUsSUFBSSxDQUFDMFUsT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQ3lFLENBQUMsQ0FBQzdpQixNQUFNLENBQUNvRSxDQUFDLENBQUMsQ0FBQ2tHLEdBQUcsQ0FBQ28vQixDQUFDLENBQUMxWixJQUFJLENBQUNxWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyQyxDQUFDLENBQUNrZixNQUFNLENBQUM1NEIsTUFBTSxDQUFDMFosQ0FBQyxDQUFDaUosSUFBSSxDQUFDM2lCLE1BQU0sQ0FBQyxDQUFDMFosQ0FBQyxDQUFDa2YsTUFBTSxDQUFDaC9CLEtBQUssQ0FBQzhmLENBQUMsQ0FBQ2lKLElBQUksQ0FBQy9vQixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMwaUMsT0FBTyxFQUFFLENBQUM5NUMsQ0FBQyxDQUFDOGYsT0FBTyxFQUFFLElBQUksQ0FBQ284QixxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ251QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUN6RSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ210QixZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUN1bUIsVUFBVSxDQUFDLE1BQU0sQ0FBQzdxRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMybkQsT0FBTyxFQUFFLElBQUksQ0FBQzFELE1BQU0sQ0FBQ3YwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvN0MscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNNLFlBQVksQ0FBQyxDQUFDL25ELEdBQUcsQ0FBQyxJQUFJLENBQUM2aEIsUUFBUSxDQUFDN2hCLEdBQUcsQ0FBQzBsQixJQUFJLENBQUMsSUFBSSxDQUFDN0QsUUFBUSxDQUFDNkQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDc2lDLFFBQVEsQ0FBQyxDQUFDcG1DLEtBQUssQ0FBQyxJQUFJLENBQUMrb0IsSUFBSSxDQUFDL29CLEtBQUssQ0FBQ29HLE1BQU0sQ0FBQyxJQUFJLENBQUMyaUIsSUFBSSxDQUFDM2lCLE1BQU0sQ0FBQyxDQUFDLENBQUM4L0IsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXZ2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNzSixRQUFRLENBQUM3aEIsR0FBRyxHQUFHLElBQUksQ0FBQytuRCxZQUFZLENBQUMvbkQsR0FBRyxFQUFFLENBQUN1WSxDQUFDLENBQUN2WSxHQUFHLENBQUMsSUFBSSxDQUFDNmhCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDNmhCLFFBQVEsQ0FBQzZELElBQUksR0FBRyxJQUFJLENBQUNxaUMsWUFBWSxDQUFDcmlDLElBQUksRUFBRSxDQUFDbk4sQ0FBQyxDQUFDbU4sSUFBSSxDQUFDLElBQUksQ0FBQzdELFFBQVEsQ0FBQzZELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUNpbEIsSUFBSSxDQUFDL29CLEtBQUssR0FBRyxJQUFJLENBQUNvbUMsUUFBUSxDQUFDcG1DLEtBQUssRUFBRSxDQUFDckosQ0FBQyxDQUFDcUosS0FBSyxDQUFDLElBQUksQ0FBQytvQixJQUFJLENBQUMvb0IsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQytvQixJQUFJLENBQUMzaUIsTUFBTSxHQUFHLElBQUksQ0FBQ2dnQyxRQUFRLENBQUNoZ0MsTUFBTSxFQUFFLENBQUN6UCxDQUFDLENBQUN5UCxNQUFNLENBQUMsSUFBSSxDQUFDMmlCLElBQUksQ0FBQzNpQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDNDRCLE1BQU0sQ0FBQzlzQyxHQUFHLENBQUN5RSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUNtdkMsd0JBQXdCLENBQUMsUUFBUSxDQUFDbnZDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDLElBQUksQ0FBQ25FLE9BQU8sQ0FBQ2dwQyxDQUFDLENBQUMsQ0FBQy9iLFFBQVEsQ0FBQyxJQUFJLENBQUNzakMsU0FBUyxDQUFDcHNELENBQUMsQ0FBQzhvQixRQUFRLENBQUMsQ0FBQzlvQixDQUFDLENBQUM4b0IsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ3FqQyxTQUFTLENBQUNwc0QsQ0FBQyxDQUFDK29CLFFBQVEsQ0FBQyxDQUFDL29CLENBQUMsQ0FBQytvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tqQyxTQUFTLENBQUMsSUFBSSxDQUFDRyxTQUFTLENBQUNwc0QsQ0FBQyxDQUFDaXNELFNBQVMsQ0FBQyxDQUFDanNELENBQUMsQ0FBQ2lzRCxTQUFTLENBQUMsQ0FBQyxDQUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDSSxTQUFTLENBQUNwc0QsQ0FBQyxDQUFDZ3NELFNBQVMsQ0FBQyxDQUFDaHNELENBQUMsQ0FBQ2dzRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDSyxZQUFZLEVBQUU1dEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzViLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUNvbkIsU0FBUyxDQUFDLElBQUksQ0FBQ0wsV0FBVyxDQUFDeDJCLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQy9iLFFBQVEsQ0FBQyxJQUFJLENBQUM4aUMsV0FBVyxDQUFDN3lELENBQUMsQ0FBQzhyQyxDQUFDLENBQUNtbkIsU0FBUyxDQUFDLElBQUksQ0FBQ0osV0FBVyxDQUFDcjhDLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM5YixRQUFRLENBQUMsSUFBSSxDQUFDNmlDLFdBQVcsQ0FBQy9vRCxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDL2IsUUFBUSxFQUFFLENBQUMrYixDQUFDLENBQUMvYixRQUFRLENBQUNqbUIsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDb25CLFNBQVMsRUFBRSxDQUFDcG5CLENBQUMsQ0FBQ29uQixTQUFTLENBQUM3MkIsQ0FBQyxDQUFDLENBQUN5UCxDQUFDLENBQUM5YixRQUFRLENBQUNod0IsQ0FBQyxFQUFFLENBQUM4ckMsQ0FBQyxDQUFDOWIsUUFBUSxDQUFDaHdCLENBQUMsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQ21uQixTQUFTLENBQUN6OEMsQ0FBQyxFQUFFLENBQUNzMUIsQ0FBQyxDQUFDbW5CLFNBQVMsQ0FBQ3o4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzQrQyxZQUFZLENBQUN0cEIsQ0FBQyxDQUFDLENBQUNrcEIsWUFBWSxDQUFDLFFBQVEsQ0FBQ3R2QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1ZixNQUFNLENBQUMsSUFBSSxDQUFDOG9CLE1BQU0sQ0FBQzlvQixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ291QixTQUFTLENBQUMzdEMsQ0FBQyxDQUFDbU4sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM3RCxRQUFRLENBQUM2RCxJQUFJLENBQUNuTixDQUFDLENBQUNtTixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUN3Z0MsU0FBUyxDQUFDM3RDLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDNmhCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUN1WSxDQUFDLENBQUN2WSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUNrbUQsU0FBUyxDQUFDM3RDLENBQUMsQ0FBQ3lQLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMmlCLElBQUksQ0FBQzNpQixNQUFNLENBQUN6UCxDQUFDLENBQUN5UCxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUNrK0IsU0FBUyxDQUFDM3RDLENBQUMsQ0FBQ3FKLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDK29CLElBQUksQ0FBQy9vQixLQUFLLENBQUNySixDQUFDLENBQUNxSixLQUFLLENBQUMsQ0FBQyxDQUFDK2xDLFlBQVksQ0FBQyxRQUFRLENBQUNwdkMsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQyxJQUFJLENBQUNrbEIsUUFBUSxDQUFDaHZCLENBQUMsQ0FBQyxJQUFJLENBQUM4M0MsSUFBSSxDQUFDemIsQ0FBQyxDQUFDLElBQUksQ0FBQ3F4QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMyRixTQUFTLENBQUMzdEMsQ0FBQyxDQUFDeVAsTUFBTSxDQUFDLENBQUN6UCxDQUFDLENBQUNxSixLQUFLLENBQUNySixDQUFDLENBQUN5UCxNQUFNLENBQUMsSUFBSSxDQUFDMDlCLFdBQVcsQ0FBQyxJQUFJLENBQUNRLFNBQVMsQ0FBQzN0QyxDQUFDLENBQUNxSixLQUFLLENBQUMsRUFBRSxDQUFDckosQ0FBQyxDQUFDeVAsTUFBTSxDQUFDelAsQ0FBQyxDQUFDcUosS0FBSyxDQUFDLElBQUksQ0FBQzhqQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEdBQUd4MkIsQ0FBQyxFQUFFLENBQUMzVyxDQUFDLENBQUNtTixJQUFJLENBQUMvb0IsQ0FBQyxDQUFDK29CLElBQUksQ0FBQyxDQUFDN3lCLENBQUMsQ0FBQyt1QixLQUFLLENBQUNySixDQUFDLENBQUNxSixLQUFLLENBQUMsQ0FBQ3JKLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUdrdkIsQ0FBQyxFQUFFLENBQUMzVyxDQUFDLENBQUN2WSxHQUFHLENBQUNyRCxDQUFDLENBQUNxRCxHQUFHLENBQUMsQ0FBQ25OLENBQUMsQ0FBQ20xQixNQUFNLENBQUN6UCxDQUFDLENBQUN5UCxNQUFNLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQ21OLElBQUksQ0FBQy9vQixDQUFDLENBQUMrb0IsSUFBSSxDQUFDLENBQUM3eUIsQ0FBQyxDQUFDK3VCLEtBQUssQ0FBQ3JKLENBQUMsQ0FBQ3FKLEtBQUssQ0FBQyxDQUFDLENBQUNySixDQUFDLENBQUMsQ0FBQ3F2QyxZQUFZLENBQUMsUUFBUSxDQUFDcnZDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsSUFBSSxDQUFDc3JELFlBQVksQ0FBQ3AxRCxDQUFDLENBQUMsSUFBSSxDQUFDMHRELElBQUksQ0FBQ3J4QixDQUFDLENBQUMsSUFBSSxDQUFDZzNCLFNBQVMsQ0FBQzN0QyxDQUFDLENBQUNxSixLQUFLLENBQUMsRUFBRWpsQixDQUFDLENBQUNrbUIsUUFBUSxFQUFFbG1CLENBQUMsQ0FBQ2ttQixRQUFRLENBQUN0SyxDQUFDLENBQUNxSixLQUFLLENBQUN2WSxDQUFDLENBQUMsSUFBSSxDQUFDNjhDLFNBQVMsQ0FBQzN0QyxDQUFDLENBQUN5UCxNQUFNLENBQUMsRUFBRXJyQixDQUFDLENBQUNtcEQsU0FBUyxFQUFFbnBELENBQUMsQ0FBQ21wRCxTQUFTLENBQUN2dEMsQ0FBQyxDQUFDeVAsTUFBTSxDQUFDMlcsQ0FBQyxDQUFDLElBQUksQ0FBQ3VuQixTQUFTLENBQUMzdEMsQ0FBQyxDQUFDcUosS0FBSyxDQUFDLEVBQUVqbEIsQ0FBQyxDQUFDaW1CLFFBQVEsRUFBRWptQixDQUFDLENBQUNpbUIsUUFBUSxDQUFDckssQ0FBQyxDQUFDcUosS0FBSyxDQUFDOW5CLENBQUMsQ0FBQyxJQUFJLENBQUNvc0QsU0FBUyxDQUFDM3RDLENBQUMsQ0FBQ3lQLE1BQU0sQ0FBQyxFQUFFcnJCLENBQUMsQ0FBQ29wRCxTQUFTLEVBQUVwcEQsQ0FBQyxDQUFDb3BELFNBQVMsQ0FBQ3h0QyxDQUFDLENBQUN5UCxNQUFNLENBQUMrVyxDQUFDLENBQUMsSUFBSSxDQUFDMmpCLGdCQUFnQixDQUFDaDlCLElBQUksQ0FBQyxJQUFJLENBQUMyaEMsWUFBWSxDQUFDemxDLEtBQUssQ0FBQ3dkLENBQUMsQ0FBQyxJQUFJLENBQUNzakIsZ0JBQWdCLENBQUMxaUQsR0FBRyxDQUFDLElBQUksQ0FBQ3FuRCxZQUFZLENBQUNyL0IsTUFBTSxDQUFDeGQsQ0FBQyxDQUFDLFNBQVMsQ0FBQzdNLElBQUksQ0FBQzlLLENBQUMsQ0FBQyxDQUFDNnVDLENBQUMsQ0FBQyxTQUFTLENBQUMvakMsSUFBSSxDQUFDOUssQ0FBQyxDQUFDLENBQUMsT0FBTzhyQyxDQUFDLEVBQUUsQ0FBQ3BtQixDQUFDLENBQUNxSixLQUFLLENBQUNqbEIsQ0FBQyxDQUFDaW1CLFFBQVEsQ0FBQyxDQUFDOW9CLENBQUMsRUFBRSxDQUFDeWUsQ0FBQyxDQUFDeVAsTUFBTSxDQUFDcnJCLENBQUMsQ0FBQ29wRCxTQUFTLENBQUMsQ0FBQzcyQixDQUFDLEVBQUUsQ0FBQzNXLENBQUMsQ0FBQ3FKLEtBQUssQ0FBQ2psQixDQUFDLENBQUNrbUIsUUFBUSxDQUFDLENBQUN4WixDQUFDLEVBQUUsQ0FBQ2tQLENBQUMsQ0FBQ3lQLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUNtcEQsU0FBUyxDQUFDLENBQUNubkIsQ0FBQyxFQUFFbjBCLENBQUMsRUFBRSxDQUFDK04sQ0FBQyxDQUFDbU4sSUFBSSxDQUFDcVosQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQ2ltQixRQUFRLENBQUMsQ0FBQ3NNLENBQUMsRUFBRTFrQixDQUFDLEVBQUUsQ0FBQytOLENBQUMsQ0FBQ21OLElBQUksQ0FBQ3FaLENBQUMsQ0FBQ3BpQyxDQUFDLENBQUNrbUIsUUFBUSxDQUFDLENBQUMvb0IsQ0FBQyxFQUFFNG5DLENBQUMsRUFBRSxDQUFDbnBCLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQ28vQixDQUFDLENBQUN6aUMsQ0FBQyxDQUFDb3BELFNBQVMsQ0FBQyxDQUFDMThDLENBQUMsRUFBRXE0QixDQUFDLEVBQUUsQ0FBQ25wQixDQUFDLENBQUN2WSxHQUFHLENBQUNvL0IsQ0FBQyxDQUFDemlDLENBQUMsQ0FBQ21wRCxTQUFTLENBQUMsQ0FBQ3Z0QyxDQUFDLENBQUNxSixLQUFLLEVBQUVySixDQUFDLENBQUN5UCxNQUFNLEVBQUV6UCxDQUFDLENBQUNtTixJQUFJLEVBQUUsQ0FBQ25OLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQ3VZLENBQUMsQ0FBQ3FKLEtBQUssRUFBRXJKLENBQUMsQ0FBQ3lQLE1BQU0sRUFBRXpQLENBQUMsQ0FBQ3ZZLEdBQUcsRUFBRSxDQUFDdVksQ0FBQyxDQUFDbU4sSUFBSSxFQUFFLENBQUNuTixDQUFDLENBQUNtTixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUNuTixDQUFDLENBQUN2WSxHQUFHLENBQUMsSUFBSSxDQUFDdVksQ0FBQyxDQUFDLENBQUMydkMsK0JBQStCLENBQUMsUUFBUSxDQUFDM3ZDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDeUUsQ0FBQyxDQUFDekUsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUN5RSxDQUFDLENBQUN6RSxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQ3lFLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUN6SyxDQUFDLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQ3lFLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQ3lFLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQ3lFLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25YLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUM5SixDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQ3VsQixVQUFVLENBQUNnTixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM5SixDQUFDLENBQUM4SixDQUFDLENBQUMsRUFBRXVsQixVQUFVLENBQUM3WSxDQUFDLENBQUMxTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUNxckIsTUFBTSxDQUFDbjFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDK3VCLEtBQUssQ0FBQy91QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM2ekQscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDTCw2QkFBNkIsQ0FBQ2x5RCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUlva0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUMrdEQsTUFBTSxFQUFFLElBQUksQ0FBQzVoQixPQUFPLENBQUMsSUFBSSxDQUFDcW5CLDZCQUE2QixDQUFDbHlELE1BQU0sQ0FBQ3dJLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDOHRDLDZCQUE2QixDQUFDMXBELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dyRCxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUNBLGVBQWUsQ0FBQyxJQUFJLENBQUNELCtCQUErQixDQUFDM3ZDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxDQUFDa1UsTUFBTSxDQUFDbjFCLENBQUMsQ0FBQ20xQixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21nQyxlQUFlLENBQUNuZ0MsTUFBTSxFQUFFLENBQUMsQ0FBQ3BHLEtBQUssQ0FBQy91QixDQUFDLENBQUMrdUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1bUMsZUFBZSxDQUFDdm1DLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3bEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXpxRCxDQUFDLENBQUMsSUFBSSxDQUFDcWlDLE9BQU8sQ0FBQ25zQyxDQUFDLENBQUMsSUFBSSxDQUFDOEMsT0FBTyxDQUFDLElBQUksQ0FBQ3l5RCxhQUFhLENBQUN6ckQsQ0FBQyxDQUFDbTdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDd3NCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUNBLE1BQU0sRUFBRXJvQyxDQUFDLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUNrcEIsU0FBUyxDQUFDLElBQUksQ0FBQ21mLE1BQU0sQ0FBQyxJQUFJLENBQUMwRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMxRCxNQUFNLENBQUM5c0MsR0FBRyxDQUFDLENBQUM4TixLQUFLLENBQUMsSUFBSSxDQUFDb2QsT0FBTyxDQUFDbUQsVUFBVSxDQUFDLENBQUMsQ0FBQ25hLE1BQU0sQ0FBQyxJQUFJLENBQUNnWCxPQUFPLENBQUNvRCxXQUFXLENBQUMsQ0FBQyxDQUFDdmdCLFFBQVEsQ0FBQyxVQUFVLENBQUM2RCxJQUFJLENBQUMsSUFBSSxDQUFDMGlDLGFBQWEsQ0FBQzFpQyxJQUFJLENBQUMsSUFBSSxDQUFDMWxCLEdBQUcsQ0FBQyxJQUFJLENBQUNvb0QsYUFBYSxDQUFDcG9ELEdBQUcsQ0FBQyxJQUFJLENBQUN3b0MsTUFBTSxDQUFDLEVBQUUzMUMsQ0FBQyxDQUFDMjFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb1ksTUFBTSxDQUFDdGdDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQ21rQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtYyxNQUFNLENBQUMsSUFBSSxDQUFDNWhCLE9BQU8sQ0FBQyxDQUFDNlMsT0FBTyxDQUFDLENBQUNsMUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzRiLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQ2lsQixLQUFLLENBQUMsSUFBSSxDQUFDeWxDLFlBQVksQ0FBQ3psQyxLQUFLLENBQUNqbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQy9MLENBQUMsQ0FBQyxRQUFRLENBQUMybkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUN3MEQsWUFBWSxDQUFDbjRCLENBQUMsQ0FBQyxJQUFJLENBQUN3ekIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDaDlCLElBQUksQ0FBQ3dKLENBQUMsQ0FBQ3hKLElBQUksQ0FBQy9vQixDQUFDLENBQUNpbEIsS0FBSyxDQUFDL3VCLENBQUMsQ0FBQyt1QixLQUFLLENBQUNqbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxRQUFRLENBQUNrUCxDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxJQUFJLENBQUNtNEIsWUFBWSxDQUFDaCtDLENBQUMsQ0FBQyxJQUFJLENBQUNxNUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDMWlELEdBQUcsQ0FBQ3FKLENBQUMsQ0FBQ3JKLEdBQUcsQ0FBQ25OLENBQUMsQ0FBQ20xQixNQUFNLENBQUNrSCxDQUFDLENBQUNsSCxNQUFNLENBQUNuMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsUUFBUSxDQUFDM1csQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDbTFCLE1BQU0sQ0FBQyxJQUFJLENBQUNxL0IsWUFBWSxDQUFDci9CLE1BQU0sQ0FBQ24xQixDQUFDLENBQUMsQ0FBQyxDQUFDazBELEVBQUUsQ0FBQyxRQUFRLENBQUNwcUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLE9BQU8zVyxDQUFDLENBQUM3aUIsTUFBTSxDQUFDLElBQUksQ0FBQ204QyxPQUFPLENBQUMzaUIsQ0FBQyxDQUFDbDZCLEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQzQ4QyxPQUFPLENBQUNsMUMsQ0FBQyxDQUFDM0gsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDMkgsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDODNCLEVBQUUsQ0FBQyxRQUFRLENBQUNycUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLE9BQU8zVyxDQUFDLENBQUM3aUIsTUFBTSxDQUFDLElBQUksQ0FBQ204QyxPQUFPLENBQUMzaUIsQ0FBQyxDQUFDbDZCLEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQzQ4QyxPQUFPLENBQUNqaEQsQ0FBQyxDQUFDb0UsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDMkgsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDKzNCLEVBQUUsQ0FBQyxRQUFRLENBQUN0cUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLE9BQU8zVyxDQUFDLENBQUM3aUIsTUFBTSxDQUFDLElBQUksQ0FBQ204QyxPQUFPLENBQUN4b0MsQ0FBQyxDQUFDclUsS0FBSyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDNDhDLE9BQU8sQ0FBQ2wxQyxDQUFDLENBQUMzSCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMySCxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnNEIsRUFBRSxDQUFDLFFBQVEsQ0FBQ3ZxRCxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsT0FBTzNXLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsSUFBSSxDQUFDbThDLE9BQU8sQ0FBQ3hvQyxDQUFDLENBQUNyVSxLQUFLLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUM0OEMsT0FBTyxDQUFDamhELENBQUMsQ0FBQ29FLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzJILENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDczRCLFVBQVUsQ0FBQyxRQUFRLENBQUM3cUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQytnQixNQUFNLENBQUNwdUQsSUFBSSxDQUFDLElBQUksQ0FBQzZLLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQ3NzQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUd4aUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3VpQyxRQUFRLENBQUN2aUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQ3NzQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2doQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNoaEIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDaW5CLGVBQWUsQ0FBQyxJQUFJLENBQUNBLGVBQWUsQ0FBQ3BuQixPQUFPLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUM0aEIsTUFBTSxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDLytCLFFBQVEsQ0FBQyxJQUFJLENBQUNBLFFBQVEsQ0FBQzhvQixJQUFJLENBQUMsSUFBSSxDQUFDQSxJQUFJLENBQUMwYyxZQUFZLENBQUMsSUFBSSxDQUFDQSxZQUFZLENBQUMzRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNBLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNucUMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQytnQixNQUFNLENBQUN0MUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQ21JLElBQUksQ0FBQyxRQUFRLENBQUNwVyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyt0QyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUNwM0IsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQzhDLE9BQU8sQ0FBQzBULENBQUMsQ0FBQ3hXLENBQUMsQ0FBQ3d6RCw2QkFBNkIsQ0FBQzFuQixDQUFDLENBQUN0MUIsQ0FBQyxDQUFDbFYsTUFBTSxFQUFFLFdBQVcsQ0FBQ3dKLElBQUksQ0FBQzBMLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlNLFFBQVEsQ0FBQyxDQUFDekMsQ0FBQyxDQUFDNmtDLENBQUMsRUFBRTlyQyxDQUFDLENBQUMwOUMsVUFBVSxDQUFDbG5DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN4VyxDQUFDLENBQUN5MEQsUUFBUSxDQUFDdC9CLE1BQU0sQ0FBQytXLENBQUMsQ0FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQzlyQyxDQUFDLENBQUN5MEQsUUFBUSxDQUFDMWxDLEtBQUssQ0FBQ3dkLENBQUMsQ0FBQyxDQUFDeGQsS0FBSyxDQUFDL3VCLENBQUMsQ0FBQzgzQyxJQUFJLENBQUMvb0IsS0FBSyxDQUFDbWQsQ0FBQyxDQUFDL1csTUFBTSxDQUFDbjFCLENBQUMsQ0FBQzgzQyxJQUFJLENBQUMzaUIsTUFBTSxDQUFDbHVCLENBQUMsQ0FBQyxDQUFDMFEsQ0FBQyxDQUFDMFgsVUFBVSxDQUFDcnZCLENBQUMsQ0FBQ21zQyxPQUFPLENBQUNsckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ2poQixDQUFDLENBQUNndkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDN3lCLENBQUMsQ0FBQzZ2RCxnQkFBZ0IsQ0FBQ2g5QixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUNnYyxDQUFDLENBQUN4ZixVQUFVLENBQUNydkIsQ0FBQyxDQUFDbXNDLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDamhCLENBQUMsQ0FBQ2d2QixRQUFRLENBQUM3aEIsR0FBRyxDQUFDbk4sQ0FBQyxDQUFDNnZELGdCQUFnQixDQUFDMWlELEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQ25OLENBQUMsQ0FBQ21zQyxPQUFPLENBQUMxVSxPQUFPLENBQUMvUixDQUFDLENBQUM3aUIsTUFBTSxDQUFDMHBDLENBQUMsQ0FBQ3NDLENBQUMsRUFBRWwzQixDQUFDLENBQUMsQ0FBQ3hLLEdBQUcsQ0FBQzBoQyxDQUFDLENBQUNoYyxJQUFJLENBQUNsYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNpYyxRQUFRLENBQUN5SSxDQUFDLENBQUNzMkIsZUFBZSxDQUFDcC9CLE1BQU0sQ0FBQzhJLENBQUMsQ0FBQ3UyQixhQUFhLENBQUM5K0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXVJLENBQUMsQ0FBQyxDQUFDdE4sS0FBSyxDQUFDTSxVQUFVLENBQUNydkIsQ0FBQyxDQUFDbXNDLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ2tVLE1BQU0sQ0FBQzlGLFVBQVUsQ0FBQ3J2QixDQUFDLENBQUNtc0MsT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOVQsR0FBRyxDQUFDa2lCLFVBQVUsQ0FBQ3J2QixDQUFDLENBQUNtc0MsT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDNFIsSUFBSSxDQUFDeEQsVUFBVSxDQUFDcnZCLENBQUMsQ0FBQ21zQyxPQUFPLENBQUNsckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3pLLENBQUMsRUFBRUEsQ0FBQyxDQUFDbFYsTUFBTSxFQUFFb2tCLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeUssR0FBRyxDQUFDLENBQUM4TixLQUFLLENBQUNzTixDQUFDLENBQUN0TixLQUFLLENBQUNvRyxNQUFNLENBQUNrSCxDQUFDLENBQUNsSCxNQUFNLENBQUMsQ0FBQyxDQUFDbjFCLENBQUMsQ0FBQ2cxRCxZQUFZLENBQUMzNEIsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDMjBELFVBQVUsQ0FBQyxRQUFRLENBQUM3cUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDK2dCLE1BQU0sQ0FBQ3QxQyxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDOUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSW5ILENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDSyxDQUFDLENBQUM3bUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDK3RDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQzk3QyxDQUFDLENBQUM0MEIsQ0FBQyxDQUFDenBDLE9BQU8sQ0FBQytyQyxDQUFDLENBQUN0QyxDQUFDLENBQUNKLE9BQU8sQ0FBQ2tELENBQUMsQ0FBQzEzQixDQUFDLENBQUNpMkMsV0FBVyxDQUFDbmUsQ0FBQyxDQUFDSixFQUFFLFdBQVczcEIsQ0FBQyxDQUFDMnBCLENBQUMsQ0FBQzd0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDc0osSUFBSSxDQUFDdWtDLENBQUMsQ0FBQyxDQUFDUixDQUFDLENBQUMzOUIsTUFBTSxDQUFDLENBQUMsQ0FBQzFQLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzZ0QyxDQUFDLENBQUNJLENBQUMsRUFBRSxDQUFDbEQsQ0FBQyxDQUFDaXBCLGdCQUFnQixDQUFDOXZDLENBQUMsQ0FBQytwQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMza0MsSUFBSSxDQUFDdWtDLENBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUd2eEMsUUFBUSxDQUFDLENBQUN5dUMsQ0FBQyxDQUFDa3BCLGVBQWUsQ0FBQyxDQUFDNWlDLElBQUksQ0FBQyxDQUFDLENBQUMxbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDby9CLENBQUMsQ0FBQ21wQixpQkFBaUIsQ0FBQyxDQUFDN2lDLElBQUksQ0FBQyxDQUFDLENBQUMxbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDby9CLENBQUMsQ0FBQ29wQixVQUFVLENBQUMsQ0FBQ3hwQixPQUFPLENBQUN6bUIsQ0FBQyxDQUFDNW5CLFFBQVEsQ0FBQyxDQUFDKzBCLElBQUksQ0FBQyxDQUFDLENBQUMxbEIsR0FBRyxDQUFDLENBQUMsQ0FBQzRoQixLQUFLLENBQUNySixDQUFDLENBQUM1bkIsUUFBUSxDQUFDLENBQUNpeEIsS0FBSyxDQUFDLENBQUMsQ0FBQ29HLE1BQU0sQ0FBQ3pQLENBQUMsQ0FBQzVuQixRQUFRLENBQUMsQ0FBQ3EzQixNQUFNLENBQUMsQ0FBQyxFQUFFcjNCLFFBQVEsQ0FBQ21rQixJQUFJLENBQUN4aEIsVUFBVSxDQUFDc3ZDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ2ptQyxDQUFDLENBQUM0YixDQUFDLENBQUMrcEIsQ0FBQyxDQUFDLENBQUN6dkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMzakIsSUFBSSxDQUFDLFFBQVEsQ0FBQzJqQixDQUFDLENBQUMyVyxDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLENBQUM2bUIsQ0FBQyxDQUFDNm1CLElBQUksQ0FBQ3RwRCxDQUFDLENBQUNtWCxHQUFHLENBQUMsU0FBUyxDQUFDb2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrUSxDQUFDLENBQUNrcEIsZUFBZSxDQUFDM3JELENBQUMsQ0FBQ203QixNQUFNLENBQUMsQ0FBQyxDQUFDc0gsQ0FBQyxDQUFDbXBCLGlCQUFpQixDQUFDNXJELENBQUMsQ0FBQ2tsQixRQUFRLENBQUMsQ0FBQyxDQUFDdWQsQ0FBQyxDQUFDcXBCLGFBQWEsQ0FBQyxDQUFDemdDLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUMrc0MsV0FBVyxDQUFDLENBQUMsQ0FBQzcyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrdUIsS0FBSyxDQUFDamxCLENBQUMsQ0FBQ2d0QyxVQUFVLENBQUMsQ0FBQyxDQUFDOTJDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ2tRLENBQUMsQ0FBQ2twQixlQUFlLENBQUNqL0MsQ0FBQyxDQUFDKzFCLENBQUMsQ0FBQ3FwQixhQUFhLENBQUN6Z0MsTUFBTSxDQUFDMlcsQ0FBQyxDQUFDUyxDQUFDLENBQUNxcEIsYUFBYSxDQUFDN21DLEtBQUssQ0FBQzluQixDQUFDLENBQUNzbEMsQ0FBQyxDQUFDbVIsVUFBVSxDQUFDak8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDQSxDQUFDLENBQUNLLFdBQVcsQ0FBQ2hFLENBQUMsQ0FBQ0ksQ0FBQyxDQUFDSyxDQUFDLENBQUNtUixVQUFVLENBQUNqTyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDTSxZQUFZLENBQUN2NUIsQ0FBQyxDQUFDKzFCLENBQUMsQ0FBQ29wQixVQUFVLENBQUMsQ0FBQ3hwQixPQUFPLENBQUNzRCxDQUFDLENBQUM1YyxJQUFJLENBQUN3SixDQUFDLENBQUN4SixJQUFJLENBQUMxbEIsR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQ2x2QixHQUFHLENBQUM0aEIsS0FBSyxDQUFDOW5CLENBQUMsQ0FBQ2t1QixNQUFNLENBQUMrVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2luQixNQUFNLENBQUMsUUFBUSxDQUFDcnBELENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDK3RDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQ3ZuQixDQUFDLENBQUNqbEMsQ0FBQyxDQUFDbkUsT0FBTyxDQUFDeXBDLENBQUMsQ0FBQ3RsQyxDQUFDLENBQUN3dUQsZUFBZSxDQUFDOTlDLENBQUMsQ0FBQzFRLENBQUMsQ0FBQytuQixRQUFRLENBQUM2ZixDQUFDLENBQUM1bkMsQ0FBQyxDQUFDcXNELFlBQVksRUFBRXhwRCxDQUFDLENBQUM4ZixRQUFRLENBQUN5bEIsQ0FBQyxDQUFDLENBQUNsaUMsR0FBRyxDQUFDLENBQUMsQ0FBQzBsQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM0YyxDQUFDLENBQUN4b0MsQ0FBQyxDQUFDdXVELGdCQUFnQixDQUFDcmhDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NiLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRzN4QyxRQUFRLEVBQUUsUUFBUSxDQUFDZ04sSUFBSSxDQUFDMmtDLENBQUMsQ0FBQ3h1QixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDb3VCLENBQUMsQ0FBQzlDLENBQUMsQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQ2tiLElBQUksQ0FBQyxDQUFDNXJCLENBQUMsQ0FBQ3dxRCxPQUFPLENBQUNsbEIsQ0FBQyxDQUFDMVosSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM1ckIsQ0FBQyxDQUFDNndDLElBQUksQ0FBQy9vQixLQUFLLENBQUM5bkIsQ0FBQyxDQUFDNndDLElBQUksQ0FBQy9vQixLQUFLLENBQUMsQ0FBQzluQixDQUFDLENBQUN3cUQsT0FBTyxDQUFDeHFELENBQUMsQ0FBQytuQixRQUFRLENBQUM2RCxJQUFJLENBQUMwWixDQUFDLENBQUMxWixJQUFJLENBQUM1ckIsQ0FBQyxDQUFDK25CLFFBQVEsQ0FBQzZELElBQUksQ0FBQ3djLENBQUMsQ0FBQ3hjLElBQUksQ0FBQyxDQUFDZ2MsQ0FBQyxFQUFFLENBQUM1bkMsQ0FBQyxDQUFDNndDLElBQUksQ0FBQzNpQixNQUFNLENBQUNsdUIsQ0FBQyxDQUFDNndDLElBQUksQ0FBQy9vQixLQUFLLENBQUM5bkIsQ0FBQyxDQUFDNHJELFdBQVcsQ0FBQzErQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2x0QixDQUFDLENBQUMrbkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDcVosQ0FBQyxDQUFDNmhCLE1BQU0sQ0FBQ3hoQixDQUFDLENBQUMxWixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNsYixDQUFDLENBQUN4SyxHQUFHLENBQUMsQ0FBQ2xHLENBQUMsQ0FBQ3dxRCxPQUFPLENBQUNsbEIsQ0FBQyxDQUFDcC9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDbEcsQ0FBQyxDQUFDNndDLElBQUksQ0FBQzNpQixNQUFNLENBQUNsdUIsQ0FBQyxDQUFDNndDLElBQUksQ0FBQzNpQixNQUFNLENBQUMsQ0FBQ2x1QixDQUFDLENBQUN3cUQsT0FBTyxDQUFDeHFELENBQUMsQ0FBQytuQixRQUFRLENBQUM3aEIsR0FBRyxDQUFDby9CLENBQUMsQ0FBQ3AvQixHQUFHLENBQUNsRyxDQUFDLENBQUMrbkIsUUFBUSxDQUFDN2hCLEdBQUcsQ0FBQyxDQUFDMGhDLENBQUMsRUFBRSxDQUFDNW5DLENBQUMsQ0FBQzZ3QyxJQUFJLENBQUMvb0IsS0FBSyxDQUFDOW5CLENBQUMsQ0FBQzZ3QyxJQUFJLENBQUMzaUIsTUFBTSxDQUFDbHVCLENBQUMsQ0FBQzRyRCxXQUFXLENBQUMxK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsdEIsQ0FBQyxDQUFDK25CLFFBQVEsQ0FBQzdoQixHQUFHLENBQUNsRyxDQUFDLENBQUN3cUQsT0FBTyxDQUFDbGxCLENBQUMsQ0FBQ3AvQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNxSixDQUFDLENBQUN2UCxDQUFDLENBQUN1dUQsZ0JBQWdCLENBQUNoMEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHeUYsQ0FBQyxDQUFDa2xDLE9BQU8sQ0FBQ2o3QixNQUFNLENBQUMsQ0FBQyxDQUFDMVAsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDc3FDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQ2hoQyxJQUFJLENBQUM3RCxDQUFDLENBQUN1dUQsZ0JBQWdCLENBQUN2MEMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUN6SyxDQUFDLEVBQUVzMUIsQ0FBQyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDZytCLE1BQU0sQ0FBQ3BTLElBQUksQ0FBQzVyQixDQUFDLENBQUMwdUQsVUFBVSxDQUFDOWlDLElBQUksQ0FBQzVyQixDQUFDLENBQUMrbkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQ2crQixNQUFNLENBQUM5M0IsR0FBRyxDQUFDbEcsQ0FBQyxDQUFDMHVELFVBQVUsQ0FBQ3hvRCxHQUFHLENBQUNsRyxDQUFDLENBQUMrbkIsUUFBUSxDQUFDN2hCLEdBQUcsQ0FBQyxDQUFDLENBQUNsRyxDQUFDLENBQUNnK0IsTUFBTSxDQUFDcFMsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQ2tsQyxPQUFPLENBQUNsSCxNQUFNLENBQUMsQ0FBQyxDQUFDcFMsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQ2crQixNQUFNLENBQUM5M0IsR0FBRyxDQUFDbEcsQ0FBQyxDQUFDa2xDLE9BQU8sQ0FBQ2xILE1BQU0sQ0FBQyxDQUFDLENBQUM5M0IsR0FBRyxDQUFDLENBQUNuTixDQUFDLENBQUMwRCxJQUFJLENBQUM4ckMsR0FBRyxDQUFDdm9DLENBQUMsQ0FBQ3d0RCxRQUFRLENBQUMxbEMsS0FBSyxDQUFDLENBQUM5bkIsQ0FBQyxDQUFDd3FELE9BQU8sQ0FBQ3hxRCxDQUFDLENBQUNnK0IsTUFBTSxDQUFDcFMsSUFBSSxDQUFDd2MsQ0FBQyxDQUFDeGMsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQ2crQixNQUFNLENBQUNwUyxJQUFJLENBQUMwWixDQUFDLENBQUMxWixJQUFJLENBQUMsQ0FBQyxDQUFDd0osQ0FBQyxDQUFDMzRCLElBQUksQ0FBQzhyQyxHQUFHLENBQUN2b0MsQ0FBQyxDQUFDd3RELFFBQVEsQ0FBQ3QvQixNQUFNLENBQUMsQ0FBQ2x1QixDQUFDLENBQUN3cUQsT0FBTyxDQUFDeHFELENBQUMsQ0FBQ2crQixNQUFNLENBQUM5M0IsR0FBRyxDQUFDa2lDLENBQUMsQ0FBQ2xpQyxHQUFHLENBQUNsRyxDQUFDLENBQUNnK0IsTUFBTSxDQUFDOTNCLEdBQUcsQ0FBQ28vQixDQUFDLENBQUNwL0IsR0FBRyxDQUFDLENBQUMsQ0FBQ25OLENBQUMsQ0FBQ2lILENBQUMsQ0FBQzZ3QyxJQUFJLENBQUMvb0IsS0FBSyxFQUFFOW5CLENBQUMsQ0FBQzB1RCxVQUFVLENBQUM1bUMsS0FBSyxFQUFFLENBQUM5bkIsQ0FBQyxDQUFDNndDLElBQUksQ0FBQy9vQixLQUFLLENBQUM5bkIsQ0FBQyxDQUFDMHVELFVBQVUsQ0FBQzVtQyxLQUFLLENBQUMvdUIsQ0FBQyxDQUFDNnVDLENBQUMsRUFBRSxDQUFDNW5DLENBQUMsQ0FBQzZ3QyxJQUFJLENBQUMzaUIsTUFBTSxDQUFDbHVCLENBQUMsQ0FBQzZ3QyxJQUFJLENBQUMvb0IsS0FBSyxDQUFDOW5CLENBQUMsQ0FBQzRyRCxXQUFXLENBQUMxK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tJLENBQUMsQ0FBQ3AxQixDQUFDLENBQUM2d0MsSUFBSSxDQUFDM2lCLE1BQU0sRUFBRWx1QixDQUFDLENBQUMwdUQsVUFBVSxDQUFDeGdDLE1BQU0sRUFBRSxDQUFDbHVCLENBQUMsQ0FBQzZ3QyxJQUFJLENBQUMzaUIsTUFBTSxDQUFDbHVCLENBQUMsQ0FBQzB1RCxVQUFVLENBQUN4Z0MsTUFBTSxDQUFDa0gsQ0FBQyxDQUFDd1MsQ0FBQyxFQUFFLENBQUM1bkMsQ0FBQyxDQUFDNndDLElBQUksQ0FBQy9vQixLQUFLLENBQUM5bkIsQ0FBQyxDQUFDNndDLElBQUksQ0FBQzNpQixNQUFNLENBQUNsdUIsQ0FBQyxDQUFDNHJELFdBQVcsQ0FBQzErQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ2x0QixDQUFDLENBQUMrbkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQ2l1RCxZQUFZLENBQUNyaUMsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQytuQixRQUFRLENBQUM3aEIsR0FBRyxDQUFDbEcsQ0FBQyxDQUFDaXVELFlBQVksQ0FBQy9uRCxHQUFHLENBQUNsRyxDQUFDLENBQUM2d0MsSUFBSSxDQUFDL29CLEtBQUssQ0FBQzluQixDQUFDLENBQUNrdUQsUUFBUSxDQUFDcG1DLEtBQUssQ0FBQzluQixDQUFDLENBQUM2d0MsSUFBSSxDQUFDM2lCLE1BQU0sQ0FBQ2x1QixDQUFDLENBQUNrdUQsUUFBUSxDQUFDaGdDLE1BQU0sQ0FBQyxDQUFDLENBQUNqVixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcFcsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDK3RDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQ3p6RCxDQUFDLENBQUM4SixDQUFDLENBQUNoSCxPQUFPLENBQUN1NUIsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQzJyRCxlQUFlLENBQUNqL0MsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDNHJELGlCQUFpQixDQUFDNXBCLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUMwckQsZ0JBQWdCLENBQUN2dUQsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDaWtELE1BQU0sQ0FBQyxDQUFDN2hCLENBQUMsQ0FBQ2psQyxDQUFDLENBQUNnK0IsTUFBTSxDQUFDLENBQUMsQ0FBQ3NILENBQUMsQ0FBQ3RsQyxDQUFDLENBQUNxb0MsVUFBVSxDQUFDLENBQUMsQ0FBQ3hsQyxDQUFDLENBQUMycUQsUUFBUSxDQUFDMWxDLEtBQUssQ0FBQ3BYLENBQUMsQ0FBQzFRLENBQUMsQ0FBQ3NvQyxXQUFXLENBQUMsQ0FBQyxDQUFDemxDLENBQUMsQ0FBQzJxRCxRQUFRLENBQUN0L0IsTUFBTSxDQUFDcnJCLENBQUMsQ0FBQzJuRCxPQUFPLEVBQUUsQ0FBQ3p4RCxDQUFDLENBQUN5M0IsT0FBTyxFQUFFLFVBQVUsQ0FBQzNzQixJQUFJLENBQUNnaEMsQ0FBQyxDQUFDN3FCLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFeUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDekUsR0FBRyxDQUFDLENBQUM0UixJQUFJLENBQUNxWixDQUFDLENBQUNyWixJQUFJLENBQUNyYyxDQUFDLENBQUNxYyxJQUFJLENBQUN3SixDQUFDLENBQUN4SixJQUFJLENBQUM5RCxLQUFLLENBQUN3ZCxDQUFDLENBQUNwWCxNQUFNLENBQUN4ZCxDQUFDLENBQUMsQ0FBQyxDQUFDN04sQ0FBQyxDQUFDMm5ELE9BQU8sRUFBRSxDQUFDenhELENBQUMsQ0FBQ3kzQixPQUFPLEVBQUUsUUFBUSxDQUFDM3NCLElBQUksQ0FBQ2doQyxDQUFDLENBQUM3cUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUV5RSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6RSxHQUFHLENBQUMsQ0FBQzRSLElBQUksQ0FBQ3FaLENBQUMsQ0FBQ3JaLElBQUksQ0FBQ3JjLENBQUMsQ0FBQ3FjLElBQUksQ0FBQ3dKLENBQUMsQ0FBQ3hKLElBQUksQ0FBQzlELEtBQUssQ0FBQ3dkLENBQUMsQ0FBQ3BYLE1BQU0sQ0FBQ3hkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrTixDQUFDLENBQUM0bUIsRUFBRSxDQUFDK2dCLE1BQU0sQ0FBQ3QxQyxHQUFHLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDOUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSW5ILENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyt0QyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUN6ekQsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDaEgsT0FBTyxDQUFDNGlCLENBQUMsQ0FBQzFsQixDQUFDLENBQUMweUQsVUFBVSxDQUFDLENBQUMzd0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSStILENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzViLENBQUMsQ0FBQ2tWLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDK1AsS0FBSyxDQUFDTSxVQUFVLENBQUN2bEIsQ0FBQyxDQUFDaWxCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ29HLE1BQU0sQ0FBQzlGLFVBQVUsQ0FBQ3ZsQixDQUFDLENBQUNxckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDdEMsSUFBSSxDQUFDeEQsVUFBVSxDQUFDdmxCLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOVQsR0FBRyxDQUFDa2lCLFVBQVUsQ0FBQ3ZsQixDQUFDLENBQUNtWCxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNreUMsTUFBTSxDQUFDLFFBQVEsQ0FBQ3JwRCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyt0QyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUNqOUMsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ3Y1QixPQUFPLENBQUNncEMsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDbTRCLFlBQVksQ0FBQ3Z0RCxDQUFDLENBQUNvMUIsQ0FBQyxDQUFDd3pCLGdCQUFnQixDQUFDM2pCLENBQUMsQ0FBQyxDQUFDL1csTUFBTSxDQUFDa0gsQ0FBQyxDQUFDeWIsSUFBSSxDQUFDM2lCLE1BQU0sQ0FBQzJXLENBQUMsQ0FBQzNXLE1BQU0sRUFBRSxDQUFDLENBQUNwRyxLQUFLLENBQUNzTixDQUFDLENBQUN5YixJQUFJLENBQUMvb0IsS0FBSyxDQUFDK2MsQ0FBQyxDQUFDL2MsS0FBSyxFQUFFLENBQUMsQ0FBQzVoQixHQUFHLENBQUNrdkIsQ0FBQyxDQUFDck4sUUFBUSxDQUFDN2hCLEdBQUcsQ0FBQ2xHLENBQUMsQ0FBQ2tHLEdBQUcsRUFBRSxDQUFDLENBQUMwbEIsSUFBSSxDQUFDd0osQ0FBQyxDQUFDck4sUUFBUSxDQUFDNkQsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQzRyQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUNuTixDQUFDLENBQUNsUCxDQUFDLENBQUNrOEMsVUFBVSxDQUFDLENBQUMzd0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSStILENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzJXLENBQUMsQ0FBQzNXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDeEksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUNvTyxPQUFPLENBQUNsWSxDQUFDLENBQUN1ekQsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNqeUQsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUNva0IsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQytwQyxDQUFDLENBQUMsUUFBUSxDQUFDcG1CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUN2eUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ29pQyxDQUFDLENBQUNwaUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM5SixDQUFDLEVBQUVBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQ3dXLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQ3pLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMEosSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN3RixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMvRixVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQytGLENBQUMsQ0FBQzRtQixFQUFFLENBQUMrZ0IsTUFBTSxDQUFDdDFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM5RyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJbkgsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDK3RDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQ3p6RCxDQUFDLENBQUM4SixDQUFDLENBQUNndUMsSUFBSSxDQUFDaHVDLENBQUMsQ0FBQ2lwRCxLQUFLLENBQUNqcEQsQ0FBQyxDQUFDeXBELGVBQWUsQ0FBQ3J3RCxLQUFLLENBQUMsQ0FBQyxDQUFDNEcsQ0FBQyxDQUFDaXBELEtBQUssQ0FBQzl4QyxHQUFHLENBQUMsQ0FBQ3FSLE9BQU8sQ0FBQyxHQUFHLENBQUN0UixPQUFPLENBQUMsT0FBTyxDQUFDZ08sUUFBUSxDQUFDLFVBQVUsQ0FBQ21HLE1BQU0sQ0FBQ24xQixDQUFDLENBQUNtMUIsTUFBTSxDQUFDcEcsS0FBSyxDQUFDL3VCLENBQUMsQ0FBQyt1QixLQUFLLENBQUMrRCxNQUFNLENBQUMsQ0FBQyxDQUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDMWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDckQsQ0FBQyxDQUFDOGtDLFNBQVMsQ0FBQzlrQyxDQUFDLENBQUNpcEQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUNydEMsQ0FBQyxDQUFDMHZCLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBT3RyQyxDQUFDLENBQUNoSCxPQUFPLENBQUNpd0QsS0FBSyxFQUFFanBELENBQUMsQ0FBQ2lwRCxLQUFLLENBQUMvNEIsUUFBUSxDQUFDLElBQUksQ0FBQ2wzQixPQUFPLENBQUNpd0QsS0FBSyxDQUFDLENBQUNqcEQsQ0FBQyxDQUFDaXBELEtBQUssQ0FBQ3RsQyxRQUFRLENBQUMzakIsQ0FBQyxDQUFDaWtELE1BQU0sQ0FBQyxDQUFDLENBQUNvRixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcnBELENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyt0QyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMzcEQsQ0FBQyxDQUFDaXBELEtBQUssRUFBRWpwRCxDQUFDLENBQUNpcEQsS0FBSyxDQUFDOXhDLEdBQUcsQ0FBQyxDQUFDK04sUUFBUSxDQUFDLFVBQVUsQ0FBQ21HLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUNndUMsSUFBSSxDQUFDM2lCLE1BQU0sQ0FBQ3BHLEtBQUssQ0FBQ2psQixDQUFDLENBQUNndUMsSUFBSSxDQUFDL29CLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzdPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlwVyxDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMrdEMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDM3BELENBQUMsQ0FBQ2lwRCxLQUFLLEVBQUVqcEQsQ0FBQyxDQUFDaWtELE1BQU0sRUFBRWprRCxDQUFDLENBQUNpa0QsTUFBTSxDQUFDdnNELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ2QsV0FBVyxDQUFDb0osQ0FBQyxDQUFDaXBELEtBQUssQ0FBQ3Z4RCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2trQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDK2dCLE1BQU0sQ0FBQ3QxQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDbzdDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlycEQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyt0QyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUNwM0IsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQzhDLE9BQU8sQ0FBQzBULENBQUMsQ0FBQ3hXLENBQUMsQ0FBQzgzQyxJQUFJLENBQUNoTSxDQUFDLENBQUM5ckMsQ0FBQyxDQUFDdzBELFlBQVksQ0FBQ3Z0RCxDQUFDLENBQUNqSCxDQUFDLENBQUM2dkQsZ0JBQWdCLENBQUMzakIsQ0FBQyxDQUFDbHNDLENBQUMsQ0FBQzB0RCxJQUFJLENBQUNuaEIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPbFEsQ0FBQyxDQUFDeXhCLElBQUksQ0FBQyxDQUFDenhCLENBQUMsQ0FBQ3l4QixJQUFJLENBQUN6eEIsQ0FBQyxDQUFDeXhCLElBQUksQ0FBQyxDQUFDenhCLENBQUMsQ0FBQ3l4QixJQUFJLENBQUNuMkMsQ0FBQyxDQUFDNDBCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNzQyxDQUFDLENBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOEMsQ0FBQyxDQUFDM3JDLElBQUksQ0FBQzByQixLQUFLLENBQUMsQ0FBQzVZLENBQUMsQ0FBQ3VZLEtBQUssQ0FBQytjLENBQUMsQ0FBQy9jLEtBQUssQ0FBQyxDQUFDcFgsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzgzQixDQUFDLENBQUMvckMsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQyxDQUFDNVksQ0FBQyxDQUFDMmUsTUFBTSxDQUFDMlcsQ0FBQyxDQUFDM1csTUFBTSxDQUFDLENBQUMwWixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMWEsQ0FBQyxDQUFDMlgsQ0FBQyxDQUFDL2MsS0FBSyxDQUFDc2dCLENBQUMsQ0FBQ2EsQ0FBQyxDQUFDcEUsQ0FBQyxDQUFDM1csTUFBTSxDQUFDc2EsQ0FBQyxDQUFDVSxDQUFDLENBQUM5VCxDQUFDLENBQUNyTSxRQUFRLEVBQUVtRSxDQUFDLENBQUNrSSxDQUFDLENBQUNyTSxRQUFRLENBQUMvbEIsQ0FBQyxDQUFDb3lCLENBQUMsQ0FBQzQyQixTQUFTLEVBQUUvaUIsQ0FBQyxDQUFDN1QsQ0FBQyxDQUFDNDJCLFNBQVMsQ0FBQ3RxRCxDQUFDLENBQUMwekIsQ0FBQyxDQUFDdE0sUUFBUSxFQUFFc00sQ0FBQyxDQUFDdE0sUUFBUSxDQUFDb0UsQ0FBQyxDQUFDcmEsQ0FBQyxDQUFDdWlCLENBQUMsQ0FBQzYyQixTQUFTLEVBQUU3MkIsQ0FBQyxDQUFDNjJCLFNBQVMsQ0FBQ2hqQixDQUFDLENBQUM3VCxDQUFDLENBQUN5eEIsSUFBSSxDQUFDdmhCLENBQUMsQ0FBQzVqQyxDQUFDLEVBQUUsQ0FBQ3dyQixDQUFDLEVBQUV4YyxDQUFDLENBQUMsQ0FBQ21DLENBQUMsRUFBRSxDQUFDbzJCLENBQUMsRUFBRXJCLENBQUMsQ0FBQyxDQUFDc0IsQ0FBQyxFQUFFLENBQUNoYyxDQUFDLEVBQUV4YyxDQUFDLENBQUMsQ0FBQzFOLENBQUMsRUFBRSxDQUFDaW1DLENBQUMsRUFBRXJCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQy9qQyxJQUFJLENBQUNvaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUM4M0MsSUFBSSxDQUFDL29CLEtBQUssQ0FBQ29GLENBQUMsQ0FBQ24wQixDQUFDLENBQUM4M0MsSUFBSSxDQUFDM2lCLE1BQU0sQ0FBQythLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3BsQyxJQUFJLENBQUNvaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUM4M0MsSUFBSSxDQUFDL29CLEtBQUssQ0FBQ29GLENBQUMsQ0FBQ24wQixDQUFDLENBQUM4M0MsSUFBSSxDQUFDM2lCLE1BQU0sQ0FBQythLENBQUMsQ0FBQ2x3QyxDQUFDLENBQUNndkIsUUFBUSxDQUFDN2hCLEdBQUcsQ0FBQ2xHLENBQUMsQ0FBQ2tHLEdBQUcsQ0FBQ3NpQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMza0MsSUFBSSxDQUFDb2hDLENBQUMsQ0FBQyxDQUFDLENBQUNsc0MsQ0FBQyxDQUFDODNDLElBQUksQ0FBQy9vQixLQUFLLENBQUNvRixDQUFDLENBQUNuMEIsQ0FBQyxDQUFDODNDLElBQUksQ0FBQzNpQixNQUFNLENBQUMrYSxDQUFDLENBQUNsd0MsQ0FBQyxDQUFDZ3ZCLFFBQVEsQ0FBQzZELElBQUksQ0FBQzVyQixDQUFDLENBQUM0ckIsSUFBSSxDQUFDd2MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRWEsQ0FBQyxDQUFDckIsQ0FBQyxFQUFFLENBQUMsRUFBRTFhLENBQUMsQ0FBQ3hjLENBQUMsQ0FBQyxFQUFFLENBQUM3TixDQUFDLENBQUM5SixDQUFDLENBQUNxMUQsK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ25sQixDQUFDLENBQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3dUMsQ0FBQyxDQUFDODNDLElBQUksQ0FBQzNpQixNQUFNLENBQUMrYSxDQUFDLENBQUNsd0MsQ0FBQyxDQUFDZ3ZCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUNsRyxDQUFDLENBQUNrRyxHQUFHLENBQUNzaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1MsQ0FBQyxDQUFDckIsQ0FBQyxDQUFDL2tDLENBQUMsQ0FBQ3FyQixNQUFNLENBQUNuMUIsQ0FBQyxDQUFDODNDLElBQUksQ0FBQzNpQixNQUFNLENBQUMrYSxDQUFDLENBQUNsd0MsQ0FBQyxDQUFDZ3ZCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUNsRyxDQUFDLENBQUNrRyxHQUFHLENBQUMyK0IsQ0FBQyxDQUFDM1csTUFBTSxDQUFDK2EsQ0FBQyxDQUFDLENBQUMvYixDQUFDLENBQUN4YyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMzWCxDQUFDLENBQUM4M0MsSUFBSSxDQUFDL29CLEtBQUssQ0FBQ29GLENBQUMsQ0FBQ24wQixDQUFDLENBQUNndkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQzRyQixJQUFJLENBQUN3YyxDQUFDLENBQUMsQ0FBQyxDQUFDbGIsQ0FBQyxDQUFDeGMsQ0FBQyxDQUFDN04sQ0FBQyxDQUFDaWxCLEtBQUssQ0FBQy91QixDQUFDLENBQUM4M0MsSUFBSSxDQUFDL29CLEtBQUssQ0FBQ29GLENBQUMsQ0FBQ24wQixDQUFDLENBQUNndkIsUUFBUSxDQUFDNkQsSUFBSSxDQUFDNXJCLENBQUMsQ0FBQzRyQixJQUFJLENBQUNpWixDQUFDLENBQUMvYyxLQUFLLENBQUNvRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDek8sQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ21uQixTQUFTLENBQUMvdEMsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzVyQyxPQUFPLENBQUMsUUFBUSxDQUFDa0MsT0FBTyxDQUFDLENBQUMycUIsUUFBUSxDQUFDLE1BQU0sQ0FBQ29vQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM3ckMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDaVEsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQzY3QixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUN0dEIsU0FBUyxDQUFDLE9BQU8sQ0FBQ2lxQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNwd0MsSUFBSSxDQUFDLElBQUksQ0FBQzhTLE1BQU0sQ0FBQyxNQUFNLENBQUM4OUIsU0FBUyxDQUFDLElBQUksQ0FBQ2pqQyxRQUFRLENBQUMsSUFBSSxDQUFDa2pDLFNBQVMsQ0FBQyxHQUFHLENBQUNuakMsUUFBUSxDQUFDLEdBQUcsQ0FBQ2dtQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMvbUMsUUFBUSxDQUFDLENBQUM2aEIsRUFBRSxDQUFDLFFBQVEsQ0FBQ0wsRUFBRSxDQUFDLFFBQVEsQ0FBQ1AsRUFBRSxDQUFDaHlDLE1BQU0sQ0FBQ3F5QyxTQUFTLENBQUMsS0FBSyxDQUFDM0ssS0FBSyxDQUFDLFFBQVEsQ0FBQzc3QixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQ25YLENBQUMsQ0FBQyxDQUFDbTdCLE1BQU0sQ0FBQyxDQUFDLENBQUM5M0IsR0FBRyxDQUFDLENBQUMsQ0FBQ25OLENBQUMsRUFBRTBsQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6RSxHQUFHLENBQUMsS0FBSyxDQUFDblgsQ0FBQyxDQUFDcUQsR0FBRyxDQUFDbk4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeXpELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3R4QyxJQUFJLENBQUMsSUFBSSxDQUFDc2dDLEtBQUssQ0FBQyxJQUFJLENBQUMxekIsS0FBSyxDQUFDLEdBQUcsQ0FBQ2luQyxXQUFXLENBQUMsSUFBSSxDQUFDL1gsS0FBSyxDQUFDLElBQUksQ0FBQzBRLElBQUksQ0FBQyxJQUFJLENBQUMyQixTQUFTLENBQUMsSUFBSSxDQUFDUSxRQUFRLENBQUMsSUFBSSxDQUFDam1DLEtBQUssQ0FBQyxJQUFJLENBQUNzWSxJQUFJLENBQUMsSUFBSSxDQUFDZ3dCLE1BQU0sQ0FBQyxJQUFJLENBQUM4QyxXQUFXLENBQUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUNDLGtCQUFrQixDQUFDLENBQUNuc0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDbUwsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDODlCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2pqQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNrakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDbmpDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ2hCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcW5DLHVCQUF1QixDQUFDLENBQUNuRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNqakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDa2pDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25qQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2llLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FvQixXQUFXLENBQUMsQ0FBQ3IxQyxPQUFPLENBQUMsSUFBSSxDQUFDbXJCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3ByQixLQUFLLENBQUNDLE9BQU8sQ0FBQytOLEtBQUssQ0FBQyxJQUFJLENBQUNvZCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNwckIsS0FBSyxDQUFDZ08sS0FBSyxDQUFDbWtDLFNBQVMsQ0FBQyxJQUFJLENBQUMvbUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcHJCLEtBQUssQ0FBQ215QyxTQUFTLENBQUNELFNBQVMsQ0FBQyxJQUFJLENBQUM5bUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcHJCLEtBQUssQ0FBQ2t5QyxTQUFTLENBQUM5OUIsTUFBTSxDQUFDLElBQUksQ0FBQ2dYLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3ByQixLQUFLLENBQUNvVSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMwNkIsZ0JBQWdCLENBQUMsQ0FBQzMrQyxNQUFNLENBQUMsSUFBSSxDQUFDaTdCLE9BQU8sQ0FBQ2o3QixNQUFNLENBQUMsQ0FBQyxDQUFDMkcsS0FBSyxDQUFDLElBQUksQ0FBQ3MwQixPQUFPLENBQUNqN0IsTUFBTSxDQUFDLENBQUMsQ0FBQ29HLFFBQVEsQ0FBQyxDQUFDLENBQUNPLEtBQUssQ0FBQyxJQUFJLENBQUNzMEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtcUIsYUFBYSxDQUFDLElBQUksQ0FBQ25xQixPQUFPLENBQUNoOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUNyTSxPQUFPLENBQUMyL0MsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM2VCxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUN4ekQsT0FBTyxDQUFDMi9DLEtBQUssQ0FBQyxJQUFJLENBQUM2VCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUN4ekQsT0FBTyxDQUFDMkcsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDM0csT0FBTyxDQUFDMkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOHNELGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcHFCLE9BQU8sQ0FBQ2hxQixJQUFJLENBQUMsQ0FBQyxDQUFDNlcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDdkwsUUFBUSxDQUFDLElBQUksQ0FBQytvQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM1bkIsU0FBUyxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDNm5CLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNXpELE9BQU8sQ0FBQzJ2RCxTQUFTLEVBQUUvc0MsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQ3l4RCxTQUFTLEVBQUUsSUFBSSxDQUFDa0UsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM3ekQsT0FBTyxDQUFDMndELFNBQVMsRUFBRS90QyxDQUFDLENBQUMxa0IsRUFBRSxDQUFDeXlELFNBQVMsRUFBRSxJQUFJLENBQUNtRCxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDMXBCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3RxQyxPQUFPLENBQUMreUQsUUFBUSxFQUFFLElBQUksQ0FBQzF5QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMrYixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcDFDLENBQUMsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUMycUIsUUFBUSxDQUFDLE9BQU8zakIsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQzFJLE1BQU0sRUFBRTBJLENBQUMsQ0FBQ3pLLFFBQVEsQ0FBQyxDQUFDcW1CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hNLFFBQVEsQ0FBQzhQLElBQUksQ0FBQzlELENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQ3hILEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNnJDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl6b0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLElBQUksQ0FBQytsRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNrSCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzdxQixPQUFPLENBQUM0TixjQUFjLENBQUMsQ0FBQyxDQUFDOTRCLEdBQUcsQ0FBQyxJQUFJLENBQUNvMUMsV0FBVyxDQUFDLENBQUNwcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1cEMsUUFBUSxDQUFDaDlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDODhDLGFBQWEsRUFBRSxJQUFJLENBQUNucUIsT0FBTyxDQUFDaDlCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDbW5ELGFBQWEsQ0FBQyxDQUFDNXdDLENBQUMsQ0FBQzViLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQ29HLFFBQVEsQ0FBQyxDQUFDLENBQUNoVixFQUFFLENBQUN3SCxDQUFDLENBQUMrTixLQUFLLENBQUMsQ0FBQzZOLENBQUMsQ0FBQ3BrQixNQUFNLEVBQUVva0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ3ltQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUN6bUIsQ0FBQyxDQUFDMkgsTUFBTSxDQUFDLElBQUksQ0FBQzhlLE9BQU8sQ0FBQyxDQUFDcmlDLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQ2djLE1BQU0sQ0FBQyxJQUFJLENBQUNpZixPQUFPLENBQUMsQ0FBQyxDQUFDSyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ2dxQjtBQUM5eCtCLENBQUMsQ0FBQzk4QyxPQUFPLENBQUNnTSxDQUFDLENBQUMxaEIsSUFBSSxDQUFDMHFDLE1BQU0sQ0FBQ2hwQixDQUFDLENBQUMxaEIsSUFBSSxDQUFDaTZDLEtBQUssQ0FBQyxRQUFRLENBQUNuMEMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDNjJELE9BQU8sRUFBRSxJQUFJLENBQUN4cUIsUUFBUSxDQUFDLGFBQWEsQ0FBQ3ZpQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQytzRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ0QsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNELGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM5b0MsTUFBTSxDQUFDdmdCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQzBhLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzltQixNQUFNLEVBQUVva0IsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2loQixRQUFRLENBQUM3bkMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZuQixpQkFBaUIsQ0FBQyxJQUFJLENBQUNqbkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNvNUQsS0FBSyxDQUFDLElBQUksQ0FBQ1YsUUFBUSxDQUFDLElBQUksQ0FBQzF6RCxPQUFPLENBQUN1ZixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3JpQixDQUFDLENBQUNxc0MsUUFBUSxDQUFDLE9BQU8sQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcXRELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDTixPQUFPLENBQUMsQ0FBQ08sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNBLFVBQVUsQ0FBQyxRQUFRLENBQUN2dEQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLElBQUksQ0FBQ2dnRCxRQUFRLENBQUNqZ0QsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUN0VSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUN5akIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDekUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pmLEdBQUcsQ0FBQyxDQUFDLENBQUNzcUMsQ0FBQyxDQUFDcG9DLElBQUksQ0FBQzR0QixHQUFHLENBQUNudkIsS0FBSyxDQUFDLElBQUksQ0FBQ3FVLENBQUMsQ0FBQyxDQUFDLE9BQU9zMUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMHFCLFFBQVEsQ0FBQ3YxQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN1MUMsUUFBUSxDQUFDdjFDLEdBQUcsQ0FBQyxTQUFTLENBQUM2cUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDcjhCLENBQUMsRUFBRSxJQUFJLENBQUNxc0MsUUFBUSxDQUFDLE9BQU8sQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQzhHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlyNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQytzRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNRLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNULE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1b0MsTUFBTSxDQUFDdkksQ0FBQyxDQUFDQSxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdm5CLGlCQUFpQixDQUFDLElBQUksQ0FBQ2puQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3k1RCxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDSixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDSyxPQUFPLEVBQUUsSUFBSSxDQUFDQSxPQUFPLENBQUN6MkMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUN1MUMsUUFBUSxDQUFDdjFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwMkMsS0FBSyxDQUFDLElBQUksQ0FBQ25CLFFBQVEsQ0FBQyxJQUFJLENBQUMxekQsT0FBTyxDQUFDcWYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNyWSxDQUFDLENBQUN3dEQsY0FBYyxDQUFDLENBQUMsQ0FBQ3h0RCxDQUFDLENBQUN1aUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1ckIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ZyQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDaXJCLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk1eEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3V4QyxlQUFlLENBQUN2eEMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDditCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOFgsQ0FBQyxDQUFDcGtCLE1BQU0sRUFBRSxDQUFDb2tCLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDditCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOFgsQ0FBQyxDQUFDcGtCLE1BQU0sRUFBRSxDQUFDb2tCLENBQUMsQ0FBQyxJQUFJLENBQUNteUMsa0JBQWtCLENBQUNqcUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM4WCxDQUFDLENBQUNwa0IsTUFBTSxFQUFFLENBQUNva0IsQ0FBQyxDQUFDLElBQUksQ0FBQ295QyxxQkFBcUIsQ0FBQ3BxRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQ2dZLENBQUMsQ0FBQ3BrQixNQUFNLEVBQUUsQ0FBQ29rQixDQUFDLENBQUMsSUFBSSxDQUFDOHdDLFFBQVEsQ0FBQyxDQUFDOXdDLENBQUMsQ0FBQ3BqQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM4bEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMydkMsVUFBVSxDQUFDLFFBQVEsQ0FBQ2p1RCxDQUFDLENBQUMsQ0FBQyxTQUFTOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJOEosQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZuQixpQkFBaUIsQ0FBQyxJQUFJLENBQUNqbkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrQyxDQUFDLENBQUMsSUFBSSxDQUFDdzJELFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRzFzRCxDQUFDLEVBQUU0YixDQUFDLENBQUNwZixRQUFRLENBQUMsSUFBSSxDQUFDa3dELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzFzRCxDQUFDLENBQUMsQ0FBQzlKLENBQUMsRUFBRSxJQUFJLENBQUNzM0QsY0FBYyxDQUFDLENBQUMsQ0FBQ3h0RCxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDcG5CLENBQUMsQ0FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQzh2QyxNQUFNLENBQUMvdUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3UyRCxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLFFBQVEsQ0FBQzl3QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDbFQsSUFBSSxDQUFDLENBQUNpRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNpcUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM1dUIsUUFBUSxDQUFDLElBQUksQ0FBQ3l4QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdFEsU0FBUyxDQUFDLElBQUksQ0FBQzRuQixRQUFRLENBQUMsV0FBVyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDM29CLEdBQUcsQ0FBQyxJQUFJLENBQUMyb0IsUUFBUSxDQUFDLENBQUM5YSxPQUFPLENBQUMsUUFBUSxDQUFDNXhDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUNnekQsYUFBYSxFQUFFLENBQUNoc0QsQ0FBQyxDQUFDOGUsa0JBQWtCLENBQUMsQ0FBQyxFQUFFOWUsQ0FBQyxDQUFDaWdCLE9BQU8sRUFBRWpnQixDQUFDLENBQUNpZ0IsT0FBTyxHQUFHckUsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNrdkIsTUFBTSxDQUFDLE9BQU9udkMsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2MkIsS0FBSyxDQUFDbjBDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDaWdCLE9BQU8sR0FBR3JFLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDMHZCLEdBQUcsRUFBRSxDQUFDM3ZDLENBQUMsQ0FBQzhlLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk1b0IsQ0FBQyxDQUFDLElBQUksQ0FBQ3cyRCxRQUFRLENBQUM1b0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDeXVCLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMwTixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM4SSxDQUFDLENBQUN4VyxDQUFDLENBQUMwTixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM1RCxDQUFDLENBQUMzRyxNQUFNLEdBQUdxVCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUxTSxDQUFDLENBQUMzRyxNQUFNLEdBQUcsSUFBSSxDQUFDcXpELFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTFzRCxDQUFDLENBQUM4ZixRQUFRLENBQUM5ZixDQUFDLENBQUMzRyxNQUFNLEdBQUdrNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFdnlCLENBQUMsQ0FBQzNHLE1BQU0sR0FBRyxJQUFJLENBQUNxekQsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMxc0QsQ0FBQyxDQUFDOGYsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDbWxCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDdjRCLENBQUMsQ0FBQzRSLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUN0ZSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMybkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMxUyxDQUFDLENBQUNqVSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDdGUsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyszQixTQUFTLENBQUMsUUFBUSxDQUFDejVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJ4QyxVQUFVLENBQUMzeEMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDNHhDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbnJCLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQ3RNLE1BQU0sRUFBRSxJQUFJLENBQUNrMUQsUUFBUSxDQUFDcm5ELElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQ2c5QixPQUFPLENBQUMyTixRQUFRLENBQUMsQ0FBQyxDQUFDM3FDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NuRCxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJM3NELENBQUMsQ0FBQyxJQUFJLENBQUNrdUQsZ0JBQWdCLENBQUN0eUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ2twQixTQUFTLENBQUMsSUFBSSxDQUFDb3BCLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDbnFCLEdBQUcsQ0FBQyxJQUFJLENBQUNtcUIsZ0JBQWdCLENBQUMsQ0FBQzdZLFNBQVMsQ0FBQyxRQUFRLENBQUNyMUMsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQ3lVLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLElBQUksQ0FBQzQrQyxRQUFRLENBQUNwdUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzB2QyxxQkFBcUIsQ0FBQ3B5QyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQytCLE1BQU0sQ0FBQyxDQUFDdTRCLEtBQUssQ0FBQ3Q2QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUN0bEIsSUFBSSxDQUFDLElBQUksQ0FBQzBDLE9BQU8sQ0FBQzBsQyxTQUFTLENBQUMsQ0FBQ2hjLElBQUksQ0FBQyxDQUFDLENBQUNrMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDVSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMzBCLFFBQVEsQ0FBQyxJQUFJLENBQUN1cUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUNwcEIsU0FBUyxDQUFDLElBQUksQ0FBQ2twQixxQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLElBQUksQ0FBQ2pxQixHQUFHLENBQUMsSUFBSSxDQUFDaXFCLHFCQUFxQixDQUFDLENBQUM1dkMsS0FBSyxDQUFDLFFBQVEsQ0FBQ3hDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMwQixjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzYyQixLQUFLLENBQUN2NEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUM0YixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUNvMEIsUUFBUSxDQUFDLENBQUMsQ0FBQ3BzQixTQUFTLENBQUMsSUFBSSxDQUFDc3FDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDcHBCLFNBQVMsQ0FBQzlrQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUNtdUQsTUFBTSxDQUFDbnVELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2t1RCxnQkFBZ0IsQ0FBQ3RxQyxTQUFTLENBQUMsSUFBSSxDQUFDOG9DLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsUUFBUSxDQUFDcm5ELElBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDckYsQ0FBQyxDQUFDcUYsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOG9ELE1BQU0sQ0FBQyxRQUFRLENBQUN2eUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQzIvQyxLQUFLLENBQUMvOEIsQ0FBQyxDQUFDdGxCLElBQUksQ0FBQyxJQUFJLENBQUMwQyxPQUFPLENBQUMyL0MsS0FBSyxDQUFDLENBQUMvOEIsQ0FBQyxDQUFDOEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNrcUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtQixrQkFBa0IsQ0FBQ255QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDa3BCLFNBQVMsQ0FBQyxJQUFJLENBQUNpcEIsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUNLLFdBQVcsQ0FBQ3h5QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMrSCxRQUFRLENBQUMsSUFBSSxDQUFDb3FDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDanBCLFNBQVMsQ0FBQyxJQUFJLENBQUNzcEIsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUNBLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlydUQsQ0FBQyxDQUFDLElBQUksQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUNrbkIsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDNnRDLGtCQUFrQixDQUFDcitDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMCtDLFdBQVcsQ0FBQ3orQyxLQUFLLENBQUMsQ0FBQyxDQUFDaU0sQ0FBQyxDQUFDdmhCLGFBQWEsQ0FBQ25FLENBQUMsQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQ25pQixPQUFPLENBQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUNzQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM4c0MsWUFBWSxDQUFDLElBQUksQ0FBQ29vQixRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM5d0MsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQy9CLENBQUMsQ0FBQyxRQUFRLENBQUNBLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUN6UCxDQUFDLENBQUMzVyxDQUFDLENBQUN2bUIsVUFBVSxDQUFDazlCLENBQUMsQ0FBQyxDQUFDLENBQUNuVSxLQUFLLENBQUNtVSxDQUFDLENBQUNqOEIsSUFBSSxDQUFDSixDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUNBLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzY4QixDQUFDLENBQUMsQ0FBQzdsQixDQUFDLENBQUM2bEIsQ0FBQyxDQUFDblUsS0FBSyxDQUFDNGpCLENBQUMsQ0FBQyxDQUFDNFYsSUFBSSxDQUFDcmxCLENBQUMsQ0FBQ3FsQixJQUFJLENBQUNTLFlBQVksQ0FBQzlsQixDQUFDLENBQUM4bEIsWUFBWSxDQUFDQyxTQUFTLENBQUMvbEIsQ0FBQyxDQUFDK2xCLFNBQVMsQ0FBQ2pJLEtBQUssQ0FBQzlkLENBQUMsQ0FBQzhkLEtBQUssQ0FBQy81QyxJQUFJLENBQUNpOEIsQ0FBQyxDQUFDajhCLElBQUksQ0FBQyxDQUFDLE9BQU9pOEIsQ0FBQyxDQUFDblUsS0FBSyxDQUFDLE9BQU9tVSxDQUFDLENBQUNxbEIsSUFBSSxDQUFDLE9BQU9ybEIsQ0FBQyxDQUFDOGxCLFlBQVksQ0FBQyxPQUFPOWxCLENBQUMsQ0FBQytsQixTQUFTLENBQUMsT0FBTy9sQixDQUFDLENBQUM4ZCxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU85ZCxDQUFDLENBQUNqOEIsSUFBSSxFQUFFLE9BQU9pOEIsQ0FBQyxDQUFDajhCLElBQUksQ0FBQ3NsQixDQUFDLENBQUMsbUJBQW1CLENBQUMyVyxDQUFDLENBQUMsQ0FBQzVVLE1BQU0sQ0FBQ3FrQixDQUFDLENBQUMsQ0FBQ3JlLFFBQVEsQ0FBQzNqQixDQUFDLENBQUNvdUQsV0FBVyxDQUFDLENBQUNqekMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDek8sQ0FBQyxDQUFDclUsS0FBSyxDQUFDMkgsQ0FBQyxDQUFDcWlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQy9wQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dzQyxTQUFTLENBQUMsSUFBSSxDQUFDNG5CLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3FCLGtCQUFrQixDQUFDcHFDLFFBQVEsQ0FBQyxJQUFJLENBQUMrb0MsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTN3NELENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQ3NKLFFBQVEsQ0FBQ3RKLENBQUMsQ0FBQ3NKLFFBQVEsQ0FBQ2lXLE1BQU0sQ0FBQ3ZmLENBQUMsQ0FBQ3VmLE1BQU0sQ0FBQyxDQUFDLElBQUlqbEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQyxJQUFJLENBQUMwekQsUUFBUSxDQUFDL0QsU0FBUyxDQUFDLENBQUMxRyxNQUFNLENBQUMsK0NBQStDLENBQUMvbEMsTUFBTSxDQUFDLHFCQUFxQixDQUFDNG5DLFdBQVcsQ0FBQyxVQUFVLENBQUMzOEMsS0FBSyxDQUFDLFFBQVEsQ0FBQ29yQixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUN4VyxDQUFDLENBQUM0dUMsU0FBUyxDQUFDbHBCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQ2t2RCxZQUFZLENBQUMsQ0FBQyxDQUFDbHZELENBQUMsQ0FBQ3FzQyxRQUFRLENBQUMsV0FBVyxDQUFDaFEsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ200QyxJQUFJLENBQUMsUUFBUSxDQUFDanBDLENBQUMsQ0FBQzJXLENBQUMsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ3FzQyxRQUFRLENBQUMsTUFBTSxDQUFDM21CLENBQUMsQ0FBQzViLENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNuYyxJQUFJLENBQUMsUUFBUSxDQUFDMUosQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxDQUFDLElBQUk3a0MsQ0FBQyxDQUFDNmtDLENBQUMsQ0FBQzdHLE1BQU0sQ0FBQ3BTLElBQUksQ0FBQzd5QixDQUFDLENBQUNsQyxRQUFRLENBQUNtMkIsVUFBVSxDQUFDLENBQUMsQ0FBQ2lZLENBQUMsQ0FBQ0osQ0FBQyxDQUFDN0csTUFBTSxDQUFDOTNCLEdBQUcsQ0FBQ25OLENBQUMsQ0FBQ2xDLFFBQVEsQ0FBQ2syQixTQUFTLENBQUMsQ0FBQyxDQUFDcUksQ0FBQyxDQUFDck4sUUFBUSxDQUFDLENBQUM2aEIsRUFBRSxDQUFDLFVBQVUsQ0FBQ0wsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDdnBDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDaWxDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLENBQUMrRCxFQUFFLENBQUNqd0MsQ0FBQyxDQUFDL0IsTUFBTSxDQUFDLENBQUMrQixDQUFDLENBQUNvdUMsWUFBWSxDQUFDMW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQ292RCxjQUFjLENBQUMsQ0FBQyxDQUFDcHZELENBQUMsQ0FBQ3FzQyxRQUFRLENBQUMsVUFBVSxDQUFDNzFCLENBQUMsQ0FBQzFNLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4cUIsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzlzRCxDQUFDLENBQUM0YixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNtcUMsZ0JBQWdCLENBQUNucUMsQ0FBQyxDQUFDbXFDLGdCQUFnQixDQUFDMkUsWUFBWSxDQUFDOXVDLENBQUMsQ0FBQzh1QyxZQUFZLENBQUN4bEMsUUFBUSxDQUFDdEosQ0FBQyxDQUFDc0osUUFBUSxDQUFDOG9CLElBQUksQ0FBQ3B5QixDQUFDLENBQUNveUIsSUFBSSxDQUFDLENBQUMsSUFBSTkzQyxDQUFDLENBQUMsSUFBSSxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUN2NUIsT0FBTyxDQUFDMFQsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQ28zQixTQUFTLENBQUMzbkIsQ0FBQyxDQUFDLElBQUksQ0FBQzBxQixRQUFRLENBQUN2MUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDaGEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPdVAsQ0FBQyxDQUFDQSxDQUFDLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDZ2dELFFBQVEsQ0FBQy9DLFNBQVMsQ0FBQyxDQUFDMUgsTUFBTSxDQUFDLG9CQUFvQixDQUFDNkIsV0FBVyxDQUFDLFVBQVUsQ0FBQzhFLFVBQVUsQ0FBQyxJQUFJLENBQUN2bUIsT0FBTyxDQUFDbmMsUUFBUSxDQUFDcU0sQ0FBQyxDQUFDck0sUUFBUSxDQUFDaWpDLFNBQVMsQ0FBQzUyQixDQUFDLENBQUM0MkIsU0FBUyxDQUFDbGpDLFFBQVEsQ0FBQ3NNLENBQUMsQ0FBQ3RNLFFBQVEsQ0FBQ21qQyxTQUFTLENBQUMsSUFBSSxDQUFDa0YsVUFBVSxDQUFDLENBQUMsQ0FBQ3BGLE9BQU8sQ0FBQy9yRCxDQUFDLENBQUNnSyxLQUFLLENBQUMsUUFBUSxDQUFDb3JCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQzR1QyxTQUFTLENBQUNscEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMxbEIsQ0FBQyxDQUFDa3ZELFlBQVksQ0FBQyxDQUFDLENBQUNsdkQsQ0FBQyxDQUFDcXNDLFFBQVEsQ0FBQyxhQUFhLENBQUNoUSxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMjhDLE1BQU0sQ0FBQyxRQUFRLENBQUN6dEMsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDcXNDLFFBQVEsQ0FBQyxRQUFRLENBQUMzbUIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25jLElBQUksQ0FBQyxRQUFRLENBQUMxSixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsSUFBSTdrQyxDQUFDLENBQUNqSCxDQUFDLENBQUN3MkQsUUFBUSxDQUFDdnhCLE1BQU0sQ0FBQyxDQUFDLENBQUNpSCxDQUFDLENBQUNqbEMsQ0FBQyxDQUFDNHJCLElBQUksQ0FBQzd5QixDQUFDLENBQUNsQyxRQUFRLENBQUNtMkIsVUFBVSxDQUFDLENBQUMsQ0FBQ3NZLENBQUMsQ0FBQ3RsQyxDQUFDLENBQUNrRyxHQUFHLENBQUNuTixDQUFDLENBQUNsQyxRQUFRLENBQUNrMkIsU0FBUyxDQUFDLENBQUMsQ0FBQ3FJLENBQUMsQ0FBQ2xILE1BQU0sQ0FBQ24xQixDQUFDLENBQUN3MkQsUUFBUSxDQUFDcmhDLE1BQU0sQ0FBQyxDQUFDLENBQUNrSCxDQUFDLENBQUN0TixLQUFLLENBQUMvdUIsQ0FBQyxDQUFDdzJELFFBQVEsQ0FBQ3puQyxLQUFLLENBQUMsQ0FBQyxDQUFDc04sQ0FBQyxDQUFDck4sUUFBUSxDQUFDLENBQUM2aEIsRUFBRSxDQUFDLFVBQVUsQ0FBQ0wsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDdEUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUNLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLENBQUMwRCxFQUFFLENBQUNqd0MsQ0FBQyxDQUFDL0IsTUFBTSxDQUFDLENBQUMrQixDQUFDLENBQUNvdUMsWUFBWSxDQUFDMW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQ292RCxjQUFjLENBQUMsQ0FBQyxDQUFDcHZELENBQUMsQ0FBQ3FzQyxRQUFRLENBQUMsWUFBWSxDQUFDNzFCLENBQUMsQ0FBQzFNLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN3FCLEdBQUcsQ0FBQyxVQUFVLENBQUM2cUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2dyQixXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNqcEIsR0FBRyxDQUFDLElBQUksQ0FBQ3JCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzFSLE9BQU8sQ0FBQyxRQUFRLENBQUNoeEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOHRELGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNYLGVBQWUsQ0FBQ3Z4QyxDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeTBELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDYixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc0Isa0JBQWtCLENBQUMsQ0FBQyxDQUFDcnBELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDK25ELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWp0RCxDQUFDLENBQUMsSUFBSSxDQUFDdXVELGtCQUFrQixDQUFDLENBQUMsQ0FBQ3I0RCxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDamhCLE9BQU8sQ0FBQyxJQUFJLENBQUNxRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRzlKLENBQUMsRUFBRThKLENBQUMsQ0FBQ2xILE1BQU0sQ0FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcTRELGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTN5QyxDQUFDLENBQUMsSUFBSSxDQUFDNW5CLFFBQVEsQ0FBQ2toQixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPMEcsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1bkIsUUFBUSxDQUFDa2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQzBHLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDMHlDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkxeUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUMsTUFBTSxNQUFNLEdBQUc0aUIsQ0FBQyxDQUFDeVAsTUFBTSxDQUFDelAsQ0FBQyxDQUFDd3RDLFNBQVMsQ0FBQ3h2RCxJQUFJLENBQUM4dkMsR0FBRyxDQUFDOXRCLENBQUMsQ0FBQ3d0QyxTQUFTLENBQUN4dEMsQ0FBQyxDQUFDeVAsTUFBTSxDQUFDLENBQUMsQ0FBQ3FpQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJOXhDLENBQUMsQ0FBQyxJQUFJLENBQUM4d0MsUUFBUSxDQUFDbGdELEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQ29QLENBQUMsRUFBRSxJQUFJLENBQUM4d0MsUUFBUSxDQUFDcjBDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcTBDLFFBQVEsQ0FBQ3huQyxRQUFRLENBQUMsSUFBSSxDQUFDbHNCLE9BQU8sQ0FBQ2tzQixRQUFRLENBQUMsQ0FBQ3RKLENBQUMsRUFBRSxJQUFJLENBQUM4d0MsUUFBUSxDQUFDbjBDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2dzQixXQUFXLENBQUMsUUFBUSxDQUFDdmtDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrUCxDQUFDLENBQUMzakIsSUFBSSxDQUFDK0gsQ0FBQyxDQUFDLFFBQVEsQ0FBQzRiLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDc3VDLFVBQVUsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQzRiLEVBQUUsR0FBRzFsQixDQUFDLENBQUNtMkQsa0JBQWtCLEVBQUUsQ0FBQzk1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNXLEVBQUUsR0FBRzFsQixDQUFDLENBQUNvMkQsdUJBQXVCLEVBQUUsQ0FBQzUvQyxDQUFDLENBQUNrUCxDQUFDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNrN0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoQixRQUFRLENBQUNsZ0QsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxDQUFDa2dELFFBQVEsQ0FBQy9DLFNBQVMsQ0FBQyxRQUFRLENBQUNqOUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzgzQixVQUFVLENBQUMsUUFBUSxDQUFDeGtDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsSUFBSSxDQUFDMHFCLFFBQVEsQ0FBQyxVQUFVLEdBQUcxc0QsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDK2lDLE1BQU0sQ0FBQy9pQyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUc4SixDQUFDLEVBQUUsSUFBSSxDQUFDMHNELFFBQVEsQ0FBQy9vQyxRQUFRLENBQUMsSUFBSSxDQUFDeXhCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUdwMUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3F1RCxjQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBR3J1RCxDQUFDLEVBQUUsSUFBSSxDQUFDZ3VELHFCQUFxQixDQUFDcndDLE1BQU0sQ0FBQyxDQUFDdTRCLEtBQUssQ0FBQ3Q2QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUN0bEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMwQyxPQUFPLENBQUMwbEMsU0FBUyxDQUFDLENBQUNoYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcxaUIsQ0FBQyxFQUFFLENBQUN1eUIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDeDFCLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDK2xCLENBQUMsRUFBRSxDQUFDcjhCLENBQUMsRUFBRThyQyxDQUFDLENBQUMybUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNwMkIsQ0FBQyxFQUFFcjhCLENBQUMsRUFBRSxJQUFJLENBQUMyMkQsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRzdzRCxDQUFDLEVBQUUsSUFBSSxDQUFDMHRELFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHMXRELENBQUMsRUFBRSxDQUFDME0sQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3gxQixFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQ0UsQ0FBQyxFQUFFLENBQUN4VyxDQUFDLEVBQUU4ckMsQ0FBQyxDQUFDMm5CLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQ2o5QyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU94VyxDQUFDLEVBQUU4ckMsQ0FBQyxDQUFDMm5CLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDenpELENBQUMsQ0FBQyxDQUFDd1csQ0FBQyxFQUFFeFcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzQyRCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHOXNELENBQUMsRUFBRSxJQUFJLENBQUNtdUQsTUFBTSxDQUFDLElBQUksQ0FBQ0QsZ0JBQWdCLENBQUNwcUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMycEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTd4QyxDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3Y1QixPQUFPLENBQUMsSUFBSSxDQUFDcXBDLE9BQU8sQ0FBQ2hxQixJQUFJLENBQUMsQ0FBQyxDQUFDbEIsR0FBRyxDQUFDLENBQUM4TixLQUFLLENBQUMsTUFBTSxDQUFDbWtDLFNBQVMsQ0FBQyxDQUFDLENBQUNELFNBQVMsQ0FBQyxNQUFNLENBQUM5OUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrSCxDQUFDLENBQUN0TSxRQUFRLENBQUNzTSxDQUFDLENBQUN0TixLQUFLLEVBQUUsQ0FBQ3NOLENBQUMsQ0FBQ3ROLEtBQUssQ0FBQ3NOLENBQUMsQ0FBQ3RNLFFBQVEsQ0FBQyxDQUFDckssQ0FBQyxDQUFDLElBQUksQ0FBQzh3QyxRQUFRLENBQUN2MUMsR0FBRyxDQUFDLENBQUNrVSxNQUFNLENBQUMsTUFBTSxDQUFDcEcsS0FBSyxDQUFDc04sQ0FBQyxDQUFDdE4sS0FBSyxDQUFDLENBQUMsQ0FBQ3dnQixXQUFXLENBQUMsQ0FBQyxDQUFDemxDLENBQUMsQ0FBQ3BHLElBQUksQ0FBQzR0QixHQUFHLENBQUMsQ0FBQyxDQUFDK0ssQ0FBQyxDQUFDNjJCLFNBQVMsQ0FBQ3h0QyxDQUFDLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU9xOEIsQ0FBQyxDQUFDNDJCLFNBQVMsQ0FBQ3Z2RCxJQUFJLENBQUM0dEIsR0FBRyxDQUFDLENBQUMsQ0FBQytLLENBQUMsQ0FBQzQyQixTQUFTLENBQUN2dEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRzJXLENBQUMsQ0FBQ2xILE1BQU0sQ0FBQyxJQUFJLENBQUNnWCxPQUFPLENBQUNsckIsR0FBRyxDQUFDLENBQUNpeUMsU0FBUyxDQUFDcHBELENBQUMsQ0FBQ21wRCxTQUFTLENBQUNqekQsQ0FBQyxDQUFDbTFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2dYLE9BQU8sQ0FBQ2hYLE1BQU0sQ0FBQ3p4QixJQUFJLENBQUM0dEIsR0FBRyxDQUFDLENBQUMsQ0FBQytLLENBQUMsQ0FBQ2xILE1BQU0sQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOHdDLFFBQVEsQ0FBQ2xnRCxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLENBQUNrZ0QsUUFBUSxDQUFDL0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDMkUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsSixZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUNyeEQsUUFBUSxDQUFDOFAsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDM0wsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTZILENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUN6RSxHQUFHLENBQUMsQ0FBQytOLFFBQVEsQ0FBQyxVQUFVLENBQUNELEtBQUssQ0FBQ2psQixDQUFDLENBQUN3bEMsVUFBVSxDQUFDLENBQUMsQ0FBQ25hLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUN5bEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM5aEIsUUFBUSxDQUFDM2pCLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyt6QixNQUFNLENBQUNuN0IsQ0FBQyxDQUFDbTdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ21xQixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQ0EsWUFBWSxDQUFDMzFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMyMUMsWUFBWSxDQUFDLENBQUMsQ0FBQ21KLGlCQUFpQixDQUFDLFFBQVEsQ0FBQ3h1RCxDQUFDLENBQUMsQ0FBQyxPQUFPNGIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUN5VSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUN0VyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDb2tCLENBQUMsQ0FBQzViLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDeVUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUN0VyxNQUFNLENBQUMsQ0FBQ20yRCxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMzBELE9BQU8sQ0FBQ2l6RCxLQUFLLENBQUMsQ0FBQyxJQUFJanNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNqbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoTSxRQUFRLENBQUNraEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDNnVCLEdBQUcsQ0FBQyxJQUFJLENBQUMvdkMsUUFBUSxDQUFDLENBQUNnOUIsT0FBTyxDQUFDLFFBQVEsQ0FBQ3BWLENBQUMsQ0FBQyxDQUFDNWIsQ0FBQyxFQUFFLElBQUksQ0FBQ3d1RCxpQkFBaUIsQ0FBQzV5QyxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMwQixjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2l4QyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNmLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNJLE9BQU8sQ0FBQ2h5QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMrSCxRQUFRLENBQUMsSUFBSSxDQUFDeXhCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN0USxTQUFTLENBQUMsSUFBSSxDQUFDOG9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxJQUFJLENBQUM3cEIsR0FBRyxDQUFDLElBQUksQ0FBQzZwQixPQUFPLENBQUMsQ0FBQ3ZZLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3JoRCxRQUFRLENBQUNraEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDbGhCLFFBQVEsQ0FBQ2toQixJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnNEMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2wwRCxPQUFPLENBQUNpekQsS0FBSyxFQUFFLElBQUksQ0FBQzJCLE9BQU8sQ0FBQyxDQUFDLElBQUloeUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVuQixRQUFRLENBQUNraEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDMEcsQ0FBQyxDQUFDLElBQUksQ0FBQzVuQixRQUFRLENBQUNraEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDMEcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNvcEIsSUFBSSxDQUFDLElBQUksQ0FBQ2h4QyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDQSxRQUFRLENBQUM2aEIsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrM0MsT0FBTyxDQUFDbCtDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaytDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2h5QyxDQUFDLENBQUMwdkIsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFMXZCLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsV0FBVyxDQUFDOW1CLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpc0IsTUFBTSxDQUFDLENBQUN6MUQsT0FBTyxDQUFDLENBQUMwMUQsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDakMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMXBCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMnBCLFFBQVEsQ0FBQ3g4QixRQUFRLENBQUMsSUFBSSxDQUFDbDNCLE9BQU8sQ0FBQzAxRCxXQUFXLENBQUMsQ0FBQyxDQUFDbHFCLFVBQVUsQ0FBQyxRQUFRLENBQUM1b0IsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHNGIsQ0FBQyxFQUFFLElBQUksQ0FBQzh3QyxRQUFRLENBQUNuOEIsV0FBVyxDQUFDLElBQUksQ0FBQ3YzQixPQUFPLENBQUMwMUQsV0FBVyxDQUFDLENBQUN4K0IsUUFBUSxDQUFDbHdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2dqQyxXQUFXLENBQUMxcUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzakIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lzQixNQUFNLENBQUM3eUMsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQzVyQyxPQUFPLENBQUMsUUFBUSxDQUFDbXNDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQ2pxQyxPQUFPLENBQUMsQ0FBQzIxRCxNQUFNLENBQUMsR0FBRyxDQUFDaEwsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDaUwsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDdEssS0FBSyxDQUFDLFNBQVMsQ0FBQ3VLLFNBQVMsQ0FBQyxXQUFXLENBQUN0ZSxRQUFRLENBQUMsSUFBSSxDQUFDdWUsVUFBVSxDQUFDLElBQUksQ0FBQ2hJLElBQUksQ0FBQyxJQUFJLENBQUNpSSxHQUFHLENBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM5cUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWxrQyxDQUFDLENBQUM5SixDQUFDLENBQUMsSUFBSSxDQUFDOEMsT0FBTyxDQUFDdTVCLENBQUMsQ0FBQ3I4QixDQUFDLENBQUN5NEQsTUFBTSxDQUFDLElBQUksQ0FBQ00sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ1AsTUFBTSxDQUFDL3lDLENBQUMsQ0FBQ3ZtQixVQUFVLENBQUNrOUIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxRQUFRLENBQUMzVyxDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLENBQUNwUCxFQUFFLENBQUMrbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0OEIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTzcyRCxTQUFTLENBQUNkLE1BQU0sQ0FBQyxDQUFDd0ksQ0FBQyxDQUFDMUgsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMwSCxDQUFDLENBQUNBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUNpbEIsS0FBSyxDQUFDLElBQUksQ0FBQ29kLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ2pkLFdBQVcsQ0FBQ2lHLE1BQU0sQ0FBQyxJQUFJLENBQUNnWCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUN2SixZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3MyQixhQUFhLENBQUNsNUQsQ0FBQyxDQUFDb3VELEtBQUssQ0FBQyxDQUFDcHVELENBQUMsQ0FBQ3l0RCxVQUFVLEVBQUUsSUFBSSxDQUFDN2UsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNzcUIsYUFBYSxDQUFDLFFBQVEsQ0FBQ3B2RCxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDNEosVUFBVSxDQUFDcnZELENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUM0SixVQUFVLENBQUNydkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQzRKLFVBQVUsQ0FBQ3J2RCxDQUFDLENBQUMsQ0FBQ3JMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDMjZELE9BQU8sQ0FBQyxRQUFRLENBQUMxekMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk1YixDQUFDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDcGtCLE1BQU0sQ0FBQ3dJLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUM0YixDQUFDLENBQUM1YixDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUU0YixDQUFDLENBQUM5aUIsTUFBTSxDQUFDa0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNxa0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXJrQyxDQUFDLENBQUM0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQzRKLFVBQVUsQ0FBQyxJQUFJLENBQUNyMkQsT0FBTyxDQUFDc3JELEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQ2dMLE9BQU8sQ0FBQ3R2RCxDQUFDLENBQUMsQ0FBQyxDQUFDd2tDLFVBQVUsQ0FBQyxRQUFRLENBQUN4a0MsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBRzhKLENBQUMsQ0FBQyxJQUFJLENBQUMydUQsTUFBTSxDQUFDL3lDLENBQUMsQ0FBQ3ZtQixVQUFVLENBQUNhLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsUUFBUSxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQ3BQLEVBQUUsQ0FBQ3RXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxHQUFHOEosQ0FBQyxDQUFDLENBQUMsSUFBSXV5QixDQUFDLENBQUMzVyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQzRKLFVBQVUsQ0FBQyxJQUFJLENBQUNyMkQsT0FBTyxDQUFDc3JELEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQ2dMLE9BQU8sQ0FBQy84QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2OEIsYUFBYSxDQUFDbDVELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZzQyxNQUFNLENBQUMvaUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQ203QyxTQUFTLENBQUMsUUFBUSxDQUFDcnhDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUN4d0IsT0FBTyxDQUFDLElBQUksQ0FBQ3M2QixlQUFlLENBQUMsQ0FBQyxDQUFDcjVELENBQUMsRUFBRSxJQUFJLENBQUNxc0MsUUFBUSxDQUFDLFVBQVUsQ0FBQ3ZpQyxDQUFDLENBQUMsSUFBSSxDQUFDd2lDLEVBQUUsQ0FBQ3RzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzNUQsV0FBVyxDQUFDLFFBQVEsQ0FBQ3h2RCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDeHdCLE9BQU8sQ0FBQyxJQUFJLENBQUN3NkIsa0JBQWtCLENBQUMsQ0FBQyxDQUFDdjVELENBQUMsRUFBRSxJQUFJLENBQUNxc0MsUUFBUSxDQUFDLFlBQVksQ0FBQ3ZpQyxDQUFDLENBQUMsSUFBSSxDQUFDd2lDLEVBQUUsQ0FBQ3RzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3NUQsS0FBSyxDQUFDLFFBQVEsQ0FBQzF2RCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDeHdCLE9BQU8sQ0FBQy8rQixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDNnhELFdBQVcsRUFBRTd4RCxDQUFDLENBQUNtc0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDQSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDc3NCLE1BQU0sQ0FBQ3g1RCxJQUFJLENBQUMsSUFBSSxDQUFDa3RDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ25zQyxDQUFDLENBQUM2eEQsV0FBVyxFQUFFN3hELENBQUMsQ0FBQ21zQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3N0QixjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3B0QixRQUFRLENBQUMsTUFBTSxDQUFDdmlDLENBQUMsQ0FBQyxJQUFJLENBQUN3aUMsRUFBRSxDQUFDdHNDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMDVELElBQUksQ0FBQyxRQUFRLENBQUM1dkQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQ3h3QixPQUFPLENBQUMvK0IsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQzZ4RCxXQUFXLEVBQUU3eEQsQ0FBQyxDQUFDbXNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3NzQixNQUFNLENBQUN4NUQsSUFBSSxDQUFDLElBQUksQ0FBQ2t0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNuc0MsQ0FBQyxDQUFDNnhELFdBQVcsRUFBRTd4RCxDQUFDLENBQUNtc0MsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN3dEIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3R0QixRQUFRLENBQUMsS0FBSyxDQUFDdmlDLENBQUMsQ0FBQyxJQUFJLENBQUN3aUMsRUFBRSxDQUFDdHNDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNDVELEtBQUssQ0FBQyxRQUFRLENBQUM5dkQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUNyOEIsQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDeHdCLE9BQU8sQ0FBQ3ZvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzZsQixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDdzFCLFdBQVcsRUFBRXgxQixDQUFDLENBQUM4UCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNBLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsT0FBTyxDQUFDditCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDa0osR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMvVSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL0IsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ20wQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTzc1RCxDQUFDLENBQUM4QyxPQUFPLENBQUM0MUQsTUFBTSxFQUFFLENBQUMxNEQsQ0FBQyxDQUFDOEMsT0FBTyxDQUFDMkcsUUFBUSxFQUFFekosQ0FBQyxDQUFDOEMsT0FBTyxDQUFDc3JELEtBQUssR0FBRy94QixDQUFDLENBQUN2NUIsT0FBTyxDQUFDc3JELEtBQUssRUFBRXB1RCxDQUFDLENBQUN5NEQsTUFBTSxDQUFDeDVELElBQUksQ0FBQ2UsQ0FBQyxDQUFDbXNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzlQLENBQUMsQ0FBQ3cxQixXQUFXLEVBQUV4MUIsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLEVBQUVyeUIsQ0FBQyxDQUFDdWlCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzdpQixNQUFNLENBQUM3QyxDQUFDLENBQUMsQ0FBQ2lsQyxNQUFNLENBQUNqbEMsQ0FBQyxDQUFDbXNDLE9BQU8sQ0FBQ2xILE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDamxDLENBQUMsQ0FBQzhDLE9BQU8sQ0FBQzYxRCxTQUFTLENBQUM3dUQsQ0FBQyxDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lpRCxNQUFNLENBQUN4NUQsSUFBSSxDQUFDLElBQUksQ0FBQ2t0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM5UCxDQUFDLENBQUN3MUIsV0FBVyxFQUFFeDFCLENBQUMsQ0FBQzhQLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb3RCLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN0dEIsUUFBUSxDQUFDLE1BQU0sQ0FBQ3ZpQyxDQUFDLENBQUMsSUFBSSxDQUFDd2lDLEVBQUUsQ0FBQ2pRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRyxFQUFFLENBQUMsUUFBUSxDQUFDNW1CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQytzQyxTQUFTLENBQUMvc0MsQ0FBQyxDQUFDbXNDLFdBQVcsRUFBRW5zQyxDQUFDLENBQUN5bUIsT0FBTyxDQUFDNGhCLE1BQU0sQ0FBQ3JvQyxDQUFDLENBQUNxb0MsTUFBTSxDQUFDLytCLFFBQVEsQ0FBQ3RKLENBQUMsQ0FBQ3NKLFFBQVEsQ0FBQ2lXLE1BQU0sQ0FBQ3ZmLENBQUMsQ0FBQ2lxQyxXQUFXLENBQUMsQ0FBQyxDQUFDOEosY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDN3FCLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMrcUIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN2ckIsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQ2lyQixlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN6cUIsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQzJxQixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ25yQixZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJdDBCLENBQUMsQ0FBQzRMLENBQUMsQ0FBQzRtQixFQUFFLENBQUN3dEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBU3AwQyxDQUFDLENBQUNBLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLE9BQU8wbEIsQ0FBQyxFQUFFNWIsQ0FBQyxFQUFFQSxDQUFDLENBQUM5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQ2lsQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJNkcsQ0FBQyxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDNmxELFdBQVcsRUFBRTdsRCxDQUFDLENBQUNrbEIsUUFBUSxDQUFDK3FDLFFBQVEsQ0FBQyxDQUFDbG5DLElBQUksQ0FBQy9vQixDQUFDLENBQUN5bUQsT0FBTyxDQUFDMTlCLElBQUksQ0FBQzVyQixDQUFDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQzZsRCxXQUFXLEVBQUU3bEQsQ0FBQyxDQUFDa2xCLFFBQVEsQ0FBQytxQyxRQUFRLENBQUMsQ0FBQzVzRCxHQUFHLENBQUNyRCxDQUFDLENBQUN5bUQsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQysrQixDQUFDLENBQUNKLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUNrbkQsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDd2QsQ0FBQyxDQUFDdGxDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQ2tuRCxpQkFBaUIsQ0FBQzc3QixNQUFNLENBQUN4ZCxDQUFDLENBQUMzWCxDQUFDLENBQUNpbEMsTUFBTSxDQUFDcFMsSUFBSSxDQUFDZ2MsQ0FBQyxDQUFDN3VDLENBQUMsQ0FBQ2lsQyxNQUFNLENBQUM5M0IsR0FBRyxDQUFDa2lDLENBQUMsQ0FBQzEzQixDQUFDLENBQUMzWCxDQUFDLENBQUNpNUQsV0FBVyxDQUFDLENBQUMsQ0FBQ2xxQyxLQUFLLENBQUMwZ0IsQ0FBQyxDQUFDWixDQUFDLENBQUM3dUMsQ0FBQyxDQUFDaTVELFdBQVcsQ0FBQyxDQUFDLENBQUM5akMsTUFBTSxDQUFDLE1BQU0sQ0FBQ2tILENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU95UCxDQUFDLEVBQUVuMEIsQ0FBQyxFQUFFMDNCLENBQUMsRUFBRW5ELENBQUMsRUFBRWpsQyxDQUFDLEVBQUU0bkMsQ0FBQyxFQUFFWSxDQUFDLEVBQUVsRCxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBT1QsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQ2tuRCxpQkFBaUIsQ0FBQ2ppQyxLQUFLLENBQUMsQ0FBQyxDQUFDcFgsQ0FBQyxFQUFFMDNCLENBQUMsQ0FBQ25ELENBQUMsQ0FBQ3BpQyxDQUFDLENBQUNrbkQsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDLENBQUMsRUFBRTluQixDQUFDLENBQUM2QyxDQUFDLENBQUNrbkQsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDLENBQUMsQ0FBQzBaLENBQUMsRUFBRVksQ0FBQyxDQUFDbEQsQ0FBQyxDQUFDemlDLENBQUMsQ0FBQ2tuRCxpQkFBaUIsQ0FBQzc3QixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU96UCxDQUFDLENBQUNsUCxDQUFDLENBQUNtVCxLQUFLLENBQUNrbEIsQ0FBQyxDQUFDN3VDLENBQUMsQ0FBQ2k1RCxXQUFXLENBQUMsQ0FBQyxDQUFDOWpDLE1BQU0sQ0FBQyxFQUFFelAsQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDa1QsS0FBSyxDQUFDL1IsQ0FBQyxDQUFDM1gsQ0FBQyxDQUFDaTVELFdBQVcsQ0FBQyxDQUFDLENBQUNscUMsS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDOW5CLENBQUMsRUFBRTRuQyxDQUFDLEVBQUVZLENBQUMsRUFBRXhvQyxDQUFDLEVBQUVzbEMsQ0FBQyxFQUFFc0MsQ0FBQyxFQUFFWSxDQUFDLEVBQUVsRCxDQUFDLEVBQUVzQyxDQUFDLENBQUM1bkMsQ0FBQyxFQUFFc2xDLENBQUMsQ0FBQ2tELENBQUMsQ0FBQyxFQUFFLENBQUMzRCxDQUFDLEVBQUVuMEIsQ0FBQyxFQUFFMDNCLENBQUMsRUFBRXZELENBQUMsRUFBRUksQ0FBQyxFQUFFdjBCLENBQUMsRUFBRTAzQixDQUFDLEVBQUVuRCxDQUFDLEVBQUV2MEIsQ0FBQyxDQUFDbTBCLENBQUMsRUFBRUksQ0FBQyxDQUFDbUQsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM3BCLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDLENBQUN4d0IsT0FBTyxDQUFDLElBQUksQ0FBQ282QixVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlJLGNBQWMsQ0FBQyxRQUFRLENBQUN2bUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3BtQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQzRKLFVBQVUsQ0FBQ3J2RCxDQUFDLENBQUNoSCxPQUFPLENBQUNzckQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNubkQsQ0FBQyxDQUFDakgsQ0FBQyxDQUFDQSxDQUFDLENBQUNSLElBQUksQ0FBQyxJQUFJLENBQUMwc0MsQ0FBQyxDQUFDLENBQUNwaUMsQ0FBQyxDQUFDK25ELFdBQVcsRUFBRS9uRCxDQUFDLENBQUNxaUMsT0FBTyxDQUFDLENBQUN2K0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUNvSyxPQUFPLENBQUMsQ0FBQyxDQUFDME4sQ0FBQyxDQUFDLEdBQUcsQ0FBQzJXLENBQUMsQ0FBQyxDQUFDLENBQUN5UCxDQUFDLENBQUN4cUMsTUFBTSxDQUFDKzZCLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDdjVCLE9BQU8sQ0FBQzJHLFFBQVEsRUFBRUssQ0FBQyxFQUFFLENBQUNnaUMsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDLENBQUNvOEIsTUFBTSxDQUFDeDVELElBQUksQ0FBQzZzQyxDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQzhQLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3JpQyxDQUFDLENBQUMrbkQsV0FBVyxFQUFFL25ELENBQUMsQ0FBQ3FpQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDMzFCLENBQUMsQ0FBQyxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDNXFDLE1BQU0sQ0FBQ2tWLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDMDFCLENBQUMsQ0FBQzExQixDQUFDLENBQUMsR0FBR3MxQixDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQzhQLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTCxDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQzQ4QixXQUFXLENBQUMsQ0FBQyxDQUFDOWpDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBU3pQLENBQUMsQ0FBQ29tQixDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQ3NHLE9BQU8sQ0FBQyxNQUFNLEdBQUdtSixDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQzhQLE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM2cUIsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDLENBQUNzRyxPQUFPLEVBQUUsQ0FBQyxXQUFXLEdBQUcxN0IsQ0FBQyxFQUFFNmtDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDOGUsU0FBUyxDQUFDbDhDLElBQUksQ0FBQzZzQyxDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQzhyQyxDQUFDLENBQUN6UCxDQUFDLENBQUMsQ0FBQzRJLE1BQU0sQ0FBQzZHLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDbEgsTUFBTSxDQUFDLENBQUMsQ0FBQzZHLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDNDhCLFdBQVcsQ0FBQyxDQUFDbHFDLEtBQUssQ0FBQytjLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDamQsV0FBVyxDQUFDaUcsTUFBTSxDQUFDMlcsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDLENBQUM4UCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUN2SixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ3VCLElBQUksQ0FBQyxRQUFRLENBQUM5bUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzNXLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsQ0FBQzJqQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQzRKLFVBQVUsQ0FBQ3J2RCxDQUFDLENBQUNoSCxPQUFPLENBQUNzckQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzd2RCxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUNBLE9BQU8sQ0FBQzJHLFFBQVEsRUFBRSxJQUFJLENBQUNrNUIsT0FBTyxFQUFFN29CLENBQUMsQ0FBQ2hRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDaEgsT0FBTyxDQUFDNjFELFNBQVMsQ0FBQzM0RCxDQUFDLENBQUMsRUFBRSxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUN1OUIsS0FBSyxDQUFDMzZELElBQUksQ0FBQyxJQUFJLENBQUNlLENBQUMsQ0FBQyxFQUFFcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQzJHLFFBQVEsRUFBRSxJQUFJLENBQUNrNUIsT0FBTyxFQUFFLElBQUksQ0FBQzgxQixNQUFNLENBQUN4NUQsSUFBSSxDQUFDLElBQUksQ0FBQ2t0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNyaUMsQ0FBQyxDQUFDK25ELFdBQVcsRUFBRS9uRCxDQUFDLENBQUNxaUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM2c0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ08sV0FBVyxDQUFDcjZELElBQUksQ0FBQyxJQUFJLENBQUNlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUNpMEIsU0FBUyxDQUFDLFFBQVEsQ0FBQ3htRCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ3FpQyxPQUFPLENBQUNoMEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDOE0sRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNuYixDQUFDLENBQUNoSCxPQUFPLENBQUNtckQsZ0JBQWdCLEVBQUV2b0MsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUNjLGNBQWMsQ0FBQ3ZtRCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJ1RCxJQUFJLENBQUMsUUFBUSxDQUFDN2tELENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDaEgsT0FBTyxDQUFDbXJELGdCQUFnQixFQUFFdm9DLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDYyxjQUFjLENBQUN2bUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQzJqQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsQ0FBQzRKLFVBQVUsQ0FBQ3J2RCxDQUFDLENBQUNoSCxPQUFPLENBQUNzckQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUN0ckQsT0FBTyxDQUFDMkcsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDdXdELFdBQVcsRUFBRSxJQUFJLENBQUNyM0IsT0FBTyxDQUFDLENBQUMsSUFBSXRHLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQzZTLENBQUMsQ0FBQ2hRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDaEgsT0FBTyxDQUFDNjFELFNBQVMsQ0FBQzM0RCxDQUFDLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUMsQ0FBQ2psQyxDQUFDLEVBQUUsSUFBSSxDQUFDOHhELE1BQU0sQ0FBQyxPQUFPLENBQUM5eEQsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOHhELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDN3NCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3BwQyxPQUFPLENBQUM0MUQsTUFBTSxFQUFFLENBQUNsaUQsQ0FBQyxDQUFDLElBQUksQ0FBQzFULE9BQU8sQ0FBQ3NyRCxLQUFLLENBQUN0aUIsQ0FBQyxDQUFDLElBQUksQ0FBQ0ssT0FBTyxDQUFDajBCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDeEssTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBT2dZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ20wQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMvMkQsT0FBTyxDQUFDc3JELEtBQUssR0FBRzUzQyxDQUFDLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3hxQyxNQUFNLEVBQUUsQ0FBQys2QixDQUFDLENBQUMzVyxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrdEIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDeDlCLENBQUMsQ0FBQzI5QixXQUFXLENBQUMsUUFBUSxHQUFHOXRCLENBQUMsQ0FBQyxDQUFDLENBQUM3UCxDQUFDLEVBQUUsUUFBUSxHQUFHNlAsQ0FBQyxFQUFFLENBQUM3UCxDQUFDLENBQUMwOEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDMThCLENBQUMsQ0FBQzI4QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMzOEIsQ0FBQyxDQUFDcTlCLElBQUksQ0FBQ3o2RCxJQUFJLENBQUNvOUIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa3NDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUdBLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBR0EsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQ2p0QyxJQUFJLENBQUMsSUFBSSxDQUFDZSxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLEVBQUUsT0FBTyxHQUFHNlAsQ0FBQyxFQUFFLENBQUM3UCxDQUFDLENBQUMyOEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDMzhCLENBQUMsQ0FBQzA4QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMxOEIsQ0FBQyxDQUFDbTlCLEtBQUssQ0FBQ3Y2RCxJQUFJLENBQUNvOUIsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOHdELFFBQVEsQ0FBQyxRQUFRLENBQUNobkQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUNxaUMsT0FBTyxDQUFDaDBCLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQ21OLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDeGIsQ0FBQyxDQUFDaEgsT0FBTyxDQUFDbXJELGdCQUFnQixFQUFFdm9DLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDYyxjQUFjLENBQUN2bUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzB2QixZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUUxdkIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxjQUFjLENBQUM5bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3V0QixTQUFTLENBQUMsQ0FBQy8yRCxPQUFPLENBQUMsQ0FBQ20zRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDYixlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN4c0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvcEMsT0FBTyxDQUFDbzNELFdBQVcsRUFBRSxJQUFJLENBQUMvdEIsT0FBTyxDQUFDblMsUUFBUSxDQUFDLElBQUksQ0FBQ2wzQixPQUFPLENBQUNvM0QsV0FBVyxDQUFDLENBQUMsQ0FBQ1gsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMxc0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvcEMsT0FBTyxDQUFDbzNELFdBQVcsRUFBRSxJQUFJLENBQUMvdEIsT0FBTyxDQUFDOVIsV0FBVyxDQUFDLElBQUksQ0FBQ3YzQixPQUFPLENBQUNvM0QsV0FBVyxDQUFDLENBQUMsQ0FBQ1QsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNXNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDL3BDLE9BQU8sQ0FBQ20zRCxVQUFVLEVBQUUsSUFBSSxDQUFDOXRCLE9BQU8sQ0FBQ25TLFFBQVEsQ0FBQyxJQUFJLENBQUNsM0IsT0FBTyxDQUFDbTNELFVBQVUsQ0FBQyxDQUFDLENBQUNOLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOXNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDL3BDLE9BQU8sQ0FBQ20zRCxVQUFVLEVBQUUsSUFBSSxDQUFDOXRCLE9BQU8sQ0FBQzlSLFdBQVcsQ0FBQyxJQUFJLENBQUN2M0IsT0FBTyxDQUFDbTNELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdjBDLENBQUMsQ0FBQzRtQixFQUFFLENBQUN1dEIsU0FBUyxDQUFDbjBDLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzVyQyxPQUFPLENBQUMsUUFBUSxDQUFDa0MsT0FBTyxDQUFDLENBQUNtM0IsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLENBQUMzSSxHQUFHLENBQUMsR0FBRyxDQUFDcnNCLEtBQUssQ0FBQyxDQUFDLENBQUMrNEMsTUFBTSxDQUFDLElBQUksQ0FBQ2huQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUN3YyxHQUFHLENBQUMsQ0FBQyxDQUFDeEYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbXNCLFFBQVEsQ0FBQyxJQUFJLENBQUNyM0QsT0FBTyxDQUFDbUMsS0FBSyxDQUFDLElBQUksQ0FBQ20xRCxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDanVCLE9BQU8sQ0FBQ2g5QixJQUFJLENBQUMsQ0FBQ2t0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM3SSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQ3lyQixRQUFRLENBQUMzMEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDK0gsUUFBUSxDQUFDLElBQUksQ0FBQzBlLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ3lDLFNBQVMsQ0FBQyxJQUFJLENBQUN5ckIsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNuc0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaEMsT0FBTyxDQUFDblQsVUFBVSxDQUFDLGdEQUFnRCxDQUFDLENBQUMsSUFBSSxDQUFDcWhDLFFBQVEsQ0FBQzdnRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN2VSxLQUFLLENBQUMsUUFBUSxDQUFDeWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDbUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDbkMsT0FBTyxDQUFDbUMsS0FBSyxDQUFDLElBQUksQ0FBQ20xRCxpQkFBaUIsQ0FBQzEwQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0MEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNGLGlCQUFpQixDQUFDLFFBQVEsQ0FBQzEwQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxHQUFHQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUNtQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUNzMUQsYUFBYSxDQUFDNzBDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBT0EsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2MEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDNzJELElBQUksQ0FBQzh2QyxHQUFHLENBQUMsSUFBSSxDQUFDMXdDLE9BQU8sQ0FBQ3d1QixHQUFHLENBQUM1dEIsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQyxJQUFJLENBQUNraUIsR0FBRyxDQUFDOXRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJvQixXQUFXLENBQUMsUUFBUSxDQUFDM29CLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM0YixDQUFDLENBQUN6Z0IsS0FBSyxDQUFDLE9BQU95Z0IsQ0FBQyxDQUFDemdCLEtBQUssQ0FBQyxJQUFJLENBQUM0bkMsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUNtQyxLQUFLLENBQUMsSUFBSSxDQUFDbTFELGlCQUFpQixDQUFDdHdELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3d3RCxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNoc0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc0YixDQUFDLEVBQUUsQ0FBQzViLENBQUMsQ0FBQ3BHLElBQUksQ0FBQzR0QixHQUFHLENBQUMsSUFBSSxDQUFDa2lCLEdBQUcsQ0FBQzFwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytpQyxNQUFNLENBQUNubkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQ21rQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUN2b0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbW5CLE1BQU0sQ0FBQ25uQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDaDlCLElBQUksQ0FBQyxlQUFlLENBQUN1VyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrb0IsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMvb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzgwQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ0QsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUN6M0QsT0FBTyxDQUFDbUMsS0FBSyxDQUFDLElBQUksQ0FBQ3V1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzF3QyxPQUFPLENBQUN3dUIsR0FBRyxDQUFDLElBQUksQ0FBQ2tpQixHQUFHLENBQUMsQ0FBQyxDQUFDOG1CLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl4d0QsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ21DLEtBQUssQ0FBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUN3NkQsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNILFFBQVEsQ0FBQy8zQyxNQUFNLENBQUMsSUFBSSxDQUFDaTRDLGFBQWEsRUFBRXp3RCxDQUFDLENBQUMsSUFBSSxDQUFDMHBDLEdBQUcsQ0FBQyxDQUFDemtCLEtBQUssQ0FBQy91QixDQUFDLENBQUN5NkQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQ2hzQixZQUFZLENBQUMsSUFBSSxDQUFDNHJCLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUN2d0QsQ0FBQyxHQUFHLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ3d1QixHQUFHLENBQUMsQ0FBQ21kLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOHJCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDcHVCLE9BQU8sQ0FBQ25ULFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMwaEMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDQSxVQUFVLENBQUNoMUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDK0gsUUFBUSxDQUFDLElBQUksQ0FBQzRzQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUN6ckIsU0FBUyxDQUFDLElBQUksQ0FBQzhyQixVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN2dUIsT0FBTyxDQUFDaDlCLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUNyTSxPQUFPLENBQUN3dUIsR0FBRyxDQUFDLGVBQWUsQ0FBQ3huQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzR3RCxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUNBLFVBQVUsQ0FBQ2xoRCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2toRCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNQLFFBQVEsR0FBR3J3RCxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNxd0QsUUFBUSxDQUFDcndELENBQUMsQ0FBQyxJQUFJLENBQUN1aUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN2aUMsQ0FBQyxHQUFHLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ3d1QixHQUFHLEVBQUUsSUFBSSxDQUFDK2EsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM21CLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsZUFBZSxDQUFDOW1CLENBQUMsQ0FBQzRtQixFQUFFLENBQUNraEIsS0FBSyxDQUFDLENBQUM1c0QsT0FBTyxDQUFDLFFBQVEsQ0FBQ2tDLE9BQU8sQ0FBQyxDQUFDMnFCLFFBQVEsQ0FBQyxNQUFNLENBQUNrdEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDaGpCLFFBQVEsQ0FBQyxDQUFDLENBQUNqcUMsTUFBTSxDQUFDLEdBQUcsQ0FBQ2lyRCxTQUFTLENBQUMsT0FBTyxDQUFDcm1ELFFBQVEsQ0FBQyxJQUFJLENBQUNzb0QsU0FBUyxDQUFDLElBQUksQ0FBQzNwRCxLQUFLLENBQUMsSUFBSSxDQUFDaVAsSUFBSSxDQUFDLElBQUksQ0FBQzI2QyxVQUFVLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM5c0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWxrQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzhrQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDbXNCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN4aUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN6dUMsQ0FBQyxDQUFDa3hELFVBQVUsQ0FBQ3QxQyxDQUFDLENBQUM1YixDQUFDLENBQUNxaUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsSCxNQUFNLENBQUMsQ0FBQyxDQUFDbjdCLENBQUMsQ0FBQ214RCxTQUFTLENBQUN2MUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDaEgsT0FBTyxDQUFDNEssTUFBTSxDQUFDNUQsQ0FBQyxDQUFDcWlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcmlDLENBQUMsQ0FBQzhrQyxTQUFTLENBQUM5a0MsQ0FBQyxDQUFDbXhELFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQ254RCxDQUFDLENBQUNteEQsU0FBUyxDQUFDbDVELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkvQixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ2lsQyxNQUFNLENBQUMsQ0FBQyxDQUFDenVCLENBQUMsQ0FBQyxDQUFDcWMsSUFBSSxDQUFDd0osQ0FBQyxDQUFDeEosSUFBSSxDQUFDL29CLENBQUMsQ0FBQ2t4RCxVQUFVLENBQUNub0MsSUFBSSxDQUFDMWxCLEdBQUcsQ0FBQ2t2QixDQUFDLENBQUNsdkIsR0FBRyxDQUFDckQsQ0FBQyxDQUFDa3hELFVBQVUsQ0FBQzd0RCxHQUFHLENBQUMsQ0FBQ3VZLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQ210QixPQUFPLENBQUMsSUFBSSxDQUFDK3VCLFFBQVEsQ0FBQ2w3RCxDQUFDLENBQUM2eUIsSUFBSSxDQUFDcmMsQ0FBQyxDQUFDcWMsSUFBSSxDQUFDMWxCLEdBQUcsQ0FBQ3FKLENBQUMsQ0FBQ3JKLEdBQUcsQ0FBQ3loQixLQUFLLENBQUNwWSxDQUFDLENBQUNxYyxJQUFJLENBQUM3eUIsQ0FBQyxDQUFDc3ZDLFVBQVUsQ0FBQyxDQUFDLENBQUM2RixNQUFNLENBQUMzK0IsQ0FBQyxDQUFDckosR0FBRyxDQUFDbk4sQ0FBQyxDQUFDdXZDLFdBQVcsQ0FBQyxDQUFDLENBQUM0ckIsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDN29ELFFBQVEsQ0FBQ3RTLENBQUMsQ0FBQzA2QixRQUFRLENBQUMsYUFBYSxDQUFDLENBQUNrZ0MsU0FBUyxDQUFDNTZELENBQUMsQ0FBQzA2QixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUNvZ0MsV0FBVyxDQUFDOTZELENBQUMsQ0FBQzA2QixRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNmQsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5VCxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytCLE1BQU0sQ0FBQ3JvQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDa3BCLFNBQVMsQ0FBQyxJQUFJLENBQUNtZixNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDNWYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOHNCLFNBQVMsQ0FBQ3Q3QyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUN3c0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDWSxXQUFXLENBQUMsUUFBUSxDQUFDampELENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUN2NUIsT0FBTyxDQUFDLElBQUksQ0FBQ3M0RCxJQUFJLENBQUMsQ0FBQ3R4RCxDQUFDLENBQUM0ZixLQUFLLENBQUM1ZixDQUFDLENBQUM2ZixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUNxeEMsVUFBVSxDQUFDdDFDLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsSCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ25pQyxPQUFPLENBQUMyRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUN3eEQsU0FBUyxDQUFDdjFDLENBQUMsQ0FBQzJXLENBQUMsQ0FBQzN1QixNQUFNLENBQUMsSUFBSSxDQUFDeStCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzJXLENBQUMsQ0FBQzVPLFFBQVEsQ0FBQyxDQUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDNmdDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDOXNDLEdBQUcsQ0FBQyxDQUFDNFIsSUFBSSxDQUFDL29CLENBQUMsQ0FBQzRmLEtBQUssQ0FBQ3ZjLEdBQUcsQ0FBQ3JELENBQUMsQ0FBQzZmLEtBQUssQ0FBQ29GLEtBQUssQ0FBQyxDQUFDLENBQUNvRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tILENBQUMsQ0FBQ3MrQixXQUFXLEVBQUUsSUFBSSxDQUFDcGlCLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMGlCLFNBQVMsQ0FBQ3Z0RCxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMzTCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJczZCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3FkLENBQUMsQ0FBQzgrQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNyeEQsQ0FBQyxDQUFDMmYsT0FBTyxFQUFFM2YsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFLENBQUN0cEIsQ0FBQyxDQUFDb3VDLFlBQVksQ0FBQy9SLENBQUMsQ0FBQzYrQixRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM3K0IsQ0FBQyxDQUFDL3BCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RTLENBQUMsQ0FBQzR1QyxTQUFTLENBQUN2UyxDQUFDLENBQUM2K0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM3K0IsQ0FBQyxDQUFDeStCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzk2RCxDQUFDLENBQUNxc0MsUUFBUSxDQUFDLGFBQWEsQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQ2d4RCxXQUFXLENBQUN6K0IsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ptQixDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQytVLE9BQU8sQ0FBQyxDQUFDLENBQUNGLE9BQU8sQ0FBQyxDQUFDLENBQUNqVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJczZCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNrUCxDQUFDLENBQUMxRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBT3hJLENBQUMsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQzJmLE9BQU8sRUFBRSxDQUFDM2YsQ0FBQyxDQUFDd2YsT0FBTyxFQUFFLENBQUM5UyxDQUFDLENBQUMwa0QsUUFBUSxDQUFDeGdDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQzE2QixDQUFDLENBQUNvdUMsWUFBWSxDQUFDNTNCLENBQUMsQ0FBQzBrRCxRQUFRLENBQUM3K0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDdVMsU0FBUyxDQUFDcDRCLENBQUMsQ0FBQzBrRCxRQUFRLENBQUM3K0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3NrRCxXQUFXLENBQUMsQ0FBQ3orQixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDb2tELFNBQVMsQ0FBQ3YrQixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDbEUsUUFBUSxDQUFDK3BCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ3FzQyxRQUFRLENBQUMsV0FBVyxDQUFDdmlDLENBQUMsQ0FBQyxDQUFDOHdELFNBQVMsQ0FBQ3BrRCxDQUFDLENBQUMyMUIsT0FBTyxDQUFDLENBQUMsQ0FBQ25zQyxDQUFDLENBQUNxc0MsUUFBUSxDQUFDLGFBQWEsQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQ2d4RCxXQUFXLENBQUN0a0QsQ0FBQyxDQUFDMjFCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ2hCLFVBQVUsQ0FBQyxRQUFRLENBQUNyakQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2l4RCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNqNEQsT0FBTyxDQUFDMkcsUUFBUSxDQUFDLENBQUMsSUFBSXpKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUMxVCxPQUFPLENBQUNncEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3N2QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNuMEQsQ0FBQyxDQUFDLElBQUksQ0FBQ20wRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNsdkIsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQzRmLEtBQUssQ0FBQzZpQixDQUFDLENBQUN6aUMsQ0FBQyxDQUFDNmYsS0FBSyxDQUFDLE9BQU9taUIsQ0FBQyxDQUFDSSxDQUFDLEVBQUUsQ0FBQ2xzQyxDQUFDLENBQUNrc0MsQ0FBQyxDQUFDQSxDQUFDLENBQUNKLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDOXJDLENBQUMsQ0FBQyxDQUFDaUgsQ0FBQyxDQUFDc2xDLENBQUMsRUFBRSxDQUFDdnNDLENBQUMsQ0FBQ3VzQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3RsQyxDQUFDLENBQUNBLENBQUMsQ0FBQ2pILENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyt0RCxNQUFNLENBQUM5c0MsR0FBRyxDQUFDLENBQUM0UixJQUFJLENBQUNpWixDQUFDLENBQUMzK0IsR0FBRyxDQUFDbEcsQ0FBQyxDQUFDOG5CLEtBQUssQ0FBQ21kLENBQUMsQ0FBQ0osQ0FBQyxDQUFDM1csTUFBTSxDQUFDb1gsQ0FBQyxDQUFDdGxDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZzBELFNBQVMsQ0FBQ2w1RCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL0IsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3JILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2szQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3dUMsQ0FBQyxFQUFFQSxDQUFDLENBQUNtc0MsT0FBTyxHQUFHOVAsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMwQyxDQUFDLENBQUNoYyxJQUFJLENBQUM3eUIsQ0FBQyxDQUFDNnlCLElBQUksQ0FBQ3dKLENBQUMsQ0FBQzIrQixVQUFVLENBQUNub0MsSUFBSSxDQUFDZ2MsQ0FBQyxDQUFDamdCLEtBQUssQ0FBQzV1QixDQUFDLENBQUM0dUIsS0FBSyxDQUFDeU4sQ0FBQyxDQUFDMitCLFVBQVUsQ0FBQ25vQyxJQUFJLENBQUNnYyxDQUFDLENBQUMxaEMsR0FBRyxDQUFDbk4sQ0FBQyxDQUFDbU4sR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQzIrQixVQUFVLENBQUM3dEQsR0FBRyxDQUFDMGhDLENBQUMsQ0FBQ3NHLE1BQU0sQ0FBQ24xQyxDQUFDLENBQUNtMUMsTUFBTSxDQUFDOVksQ0FBQyxDQUFDMitCLFVBQVUsQ0FBQzd0RCxHQUFHLENBQUMsT0FBTyxHQUFHcUosQ0FBQyxDQUFDbWlELFNBQVMsQ0FBQ2hoRCxDQUFDLENBQUMsQ0FBQyxDQUFDazNCLENBQUMsQ0FBQ2hjLElBQUksQ0FBQ3FaLENBQUMsRUFBRUosQ0FBQyxDQUFDK0MsQ0FBQyxDQUFDamdCLEtBQUssRUFBRWlnQixDQUFDLENBQUMxaEMsR0FBRyxDQUFDby9CLENBQUMsRUFBRXRsQyxDQUFDLENBQUM0bkMsQ0FBQyxDQUFDc0csTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHMytCLENBQUMsQ0FBQ21pRCxTQUFTLEVBQUUsQ0FBQ2hoRCxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDaGMsSUFBSSxDQUFDaVosQ0FBQyxFQUFFSSxDQUFDLENBQUMyQyxDQUFDLENBQUNqZ0IsS0FBSyxFQUFFaWdCLENBQUMsQ0FBQzFoQyxHQUFHLENBQUNsRyxDQUFDLEVBQUVzbEMsQ0FBQyxDQUFDc0MsQ0FBQyxDQUFDc0csTUFBTSxDQUFDLENBQUN4OUIsQ0FBQyxDQUFDLENBQUMzWCxDQUFDLENBQUNzUyxRQUFRLEVBQUUsQ0FBQytwQixDQUFDLENBQUMrUixZQUFZLENBQUNwdUMsQ0FBQyxDQUFDazdELFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQ2w3RCxDQUFDLENBQUNzUyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RTLENBQUMsQ0FBQzg2RCxXQUFXLEVBQUUsQ0FBQ3orQixDQUFDLENBQUMrUixZQUFZLENBQUNwdUMsQ0FBQyxDQUFDazdELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDbDdELENBQUMsQ0FBQzg2RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzk2RCxDQUFDLENBQUM0NkQsU0FBUyxFQUFFLENBQUN2K0IsQ0FBQyxDQUFDdVMsU0FBUyxDQUFDNXVDLENBQUMsQ0FBQ2s3RCxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUNsN0QsQ0FBQyxDQUFDNDZELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3YrQixDQUFDLENBQUNnUSxRQUFRLENBQUMsV0FBVyxDQUFDdmlDLENBQUMsQ0FBQyxDQUFDOHdELFNBQVMsQ0FBQzU2RCxDQUFDLENBQUNtc0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25zQyxDQUFDLENBQUM0NkQsU0FBUyxFQUFFLENBQUMsQ0FBQzl3RCxDQUFDLENBQUMyZixPQUFPLEVBQUUzZixDQUFDLENBQUN3ZixPQUFPLENBQUMsRUFBRXRwQixDQUFDLENBQUNtN0QsYUFBYSxDQUFDLENBQUM5K0IsQ0FBQyxDQUFDK1IsWUFBWSxDQUFDcHVDLENBQUMsQ0FBQ2s3RCxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUNsN0QsQ0FBQyxDQUFDNDZELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3YrQixDQUFDLENBQUN1UyxTQUFTLENBQUM1dUMsQ0FBQyxDQUFDazdELFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQ2w3RCxDQUFDLENBQUNzUyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDK3BCLENBQUMsQ0FBQytSLFlBQVksQ0FBQ3B1QyxDQUFDLENBQUNrN0QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDbDdELENBQUMsQ0FBQzQ2RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM1NkQsQ0FBQyxDQUFDbTdELGFBQWEsRUFBRSxDQUFDOStCLENBQUMsQ0FBQ3VTLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUNrN0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUNsN0QsQ0FBQyxDQUFDODZELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeitCLENBQUMsQ0FBQ2dRLFFBQVEsQ0FBQyxhQUFhLENBQUN2aUMsQ0FBQyxDQUFDLENBQUNneEQsV0FBVyxDQUFDOTZELENBQUMsQ0FBQ21zQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25zQyxDQUFDLENBQUNzUyxRQUFRLEVBQUUsQ0FBQ3hJLENBQUMsQ0FBQzJmLE9BQU8sRUFBRTNmLENBQUMsQ0FBQ3dmLE9BQU8sRUFBRXRwQixDQUFDLENBQUNtN0QsYUFBYSxFQUFFLENBQUM5K0IsQ0FBQyxDQUFDK1IsWUFBWSxDQUFDcHVDLENBQUMsQ0FBQ2s3RCxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUNsN0QsQ0FBQyxDQUFDc1MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDK3BCLENBQUMsQ0FBQ3VTLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUNrN0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUNsN0QsQ0FBQyxDQUFDODZELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3orQixDQUFDLENBQUNnUSxRQUFRLENBQUMsYUFBYSxDQUFDdmlDLENBQUMsQ0FBQyxDQUFDZ3hELFdBQVcsQ0FBQzk2RCxDQUFDLENBQUNtc0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNpaEIsVUFBVSxDQUFDLFFBQVEsQ0FBQ3RqRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQys2RCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNyMUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQ3ltQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BxQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJczZCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQ2hmLENBQUMsQ0FBQ291QyxZQUFZLENBQUMvUixDQUFDLENBQUM2K0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM3K0IsQ0FBQyxDQUFDeStCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3orQixDQUFDLENBQUM4K0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDbjdELENBQUMsQ0FBQ3FzQyxRQUFRLENBQUMsWUFBWSxDQUFDdmlDLENBQUMsQ0FBQyxDQUFDK3dELFVBQVUsQ0FBQ3grQixDQUFDLENBQUM4UCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ptQixDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQ3ltQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BxQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJczZCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQ2hmLENBQUMsQ0FBQ291QyxZQUFZLENBQUMvUixDQUFDLENBQUM2K0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDdHNCLFNBQVMsQ0FBQ3ZTLENBQUMsQ0FBQzYrQixRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM3K0IsQ0FBQyxDQUFDdStCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3YrQixDQUFDLENBQUMvcEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDK3BCLENBQUMsQ0FBQzgrQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNuN0QsQ0FBQyxDQUFDcXNDLFFBQVEsQ0FBQyxVQUFVLENBQUN2aUMsQ0FBQyxDQUFDLENBQUN3SSxRQUFRLENBQUMrcEIsQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRSxRQUFRLENBQUMsTUFBTSxDQUFDdmlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lrRCxNQUFNLENBQUN2MEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tNLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM5bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQytMLGNBQWMsQ0FBQyxDQUFDejNDLE9BQU8sQ0FBQyxRQUFRLENBQUN5c0MsY0FBYyxDQUFDLFVBQVUsQ0FBQ3ZxQyxPQUFPLENBQUMsQ0FBQzJxQixRQUFRLENBQUMsSUFBSSxDQUFDd00sT0FBTyxDQUFDLENBQUMsMkJBQTJCLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxDQUFDeHdCLFFBQVEsQ0FBQyxJQUFJLENBQUMwd0MsS0FBSyxDQUFDLENBQUMxeUIsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUN1SCxRQUFRLENBQUMsQ0FBQzZoQixFQUFFLENBQUMsVUFBVSxDQUFDTCxFQUFFLENBQUMsYUFBYSxDQUFDRixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUN2aEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDaXZCLE1BQU0sQ0FBQyxJQUFJLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUNwekIsS0FBSyxDQUFDLElBQUksQ0FBQ3NZLElBQUksQ0FBQyxJQUFJLENBQUN0OUIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDbW9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlsa0MsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUMyTixRQUFRLENBQUMsQ0FBQyxDQUFDM3FDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUNrc0QsR0FBRyxDQUFDLENBQUNsdkIsT0FBTyxDQUFDcmlDLENBQUMsQ0FBQzJkLE1BQU0sQ0FBQzNkLENBQUMsQ0FBQyxTQUFTLENBQUNzekMsSUFBSSxDQUFDdHpDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUN3eEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDL2lCLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnakIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLzFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzQxQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJeHhELENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUNxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3EvQixZQUFZLENBQUMsSUFBSSxDQUFDdnZCLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUN1K0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDNTVCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQ29uQyxNQUFNLENBQUMsSUFBSSxDQUFDeE4sT0FBTyxDQUFDd04sTUFBTSxDQUFDLENBQUMsQ0FBQ3hxQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQ2tzRCxHQUFHLENBQUM1ekMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDb21CLEdBQUcsQ0FBQyxJQUFJLENBQUM4TCxNQUFNLENBQUMsQ0FBQ3p4QixLQUFLLENBQUMsUUFBUSxDQUFDeEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK0IsTUFBTSxDQUFDb0QsS0FBSyxDQUFDLENBQUMsQ0FBQ25GLENBQUMsQ0FBQzBCLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK2tCLE9BQU8sQ0FBQzlwQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ29GLE1BQU0sQ0FBQy9CLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ2lVLFFBQVEsQ0FBQyxJQUFJLENBQUM3MkIsT0FBTyxDQUFDMkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2lCLEVBQUUsQ0FBQyxJQUFJLENBQUMyd0QsR0FBRyxDQUFDNXpDLE1BQU0sQ0FBQzQwQixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUNnZixHQUFHLENBQUNqZSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQ3FGLEtBQUssQ0FBQyxJQUFJLENBQUN0VyxPQUFPLENBQUNoOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3dlLFdBQVcsQ0FBQyxJQUFJLENBQUN3ZSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUN5QyxTQUFTLENBQUMsSUFBSSxDQUFDbm5CLE1BQU0sQ0FBQyxrREFBa0QsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDM2QsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDK0gsUUFBUSxDQUFDLElBQUksQ0FBQ2hHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ21uQixTQUFTLENBQUM5a0MsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUNxM0MsS0FBSyxDQUFDMXlCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2swQyxVQUFVLENBQUMsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ3YvQixDQUFDLENBQUMsQ0FBQzVPLFFBQVEsQ0FBQyxJQUFJLENBQUNoRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMza0IsT0FBTyxDQUFDaXNCLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM4c0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNodUIsR0FBRyxDQUFDLElBQUksQ0FBQ3BtQixNQUFNLENBQUMsSUFBSSxDQUFDcTBDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQ3IwQyxNQUFNLENBQUN0QyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNubEIsQ0FBQyxDQUFDdzdELFNBQVMsRUFBRXg3RCxDQUFDLENBQUMrN0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXp4RCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3N6QyxJQUFJLENBQUMxM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDMjFDLEdBQUcsQ0FBQzV6QyxNQUFNLENBQUMvYyxFQUFFLENBQUMsSUFBSSxDQUFDMndELEdBQUcsQ0FBQ2plLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNGUsUUFBUSxDQUFDdDJDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ3dILE1BQU0sQ0FBQyxJQUFJLENBQUNrd0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDeE8sU0FBUyxDQUFDLElBQUksQ0FBQ290QixRQUFRLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDQSxRQUFRLENBQUN2dUMsUUFBUSxDQUFDLElBQUksQ0FBQ3l4QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK2MsWUFBWSxDQUFDLElBQUksQ0FBQzdlLElBQUksQ0FBQ0EsSUFBSSxDQUFDLENBQUNuakIsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUNvaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQ3gyQyxNQUFNLENBQUMsUUFBUSxDQUFDNmYsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzBCLGNBQWMsQ0FBQyxDQUFDLENBQUN0ZCxDQUFDLENBQUNveUQsYUFBYSxDQUFDLENBQUMsQ0FBQ3B5RCxDQUFDLENBQUNxeUQsT0FBTyxDQUFDbjhELENBQUMsQ0FBQ3k5QyxJQUFJLENBQUN6K0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMwRyxDQUFDLENBQUMsQ0FBQyxDQUFDbUYsS0FBSyxDQUFDLFFBQVEsQ0FBQ25GLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQ3I4QixDQUFDLENBQUN5OUMsSUFBSSxDQUFDeitCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksRUFBRWxWLENBQUMsQ0FBQ3N5RCxVQUFVLEVBQUUvL0IsQ0FBQyxDQUFDeGtCLEtBQUssR0FBRy9OLENBQUMsQ0FBQ3N5RCxVQUFVLEVBQUUsQ0FBQ3R5RCxDQUFDLENBQUN1aUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzNtQixDQUFDLENBQUMsQ0FBQyszQixJQUFJLENBQUNwaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUNxdEQsTUFBTSxFQUFFcnRELENBQUMsQ0FBQ3F5RCxPQUFPLENBQUM5L0IsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDLENBQUMsQ0FBQzViLENBQUMsQ0FBQ3N5RCxVQUFVLENBQUMvL0IsQ0FBQyxDQUFDeGtCLEtBQUssQ0FBQy9OLENBQUMsQ0FBQzJkLE1BQU0sQ0FBQ3RZLElBQUksQ0FBQyx1QkFBdUIsQ0FBQ3JGLENBQUMsQ0FBQzJ4RCxTQUFTLENBQUNuNUQsRUFBRSxDQUFDKzVCLENBQUMsQ0FBQ3hrQixLQUFLLENBQUMsQ0FBQzFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDaXVDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUM2ZSxZQUFZLENBQUNudEIsSUFBSSxDQUFDLElBQUksQ0FBQ3NPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUM2ZSxZQUFZLENBQUN2ZixxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1ZixZQUFZLENBQUMvZSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dqQixZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0osVUFBVSxDQUFDcHVDLFdBQVcsQ0FBQyxJQUFJLENBQUNvdUMsVUFBVSxDQUFDLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDUyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUNyOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUNsYyxPQUFPLENBQUNpc0IsS0FBSyxFQUFFLElBQUksQ0FBQzhzQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNFLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlyMkMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLElBQUksQ0FBQ3FpQyxPQUFPLENBQUN2K0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ3d2QyxJQUFJLENBQUMzakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2aUQsYUFBYSxDQUFDeHlELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ20yQyxXQUFXLENBQUMsSUFBSSxDQUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQ2pCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQzhmLFlBQVksQ0FBQzFqQixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2tqQixTQUFTLENBQUMsSUFBSSxDQUFDcmUsSUFBSSxDQUFDeHZDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQ2tKLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDbEosSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDNHRELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzF4RCxDQUFDLENBQUN4SSxNQUFNLEVBQUUsQ0FBQ29rQixDQUFDLENBQUMsSUFBSSxDQUFDMjJDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNKLFlBQVksQ0FBQ3B4QyxLQUFLLENBQUMsSUFBSSxDQUFDbkYsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNjJDLFFBQVEsQ0FBQzcyQyxDQUFDLENBQUMxRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3N2QixVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQ25DLE9BQU8sQ0FBQ2x0QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNra0IsSUFBSSxDQUFDLFFBQVEsQ0FBQ3pkLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUMyRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMreEQsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDcHRCLFlBQVksQ0FBQyxJQUFJLENBQUNnUCxJQUFJLENBQUN4dkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDcXVELFlBQVksQ0FBQ3B4QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3d4QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ04sWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNOLFNBQVMsQ0FBQ242RCxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM2MUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FGLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdGMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzWCxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzNwQixHQUFHLENBQUMsSUFBSSxDQUFDL3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMyK0QsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDcHdCLFFBQVEsQ0FBQyxNQUFNLENBQUMzbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4eEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDd0UsUUFBUSxDQUFDaHRDLFFBQVEsQ0FBQ3RKLENBQUMsQ0FBQzdpQixNQUFNLENBQUMsQ0FBQ290QyxFQUFFLENBQUMsSUFBSSxDQUFDeG9CLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzNrQixPQUFPLENBQUNrc0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDaXZCLEtBQUssQ0FBQyxRQUFRLENBQUN2NEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeXhDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3FGLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzV0QixJQUFJLENBQUMsSUFBSSxDQUFDaHhDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ3V1QyxRQUFRLENBQUMsT0FBTyxDQUFDM21CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQy9rQixNQUFNLENBQUMsQ0FBQ2sxQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3ZmLElBQUksQ0FBQyxDQUFDd2UsaUJBQWlCLENBQUMsUUFBUSxDQUFDOXhELENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDazNDLFFBQVEsQ0FBQzU4RCxDQUFDLENBQUM4SixDQUFDLENBQUNrMkMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDcFIsU0FBUyxDQUFDNXVDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQ2lnRCxXQUFXLENBQUMsUUFBUSxDQUFDbjJDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQzdsQixDQUFDLENBQUMsRUFBRSxDQUFDa1AsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQy9CLENBQUMsQ0FBQyxRQUFRLENBQUNBLENBQUMsQ0FBQzhyQyxDQUFDLENBQUMsQ0FBQyxJQUFJN2tDLENBQUMsQ0FBQzZrQyxDQUFDLENBQUM3b0IsUUFBUSxHQUFHek0sQ0FBQyxFQUFFLENBQUN2UCxDQUFDLENBQUN5ZSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUN0bEIsSUFBSSxDQUFDMHJDLENBQUMsQ0FBQzdvQixRQUFRLENBQUMsQ0FBQyxDQUFDb1osQ0FBQyxDQUFDdVMsU0FBUyxDQUFDM25DLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDNmtDLENBQUMsQ0FBQ0ssT0FBTyxDQUFDajdCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQytOLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDaFksQ0FBQyxDQUFDd21CLFFBQVEsQ0FBQzNqQixDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3b0IsUUFBUSxDQUFDLENBQUNvWixDQUFDLENBQUM4akIsZUFBZSxDQUFDcjJDLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FVLGVBQWUsQ0FBQyxRQUFRLENBQUN6NkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNzMkMsV0FBVyxDQUFDMTZCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDa1YsSUFBSSxDQUFDLG9CQUFvQixDQUFDbFYsQ0FBQyxDQUFDLENBQUMsQ0FBQ3MyQyxXQUFXLENBQUMsUUFBUSxDQUFDdDJDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDKzhCLEtBQUssQ0FBQ3ppRCxDQUFDLENBQUNtc0MsT0FBTyxDQUFDaDlCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT25QLENBQUMsQ0FBQ3lKLFFBQVEsRUFBRSxJQUFJLENBQUNtbEMsU0FBUyxDQUFDdlMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3VnQyxRQUFRLENBQUNwbUQsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDZ2dELEtBQUssQ0FBQyxDQUFDM2pCLENBQUMsQ0FBQ25QLE1BQU0sQ0FBQzFXLENBQUMsQ0FBQyxDQUFDaVgsUUFBUSxDQUFDM2pCLENBQUMsQ0FBQyxDQUFDLENBQUM4eUQsUUFBUSxDQUFDLFFBQVEsQ0FBQ2wzQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDdGxCLElBQUksQ0FBQzBKLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDOEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNxd0IsS0FBSyxDQUFDLFFBQVEsQ0FBQ24zQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzJnRCxNQUFNLENBQUNuM0QsQ0FBQyxDQUFDLElBQUksQ0FBQ3k3RCxTQUFTLENBQUNuNUQsRUFBRSxDQUFDLElBQUksQ0FBQzg1RCxVQUFVLENBQUMsQ0FBQ2xyRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2xSLENBQUMsQ0FBQyxJQUFJLENBQUN5N0QsU0FBUyxDQUFDbjVELEVBQUUsQ0FBQyxJQUFJLENBQUM2cEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDNTVCLGFBQWEsQ0FBQyxDQUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDc0YsQ0FBQyxFQUFFLDBCQUEwQixDQUFDLENBQUM2bEIsQ0FBQyxDQUFDLE9BQU8sR0FBRzNXLENBQUMsRUFBRSxNQUFNLEdBQUdBLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsT0FBTyxHQUFHMGxCLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUNsUCxDQUFDLENBQUMsQ0FBQ2xVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdEMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDbFUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDKzVCLENBQUMsQ0FBQy82QixNQUFNLEVBQUUsSUFBSSxDQUFDMjZELFlBQVksQ0FBQ3B4QyxLQUFLLENBQUMvZ0IsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUNnZ0MsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ1osU0FBUyxDQUFDbjVELEVBQUUsQ0FBQyxJQUFJLENBQUM2cEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDNTVCLGFBQWEsQ0FBQyxDQUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM2cUMsT0FBTyxDQUFDLFFBQVEsQ0FBQ3IyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDeXhDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUN6eEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3cyQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJeDJDLENBQUMsQ0FBQyxJQUFJLENBQUNnM0MsS0FBSyxFQUFFLENBQUN6K0QsTUFBTSxDQUFDNCtELFlBQVksQ0FBQyxDQUFDbjNDLENBQUMsQ0FBQ3puQixNQUFNLENBQUM0K0QsWUFBWSxDQUFDLENBQUMsQ0FBQ24zQyxDQUFDLENBQUNvM0MsZUFBZSxDQUFDLENBQUMsQ0FBQ3AzQyxDQUFDLENBQUNxM0MsUUFBUSxDQUFDLElBQUksQ0FBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLEtBQUssQ0FBQzcyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzRoQixNQUFNLENBQUNvRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzR4QyxjQUFjLENBQUMsQ0FBQ3RkLFNBQVMsQ0FBQyxRQUFRLENBQUNyMUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcXRELE1BQU0sRUFBRSxDQUFDenhDLENBQUMsQ0FBQzViLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDeVUsT0FBTyxDQUFDLHdCQUF3QixDQUFDOE4sQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ24yQixjQUFjLENBQUMsSUFBSSxDQUFDa2xELEdBQUcsQ0FBQzV6QyxNQUFNLENBQUMsQ0FBQyxDQUFDbm1CLE1BQU0sRUFBRSxJQUFJLENBQUMyOEMsS0FBSyxDQUFDbjBDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ3lELGFBQWEsQ0FBQyxDQUFDM2MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXo1QixDQUFDLENBQUN6bkIsTUFBTSxDQUFDNCtELFlBQVksQ0FBQyxDQUFDbjNDLENBQUMsQ0FBQ3puQixNQUFNLENBQUM0K0QsWUFBWSxDQUFDLENBQUMsQ0FBQ24zQyxDQUFDLENBQUNzM0MsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDTixLQUFLLENBQUNoM0MsQ0FBQyxDQUFDdTNDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDUCxLQUFLLENBQUM1K0QsUUFBUSxDQUFDOGxCLFNBQVMsQ0FBQ3M1QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNoMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQ3hDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3cyQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ25nQixPQUFPLENBQUNyMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2cyQixPQUFPLENBQUMsUUFBUSxDQUFDNXhDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDOEosQ0FBQyxDQUFDaWdCLE9BQU8sQ0FBQyxDQUFDLEtBQUtyRSxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQzB2QixHQUFHLENBQUMsS0FBSy96QixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ2t2QixNQUFNLENBQUMsSUFBSSxDQUFDZ0YsS0FBSyxDQUFDbjBDLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLMGxCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDaXZCLEtBQUssQ0FBQyxJQUFJLENBQUNtZSxNQUFNLEVBQUUsSUFBSSxDQUFDZ0csa0JBQWtCLENBQUNyekQsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQzJ2QixFQUFFLENBQUM1dkMsQ0FBQyxDQUFDb2YsTUFBTSxDQUFDLElBQUksQ0FBQzZ5QixPQUFPLENBQUNqeUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK3lDLEtBQUssQ0FBQyxNQUFNLENBQUMveUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQyt1QixJQUFJLENBQUNodkMsQ0FBQyxDQUFDb2YsTUFBTSxDQUFDLElBQUksQ0FBQzZ5QixPQUFPLENBQUNqeUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK3lDLEtBQUssQ0FBQyxNQUFNLENBQUMveUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ3l2QixLQUFLLENBQUMsSUFBSSxDQUFDMmQsTUFBTSxDQUFDLElBQUksQ0FBQ2dHLGtCQUFrQixDQUFDcnpELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2l5QyxPQUFPLENBQUNqeUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ292QixJQUFJLENBQUMsSUFBSSxDQUFDMEQsS0FBSyxDQUFDLE1BQU0sQ0FBQy95QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzRiLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDd3ZCLEtBQUssQ0FBQyxJQUFJLENBQUNzRCxLQUFLLENBQUMsTUFBTSxDQUFDL3lDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNtdkIsSUFBSSxDQUFDLEtBQUt4ekIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNzdkIsT0FBTyxDQUFDLElBQUksQ0FBQ3dELEtBQUssQ0FBQyxPQUFPLENBQUMveUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ2d2QixHQUFHLENBQUMsS0FBS3J6QixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ3F2QixTQUFTLENBQUMsSUFBSSxDQUFDeUQsS0FBSyxDQUFDLE1BQU0sQ0FBQy95QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQ3N6QyxJQUFJLENBQUNoMUIsT0FBTyxDQUFDdGUsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRThKLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDKzFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ3ozQyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLElBQUksQ0FBQzJ4RCxTQUFTLENBQUNuNUQsRUFBRSxDQUFDLElBQUksQ0FBQzg1RCxVQUFVLENBQUMsQ0FBQ2xyRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUNwSCxDQUFDLENBQUM0d0IsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDeWhDLE9BQU8sQ0FBQ3J5RCxDQUFDLENBQUNrVixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQzBHLENBQUMsQ0FBQyxDQUFDLENBQUN5MkMsT0FBTyxDQUFDLFFBQVEsQ0FBQ3oyQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQ21zQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM1NUIsYUFBYSxDQUFDLElBQUksQ0FBQzQ1QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM1NUIsYUFBYSxDQUFDbVQsQ0FBQyxDQUFDN04sS0FBSyxDQUFDLElBQUksQ0FBQzhqRCxVQUFVLENBQUNwdUMsV0FBVyxDQUFDLElBQUksQ0FBQ291QyxVQUFVLENBQUMsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ2wyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzYyQyxRQUFRLENBQUM3MkMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMm1CLFFBQVEsQ0FBQyxRQUFRLENBQUN2aUMsQ0FBQyxDQUFDLENBQUMyekMsSUFBSSxDQUFDLzNCLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzdOLEtBQUssR0FBRzdYLENBQUMsRUFBRSxJQUFJLENBQUNxc0MsUUFBUSxDQUFDLFFBQVEsQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQzJ6QyxJQUFJLENBQUMvM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1NEIsS0FBSyxDQUFDbjBDLENBQUMsQ0FBQyxDQUFDLENBQUN5eUQsUUFBUSxDQUFDLFFBQVEsQ0FBQzcyQyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLElBQUksQ0FBQzJ4RCxTQUFTLENBQUNuNUQsRUFBRSxDQUFDb2pCLENBQUMsQ0FBQzdOLEtBQUssQ0FBQyxDQUFDMUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQ3NZLE1BQU0sQ0FBQ3RZLElBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDckYsQ0FBQyxDQUFDLHVCQUF1QixDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3N6QyxJQUFJLENBQUNqdUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDckYsQ0FBQyxDQUFDLENBQUMsQ0FBQ3drQyxVQUFVLENBQUMsUUFBUSxDQUFDNW9CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUc0YixDQUFDLENBQUMsQ0FBQyxJQUFJMWxCLENBQUMsQ0FBQyxJQUFJLENBQUN5bkIsTUFBTSxDQUFDN1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dnQyxZQUFZLENBQUNwdUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUNxM0MsS0FBSyxDQUFDMXlCLE1BQU0sQ0FBQyxDQUFDbW5CLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUMsSUFBSSxDQUFDOEosQ0FBQyxDQUFDMmQsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDb2xCLE1BQU0sQ0FBQ25uQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUc0YixDQUFDLEVBQUUsSUFBSSxDQUFDczJDLFFBQVEsQ0FBQ3Z1QyxRQUFRLENBQUMsSUFBSSxDQUFDeXhCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUd4NUIsQ0FBQyxFQUFFLElBQUksQ0FBQ20yQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM1dEIsa0JBQWtCLENBQUMsUUFBUSxDQUFDdm9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21uQixNQUFNLENBQUNubkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdTJDLFlBQVksQ0FBQ3Q1QyxNQUFNLENBQUMsVUFBVSxDQUFDK0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK0IsTUFBTSxDQUFDdFksSUFBSSxDQUFDLGVBQWUsQ0FBQ3VXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytvQixZQUFZLENBQUMsSUFBSSxDQUFDaG5CLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5bUIsT0FBTyxDQUFDbHRCLElBQUksQ0FBQyxVQUFVLENBQUN5RyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK0IsTUFBTSxDQUFDdFksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzh1QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeDJCLE1BQU0sQ0FBQ3RZLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyt2QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcDFDLENBQUMsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUMycUIsUUFBUSxDQUFDLE9BQU8zakIsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMUksTUFBTSxFQUFFMEksQ0FBQyxDQUFDekssUUFBUSxDQUFDcW1CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hNLFFBQVEsQ0FBQzhQLElBQUksQ0FBQzlELENBQUMsQ0FBQyxDQUFDeEgsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN3SCxDQUFDLEVBQUVBLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsSUFBSSxDQUFDcWlDLE9BQU8sQ0FBQ3YwQixPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOU4sQ0FBQyxDQUFDeEksTUFBTSxFQUFFLENBQUN3SSxDQUFDLENBQUMsSUFBSSxDQUFDaE0sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDbWtCLElBQUksQ0FBQyxDQUFDblksQ0FBQyxDQUFDLENBQUMweUQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLzBDLE1BQU0sQ0FBQ3RZLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDZ29ELE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQy9vQixZQUFZLENBQUMsSUFBSSxDQUFDM21CLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQzB2QyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUN2b0IsU0FBUyxDQUFDLElBQUksQ0FBQ25uQixNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUMwdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDMW9CLFlBQVksQ0FBQyxJQUFJLENBQUN1dEIsUUFBUSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM3RSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMvWixJQUFJLENBQUNqdUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQ2dvRCxNQUFNLENBQUMsQ0FBQyxDQUFDMEUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSW4yQyxDQUFDLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQ2lzQixLQUFLLENBQUMsT0FBT3JKLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytCLE1BQU0sQ0FBQ3hHLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBR3lFLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsSUFBSSxDQUFDeW1CLE9BQU8sQ0FBQ2hxQixJQUFJLENBQUMsQ0FBQyxDQUFDbXRCLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbkQsT0FBTyxDQUFDOXBCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNvRixNQUFNLENBQUM2bkIsVUFBVSxDQUFDNXBCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3c2QixXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM5QyxJQUFJLENBQUM5TixVQUFVLENBQUM1ckMsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQyxJQUFJLENBQUM3SixNQUFNLENBQUM2bkIsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4TixJQUFJLENBQUNydUIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDdWdCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdkIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcm9CLENBQUMsQ0FBQyxJQUFJLENBQUNtbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPbm5CLENBQUMsQ0FBQ2pjLFFBQVEsQ0FBQyxJQUFJLENBQUMwaUMsT0FBTyxDQUFDbHRCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQ3lHLENBQUMsQ0FBQyxDQUFDNDJDLGFBQWEsQ0FBQyxRQUFRLENBQUN4eUQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQy9ILElBQUksQ0FBQyxRQUFRLENBQUMrSCxDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQzZsQixDQUFDLENBQUM1OUIsSUFBSSxDQUFDdUIsQ0FBQyxDQUFDMDdELFlBQVksQ0FBQ2gyQyxDQUFDLENBQUNsUCxDQUFDLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3F5QyxLQUFLLENBQUM5ZixDQUFDLENBQUMsQ0FBQ3EvQixZQUFZLENBQUMsUUFBUSxDQUFDaDJDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDeFUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQ2k3QixPQUFPLENBQUN6bUIsQ0FBQyxDQUFDN04sS0FBSyxDQUFDL04sQ0FBQyxDQUFDN0UsS0FBSyxDQUFDeWdCLENBQUMsQ0FBQ3psQixHQUFHLENBQUMsQ0FBQyxDQUFDKy9DLEtBQUssQ0FBQ3Q2QixDQUFDLENBQUN0bEIsSUFBSSxDQUFDLENBQUMsQ0FBQzZpQixRQUFRLENBQUNqakIsQ0FBQyxDQUFDbVAsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQzFGLFFBQVEsQ0FBQ3pKLENBQUMsQ0FBQ2lmLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRXlHLENBQUMsQ0FBQ3pHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNrdkIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc0ssdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3VqQixRQUFRLENBQUN4aUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpTyxNQUFNLENBQUNqTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJ5QixPQUFPLENBQUNocUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNncUIsT0FBTyxDQUFDNE4sY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNKLE1BQU0sQ0FBQ3hxQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQ2tzRCxHQUFHLENBQUNsdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ptQixDQUFDLENBQUM4bUIsTUFBTSxDQUFDLFdBQVcsQ0FBQzltQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDa2hCLEtBQUssQ0FBQyxDQUFDNXNELE9BQU8sQ0FBQyxRQUFRLENBQUNtc0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDanFDLE9BQU8sQ0FBQyxDQUFDMjBCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3dDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDLENBQUMwZCxRQUFRLENBQUMsQ0FBQyxDQUFDcm1CLEdBQUcsQ0FBQyxHQUFHLENBQUNraUIsR0FBRyxDQUFDLENBQUMsQ0FBQzRwQixXQUFXLENBQUMsWUFBWSxDQUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM1b0MsSUFBSSxDQUFDLENBQUMsQ0FBQzd1QixLQUFLLENBQUMsQ0FBQyxDQUFDbWQsTUFBTSxDQUFDLElBQUksQ0FBQzQ3QixNQUFNLENBQUMsSUFBSSxDQUFDcWYsS0FBSyxDQUFDLElBQUksQ0FBQ3BzRCxLQUFLLENBQUMsSUFBSSxDQUFDaVAsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDbzlDLFFBQVEsQ0FBQyxDQUFDLENBQUN0dkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdXZCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDM1IsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0UixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaHZCLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUN3dUIsV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDaHhCLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcXhCLFdBQVcsQ0FBQyxDQUFDO0FBQ3oyL0IsQ0FBQyxDQUFDcnhCLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3l4QixZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMxaUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrZixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUN3RCxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJaDBELENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQzBULENBQUMsQ0FBQyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDditCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDaytCLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQzdrQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDakgsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ2phLE1BQU0sRUFBRWlhLENBQUMsQ0FBQ2phLE1BQU0sQ0FBQzlnQixNQUFNLEVBQUUsQ0FBQyxDQUFDa1YsQ0FBQyxDQUFDbFYsTUFBTSxDQUFDdEIsQ0FBQyxFQUFFLENBQUN3VyxDQUFDLENBQUNqWSxLQUFLLENBQUN5QixDQUFDLENBQUMsQ0FBQ3daLE1BQU0sQ0FBQyxDQUFDLENBQUNoRCxDQUFDLENBQUNBLENBQUMsQ0FBQ2pZLEtBQUssQ0FBQyxDQUFDLENBQUN5QixDQUFDLENBQUMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDME0sQ0FBQyxDQUFDbFYsTUFBTSxDQUFDdEIsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQzdDLENBQUMsQ0FBQ3hJLElBQUksQ0FBQ3F0QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrbkIsT0FBTyxDQUFDeDhDLENBQUMsQ0FBQ3VCLEdBQUcsQ0FBQzJOLENBQUMsQ0FBQ3plLENBQUMsQ0FBQytELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDeWlCLFFBQVEsQ0FBQyxJQUFJLENBQUMwZSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3lDLFNBQVMsQ0FBQyxJQUFJLENBQUNva0IsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDaHRDLE1BQU0sQ0FBQyxJQUFJLENBQUNndEMsT0FBTyxDQUFDMXdELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwd0QsT0FBTyxDQUFDanhELElBQUksQ0FBQyxRQUFRLENBQUMrSCxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQ2xWLENBQUMsQ0FBQyxDQUFDcUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzB1RCxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL3pELENBQUMsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUNnSCxDQUFDLENBQUM0eUQsS0FBSyxDQUFDLENBQUM1eUQsQ0FBQyxDQUFDNHlELEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDNXlELENBQUMsQ0FBQ3NZLE1BQU0sQ0FBQ3RZLENBQUMsQ0FBQ3NZLE1BQU0sQ0FBQzlnQixNQUFNLEVBQUUsQ0FBQyxHQUFHd0ksQ0FBQyxDQUFDc1ksTUFBTSxDQUFDOWdCLE1BQU0sQ0FBQ3dJLENBQUMsQ0FBQ3NZLE1BQU0sQ0FBQyxDQUFDdFksQ0FBQyxDQUFDc1ksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDdFksQ0FBQyxDQUFDc1ksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzRCxDQUFDLENBQUNuaUIsT0FBTyxDQUFDdUcsQ0FBQyxDQUFDc1ksTUFBTSxDQUFDLEVBQUUsQ0FBQ3RZLENBQUMsQ0FBQ3NZLE1BQU0sQ0FBQ3RZLENBQUMsQ0FBQ3NZLE1BQU0sQ0FBQzdqQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VMLENBQUMsQ0FBQ3NZLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzI3QyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQ0EsS0FBSyxDQUFDcDdELE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzhzQyxZQUFZLENBQUMsSUFBSSxDQUFDc3VCLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsS0FBSyxDQUFDejdDLEdBQUcsQ0FBQyxDQUFDNFIsSUFBSSxDQUFDLEVBQUUsQ0FBQ3NpQixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdW5CLEtBQUssQ0FBQ2gzQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMrSCxRQUFRLENBQUMsSUFBSSxDQUFDMGUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDeUMsU0FBUyxDQUFDLElBQUksQ0FBQzh0QixLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHNXlELENBQUMsQ0FBQzR5RCxLQUFLLEVBQUUsS0FBSyxHQUFHNXlELENBQUMsQ0FBQzR5RCxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUM5dEIsU0FBUyxDQUFDLElBQUksQ0FBQzh0QixLQUFLLENBQUMsa0JBQWtCLENBQUM1eUQsQ0FBQyxDQUFDNHlELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLEtBQUssRUFBRSxJQUFJLENBQUNBLEtBQUssQ0FBQ2xqRCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2tqRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ3RoQixZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN0TSxJQUFJLENBQUMsSUFBSSxDQUFDa2tCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ25sQixHQUFHLENBQUMsSUFBSSxDQUFDbWxCLE9BQU8sQ0FBQyxJQUFJLENBQUNnTCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUNodkIsVUFBVSxDQUFDLElBQUksQ0FBQ2drQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMvakIsVUFBVSxDQUFDLElBQUksQ0FBQytqQixPQUFPLENBQUMsQ0FBQyxDQUFDN2tCLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZrQixPQUFPLENBQUN4NUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrakQsS0FBSyxFQUFFLElBQUksQ0FBQ0EsS0FBSyxDQUFDbGpELE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMnlDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQ08sYUFBYSxDQUFDLFFBQVEsQ0FBQzVpRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUNLLENBQUMsQ0FBQzUwQixDQUFDLENBQUNrM0IsQ0FBQyxDQUFDLElBQUksQ0FBQ1EsQ0FBQyxDQUFDLElBQUksQ0FBQ3ZzQyxPQUFPLENBQUMsT0FBT3VzQyxDQUFDLENBQUM1bEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdzBELFdBQVcsQ0FBQyxDQUFDbHZDLEtBQUssQ0FBQyxJQUFJLENBQUNvZCxPQUFPLENBQUNtRCxVQUFVLENBQUMsQ0FBQyxDQUFDbmEsTUFBTSxDQUFDLElBQUksQ0FBQ2dYLE9BQU8sQ0FBQ29ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnbUIsYUFBYSxDQUFDLElBQUksQ0FBQ3BwQixPQUFPLENBQUNsSCxNQUFNLENBQUMsQ0FBQyxDQUFDamxDLENBQUMsQ0FBQyxDQUFDeXdDLENBQUMsQ0FBQzNtQyxDQUFDLENBQUM0ZixLQUFLLENBQUMybUIsQ0FBQyxDQUFDdm1DLENBQUMsQ0FBQzZmLEtBQUssQ0FBQyxDQUFDMFMsQ0FBQyxDQUFDLElBQUksQ0FBQzZoQyxtQkFBbUIsQ0FBQ2wrRCxDQUFDLENBQUMsQ0FBQ3dXLENBQUMsQ0FBQyxJQUFJLENBQUMybkQsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNKLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQy9LLE9BQU8sQ0FBQ2p4RCxJQUFJLENBQUMsUUFBUSxDQUFDK0gsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBELElBQUksQ0FBQzhyQyxHQUFHLENBQUNuVCxDQUFDLENBQUN3UyxDQUFDLENBQUN6c0IsTUFBTSxDQUFDdFksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDeFcsQ0FBQyxFQUFFd1csQ0FBQyxHQUFHeFcsQ0FBQyxFQUFFLENBQUM4SixDQUFDLEdBQUcra0MsQ0FBQyxDQUFDdXZCLGlCQUFpQixFQUFFdnZCLENBQUMsQ0FBQ3pzQixNQUFNLENBQUN0WSxDQUFDLENBQUMsR0FBR3VsQyxDQUFDLENBQUNtRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUNoOUIsQ0FBQyxDQUFDeFcsQ0FBQyxDQUFDOHJDLENBQUMsQ0FBQ3BtQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN6ZSxDQUFDLENBQUM2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvaUMsQ0FBQyxDQUFDLElBQUksQ0FBQ215QixNQUFNLENBQUN2MEQsQ0FBQyxDQUFDN0MsQ0FBQyxDQUFDLENBQUNpbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc3hCLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNFLFlBQVksQ0FBQ3oyRCxDQUFDLENBQUMsSUFBSSxDQUFDMm5DLFNBQVMsQ0FBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMWpCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQ21rQixDQUFDLENBQUNULENBQUMsQ0FBQzdHLE1BQU0sQ0FBQyxDQUFDLENBQUN0dEIsQ0FBQyxDQUFDLENBQUMrTixDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQytVLE9BQU8sQ0FBQyxDQUFDLENBQUNGLE9BQU8sQ0FBQyxDQUFDLENBQUMxQixFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQUNnb0QsWUFBWSxDQUFDM21ELENBQUMsQ0FBQyxDQUFDa2IsSUFBSSxDQUFDLENBQUMsQ0FBQzFsQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixJQUFJLENBQUMvb0IsQ0FBQyxDQUFDNGYsS0FBSyxDQUFDNmlCLENBQUMsQ0FBQzFaLElBQUksQ0FBQ2laLENBQUMsQ0FBQy9jLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNWhCLEdBQUcsQ0FBQ3JELENBQUMsQ0FBQzZmLEtBQUssQ0FBQzRpQixDQUFDLENBQUNwL0IsR0FBRyxDQUFDMitCLENBQUMsQ0FBQzNXLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5RSxRQUFRLENBQUNrUyxDQUFDLENBQUM3cUIsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzJZLFFBQVEsQ0FBQ2tTLENBQUMsQ0FBQzdxQixHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDMlksUUFBUSxDQUFDa1MsQ0FBQyxDQUFDN3FCLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyt4QyxPQUFPLENBQUN0NEIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxDQUFDNmpDLE1BQU0sQ0FBQ3owRCxDQUFDLENBQUM3QyxDQUFDLENBQUNvMUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb2hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzFRLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksVUFBVSxDQUFDLFFBQVEsQ0FBQ3puQyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLENBQUMybUMsQ0FBQyxDQUFDL3FCLENBQUMsQ0FBQ2dFLEtBQUssQ0FBQzJtQixDQUFDLENBQUMzcUIsQ0FBQyxDQUFDaUUsS0FBSyxDQUFDLENBQUMzcEIsQ0FBQyxDQUFDLElBQUksQ0FBQ2srRCxtQkFBbUIsQ0FBQ3AwRCxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3kwRCxNQUFNLENBQUM3NEMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c0QyxZQUFZLENBQUMxOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ290RCxVQUFVLENBQUMsUUFBUSxDQUFDMW5DLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDMG9CLFlBQVksQ0FBQyxJQUFJLENBQUM0a0IsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3dLLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnQixLQUFLLENBQUM5NEMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c0QyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMxZSxPQUFPLENBQUN0NUIsQ0FBQyxDQUFDLElBQUksQ0FBQ2c0QyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUNBLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDWSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ2IsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDUCxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQ3Q2RCxPQUFPLENBQUNzNkQsV0FBVyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQ2MsbUJBQW1CLENBQUMsUUFBUSxDQUFDeDRDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDc3hCLFdBQVcsQ0FBQyxDQUFDdHpELENBQUMsQ0FBQyxJQUFJLENBQUNtMEQsV0FBVyxDQUFDbHZDLEtBQUssQ0FBQy91QixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDK3FCLENBQUMsQ0FBQyxJQUFJLENBQUM4a0IsYUFBYSxDQUFDMWlDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQ3lyQyxZQUFZLENBQUMsSUFBSSxDQUFDQSxZQUFZLENBQUN6ckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQy9vQixDQUFDLENBQUMsSUFBSSxDQUFDbTBELFdBQVcsQ0FBQzlvQyxNQUFNLENBQUNuMUIsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzJxQixDQUFDLENBQUMsSUFBSSxDQUFDa2xCLGFBQWEsQ0FBQ3BvRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUNteEQsWUFBWSxDQUFDLElBQUksQ0FBQ0EsWUFBWSxDQUFDbnhELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa3ZCLENBQUMsQ0FBQ3I4QixDQUFDLENBQUM4SixDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMrZ0MsV0FBVyxFQUFFLENBQUMvZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLElBQUksQ0FBQzJuRCxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0osU0FBUyxDQUFDLENBQUMsQ0FBQ2p5QixDQUFDLENBQUMsSUFBSSxDQUFDaXlCLFNBQVMsQ0FBQyxDQUFDLENBQUMxaEMsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUNpb0QsZUFBZSxDQUFDM3lCLENBQUMsQ0FBQyxDQUFDLENBQUM2a0IsT0FBTyxDQUFDLFFBQVEsQ0FBQ2pyQyxDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxDQUFDclcsTUFBTSxDQUFDLElBQUksQ0FBQ2d0QyxPQUFPLENBQUN0dEMsQ0FBQyxDQUFDLENBQUNnNUMsV0FBVyxDQUFDaDVDLENBQUMsQ0FBQ3pnQixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUc2RSxDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUM3RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMwNUQsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUN0aUMsQ0FBQyxDQUFDcDNCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRzZFLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ3NZLE1BQU0sQ0FBQ3NELENBQUMsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDamEsTUFBTSxDQUFDcGlCLENBQUMsRUFBRSxJQUFJLENBQUNvaUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDaWEsQ0FBQyxDQUFDLENBQUNzaUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzc3RCxPQUFPLENBQUNzZixNQUFNLEVBQUUsSUFBSSxDQUFDdGYsT0FBTyxDQUFDc2YsTUFBTSxDQUFDOWdCLE1BQU0sQ0FBQyxDQUFDKzhELE1BQU0sQ0FBQyxRQUFRLENBQUMzNEMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUN1aUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzNtQixDQUFDLENBQUMsSUFBSSxDQUFDaXJDLE9BQU8sQ0FBQzdtRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5MEQsTUFBTSxDQUFDLFFBQVEsQ0FBQzc0QyxDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLElBQUksQ0FBQzdtQyxLQUFLLENBQUMsQ0FBQyxDQUFDZ0MsQ0FBQyxDQUFDLElBQUksQ0FBQ21iLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdThDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDbm9ELENBQUMsQ0FBQyxJQUFJLENBQUM0TCxNQUFNLENBQUN0WSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQyxJQUFJLENBQUMxcEIsTUFBTSxDQUFDdFksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ3NmLE1BQU0sQ0FBQzlnQixNQUFNLEVBQUUsSUFBSSxDQUFDd0IsT0FBTyxDQUFDNDVELEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDMThELENBQUMsQ0FBQyxDQUFDLEdBQUc4SixDQUFDLENBQUNwRyxJQUFJLENBQUM4dkMsR0FBRyxDQUFDaDlCLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQyxDQUFDMEQsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQzlhLENBQUMsQ0FBQ3hXLENBQUMsQ0FBQyxDQUFDLENBQUNpSCxDQUFDLENBQUM2QyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEdBQUc4ckMsQ0FBQyxFQUFFLENBQUN6UCxDQUFDLENBQUMsSUFBSSxDQUFDZ1EsUUFBUSxDQUFDLE9BQU8sQ0FBQzNtQixDQUFDLENBQUMsSUFBSSxDQUFDaXJDLE9BQU8sQ0FBQzdtRCxDQUFDLENBQUM5SixDQUFDLENBQUNpSCxDQUFDLENBQUMsQ0FBQyxDQUFDbzFCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3NpQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdjhDLE1BQU0sQ0FBQ3RZLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2lGLEtBQUssQ0FBQ2pGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdytELEtBQUssQ0FBQyxRQUFRLENBQUM5NEMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdWlDLFFBQVEsQ0FBQyxNQUFNLENBQUMzbUIsQ0FBQyxDQUFDLElBQUksQ0FBQ2lyQyxPQUFPLENBQUM3bUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDazFDLE9BQU8sQ0FBQyxRQUFRLENBQUN0NUIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeXpELFdBQVcsRUFBRSxJQUFJLENBQUNDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQ1ksaUJBQWlCLENBQUN0MEQsQ0FBQyxDQUFDLElBQUksQ0FBQ3VpQyxRQUFRLENBQUMsUUFBUSxDQUFDM21CLENBQUMsQ0FBQyxJQUFJLENBQUNpckMsT0FBTyxDQUFDN21ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDN0UsS0FBSyxDQUFDLFFBQVEsQ0FBQ3lnQixDQUFDLENBQUMsQ0FBQyxPQUFPdGpCLFNBQVMsQ0FBQ2QsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDd0IsT0FBTyxDQUFDbUMsS0FBSyxDQUFDLElBQUksQ0FBQ3c1RCxlQUFlLENBQUMvNEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNDBDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdGIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ1AsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDcjhCLE1BQU0sQ0FBQyxRQUFRLENBQUN0WSxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQzFwQyxTQUFTLENBQUNkLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUN3QixPQUFPLENBQUNzZixNQUFNLENBQUN0WSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyMEQsZUFBZSxDQUFDeitELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3M2RCxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3RiLE9BQU8sQ0FBQyxJQUFJLENBQUNsMUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMxSCxTQUFTLENBQUNkLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQ3M5RCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDbDVDLENBQUMsQ0FBQ25pQixPQUFPLENBQUNuQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ3U4RCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxPQUFPLENBQUM5MEQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDN0UsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNvM0IsQ0FBQyxDQUFDLElBQUksQ0FBQ3Y1QixPQUFPLENBQUNzZixNQUFNLENBQUM1TCxDQUFDLENBQUNwVSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMwcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQy82QixNQUFNLENBQUN3cUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMnlCLGVBQWUsQ0FBQ2pvRCxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrVCxPQUFPLENBQUMsSUFBSSxDQUFDbFQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDd3VCLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQ2hzQixVQUFVLENBQUMsUUFBUSxDQUFDeGtDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRzFNLENBQUMsRUFBRSxJQUFJLENBQUNoSCxPQUFPLENBQUM0NUQsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHMThELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ21DLEtBQUssQ0FBQyxJQUFJLENBQUMyNUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzk3RCxPQUFPLENBQUNzZixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHcGlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ21DLEtBQUssQ0FBQyxJQUFJLENBQUMyNUQsT0FBTyxDQUFDLElBQUksQ0FBQzk3RCxPQUFPLENBQUNzZixNQUFNLENBQUM5Z0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ3NmLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDc0QsQ0FBQyxDQUFDbmlCLE9BQU8sQ0FBQyxJQUFJLENBQUNULE9BQU8sQ0FBQ3NmLE1BQU0sQ0FBQyxFQUFFLENBQUM1TCxDQUFDLENBQUMsSUFBSSxDQUFDMVQsT0FBTyxDQUFDc2YsTUFBTSxDQUFDOWdCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ3VyQyxNQUFNLENBQUMvaUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUM2ekQsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3Z2QixZQUFZLENBQUMseUNBQXlDLENBQUMsQ0FBQ1EsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUN3dUIsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDOUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN4M0QsT0FBTyxDQUFDNDVELEtBQUssRUFBRSxJQUFJLENBQUNtQyxhQUFhLENBQUM3K0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ3pELE9BQU8sQ0FBQy94QyxHQUFHLENBQUMsWUFBWSxHQUFHamhCLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUN5OUQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ25ELGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdGIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5ZSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUNBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNuRCxhQUFhLENBQUMsQ0FBQyxDQUFDaitCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDNmxCLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzJpQixPQUFPLENBQUMsSUFBSSxDQUFDM2lCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ29oQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQ0EsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0csZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3RELGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbUQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUNBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNyeEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxeEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3h2QixrQkFBa0IsQ0FBQyxRQUFRLENBQUN2b0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbW5CLE1BQU0sQ0FBQ25uQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMrb0IsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMvb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQys0QixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLzRCLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDbUMsS0FBSyxDQUFDLE9BQU95Z0IsQ0FBQyxDQUFDLElBQUksQ0FBQys0QyxlQUFlLENBQUMvNEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2s1QyxPQUFPLENBQUMsUUFBUSxDQUFDbDVDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2o2QixTQUFTLENBQUNkLE1BQU0sQ0FBQyxPQUFPd0ksQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ3NmLE1BQU0sQ0FBQ3NELENBQUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLElBQUksQ0FBQzIwRCxlQUFlLENBQUMzMEQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzYwRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMzK0QsQ0FBQyxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ3NmLE1BQU0sQ0FBQzdqQixLQUFLLENBQUMsQ0FBQyxDQUFDODlCLENBQUMsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDc0IsTUFBTSxDQUFDKzZCLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsQ0FBQ3I4QixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb2lDLGVBQWUsQ0FBQ3orRCxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPcjhCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN5K0QsZUFBZSxDQUFDLFFBQVEsQ0FBQy80QyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDcTRDLFNBQVMsQ0FBQyxDQUFDLEVBQUVyNEMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDcTRDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDcjRDLENBQUMsRUFBRSxJQUFJLENBQUN5NEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJcjBELENBQUMsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUNneEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoeEIsT0FBTyxDQUFDZ3hCLElBQUksQ0FBQyxDQUFDLENBQUM5ekIsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQ3E0QyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNqMEQsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMwRCxJQUFJLENBQUM4ckMsR0FBRyxDQUFDeHZDLENBQUMsQ0FBQyxFQUFFOEosQ0FBQyxFQUFFLENBQUN1eUIsQ0FBQyxFQUFFcjhCLENBQUMsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUN1bEIsVUFBVSxDQUFDZ04sQ0FBQyxDQUFDbytCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlsNEMsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUN3dUIsR0FBRyxDQUFDeG5CLENBQUMsQ0FBQyxJQUFJLENBQUNpMEQsU0FBUyxDQUFDLENBQUMsQ0FBQy85RCxDQUFDLENBQUMsSUFBSSxDQUFDOEMsT0FBTyxDQUFDZ3hCLElBQUksQ0FBQ3VJLENBQUMsQ0FBQzM0QixJQUFJLENBQUMwckIsS0FBSyxDQUFDLENBQUMxSixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDd3VCLEdBQUcsRUFBRSxDQUFDNUwsQ0FBQyxFQUFFMWxCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3N4QixHQUFHLENBQUNqQyxVQUFVLENBQUMzSixDQUFDLENBQUMrMEMsT0FBTyxDQUFDLElBQUksQ0FBQ3FFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlwNUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3E1QyxZQUFZLENBQUMsSUFBSSxDQUFDajhELE9BQU8sQ0FBQ2d4QixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUNoeEIsT0FBTyxDQUFDMHdDLEdBQUcsRUFBRSxDQUFDOXRCLENBQUMsQ0FBQ2hpQixJQUFJLENBQUM0dEIsR0FBRyxDQUFDNUwsQ0FBQyxDQUFDLElBQUksQ0FBQ3E1QyxZQUFZLENBQUMsSUFBSSxDQUFDajhELE9BQU8sQ0FBQzB3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM5dEIsQ0FBQyxDQUFDLENBQUNxNUMsWUFBWSxDQUFDLFFBQVEsQ0FBQ3I1QyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLEVBQUUsQ0FBQzRiLENBQUMsQ0FBQzFsQixDQUFDLENBQUM4SixDQUFDLENBQUNwTCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBR3NCLENBQUMsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUN4SSxNQUFNLENBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrOUQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNqN0QsT0FBTyxDQUFDMHdDLEdBQUcsQ0FBQyxDQUFDMnFCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDN3NDLEdBQUcsQ0FBQyxDQUFDdXRDLGFBQWEsQ0FBQyxRQUFRLENBQUNuNUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHQSxDQUFDLEVBQUUsSUFBSSxDQUFDZzNDLEtBQUssQ0FBQ3o3QyxHQUFHLENBQUMsQ0FBQzhOLEtBQUssQ0FBQyxFQUFFLENBQUM4RCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUduTixDQUFDLEVBQUUsSUFBSSxDQUFDZzNDLEtBQUssQ0FBQ3o3QyxHQUFHLENBQUMsQ0FBQ2tVLE1BQU0sQ0FBQyxFQUFFLENBQUNnZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ21sQixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJeHdELENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsSUFBSSxDQUFDbkUsT0FBTyxDQUFDNDVELEtBQUssQ0FBQ3h3QixDQUFDLENBQUMsSUFBSSxDQUFDcHBDLE9BQU8sQ0FBQ3lwQyxDQUFDLENBQUMsSUFBSSxDQUFDNTBCLENBQUMsQ0FBQyxJQUFJLENBQUM4bEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDdnhCLENBQUMsQ0FBQ3pVLE9BQU8sQ0FBQ29YLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4dkIsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzNMLE9BQU8sQ0FBQ2p4RCxJQUFJLENBQUMsUUFBUSxDQUFDczZCLENBQUMsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDdXNDLENBQUMsQ0FBQ25xQixNQUFNLENBQUNpYSxDQUFDLENBQUMsQ0FBQ2tRLENBQUMsQ0FBQ3d4QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3h4QixDQUFDLENBQUM0eEIsU0FBUyxDQUFDLENBQUMsQ0FBQzV4QixDQUFDLENBQUN3eEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsdkIsQ0FBQyxDQUFDLFlBQVksR0FBR3RDLENBQUMsQ0FBQzZ3QixXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDcDlELENBQUMsQ0FBQyxHQUFHLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDeEYsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDM0MsQ0FBQyxDQUFDelUsT0FBTyxDQUFDLENBQUM4VSxDQUFDLENBQUN6cEMsT0FBTyxDQUFDNDVELEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBR253QixDQUFDLENBQUM2d0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHL2dDLENBQUMsRUFBRWtRLENBQUMsQ0FBQ213QixLQUFLLENBQUN4OEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ2tiLElBQUksQ0FBQzd5QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUNrc0MsQ0FBQyxDQUFDelUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHNEUsQ0FBQyxFQUFFa1EsQ0FBQyxDQUFDbXdCLEtBQUssQ0FBQy9rRCxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUNvWCxLQUFLLENBQUMvdUIsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNxUCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUN5YSxRQUFRLENBQUNzWSxDQUFDLENBQUN6VSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc0RSxDQUFDLEVBQUVrUSxDQUFDLENBQUNtd0IsS0FBSyxDQUFDeDhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2SSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUN3OUIsTUFBTSxDQUFDbjFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUN6VSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUc0RSxDQUFDLEVBQUVrUSxDQUFDLENBQUNtd0IsS0FBSyxDQUFDL2tELENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ3dkLE1BQU0sQ0FBQ24xQixDQUFDLENBQUM4SixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ3FQLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3lhLFFBQVEsQ0FBQ3NZLENBQUMsQ0FBQ3pVLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDM3RCLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDcDNCLEtBQUssQ0FBQyxDQUFDLENBQUN1UixDQUFDLENBQUMsSUFBSSxDQUFDdW5ELFNBQVMsQ0FBQyxDQUFDLENBQUNqeUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3F5QixTQUFTLENBQUMsQ0FBQyxDQUFDbitELENBQUMsQ0FBQzhyQyxDQUFDLEdBQUd0MUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcTRCLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDdXVCLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUNwOUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUNnbUIsTUFBTSxDQUFDOUYsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDM0MsQ0FBQyxDQUFDelUsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHeHdCLENBQUMsRUFBRSxZQUFZLEdBQUcsSUFBSSxDQUFDbTJELFdBQVcsRUFBRSxJQUFJLENBQUNWLEtBQUssQ0FBQ3g4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdkksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDb1gsS0FBSyxDQUFDL3VCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUN6VSxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUd4d0IsQ0FBQyxFQUFFLFlBQVksR0FBRyxJQUFJLENBQUNtMkQsV0FBVyxFQUFFLElBQUksQ0FBQ1YsS0FBSyxDQUFDeDhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2SSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUNvWCxLQUFLLENBQUMsR0FBRyxDQUFDL3VCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQ2tzQyxDQUFDLENBQUN6VSxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUd4d0IsQ0FBQyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUNtMkQsV0FBVyxFQUFFLElBQUksQ0FBQ1YsS0FBSyxDQUFDeDhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2SSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUN3ZCxNQUFNLENBQUNuMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ3pVLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBR3h3QixDQUFDLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQ20yRCxXQUFXLEVBQUUsSUFBSSxDQUFDVixLQUFLLENBQUN4OEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ3dkLE1BQU0sQ0FBQyxHQUFHLENBQUNuMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ3pVLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3VtQyxhQUFhLENBQUMsQ0FBQ3RpQixPQUFPLENBQUMsUUFBUSxDQUFDNXhDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDeWUsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUM2YixJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUNsVixDQUFDLENBQUNpZ0IsT0FBTyxDQUFDLENBQUMsS0FBS3JFLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDbXZCLElBQUksQ0FBQyxLQUFLeHpCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDZ3ZCLEdBQUcsQ0FBQyxLQUFLcnpCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDc3ZCLE9BQU8sQ0FBQyxLQUFLM3pCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDcXZCLFNBQVMsQ0FBQyxLQUFLMXpCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDMnZCLEVBQUUsQ0FBQyxLQUFLaDBCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDd3ZCLEtBQUssQ0FBQyxLQUFLN3pCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDK3VCLElBQUksQ0FBQyxLQUFLcHpCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDb3ZCLElBQUksQ0FBQyxFQUFFLENBQUNydkMsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ20yQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUNBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMzdUIsU0FBUyxDQUFDbHBCLENBQUMsQ0FBQzViLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQ3ErRCxNQUFNLENBQUN2MEQsQ0FBQyxDQUFDN0MsQ0FBQyxDQUFDLENBQUNqSCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDOHJDLENBQUMsQ0FBQyxJQUFJLENBQUNocEMsT0FBTyxDQUFDZ3hCLElBQUksQ0FBQ3VJLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsSUFBSSxDQUFDbW9ELGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN2OEMsTUFBTSxDQUFDbmIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaEMsS0FBSyxDQUFDLENBQUMsQ0FBQzZFLENBQUMsQ0FBQ2lnQixPQUFPLENBQUMsQ0FBQyxLQUFLckUsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNtdkIsSUFBSSxDQUFDMWlDLENBQUMsQ0FBQyxJQUFJLENBQUN1bkQsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBS3I0QyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ2d2QixHQUFHLENBQUN2aUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJuRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLejRDLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDc3ZCLE9BQU8sQ0FBQzdpQyxDQUFDLENBQUMsSUFBSSxDQUFDaW9ELGVBQWUsQ0FBQ3BpQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4aEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNKLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNULFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLNTNDLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDcXZCLFNBQVMsQ0FBQzVpQyxDQUFDLENBQUMsSUFBSSxDQUFDaW9ELGVBQWUsQ0FBQ3BpQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4aEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNKLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNULFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLNTNDLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDMnZCLEVBQUUsQ0FBQyxLQUFLaDBCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDd3ZCLEtBQUssQ0FBQyxFQUFFLENBQUNsZCxDQUFDLEdBQUcsSUFBSSxDQUFDOGhDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDM25ELENBQUMsQ0FBQyxJQUFJLENBQUNpb0QsZUFBZSxDQUFDcGlDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLcG1CLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDK3VCLElBQUksQ0FBQyxLQUFLcHpCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDb3ZCLElBQUksQ0FBQyxFQUFFLENBQUM5YyxDQUFDLEdBQUcsSUFBSSxDQUFDMGhDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDdm5ELENBQUMsQ0FBQyxJQUFJLENBQUNpb0QsZUFBZSxDQUFDcGlDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3l5QixNQUFNLENBQUN6MEQsQ0FBQyxDQUFDN0MsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDLENBQUMsQ0FBQytyQyxLQUFLLENBQUMsUUFBUSxDQUFDejRDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDM0csTUFBTSxDQUFDLENBQUM2YixJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUN1K0MsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaUIsS0FBSyxDQUFDMTBELENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2cvQyxPQUFPLENBQUNsMUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb3VDLFlBQVksQ0FBQzFvQixDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1aUIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxhQUFhLENBQUM5bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2toQixLQUFLLENBQUMsQ0FBQzVzRCxPQUFPLENBQUMsUUFBUSxDQUFDbXNDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQzUxQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNyVSxPQUFPLENBQUMsQ0FBQzJxQixRQUFRLENBQUMsUUFBUSxDQUFDaWdDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3NSLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BSLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ25JLE1BQU0sQ0FBQyxNQUFNLENBQUNvSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNvUixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUNyUixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM5bkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDK25DLE1BQU0sQ0FBQyxVQUFVLENBQUM1UixLQUFLLENBQUMsS0FBSyxDQUFDN3BCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ2svQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUN0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsRUFBRSxDQUFDQyxXQUFXLENBQUMsRUFBRSxDQUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDdUssU0FBUyxDQUFDLFdBQVcsQ0FBQ2hqQixNQUFNLENBQUMsR0FBRyxDQUFDMEUsUUFBUSxDQUFDLElBQUksQ0FBQytrQixVQUFVLENBQUMsSUFBSSxDQUFDcGhCLE1BQU0sQ0FBQyxJQUFJLENBQUM0YSxVQUFVLENBQUMsSUFBSSxDQUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDdUcsT0FBTyxDQUFDLElBQUksQ0FBQzdsRCxNQUFNLENBQUMsSUFBSSxDQUFDN1csSUFBSSxDQUFDLElBQUksQ0FBQ3NPLEtBQUssQ0FBQyxJQUFJLENBQUNpUCxJQUFJLENBQUMsSUFBSSxDQUFDby9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLFFBQVEsQ0FBQzc1QyxDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxPQUFPMGxCLENBQUMsRUFBRTViLENBQUMsRUFBRUEsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxDQUFDODVDLFdBQVcsQ0FBQyxRQUFRLENBQUM5NUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxZQUFZLENBQUM1YSxJQUFJLENBQUM0YSxDQUFDLENBQUN6RSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQ25XLElBQUksQ0FBQzRhLENBQUMsQ0FBQ3pFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMrc0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMmpCLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvaUIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQzJKLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdFQsTUFBTSxDQUFDLElBQUksQ0FBQ2tILE9BQU8sQ0FBQ2xILE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK21CLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNkMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzEzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ20zQixVQUFVLENBQUMsUUFBUSxDQUFDNW9CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytpQyxNQUFNLENBQUNubkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHNGIsQ0FBQyxFQUFFLElBQUksQ0FBQ21wQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJL2tELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDc2tDLFlBQVksQ0FBQyxJQUFJLENBQUNqQyxPQUFPLENBQUN2K0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQzhYLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsSUFBSSxDQUFDbzZDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDcnlDLENBQUMsQ0FBQzhrQyxTQUFTLENBQUMsSUFBSSxDQUFDNndCLFFBQVEsQ0FBQzM4RCxPQUFPLENBQUNrakIsTUFBTSxDQUFDLElBQUksQ0FBQ3kzQixJQUFJLENBQUM3dkMsSUFBSSxDQUFDLElBQUksQ0FBQzZ4RCxRQUFRLENBQUMzOEQsT0FBTyxDQUFDa2pCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ3kzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RQLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2dlLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUl6bUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3kyQixLQUFLLENBQUM3NkMsTUFBTSxDQUFDLENBQUMsQ0FBQ29rQixDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN5MkIsS0FBSyxDQUFDejJCLENBQUMsQ0FBQyxDQUFDKzNCLElBQUksQ0FBQzk5QixVQUFVLENBQUMsSUFBSSxDQUFDcXRCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDMGYsYUFBYSxDQUFDLFFBQVEsQ0FBQzVpRCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxJQUFJLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUM0ekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzU4RCxPQUFPLENBQUMyRyxRQUFRLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQzNHLE9BQU8sQ0FBQ3RELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21nRSxhQUFhLENBQUM3MUQsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUM1YixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQytVLE9BQU8sQ0FBQyxDQUFDLENBQUNuVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPMmpCLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUM4c0IsQ0FBQyxDQUFDa0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHbEIsQ0FBQyxDQUFDLENBQUN6UCxDQUFDLENBQUMzVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzFHLElBQUksQ0FBQ2xWLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQzJvQyxDQUFDLENBQUNrQixVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUdsQixDQUFDLEVBQUUsQ0FBQ3pQLENBQUMsQ0FBQzNXLENBQUMsQ0FBQzViLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxDQUFDLENBQUNrNUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQ2tqQixNQUFNLEVBQUVobUIsQ0FBQyxFQUFFLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUNrakIsTUFBTSxDQUFDcVcsQ0FBQyxDQUFDLENBQUN6dUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDb0ssT0FBTyxDQUFDLENBQUMsQ0FBQ2pXLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRytILENBQUMsQ0FBQzNHLE1BQU0sRUFBRSxDQUFDcVQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3E3QyxXQUFXLENBQUN4MUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3VqQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM3UyxXQUFXLENBQUMsUUFBUSxDQUFDampELENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDLElBQUksQ0FBQ25FLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDKzhELGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM1UixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRixNQUFNLENBQUMsSUFBSSxDQUFDc0IsYUFBYSxDQUFDdmxELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dsRCx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVWLFlBQVksQ0FBQyxJQUFJLENBQUNtVSxNQUFNLENBQUNuVSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzNVLE1BQU0sQ0FBQyxJQUFJLENBQUM0c0IsV0FBVyxDQUFDNXNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUMsQ0FBQzkzQixHQUFHLENBQUMsSUFBSSxDQUFDODNCLE1BQU0sQ0FBQzkzQixHQUFHLENBQUMsSUFBSSxDQUFDb2pELE9BQU8sQ0FBQ3BqRCxHQUFHLENBQUMwbEIsSUFBSSxDQUFDLElBQUksQ0FBQ29TLE1BQU0sQ0FBQ3BTLElBQUksQ0FBQyxJQUFJLENBQUMwOUIsT0FBTyxDQUFDMTlCLElBQUksQ0FBQyxDQUFDbk4sQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxJQUFJLENBQUNvaUMsTUFBTSxDQUFDLENBQUMvYyxLQUFLLENBQUMsQ0FBQzJLLElBQUksQ0FBQy9vQixDQUFDLENBQUM0ZixLQUFLLENBQUMsSUFBSSxDQUFDdWIsTUFBTSxDQUFDcFMsSUFBSSxDQUFDMWxCLEdBQUcsQ0FBQ3JELENBQUMsQ0FBQzZmLEtBQUssQ0FBQyxJQUFJLENBQUNzYixNQUFNLENBQUM5M0IsR0FBRyxDQUFDLENBQUMrRCxNQUFNLENBQUMsSUFBSSxDQUFDcy9DLGdCQUFnQixDQUFDLENBQUMsQ0FBQ3hnRCxRQUFRLENBQUMsSUFBSSxDQUFDeWdELGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMUMsTUFBTSxDQUFDOXNDLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDd3VDLFdBQVcsQ0FBQyxJQUFJLENBQUMxQixNQUFNLENBQUM5c0MsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQzR1QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNDLGlCQUFpQixDQUFDaG1ELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2ltRCxhQUFhLENBQUNqbUQsQ0FBQyxDQUFDNGYsS0FBSyxDQUFDLElBQUksQ0FBQ3NtQyxhQUFhLENBQUNsbUQsQ0FBQyxDQUFDNmYsS0FBSyxDQUFDMWlCLENBQUMsQ0FBQzRtRCxRQUFRLEVBQUUsSUFBSSxDQUFDb0MsdUJBQXVCLENBQUNocEQsQ0FBQyxDQUFDNG1ELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ2lTLFdBQVcsQ0FBQyxDQUFDdG9ELElBQUksQ0FBQyxJQUFJLENBQUNxNkMsV0FBVyxDQUFDcjZDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0RyxNQUFNLENBQUMsSUFBSSxDQUFDMmdELFdBQVcsQ0FBQzNnRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNjhDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM4RCxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDQSxXQUFXLENBQUN4dkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwOUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDOTRELENBQUMsQ0FBQzJtRCxXQUFXLEVBQUUsSUFBSSxDQUFDc0MsZUFBZSxDQUFDLENBQUMsQ0FBQ2pwRCxDQUFDLENBQUN3K0MsTUFBTSxFQUFFLE1BQU0sR0FBR3grQyxDQUFDLENBQUN3K0MsTUFBTSxFQUFFLENBQUMzWixDQUFDLENBQUMsSUFBSSxDQUFDaHVDLFFBQVEsQ0FBQzhQLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUNveUQsWUFBWSxDQUFDbDBCLENBQUMsQ0FBQzdxQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM2cUIsQ0FBQyxDQUFDN3FCLEdBQUcsQ0FBQyxRQUFRLENBQUNoYSxDQUFDLENBQUN3K0MsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDd2EsZ0JBQWdCLENBQUN2NkMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDemUsQ0FBQyxDQUFDdytDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDaDRCLFFBQVEsQ0FBQ3FlLENBQUMsQ0FBQyxDQUFDLENBQUM3a0MsQ0FBQyxDQUFDcXJCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQ3k3QixNQUFNLENBQUM5c0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDaS9DLGNBQWMsQ0FBQyxJQUFJLENBQUNuUyxNQUFNLENBQUM5c0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOHNDLE1BQU0sQ0FBQzlzQyxHQUFHLENBQUMsU0FBUyxDQUFDaGEsQ0FBQyxDQUFDcXJCLE9BQU8sQ0FBQyxDQUFDLENBQUNyckIsQ0FBQyxDQUFDMHVDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQ29ZLE1BQU0sQ0FBQzlzQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNrL0MsYUFBYSxDQUFDLElBQUksQ0FBQ3BTLE1BQU0sQ0FBQzlzQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4c0MsTUFBTSxDQUFDOXNDLEdBQUcsQ0FBQyxRQUFRLENBQUNoYSxDQUFDLENBQUMwdUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDOTdDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDODdDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ2tKLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQ3FQLGNBQWMsQ0FBQyxJQUFJLENBQUN2WSxZQUFZLENBQUMzVSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb0gsUUFBUSxDQUFDLE9BQU8sQ0FBQ3ZpQyxDQUFDLENBQUMsSUFBSSxDQUFDNm1ELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5UCwwQkFBMEIsRUFBRSxJQUFJLENBQUM5USx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2p6QixDQUFDLENBQUMsR0FBRyxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUM2cEQsVUFBVSxDQUFDLytELE1BQU0sQ0FBQyxDQUFDLENBQUNrVixDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM2cEQsVUFBVSxDQUFDN3BELENBQUMsQ0FBQyxDQUFDNjFCLFFBQVEsQ0FBQyxVQUFVLENBQUN2aUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZtRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPanJDLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxFQUFFLENBQUM3cEMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUN4d0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDclosQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLEVBQUUsQ0FBQ3RvRCxDQUFDLENBQUNtcEQsYUFBYSxFQUFFMXFDLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDYyxjQUFjLENBQUMsSUFBSSxDQUFDdm1ELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3cyRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMXhCLFNBQVMsQ0FBQyxJQUFJLENBQUNtZixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUNaLFVBQVUsQ0FBQ3JqRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcWpELFVBQVUsQ0FBQyxRQUFRLENBQUNyakQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUMsSUFBSSxDQUFDbkUsT0FBTyxDQUFDb3BDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDbGQsUUFBUSxDQUFDLElBQUksQ0FBQzhnQyxpQkFBaUIsQ0FBQ2htRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2bEQsV0FBVyxDQUFDLElBQUksQ0FBQ2Usa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDNlAsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDQSxlQUFlLENBQUMsSUFBSSxDQUFDNVEsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDN3NELE9BQU8sQ0FBQ3VyRCxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUN6VSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDOTdDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDODdDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ2tKLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ3FQLGNBQWMsQ0FBQ2hsRCxHQUFHLENBQUMsSUFBSSxDQUFDeXNDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ2hYLFlBQVksQ0FBQzk0QixDQUFDLENBQUM2ZixLQUFLLENBQUMxaUIsQ0FBQyxDQUFDcW5ELGlCQUFpQixDQUFDLElBQUksQ0FBQzFVLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzVsQixTQUFTLENBQUNrWSxDQUFDLENBQUMsSUFBSSxDQUFDME4sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDNWxCLFNBQVMsQ0FBQy9zQixDQUFDLENBQUNzbkQsV0FBVyxDQUFDemtELENBQUMsQ0FBQzZmLEtBQUssQ0FBQyxJQUFJLENBQUN3b0MsY0FBYyxDQUFDaGxELEdBQUcsQ0FBQ2xHLENBQUMsQ0FBQ3FuRCxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQzFVLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzVsQixTQUFTLENBQUNrWSxDQUFDLENBQUMsSUFBSSxDQUFDME4sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDNWxCLFNBQVMsQ0FBQy9zQixDQUFDLENBQUNzbkQsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDNEQsY0FBYyxDQUFDdC9CLElBQUksQ0FBQyxJQUFJLENBQUMrbUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDMXFCLFdBQVcsQ0FBQ3BsQixDQUFDLENBQUM0ZixLQUFLLENBQUN6aUIsQ0FBQyxDQUFDcW5ELGlCQUFpQixDQUFDLElBQUksQ0FBQzFVLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzNsQixVQUFVLENBQUNpWSxDQUFDLENBQUMsSUFBSSxDQUFDME4sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDM2xCLFVBQVUsQ0FBQ2h0QixDQUFDLENBQUNzbkQsV0FBVyxDQUFDemtELENBQUMsQ0FBQzRmLEtBQUssQ0FBQyxJQUFJLENBQUN5b0MsY0FBYyxDQUFDdC9CLElBQUksQ0FBQzVyQixDQUFDLENBQUNxbkQsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMxVSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMzbEIsVUFBVSxDQUFDaVksQ0FBQyxDQUFDLElBQUksQ0FBQzBOLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzNsQixVQUFVLENBQUNodEIsQ0FBQyxDQUFDc25ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3prRCxDQUFDLENBQUM2ZixLQUFLLENBQUMsSUFBSSxDQUFDN3JCLFFBQVEsQ0FBQ2syQixTQUFTLENBQUMsQ0FBQyxDQUFDL3NCLENBQUMsQ0FBQ3FuRCxpQkFBaUIsQ0FBQ3BpQixDQUFDLENBQUMsSUFBSSxDQUFDcHVDLFFBQVEsQ0FBQ2syQixTQUFTLENBQUMsSUFBSSxDQUFDbDJCLFFBQVEsQ0FBQ2syQixTQUFTLENBQUMsQ0FBQyxDQUFDL3NCLENBQUMsQ0FBQ3NuRCxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUN0d0QsTUFBTSxDQUFDazNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3JyQixDQUFDLENBQUM2ZixLQUFLLENBQUMsSUFBSSxDQUFDN3JCLFFBQVEsQ0FBQ2syQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMvc0IsQ0FBQyxDQUFDcW5ELGlCQUFpQixFQUFFLENBQUNwaUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3B1QyxRQUFRLENBQUNrMkIsU0FBUyxDQUFDLElBQUksQ0FBQ2wyQixRQUFRLENBQUNrMkIsU0FBUyxDQUFDLENBQUMsQ0FBQy9zQixDQUFDLENBQUNzbkQsV0FBVyxDQUFDLENBQUMsQ0FBQ3prRCxDQUFDLENBQUM0ZixLQUFLLENBQUMsSUFBSSxDQUFDNXJCLFFBQVEsQ0FBQ20yQixVQUFVLENBQUMsQ0FBQyxDQUFDaHRCLENBQUMsQ0FBQ3FuRCxpQkFBaUIsQ0FBQ3BpQixDQUFDLENBQUMsSUFBSSxDQUFDcHVDLFFBQVEsQ0FBQ20yQixVQUFVLENBQUMsSUFBSSxDQUFDbjJCLFFBQVEsQ0FBQ20yQixVQUFVLENBQUMsQ0FBQyxDQUFDaHRCLENBQUMsQ0FBQ3NuRCxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUN0d0QsTUFBTSxDQUFDOHdCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ2psQixDQUFDLENBQUM0ZixLQUFLLENBQUMsSUFBSSxDQUFDNXJCLFFBQVEsQ0FBQ20yQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNodEIsQ0FBQyxDQUFDcW5ELGlCQUFpQixFQUFFLENBQUNwaUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3B1QyxRQUFRLENBQUNtMkIsVUFBVSxDQUFDLElBQUksQ0FBQ24yQixRQUFRLENBQUNtMkIsVUFBVSxDQUFDLENBQUMsQ0FBQ2h0QixDQUFDLENBQUNzbkQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDcmlCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRXhtQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsRUFBRSxDQUFDdG9ELENBQUMsQ0FBQ21wRCxhQUFhLEVBQUUxcUMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUNjLGNBQWMsQ0FBQyxJQUFJLENBQUN2bUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2bEQsV0FBVyxDQUFDLElBQUksQ0FBQ2Usa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDNXRELE9BQU8sQ0FBQzRxRCxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQzVxRCxPQUFPLENBQUM0cUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNodEMsS0FBSyxDQUFDOFIsSUFBSSxDQUFDLElBQUksQ0FBQzdELFFBQVEsQ0FBQzZELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMvdkIsT0FBTyxDQUFDNHFELElBQUksRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDNXFELE9BQU8sQ0FBQzRxRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUNLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ2h0QyxLQUFLLENBQUM1VCxHQUFHLENBQUMsSUFBSSxDQUFDNmhCLFFBQVEsQ0FBQzdoQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUNuTixDQUFDLENBQUMsSUFBSSxDQUFDbThDLEtBQUssQ0FBQzc2QyxNQUFNLENBQUMsQ0FBQyxDQUFDdEIsQ0FBQyxFQUFFLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUM4ZixLQUFLLENBQUNuOEMsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDb2hCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzNSLENBQUMsQ0FBQyxJQUFJLENBQUMwMEIsc0JBQXNCLENBQUNua0MsQ0FBQyxDQUFDLENBQUN5UCxDQUFDLEVBQUV6UCxDQUFDLENBQUNvakMsUUFBUSxHQUFHLElBQUksQ0FBQ0ksZ0JBQWdCLEVBQUVycEQsQ0FBQyxHQUFHLElBQUksQ0FBQ3E3QyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDTCxXQUFXLENBQUMsQ0FBQyxHQUFHMWxCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHdDFCLENBQUMsRUFBRSxDQUFDa1AsQ0FBQyxDQUFDcGYsUUFBUSxDQUFDLElBQUksQ0FBQ2tyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNoN0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDMVQsT0FBTyxDQUFDdEQsSUFBSSxDQUFDLENBQUNrbUIsQ0FBQyxDQUFDcGYsUUFBUSxDQUFDLElBQUksQ0FBQzZsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMzMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNraEMsU0FBUyxDQUFDLENBQUMsR0FBRzVMLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUNocEMsT0FBTyxDQUFDNjFELFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQzhILG9CQUFvQixDQUFDcGtDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUNxa0MsVUFBVSxDQUFDNTJELENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnUSxRQUFRLENBQUMsUUFBUSxDQUFDdmlDLENBQUMsQ0FBQyxJQUFJLENBQUM2bUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQ2dRLGtCQUFrQixDQUFDNzJELENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLEVBQUU3cEMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ2lqQixTQUFTLENBQUNaLElBQUksQ0FBQyxJQUFJLENBQUM3a0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdWlDLFFBQVEsQ0FBQyxNQUFNLENBQUN2aUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZtRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNFAsZUFBZSxDQUFDLElBQUksQ0FBQzVRLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdkMsVUFBVSxDQUFDLFFBQVEsQ0FBQ3RqRCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM4SixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM0YixDQUFDLENBQUM0bUIsRUFBRSxDQUFDaWpCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQ3pzRCxPQUFPLENBQUNzdEQsYUFBYSxFQUFFMXFDLENBQUMsQ0FBQzRtQixFQUFFLENBQUNpakIsU0FBUyxDQUFDcUIsSUFBSSxDQUFDLElBQUksQ0FBQzltRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNoSCxPQUFPLENBQUNvckQsTUFBTSxDQUFDLENBQUMsSUFBSTd4QixDQUFDLENBQUMsSUFBSSxDQUFDN2xCLENBQUMsQ0FBQyxJQUFJLENBQUNnN0MsV0FBVyxDQUFDdnNCLE1BQU0sQ0FBQyxDQUFDLENBQUM2RyxDQUFDLENBQUMsSUFBSSxDQUFDaHBDLE9BQU8sQ0FBQzRxRCxJQUFJLENBQUN6bUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNmtDLENBQUMsRUFBRSxHQUFHLEdBQUdBLENBQUMsRUFBRSxDQUFDN2tDLENBQUMsQ0FBQzRyQixJQUFJLENBQUNyYyxDQUFDLENBQUNxYyxJQUFJLENBQUMsSUFBSSxDQUFDb1MsTUFBTSxDQUFDL3pCLE1BQU0sQ0FBQzJoQixJQUFJLENBQUMsSUFBSSxDQUFDMDlCLE9BQU8sQ0FBQzE5QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUNtVCxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDbG9DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ21rQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytqQixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMvUixVQUFVLENBQUMsQ0FBQyxDQUFDNlgsQ0FBQyxFQUFFLEdBQUcsR0FBR0EsQ0FBQyxFQUFFLENBQUM3a0MsQ0FBQyxDQUFDa0csR0FBRyxDQUFDcUosQ0FBQyxDQUFDckosR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUMvekIsTUFBTSxDQUFDL0QsR0FBRyxDQUFDLElBQUksQ0FBQ29qRCxPQUFPLENBQUNwakQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDNjRCLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNsb0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDbWtCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK2pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ2hTLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMHJDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2g2QyxDQUFDLENBQUMsSUFBSSxDQUFDcW9DLE1BQU0sQ0FBQyxDQUFDdDJCLE9BQU8sQ0FBQ3h3QixDQUFDLENBQUMyeUIsUUFBUSxDQUFDLElBQUksQ0FBQzkyQixPQUFPLENBQUNvckQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDN3hCLENBQUMsQ0FBQzh6QixNQUFNLENBQUNybUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDcW1ELE1BQU0sQ0FBQ3JtRCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQytyRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDdVUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDOVQsUUFBUSxDQUFDLElBQUk5bUMsQ0FBQyxDQUFDa0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDemtCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQ0wsT0FBTyxDQUFDaXJELE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzhELFdBQVcsQ0FBQzV3QyxHQUFHLENBQUMsSUFBSSxDQUFDc3dDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQ25qQixZQUFZLENBQUMsSUFBSSxDQUFDeWpCLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQSxXQUFXLENBQUMxdkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSXJZLENBQUMsQ0FBQyxJQUFJLENBQUN1MkQsVUFBVSxDQUFDLytELE1BQU0sQ0FBQyxDQUFDLENBQUN3SSxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN1MkQsVUFBVSxDQUFDdjJELENBQUMsQ0FBQyxDQUFDdWlDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3NrQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwUCxVQUFVLENBQUN2MkQsQ0FBQyxDQUFDLENBQUM2bkQsY0FBYyxDQUFDbUgsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDdUgsVUFBVSxDQUFDdjJELENBQUMsQ0FBQyxDQUFDdWlDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3NrQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwUCxVQUFVLENBQUN2MkQsQ0FBQyxDQUFDLENBQUM2bkQsY0FBYyxDQUFDbUgsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDdEgsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMvd0QsVUFBVSxFQUFFLElBQUksQ0FBQyt3RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMvd0QsVUFBVSxDQUFDQyxXQUFXLENBQUMsSUFBSSxDQUFDOHdELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMxdUQsT0FBTyxDQUFDaXJELE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3R0RCxVQUFVLEVBQUUsSUFBSSxDQUFDc3RELE1BQU0sQ0FBQ3YwQyxNQUFNLENBQUMsQ0FBQyxDQUFDa00sQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ2tyRCxNQUFNLENBQUMsSUFBSSxDQUFDdVMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNrQixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNkLFdBQVcsQ0FBQ3RvRCxJQUFJLENBQUNrTyxDQUFDLENBQUMsSUFBSSxDQUFDbzZDLFdBQVcsQ0FBQ3RvRCxJQUFJLENBQUMsQ0FBQzhWLEtBQUssQ0FBQyxJQUFJLENBQUN1a0MsV0FBVyxDQUFDLENBQUNuc0MsQ0FBQyxDQUFDLElBQUksQ0FBQ282QyxXQUFXLENBQUM1dUQsTUFBTSxDQUFDLENBQUNpYyxPQUFPLENBQUMsSUFBSSxDQUFDMGtDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNyMUIsU0FBUyxDQUFDLFFBQVEsQ0FBQzF5QixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQzZnRSxpQkFBaUIsQ0FBQy8yRCxDQUFDLEVBQUVBLENBQUMsQ0FBQ2czRCxTQUFTLENBQUMsQ0FBQ3prQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT3Z5QixDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQytCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkvQixDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM1YixDQUFDLENBQUMyekMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDdHVDLElBQUksQ0FBQ3JGLENBQUMsQ0FBQ2kzRCxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM1MkQsS0FBSyxDQUFDTCxDQUFDLENBQUNrM0QsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUNoaEUsQ0FBQyxFQUFFcThCLENBQUMsQ0FBQzU5QixJQUFJLENBQUMsQ0FBQ3FMLENBQUMsQ0FBQ3lCLEdBQUcsRUFBRXZMLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ3lCLEdBQUcsRUFBRXpCLENBQUMsQ0FBQ2szRCxVQUFVLENBQUNoaEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQy82QixNQUFNLEVBQUV3SSxDQUFDLENBQUN5QixHQUFHLEVBQUU4d0IsQ0FBQyxDQUFDNTlCLElBQUksQ0FBQ3FMLENBQUMsQ0FBQ3lCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzh3QixDQUFDLENBQUNyeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUN6SixPQUFPLENBQUMsUUFBUSxDQUFDdUksQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUM2Z0UsaUJBQWlCLENBQUMvMkQsQ0FBQyxFQUFFQSxDQUFDLENBQUNnM0QsU0FBUyxDQUFDLENBQUN6a0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU92eUIsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUMrQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3M2QixDQUFDLENBQUM1OUIsSUFBSSxDQUFDaW5CLENBQUMsQ0FBQzViLENBQUMsQ0FBQzJ6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUN0dUMsSUFBSSxDQUFDckYsQ0FBQyxDQUFDaTNELFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMxa0MsQ0FBQyxDQUFDLENBQUNxMUIsZUFBZSxDQUFDLFFBQVEsQ0FBQ2hzQyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDLElBQUksQ0FBQzZsRCxXQUFXLENBQUM5OEIsSUFBSSxDQUFDN3lCLENBQUMsQ0FBQzhKLENBQUMsQ0FBQyxJQUFJLENBQUNrbkQsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDc04sQ0FBQyxDQUFDLElBQUksQ0FBQ3N6QixXQUFXLENBQUN4aUQsR0FBRyxDQUFDcUosQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxJQUFJLENBQUMyMEIsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDMlcsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ21OLElBQUksQ0FBQzVyQixDQUFDLENBQUM2a0MsQ0FBQyxDQUFDcG1CLENBQUMsQ0FBQ3FKLEtBQUssQ0FBQ21kLENBQUMsQ0FBQ3htQixDQUFDLENBQUN2WSxHQUFHLENBQUNvL0IsQ0FBQyxDQUFDTCxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDeVAsTUFBTSxDQUFDeGQsQ0FBQyxDQUFDLElBQUksQ0FBQ3N0QixNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUMwaEMsQ0FBQyxDQUFDLElBQUksQ0FBQzVKLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQzJLLElBQUksQ0FBQ3djLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDdnNDLE9BQU8sQ0FBQzRxRCxJQUFJLEVBQUVyeEIsQ0FBQyxDQUFDMWtCLENBQUMsQ0FBQ3UwQixDQUFDLEVBQUVLLENBQUMsQ0FBQ2xRLENBQUMsQ0FBQzFrQixDQUFDLENBQUM4M0IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMzc0MsT0FBTyxDQUFDNHFELElBQUksRUFBRTVqRCxDQUFDLENBQUMra0MsQ0FBQyxDQUFDL0MsQ0FBQyxFQUFFN2tDLENBQUMsQ0FBQzZDLENBQUMsQ0FBQytrQyxDQUFDLENBQUMxYSxDQUFDLENBQUNrYixDQUFDLEVBQUVJLENBQUMsQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMzc0MsT0FBTyxDQUFDNjFELFNBQVMsRUFBRSxJQUFJLENBQUM3MUQsT0FBTyxDQUFDbStELHlCQUF5QixFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUNuK0QsT0FBTyxDQUFDNjFELFNBQVMsRUFBRSxJQUFJLENBQUMzSCxpQkFBaUIsQ0FBQyxJQUFJLENBQUNrUSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDeDdDLENBQUMsQ0FBQyxJQUFJLENBQUN3N0MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQy9zQyxDQUFDLENBQUNycUIsQ0FBQyxDQUFDLElBQUksQ0FBQ2tuRCxpQkFBaUIsQ0FBQ2ppQyxLQUFLLENBQUMsQ0FBQyxDQUFDK2MsQ0FBQyxFQUFFN2tDLENBQUMsQ0FBQ2pILENBQUMsQ0FBQyxJQUFJLENBQUNneEQsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDLENBQUMsRUFBRXNOLENBQUMsQ0FBQyxJQUFJLENBQUMyMEIsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDLENBQUMsQ0FBQytXLENBQUMsRUFBRUssQ0FBQyxDQUFDLzFCLENBQUMsQ0FBQyxJQUFJLENBQUN3NkMsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDcXJDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQzk2QyxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQzRxRCxJQUFJLEVBQUUsSUFBSSxDQUFDNlIsV0FBVyxDQUFDLElBQUksQ0FBQzVQLFdBQVcsQ0FBQ3hpRCxHQUFHLENBQUMsSUFBSSxDQUFDODNCLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsQ0FBQ3VZLENBQUMsQ0FBQ3ZZLEdBQUcsQ0FBQ3VZLENBQUMsQ0FBQ3lQLE1BQU0sQ0FBQyxDQUFDM2UsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMxVCxPQUFPLENBQUM0cUQsSUFBSSxFQUFFLElBQUksQ0FBQzZSLFdBQVcsQ0FBQyxJQUFJLENBQUM1UCxXQUFXLENBQUM5OEIsSUFBSSxDQUFDLElBQUksQ0FBQ29TLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQzJLLElBQUksQ0FBQ25OLENBQUMsQ0FBQ21OLElBQUksQ0FBQ25OLENBQUMsQ0FBQ3FKLEtBQUssQ0FBQyxDQUFDK2MsQ0FBQyxDQUFDelAsQ0FBQyxFQUFFN2xCLENBQUMsQ0FBQyxPQUFPczFCLENBQUMsQ0FBQyxDQUFDaGlDLENBQUMsQ0FBQyxJQUFJLENBQUNxM0QseUJBQXlCLENBQUMsQ0FBQyxDQUFDbmhFLENBQUMsQ0FBQyxJQUFJLENBQUNvaEUsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsUUFBUSxDQUFDLE9BQU8sR0FBR2xoRSxDQUFDLEVBQUUsTUFBTSxHQUFHOEosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyMkQsb0JBQW9CLENBQUMsUUFBUSxDQUFDLzZDLENBQUMsQ0FBQyxDQUFDLElBQUk1YixDQUFDLENBQUMsSUFBSSxDQUFDeTFELFdBQVcsQ0FBQyxJQUFJLENBQUM1UCxXQUFXLENBQUN4aUQsR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUN1WSxDQUFDLENBQUN2WSxHQUFHLENBQUN1WSxDQUFDLENBQUN5UCxNQUFNLENBQUMsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDeVAsTUFBTSxDQUFDLENBQUNuMUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3UvRCxXQUFXLENBQUMsSUFBSSxDQUFDNVAsV0FBVyxDQUFDOThCLElBQUksQ0FBQyxJQUFJLENBQUNvUyxNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLENBQUNuTixDQUFDLENBQUNtTixJQUFJLENBQUNuTixDQUFDLENBQUNxSixLQUFLLENBQUMsQ0FBQyxDQUFDckosQ0FBQyxDQUFDcUosS0FBSyxDQUFDLENBQUNzTixDQUFDLENBQUMsSUFBSSxDQUFDOGtDLHlCQUF5QixDQUFDLENBQUMsQ0FBQzNxRCxDQUFDLENBQUMsSUFBSSxDQUFDNHFELDJCQUEyQixDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ0YsUUFBUSxFQUFFMXFELENBQUMsQ0FBQyxPQUFPLEdBQUdBLENBQUMsRUFBRXhXLENBQUMsRUFBRSxNQUFNLEdBQUd3VyxDQUFDLEVBQUUsQ0FBQ3hXLENBQUMsQ0FBQ3E4QixDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUdBLENBQUMsRUFBRXZ5QixDQUFDLEVBQUUsSUFBSSxHQUFHdXlCLENBQUMsRUFBRSxDQUFDdnlCLENBQUMsQ0FBQyxDQUFDLENBQUNxM0QseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJejdDLENBQUMsQ0FBQyxJQUFJLENBQUNpcUMsV0FBVyxDQUFDeGlELEdBQUcsQ0FBQyxJQUFJLENBQUNvekQsZUFBZSxDQUFDcHpELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBR3VZLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDMDdDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTE3QyxDQUFDLENBQUMsSUFBSSxDQUFDaXFDLFdBQVcsQ0FBQzk4QixJQUFJLENBQUMsSUFBSSxDQUFDMHRDLGVBQWUsQ0FBQzF0QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUduTixDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzZ5QixPQUFPLENBQUMsUUFBUSxDQUFDN3lCLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDaTZDLGFBQWEsQ0FBQ2o2QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtcEMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ1osZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDb1QsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTM3QyxDQUFDLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQyxPQUFPNGlCLENBQUMsQ0FBQ3M1QyxXQUFXLENBQUMzOUQsV0FBVyxHQUFHMEgsTUFBTSxDQUFDLENBQUMyYyxDQUFDLENBQUNzNUMsV0FBVyxDQUFDLENBQUN0NUMsQ0FBQyxDQUFDczVDLFdBQVcsQ0FBQyxDQUFDNkIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLzJELENBQUMsQ0FBQyxDQUFDLFNBQVM5SixDQUFDLENBQUMsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ3p0QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTQ5QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzdrQyxDQUFDLENBQUNpbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1MEIsQ0FBQyxDQUFDLElBQUksQ0FBQzBwRCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzFwRCxDQUFDLEVBQUU3TixDQUFDLENBQUMsR0FBRyxDQUFDdXlCLENBQUMsQ0FBQzFrQixDQUFDLENBQUNyVyxNQUFNLENBQUMsQ0FBQyxDQUFDKzZCLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQ3lQLENBQUMsQ0FBQ3BtQixDQUFDLENBQUMvTixDQUFDLENBQUMwa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDditCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMFksQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3hxQyxNQUFNLENBQUMsQ0FBQyxDQUFDa1YsQ0FBQyxFQUFFLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUN2UCxDQUFDLENBQUN5ZSxDQUFDLENBQUMxRyxJQUFJLENBQUM4c0IsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3kyQixjQUFjLENBQUMsQ0FBQ2htQyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDbkUsT0FBTyxDQUFDMkcsUUFBUSxFQUFFOGlDLENBQUMsQ0FBQzl0QyxJQUFJLENBQUMsQ0FBQ2luQixDQUFDLENBQUN2bUIsVUFBVSxDQUFDOEgsQ0FBQyxDQUFDbkUsT0FBTyxDQUFDcTVDLEtBQUssQ0FBQyxDQUFDbDFDLENBQUMsQ0FBQ25FLE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUNsOUMsSUFBSSxDQUFDZ0ksQ0FBQyxDQUFDa2xDLE9BQU8sQ0FBQyxDQUFDem1CLENBQUMsQ0FBQ3plLENBQUMsQ0FBQ25FLE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUNsMUMsQ0FBQyxDQUFDa2xDLE9BQU8sQ0FBQyxDQUFDcjFCLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDQSxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQzdQLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDc2xDLENBQUMsQ0FBQzl0QyxJQUFJLENBQUMsQ0FBQ2luQixDQUFDLENBQUN2bUIsVUFBVSxDQUFDLElBQUksQ0FBQzJELE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUNyNUMsT0FBTyxDQUFDcTVDLEtBQUssQ0FBQ2w5QyxJQUFJLENBQUMsSUFBSSxDQUFDa3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQ3JwQyxPQUFPLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUMyNkMsSUFBSSxDQUFDLElBQUksQ0FBQ29VLFdBQVcsQ0FBQyxDQUFDLENBQUNuc0MsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUNxNUMsS0FBSyxDQUFDLElBQUksQ0FBQ2hRLE9BQU8sQ0FBQyxDQUFDcjFCLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDQSxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDdWxCLENBQUMsQ0FBQ2tRLENBQUMsQ0FBQ2pyQyxNQUFNLENBQUMsQ0FBQyxDQUFDKzZCLENBQUMsRUFBRSxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDa1EsQ0FBQyxDQUFDbFEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0NkIsSUFBSSxDQUFDL0IsQ0FBQyxDQUFDLENBQUMsT0FBTzBsQixDQUFDLENBQUN3bUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzB6Qix3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk5MUQsQ0FBQyxDQUFDLElBQUksQ0FBQytuRCxXQUFXLENBQUNqa0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUNvL0IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ21QLEtBQUssQ0FBQ3oyQixDQUFDLENBQUMvZ0IsSUFBSSxDQUFDLElBQUksQ0FBQ3czQyxLQUFLLENBQUMsUUFBUSxDQUFDejJCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJMWxCLENBQUMsQ0FBQyxDQUFDLENBQUM4SixDQUFDLENBQUN4SSxNQUFNLENBQUN0QixDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzhKLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxHQUFHMGxCLENBQUMsQ0FBQyszQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa2lCLGFBQWEsQ0FBQyxRQUFRLENBQUM3MUQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcXlDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNra0IsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSXJnRSxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ0ssQ0FBQyxDQUFDNTBCLENBQUMsQ0FBQ2szQixDQUFDLENBQUMsSUFBSSxDQUFDc04sS0FBSyxDQUFDOU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzNwQixDQUFDLENBQUN2bUIsVUFBVSxDQUFDLElBQUksQ0FBQzJELE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUNyNUMsT0FBTyxDQUFDcTVDLEtBQUssQ0FBQ2w5QyxJQUFJLENBQUMsSUFBSSxDQUFDa3RDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3JpQyxDQUFDLENBQUMsQ0FBQzJ6QyxJQUFJLENBQUMsSUFBSSxDQUFDb1UsV0FBVyxDQUFDLENBQUMsQ0FBQ25zQyxDQUFDLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUMsSUFBSSxDQUFDaFEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ3NELENBQUMsQ0FBQyxJQUFJLENBQUM0eEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM1eEIsQ0FBQyxFQUFFLElBQUksQ0FBQ3Q0QixLQUFLLENBQUMsR0FBRyxDQUFDblgsQ0FBQyxDQUFDeXZDLENBQUMsQ0FBQ251QyxNQUFNLENBQUMsQ0FBQyxDQUFDdEIsQ0FBQyxFQUFFLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDd1csQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDK3BCLENBQUMsQ0FBQ3p2QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3UrQixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDbFYsTUFBTSxDQUFDLENBQUMsQ0FBQys2QixDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ3lQLENBQUMsQ0FBQ3BtQixDQUFDLENBQUMxRyxJQUFJLENBQUN4SSxDQUFDLENBQUM2bEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNFEsY0FBYyxDQUFDLENBQUNuQixDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDaHBDLE9BQU8sQ0FBQzJHLFFBQVEsRUFBRSxDQUFDNGxDLENBQUMsQ0FBQzV3QyxJQUFJLENBQUMsQ0FBQ2luQixDQUFDLENBQUN2bUIsVUFBVSxDQUFDMnNDLENBQUMsQ0FBQ2hwQyxPQUFPLENBQUNxNUMsS0FBSyxDQUFDLENBQUNyUSxDQUFDLENBQUNocEMsT0FBTyxDQUFDcTVDLEtBQUssQ0FBQ2w5QyxJQUFJLENBQUM2c0MsQ0FBQyxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNyaUMsQ0FBQyxDQUFDLENBQUMyekMsSUFBSSxDQUFDLElBQUksQ0FBQ29VLFdBQVcsQ0FBQyxDQUFDLENBQUNuc0MsQ0FBQyxDQUFDb21CLENBQUMsQ0FBQ2hwQyxPQUFPLENBQUNxNUMsS0FBSyxDQUFDclEsQ0FBQyxDQUFDSyxPQUFPLENBQUMsQ0FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1MEIsVUFBVSxDQUFDNWhFLElBQUksQ0FBQ3F0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzlyQyxDQUFDLENBQUNxdkMsQ0FBQyxDQUFDL3RDLE1BQU0sQ0FBQyxDQUFDLENBQUN0QixDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUNpSCxDQUFDLENBQUNvb0MsQ0FBQyxDQUFDcnZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ21ELENBQUMsQ0FBQ3J2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDMWtCLENBQUMsQ0FBQ3UwQixDQUFDLENBQUM1cUMsTUFBTSxDQUFDcVcsQ0FBQyxDQUFDMGtCLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNrUSxDQUFDLENBQUM3bUIsQ0FBQyxDQUFDd21CLENBQUMsQ0FBQzdQLENBQUMsQ0FBQyxDQUFDLENBQUNrUSxDQUFDLENBQUN2dEIsSUFBSSxDQUFDLElBQUksQ0FBQ2d1QixVQUFVLENBQUMsT0FBTyxDQUFDL2xDLENBQUMsQ0FBQyxDQUFDNG5DLENBQUMsQ0FBQ3B3QyxJQUFJLENBQUMsQ0FBQ2cvQyxJQUFJLENBQUNsUixDQUFDLENBQUNrekIsUUFBUSxDQUFDeDRELENBQUMsQ0FBQzhuQixLQUFLLENBQUMsQ0FBQyxDQUFDb0csTUFBTSxDQUFDLENBQUMsQ0FBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMxbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhnRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUNua0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbzNELFFBQVEsQ0FBQyxJQUFJLENBQUMva0IsS0FBSyxDQUFDNzZDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDd0IsT0FBTyxDQUFDNHFELElBQUksRUFBRSxJQUFJLENBQUM4UixXQUFXLENBQUMsSUFBSSxDQUFDcmpCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3NCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3pYLFlBQVksRUFBRSxJQUFJLENBQUMrbkIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDOW9CLE1BQU0sQ0FBQy96QixNQUFNLENBQUMsSUFBSSxDQUFDcy9DLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUl4d0QsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQzlyQyxDQUFDLENBQUMsSUFBSSxDQUFDbThDLEtBQUssQ0FBQzc2QyxNQUFNLENBQUMsQ0FBQyxDQUFDdEIsQ0FBQyxFQUFFLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUNxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQzhmLEtBQUssQ0FBQ244QyxDQUFDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUNvakMsUUFBUSxHQUFHLElBQUksQ0FBQ0ksZ0JBQWdCLEVBQUUsSUFBSSxDQUFDQSxnQkFBZ0IsRUFBRXhqQyxDQUFDLENBQUNvaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ29VLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDcjdDLENBQUMsQ0FBQyxJQUFJLENBQUMxVCxPQUFPLENBQUN3K0QsZ0JBQWdCLENBQUM1N0MsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUN3K0QsZ0JBQWdCLENBQUNqbEMsQ0FBQyxDQUFDb2hCLElBQUksQ0FBQyxDQUFDcGhCLENBQUMsQ0FBQ29oQixJQUFJLENBQUMzekMsQ0FBQyxFQUFFLENBQUN1eUIsQ0FBQyxDQUFDdE4sS0FBSyxDQUFDdlksQ0FBQyxDQUFDODRCLFVBQVUsQ0FBQyxDQUFDLENBQUNqVCxDQUFDLENBQUNsSCxNQUFNLENBQUMzZSxDQUFDLENBQUMrNEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDekQsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQ3l1QixNQUFNLENBQUMsQ0FBQyxDQUFDNUksQ0FBQyxDQUFDeEosSUFBSSxDQUFDaVosQ0FBQyxDQUFDalosSUFBSSxDQUFDd0osQ0FBQyxDQUFDbHZCLEdBQUcsQ0FBQzIrQixDQUFDLENBQUMzK0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ3JLLE9BQU8sQ0FBQ3krRCxNQUFNLEVBQUUsSUFBSSxDQUFDeitELE9BQU8sQ0FBQ3krRCxNQUFNLENBQUNDLGlCQUFpQixDQUFDLElBQUksQ0FBQzErRCxPQUFPLENBQUN5K0QsTUFBTSxDQUFDQyxpQkFBaUIsQ0FBQ3ZpRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUNlLENBQUMsQ0FBQyxJQUFJLENBQUNxZ0UsVUFBVSxDQUFDLytELE1BQU0sQ0FBQyxDQUFDLENBQUN0QixDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQzhyQyxDQUFDLENBQUMsSUFBSSxDQUFDdTBCLFVBQVUsQ0FBQ3JnRSxDQUFDLENBQUMsQ0FBQ21zQyxPQUFPLENBQUNsSCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ283QixVQUFVLENBQUNyZ0UsQ0FBQyxDQUFDLENBQUMyeEQsY0FBYyxDQUFDOStCLElBQUksQ0FBQ2laLENBQUMsQ0FBQ2paLElBQUksQ0FBQyxJQUFJLENBQUN3dEMsVUFBVSxDQUFDcmdFLENBQUMsQ0FBQyxDQUFDMnhELGNBQWMsQ0FBQ3hrRCxHQUFHLENBQUMyK0IsQ0FBQyxDQUFDMytCLEdBQUcsQ0FBQyxJQUFJLENBQUNrekQsVUFBVSxDQUFDcmdFLENBQUMsQ0FBQyxDQUFDMnhELGNBQWMsQ0FBQzVpQyxLQUFLLENBQUMsSUFBSSxDQUFDc3hDLFVBQVUsQ0FBQ3JnRSxDQUFDLENBQUMsQ0FBQ21zQyxPQUFPLENBQUNtRCxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyt3QixVQUFVLENBQUNyZ0UsQ0FBQyxDQUFDLENBQUMyeEQsY0FBYyxDQUFDeDhCLE1BQU0sQ0FBQyxJQUFJLENBQUNrckMsVUFBVSxDQUFDcmdFLENBQUMsQ0FBQyxDQUFDbXNDLE9BQU8sQ0FBQ29ELFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQ3d3QixrQkFBa0IsQ0FBQyxRQUFRLENBQUNqMkQsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUNoSCxPQUFPLENBQUN1NUIsQ0FBQyxDQUFDbTFCLFdBQVcsRUFBRW4xQixDQUFDLENBQUNtMUIsV0FBVyxDQUFDbndELFdBQVcsR0FBRzBILE1BQU0sRUFBRSxDQUFDL0ksQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ20xQixXQUFXLENBQUNuMUIsQ0FBQyxDQUFDbTFCLFdBQVcsQ0FBQyxDQUFDcmxCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk5UCxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDK25ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ25vRCxRQUFRLENBQUNwRSxXQUFXLENBQUMsQ0FBQyxDQUFDa1IsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLEdBQUcsQ0FBQzJXLENBQUMsQ0FBQyxHQUFHLENBQUN2eUIsQ0FBQyxDQUFDaE0sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT2dNLENBQUMsQ0FBQzhrQyxTQUFTLENBQUNwNEIsQ0FBQyxDQUFDLHlCQUF5QixDQUFDeFcsQ0FBQyxFQUFFOEosQ0FBQyxDQUFDK25ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZrRCxTQUFTLENBQUMsQ0FBQzhnQyxZQUFZLENBQUM1M0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxHQUFHNmxCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMyM0Qsb0JBQW9CLENBQUMzM0QsQ0FBQyxDQUFDK25ELFdBQVcsQ0FBQ2prRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUN0TCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNvakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQzViLENBQUMsQ0FBQ2hNLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMnZCLFFBQVEsQ0FBQ2pYLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHNmxCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMyM0Qsb0JBQW9CLENBQUMzM0QsQ0FBQyxDQUFDK25ELFdBQVcsQ0FBQ3I3QyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc2bEIsQ0FBQyxFQUFFN2xCLENBQUMsQ0FBQ3JILElBQUksQ0FBQyxLQUFLLENBQUNyRixDQUFDLENBQUMrbkQsV0FBVyxDQUFDMWlELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDblAsQ0FBQyxFQUFFd1csQ0FBQyxDQUFDeUssR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQ3pLLENBQUMsQ0FBQyxDQUFDOG9ELE1BQU0sQ0FBQyxRQUFRLENBQUM1NUMsQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeFcsQ0FBQyxFQUFFcThCLENBQUMsQ0FBQzZpQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMxb0QsQ0FBQyxDQUFDMmUsTUFBTSxDQUFDLENBQUMsRUFBRTNlLENBQUMsQ0FBQzJlLE1BQU0sQ0FBQ3JyQixDQUFDLENBQUMrbkQsV0FBVyxDQUFDaGIsV0FBVyxDQUFDLENBQUMsQ0FBQ2pkLFFBQVEsQ0FBQzl2QixDQUFDLENBQUMrbkQsV0FBVyxDQUFDNXdDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMyWSxRQUFRLENBQUM5dkIsQ0FBQyxDQUFDK25ELFdBQVcsQ0FBQzV3QyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUN6SyxDQUFDLENBQUN1WSxLQUFLLENBQUMsQ0FBQyxFQUFFdlksQ0FBQyxDQUFDdVksS0FBSyxDQUFDamxCLENBQUMsQ0FBQytuRCxXQUFXLENBQUMvYSxVQUFVLENBQUMsQ0FBQyxDQUFDbGQsUUFBUSxDQUFDOXZCLENBQUMsQ0FBQytuRCxXQUFXLENBQUM1d0MsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzJZLFFBQVEsQ0FBQzl2QixDQUFDLENBQUMrbkQsV0FBVyxDQUFDNXdDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDblgsQ0FBQyxDQUFDMG5ELFdBQVcsQ0FBQzlyQyxDQUFDLENBQUMyVyxDQUFDLENBQUNtMUIsV0FBVyxDQUFDcmxCLE9BQU8sQ0FBQ2x0QyxJQUFJLENBQUM2SyxDQUFDLENBQUNxaUMsT0FBTyxDQUFDcmlDLENBQUMsQ0FBQytuRCxXQUFXLENBQUMsQ0FBQyxDQUFDL25ELENBQUMsQ0FBQytuRCxXQUFXLENBQUN2a0MsS0FBSyxDQUFDeGpCLENBQUMsQ0FBQzBuRCxXQUFXLENBQUMsQ0FBQ24xQixDQUFDLENBQUNtMUIsV0FBVyxDQUFDOE4sTUFBTSxDQUFDeDFELENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMG5ELFdBQVcsQ0FBQyxDQUFDLENBQUNpUSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMzM0QsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsSUFBSXE4QixDQUFDLENBQUMsSUFBSSxDQUFDdnlCLENBQUMsQ0FBQ3dOLFFBQVEsQ0FBQyxDQUFDLENBQUN2VixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzJqQixDQUFDLENBQUMsaUJBQWlCLENBQUMyVyxDQUFDLENBQUN2K0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNxUixJQUFJLENBQUMsU0FBUyxDQUFDdVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDdlcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDc2UsUUFBUSxDQUFDenRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMmdFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQzcyRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUNLLENBQUMsQ0FBQzUwQixDQUFDLENBQUNrM0IsQ0FBQyxDQUFDUSxDQUFDLENBQUNJLENBQUMsQ0FBQyxJQUFJLENBQUN0YixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQ24wQixDQUFDLENBQUMsSUFBSSxDQUFDcWdFLFVBQVUsQ0FBQy8rRCxNQUFNLENBQUMsQ0FBQyxDQUFDdEIsQ0FBQyxFQUFFLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDcGYsUUFBUSxDQUFDLElBQUksQ0FBQ3VyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDd08sVUFBVSxDQUFDcmdFLENBQUMsQ0FBQyxDQUFDbXNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUN1bEIsZUFBZSxDQUFDLElBQUksQ0FBQzJPLFVBQVUsQ0FBQ3JnRSxDQUFDLENBQUMsQ0FBQzJ4RCxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2xpQixDQUFDLEVBQUUvcEIsQ0FBQyxDQUFDcGYsUUFBUSxDQUFDLElBQUksQ0FBQys1RCxVQUFVLENBQUNyZ0UsQ0FBQyxDQUFDLENBQUNtc0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDc0QsQ0FBQyxDQUFDdEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDc0QsQ0FBQyxDQUFDLElBQUksQ0FBQzR3QixVQUFVLENBQUNyZ0UsQ0FBQyxDQUFDLENBQUNtMEIsQ0FBQyxDQUFDbjBCLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQ3FnRSxVQUFVLENBQUNyZ0UsQ0FBQyxDQUFDLENBQUMyeEQsY0FBYyxDQUFDbUgsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDdUgsVUFBVSxDQUFDcmdFLENBQUMsQ0FBQyxDQUFDcXNDLFFBQVEsQ0FBQyxLQUFLLENBQUN2aUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZtRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwUCxVQUFVLENBQUNyZ0UsQ0FBQyxDQUFDLENBQUMyeEQsY0FBYyxDQUFDbUgsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3JwQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM0d0IsVUFBVSxDQUFDLytELE1BQU0sQ0FBQyxJQUFJLENBQUMrK0QsVUFBVSxDQUFDbHNDLENBQUMsQ0FBQyxDQUFDdzlCLGNBQWMsQ0FBQ21ILElBQUksRUFBRSxDQUFDLElBQUksQ0FBQ3VILFVBQVUsQ0FBQ2xzQyxDQUFDLENBQUMsQ0FBQ2tZLFFBQVEsQ0FBQyxNQUFNLENBQUN2aUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZtRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwUCxVQUFVLENBQUNsc0MsQ0FBQyxDQUFDLENBQUN3OUIsY0FBYyxDQUFDbUgsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUN0aUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3MxQixDQUFDLENBQUMsSUFBSSxDQUFDK0MsQ0FBQyxDQUFDWSxDQUFDLENBQUN5eEIsUUFBUSxFQUFFLElBQUksQ0FBQzFCLFdBQVcsQ0FBQyxJQUFJLENBQUMzTixXQUFXLENBQUMsQ0FBQzVxRCxDQUFDLENBQUM0bkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMzQyxDQUFDLENBQUMyQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQ1EsQ0FBQyxDQUFDUixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQ3hTLENBQUMsQ0FBQyxJQUFJLENBQUM4ZixLQUFLLENBQUM3NkMsTUFBTSxDQUFDLENBQUMsQ0FBQys2QixDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQzNXLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQyxJQUFJLENBQUMrNUQsVUFBVSxDQUFDbHNDLENBQUMsQ0FBQyxDQUFDZ1ksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2dRLEtBQUssQ0FBQzlmLENBQUMsQ0FBQyxDQUFDb2hCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3RCLEtBQUssQ0FBQzlmLENBQUMsQ0FBQyxDQUFDb2hCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNvVSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3RsQixDQUFDLENBQUMsSUFBSSxDQUFDNFAsS0FBSyxDQUFDOWYsQ0FBQyxDQUFDLENBQUNvaEIsSUFBSSxDQUFDeFksTUFBTSxDQUFDLENBQUMsQ0FBQ2grQixDQUFDLENBQUMsQ0FBQzBRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdOLENBQUMsQ0FBQ3VsQyxDQUFDLENBQUMsQ0FBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUM0UCxLQUFLLENBQUM5ZixDQUFDLENBQUMsQ0FBQzZQLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDdjBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbkIsQ0FBQyxDQUFDOVMsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQzFsQyxDQUFDLENBQUN1bEMsQ0FBQyxDQUFDLENBQUM5QyxDQUFDLENBQUMsRUFBRSxDQUFDLzFCLENBQUMsQ0FBQzlTLElBQUksQ0FBQzhyQyxHQUFHLENBQUMxbEMsQ0FBQyxDQUFDdWxDLENBQUMsQ0FBQyxDQUFDOUMsQ0FBQyxDQUFDLENBQUNULENBQUMsQ0FBQyxJQUFJLENBQUNxUSxLQUFLLENBQUM5ZixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxYixTQUFTLENBQUMvL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDbTBCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2hwQyxPQUFPLENBQUNtOEQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDWSxnQkFBZ0IsR0FBRyxJQUFJLENBQUNRLFVBQVUsQ0FBQ2xzQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzByQyxnQkFBZ0IsQ0FBQ2xPLGNBQWMsQ0FBQ21ILElBQUksRUFBRSxDQUFDLElBQUksQ0FBQ3VILFVBQVUsQ0FBQ2xzQyxDQUFDLENBQUMsQ0FBQ2tZLFFBQVEsQ0FBQyxNQUFNLENBQUN2aUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZtRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa1AsZ0JBQWdCLENBQUNsTyxjQUFjLENBQUNtSCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUNodEIsQ0FBQyxDQUFDLElBQUksQ0FBQzQwQixVQUFVLENBQUM1MkQsQ0FBQyxDQUFDZ2lDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM0MEIsVUFBVSxDQUFDNTJELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDdTJELFVBQVUsQ0FBQ2xzQyxDQUFDLENBQUMsQ0FBQ2dZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0UsUUFBUSxDQUFDLFFBQVEsQ0FBQ3ZpQyxDQUFDLENBQUMsSUFBSSxDQUFDNm1ELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwUCxVQUFVLENBQUNsc0MsQ0FBQyxDQUFDLENBQUNrWSxRQUFRLENBQUMsUUFBUSxDQUFDdmlDLENBQUMsQ0FBQyxJQUFJLENBQUM2bUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDa1AsZ0JBQWdCLENBQUMsSUFBSSxDQUFDUSxVQUFVLENBQUNsc0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcnhCLE9BQU8sQ0FBQzB1RCxXQUFXLENBQUM4TixNQUFNLENBQUMsSUFBSSxDQUFDTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNyTyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM2TyxVQUFVLENBQUNsc0MsQ0FBQyxDQUFDLENBQUNrWSxRQUFRLENBQUMsTUFBTSxDQUFDdmlDLENBQUMsQ0FBQyxJQUFJLENBQUM2bUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMFAsVUFBVSxDQUFDbHNDLENBQUMsQ0FBQyxDQUFDdzlCLGNBQWMsQ0FBQ21ILElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDekosYUFBYSxDQUFDLFFBQVEsQ0FBQ3ZsRCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ3U1QixDQUFDLENBQUMzVyxDQUFDLENBQUN2bUIsVUFBVSxDQUFDYSxDQUFDLENBQUMrdEQsTUFBTSxDQUFDLENBQUNyb0MsQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQyt0RCxNQUFNLENBQUM1ckQsS0FBSyxDQUFDLElBQUksQ0FBQ2dxQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JpQyxDQUFDLENBQUMsSUFBSSxDQUFDK25ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUc3eEQsQ0FBQyxDQUFDK3RELE1BQU0sQ0FBQyxJQUFJLENBQUM4RCxXQUFXLENBQUMzdUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMydUQsV0FBVyxDQUFDLE9BQU94MUIsQ0FBQyxDQUFDbmtCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzVXLE1BQU0sRUFBRW9rQixDQUFDLENBQUMsUUFBUSxHQUFHMWxCLENBQUMsQ0FBQ3l0QixRQUFRLENBQUN6dEIsQ0FBQyxDQUFDeXRCLFFBQVEsQ0FBQyxJQUFJLENBQUNva0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDcHhELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRCxXQUFXLENBQUM2N0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUN3MUIsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDTixVQUFVLENBQUMsQ0FBQ3hpQyxLQUFLLENBQUMsSUFBSSxDQUFDOGlDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzl3QyxLQUFLLENBQUNnTyxLQUFLLENBQUNvRyxNQUFNLENBQUMsSUFBSSxDQUFDMDhCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzl3QyxLQUFLLENBQUNvVSxNQUFNLENBQUNuRyxRQUFRLENBQUMsSUFBSSxDQUFDNmlDLFdBQVcsQ0FBQzV3QyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM5VCxHQUFHLENBQUMsSUFBSSxDQUFDMGtELFdBQVcsQ0FBQzV3QyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM0UixJQUFJLENBQUMsSUFBSSxDQUFDZy9CLFdBQVcsQ0FBQzV3QyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ29iLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RiLEtBQUssQ0FBQ2dPLEtBQUssRUFBRS91QixDQUFDLENBQUNtL0QsZUFBZSxDQUFDLEVBQUU5aUMsQ0FBQyxDQUFDdE4sS0FBSyxDQUFDLElBQUksQ0FBQzhpQyxXQUFXLENBQUM5aUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NOLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RiLEtBQUssQ0FBQ29VLE1BQU0sRUFBRW4xQixDQUFDLENBQUNtL0QsZUFBZSxDQUFDLEVBQUU5aUMsQ0FBQyxDQUFDbEgsTUFBTSxDQUFDLElBQUksQ0FBQzA4QixXQUFXLENBQUMxOEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDa0gsQ0FBQyxDQUFDLENBQUM0ekIsdUJBQXVCLENBQUMsUUFBUSxDQUFDbm1ELENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDQSxDQUFDLENBQUN6RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ3FnQixDQUFDLENBQUNuaUIsT0FBTyxDQUFDdUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMrb0IsSUFBSSxDQUFDLENBQUMvb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcUQsR0FBRyxDQUFDLENBQUNyRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUdBLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ203QixNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLENBQUMvb0IsQ0FBQyxDQUFDK29CLElBQUksQ0FBQyxJQUFJLENBQUMwOUIsT0FBTyxDQUFDMTlCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRy9vQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNtN0IsTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDLElBQUksQ0FBQ20rQixpQkFBaUIsQ0FBQ2ppQyxLQUFLLENBQUNqbEIsQ0FBQyxDQUFDOGtCLEtBQUssQ0FBQyxJQUFJLENBQUMyaEMsT0FBTyxDQUFDMTlCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRy9vQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNtN0IsTUFBTSxDQUFDL2MsS0FBSyxDQUFDL2EsR0FBRyxDQUFDckQsQ0FBQyxDQUFDcUQsR0FBRyxDQUFDLElBQUksQ0FBQ29qRCxPQUFPLENBQUNwakQsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHckQsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDbTdCLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsQ0FBQyxJQUFJLENBQUM2akQsaUJBQWlCLENBQUM3N0IsTUFBTSxDQUFDcnJCLENBQUMsQ0FBQ3FyQyxNQUFNLENBQUMsSUFBSSxDQUFDb2IsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQyxDQUFDLENBQUNxakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN4cUIsWUFBWSxDQUFDLElBQUksQ0FBQytuQixNQUFNLENBQUMvbkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJbDhCLENBQUMsQ0FBQyxJQUFJLENBQUNrOEIsWUFBWSxDQUFDZixNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQ3dxQixXQUFXLEVBQUUsSUFBSSxDQUFDN1YsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzk3QyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU0bkIsQ0FBQyxDQUFDcGYsUUFBUSxDQUFDLElBQUksQ0FBQ3N6QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNVQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ2w4QixDQUFDLENBQUMrb0IsSUFBSSxFQUFFLElBQUksQ0FBQyttQixZQUFZLENBQUMzbEIsVUFBVSxDQUFDLENBQUMsQ0FBQ25xQixDQUFDLENBQUNxRCxHQUFHLEVBQUUsSUFBSSxDQUFDeXNDLFlBQVksQ0FBQzVsQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnUyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDbG9DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ21rQixJQUFJLEVBQUUsSUFBSSxDQUFDK2pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzhjLE9BQU8sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDOWMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDOGMsT0FBTyxDQUFDeDlDLFdBQVcsQ0FBQyxDQUFDLEVBQUVvZ0IsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3NmLEVBQUUsQ0FBQyxFQUFFLENBQUM5aEQsQ0FBQyxDQUFDLENBQUNxRCxHQUFHLENBQUMsQ0FBQyxDQUFDMGxCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxbEIsR0FBRyxDQUFDckQsQ0FBQyxDQUFDcUQsR0FBRyxDQUFDLENBQUN5c0IsUUFBUSxDQUFDLElBQUksQ0FBQ29NLFlBQVksQ0FBQy9rQixHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzRSLElBQUksQ0FBQy9vQixDQUFDLENBQUMrb0IsSUFBSSxDQUFDLENBQUMrRyxRQUFRLENBQUMsSUFBSSxDQUFDb00sWUFBWSxDQUFDL2tCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3d2QyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDaEIsV0FBVyxDQUFDLENBQUMsSUFBSS9wQyxDQUFDLENBQUMsSUFBSSxDQUFDbXNDLFdBQVcsQ0FBQzdpQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzdoQixHQUFHLENBQUN1WSxDQUFDLENBQUN2WSxHQUFHLENBQUMsQ0FBQ3lzQixRQUFRLENBQUMsSUFBSSxDQUFDbTBCLE1BQU0sQ0FBQzlzQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMjRCLFlBQVksQ0FBQzVsQixTQUFTLENBQUMsQ0FBQyxDQUFDbkIsSUFBSSxDQUFDbk4sQ0FBQyxDQUFDbU4sSUFBSSxDQUFDLENBQUMrRyxRQUFRLENBQUMsSUFBSSxDQUFDbTBCLE1BQU0sQ0FBQzlzQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMjRCLFlBQVksQ0FBQzNsQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDOW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMwbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMyOEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZSxPQUFPLENBQUMsQ0FBQzE5QixJQUFJLENBQUMrRyxRQUFRLENBQUMsSUFBSSxDQUFDaTRCLFdBQVcsQ0FBQzV3QyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOVQsR0FBRyxDQUFDeXNCLFFBQVEsQ0FBQyxJQUFJLENBQUNpNEIsV0FBVyxDQUFDNXdDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDcXVDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMEIsaUJBQWlCLENBQUMsQ0FBQ2ppQyxLQUFLLENBQUMsSUFBSSxDQUFDZy9CLE1BQU0sQ0FBQ3plLFVBQVUsQ0FBQyxDQUFDLENBQUNuYSxNQUFNLENBQUMsSUFBSSxDQUFDNDRCLE1BQU0sQ0FBQ3hlLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMmdCLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlwbUQsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsSUFBSSxDQUFDMVQsT0FBTyxDQUFDLFFBQVEsR0FBRzBULENBQUMsQ0FBQ28zQyxXQUFXLEVBQUUsQ0FBQ3AzQyxDQUFDLENBQUNvM0MsV0FBVyxDQUFDLElBQUksQ0FBQ0csTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDdHRELFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHK1YsQ0FBQyxDQUFDbzNDLFdBQVcsRUFBRSxRQUFRLEdBQUdwM0MsQ0FBQyxDQUFDbzNDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDM29CLE1BQU0sQ0FBQ2oxQixRQUFRLENBQUM2aUIsSUFBSSxDQUFDLElBQUksQ0FBQ29TLE1BQU0sQ0FBQy96QixNQUFNLENBQUMyaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNvUyxNQUFNLENBQUNqMUIsUUFBUSxDQUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUMvekIsTUFBTSxDQUFDL0QsR0FBRyxDQUFDLFVBQVUsR0FBR3FKLENBQUMsQ0FBQ28zQyxXQUFXLENBQUMsSUFBSSxDQUFDOXZELFFBQVEsQ0FBQ2l4QixLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzl3QixNQUFNLENBQUM4d0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpaUMsaUJBQWlCLENBQUNqaUMsS0FBSyxDQUFDLElBQUksQ0FBQ3doQyxPQUFPLENBQUMxOUIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHcmMsQ0FBQyxDQUFDbzNDLFdBQVcsQ0FBQyxJQUFJLENBQUM5dkQsUUFBUSxDQUFDcTNCLE1BQU0sQ0FBQyxDQUFDLEVBQUVyM0IsUUFBUSxDQUFDbWtCLElBQUksQ0FBQ3hoQixVQUFVLENBQUNzdkMsWUFBWSxDQUFDLElBQUksQ0FBQzl4QyxNQUFNLENBQUNrM0IsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNyM0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDbWtCLElBQUksQ0FBQ3hoQixVQUFVLENBQUNzdkMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDaWhCLGlCQUFpQixDQUFDNzdCLE1BQU0sQ0FBQyxJQUFJLENBQUNvN0IsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUNyQyxJQUFJLENBQUMwTCxDQUFDLENBQUNvM0MsV0FBVyxDQUFDLEVBQUUsQ0FBQzlqRCxDQUFDLENBQUM0YixDQUFDLENBQUNsUCxDQUFDLENBQUNvM0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1dEQsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQ28zQyxXQUFXLENBQUMsQ0FBQzNvQixNQUFNLENBQUMsQ0FBQyxDQUFDNUksQ0FBQyxDQUFDLFFBQVEsR0FBRzNXLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQzJzQyxXQUFXLENBQUMsQ0FBQzV0RCxDQUFDLENBQUM2eUIsSUFBSSxDQUFDLENBQUMrRyxRQUFRLENBQUNsVSxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMyWSxRQUFRLENBQUNsVSxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzdkMsT0FBTyxDQUFDMTlCLElBQUksQ0FBQzd5QixDQUFDLENBQUNtTixHQUFHLENBQUMsQ0FBQ3lzQixRQUFRLENBQUNsVSxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMyWSxRQUFRLENBQUNsVSxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzdkMsT0FBTyxDQUFDcGpELEdBQUcsQ0FBQ25OLENBQUMsQ0FBQzZ5QixJQUFJLENBQUMsQ0FBQ3dKLENBQUMsQ0FBQzM0QixJQUFJLENBQUM0dEIsR0FBRyxDQUFDeG5CLENBQUMsQ0FBQ2dtQyxXQUFXLENBQUNobUMsQ0FBQyxDQUFDb2xCLFdBQVcsQ0FBQyxDQUFDcGxCLENBQUMsQ0FBQ29sQixXQUFXLENBQUMsQ0FBQyxDQUFDMEssUUFBUSxDQUFDbFUsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDMlksUUFBUSxDQUFDbFUsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK3ZDLGlCQUFpQixDQUFDamlDLEtBQUssQ0FBQyxJQUFJLENBQUN3aEMsT0FBTyxDQUFDMTlCLElBQUksQ0FBQzd5QixDQUFDLENBQUNtTixHQUFHLENBQUMsQ0FBQ2t2QixDQUFDLENBQUMzNEIsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQ3huQixDQUFDLENBQUNpbUMsWUFBWSxDQUFDam1DLENBQUMsQ0FBQzg0QixZQUFZLENBQUMsQ0FBQzk0QixDQUFDLENBQUM4NEIsWUFBWSxDQUFDLENBQUMsQ0FBQ2hKLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzJZLFFBQVEsQ0FBQ2xVLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyt2QyxpQkFBaUIsQ0FBQzc3QixNQUFNLENBQUMsSUFBSSxDQUFDbzdCLE9BQU8sQ0FBQ3BqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUN1akQsa0JBQWtCLENBQUMsUUFBUSxDQUFDNW1ELENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ2d2QixRQUFRLENBQUMsQ0FBQyxJQUFJcU4sQ0FBQyxDQUFDLFVBQVUsR0FBR3Z5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUNpNUMsV0FBVyxFQUFFLElBQUksQ0FBQzdWLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM5N0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFNG5CLENBQUMsQ0FBQ3BmLFFBQVEsQ0FBQyxJQUFJLENBQUNzekMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVULFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzRULFlBQVksQ0FBQyxJQUFJLENBQUM1VCxZQUFZLENBQUM4RixDQUFDLENBQUMsY0FBYyxDQUFDaGhDLElBQUksQ0FBQzBMLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NzQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMzMUMsR0FBRyxDQUFDbk4sQ0FBQyxDQUFDbU4sR0FBRyxDQUFDLElBQUksQ0FBQzgzQixNQUFNLENBQUNqMUIsUUFBUSxDQUFDN0MsR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQyxJQUFJLENBQUM0SSxNQUFNLENBQUMvekIsTUFBTSxDQUFDL0QsR0FBRyxDQUFDa3ZCLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUNvekIsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDN1YsWUFBWSxDQUFDNWxCLFNBQVMsQ0FBQyxDQUFDLENBQUM4WCxDQUFDLENBQUMsQ0FBQyxDQUFDdDFCLENBQUMsQ0FBQ3dkLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FJLENBQUMsQ0FBQ3hKLElBQUksQ0FBQzd5QixDQUFDLENBQUM2eUIsSUFBSSxDQUFDLElBQUksQ0FBQ29TLE1BQU0sQ0FBQ2oxQixRQUFRLENBQUM2aUIsSUFBSSxDQUFDd0osQ0FBQyxDQUFDLElBQUksQ0FBQzRJLE1BQU0sQ0FBQy96QixNQUFNLENBQUMyaEIsSUFBSSxDQUFDd0osQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQ296QixXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM3VixZQUFZLENBQUMzbEIsVUFBVSxDQUFDLENBQUMsQ0FBQzZYLENBQUMsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDeWQsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDb0ksQ0FBQyxDQUFDLENBQUMsQ0FBQ3l6QixpQkFBaUIsQ0FBQyxRQUFRLENBQUNobUQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLElBQUksQ0FBQzFULE9BQU8sQ0FBQ2dwQyxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDNGYsS0FBSyxDQUFDemlCLENBQUMsQ0FBQzZDLENBQUMsQ0FBQzZmLEtBQUssQ0FBQ3VpQixDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQ3VqQixXQUFXLEVBQUUsSUFBSSxDQUFDN1YsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzk3QyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU0bkIsQ0FBQyxDQUFDcGYsUUFBUSxDQUFDLElBQUksQ0FBQ3N6QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNVQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNFQsWUFBWSxDQUFDLElBQUksQ0FBQzVULFlBQVksQ0FBQ3VHLENBQUMsQ0FBQyxjQUFjLENBQUN6aEMsSUFBSSxDQUFDb2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRXLE9BQU8sQ0FBQyxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQzJNLFdBQVcsRUFBRSxJQUFJLENBQUM3VixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDOTdDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM4N0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzVULFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2YsTUFBTSxDQUFDajFCLFFBQVEsQ0FBQyxJQUFJLENBQUN5Z0Qsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDWixnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQ2pDLFdBQVcsRUFBRSxDQUFDOWpELENBQUMsQ0FBQzRmLEtBQUssQ0FBQyxJQUFJLENBQUN1YixNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLENBQUMsSUFBSSxDQUFDKzZCLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOWhCLENBQUMsQ0FBQyxJQUFJLENBQUM4aEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzNvQixNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLENBQUMsQ0FBQy9vQixDQUFDLENBQUM2ZixLQUFLLENBQUMsSUFBSSxDQUFDc2IsTUFBTSxDQUFDL2MsS0FBSyxDQUFDL2EsR0FBRyxDQUFDLElBQUksQ0FBQ3lnRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzNtRCxDQUFDLENBQUMsSUFBSSxDQUFDMm1ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMzb0IsTUFBTSxDQUFDL2MsS0FBSyxDQUFDL2EsR0FBRyxDQUFDLENBQUNyRCxDQUFDLENBQUM0ZixLQUFLLENBQUMsSUFBSSxDQUFDdWIsTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDLElBQUksQ0FBQys2QixXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzloQixDQUFDLENBQUMsSUFBSSxDQUFDOGhCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMzb0IsTUFBTSxDQUFDL2MsS0FBSyxDQUFDMkssSUFBSSxDQUFDLENBQUMvb0IsQ0FBQyxDQUFDNmYsS0FBSyxDQUFDLElBQUksQ0FBQ3NiLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsQ0FBQyxJQUFJLENBQUN5Z0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMzbUQsQ0FBQyxDQUFDLElBQUksQ0FBQzJtRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDM29CLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsQ0FBQyxDQUFDLENBQUNxSixDQUFDLENBQUNzM0MsSUFBSSxFQUFFLENBQUM5dEQsQ0FBQyxDQUFDLElBQUksQ0FBQ2d3RCxhQUFhLENBQUN0c0QsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQyxDQUFDbm9CLENBQUMsQ0FBQyxJQUFJLENBQUMrb0QsYUFBYSxDQUFDLENBQUN4NUMsQ0FBQyxDQUFDczNDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdDNDLENBQUMsQ0FBQ3MzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM3bUQsQ0FBQyxDQUFDLElBQUksQ0FBQzJtRCxXQUFXLENBQUM1dEQsQ0FBQyxDQUFDLElBQUksQ0FBQ2lsQyxNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLEVBQUUsSUFBSSxDQUFDeWdELFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTV0RCxDQUFDLENBQUMsSUFBSSxDQUFDaWxDLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQy9hLEdBQUcsRUFBRSxJQUFJLENBQUN5Z0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDNXRELENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLElBQUksQ0FBQ2lsQyxNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLEVBQUUsSUFBSSxDQUFDeWdELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzV0RCxDQUFDLENBQUN3VyxDQUFDLENBQUNzM0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOXRELENBQUMsQ0FBQ3dXLENBQUMsQ0FBQ3MzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM5dEQsQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUMwekIsYUFBYSxDQUFDcnNELElBQUksQ0FBQzByQixLQUFLLENBQUMsQ0FBQzBjLENBQUMsQ0FBQyxJQUFJLENBQUNpa0IsYUFBYSxDQUFDLENBQUN2NUMsQ0FBQyxDQUFDczNDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdDNDLENBQUMsQ0FBQ3MzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNoaUIsQ0FBQyxDQUFDLElBQUksQ0FBQzhoQixXQUFXLENBQUN2eEIsQ0FBQyxDQUFDLElBQUksQ0FBQzRJLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQzJLLElBQUksRUFBRSxJQUFJLENBQUMrNkIsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFdnhCLENBQUMsQ0FBQyxJQUFJLENBQUM0SSxNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLEVBQUUsSUFBSSxDQUFDKzZCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3Z4QixDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUM0SSxNQUFNLENBQUMvYyxLQUFLLENBQUMySyxJQUFJLEVBQUUsSUFBSSxDQUFDKzZCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3Z4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczNDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3p4QixDQUFDLENBQUM3bEIsQ0FBQyxDQUFDczNDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3p4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsdkIsR0FBRyxDQUFDbEcsQ0FBQyxDQUFDLElBQUksQ0FBQ2crQixNQUFNLENBQUMvYyxLQUFLLENBQUMvYSxHQUFHLENBQUMsSUFBSSxDQUFDODNCLE1BQU0sQ0FBQ2oxQixRQUFRLENBQUM3QyxHQUFHLENBQUMsSUFBSSxDQUFDODNCLE1BQU0sQ0FBQy96QixNQUFNLENBQUMvRCxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDc2lELFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQzdWLFlBQVksQ0FBQzVsQixTQUFTLENBQUMsQ0FBQyxDQUFDdVksQ0FBQyxDQUFDLENBQUMsQ0FBQ0wsQ0FBQyxDQUFDbFksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDbkIsSUFBSSxDQUFDaVosQ0FBQyxDQUFDLElBQUksQ0FBQzdHLE1BQU0sQ0FBQy9jLEtBQUssQ0FBQzJLLElBQUksQ0FBQyxJQUFJLENBQUNvUyxNQUFNLENBQUNqMUIsUUFBUSxDQUFDNmlCLElBQUksQ0FBQyxJQUFJLENBQUNvUyxNQUFNLENBQUMvekIsTUFBTSxDQUFDMmhCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM0OEIsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDN1YsWUFBWSxDQUFDM2xCLFVBQVUsQ0FBQyxDQUFDLENBQUNzWSxDQUFDLENBQUMsQ0FBQyxDQUFDTCxDQUFDLENBQUNqWSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeXNDLFVBQVUsQ0FBQyxRQUFRLENBQUNoN0MsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDUSxXQUFXLENBQUMsSUFBSSxDQUFDZ3hELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMW5ELENBQUMsQ0FBQzJ6QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNoOUMsVUFBVSxDQUFDMnNCLFlBQVksQ0FBQyxJQUFJLENBQUNva0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM5WixTQUFTLENBQUM1dEMsQ0FBQyxDQUFDMnpDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzN6QyxDQUFDLENBQUMyekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDcHhDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQ3ExRCxPQUFPLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUNBLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSWxyRCxDQUFDLENBQUMsSUFBSSxDQUFDa3JELE9BQU87QUFDcHcrQixJQUFJLENBQUMzeUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN2NEIsQ0FBQyxHQUFHLElBQUksQ0FBQ2tyRCxPQUFPLEVBQUUsSUFBSSxDQUFDelQsZ0JBQWdCLENBQUMsQ0FBQzV4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzh6QixNQUFNLENBQUMsUUFBUSxDQUFDenFDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLFNBQVM5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUNxOEIsQ0FBQyxDQUFDLENBQUNyOEIsQ0FBQyxDQUFDcXNDLFFBQVEsQ0FBQzNtQixDQUFDLENBQUMyVyxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDNm1ELE9BQU8sQ0FBQzdtRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNDFELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJcmpDLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDb3FELFlBQVksRUFBRSxJQUFJLENBQUMvTyxXQUFXLENBQUMzZ0QsTUFBTSxDQUFDLENBQUMsQ0FBQzVQLE1BQU0sRUFBRSxJQUFJLENBQUNrd0QsV0FBVyxDQUFDbmtDLE1BQU0sQ0FBQyxJQUFJLENBQUN3a0MsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDK08sWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM3UyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDOEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDeDFCLEVBQUUsR0FBRyxJQUFJLENBQUNrMUIsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQ0EsVUFBVSxDQUFDbDFCLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUNrMUIsVUFBVSxDQUFDbDFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNrMUIsVUFBVSxDQUFDbDFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQ3cxQixXQUFXLENBQUM1d0MsR0FBRyxDQUFDLElBQUksQ0FBQ3N3QyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUNuakIsWUFBWSxDQUFDLElBQUksQ0FBQ3lqQixXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQ0EsV0FBVyxDQUFDMXZDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQzJ2QyxXQUFXLEVBQUUsQ0FBQ2hvRCxDQUFDLEVBQUUwTSxDQUFDLENBQUMvWCxJQUFJLENBQUMsUUFBUSxDQUFDaW5CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJtQixRQUFRLENBQUMsU0FBUyxDQUFDM21CLENBQUMsQ0FBQyxJQUFJLENBQUNpckMsT0FBTyxDQUFDLElBQUksQ0FBQ21CLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQSxXQUFXLEVBQUUsSUFBSSxDQUFDZ08sV0FBVyxDQUFDdG9ELElBQUksR0FBRyxJQUFJLENBQUNxNkMsV0FBVyxDQUFDcjZDLElBQUksQ0FBQyxDQUFDLENBQUNWLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ2dwRCxXQUFXLENBQUM1dUQsTUFBTSxHQUFHLElBQUksQ0FBQzJnRCxXQUFXLENBQUMzZ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRXBILENBQUMsRUFBRTBNLENBQUMsQ0FBQy9YLElBQUksQ0FBQyxRQUFRLENBQUNpbkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMm1CLFFBQVEsQ0FBQyxRQUFRLENBQUMzbUIsQ0FBQyxDQUFDLElBQUksQ0FBQ2lyQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUNrUCxnQkFBZ0IsRUFBRSxDQUFDLzFELENBQUMsRUFBRSxDQUFDME0sQ0FBQyxDQUFDL1gsSUFBSSxDQUFDLFFBQVEsQ0FBQ2luQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMybUIsUUFBUSxDQUFDLFFBQVEsQ0FBQzNtQixDQUFDLENBQUMsSUFBSSxDQUFDaXJDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNuNkMsQ0FBQyxDQUFDL1gsSUFBSSxDQUFDLFFBQVEsQ0FBQ2luQixDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQzViLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDMm1CLFFBQVEsQ0FBQyxTQUFTLENBQUN2aUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZtRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM0Z0UsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDcnBELENBQUMsQ0FBQy9YLElBQUksQ0FBQyxRQUFRLENBQUNpbkIsQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUM1YixDQUFDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzJtQixRQUFRLENBQUMsUUFBUSxDQUFDdmlDLENBQUMsQ0FBQyxJQUFJLENBQUM2bUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMXhELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDNGdFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4akMsQ0FBQyxDQUFDLElBQUksQ0FBQ2drQyxVQUFVLENBQUMvK0QsTUFBTSxDQUFDLENBQUMsQ0FBQys2QixDQUFDLEVBQUUsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ3Z5QixDQUFDLEVBQUUwTSxDQUFDLENBQUMvWCxJQUFJLENBQUN1QixDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNxZ0UsVUFBVSxDQUFDaGtDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNna0MsVUFBVSxDQUFDaGtDLENBQUMsQ0FBQyxDQUFDczFCLGNBQWMsQ0FBQ21ILElBQUksRUFBRSxDQUFDdGlELENBQUMsQ0FBQy9YLElBQUksQ0FBQ3VCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3FnRSxVQUFVLENBQUNoa0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2drQyxVQUFVLENBQUNoa0MsQ0FBQyxDQUFDLENBQUNzMUIsY0FBYyxDQUFDbUgsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNrSCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUNsaUUsUUFBUSxDQUFDOFAsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDcVQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMrK0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ3ptRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMG1ELGNBQWMsRUFBRSxJQUFJLENBQUNuUyxNQUFNLENBQUM5c0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUNpL0MsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDQyxhQUFhLEVBQUUsSUFBSSxDQUFDcFMsTUFBTSxDQUFDOXNDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQ2svQyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ0EsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN4MkQsQ0FBQyxFQUFFLElBQUksQ0FBQ3VpQyxRQUFRLENBQUMsWUFBWSxDQUFDM21CLENBQUMsQ0FBQyxJQUFJLENBQUNpckMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2EsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDL3dELFVBQVUsQ0FBQ0MsV0FBVyxDQUFDLElBQUksQ0FBQzh3RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNMLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDcEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzhELFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM5RCxNQUFNLENBQUN2MEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1MEMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUNqa0QsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDdXlCLENBQUMsQ0FBQyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDbFYsTUFBTSxDQUFDKzZCLENBQUMsQ0FBQ0EsQ0FBQyxFQUFFLENBQUM3bEIsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxDQUFDcDlCLElBQUksQ0FBQyxJQUFJLENBQUN5bUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMm1CLFFBQVEsQ0FBQyxNQUFNLENBQUMzbUIsQ0FBQyxDQUFDLElBQUksQ0FBQ2lyQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNtQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNYLG1CQUFtQixDQUFDLENBQUM5a0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMzbUIsQ0FBQyxDQUFDK21CLE1BQU0sQ0FBQ3RyQyxTQUFTLENBQUNrckMsUUFBUSxDQUFDbHFDLEtBQUssQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzJwRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM0RSxPQUFPLENBQUMsUUFBUSxDQUFDN21ELENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUM4SixDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQ2lrRCxNQUFNLENBQUMvdEQsQ0FBQyxDQUFDK3RELE1BQU0sQ0FBQ3lELFdBQVcsQ0FBQ3h4RCxDQUFDLENBQUN3eEQsV0FBVyxFQUFFOXJDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDc0osUUFBUSxDQUFDaHZCLENBQUMsQ0FBQ2d2QixRQUFRLENBQUM2Z0MsZ0JBQWdCLENBQUM3dkQsQ0FBQyxDQUFDNnZELGdCQUFnQixDQUFDNXFCLE1BQU0sQ0FBQ2psQyxDQUFDLENBQUMydkQsV0FBVyxDQUFDbFMsSUFBSSxDQUFDejlDLENBQUMsQ0FBQzZ4RCxXQUFXLENBQUM4UCxNQUFNLENBQUM3M0QsQ0FBQyxDQUFDQSxDQUFDLENBQUNxaUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDem1CLENBQUMsQ0FBQzhtQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM1ckMsT0FBTyxDQUFDLFFBQVEsQ0FBQ3lzQyxjQUFjLENBQUMsU0FBUyxDQUFDTixpQkFBaUIsQ0FBQyxNQUFNLENBQUNqcUMsT0FBTyxDQUFDLENBQUNtM0IsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDMm5DLE9BQU8sQ0FBQyxJQUFJLENBQUN6bkIsS0FBSyxDQUFDLENBQUMxQyxJQUFJLENBQUMsc0JBQXNCLENBQUNELEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDcXFCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3Z3QyxHQUFHLENBQUMsSUFBSSxDQUFDa2lCLEdBQUcsQ0FBQyxJQUFJLENBQUNzdUIsWUFBWSxDQUFDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQ2p1QyxJQUFJLENBQUMsQ0FBQyxDQUFDa3FCLE1BQU0sQ0FBQyxJQUFJLENBQUNna0IsSUFBSSxDQUFDLElBQUksQ0FBQy93RCxLQUFLLENBQUMsSUFBSSxDQUFDaVAsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOHRCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ00sVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUN4ckMsT0FBTyxDQUFDd3VCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQ2dkLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDeHJDLE9BQU8sQ0FBQzB3QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUNsRixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQ3hyQyxPQUFPLENBQUNneEIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQzd1QixLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3c1QyxNQUFNLENBQUMsSUFBSSxDQUFDdFMsT0FBTyxDQUFDbHNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnaUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNwMEIsR0FBRyxDQUFDLElBQUksQ0FBQ3EwQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM5MUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5QixHQUFHLENBQUMsSUFBSSxDQUFDNXZDLE1BQU0sQ0FBQyxDQUFDb3FCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzhqQixPQUFPLENBQUNuVCxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQytVLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSWprQyxDQUFDLENBQUMsSUFBSSxDQUFDK2lDLE1BQU0sQ0FBQyxDQUFDLENBQUM3c0MsQ0FBQyxDQUFDLElBQUksQ0FBQ21zQyxPQUFPLENBQUMsT0FBT3ptQixDQUFDLENBQUMzakIsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMyakIsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUN4VyxDQUFDLENBQUNtUCxJQUFJLENBQUNrdEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFN2xCLENBQUMsRUFBRUEsQ0FBQyxDQUFDbFYsTUFBTSxFQUFFLENBQUN3SSxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDLENBQUNvNEQsT0FBTyxDQUFDLENBQUN4bUIsT0FBTyxDQUFDLFFBQVEsQ0FBQ2gyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyNEMsTUFBTSxDQUFDMzRDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzIxQixRQUFRLENBQUMzMUIsQ0FBQyxDQUFDLEVBQUVBLENBQUMsQ0FBQzBCLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQ203QixLQUFLLENBQUMsT0FBTyxDQUFDMTNCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2l5QixRQUFRLENBQUMsSUFBSSxDQUFDM1EsT0FBTyxDQUFDbHNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzZxQixJQUFJLENBQUMsUUFBUSxDQUFDcEYsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNvNUIsVUFBVSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNBLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMGYsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNweUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwUSxRQUFRLEdBQUcsSUFBSSxDQUFDM1EsT0FBTyxDQUFDbHNDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDb3NDLFFBQVEsQ0FBQyxRQUFRLENBQUMzbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDeThDLFVBQVUsQ0FBQyxRQUFRLENBQUN6OEMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUNzNEQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDL0QsTUFBTSxDQUFDMzRDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMjhDLEtBQUssQ0FBQyxDQUFDdjRELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaEgsT0FBTyxDQUFDZ3hCLElBQUksQ0FBQ3BPLENBQUMsQ0FBQyxDQUFDaVQsWUFBWSxDQUFDLElBQUksQ0FBQzJwQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUNBLGVBQWUsQ0FBQyxJQUFJLENBQUN2ekIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcXpCLFFBQVEsRUFBRSxJQUFJLENBQUM1RCxLQUFLLENBQUM5NEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDMEIsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDdGQsQ0FBQyxDQUFDLENBQUMsU0FBUzlKLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSThKLENBQUMsQ0FBQyxJQUFJLENBQUNxaUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHem1CLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2bkIsaUJBQWlCLENBQUMsSUFBSSxDQUFDam5CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ00sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDcWlDLE9BQU8sQ0FBQy9qQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDMDBCLFFBQVEsQ0FBQ3pnQixDQUFDLENBQUMsSUFBSSxDQUFDMFMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK04sUUFBUSxDQUFDemdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJQSxDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUM4UCxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUd6bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZuQixpQkFBaUIsQ0FBQyxJQUFJLENBQUNqbkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZy9DLFFBQVEsQ0FBQyxJQUFJLENBQUMzUSxPQUFPLENBQUNsc0MsR0FBRyxDQUFDLENBQUMsQ0FBQzZKLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUNwbkIsQ0FBQyxDQUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDNi9DLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvUCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQytQLFVBQVUsQ0FBQzkrQyxDQUFDLENBQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDby9ELE1BQU0sQ0FBQ3YwRCxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUN5NEQsT0FBTyxDQUFDLElBQUksQ0FBQzc4QyxDQUFDLENBQUM1YixDQUFDLENBQUNtZCxhQUFhLENBQUMsQ0FBQ3lULFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1d0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsUUFBUSxDQUFDQSxDQUFDLENBQUMsQ0FBQyxPQUFPNGIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDbWQsYUFBYSxDQUFDLENBQUN5VCxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMyakMsTUFBTSxDQUFDdjBELENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeTRELE9BQU8sQ0FBQyxJQUFJLENBQUM3OEMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDbWQsYUFBYSxDQUFDLENBQUN5VCxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNXdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQysyQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyaEIsU0FBUyxDQUFDLElBQUksQ0FBQ3IyQixPQUFPLENBQUNoOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzJVLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzVTLE1BQU0sQ0FBQyxDQUFDLENBQUNnYyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDKzBDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3BoQixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2pTLFNBQVMsQ0FBQyxJQUFJLENBQUM0ekIsU0FBUyxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQzV6QixTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUN6QyxPQUFPLENBQUNoOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUM2YSxPQUFPLENBQUMsSUFBSSxDQUFDdzRDLFNBQVMsQ0FBQ2xyRCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUNuSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NZLE1BQU0sQ0FBQyxDQUFDd1MsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtVSxZQUFZLENBQUMsSUFBSSxDQUFDcGtCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUM0a0IsU0FBUyxDQUFDLElBQUksQ0FBQzVrQixPQUFPLENBQUMzbkIsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3VzQyxTQUFTLENBQUMsSUFBSSxDQUFDNWtCLE9BQU8sQ0FBQ3puQixJQUFJLENBQUMsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsSUFBSSxDQUFDeW5CLE9BQU8sQ0FBQzNuQixLQUFLLENBQUMsQ0FBQyxDQUFDb2xCLE1BQU0sQ0FBQyxDQUFDaTZCLElBQUksQ0FBQyxJQUFJLENBQUM1K0MsT0FBTyxDQUFDcTNDLEtBQUssQ0FBQzNDLEVBQUUsQ0FBQzRLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcDRCLE9BQU8sQ0FBQ3puQixJQUFJLENBQUMsQ0FBQyxDQUFDa2xCLE1BQU0sQ0FBQyxDQUFDaTZCLElBQUksQ0FBQyxJQUFJLENBQUM1K0MsT0FBTyxDQUFDcTNDLEtBQUssQ0FBQzFDLElBQUksQ0FBQzJLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcDRCLE9BQU8sQ0FBQ21MLE1BQU0sQ0FBQyxDQUFDLENBQUN6eEIsSUFBSSxDQUFDcXVCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDeXdDLFNBQVMsQ0FBQ3J0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDcXRDLFNBQVMsQ0FBQ3J0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNxdEMsU0FBUyxDQUFDcnRDLE1BQU0sQ0FBQyxJQUFJLENBQUNxdEMsU0FBUyxDQUFDcnRDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa21CLFFBQVEsQ0FBQyxRQUFRLENBQUN2eEMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUN1NUIsQ0FBQyxDQUFDM1csQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUMsTUFBTSxDQUFDamdCLENBQUMsQ0FBQ2lnQixPQUFPLENBQUMsQ0FBQyxLQUFLc1MsQ0FBQyxDQUFDcWQsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDNm9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDejRELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUt1eUIsQ0FBQyxDQUFDeWMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDeXBCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUN6NEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBS3V5QixDQUFDLENBQUNnZCxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUNrcEIsT0FBTyxDQUFDLElBQUksQ0FBQ3ZpRSxDQUFDLENBQUMraEUsSUFBSSxDQUFDajRELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUt1eUIsQ0FBQyxDQUFDK2MsU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDbXBCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQ3ZpRSxDQUFDLENBQUMraEUsSUFBSSxDQUFDajRELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3UwRCxNQUFNLENBQUMsUUFBUSxDQUFDMzRDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDMDhDLFFBQVEsRUFBRSxJQUFJLENBQUMvMUIsUUFBUSxDQUFDLE9BQU8sQ0FBQzNtQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c4QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUNBLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNVLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNHLE9BQU8sQ0FBQyxRQUFRLENBQUM3OEMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsR0FBRyxDQUFDaVQsWUFBWSxDQUFDLElBQUksQ0FBQzFCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQ0EsS0FBSyxDQUFDLElBQUksQ0FBQzhYLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3d6QixPQUFPLENBQUMsRUFBRSxDQUFDejRELENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMjhDLEtBQUssQ0FBQ3Y0RCxDQUFDLENBQUMsSUFBSSxDQUFDaEgsT0FBTyxDQUFDZ3hCLElBQUksQ0FBQzl6QixDQUFDLENBQUMsQ0FBQyxDQUFDcWlFLEtBQUssQ0FBQyxRQUFRLENBQUMzOEMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUNpRixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUN5OEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMxaEUsQ0FBQyxDQUFDLElBQUksQ0FBQ3lpRSxZQUFZLENBQUN6aUUsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQyxJQUFJLENBQUNnOUMsVUFBVSxDQUFDLElBQUksQ0FBQ2hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDVSxRQUFRLEVBQUUsSUFBSSxDQUFDLzFCLFFBQVEsQ0FBQyxNQUFNLENBQUN2aUMsQ0FBQyxDQUFDLENBQUM3RSxLQUFLLENBQUNqRixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDeStDLE1BQU0sQ0FBQ3orQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwaEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDZ0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzU0RCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQysrRCxXQUFXLENBQUMsT0FBTzdoRSxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDdm1CLFVBQVUsQ0FBQ2EsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzhKLENBQUMsQ0FBQyxDQUFDcEcsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQ2pvQyxDQUFDLENBQUNBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDQSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2cxRCxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcDVDLENBQUMsQ0FBQyxJQUFJLENBQUNxNUMsWUFBWSxDQUFDLElBQUksQ0FBQ2o4RCxPQUFPLENBQUNneEIsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDaHhCLE9BQU8sQ0FBQzB3QyxHQUFHLEVBQUUsQ0FBQzl0QixDQUFDLENBQUNoaUIsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQzVMLENBQUMsQ0FBQyxJQUFJLENBQUNxNUMsWUFBWSxDQUFDLElBQUksQ0FBQ2o4RCxPQUFPLENBQUMwd0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOXRCLENBQUMsQ0FBQyxDQUFDcTVDLFlBQVksQ0FBQyxRQUFRLENBQUNyNUMsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQyxFQUFFLENBQUM0YixDQUFDLENBQUMxbEIsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDcEwsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUdzQixDQUFDLENBQUMsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDeEksTUFBTSxDQUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeWlFLFlBQVksQ0FBQyxRQUFRLENBQUMvOEMsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQyxPQUFPZ0gsQ0FBQyxDQUFDLElBQUksR0FBR3V5QixDQUFDLENBQUNtWCxHQUFHLENBQUNuWCxDQUFDLENBQUNtWCxHQUFHLENBQUMsQ0FBQyxDQUFDeHpDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM1YixDQUFDLENBQUM5SixDQUFDLENBQUMwRCxJQUFJLENBQUMwckIsS0FBSyxDQUFDcHZCLENBQUMsQ0FBQ3E4QixDQUFDLENBQUN2SSxJQUFJLENBQUMsQ0FBQ3VJLENBQUMsQ0FBQ3ZJLElBQUksQ0FBQ3BPLENBQUMsQ0FBQzViLENBQUMsQ0FBQzlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUMySixVQUFVLENBQUMzSixDQUFDLENBQUMrMEMsT0FBTyxDQUFDLElBQUksQ0FBQ3FFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBR3ppQyxDQUFDLENBQUMvSyxHQUFHLEVBQUU1TCxDQUFDLENBQUMyVyxDQUFDLENBQUMvSyxHQUFHLENBQUMrSyxDQUFDLENBQUMvSyxHQUFHLENBQUMsSUFBSSxHQUFHK0ssQ0FBQyxDQUFDbVgsR0FBRyxFQUFFblgsQ0FBQyxDQUFDbVgsR0FBRyxDQUFDOXRCLENBQUMsQ0FBQzJXLENBQUMsQ0FBQ21YLEdBQUcsQ0FBQzl0QixDQUFDLENBQUMsQ0FBQzg0QyxLQUFLLENBQUMsUUFBUSxDQUFDOTRDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzA4QyxRQUFRLEVBQUUsQ0FBQ3pwQyxZQUFZLENBQUMsSUFBSSxDQUFDMUIsS0FBSyxDQUFDLENBQUMwQixZQUFZLENBQUMsSUFBSSxDQUFDMnBDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQ1osT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNVLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvMUIsUUFBUSxDQUFDLE1BQU0sQ0FBQzNtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0b0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsTUFBTSxTQUFTLEdBQUdrUCxDQUFDLEVBQUUsY0FBYyxHQUFHQSxDQUFDLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsSUFBSSxDQUFDMmlFLE1BQU0sQ0FBQyxJQUFJLENBQUN4MkIsT0FBTyxDQUFDbHNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2QyxPQUFPLENBQUM0aUIsQ0FBQyxDQUFDLENBQUM1YixDQUFDLENBQUMsSUFBSSxDQUFDcWlDLE9BQU8sQ0FBQ2xzQyxHQUFHLENBQUMsSUFBSSxDQUFDMmlFLE9BQU8sQ0FBQzVpRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRzBsQixDQUFDLEVBQUUsS0FBSyxHQUFHQSxDQUFDLEVBQUUsTUFBTSxHQUFHQSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTzViLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsSUFBSSxDQUFDNjRELE1BQU0sQ0FBQzc0RCxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRzRiLENBQUMsRUFBRSxDQUFDMlcsQ0FBQyxDQUFDLElBQUksQ0FBQ3JTLE9BQU8sQ0FBQzNuQixLQUFLLENBQUMsQ0FBQyxDQUFDdUwsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQ3dnQyxZQUFZLENBQUMvUixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3Y1QixPQUFPLENBQUNxM0MsS0FBSyxDQUFDM0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDNUksU0FBUyxDQUFDdlMsQ0FBQyxDQUFDLElBQUksQ0FBQ3Z5QixDQUFDLENBQUMwdEMsRUFBRSxDQUFDLENBQUNoaEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3dULE9BQU8sQ0FBQ3puQixJQUFJLENBQUMsQ0FBQyxDQUFDcUwsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQ3dnQyxZQUFZLENBQUM1M0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMxVCxPQUFPLENBQUNxM0MsS0FBSyxDQUFDMUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDN0ksU0FBUyxDQUFDcDRCLENBQUMsQ0FBQyxJQUFJLENBQUMxTSxDQUFDLENBQUMydEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1SyxNQUFNLENBQUNubkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDbWtDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ3ZvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtbkIsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytvQixZQUFZLENBQUMsSUFBSSxDQUFDK3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOThDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ltQixPQUFPLENBQUNsdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUN5RyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNzRSxPQUFPLENBQUN2QyxNQUFNLENBQUMvQixDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMyb0IsV0FBVyxDQUFDbkMsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3htQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtbkIsTUFBTSxDQUFDbm5CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2k5QyxNQUFNLENBQUMsUUFBUSxDQUFDajlDLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU9BLENBQUMsRUFBRSxFQUFFLEdBQUdBLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUN6bkIsTUFBTSxDQUFDNGtFLFNBQVMsRUFBRSxJQUFJLENBQUMvL0QsT0FBTyxDQUFDZy9ELFlBQVksQ0FBQ2UsU0FBUyxDQUFDeHpDLFVBQVUsQ0FBQzNKLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQzgrRCxPQUFPLENBQUMsQ0FBQyxDQUFDbDhDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBR0EsQ0FBQyxFQUFFd2hCLEtBQUssQ0FBQ3hoQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQyxDQUFDazlDLE9BQU8sQ0FBQyxRQUFRLENBQUNsOUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUN6bkIsTUFBTSxDQUFDNGtFLFNBQVMsRUFBRSxJQUFJLENBQUMvL0QsT0FBTyxDQUFDZy9ELFlBQVksQ0FBQ2UsU0FBUyxDQUFDQyxNQUFNLENBQUNwOUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUNnL0QsWUFBWSxDQUFDLElBQUksQ0FBQ2gvRCxPQUFPLENBQUM4K0QsT0FBTyxDQUFDLENBQUNsOEMsQ0FBQyxDQUFDLENBQUMwbUIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDRCxPQUFPLENBQUNoOUIsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQ3JNLE9BQU8sQ0FBQzB3QyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzF3QyxPQUFPLENBQUN3dUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUNxeEMsTUFBTSxDQUFDLElBQUksQ0FBQ3gyQixPQUFPLENBQUNsc0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOGlFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlyOUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3pnQixLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxHQUFHeWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxHQUFHLElBQUksQ0FBQys4QyxZQUFZLENBQUMvOEMsQ0FBQyxDQUFDLENBQUMsQ0FBQys0QixNQUFNLENBQUMsUUFBUSxDQUFDLzRCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsRUFBRSxHQUFHMGxCLENBQUMsRUFBRSxDQUFDMWxCLENBQUMsQ0FBQyxJQUFJLENBQUMyaUUsTUFBTSxDQUFDajlDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRzFsQixDQUFDLEVBQUUsQ0FBQzhKLENBQUMsRUFBRSxDQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQ3lpRSxZQUFZLENBQUN6aUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUMsSUFBSSxDQUFDazlDLE9BQU8sQ0FBQzVpRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbXNDLE9BQU8sQ0FBQ2xzQyxHQUFHLENBQUN5bEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMG1CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQytCLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hDLE9BQU8sQ0FBQ2x0QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrWixVQUFVLENBQUMsNkRBQTZELENBQUMsQ0FBQyxJQUFJLENBQUN3cEMsU0FBUyxDQUFDajFDLFdBQVcsQ0FBQyxJQUFJLENBQUM0ZSxPQUFPLENBQUMsQ0FBQyxDQUFDNjJCLE1BQU0sQ0FBQzkyQixDQUFDLENBQUMsUUFBUSxDQUFDeG1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3U5QyxPQUFPLENBQUN2OUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdTlDLE9BQU8sQ0FBQyxRQUFRLENBQUN2OUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMjRDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNnRSxLQUFLLENBQUMsQ0FBQzM4QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQ2d4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMwcUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwRSxRQUFRLENBQUNoM0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3htQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5OUMsU0FBUyxDQUFDejlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3k5QyxTQUFTLENBQUMsUUFBUSxDQUFDejlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzI0QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDZ0UsS0FBSyxDQUFDLENBQUMzOEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNWlCLE9BQU8sQ0FBQ2d4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMwcUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0RSxNQUFNLENBQUNsM0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQ3htQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1OUMsT0FBTyxDQUFDLENBQUN2OUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzVpQixPQUFPLENBQUNpL0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDc0IsUUFBUSxDQUFDbjNCLENBQUMsQ0FBQyxRQUFRLENBQUN4bUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeTlDLFNBQVMsQ0FBQyxDQUFDejlDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDaS9ELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzk4RCxLQUFLLENBQUMsUUFBUSxDQUFDeWdCLENBQUMsQ0FBQyxDQUFDLE9BQU90akIsU0FBUyxDQUFDZCxNQUFNLENBQUMsQ0FBQzRxQyxDQUFDLENBQUMsSUFBSSxDQUFDdVMsTUFBTSxDQUFDLENBQUN4L0MsSUFBSSxDQUFDLElBQUksQ0FBQ3ltQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2k5QyxNQUFNLENBQUMsSUFBSSxDQUFDeDJCLE9BQU8sQ0FBQ2xzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VzQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ2cyQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM5OEMsQ0FBQyxDQUFDMHZCLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRTF2QixDQUFDLENBQUM4bUIsTUFBTSxDQUFDLFlBQVksQ0FBQzltQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDc1UsT0FBTyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzJoQixTQUFTLENBQUMsSUFBSSxDQUFDcjJCLE9BQU8sQ0FBQ2g5QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDMlUsSUFBSSxDQUFDLElBQUksQ0FBQ3cvQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUNweUQsTUFBTSxDQUFDLENBQUMsQ0FBQ2djLE1BQU0sQ0FBQyxJQUFJLENBQUNxMkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNELGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUNDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM3OUMsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3NVLE9BQU8sQ0FBQ2w3QixDQUFDLENBQUM4bUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDNXJDLE9BQU8sQ0FBQyxRQUFRLENBQUM0M0IsS0FBSyxDQUFDLEdBQUcsQ0FBQzExQixPQUFPLENBQUMsQ0FBQ3M4QixNQUFNLENBQUMsSUFBSSxDQUFDbkYsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMrZixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMzMEIsS0FBSyxDQUFDLE9BQU8sQ0FBQzYwQixXQUFXLENBQUMsU0FBUyxDQUFDNzNCLElBQUksQ0FBQyxJQUFJLENBQUNGLElBQUksQ0FBQyxJQUFJLENBQUNrNEIsUUFBUSxDQUFDLElBQUksQ0FBQ0MsY0FBYyxDQUFDLElBQUksQ0FBQ2twQixVQUFVLENBQUMsSUFBSSxDQUFDeDdDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQ3k3QyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLzlDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxRQUFRLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQ3I4QixDQUFDLENBQUM4SixDQUFDLENBQUNxSSxJQUFJLENBQUN2TyxPQUFPLENBQUM4aEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDMlcsQ0FBQyxDQUFDcnFCLFFBQVEsQ0FBQ0csSUFBSSxDQUFDdk8sT0FBTyxDQUFDOGhCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMxbEIsQ0FBQyxDQUFDMGpFLGtCQUFrQixDQUFDMWpFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQ3dXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDNmxCLENBQUMsQ0FBQ3FuQyxrQkFBa0IsQ0FBQ3JuQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM3bEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPMU0sQ0FBQyxDQUFDaUksSUFBSSxDQUFDelEsTUFBTSxDQUFDLENBQUMsRUFBRXRCLENBQUMsR0FBR3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzJSLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlsa0MsQ0FBQyxDQUFDLElBQUksQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUMsSUFBSSxDQUFDNmdFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMvMEIsU0FBUyxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQ0gsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQ3p1QyxDQUFDLENBQUNnNkMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDNHBCLFlBQVksQ0FBQyxDQUFDLENBQUM1akUsQ0FBQyxDQUFDby9CLE1BQU0sQ0FBQyxJQUFJLENBQUN5a0MsY0FBYyxDQUFDLENBQUMsQ0FBQ24rQyxDQUFDLENBQUNuaUIsT0FBTyxDQUFDdkQsQ0FBQyxDQUFDeUosUUFBUSxDQUFDLEVBQUUsQ0FBQ3pKLENBQUMsQ0FBQ3lKLFFBQVEsQ0FBQ2ljLENBQUMsQ0FBQ3pQLE1BQU0sQ0FBQ2pXLENBQUMsQ0FBQ3lKLFFBQVEsQ0FBQ2pMLE1BQU0sQ0FBQ2tuQixDQUFDLENBQUN6akIsR0FBRyxDQUFDLElBQUksQ0FBQzZoRSxJQUFJLENBQUNwMkQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDZ1ksQ0FBQyxDQUFDLENBQUMsT0FBTzViLENBQUMsQ0FBQ2c2RCxJQUFJLENBQUNqc0QsS0FBSyxDQUFDNk4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQy9pQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeThCLE1BQU0sQ0FBQyxJQUFJLENBQUN0OEIsT0FBTyxDQUFDczhCLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMya0MsT0FBTyxDQUFDemlFLE1BQU0sQ0FBQyxJQUFJLENBQUNtNkMsV0FBVyxDQUFDejdDLENBQUMsQ0FBQ28vQixNQUFNLENBQUMsQ0FBQzFaLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMG1CLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaE4sTUFBTSxDQUFDOTlCLE1BQU0sRUFBRSxJQUFJLENBQUMwbUIsSUFBSSxDQUFDaG9CLENBQUMsQ0FBQ28vQixNQUFNLENBQUMsQ0FBQyxDQUFDeWtDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkvNUQsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ3M4QixNQUFNLENBQUNwL0IsQ0FBQyxDQUFDLElBQUksQ0FBQzhDLE9BQU8sQ0FBQ2szQyxXQUFXLENBQUMzZCxDQUFDLENBQUNycUIsUUFBUSxDQUFDRCxJQUFJLENBQUMybUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxHQUFHNXVDLENBQUMsRUFBRSxDQUFDdXlCLENBQUMsRUFBRSxJQUFJLENBQUN5bkMsSUFBSSxDQUFDL2hFLElBQUksQ0FBQyxRQUFRLENBQUMvQixDQUFDLENBQUN3VyxDQUFDLENBQUMsQ0FBQyxPQUFPa1AsQ0FBQyxDQUFDbFAsQ0FBQyxDQUFDLENBQUNySCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUdrdEIsQ0FBQyxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRzhKLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsSUFBSSxDQUFDZzZELElBQUksQ0FBQ2pzRCxLQUFLLENBQUMsSUFBSSxDQUFDaXNELElBQUksQ0FBQ3AyRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUc1RCxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUNnNkQsSUFBSSxDQUFDeGlFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDd0ksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUNBLENBQUMsQ0FBQyxJQUFJLENBQUNnNkQsSUFBSSxDQUFDanNELEtBQUssQ0FBQyxJQUFJLENBQUNpc0QsSUFBSSxDQUFDeGhFLEVBQUUsQ0FBQ3dILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUU4SixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDaTZELE9BQU8sQ0FBQ3ppRSxNQUFNLEVBQUUsQ0FBQ3dJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUNva0MsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM4MUIsR0FBRyxDQUFDLElBQUksQ0FBQzVrQyxNQUFNLENBQUM0YixLQUFLLENBQUMsSUFBSSxDQUFDNWIsTUFBTSxDQUFDOTlCLE1BQU0sQ0FBQyxJQUFJLENBQUMyaUUsZUFBZSxDQUFDLElBQUksQ0FBQzdrQyxNQUFNLENBQUMsQ0FBQzFaLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDdytDLFdBQVcsQ0FBQyxRQUFRLENBQUNwNkQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzBsQixDQUFDLENBQUNBLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2bkIsaUJBQWlCLENBQUMsSUFBSSxDQUFDam5CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4WixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUN5a0IsQ0FBQyxDQUFDLElBQUksQ0FBQ3luQyxJQUFJLENBQUNqc0QsS0FBSyxDQUFDN1gsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDMnRELGNBQWMsQ0FBQ3I2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQ0EsQ0FBQyxDQUFDaWdCLE9BQU8sQ0FBQyxDQUFDLEtBQUtyRSxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ3d2QixLQUFLLENBQUMsS0FBSzd6QixDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQyt1QixJQUFJLENBQUN6YyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSzNXLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDMnZCLEVBQUUsQ0FBQyxLQUFLaDBCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDb3ZCLElBQUksQ0FBQzNpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM2bEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUszVyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ2d2QixHQUFHLENBQUMxYyxDQUFDLENBQUMsSUFBSSxDQUFDMG5DLE9BQU8sQ0FBQ3ppRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLb2tCLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDbXZCLElBQUksQ0FBQzdjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUszVyxDQUFDLENBQUM0bUIsRUFBRSxDQUFDdmlCLE9BQU8sQ0FBQ3l2QixLQUFLLENBQUMsT0FBTzF2QyxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDdVIsWUFBWSxDQUFDLElBQUksQ0FBQ3lyQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUNqcEIsU0FBUyxDQUFDOWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSzNXLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDaXZCLEtBQUssQ0FBQyxPQUFPbHZDLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUN1UixZQUFZLENBQUMsSUFBSSxDQUFDeXJDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQ2pwQixTQUFTLENBQUM5ZSxDQUFDLEdBQUcsSUFBSSxDQUFDdjVCLE9BQU8sQ0FBQ3M4QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMvQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDdnlCLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDLENBQUN1UixZQUFZLENBQUMsSUFBSSxDQUFDeXJDLFVBQVUsQ0FBQyxDQUFDL25DLENBQUMsQ0FBQyxJQUFJLENBQUNnb0MsYUFBYSxDQUFDaG9DLENBQUMsQ0FBQzdsQixDQUFDLENBQUMsQ0FBQzFNLENBQUMsQ0FBQ3dmLE9BQU8sRUFBRXhmLENBQUMsQ0FBQzJmLE9BQU8sRUFBRSxDQUFDenBCLENBQUMsQ0FBQ21QLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDMjBELElBQUksQ0FBQ3hoRSxFQUFFLENBQUMrNUIsQ0FBQyxDQUFDLENBQUNsdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUNpMUQsVUFBVSxDQUFDLElBQUksQ0FBQ3IxQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNwc0IsTUFBTSxDQUFDLFFBQVEsQ0FBQzBaLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDN0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4ckMsYUFBYSxDQUFDLFFBQVEsQ0FBQ3g2RCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNxNkQsY0FBYyxDQUFDcjZELENBQUMsQ0FBQyxFQUFFQSxDQUFDLENBQUN3ZixPQUFPLEVBQUV4ZixDQUFDLENBQUNpZ0IsT0FBTyxHQUFHckUsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUMydkIsRUFBRSxFQUFFLENBQUM1dkMsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnWSxNQUFNLENBQUNoWCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDKzdDLGNBQWMsQ0FBQyxRQUFRLENBQUNyNkQsQ0FBQyxDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDb2YsTUFBTSxFQUFFcGYsQ0FBQyxDQUFDaWdCLE9BQU8sR0FBR3JFLENBQUMsQ0FBQzRtQixFQUFFLENBQUN2aUIsT0FBTyxDQUFDc3ZCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQzhCLFNBQVMsQ0FBQyxJQUFJLENBQUNrcEIsYUFBYSxDQUFDLElBQUksQ0FBQ3ZoRSxPQUFPLENBQUNzOEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3QxQixDQUFDLENBQUNvZixNQUFNLEVBQUVwZixDQUFDLENBQUNpZ0IsT0FBTyxHQUFHckUsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNxdkIsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDK0IsU0FBUyxDQUFDLElBQUksQ0FBQ2twQixhQUFhLENBQUMsSUFBSSxDQUFDdmhFLE9BQU8sQ0FBQ3M4QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUNtbEMsWUFBWSxDQUFDLFFBQVEsQ0FBQ3o2RCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxTQUFTcThCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT3Z5QixDQUFDLENBQUMwTSxDQUFDLEVBQUUsQ0FBQzFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSTBNLENBQUMsQ0FBQyxJQUFJLENBQUNzdEQsSUFBSSxDQUFDeGlFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdva0IsQ0FBQyxDQUFDamhCLE9BQU8sQ0FBQzQzQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3Y1QixPQUFPLENBQUMyRyxRQUFRLENBQUMsQ0FBQyxDQUFDSyxDQUFDLENBQUM5SixDQUFDLENBQUM4SixDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU9BLENBQUMsQ0FBQyxDQUFDdTZELGFBQWEsQ0FBQyxRQUFRLENBQUMzK0MsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsT0FBTzRiLENBQUMsQ0FBQyxJQUFJLENBQUM2K0MsWUFBWSxDQUFDNytDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c2RCxJQUFJLENBQUN4aEUsRUFBRSxDQUFDb2pCLENBQUMsQ0FBQyxDQUFDMEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDMUMsQ0FBQyxDQUFDLENBQUM0b0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzVvQixDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxNQUFNLFFBQVEsR0FBRzRiLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3kxQixTQUFTLENBQUNyeEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQytpQyxNQUFNLENBQUNubkIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHNGIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDK29CLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMza0MsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxJQUFJLENBQUNoSCxPQUFPLENBQUNzOEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQytiLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBR3oxQixDQUFDLEVBQUUsSUFBSSxDQUFDMDFCLFlBQVksQ0FBQ3R4QyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUc0YixDQUFDLEVBQUUsSUFBSSxDQUFDOCtDLGlCQUFpQixDQUFDMTZELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzI2RCxpQkFBaUIsQ0FBQyxRQUFRLENBQUMvK0MsQ0FBQyxDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDQSxDQUFDLENBQUM5aEIsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDMjBDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUl6dUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMwa0UsT0FBTyxDQUFDcHRELFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQ3hOLENBQUMsQ0FBQ0wsUUFBUSxDQUFDaWMsQ0FBQyxDQUFDempCLEdBQUcsQ0FBQ2pDLENBQUMsQ0FBQzBOLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQ2dZLENBQUMsQ0FBQyxDQUFDLE9BQU8xbEIsQ0FBQyxDQUFDNlgsS0FBSyxDQUFDNk4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2srQyxZQUFZLENBQUMsQ0FBQyxDQUFDOTVELENBQUMsQ0FBQ3MxQixNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDMmtDLE9BQU8sQ0FBQ3ppRSxNQUFNLENBQUMsSUFBSSxDQUFDODlCLE1BQU0sQ0FBQzk5QixNQUFNLEVBQUUsQ0FBQ29rQixDQUFDLENBQUNwZixRQUFRLENBQUMsSUFBSSxDQUFDbytELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN0bEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMGtDLElBQUksQ0FBQ3hpRSxNQUFNLEdBQUd3SSxDQUFDLENBQUNMLFFBQVEsQ0FBQ25JLE1BQU0sQ0FBQyxDQUFDd0ksQ0FBQyxDQUFDczFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLE1BQU0sQ0FBQzFaLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5MUIsU0FBUyxDQUFDLElBQUksQ0FBQ29wQixZQUFZLENBQUM3Z0UsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQyxDQUFDLENBQUN4bkIsQ0FBQyxDQUFDczFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDczFCLE1BQU0sQ0FBQyxJQUFJLENBQUMwa0MsSUFBSSxDQUFDanNELEtBQUssQ0FBQyxJQUFJLENBQUN1bkIsTUFBTSxDQUFDLENBQUMsQ0FBQ3QxQixDQUFDLENBQUNzMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDMVosQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBtQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNBLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZCLGtCQUFrQixDQUFDLElBQUksQ0FBQ25yQyxPQUFPLENBQUMyRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMyeEMsWUFBWSxDQUFDLElBQUksQ0FBQ3Q0QyxPQUFPLENBQUN1aUIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDbS9DLGlCQUFpQixDQUFDLElBQUksQ0FBQzFoRSxPQUFPLENBQUNvM0MsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDNHBCLElBQUksQ0FBQ2h0RCxHQUFHLENBQUMsSUFBSSxDQUFDc29CLE1BQU0sQ0FBQyxDQUFDandCLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQ2lELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDb3BDLE1BQU0sQ0FBQzFrQyxHQUFHLENBQUMsSUFBSSxDQUFDbXRELGVBQWUsQ0FBQyxJQUFJLENBQUM3a0MsTUFBTSxDQUFDLENBQUMsQ0FBQy9jLElBQUksQ0FBQyxDQUFDLENBQUNsVCxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpd0IsTUFBTSxDQUFDOTlCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzg5QixNQUFNLENBQUNqd0IsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDaUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdzhCLFNBQVMsQ0FBQyxJQUFJLENBQUN4UCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUM2a0MsZUFBZSxDQUFDLElBQUksQ0FBQzdrQyxNQUFNLENBQUMsQ0FBQ2pkLElBQUksQ0FBQyxDQUFDLENBQUNoVCxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzIwRCxJQUFJLENBQUN4aEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDNk0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeTBELFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk5NUQsQ0FBQyxDQUFDLElBQUksQ0FBQzlKLENBQUMsQ0FBQyxJQUFJLENBQUM4akUsSUFBSSxDQUFDem5DLENBQUMsQ0FBQyxJQUFJLENBQUMwbkMsT0FBTyxDQUFDdnRELENBQUMsQ0FBQyxJQUFJLENBQUNnbEMsTUFBTSxDQUFDLElBQUksQ0FBQ2twQixPQUFPLENBQUMsSUFBSSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDeDFELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDeS9CLFNBQVMsQ0FBQyxJQUFJLENBQUM4MUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsT0FBTyxDQUFDei9DLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDdW9CLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDMWpDLENBQUMsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDcFAsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUV4TSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25DLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDdW9CLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOW5CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzlOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQ3RCLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksQ0FBQ3dVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2c1QyxJQUFJLENBQUMsSUFBSSxDQUFDWSxPQUFPLENBQUM5MkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUN1QixJQUFJLENBQUMsQ0FBQ2t0QyxJQUFJLENBQUMsS0FBSyxDQUFDanFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdzhCLFNBQVMsQ0FBQyxJQUFJLENBQUNrMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0QsSUFBSSxDQUFDN2hFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU95akIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2VyxJQUFJLENBQUMsQ0FBQ2t0QyxJQUFJLENBQUMsY0FBYyxDQUFDanFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdzhCLFNBQVMsQ0FBQyxJQUFJLENBQUNtMUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDdm9CLE1BQU0sQ0FBQzkxQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3ErQyxPQUFPLENBQUNoaUUsSUFBSSxDQUFDLFFBQVEsQ0FBQy9CLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ3MxQixDQUFDLENBQUM3a0MsQ0FBQyxDQUFDaWxDLENBQUMsQ0FBQ3htQixDQUFDLENBQUMyVyxDQUFDLENBQUMsQ0FBQ3lkLFFBQVEsQ0FBQyxDQUFDLENBQUMzcUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDbzlCLENBQUMsQ0FBQzdtQixDQUFDLENBQUMyVyxDQUFDLENBQUMsQ0FBQ3prQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUNELENBQUMsQ0FBQzQwQixDQUFDLENBQUNwOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDckYsQ0FBQyxDQUFDMjVELFFBQVEsQ0FBQ3BuQyxDQUFDLENBQUMsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQzZsQixDQUFDLENBQUN0cUIsSUFBSSxDQUFDOUssQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDa2lDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzVNLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUNxaUMsT0FBTyxDQUFDditCLElBQUksQ0FBQzlELENBQUMsQ0FBQzI2RCxpQkFBaUIsQ0FBQ2p1RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQ3NsQyxDQUFDLENBQUNwOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFdVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvMEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3B2QyxFQUFFLENBQUM4TCxDQUFDLENBQUMsR0FBRyxDQUFDdlAsQ0FBQyxDQUFDNmtDLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUNxaUMsT0FBTyxDQUFDditCLElBQUksQ0FBQzRJLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQ3hxQyxNQUFNLEVBQUUsQ0FBQ3dxQyxDQUFDLENBQUNoaUMsQ0FBQyxDQUFDODZELFlBQVksQ0FBQzM5RCxDQUFDLENBQUMsQ0FBQzZrQyxDQUFDLENBQUNuZSxXQUFXLENBQUM3akIsQ0FBQyxDQUFDMHhDLE1BQU0sQ0FBQ3g3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU4SixDQUFDLENBQUM0NkQsT0FBTyxDQUFDLENBQUMsQ0FBQzU0QixDQUFDLENBQUMzOEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDMjhCLENBQUMsQ0FBQ3hxQyxNQUFNLEVBQUUsQ0FBQ3dJLENBQUMsQ0FBQzB4QyxNQUFNLENBQUMxeEMsQ0FBQyxDQUFDMHhDLE1BQU0sQ0FBQ3pqQyxHQUFHLENBQUMrekIsQ0FBQyxDQUFDLENBQUMsQ0FBQ24wQixDQUFDLEVBQUU0MEIsQ0FBQyxDQUFDdnRCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQ3JILENBQUMsQ0FBQyxDQUFDNDBCLENBQUMsQ0FBQ3A5QixJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUNsSSxDQUFDLENBQUMsaUJBQWlCLENBQUNpbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0osQ0FBQyxDQUFDMzhCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQys4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc1AsTUFBTSxDQUFDcnNDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDeS9CLFNBQVMsQ0FBQyxJQUFJLENBQUM0TSxNQUFNLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUN4N0MsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOHVDLElBQUksQ0FBQzl1QyxDQUFDLENBQUM4VyxHQUFHLENBQUMsSUFBSSxDQUFDZ3RELElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaDFCLElBQUksQ0FBQ3pTLENBQUMsQ0FBQ3ZsQixHQUFHLENBQUMsSUFBSSxDQUFDaXRELE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDajFCLElBQUksQ0FBQ3Q0QixDQUFDLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUMwa0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtcEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUNELE9BQU8sRUFBRSxJQUFJLENBQUN2NEIsT0FBTyxDQUFDditCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQ3RMLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDc2lFLFlBQVksQ0FBQyxRQUFRLENBQUM5NkQsQ0FBQyxDQUFDLENBQUMsT0FBTzRiLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ3ZXLElBQUksQ0FBQyxJQUFJLENBQUNyRixDQUFDLENBQUMsQ0FBQ2tWLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNpdkIsa0JBQWtCLENBQUMsUUFBUSxDQUFDbmtDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDN2xCLENBQUMsQ0FBQyxHQUFHLENBQUNrUCxDQUFDLENBQUNuaUIsT0FBTyxDQUFDdUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDeEksTUFBTSxDQUFDd0ksQ0FBQyxDQUFDeEksTUFBTSxHQUFHLElBQUksQ0FBQ3lpRSxPQUFPLENBQUN6aUUsTUFBTSxFQUFFLENBQUN3SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxDQUFDNmxCLENBQUMsQ0FBQyxJQUFJLENBQUN5bkMsSUFBSSxDQUFDdHRELENBQUMsQ0FBQyxDQUFDQSxDQUFDLEVBQUUsQ0FBQ3hXLENBQUMsQ0FBQzBsQixDQUFDLENBQUMyVyxDQUFDLENBQUMsQ0FBQ3Z5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUc0YixDQUFDLENBQUNqaEIsT0FBTyxDQUFDK1IsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQ21QLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDeS9CLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNnNUIsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQ29WLFlBQVksQ0FBQ3B1QyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUMyRyxRQUFRLENBQUNLLENBQUMsQ0FBQyxJQUFJLENBQUMya0MsWUFBWSxDQUFDLElBQUksQ0FBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDUyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQ25qQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDc3hDLFlBQVksQ0FBQyxRQUFRLENBQUN0eEMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhKLENBQUMsRUFBRTRiLENBQUMsQ0FBQzNqQixJQUFJLENBQUMrSCxDQUFDLENBQUN6RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDcWdCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDOEosQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnbEMsSUFBSSxDQUFDLElBQUksQ0FBQ2kxQixPQUFPLENBQUNoc0QsR0FBRyxDQUFDLElBQUksQ0FBQytyRCxJQUFJLENBQUMsQ0FBQy9yRCxHQUFHLENBQUMsSUFBSSxDQUFDeWpDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDM04sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2syQixPQUFPLENBQUMsQ0FBQzc3QyxLQUFLLENBQUMsUUFBUSxDQUFDeEMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzBCLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeW1CLEdBQUcsQ0FBQyxJQUFJLENBQUNrMkIsT0FBTyxDQUFDL2pFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzZ0QyxHQUFHLENBQUMsSUFBSSxDQUFDaTJCLElBQUksQ0FBQyxDQUFDcG9CLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzdOLEdBQUcsQ0FBQyxJQUFJLENBQUMyTixNQUFNLENBQUMsQ0FBQ0UsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDek0sVUFBVSxDQUFDLElBQUksQ0FBQzYwQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM5MEIsVUFBVSxDQUFDLElBQUksQ0FBQzgwQixJQUFJLENBQUMsQ0FBQyxDQUFDVSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMxNkQsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDOFAsT0FBTyxDQUFDajdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHcEgsQ0FBQyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDbEgsTUFBTSxDQUFDLENBQUMsQ0FBQ24xQixDQUFDLEVBQUUsSUFBSSxDQUFDbXNDLE9BQU8sQ0FBQ29ELFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcEQsT0FBTyxDQUFDaFgsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnWCxPQUFPLENBQUM1MUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDeFUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSStILENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzJXLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUNtWCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxHQUFHb2IsQ0FBQyxFQUFFLE9BQU8sR0FBR0EsQ0FBQyxFQUFFLENBQUNyOEIsQ0FBQyxFQUFFOEosQ0FBQyxDQUFDeWxDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3BELE9BQU8sQ0FBQzcwQixRQUFRLENBQUMsQ0FBQyxDQUFDUixHQUFHLENBQUMsSUFBSSxDQUFDMGtDLE1BQU0sQ0FBQyxDQUFDejVDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDL0IsQ0FBQyxFQUFFMGxCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzZwQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaU0sTUFBTSxDQUFDejVDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDMmpCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3lQLE1BQU0sQ0FBQ3p4QixJQUFJLENBQUM0dEIsR0FBRyxDQUFDLENBQUMsQ0FBQ3R4QixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbXhCLFdBQVcsQ0FBQyxDQUFDLENBQUNueEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDeVAsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbFUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBR25YLENBQUMsRUFBRSxDQUFDOUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN3N0MsTUFBTSxDQUFDejVDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDL0IsQ0FBQyxDQUFDMEQsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQ3R4QixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDeVAsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxNQUFNLENBQUNuMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDczdDLGFBQWEsQ0FBQyxRQUFRLENBQUN4eEMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUN1NUIsQ0FBQyxDQUFDLElBQUksQ0FBQytDLE1BQU0sQ0FBQzVvQixDQUFDLENBQUNrUCxDQUFDLENBQUM1YixDQUFDLENBQUNtZCxhQUFhLENBQUMsQ0FBQzZrQixDQUFDLENBQUN0MUIsQ0FBQyxDQUFDb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDM1EsQ0FBQyxDQUFDNmtDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR3pQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzZQLENBQUMsQ0FBQ2psQyxDQUFDLEVBQUVqSCxDQUFDLENBQUNnNkMsV0FBVyxDQUFDek4sQ0FBQyxDQUFDTCxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN1K0MsZUFBZSxDQUFDbjRCLENBQUMsQ0FBQyxDQUFDbjBCLENBQUMsQ0FBQzBrQixDQUFDLENBQUMvNkIsTUFBTSxDQUFDLElBQUksQ0FBQzJpRSxlQUFlLENBQUM1bkMsQ0FBQyxDQUFDLENBQUMzVyxDQUFDLENBQUMsQ0FBQyxDQUFDbXBCLENBQUMsQ0FBQyxDQUFDZzJCLE1BQU0sQ0FBQ3hvQyxDQUFDLENBQUN1ZixRQUFRLENBQUNqa0MsQ0FBQyxDQUFDbXRELE1BQU0sQ0FBQzU0QixDQUFDLENBQUN4bUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ29tQixDQUFDLENBQUNnUSxRQUFRLENBQUN2UCxDQUFDLENBQUMsQ0FBQ3ppQyxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQyxDQUFDMGtCLENBQUMsQ0FBQ3BSLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFb1IsQ0FBQyxDQUFDcFIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDaXBDLE9BQU8sRUFBRTE4RCxDQUFDLEVBQUUsQ0FBQ2pILENBQUMsQ0FBQ2c2QyxXQUFXLEVBQUUsSUFBSSxDQUFDM04sUUFBUSxDQUFDLGdCQUFnQixDQUFDdmlDLENBQUMsQ0FBQytrQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDN3VDLENBQUMsQ0FBQ28vQixNQUFNLENBQUM4TSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNDNCLElBQUksQ0FBQ2pzRCxLQUFLLENBQUNpMEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMU0sTUFBTSxDQUFDbjRCLENBQUMsQ0FBQ3llLENBQUMsQ0FBQyxDQUFDLENBQUNvbUIsQ0FBQyxDQUFDLElBQUksQ0FBQ2pKLEdBQUcsRUFBRSxJQUFJLENBQUNBLEdBQUcsQ0FBQ3RCLEtBQUssQ0FBQyxDQUFDLENBQUM1cEIsQ0FBQyxDQUFDclcsTUFBTSxFQUFFaXJDLENBQUMsQ0FBQ2pyQyxNQUFNLEVBQUVva0IsQ0FBQyxDQUFDNWhCLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDeW9DLENBQUMsQ0FBQ2pyQyxNQUFNLEVBQUUsSUFBSSxDQUFDMG1CLElBQUksQ0FBQyxJQUFJLENBQUM4N0MsSUFBSSxDQUFDanNELEtBQUssQ0FBQ2kwQixDQUFDLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpeUMsT0FBTyxDQUFDanlDLENBQUMsQ0FBQytrQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrTixPQUFPLENBQUMsUUFBUSxDQUFDanlDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLFNBQVNxOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lQLENBQUMsQ0FBQzYzQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM3M0IsQ0FBQyxDQUFDTyxRQUFRLENBQUMsVUFBVSxDQUFDdmlDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLFNBQVN3VyxDQUFDLENBQUMsQ0FBQyxDQUFDczFCLENBQUMsQ0FBQzhDLFNBQVMsQ0FBQzV1QyxDQUFDLENBQUM4a0UsTUFBTSxDQUFDbHRELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDM1EsQ0FBQyxDQUFDM0YsTUFBTSxFQUFFd3FDLENBQUMsQ0FBQ2hwQyxPQUFPLENBQUNxZixJQUFJLENBQUMycEIsQ0FBQyxDQUFDNnJCLEtBQUssQ0FBQzF3RCxDQUFDLENBQUM2a0MsQ0FBQyxDQUFDaHBDLE9BQU8sQ0FBQ3FmLElBQUksQ0FBQ2thLENBQUMsQ0FBQyxDQUFDLENBQUNwMUIsQ0FBQyxDQUFDa2IsSUFBSSxDQUFDLENBQUMsQ0FBQ2thLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJeVAsQ0FBQyxDQUFDLElBQUksQ0FBQzdrQyxDQUFDLENBQUNqSCxDQUFDLENBQUM4N0MsUUFBUSxDQUFDNVAsQ0FBQyxDQUFDbHNDLENBQUMsQ0FBQzQ3QyxRQUFRLENBQUMsSUFBSSxDQUFDK25CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3ozQixDQUFDLENBQUM1cUMsTUFBTSxFQUFFLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQ3VmLElBQUksQ0FBQyxJQUFJLENBQUM2MEMsS0FBSyxDQUFDaHJCLENBQUMsQ0FBQyxJQUFJLENBQUNwcEMsT0FBTyxDQUFDdWYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUN5cEIsQ0FBQyxDQUFDc0MsWUFBWSxDQUFDcHVDLENBQUMsQ0FBQzZrRSxNQUFNLENBQUNqdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUNwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzQzQixZQUFZLENBQUNwdUMsQ0FBQyxDQUFDNmtFLE1BQU0sQ0FBQ2p0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3MwQixDQUFDLENBQUM3cEIsSUFBSSxDQUFDLENBQUMsQ0FBQzdMLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzAxQixDQUFDLENBQUMvOEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQ25QLENBQUMsQ0FBQzZrRSxNQUFNLENBQUMxMUQsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ2xJLENBQUMsQ0FBQzNGLE1BQU0sRUFBRTRxQyxDQUFDLENBQUM1cUMsTUFBTSxDQUFDdEIsQ0FBQyxDQUFDNmtFLE1BQU0sQ0FBQzExRCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNsSSxDQUFDLENBQUMzRixNQUFNLEVBQUUsSUFBSSxDQUFDd2lFLElBQUksQ0FBQ3AyRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBR2dZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3ZXLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNBLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xJLENBQUMsQ0FBQ2tJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUNuUCxDQUFDLENBQUM4a0UsTUFBTSxDQUFDMzFELElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQ2lELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrb0MsU0FBUyxDQUFDLFFBQVEsQ0FBQ3J4QyxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUNvZixXQUFXLENBQUMzeEMsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQytDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDL0MsQ0FBQyxDQUFDLzZCLE1BQU0sRUFBRSxDQUFDKzZCLENBQUMsQ0FBQyxJQUFJLENBQUMrQyxNQUFNLENBQUMsQ0FBQ3AvQixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDenVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzB0QyxhQUFhLENBQUMsQ0FBQ240QyxNQUFNLENBQUNuRCxDQUFDLENBQUNpbkIsYUFBYSxDQUFDam5CLENBQUMsQ0FBQ29uQixjQUFjLENBQUMxQixDQUFDLENBQUMxaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5M0MsV0FBVyxDQUFDLFFBQVEsQ0FBQzN4QyxDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM0YixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ28rQyxJQUFJLENBQUN4aEUsRUFBRSxDQUFDd0gsQ0FBQyxDQUFDLENBQUMsQ0FBQ2k3RCxTQUFTLENBQUMsUUFBUSxDQUFDajdELENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU9BLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUMsSUFBSSxDQUFDaTZELE9BQU8sQ0FBQ2xzRCxLQUFLLENBQUMsSUFBSSxDQUFDa3NELE9BQU8sQ0FBQ3IyRCxNQUFNLENBQUMsVUFBVSxDQUFDZ1ksQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ24yQixjQUFjLENBQUNyTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDcWtDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3RMLEdBQUcsRUFBRSxJQUFJLENBQUNBLEdBQUcsQ0FBQ3RCLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbWpDLE9BQU8sQ0FBQzFyQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMxVCxHQUFHLENBQUMsSUFBSSxDQUFDa29CLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQ3UyQixPQUFPLENBQUMvcUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDK2dCLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDK3BCLElBQUksQ0FBQy9yRCxHQUFHLENBQUMsSUFBSSxDQUFDeWpDLE1BQU0sQ0FBQyxDQUFDejVDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDMmpCLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzBHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2xNLE1BQU0sQ0FBQyxDQUFDLENBQUNrTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNzVCxVQUFVLENBQUMsMkZBQTJGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOHFDLElBQUksQ0FBQy9oRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJK0gsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDMWxCLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ2tWLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDaGYsQ0FBQyxDQUFDOEosQ0FBQyxDQUFDcUYsSUFBSSxDQUFDLGVBQWUsQ0FBQ25QLENBQUMsQ0FBQyxDQUFDMmYsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM3VixDQUFDLENBQUNrdkIsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN3aUIsTUFBTSxDQUFDcjVCLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQ3JmLE9BQU8sQ0FBQ28zQyxXQUFXLEVBQUUsSUFBSSxDQUFDc0IsTUFBTSxDQUFDdjZCLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ3l0QixNQUFNLENBQUMsUUFBUSxDQUFDNWtDLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDOEMsT0FBTyxDQUFDMkcsUUFBUSxDQUFDekosQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUc4SixDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQyxJQUFJLENBQUNpN0QsU0FBUyxDQUFDajdELENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQ25pQixPQUFPLENBQUN2RCxDQUFDLENBQUMsQ0FBQzBsQixDQUFDLENBQUN6akIsR0FBRyxDQUFDakMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzBsQixDQUFDLENBQUMsQ0FBQyxPQUFPQSxDQUFDLEdBQUc1YixDQUFDLENBQUM0YixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDempCLEdBQUcsQ0FBQyxJQUFJLENBQUM2aEUsSUFBSSxDQUFDLFFBQVEsQ0FBQ3ArQyxDQUFDLENBQUMxbEIsQ0FBQyxDQUFDLENBQUMsT0FBT0EsQ0FBQyxHQUFHOEosQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNpdUMsa0JBQWtCLENBQUNqdUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMFosT0FBTyxDQUFDLFFBQVEsQ0FBQzVQLENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMsSUFBSSxDQUFDOEMsT0FBTyxDQUFDMkcsUUFBUSxDQUFDLEVBQUUsQ0FBQ3pKLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRzhKLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDOEosQ0FBQyxDQUFDLElBQUksQ0FBQ2k3RCxTQUFTLENBQUNqN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc0YixDQUFDLENBQUNqaEIsT0FBTyxDQUFDcUYsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDQSxDQUFDLENBQUMwbEIsQ0FBQyxDQUFDbmlCLE9BQU8sQ0FBQ3ZELENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzdqQixLQUFLLENBQUMsQ0FBQ2lJLENBQUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNtSCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNta0Msa0JBQWtCLENBQUNqdUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDZ29CLElBQUksQ0FBQyxRQUFRLENBQUNsZSxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQyxJQUFJLENBQUNpN0QsU0FBUyxDQUFDajdELENBQUMsQ0FBQyxDQUFDLElBQUl1eUIsQ0FBQyxDQUFDLElBQUksQ0FBQzdsQixDQUFDLENBQUMsSUFBSSxDQUFDc3RELElBQUksQ0FBQ3hoRSxFQUFFLENBQUN3SCxDQUFDLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUN0MUIsQ0FBQyxDQUFDNUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMzRyxDQUFDLENBQUMsSUFBSSxDQUFDZzlELGVBQWUsQ0FBQ3p0RCxDQUFDLENBQUMsQ0FBQzAxQixDQUFDLENBQUMsQ0FBQzgzQixHQUFHLENBQUN4dEQsQ0FBQyxDQUFDd2tDLEtBQUssQ0FBQy96QyxDQUFDLENBQUMsQ0FBQ3NsQyxDQUFDLENBQUMsUUFBUSxDQUFDN21CLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBR0EsQ0FBQyxFQUFFdXlCLENBQUMsQ0FBQ21mLE1BQU0sQ0FBQ3Q3QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ21jLENBQUMsQ0FBQytSLFlBQVksQ0FBQzUzQixDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQyt4QixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUN0VCxDQUFDLEdBQUcyVyxDQUFDLENBQUN3RyxHQUFHLEVBQUUsT0FBT3hHLENBQUMsQ0FBQ3dHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzRnQyxRQUFRLENBQUMzM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNqSixHQUFHLENBQUNuZCxDQUFDLENBQUN5YSxJQUFJLENBQUMsSUFBSSxDQUFDNmtDLGFBQWEsQ0FBQ2w1QixDQUFDLENBQUM5ckMsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDckosR0FBRyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUNBLEdBQUcsQ0FBQ3JCLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQ29OLFNBQVMsQ0FBQ3A0QixDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3ZQLENBQUMsQ0FBQ2tJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDMHpCLEdBQUcsQ0FBQ244QixJQUFJLENBQUMsUUFBUSxDQUFDZ2YsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUM4RixVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3JWLENBQUMsQ0FBQ3VsQixJQUFJLENBQUM5RyxDQUFDLENBQUMsQ0FBQzJXLENBQUMsQ0FBQ2dRLFFBQVEsQ0FBQyxNQUFNLENBQUNyc0MsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQyxDQUFDSyxDQUFDLENBQUMvMUIsQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5USxJQUFJLENBQUMsUUFBUSxDQUFDbUwsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUN3UyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ2l3QixDQUFDLENBQUM3bUIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNrN0QsYUFBYSxDQUFDLFFBQVEsQ0FBQ2w3RCxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQytvQixHQUFHLENBQUN6MUIsQ0FBQyxDQUFDcUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDdkwsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQ20rQixVQUFVLENBQUMsUUFBUSxDQUFDajRCLENBQUMsQ0FBQ2dpQyxDQUFDLENBQUMsQ0FBQyxPQUFPdDFCLENBQUMsQ0FBQzYxQixRQUFRLENBQUMsWUFBWSxDQUFDcnNDLENBQUMsQ0FBQzBsQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUM2NkIsS0FBSyxDQUFDNXpCLENBQUMsQ0FBQ28wQixZQUFZLENBQUM0TixDQUFDLENBQUMsQ0FBQ3pQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM0bkMsZUFBZSxDQUFDLFFBQVEsQ0FBQ242RCxDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDcUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDZzlCLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsSUFBSSxDQUFDNjJELGlCQUFpQixDQUFDLEdBQUcsQ0FBQ3prRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzB2QixZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUUxdkIsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxTQUFTLENBQUM5bUIsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3czQixJQUFJLENBQUMsQ0FBQ0YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOTJCLFdBQVcsQ0FBQzFxQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUN3c0MsU0FBUyxDQUFDLElBQUksQ0FBQ2sxQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNwK0MsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3czQixJQUFJLENBQUNwK0MsQ0FBQyxDQUFDOG1CLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQzVyQyxPQUFPLENBQUMsUUFBUSxDQUFDa0MsT0FBTyxDQUFDLENBQUNtM0IsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLGdDQUFnQyxDQUFDLENBQUN6aEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTFPLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3ZXLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBT3VXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQ3RsQixJQUFJLENBQUMwSixDQUFDLENBQUMsQ0FBQzBpQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNuSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM4NUIsS0FBSyxDQUFDLHlCQUF5QixDQUFDbnRCLFFBQVEsQ0FBQyxDQUFDNmhCLEVBQUUsQ0FBQyxhQUFhLENBQUNMLEVBQUUsQ0FBQyxhQUFhLENBQUNGLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQ251QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM4aUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDaG5CLEtBQUssQ0FBQyxJQUFJLENBQUM5YSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMraEMsZUFBZSxDQUFDLFFBQVEsQ0FBQ3A3RCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3FGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOUosS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDZzNCLENBQUMsQ0FBQzU5QixJQUFJLENBQUN1QixDQUFDLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ2tWLElBQUksQ0FBQyxlQUFlLENBQUNoZixDQUFDLENBQUMsQ0FBQ21QLElBQUksQ0FBQyxrQkFBa0IsQ0FBQ3VXLENBQUMsQ0FBQ3BoQixJQUFJLENBQUMrM0IsQ0FBQyxDQUFDcnhCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ202RCxrQkFBa0IsQ0FBQyxRQUFRLENBQUNyN0QsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQzhKLENBQUMsQ0FBQ2tWLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ3FkLENBQUMsQ0FBQyxDQUFDdnlCLENBQUMsQ0FBQ3FGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOUosS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDbVIsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDamhCLE9BQU8sQ0FBQ3pFLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRzdsQixDQUFDLEVBQUU2bEIsQ0FBQyxDQUFDejVCLE1BQU0sQ0FBQzRULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzFNLENBQUMsQ0FBQzZWLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQzBjLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ3BoQixJQUFJLENBQUMrM0IsQ0FBQyxDQUFDcnhCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDcXhCLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUNxRixJQUFJLENBQUMsa0JBQWtCLENBQUNrdEIsQ0FBQyxDQUFDLENBQUN2eUIsQ0FBQyxDQUFDa3ZCLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNnVixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNILEdBQUcsQ0FBQyxDQUFDdTNCLFNBQVMsQ0FBQyxNQUFNLENBQUN0cUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdXFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNudEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21uQyxVQUFVLENBQUMzNUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDdlcsSUFBSSxDQUFDLENBQUNrdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDNXVCLFFBQVEsQ0FBQyxJQUFJLENBQUMzdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDbWtCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQzJzQixTQUFTLENBQUMsSUFBSSxDQUFDeVEsVUFBVSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQ2ltQixjQUFjLENBQUM1L0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRvQixVQUFVLENBQUMsUUFBUSxDQUFDeGtDLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDLElBQUlxOEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUN3USxNQUFNLENBQUMvaUMsQ0FBQyxDQUFDOUosQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHOEosQ0FBQyxFQUFFNGIsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQyxJQUFJLENBQUNzakUsUUFBUSxDQUFDLFFBQVEsQ0FBQzMvQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQ3V5QixDQUFDLENBQUNrcEMsY0FBYyxDQUFDejdELENBQUMsQ0FBQ3FpQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQ3ZvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM4L0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTE3RCxDQUFDLENBQUMsSUFBSSxDQUFDNGIsQ0FBQyxDQUFDM2pCLElBQUksQ0FBQyxJQUFJLENBQUNzakUsUUFBUSxDQUFDLFFBQVEsQ0FBQ3JsRSxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsSUFBSTdsQixDQUFDLENBQUNrUCxDQUFDLENBQUNrQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUNwUixDQUFDLENBQUNyVCxNQUFNLENBQUNxVCxDQUFDLENBQUN5USxhQUFhLENBQUNvVixDQUFDLENBQUM4UCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNyaUMsQ0FBQyxDQUFDbTBDLEtBQUssQ0FBQ3puQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOHVELGNBQWMsQ0FBQyxJQUFJLENBQUNBLGNBQWMsQ0FBQ3Z0RCxHQUFHLENBQUMsSUFBSSxDQUFDbzBCLE9BQU8sQ0FBQ3YrQixJQUFJLENBQUMsSUFBSSxDQUFDOUssT0FBTyxDQUFDcTVDLEtBQUssQ0FBQyxDQUFDbmtDLE9BQU8sQ0FBQyxDQUFDLENBQUN0SyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJNUQsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU81YixDQUFDLENBQUN3TSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUN4TSxDQUFDLENBQUNrVixJQUFJLENBQUMsa0JBQWtCLENBQUNsVixDQUFDLENBQUNxRixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzZwQixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lzQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNILGNBQWMsQ0FBQ3ZqRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJK0gsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDa1YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUVsVixDQUFDLENBQUNxRixJQUFJLENBQUMsT0FBTyxDQUFDckYsQ0FBQyxDQUFDa1YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc21ELGNBQWMsQ0FBQzUvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeWQsSUFBSSxDQUFDLFFBQVEsQ0FBQ3I1QixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDLElBQUksQ0FBQ3E4QixDQUFDLENBQUMzVyxDQUFDLENBQUM1YixDQUFDLENBQUNBLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQyxJQUFJLENBQUNncEMsT0FBTyxDQUFDLENBQUN2MEIsT0FBTyxDQUFDLElBQUksQ0FBQzlVLE9BQU8sQ0FBQ3E1QyxLQUFLLENBQUMsQ0FBQzlmLENBQUMsQ0FBQy82QixNQUFNLEVBQUUsQ0FBQys2QixDQUFDLENBQUNyZCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQ3FkLENBQUMsQ0FBQ2x0QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUVrdEIsQ0FBQyxDQUFDcmQsSUFBSSxDQUFDLGtCQUFrQixDQUFDcWQsQ0FBQyxDQUFDbHRCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDa3RCLENBQUMsQ0FBQ3JkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbFYsQ0FBQyxFQUFFLFdBQVcsR0FBR0EsQ0FBQyxDQUFDdEssSUFBSSxFQUFFNjhCLENBQUMsQ0FBQ25rQixPQUFPLENBQUMsQ0FBQyxDQUFDblcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSStILENBQUMsQ0FBQ3V5QixDQUFDLENBQUMzVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMyVyxDQUFDLENBQUNyZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDbFYsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDa0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOWQsQ0FBQyxDQUFDM0csTUFBTSxDQUFDMkcsQ0FBQyxDQUFDbWQsYUFBYSxDQUFDLElBQUksQ0FBQ2puQixDQUFDLENBQUNpK0MsS0FBSyxDQUFDbjBDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN1eUIsQ0FBQyxDQUFDbHRCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDa3RCLENBQUMsQ0FBQ3lkLFFBQVEsQ0FBQyxDQUFDLENBQUM5NUMsQ0FBQyxDQUFDa1ksT0FBTyxDQUFDLElBQUksQ0FBQ3hOLEVBQUUsQ0FBQyxDQUFDLENBQUN5aEMsT0FBTyxDQUFDLElBQUksQ0FBQ3NXLEtBQUssQ0FBQ3BtQixDQUFDLENBQUNsdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNrdEIsQ0FBQyxDQUFDbHRCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdTJELHNCQUFzQixDQUFDNTdELENBQUMsQ0FBQ3V5QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNrcEMsY0FBYyxDQUFDbHBDLENBQUMsQ0FBQ3Z5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5N0QsY0FBYyxDQUFDLFFBQVEsQ0FBQzcvQyxDQUFDLENBQUM1YixDQUFDLENBQUMsQ0FBQyxJQUFJOUosQ0FBQyxDQUFDcThCLENBQUMsQ0FBQyxJQUFJLENBQUN2NUIsT0FBTyxDQUFDMFYsT0FBTyxDQUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQ3MxQixDQUFDLENBQUNoaUMsQ0FBQyxDQUFDQSxDQUFDLENBQUN0SyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU82OEIsQ0FBQyxFQUFFQSxDQUFDLENBQUNoOUIsUUFBUSxFQUFFZzlCLENBQUMsQ0FBQ2o3QixNQUFNLENBQUMsSUFBSSxDQUFDdThDLEtBQUssQ0FBQzd6QyxDQUFDLENBQUM0YixDQUFDLENBQUMyVyxDQUFDLENBQUMsQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ3E4QixDQUFDLENBQUNwOUIsSUFBSSxDQUFDeW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMxbEIsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUN1NEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNycEIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQ2xWLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUN0SyxJQUFJLENBQUNzc0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDNlIsS0FBSyxDQUFDN3pDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsRUFBRSxJQUFJLENBQUMyOUMsS0FBSyxDQUFDN3pDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMyOUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzd6QyxDQUFDLENBQUM5SixDQUFDLENBQUNxOEIsQ0FBQyxDQUFDLENBQUMsU0FBUzdsQixDQUFDLENBQUNrUCxDQUFDLENBQUMsQ0FBQy9OLENBQUMsQ0FBQ3M0QixFQUFFLENBQUN2cUIsQ0FBQyxDQUFDemUsQ0FBQyxDQUFDcVAsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFclAsQ0FBQyxDQUFDK25CLFFBQVEsQ0FBQ3JYLENBQUMsQ0FBQyxDQUFDLElBQUltMEIsQ0FBQyxDQUFDN2tDLENBQUMsQ0FBQ2lsQyxDQUFDLENBQUNLLENBQUMsQ0FBQzUwQixDQUFDLENBQUMrTixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDa3NCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3FOLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ3lQLENBQUMsQ0FBQyxJQUFJLENBQUM2NUIsS0FBSyxDQUFDM2xFLENBQUMsQ0FBQyxDQUFDLE9BQU84ckMsQ0FBQyxDQUFDODVCLE9BQU8sQ0FBQ2g0RCxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQzRlLElBQUksQ0FBQzZQLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDcjhCLENBQUMsQ0FBQ3NXLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDeE0sQ0FBQyxFQUFFLFdBQVcsR0FBR0EsQ0FBQyxDQUFDdEssSUFBSSxDQUFDUSxDQUFDLENBQUNtUCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDblAsQ0FBQyxDQUFDZzVCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOFMsQ0FBQyxDQUFDLElBQUksQ0FBQys1QixRQUFRLENBQUM3bEUsQ0FBQyxDQUFDLENBQUNpSCxDQUFDLENBQUM2a0MsQ0FBQyxDQUFDODVCLE9BQU8sQ0FBQyxJQUFJLENBQUNWLGVBQWUsQ0FBQ2xsRSxDQUFDLENBQUNpSCxDQUFDLENBQUNrSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2xJLENBQUMsQ0FBQzJHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDNGUsSUFBSSxDQUFDNlAsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ2pCLFVBQVUsQ0FBQy9uQyxRQUFRLENBQUMsQ0FBQyxDQUFDK0ssSUFBSSxDQUFDLENBQUMsQ0FBQ2txQixDQUFDLENBQUM3bUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDOEcsSUFBSSxDQUFDdmxCLENBQUMsQ0FBQzJHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDNGUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDK2YsQ0FBQyxDQUFDdlQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDcHJCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQ29yQixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUN1VCxDQUFDLENBQUN2VCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUNwckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDb3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQ3VULENBQUMsQ0FBQzllLFFBQVEsQ0FBQyxJQUFJLENBQUM0eEIsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDdjhDLE9BQU8sQ0FBQ21pRSxLQUFLLEVBQUVuN0QsQ0FBQyxFQUFFLFFBQVEsQ0FBQ2dCLElBQUksQ0FBQ2hCLENBQUMsQ0FBQ3RLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDcXVDLEdBQUcsQ0FBQyxJQUFJLENBQUMvdkMsUUFBUSxDQUFDLENBQUNnb0UsU0FBUyxDQUFDdHZELENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzFNLENBQUMsQ0FBQyxDQUFDLENBQUM3QyxDQUFDLENBQUMrbkIsUUFBUSxDQUFDdEosQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxDQUFDb3RDLEVBQUUsQ0FBQ2p3QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4QyxPQUFPLENBQUNrc0IsUUFBUSxDQUFDLENBQUMsQ0FBQy9uQixDQUFDLENBQUNvYixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3MxQyxLQUFLLENBQUMxd0QsQ0FBQyxDQUFDLElBQUksQ0FBQ25FLE9BQU8sQ0FBQ3FmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQ3JmLE9BQU8sQ0FBQ21pRSxLQUFLLEVBQUUsSUFBSSxDQUFDbmlFLE9BQU8sQ0FBQ3FmLElBQUksRUFBRSxJQUFJLENBQUNyZixPQUFPLENBQUNxZixJQUFJLENBQUNxVyxLQUFLLEVBQUUsQ0FBQzBULENBQUMsQ0FBQyxJQUFJLENBQUM2NUIsV0FBVyxDQUFDQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQy8rRCxDQUFDLENBQUNxUCxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQ0UsQ0FBQyxDQUFDbUIsQ0FBQyxDQUFDczRCLEVBQUUsQ0FBQyxDQUFDZzJCLGFBQWEsQ0FBQy81QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN4bUIsQ0FBQyxDQUFDcU8sRUFBRSxDQUFDZSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3VYLFFBQVEsQ0FBQyxNQUFNLENBQUN2aUMsQ0FBQyxDQUFDLENBQUM4N0QsT0FBTyxDQUFDMytELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDeStELHNCQUFzQixDQUFDLFFBQVEsQ0FBQzU3RCxDQUFDLENBQUM5SixDQUFDLENBQUMsQ0FBQyxJQUFJcThCLENBQUMsQ0FBQyxDQUFDa21CLEtBQUssQ0FBQyxRQUFRLENBQUN6NEMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDQSxDQUFDLENBQUNpZ0IsT0FBTyxHQUFHckUsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3ZpQixPQUFPLENBQUNrdkIsTUFBTSxDQUFDLENBQUMsSUFBSTVjLENBQUMsQ0FBQzNXLENBQUMsQ0FBQ2tDLEtBQUssQ0FBQzlkLENBQUMsQ0FBQyxDQUFDdXlCLENBQUMsQ0FBQ3BWLGFBQWEsQ0FBQ2puQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDaStDLEtBQUssQ0FBQzVoQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3I4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDbXNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOVAsQ0FBQyxDQUFDN2lCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzBzRCxjQUFjLENBQUMsSUFBSSxDQUFDUCxLQUFLLENBQUMzbEUsQ0FBQyxDQUFDLENBQUM0bEUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOTdELENBQUMsRUFBRSxXQUFXLEdBQUdBLENBQUMsQ0FBQ3RLLElBQUksRUFBRSxDQUFDNjhCLENBQUMsQ0FBQ3JSLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQ2xoQixDQUFDLEVBQUUsU0FBUyxHQUFHQSxDQUFDLENBQUN0SyxJQUFJLEVBQUUsQ0FBQzY4QixDQUFDLENBQUM2UyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDN3RDLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxDQUFDNGhCLEtBQUssQ0FBQyxRQUFRLENBQUNuMEMsQ0FBQyxDQUFDLENBQUMsSUFBSTlKLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsSUFBSSxDQUFDN2xCLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzViLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDbWQsYUFBYSxDQUFDLElBQUksQ0FBQ2tsQixPQUFPLENBQUMsQ0FBQ0wsQ0FBQyxDQUFDLElBQUksQ0FBQzY1QixLQUFLLENBQUNudkQsQ0FBQyxDQUFDLENBQUMsT0FBT3MxQixDQUFDLENBQUMsQ0FBQzlyQyxDQUFDLENBQUM4ckMsQ0FBQyxDQUFDODVCLE9BQU8sQ0FBQzk1QixDQUFDLENBQUNxNkIsT0FBTyxFQUFFLENBQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUNGLFdBQVcsQ0FBQyxDQUFDdnZELENBQUMsQ0FBQ3dJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUN4SSxDQUFDLENBQUNySCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUVxSCxDQUFDLENBQUNySCxJQUFJLENBQUMsT0FBTyxDQUFDcUgsQ0FBQyxDQUFDd0ksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNtbUQsa0JBQWtCLENBQUMzdUQsQ0FBQyxDQUFDLENBQUNzMUIsQ0FBQyxDQUFDczZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3BtRSxDQUFDLENBQUNrZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZzNDLEtBQUssQ0FBQ2wzRCxDQUFDLENBQUMsSUFBSSxDQUFDOEMsT0FBTyxDQUFDdWYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNnYSxDQUFDLENBQUM2cEMsY0FBYyxDQUFDeGdELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQ21KLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQ212QixJQUFJLENBQUN0NEIsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzJDLElBQUksQ0FBQ3Q0QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDczRCLElBQUksQ0FBQyxJQUFJLENBQUNoeEMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDZ00sQ0FBQyxFQUFFLFlBQVksR0FBR0EsQ0FBQyxDQUFDdEssSUFBSSxFQUFFa21CLENBQUMsQ0FBQzNqQixJQUFJLENBQUMsSUFBSSxDQUFDbVcsT0FBTyxDQUFDLFFBQVEsQ0FBQ3BPLENBQUMsQ0FBQzlKLENBQUMsQ0FBQyxDQUFDMGxCLENBQUMsQ0FBQzFsQixDQUFDLENBQUNtc0MsT0FBTyxDQUFDLENBQUNoOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQ25QLENBQUMsQ0FBQ3lpRCxLQUFLLENBQUMsQ0FBQyxPQUFPcG1CLENBQUMsQ0FBQ25rQixPQUFPLENBQUNwTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNnaUMsQ0FBQyxDQUFDcTZCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM5NUIsUUFBUSxDQUFDLE9BQU8sQ0FBQ3ZpQyxDQUFDLENBQUMsQ0FBQzg3RCxPQUFPLENBQUM1bEUsQ0FBQyxDQUFDLENBQUMsQ0FBQzhyQyxDQUFDLENBQUNzNkIsTUFBTSxFQUFFLENBQUN0NkIsQ0FBQyxDQUFDcTZCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDM3ZELENBQUMsQ0FBQ21KLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ2ttRCxRQUFRLENBQUMsUUFBUSxDQUFDLzdELENBQUMsQ0FBQyxDQUFDLElBQUk5SixDQUFDLENBQUMwbEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDdlcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQ2t0QixDQUFDLENBQUMzVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMrSCxRQUFRLENBQUN6dEIsQ0FBQyxDQUFDLENBQUN3VyxDQUFDLENBQUN4VyxDQUFDLENBQUM4NUMsUUFBUSxDQUFDLENBQUMsQ0FBQzNxQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUN5L0IsU0FBUyxDQUFDdlMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDdVMsU0FBUyxDQUFDNXVDLENBQUMsQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDeXRCLFFBQVEsQ0FBQyxJQUFJLENBQUN5eEIsU0FBUyxDQUFDcDFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDdTdELFFBQVEsQ0FBQzd1RCxDQUFDLENBQUMsQ0FBQyxDQUFDMjFCLE9BQU8sQ0FBQ3JpQyxDQUFDLENBQUM4N0QsT0FBTyxDQUFDNWxFLENBQUMsQ0FBQyxDQUFDLENBQUMybEUsS0FBSyxDQUFDLFFBQVEsQ0FBQ2pnRCxDQUFDLENBQUMsQ0FBQyxJQUFJNWIsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDMUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU9sVixDQUFDLENBQUMsSUFBSSxDQUFDdTdELFFBQVEsQ0FBQ3Y3RCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ284RCxjQUFjLENBQUMsUUFBUSxDQUFDeGdELENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNsTSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDNnJELFFBQVEsQ0FBQzMvQyxDQUFDLENBQUN2VyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDK3ZDLFNBQVMsQ0FBQyxRQUFRLENBQUN4NUIsQ0FBQyxDQUFDLENBQUMsSUFBSTViLENBQUMsQ0FBQzRiLENBQUMsQ0FBQzlOLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU85TixDQUFDLENBQUN4SSxNQUFNLEVBQUUsQ0FBQ3dJLENBQUMsQ0FBQyxJQUFJLENBQUNoTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNta0IsSUFBSSxDQUFDLENBQUNuWSxDQUFDLENBQUMsQ0FBQ3FrQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJcmtDLENBQUMsQ0FBQyxJQUFJLENBQUM0YixDQUFDLENBQUMzakIsSUFBSSxDQUFDLElBQUksQ0FBQ3NqRSxRQUFRLENBQUMsUUFBUSxDQUFDcmxFLENBQUMsQ0FBQ3E4QixDQUFDLENBQUMsQ0FBQyxJQUFJN2xCLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQ2tDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQ2trQixDQUFDLENBQUN6UCxDQUFDLENBQUM4UCxPQUFPLENBQUMzMUIsQ0FBQyxDQUFDclQsTUFBTSxDQUFDcVQsQ0FBQyxDQUFDeVEsYUFBYSxDQUFDNmtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2hpQyxDQUFDLENBQUNtMEMsS0FBSyxDQUFDem5DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa1AsQ0FBQyxDQUFDLEdBQUcsQ0FBQzFsQixDQUFDLENBQUMsQ0FBQ3daLE1BQU0sQ0FBQyxDQUFDLENBQUNzeUIsQ0FBQyxDQUFDOXNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM4c0IsQ0FBQyxDQUFDMzhCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTI4QixDQUFDLENBQUMzOEIsSUFBSSxDQUFDLE9BQU8sQ0FBQzI4QixDQUFDLENBQUM5c0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQzhzQixDQUFDLENBQUNuc0IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMC9CLFVBQVUsQ0FBQzdsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDa00sQ0FBQyxDQUFDMHZCLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRTF2QixDQUFDLENBQUM4bUIsTUFBTSxDQUFDLFlBQVksQ0FBQzltQixDQUFDLENBQUM0bUIsRUFBRSxDQUFDczVCLE9BQU8sQ0FBQyxDQUFDOWlFLE9BQU8sQ0FBQyxDQUFDdWpFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQ1IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSW5nRCxDQUFDLENBQUMsSUFBSSxDQUFDb25CLFdBQVcsQ0FBQzFxQyxTQUFTLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQ1UsT0FBTyxDQUFDdWpFLFlBQVksRUFBRTNnRCxDQUFDLENBQUNrZ0QsT0FBTyxDQUFDNXJDLFFBQVEsQ0FBQyxJQUFJLENBQUNsM0IsT0FBTyxDQUFDdWpFLFlBQVksQ0FBQyxDQUFDM2dELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDNG1CLEVBQUUsQ0FBQ3M1QixPQUFPLENBQUMsQ0FBQztBQ1poaDFCcitCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDdm1DLEVBQUUsRUFBRTs7O0NBR2ZzbEUsUUFBUSxFQUFFLFFBQVEsRUFBRXhqRSxRQUFRLEVBQUU7OztFQUc3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUN4QixPQUFPLEVBQUU7R0FDbkIsR0FBRyxFQUFFd0IsUUFBUSxHQUFHQSxPQUFPLENBQUN5akUsTUFBTSxHQUFHdG9FLE1BQU0sQ0FBQ2dmLFFBQVEsRUFBRTtJQUNqREEsT0FBTyxDQUFDQyxJQUFJLEVBQUUsdURBQXVELENBQUM7R0FDdkU7R0FDQSxNQUFNO0VBQ1A7OztFQUdBLElBQUlzcEQsVUFBVSxFQUFFai9CLENBQUMsQ0FBQ3ZvQixJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQztFQUNoRCxHQUFHLEVBQUV3bkQsVUFBVSxFQUFFO0dBQ2hCLE9BQU9BLFNBQVM7RUFDakI7OztFQUdBLElBQUksQ0FBQ3IzRCxJQUFJLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQzs7RUFFdkNxM0QsVUFBVSxFQUFFLElBQUlqL0IsQ0FBQyxDQUFDaS9CLFNBQVMsRUFBRTFqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2pEeWtDLENBQUMsQ0FBQ3ZvQixJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRXduRCxVQUFVLENBQUM7O0VBRTNDLEdBQUcsRUFBRUEsU0FBUyxDQUFDeG1DLFFBQVEsQ0FBQ3ltQyxTQUFTLEVBQUU7O0dBRWxDLElBQUksQ0FBQ3hoRCxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRUksTUFBTSxFQUFFOzs7O0lBSXZEbWhELFNBQVMsQ0FBQ0UsYUFBYSxFQUFFcmhELEtBQUssQ0FBQzRCLGFBQWE7OztJQUc1QyxHQUFHLEVBQUVzZ0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDN00sUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFO0tBQ3JDOHJDLFNBQVMsQ0FBQ0csYUFBYSxFQUFFLElBQUk7SUFDOUI7OztJQUdBLEdBQUcsRUFBRXAvQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUNwNEIsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUkzTCxVQUFVLEVBQUU7S0FDdkRnakUsU0FBUyxDQUFDRyxhQUFhLEVBQUUsSUFBSTtJQUM5QjtHQUNELEVBQUUsQ0FBQzs7O0dBR0gsSUFBSSxDQUFDMWhELEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUVJLE1BQU0sRUFBRTtJQUM3QyxHQUFHLEVBQUVtaEQsU0FBUyxDQUFDeG1DLFFBQVEsQ0FBQ3VtQyxNQUFNLEVBQUU7OztLQUcvQmxoRCxLQUFLLENBQUMrQixjQUFjLENBQUMsQ0FBQztJQUN2Qjs7SUFFQSxTQUFTcEIsTUFBTSxDQUFDLEVBQUU7S0FDakIsSUFBSTRPLE1BQU0sRUFBRXBrQixNQUFNOzs7Ozs7O0tBT2xCLEdBQUcsRUFBRWcyRCxTQUFTLENBQUNFLGFBQWEsR0FBRyxFQUFFRixTQUFTLENBQUN4bUMsUUFBUSxDQUFDNG1DLGNBQWMsR0FBR0osU0FBUyxDQUFDSyxjQUFjLEVBQUUsRUFBRTtNQUNoR2p5QyxPQUFPLEVBQUUyUyxDQUFDLEVBQUUseUJBQXlCO09BQ3BDLENBQUNwNEIsSUFBSSxFQUFFLE1BQU0sRUFBRXEzRCxTQUFTLENBQUNFLFlBQVksQ0FBQzNqRSxLQUFLO09BQzNDLENBQUM5QyxHQUFHLEVBQUVzbkMsQ0FBQyxFQUFFaS9CLFNBQVMsQ0FBQ0UsYUFBYSxDQUFDLENBQUN6bUUsR0FBRyxDQUFDLEVBQUU7T0FDeEMsQ0FBQ3d0QixRQUFRLEVBQUUrNEMsU0FBUyxDQUFDTSxZQUFZLENBQUM7S0FDcEM7O0tBRUEsR0FBRyxFQUFFTixTQUFTLENBQUN4bUMsUUFBUSxDQUFDNG1DLGNBQWMsR0FBRyxDQUFDSixTQUFTLENBQUN4bUMsUUFBUSxDQUFDdW1DLE1BQU0sRUFBRTtNQUNwRS8xRCxPQUFPLEVBQUVnMkQsU0FBUyxDQUFDeG1DLFFBQVEsQ0FBQzRtQyxhQUFhLENBQUMzbkUsSUFBSSxFQUFFdW5FLFNBQVMsRUFBRUEsU0FBUyxDQUFDTSxXQUFXLEVBQUV6aEQsTUFBTSxDQUFDO01BQ3pGLEdBQUcsRUFBRXVQLE9BQU8sRUFBRTs7O09BR2JBLE1BQU0sQ0FBQ3BiLE1BQU0sQ0FBQyxDQUFDO01BQ2hCO01BQ0EsR0FBRyxFQUFFaEosT0FBTyxJQUFJaE4sVUFBVSxFQUFFO09BQzNCLE9BQU9nTixNQUFNO01BQ2Q7TUFDQSxPQUFPLEtBQUs7S0FDYjtLQUNBLE9BQU8sSUFBSTtJQUNaOzs7SUFHQSxHQUFHLEVBQUVnMkQsU0FBUyxDQUFDRyxhQUFhLEVBQUU7S0FDN0JILFNBQVMsQ0FBQ0csYUFBYSxFQUFFLEtBQUs7S0FDOUIsT0FBTzNnRCxNQUFNLENBQUMsQ0FBQztJQUNoQjtJQUNBLEdBQUcsRUFBRXdnRCxTQUFTLENBQUNwdUIsSUFBSSxDQUFDLEVBQUUsRUFBRTtLQUN2QixHQUFHLEVBQUVvdUIsU0FBUyxDQUFDTyxlQUFlLEVBQUU7TUFDL0JQLFNBQVMsQ0FBQ0ssY0FBYyxFQUFFLElBQUk7TUFDOUIsT0FBTyxLQUFLO0tBQ2I7S0FDQSxPQUFPN2dELE1BQU0sQ0FBQyxDQUFDO0lBQ2hCLEVBQUUsS0FBSztLQUNOd2dELFNBQVMsQ0FBQ1EsWUFBWSxDQUFDLENBQUM7S0FDeEIsT0FBTyxLQUFLO0lBQ2I7R0FDRCxFQUFFLENBQUM7RUFDSjs7RUFFQSxPQUFPUixTQUFTO0NBQ2pCLENBQUM7OztDQUdEUyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7RUFDakIsSUFBSUEsS0FBSyxFQUFFVCxTQUFTLEVBQUVVLFNBQVM7O0VBRS9CLEdBQUcsRUFBRTMvQixDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUNqeEIsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFO0dBQ2xDMndELE1BQU0sRUFBRSxJQUFJLENBQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUNsdUIsSUFBSSxDQUFDLENBQUM7RUFDL0IsRUFBRSxLQUFLO0dBQ044dUIsVUFBVSxFQUFFLENBQUMsQ0FBQztHQUNkRCxNQUFNLEVBQUUsSUFBSTtHQUNaVCxVQUFVLEVBQUVqL0IsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzZRLEtBQUssQ0FBQyxDQUFDa3VCLFFBQVEsQ0FBQyxDQUFDO0dBQzFDLElBQUksQ0FBQ3ZrRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDckJrbEUsTUFBTSxFQUFFVCxTQUFTLENBQUNyNkIsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHODZCLEtBQUs7SUFDMUMsR0FBRyxFQUFFLENBQUNBLE1BQU0sRUFBRTtLQUNiQyxVQUFVLEVBQUVBLFNBQVMsQ0FBQzFvRSxNQUFNLEVBQUVnb0UsU0FBUyxDQUFDVSxVQUFVLENBQUM7SUFDcEQ7R0FDRCxFQUFFLENBQUM7R0FDSFYsU0FBUyxDQUFDVSxVQUFVLEVBQUVBLFNBQVM7RUFDaEM7RUFDQSxPQUFPRCxLQUFLO0NBQ2IsQ0FBQzs7O0NBR0RFLEtBQUssRUFBRSxRQUFRLEVBQUVDLE9BQU8sRUFBRXo2RCxTQUFTLEVBQUU7RUFDcEMsSUFBSXcvQixRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztHQUN0Qms3QixrQkFBa0IsRUFBRSxPQUFPLElBQUksQ0FBQ2w0RCxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDQSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxPQUFPO0dBQ3ZINndCLFFBQVEsRUFBRXNuQyxXQUFXLEVBQUVDLGFBQWEsRUFBRXZvRCxJQUFJLEVBQUVvZCxLQUFLLEVBQUVvckMsUUFBUTs7O0VBRzVELEdBQUcsRUFBRXI3QixRQUFRLEdBQUcsS0FBSyxFQUFFO0dBQ3RCLE1BQU07RUFDUDs7RUFFQSxHQUFHLEVBQUUsQ0FBQ0EsT0FBTyxDQUFDaU0sS0FBSyxHQUFHaXZCLGtCQUFrQixFQUFFO0dBQ3pDbDdCLE9BQU8sQ0FBQ2lNLEtBQUssRUFBRSxJQUFJLENBQUN4Z0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztHQUMxQ3UwQixPQUFPLENBQUNwcEMsS0FBSyxFQUFFLElBQUksQ0FBQ29NLElBQUksRUFBRSxPQUFPLENBQUM7RUFDbkM7O0VBRUEsR0FBRyxFQUFFZzlCLE9BQU8sQ0FBQ2lNLEtBQUssR0FBRyxLQUFLLEVBQUU7R0FDM0IsTUFBTTtFQUNQOztFQUVBLEdBQUcsRUFBRWd2QixRQUFRLEVBQUU7R0FDZHBuQyxTQUFTLEVBQUV1SCxDQUFDLENBQUN2b0IsSUFBSSxFQUFFbXRCLE9BQU8sQ0FBQ2lNLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQ3BZLFFBQVE7R0FDdkRzbkMsWUFBWSxFQUFFdG5DLFFBQVEsQ0FBQ21uQyxLQUFLO0dBQzVCSSxjQUFjLEVBQUVoZ0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2MsV0FBVyxFQUFFbjdCLFFBQVEsQ0FBQztHQUNsRCxPQUFPLEVBQUVpN0IsUUFBUSxFQUFFO0dBQ25CLEtBQUssS0FBSztJQUNUNy9CLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0UsYUFBYSxFQUFFaGdDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNpQixhQUFhLEVBQUU5NkQsU0FBUyxFQUFFLENBQUM7OztJQUdoRSxPQUFPNDZELGFBQWEsQ0FBQ2puQixRQUFRO0lBQzdCZ25CLFdBQVcsRUFBRW43QixPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUV3a0UsYUFBYTtJQUMzQyxHQUFHLEVBQUU1NkQsUUFBUSxDQUFDMnpDLFNBQVMsRUFBRTtLQUN4QnRnQixRQUFRLENBQUNzZ0IsUUFBUSxFQUFFblUsT0FBTyxDQUFDcHBDLEtBQUssRUFBRSxFQUFFd2tDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUVtOUIsUUFBUSxDQUFDc2dCLFFBQVEsRUFBRW5VLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUMsRUFBRTRKLFFBQVEsQ0FBQzJ6QyxTQUFTLENBQUM7SUFDckc7SUFDQSxLQUFLO0dBQ04sS0FBSyxRQUFRO0lBQ1osR0FBRyxFQUFFLENBQUMzekMsU0FBUyxFQUFFO0tBQ2hCLE9BQU8yNkQsV0FBVyxFQUFFbjdCLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUM7S0FDbEMsT0FBT3drRSxhQUFhO0lBQ3JCO0lBQ0FDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDYmpnQyxDQUFDLENBQUN4bEMsSUFBSSxFQUFFNEssUUFBUSxDQUFDdEgsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRXdTLEtBQUssRUFBRXdDLE9BQU8sRUFBRTtLQUN6RG10RCxRQUFRLEVBQUVudEQsT0FBTyxFQUFFLEVBQUVrdEQsYUFBYSxFQUFFbHRELE9BQU8sQ0FBQztLQUM1QyxPQUFPa3RELGFBQWEsRUFBRWx0RCxPQUFPLENBQUM7SUFDL0IsRUFBRSxDQUFDO0lBQ0gsT0FBT210RCxRQUFRO0dBQ2hCO0VBQ0Q7O0VBRUF4b0QsS0FBSyxFQUFFdW9CLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNrQixjQUFjO0VBQ2pDbmdDLENBQUMsQ0FBQzFrQyxNQUFNO0dBQ1AsQ0FBQyxDQUFDO0dBQ0Ywa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ21CLFVBQVUsRUFBRXg3QixRQUFRLENBQUM7R0FDakM1RSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDb0IsY0FBYyxFQUFFejdCLFFBQVEsQ0FBQztHQUNyQzVFLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNxQixTQUFTLEVBQUUxN0IsUUFBUSxDQUFDO0dBQ2hDNUUsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2MsV0FBVyxFQUFFbjdCLFFBQVE7RUFDbEMsQ0FBQyxFQUFFQSxRQUFRLENBQUM7OztFQUdaLEdBQUcsRUFBRW50QixJQUFJLENBQUM4b0QsU0FBUyxFQUFFO0dBQ3BCMXJDLE1BQU0sRUFBRXBkLElBQUksQ0FBQzhvRCxRQUFRO0dBQ3JCLE9BQU85b0QsSUFBSSxDQUFDOG9ELFFBQVE7R0FDcEI5b0QsS0FBSyxFQUFFdW9CLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUsRUFBRWlsRSxRQUFRLEVBQUUxckMsTUFBTSxDQUFDLEVBQUVwZCxLQUFLLENBQUM7RUFDN0M7OztFQUdBLEdBQUcsRUFBRUEsSUFBSSxDQUFDK29ELE9BQU8sRUFBRTtHQUNsQjNyQyxNQUFNLEVBQUVwZCxJQUFJLENBQUMrb0QsTUFBTTtHQUNuQixPQUFPL29ELElBQUksQ0FBQytvRCxNQUFNO0dBQ2xCL29ELEtBQUssRUFBRXVvQixDQUFDLENBQUMxa0MsTUFBTSxFQUFFbWMsSUFBSSxFQUFFLEVBQUUrb0QsTUFBTSxFQUFFM3JDLE1BQU0sRUFBRSxDQUFDO0VBQzNDOztFQUVBLE9BQU9wZCxJQUFJO0NBQ1o7QUFDRCxFQUFFLENBQUM7OztBQUdIdW9CLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDdDRCLElBQUksQ0FBQ3ZILFFBQVEsR0FBRzYvQixDQUFDLENBQUN0NEIsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFOzs7Q0FHMUMrNEQsS0FBSyxFQUFFLFFBQVEsRUFBRS9nRSxFQUFFLEVBQUU7RUFDcEIsT0FBTyxDQUFDc2dDLENBQUMsQ0FBQ2pqQyxJQUFJLEVBQUUsR0FBRyxFQUFFaWpDLENBQUMsRUFBRXRnQyxFQUFFLENBQUMsQ0FBQ2hILEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDcEMsQ0FBQzs7O0NBR0Rnb0UsTUFBTSxFQUFFLFFBQVEsRUFBRWhoRSxFQUFFLEVBQUU7RUFDckIsSUFBSWhILElBQUksRUFBRXNuQyxDQUFDLEVBQUV0Z0MsRUFBRSxDQUFDLENBQUNoSCxHQUFHLENBQUMsQ0FBQztFQUN0QixPQUFPQSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQ3NuQyxDQUFDLENBQUNqakMsSUFBSSxFQUFFLEdBQUcsRUFBRXJFLElBQUksQ0FBQztDQUM1QyxDQUFDOzs7Q0FHRGlvRSxTQUFTLEVBQUUsUUFBUSxFQUFFamhFLEVBQUUsRUFBRTtFQUN4QixPQUFPLENBQUNzZ0MsQ0FBQyxFQUFFdGdDLEVBQUUsQ0FBQyxDQUFDZ1ksSUFBSSxFQUFFLFVBQVUsQ0FBQztDQUNqQztBQUNELEVBQUUsQ0FBQzs7O0FBR0hzb0IsQ0FBQyxDQUFDaS9CLFVBQVUsRUFBRSxRQUFRLEVBQUUxakUsT0FBTyxFQUFFczFDLEtBQUssRUFBRTtDQUN2QyxJQUFJLENBQUNwWSxTQUFTLEVBQUV1SCxDQUFDLENBQUMxa0MsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMkIsUUFBUSxFQUFFcmxFLFFBQVEsQ0FBQztDQUNuRSxJQUFJLENBQUNna0UsWUFBWSxFQUFFMXVCLElBQUk7Q0FDdkIsSUFBSSxDQUFDbjNDLElBQUksQ0FBQyxDQUFDO0FBQ1osQ0FBQzs7O0FBR0RzbUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUV0aUQsTUFBTSxFQUFFdWtCLE9BQU8sRUFBRTtDQUMvQyxHQUFHLEVBQUUzaUMsU0FBUyxDQUFDZCxPQUFPLElBQUksRUFBRSxFQUFFO0VBQzdCLE9BQU8sUUFBUSxDQUFDLEVBQUU7R0FDakIsSUFBSWlRLEtBQUssRUFBRWcyQixDQUFDLENBQUNoakMsU0FBUyxFQUFFbkMsVUFBVSxDQUFDO0dBQ25DbVAsSUFBSSxDQUFDdkMsT0FBTyxFQUFFd1IsT0FBTyxDQUFDO0dBQ3RCLE9BQU8rbUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sQ0FBQzNnRSxLQUFLLEVBQUUsSUFBSSxFQUFFb1AsS0FBSyxDQUFDO0VBQzlDLENBQUM7Q0FDRjtDQUNBLEdBQUcsRUFBRXd6QixPQUFPLElBQUl2aEMsVUFBVSxFQUFFO0VBQzNCLE9BQU9nZCxNQUFNO0NBQ2Q7Q0FDQSxHQUFHLEVBQUVwZSxTQUFTLENBQUNkLE9BQU8sRUFBRSxFQUFFLEdBQUd5akMsTUFBTSxDQUFDMWpDLFlBQVksSUFBSWlDLE9BQU8sRUFBRTtFQUM1RHloQyxPQUFPLEVBQUV3QyxDQUFDLENBQUNoakMsU0FBUyxFQUFFbkMsVUFBVSxDQUFDLENBQUM3RCxLQUFLLEVBQUUsRUFBRSxDQUFDO0NBQzdDO0NBQ0EsR0FBRyxFQUFFd21DLE1BQU0sQ0FBQzFqQyxZQUFZLElBQUlpQyxNQUFNLEVBQUU7RUFDbkN5aEMsT0FBTyxFQUFFLEVBQUVBLE9BQU8sQ0FBQztDQUNwQjtDQUNBd0MsQ0FBQyxDQUFDeGxDLElBQUksRUFBRWdqQyxNQUFNLEVBQUUsUUFBUSxFQUFFL2tDLENBQUMsRUFBRXdXLEVBQUUsRUFBRTtFQUNoQ2dLLE9BQU8sRUFBRUEsTUFBTSxDQUFDNWMsT0FBTyxFQUFFLElBQUlnRSxNQUFNLEVBQUUsTUFBTSxFQUFFNUgsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRTtHQUN6RSxPQUFPd1csQ0FBQztFQUNULEVBQUUsQ0FBQztDQUNKLEVBQUUsQ0FBQztDQUNILE9BQU9nSyxNQUFNO0FBQ2QsQ0FBQzs7QUFFRCttQixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLEVBQUU7O0NBRXRCMkIsUUFBUSxFQUFFO0VBQ1Q3bkIsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNabDJDLE1BQU0sRUFBRSxDQUFDLENBQUM7RUFDVis4RCxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQ1RpQixVQUFVLEVBQUUsT0FBTztFQUNuQkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFVBQVUsRUFBRSxPQUFPO0VBQ25CQyxZQUFZLEVBQUUsT0FBTztFQUNyQkMsWUFBWSxFQUFFLEtBQUs7RUFDbkJ4QixZQUFZLEVBQUUsSUFBSTtFQUNsQnlCLGNBQWMsRUFBRWxoQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDdkJtaEMsbUJBQW1CLEVBQUVuaEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQzVCay9CLFFBQVEsRUFBRSxJQUFJO0VBQ2RrQyxNQUFNLEVBQUUsU0FBUztFQUNqQkMsV0FBVyxFQUFFLEtBQUs7RUFDbEJDLFNBQVMsRUFBRSxRQUFRLEVBQUUxOEIsUUFBUSxFQUFFO0dBQzlCLElBQUksQ0FBQzI4QixXQUFXLEVBQUUzOEIsT0FBTzs7O0dBR3pCLEdBQUcsRUFBRSxJQUFJLENBQUNuTSxRQUFRLENBQUN3b0MsYUFBYSxFQUFFO0lBQ2pDLEdBQUcsRUFBRSxJQUFJLENBQUN4b0MsUUFBUSxDQUFDK29DLFlBQVksRUFBRTtLQUNoQyxJQUFJLENBQUMvb0MsUUFBUSxDQUFDK29DLFdBQVcsQ0FBQzlwRSxJQUFJLEVBQUUsSUFBSSxFQUFFa3RDLE9BQU8sRUFBRSxJQUFJLENBQUNuTSxRQUFRLENBQUNvb0MsVUFBVSxFQUFFLElBQUksQ0FBQ3BvQyxRQUFRLENBQUNzb0MsV0FBVyxDQUFDO0lBQ3BHO0lBQ0EsSUFBSSxDQUFDVSxTQUFTLEVBQUUsSUFBSSxDQUFDQyxTQUFTLEVBQUU5OEIsUUFBUSxFQUFFLENBQUM7R0FDNUM7RUFDRCxDQUFDO0VBQ0QrOEIsVUFBVSxFQUFFLFFBQVEsRUFBRS84QixRQUFRLEVBQUU7R0FDL0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDZzlCLFNBQVMsRUFBRWg5QixRQUFRLEVBQUUsR0FBRyxFQUFFQSxPQUFPLENBQUNwcEMsS0FBSyxHQUFHLElBQUksQ0FBQ3FtRSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUNDLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsRUFBRSxFQUFFO0lBQ3BHLElBQUksQ0FBQ0EsT0FBTyxFQUFFQSxRQUFRLENBQUM7R0FDeEI7RUFDRCxDQUFDO0VBQ0RtOUIsT0FBTyxFQUFFLFFBQVEsRUFBRW45QixPQUFPLEVBQUU5bUIsTUFBTSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JuQyxJQUFJa2tELGFBQWEsRUFBRTtJQUNsQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQzFCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7R0FDdEIsQ0FBQzs7R0FFRCxHQUFHLEVBQUVsa0QsS0FBSyxDQUFDdUYsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM0K0MsWUFBWSxFQUFFcjlCLFFBQVEsRUFBRSxJQUFJLEdBQUcsR0FBRzVFLENBQUMsQ0FBQzlpQyxPQUFPLEVBQUU0Z0IsS0FBSyxDQUFDMEUsT0FBTyxFQUFFdy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0lBQ2xILE1BQU07R0FDUCxFQUFFLEtBQUssR0FBRyxFQUFFcDlCLE9BQU8sQ0FBQ3BwQyxLQUFLLEdBQUcsSUFBSSxDQUFDcW1FLFVBQVUsR0FBR2o5QixPQUFPLENBQUNwcEMsS0FBSyxHQUFHLElBQUksQ0FBQzBtRSxRQUFRLEVBQUU7SUFDNUUsSUFBSSxDQUFDdDlCLE9BQU8sRUFBRUEsUUFBUSxDQUFDO0dBQ3hCO0VBQ0QsQ0FBQztFQUNEdTlCLE9BQU8sRUFBRSxRQUFRLEVBQUV2OUIsUUFBUSxFQUFFOzs7R0FHNUIsR0FBRyxFQUFFQSxPQUFPLENBQUNwcEMsS0FBSyxHQUFHLElBQUksQ0FBQ3FtRSxVQUFVLEVBQUU7SUFDckMsSUFBSSxDQUFDajlCLE9BQU8sRUFBRUEsUUFBUSxDQUFDOzs7R0FHeEIsRUFBRSxLQUFLLEdBQUcsRUFBRUEsT0FBTyxDQUFDMXJDLFVBQVUsQ0FBQ3NDLEtBQUssR0FBRyxJQUFJLENBQUNxbUUsVUFBVSxFQUFFO0lBQ3ZELElBQUksQ0FBQ2o5QixPQUFPLEVBQUVBLE9BQU8sQ0FBQzFyQyxXQUFXLENBQUM7R0FDbkM7RUFDRCxDQUFDO0VBQ0RrcEUsU0FBUyxFQUFFLFFBQVEsRUFBRXg5QixPQUFPLEVBQUVpOEIsVUFBVSxFQUFFRSxXQUFXLEVBQUU7R0FDdEQsR0FBRyxFQUFFbjhCLE9BQU8sQ0FBQzNzQyxLQUFLLElBQUksUUFBUSxFQUFFO0lBQy9CLElBQUksQ0FBQ29xRSxVQUFVLEVBQUV6OUIsT0FBTyxDQUFDcHBDLEtBQUssQ0FBQyxDQUFDaTNCLFFBQVEsRUFBRW91QyxXQUFXLENBQUMsQ0FBQy90QyxXQUFXLEVBQUVpdUMsV0FBVyxDQUFDO0dBQ2pGLEVBQUUsS0FBSztJQUNOL2dDLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDblMsUUFBUSxFQUFFb3VDLFdBQVcsQ0FBQyxDQUFDL3RDLFdBQVcsRUFBRWl1QyxXQUFXLENBQUM7R0FDOUQ7RUFDRCxDQUFDO0VBQ0RTLFdBQVcsRUFBRSxRQUFRLEVBQUU1OEIsT0FBTyxFQUFFaThCLFVBQVUsRUFBRUUsV0FBVyxFQUFFO0dBQ3hELEdBQUcsRUFBRW44QixPQUFPLENBQUMzc0MsS0FBSyxJQUFJLFFBQVEsRUFBRTtJQUMvQixJQUFJLENBQUNvcUUsVUFBVSxFQUFFejlCLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUMsQ0FBQ3MzQixXQUFXLEVBQUUrdEMsV0FBVyxDQUFDLENBQUNwdUMsUUFBUSxFQUFFc3VDLFdBQVcsQ0FBQztHQUNqRixFQUFFLEtBQUs7SUFDTi9nQyxDQUFDLEVBQUU0RSxRQUFRLENBQUMsQ0FBQzlSLFdBQVcsRUFBRSt0QyxXQUFXLENBQUMsQ0FBQ3B1QyxRQUFRLEVBQUVzdUMsV0FBVyxDQUFDO0dBQzlEO0VBQ0Q7Q0FDRCxDQUFDOzs7Q0FHRGxsQixXQUFXLEVBQUUsUUFBUSxFQUFFcGpCLFNBQVMsRUFBRTtFQUNqQ3VILENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzJCLFFBQVEsRUFBRW5vQyxTQUFTLENBQUM7Q0FDM0MsQ0FBQzs7Q0FFRHNnQixRQUFRLEVBQUU7RUFDVHduQixRQUFRLEVBQUUseUJBQXlCO0VBQ25DQyxNQUFNLEVBQUUsd0JBQXdCO0VBQ2hDOEIsS0FBSyxFQUFFLHFDQUFxQztFQUM1Q3RxQyxHQUFHLEVBQUUsMkJBQTJCO0VBQ2hDdXFDLElBQUksRUFBRSw0QkFBNEI7RUFDbENDLE9BQU8sRUFBRSxrQ0FBa0M7RUFDM0NDLE1BQU0sRUFBRSw4QkFBOEI7RUFDdENDLE1BQU0sRUFBRSwyQkFBMkI7RUFDbkNDLE9BQU8sRUFBRSxvQ0FBb0M7RUFDN0NDLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDRDQUE0QyxDQUFDO0VBQzVFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsd0NBQXdDLENBQUM7RUFDeEV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0REFBNEQsQ0FBQztFQUM5RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDRDQUE0QyxDQUFDO0VBQ3hFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0RBQWtELENBQUM7RUFDNUV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxREFBcUQsQ0FBQztFQUMvRWh2QyxJQUFJLEVBQUV5VCxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGtDQUFrQztDQUM3RCxDQUFDOztDQUVEd0gsZ0JBQWdCLEVBQUUsS0FBSzs7Q0FFdkJucEUsU0FBUyxFQUFFOztFQUVWRixJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDaEIsSUFBSSxDQUFDc3BFLGVBQWUsRUFBRWhqQyxDQUFDLEVBQUUsSUFBSSxDQUFDdkgsUUFBUSxDQUFDMG9DLG9CQUFvQixDQUFDO0dBQzVELElBQUksQ0FBQzhCLGFBQWEsRUFBRSxJQUFJLENBQUNELGNBQWMsQ0FBQ2pwRSxPQUFPLEdBQUcsSUFBSSxDQUFDaXBFLGVBQWUsR0FBR2hqQyxDQUFDLEVBQUUsSUFBSSxDQUFDdS9CLFlBQVksQ0FBQztHQUM5RixJQUFJLENBQUN6RyxXQUFXLEVBQUU5NEIsQ0FBQyxFQUFFLElBQUksQ0FBQ3ZILFFBQVEsQ0FBQ3lvQyxlQUFlLENBQUMsQ0FBQzF3RCxHQUFHLEVBQUUsSUFBSSxDQUFDaW9CLFFBQVEsQ0FBQzBvQyxvQkFBb0IsQ0FBQztHQUM1RixJQUFJLENBQUNVLFVBQVUsRUFBRSxDQUFDLENBQUM7R0FDbkIsSUFBSSxDQUFDcUIsV0FBVyxFQUFFLENBQUMsQ0FBQztHQUNwQixJQUFJLENBQUMxRCxlQUFlLEVBQUUsQ0FBQztHQUN2QixJQUFJLENBQUMzb0IsUUFBUSxFQUFFLENBQUMsQ0FBQztHQUNqQixJQUFJLENBQUNxckIsUUFBUSxFQUFFLENBQUMsQ0FBQztHQUNqQixJQUFJLENBQUMzMkQsS0FBSyxDQUFDLENBQUM7O0dBRVosSUFBSWcwRCxZQUFZLEVBQUUsSUFBSSxDQUFDQSxXQUFXO0lBQ2pDMThELE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQ0EsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzdCKzhELEtBQUs7R0FDTjUvQixDQUFDLENBQUN4bEMsSUFBSSxFQUFFLElBQUksQ0FBQ2krQixRQUFRLENBQUM1MUIsTUFBTSxFQUFFLFFBQVEsRUFBRW1CLEdBQUcsRUFBRXRHLE1BQU0sRUFBRTtJQUNwRCxHQUFHLEVBQUUsT0FBT0EsTUFBTSxJQUFJLFNBQVMsRUFBRTtLQUNoQ0EsTUFBTSxFQUFFQSxLQUFLLENBQUNJLEtBQUssRUFBRSxLQUFLLENBQUM7SUFDNUI7SUFDQWtpQyxDQUFDLENBQUN4bEMsSUFBSSxFQUFFa0QsS0FBSyxFQUFFLFFBQVEsRUFBRTRTLEtBQUssRUFBRTlVLEtBQUssRUFBRTtLQUN0Q3FILE1BQU0sRUFBRXJILEtBQUssRUFBRSxFQUFFd0ksR0FBRztJQUNyQixFQUFFLENBQUM7R0FDSixFQUFFLENBQUM7R0FDSDQ3RCxNQUFNLEVBQUUsSUFBSSxDQUFDbm5DLFFBQVEsQ0FBQ21uQyxLQUFLO0dBQzNCNS9CLENBQUMsQ0FBQ3hsQyxJQUFJLEVBQUVvbEUsS0FBSyxFQUFFLFFBQVEsRUFBRTU3RCxHQUFHLEVBQUV0RyxNQUFNLEVBQUU7SUFDckNraUUsS0FBSyxFQUFFNTdELElBQUksRUFBRSxFQUFFZzhCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNpQixhQUFhLEVBQUV4aUUsTUFBTSxDQUFDO0dBQ2xELEVBQUUsQ0FBQzs7R0FFSCxTQUFTMGhDLFFBQVEsRUFBRXRoQixNQUFNLEVBQUU7SUFDMUIsSUFBSWdpRCxrQkFBa0IsRUFBRSxPQUFPOS9CLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQ3A0QixJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxZQUFZLEdBQUdvNEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDcDRCLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLE9BQU87OztJQUdySSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUNpcEMsS0FBSyxHQUFHaXZCLGtCQUFrQixFQUFFO0tBQ3RDLElBQUksQ0FBQ2p2QixLQUFLLEVBQUU3USxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMzdkIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztLQUM1QyxJQUFJLENBQUM3VSxLQUFLLEVBQUV3a0MsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDcDRCLElBQUksRUFBRSxPQUFPLENBQUM7SUFDckM7Ozs7SUFJQSxHQUFHLEVBQUUyM0QsWUFBWSxJQUFJLElBQUksQ0FBQzF1QixLQUFLLEVBQUU7S0FDaEMsTUFBTTtJQUNQOztJQUVBLElBQUlvdUIsVUFBVSxFQUFFai9CLENBQUMsQ0FBQ3ZvQixJQUFJLEVBQUUsSUFBSSxDQUFDbzVCLElBQUksRUFBRSxZQUFZLENBQUM7S0FDL0NzeUIsVUFBVSxFQUFFLEtBQUssRUFBRXJsRCxLQUFLLENBQUM3bEIsSUFBSSxDQUFDb0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUM7S0FDeERvOEIsU0FBUyxFQUFFd21DLFNBQVMsQ0FBQ3htQyxRQUFRO0lBQzlCLEdBQUcsRUFBRUEsUUFBUSxFQUFFMHFDLFVBQVUsRUFBRSxHQUFHLENBQUNuakMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDanhCLEVBQUUsRUFBRTBwQixRQUFRLENBQUMyb0MsT0FBTyxFQUFFLEVBQUU7S0FDaEUzb0MsUUFBUSxFQUFFMHFDLFVBQVUsQ0FBQyxDQUFDenJFLElBQUksRUFBRXVuRSxTQUFTLEVBQUUsSUFBSSxFQUFFbmhELE1BQU0sQ0FBQztJQUNyRDtHQUNEOztHQUVBa2lCLENBQUMsRUFBRSxJQUFJLENBQUN1L0IsWUFBWTtJQUNuQixDQUFDN2hELEVBQUUsRUFBRSxtREFBbUQ7S0FDdkQsZ0dBQWdHO0tBQ2hHLGlHQUFpRztLQUNqRywwRkFBMEY7S0FDMUYsdUVBQXVFLEVBQUUwaEIsU0FBUzs7OztJQUluRixDQUFDMWhCLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxtREFBbUQsRUFBRTBoQixTQUFTLENBQUM7O0dBRXZGLEdBQUcsRUFBRSxJQUFJLENBQUMzRyxRQUFRLENBQUMycUMsZUFBZSxFQUFFO0lBQ25DcGpDLENBQUMsRUFBRSxJQUFJLENBQUN1L0IsWUFBWSxDQUFDLENBQUM3aEQsRUFBRSxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQythLFFBQVEsQ0FBQzJxQyxlQUFlLENBQUM7R0FDbEY7RUFDRCxDQUFDOzs7RUFHRHZ5QixJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDaEIsSUFBSSxDQUFDd3lCLFNBQVMsQ0FBQyxDQUFDO0dBQ2hCcmpDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUsSUFBSSxDQUFDdW1FLFNBQVMsRUFBRSxJQUFJLENBQUN5QixTQUFTLENBQUM7R0FDekMsSUFBSSxDQUFDcEIsUUFBUSxFQUFFbGlDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDZ29FLFNBQVMsQ0FBQztHQUM1QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM1RCxLQUFLLENBQUMsRUFBRSxFQUFFO0lBQ3BCMS9CLENBQUMsRUFBRSxJQUFJLENBQUN1L0IsWUFBWSxDQUFDLENBQUN0ckMsY0FBYyxFQUFFLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0dBQ2pFO0dBQ0EsSUFBSSxDQUFDc3ZDLFVBQVUsQ0FBQyxDQUFDO0dBQ2pCLE9BQU8sSUFBSSxDQUFDN0QsS0FBSyxDQUFDLENBQUM7RUFDcEIsQ0FBQzs7RUFFRDJELFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtHQUNyQixJQUFJLENBQUNHLFdBQVcsQ0FBQyxDQUFDO0dBQ2xCLElBQUksRUFBRSxJQUFJL3FFLEVBQUUsRUFBRSxDQUFDLEVBQUVrUCxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUM4N0QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDOTdELFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRUEsUUFBUSxFQUFFbFAsRUFBRSxDQUFDLEVBQUVBLENBQUMsR0FBRyxFQUFFO0lBQzVGLElBQUksQ0FBQ3VRLEtBQUssRUFBRXJCLFFBQVEsRUFBRWxQLEVBQUUsRUFBRSxDQUFDO0dBQzVCO0dBQ0EsT0FBTyxJQUFJLENBQUNpbkUsS0FBSyxDQUFDLENBQUM7RUFDcEIsQ0FBQzs7O0VBR0Q5NkIsT0FBTyxFQUFFLFFBQVEsRUFBRUEsUUFBUSxFQUFFO0dBQzVCLElBQUk4K0IsYUFBYSxFQUFFLElBQUksQ0FBQ0MsS0FBSyxFQUFFLytCLFFBQVEsQ0FBQztJQUN2Q2cvQixhQUFhLEVBQUUsSUFBSSxDQUFDQyxtQkFBbUIsRUFBRUgsYUFBYSxDQUFDO0lBQ3ZEbnhELEVBQUUsRUFBRSxJQUFJO0lBQ1J0SixPQUFPLEVBQUUsSUFBSTtJQUNiNjZELEVBQUUsRUFBRUMsS0FBSzs7R0FFVixHQUFHLEVBQUVILGFBQWEsSUFBSTNuRSxVQUFVLEVBQUU7SUFDakMsT0FBTyxJQUFJLENBQUNpbUUsT0FBTyxFQUFFd0IsWUFBWSxDQUFDbG9FLEtBQUssQ0FBQztHQUN6QyxFQUFFLEtBQUs7SUFDTixJQUFJLENBQUN3b0UsY0FBYyxFQUFFSixhQUFhLENBQUM7SUFDbkMsSUFBSSxDQUFDSCxnQkFBZ0IsRUFBRXpqQyxDQUFDLEVBQUU0akMsYUFBYSxDQUFDOzs7O0lBSXhDRyxNQUFNLEVBQUUsSUFBSSxDQUFDbGhFLE1BQU0sRUFBRStnRSxZQUFZLENBQUNwb0UsS0FBSyxDQUFDO0lBQ3hDLEdBQUcsRUFBRXVvRSxNQUFNLEVBQUU7S0FDWi9qQyxDQUFDLENBQUN4bEMsSUFBSSxFQUFFLElBQUksQ0FBQ3FJLE1BQU0sRUFBRSxRQUFRLEVBQUVySCxJQUFJLEVBQUV5b0UsVUFBVSxFQUFFO01BQ2hELEdBQUcsRUFBRUEsVUFBVSxJQUFJRixNQUFNLEdBQUd2b0UsS0FBSyxJQUFJb29FLFlBQVksQ0FBQ3BvRSxLQUFLLEVBQUU7T0FDeERrb0UsYUFBYSxFQUFFbnhELENBQUMsQ0FBQ3N4RCxtQkFBbUIsRUFBRXR4RCxDQUFDLENBQUNveEQsS0FBSyxFQUFFcHhELENBQUMsQ0FBQzh2RCxVQUFVLEVBQUU3bUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztPQUN2RSxHQUFHLEVBQUVrb0UsYUFBYSxHQUFHQSxZQUFZLENBQUNsb0UsS0FBSyxHQUFHK1csQ0FBQyxDQUFDMnZELFFBQVEsRUFBRTtRQUNyRDN2RCxDQUFDLENBQUNreEQsZUFBZSxDQUFDdnNFLElBQUksRUFBRXdzRSxhQUFhLENBQUM7UUFDdEN6NkQsT0FBTyxFQUFFc0osQ0FBQyxDQUFDdkosS0FBSyxFQUFFMDZELGFBQWEsRUFBRSxHQUFHejZELE1BQU07T0FDM0M7TUFDRDtLQUNELEVBQUUsQ0FBQztJQUNKOztJQUVBNjZELEdBQUcsRUFBRSxJQUFJLENBQUM5NkQsS0FBSyxFQUFFNDZELGFBQWEsRUFBRSxJQUFJLEtBQUs7SUFDekMzNkQsT0FBTyxFQUFFQSxPQUFPLEdBQUc2NkQsRUFBRTtJQUNyQixHQUFHLEVBQUVBLEdBQUcsRUFBRTtLQUNULElBQUksQ0FBQzVCLE9BQU8sRUFBRTBCLFlBQVksQ0FBQ3BvRSxLQUFLLEVBQUUsRUFBRSxLQUFLO0lBQzFDLEVBQUUsS0FBSztLQUNOLElBQUksQ0FBQzBtRSxPQUFPLEVBQUUwQixZQUFZLENBQUNwb0UsS0FBSyxFQUFFLEVBQUUsSUFBSTtJQUN6Qzs7SUFFQSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMwb0UsZ0JBQWdCLENBQUMsRUFBRSxFQUFFOzs7S0FHL0IsSUFBSSxDQUFDQyxPQUFPLEVBQUUsSUFBSSxDQUFDQSxNQUFNLENBQUMzekQsR0FBRyxFQUFFLElBQUksQ0FBQ3NvRCxXQUFXLENBQUM7SUFDakQ7SUFDQSxJQUFJLENBQUN5SyxVQUFVLENBQUMsQ0FBQzs7O0lBR2pCdmpDLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQ2s4RCxHQUFHLENBQUM7R0FDekM7O0dBRUEsT0FBTzc2RCxNQUFNO0VBQ2QsQ0FBQzs7O0VBR0RzNkQsVUFBVSxFQUFFLFFBQVEsRUFBRWEsT0FBTyxFQUFFO0dBQzlCLEdBQUcsRUFBRUEsT0FBTyxFQUFFO0lBQ2IsSUFBSW5GLFVBQVUsRUFBRSxJQUFJOzs7SUFHcEJqL0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRSxJQUFJLENBQUNnb0UsUUFBUSxFQUFFYyxPQUFPLENBQUM7SUFDakMsSUFBSSxDQUFDekUsVUFBVSxFQUFFMy9CLENBQUMsQ0FBQ3RsQyxHQUFHLEVBQUUsSUFBSSxDQUFDNG9FLFFBQVEsRUFBRSxRQUFRLEVBQUUxdEQsT0FBTyxFQUFFcGEsS0FBSyxFQUFFO0tBQ2hFLE9BQU87TUFDTm9hLE9BQU8sRUFBRUEsT0FBTztNQUNoQmd2QixPQUFPLEVBQUVxNkIsU0FBUyxDQUFDb0QsVUFBVSxFQUFFN21FLEtBQUssQ0FBQyxFQUFFLEVBQUU7S0FDMUMsQ0FBQztJQUNGLEVBQUUsQ0FBQzs7O0lBR0gsSUFBSSxDQUFDNm9FLFlBQVksRUFBRXJrQyxDQUFDLENBQUM1aUMsSUFBSSxFQUFFLElBQUksQ0FBQ2luRSxXQUFXLEVBQUUsUUFBUSxFQUFFei9CLFFBQVEsRUFBRTtLQUNoRSxPQUFPLENBQUMsRUFBRUEsT0FBTyxDQUFDcHBDLEtBQUssR0FBRzRvRSxPQUFPLENBQUM7SUFDbkMsRUFBRSxDQUFDO0dBQ0o7R0FDQSxHQUFHLEVBQUUsSUFBSSxDQUFDM3JDLFFBQVEsQ0FBQzhxQyxXQUFXLEVBQUU7SUFDL0IsSUFBSSxDQUFDOXFDLFFBQVEsQ0FBQzhxQyxVQUFVLENBQUM3ckUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM0ckUsUUFBUSxFQUFFLElBQUksQ0FBQzNELFVBQVUsQ0FBQztHQUNyRSxFQUFFLEtBQUs7SUFDTixJQUFJLENBQUMyRSxpQkFBaUIsQ0FBQyxDQUFDO0dBQ3pCO0VBQ0QsQ0FBQzs7O0VBR0RDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtHQUNyQixHQUFHLEVBQUV2a0MsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQzhxRSxVQUFVLEVBQUU7SUFDckJ2a0MsQ0FBQyxFQUFFLElBQUksQ0FBQ3UvQixZQUFZLENBQUMsQ0FBQ2dGLFNBQVMsQ0FBQyxDQUFDO0dBQ2xDO0dBQ0EsSUFBSSxDQUFDckMsUUFBUSxFQUFFLENBQUMsQ0FBQztHQUNqQixJQUFJLENBQUNMLFVBQVUsRUFBRSxDQUFDLENBQUM7R0FDbkIsSUFBSSxDQUFDMkIsV0FBVyxDQUFDLENBQUM7R0FDbEIsSUFBSSxDQUFDZ0IsVUFBVSxDQUFDLENBQUM7R0FDakIsSUFBSTc4RCxTQUFTLEVBQUUsSUFBSSxDQUFDQSxRQUFRLENBQUM7SUFDNUIsQ0FBQ3lRLFVBQVUsRUFBRSxnQkFBZ0I7SUFDN0IsQ0FBQ3FaLFVBQVUsRUFBRSxlQUFlLENBQUM7O0dBRTlCLElBQUksQ0FBQ2d6QyxhQUFhLEVBQUU5OEQsU0FBUyxDQUFDO0VBQy9CLENBQUM7O0VBRUQ4OEQsYUFBYSxFQUFFLFFBQVEsRUFBRTk4RCxTQUFTLEVBQUU7R0FDbkMsSUFBSWxQLENBQUM7O0dBRUwsR0FBRyxFQUFFLElBQUksQ0FBQ2dnQyxRQUFRLENBQUMrb0MsWUFBWSxFQUFFO0lBQ2hDLElBQUksRUFBRS9vRSxFQUFFLEVBQUUsQ0FBQyxFQUFFa1AsUUFBUSxFQUFFbFAsRUFBRSxDQUFDLEVBQUVBLENBQUMsR0FBRyxFQUFFO0tBQ2pDLElBQUksQ0FBQ2dnQyxRQUFRLENBQUMrb0MsV0FBVyxDQUFDOXBFLElBQUksRUFBRSxJQUFJLEVBQUVpUSxRQUFRLEVBQUVsUCxFQUFFLENBQUM7TUFDbEQsSUFBSSxDQUFDZ2dDLFFBQVEsQ0FBQ29vQyxVQUFVLEVBQUUsR0FBRyxDQUFDO0tBQy9CLElBQUksQ0FBQ3dCLFVBQVUsRUFBRTE2RCxRQUFRLEVBQUVsUCxFQUFFLENBQUMsQ0FBQytDLEtBQUssQ0FBQyxDQUFDczNCLFdBQVcsRUFBRSxJQUFJLENBQUMyRixRQUFRLENBQUNzb0MsV0FBVyxDQUFDO0lBQzlFO0dBQ0QsRUFBRSxLQUFLO0lBQ05wNUQ7S0FDQyxDQUFDbXJCLFdBQVcsRUFBRSxJQUFJLENBQUMyRixRQUFRLENBQUNvb0MsV0FBVztLQUN2QyxDQUFDL3RDLFdBQVcsRUFBRSxJQUFJLENBQUMyRixRQUFRLENBQUNzb0MsV0FBVyxDQUFDO0dBQzFDO0VBQ0QsQ0FBQzs7RUFFRG1ELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxFQUFFO0dBQzVCLE9BQU8sSUFBSSxDQUFDUSxZQUFZLEVBQUUsSUFBSSxDQUFDeEMsUUFBUSxDQUFDO0VBQ3pDLENBQUM7O0VBRUR3QyxZQUFZLEVBQUUsUUFBUSxFQUFFN3NFLElBQUksRUFBRTs7R0FFN0IsSUFBSWloQixNQUFNLEVBQUUsQ0FBQztJQUNacmdCLENBQUM7R0FDRixJQUFJLEVBQUVBLEVBQUUsR0FBR1osSUFBSSxFQUFFOzs7O0lBSWhCLEdBQUcsRUFBRUEsR0FBRyxFQUFFWSxFQUFFLEVBQUUsSUFBSXdELFVBQVUsR0FBR3BFLEdBQUcsRUFBRVksRUFBRSxFQUFFLElBQUksS0FBSyxHQUFHWixHQUFHLEVBQUVZLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRTtLQUN4RXFnQixLQUFLLEVBQUU7SUFDUjtHQUNEO0dBQ0EsT0FBT0EsS0FBSztFQUNiLENBQUM7O0VBRUQwckQsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0dBQ3RCLElBQUksQ0FBQy9DLFNBQVMsRUFBRSxJQUFJLENBQUMwQyxPQUFPLENBQUM7RUFDOUIsQ0FBQzs7RUFFRDFDLFNBQVMsRUFBRSxRQUFRLEVBQUUyQyxPQUFPLEVBQUU7R0FDN0JBLE1BQU0sQ0FBQzcwRCxHQUFHLEVBQUUsSUFBSSxDQUFDdXBELFdBQVcsQ0FBQyxDQUFDamdFLElBQUksRUFBRSxHQUFHLENBQUM7R0FDeEMsSUFBSSxDQUFDOHJFLFVBQVUsRUFBRVAsT0FBTyxDQUFDLENBQUN0cEQsSUFBSSxDQUFDLENBQUM7RUFDakMsQ0FBQzs7RUFFRDRrRCxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDakIsT0FBTyxJQUFJLENBQUNudkIsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQ3pCLENBQUM7O0VBRURBLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtHQUNoQixPQUFPLElBQUksQ0FBQ292QixTQUFTLENBQUM1bEUsTUFBTTtFQUM3QixDQUFDOztFQUVEMGxFLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRTtHQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDaG5DLFFBQVEsQ0FBQ2duQyxhQUFhLEVBQUU7SUFDakMsSUFBSTtLQUNIei9CLENBQUMsRUFBRSxJQUFJLENBQUM0a0MsY0FBYyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUNqRixTQUFTLENBQUM1bEUsT0FBTyxHQUFHLElBQUksQ0FBQzRsRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMvNkIsUUFBUSxHQUFHLENBQUMsRUFBRTtLQUN2RixDQUFDeitCLE1BQU0sRUFBRSxXQUFXO0tBQ3BCLENBQUMwYSxPQUFPLEVBQUUsUUFBUTs7O0tBR2xCLENBQUNBLE9BQU8sRUFBRSxVQUFVLENBQUM7SUFDdEIsRUFBRSxNQUFNLEVBQUV0ZSxFQUFFLEVBQUU7OztJQUdkO0dBQ0Q7RUFDRCxDQUFDOztFQUVEcWlFLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFBRTtHQUMxQixJQUFJckQsV0FBVyxFQUFFLElBQUksQ0FBQ0EsVUFBVTtHQUNoQyxPQUFPQSxXQUFXLEdBQUd2aEMsQ0FBQyxDQUFDNWlDLElBQUksRUFBRSxJQUFJLENBQUN1aUUsU0FBUyxFQUFFLFFBQVEsRUFBRTF3RCxFQUFFLEVBQUU7SUFDMUQsT0FBT0EsQ0FBQyxDQUFDMjFCLE9BQU8sQ0FBQ3BwQyxLQUFLLElBQUkrbEUsVUFBVSxDQUFDL2xFLElBQUk7R0FDMUMsRUFBRSxDQUFDLENBQUN6QixPQUFPLElBQUksRUFBRSxHQUFHd25FLFVBQVU7RUFDL0IsQ0FBQzs7RUFFRDU1RCxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDcEIsSUFBSXMzRCxVQUFVLEVBQUUsSUFBSTtJQUNuQjRGLFdBQVcsRUFBRSxDQUFDLENBQUM7OztHQUdoQixPQUFPN2tDLENBQUMsRUFBRSxJQUFJLENBQUN1L0IsWUFBWTtHQUMzQixDQUFDbDVELElBQUksRUFBRSw2Q0FBNkM7R0FDcEQsQ0FBQ2tKLEdBQUcsRUFBRSxxQ0FBcUM7R0FDM0MsQ0FBQ0EsR0FBRyxFQUFFLElBQUksQ0FBQ2twQixRQUFRLENBQUMyb0MsT0FBTztHQUMzQixDQUFDajdELE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtJQUNuQixJQUFJM0ssS0FBSyxFQUFFLElBQUksQ0FBQ0EsS0FBSyxHQUFHd2tDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQ3A0QixJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQ2hELElBQUlrNEQsa0JBQWtCLEVBQUUsT0FBTzkvQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUNwNEIsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksWUFBWSxHQUFHbzRCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQ3A0QixJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxPQUFPOztJQUVySSxHQUFHLEVBQUUsQ0FBQ3BNLEtBQUssR0FBR3lqRSxTQUFTLENBQUN4bUMsUUFBUSxDQUFDdW1DLE1BQU0sR0FBR3RvRSxNQUFNLENBQUNnZixRQUFRLEVBQUU7S0FDMURBLE9BQU8sQ0FBQ25aLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUM7SUFDakQ7OztJQUdBLEdBQUcsRUFBRXVqRSxrQkFBa0IsRUFBRTtLQUN4QixJQUFJLENBQUNqdkIsS0FBSyxFQUFFN1EsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDM3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7S0FDNUMsSUFBSSxDQUFDN1UsS0FBSyxFQUFFQSxJQUFJO0lBQ2pCOzs7SUFHQSxHQUFHLEVBQUUsSUFBSSxDQUFDcTFDLEtBQUssSUFBSW91QixTQUFTLENBQUNNLFlBQVksRUFBRTtLQUMxQyxPQUFPLEtBQUs7SUFDYjs7O0lBR0EsR0FBRyxFQUFFL2pFLEtBQUssR0FBR3FwRSxXQUFXLEdBQUcsQ0FBQzVGLFNBQVMsQ0FBQ3lGLFlBQVksRUFBRTFrQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM0L0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFO0tBQ3pFLE9BQU8sS0FBSztJQUNiOztJQUVBaUYsVUFBVSxFQUFFcnBFLEtBQUssRUFBRSxFQUFFLElBQUk7SUFDekIsT0FBTyxJQUFJO0dBQ1osRUFBRSxDQUFDO0VBQ0osQ0FBQzs7RUFFRG1vRSxLQUFLLEVBQUUsUUFBUSxFQUFFcHFFLFNBQVMsRUFBRTtHQUMzQixPQUFPeW1DLENBQUMsRUFBRXptQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDMUIsQ0FBQzs7RUFFRDZxRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDbEIsSUFBSXZELFdBQVcsRUFBRSxJQUFJLENBQUNwb0MsUUFBUSxDQUFDb29DLFVBQVUsQ0FBQy9pRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMyRixJQUFJLEVBQUUsSUFBSSxDQUFDO0dBQ2xFLE9BQU91OEIsQ0FBQyxFQUFFLElBQUksQ0FBQ3ZILFFBQVEsQ0FBQ3VvQyxhQUFhLEVBQUUsSUFBSSxFQUFFSCxVQUFVLEVBQUUsSUFBSSxDQUFDb0MsYUFBYSxDQUFDO0VBQzdFLENBQUM7O0VBRUQ2QixjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDMUIsSUFBSSxDQUFDVCxZQUFZLEVBQUUsQ0FBQyxDQUFDO0dBQ3JCLElBQUksQ0FBQzFFLFVBQVUsRUFBRSxDQUFDLENBQUM7R0FDbkIsSUFBSSxDQUFDMkQsU0FBUyxFQUFFLENBQUMsQ0FBQztHQUNsQixJQUFJLENBQUN5QixPQUFPLEVBQUUva0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0dBQ3JCLElBQUksQ0FBQ21rQyxPQUFPLEVBQUVua0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3RCLENBQUM7O0VBRUR6MEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0dBQ2pCLElBQUksQ0FBQ3U1RCxjQUFjLENBQUMsQ0FBQztHQUNyQixJQUFJLENBQUNyQixnQkFBZ0IsRUFBRXpqQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDL0IsQ0FBQzs7RUFFRHdqQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDdkIsSUFBSSxDQUFDajRELEtBQUssQ0FBQyxDQUFDO0dBQ1osSUFBSSxDQUFDNDRELE9BQU8sRUFBRSxJQUFJLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUM1ekQsR0FBRyxFQUFFLElBQUksQ0FBQ3NvRCxXQUFXLENBQUM7RUFDbkQsQ0FBQzs7RUFFRGtMLGNBQWMsRUFBRSxRQUFRLEVBQUVwL0IsUUFBUSxFQUFFO0dBQ25DLElBQUksQ0FBQ3I1QixLQUFLLENBQUMsQ0FBQztHQUNaLElBQUksQ0FBQzQ0RCxPQUFPLEVBQUUsSUFBSSxDQUFDekMsU0FBUyxFQUFFOThCLFFBQVEsQ0FBQztFQUN4QyxDQUFDOztFQUVEcTlCLFlBQVksRUFBRSxRQUFRLEVBQUVyOUIsUUFBUSxFQUFFO0dBQ2pDLElBQUkrdUIsU0FBUyxFQUFFM3pCLENBQUMsRUFBRTRFLFFBQVEsQ0FBQztJQUMxQjNzQyxLQUFLLEVBQUUyc0MsT0FBTyxDQUFDM3NDLElBQUk7SUFDbkI2bkUsa0JBQWtCLEVBQUUsT0FBT25NLFFBQVEsQ0FBQy9yRCxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxZQUFZLEdBQUcrckQsUUFBUSxDQUFDL3JELElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLE9BQU87SUFDL0hsUCxHQUFHLEVBQUV3UixHQUFHOztHQUVULEdBQUcsRUFBRWpTLEtBQUssSUFBSSxRQUFRLEdBQUdBLEtBQUssSUFBSSxXQUFXLEVBQUU7SUFDOUMsT0FBTyxJQUFJLENBQUNvcUUsVUFBVSxFQUFFejlCLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUMsQ0FBQzJLLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQ3pOLEdBQUcsQ0FBQyxDQUFDO0dBQ2xFLEVBQUUsS0FBSyxHQUFHLEVBQUVULEtBQUssSUFBSSxTQUFTLEdBQUcsT0FBTzJzQyxPQUFPLENBQUNvZ0MsU0FBUyxJQUFJLFlBQVksRUFBRTtJQUMxRSxPQUFPcGdDLE9BQU8sQ0FBQ29nQyxRQUFRLENBQUNDLFNBQVMsRUFBRSxNQUFNLEVBQUV0UixRQUFRLENBQUNqN0QsR0FBRyxDQUFDLENBQUM7R0FDMUQ7O0dBRUEsR0FBRyxFQUFFb25FLGtCQUFrQixFQUFFO0lBQ3hCcG5FLElBQUksRUFBRWk3RCxRQUFRLENBQUM5NkQsSUFBSSxDQUFDLENBQUM7R0FDdEIsRUFBRSxLQUFLO0lBQ05ILElBQUksRUFBRWk3RCxRQUFRLENBQUNqN0QsR0FBRyxDQUFDLENBQUM7R0FDckI7O0dBRUEsR0FBRyxFQUFFVCxLQUFLLElBQUksT0FBTyxFQUFFOzs7SUFHdEIsR0FBRyxFQUFFUyxHQUFHLENBQUNpb0QsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtLQUMvQyxPQUFPam9ELEdBQUcsQ0FBQ2lvRCxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQ3hCOzs7O0lBSUF6MkMsSUFBSSxFQUFFeFIsR0FBRyxDQUFDd3NFLFdBQVcsRUFBRSxJQUFJLENBQUM7SUFDNUIsR0FBRyxFQUFFaDdELElBQUksR0FBRyxFQUFFLEVBQUU7S0FDZixPQUFPeFIsR0FBRyxDQUFDaW9ELE1BQU0sRUFBRXoyQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQzdCOzs7SUFHQUEsSUFBSSxFQUFFeFIsR0FBRyxDQUFDd3NFLFdBQVcsRUFBRSxLQUFLLENBQUM7SUFDN0IsR0FBRyxFQUFFaDdELElBQUksR0FBRyxFQUFFLEVBQUU7S0FDZixPQUFPeFIsR0FBRyxDQUFDaW9ELE1BQU0sRUFBRXoyQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQzdCOzs7SUFHQSxPQUFPeFIsR0FBRztHQUNYOztHQUVBLEdBQUcsRUFBRSxPQUFPQSxJQUFJLElBQUksU0FBUyxFQUFFO0lBQzlCLE9BQU9BLEdBQUcsQ0FBQzJELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDO0dBQ2hDO0dBQ0EsT0FBTzNELEdBQUc7RUFDWCxDQUFDOztFQUVEc1EsS0FBSyxFQUFFLFFBQVEsRUFBRTQ3QixRQUFRLEVBQUU7R0FDMUJBLFFBQVEsRUFBRSxJQUFJLENBQUNpL0IsbUJBQW1CLEVBQUUsSUFBSSxDQUFDRixLQUFLLEVBQUUvK0IsUUFBUSxFQUFFLENBQUM7O0dBRTNELElBQUlnN0IsTUFBTSxFQUFFNS9CLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDZzdCLEtBQUssQ0FBQyxDQUFDO0lBQy9CdUYsV0FBVyxFQUFFbmxDLENBQUMsQ0FBQ3RsQyxHQUFHLEVBQUVrbEUsS0FBSyxFQUFFLFFBQVEsRUFBRTN3RCxDQUFDLEVBQUV4VyxFQUFFLEVBQUU7S0FDM0MsT0FBT0EsQ0FBQztJQUNULEVBQUUsQ0FBQyxDQUFDc0IsTUFBTTtJQUNWcXJFLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIxc0UsSUFBSSxFQUFFLElBQUksQ0FBQ3VwRSxZQUFZLEVBQUVyOUIsUUFBUSxDQUFDO0lBQ2xDMzdCLE1BQU0sRUFBRTZKLE1BQU0sRUFBRXV5RCxJQUFJLEVBQUVDLFVBQVU7Ozs7R0FJakMsR0FBRyxFQUFFLE9BQU8xRixLQUFLLENBQUMwRixXQUFXLElBQUksV0FBVyxFQUFFO0lBQzdDQSxXQUFXLEVBQUUxRixLQUFLLENBQUMwRixVQUFVO0dBQzlCLEVBQUUsS0FBSyxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUM3c0MsUUFBUSxDQUFDNnNDLFdBQVcsSUFBSSxXQUFXLEVBQUU7SUFDNURBLFdBQVcsRUFBRSxJQUFJLENBQUM3c0MsUUFBUSxDQUFDNnNDLFVBQVU7R0FDdEM7Ozs7O0dBS0EsR0FBRyxFQUFFQSxXQUFXLEVBQUU7SUFDakI1c0UsSUFBSSxFQUFFNHNFLFVBQVUsQ0FBQzV0RSxJQUFJLEVBQUVrdEMsT0FBTyxFQUFFbHNDLElBQUksQ0FBQzs7O0lBR3JDLE9BQU9rbkUsS0FBSyxDQUFDMEYsVUFBVTtHQUN4Qjs7R0FFQSxJQUFJLEVBQUV4eUQsT0FBTyxHQUFHOHNELE1BQU0sRUFBRTtJQUN2QnlGLEtBQUssRUFBRSxFQUFFdnlELE1BQU0sRUFBRUEsTUFBTSxFQUFFeXlELFVBQVUsRUFBRTNGLEtBQUssRUFBRTlzRCxPQUFPLEVBQUUsQ0FBQztJQUN0RCxJQUFJO0tBQ0g3SixPQUFPLEVBQUUrMkIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ3VHLE9BQU8sRUFBRTF5RCxPQUFPLENBQUMsQ0FBQ3BiLElBQUksRUFBRSxJQUFJLEVBQUVnQixHQUFHLEVBQUVrc0MsT0FBTyxFQUFFeWdDLElBQUksQ0FBQ0UsV0FBVyxDQUFDOzs7O0tBSWxGLEdBQUcsRUFBRXQ4RCxPQUFPLElBQUksc0JBQXNCLEdBQUdrOEQsV0FBVyxJQUFJLEVBQUUsRUFBRTtNQUMzREMsbUJBQW1CLEVBQUUsSUFBSTtNQUN6QixRQUFRO0tBQ1Q7S0FDQUEsbUJBQW1CLEVBQUUsS0FBSzs7S0FFMUIsR0FBRyxFQUFFbjhELE9BQU8sSUFBSSxVQUFVLEVBQUU7TUFDM0IsSUFBSSxDQUFDazdELE9BQU8sRUFBRSxJQUFJLENBQUNBLE1BQU0sQ0FBQzUwRCxHQUFHLEVBQUUsSUFBSSxDQUFDbXlELFNBQVMsRUFBRTk4QixRQUFRLEVBQUUsQ0FBQztNQUMxRCxNQUFNO0tBQ1A7O0tBRUEsR0FBRyxFQUFFLENBQUMzN0IsT0FBTyxFQUFFO01BQ2QsSUFBSSxDQUFDdzhELFlBQVksRUFBRTdnQyxPQUFPLEVBQUV5Z0MsS0FBSyxDQUFDO01BQ2xDLE9BQU8sS0FBSztLQUNiO0lBQ0QsRUFBRSxNQUFNLEVBQUU5aUUsRUFBRSxFQUFFO0tBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQ2syQixRQUFRLENBQUN1bUMsTUFBTSxHQUFHdG9FLE1BQU0sQ0FBQ2dmLFFBQVEsRUFBRTtNQUM1Q0EsT0FBTyxDQUFDZ3dELEdBQUcsRUFBRSw0Q0FBNEMsRUFBRTlnQyxPQUFPLENBQUN6aEMsR0FBRyxFQUFFLGdCQUFnQixFQUFFa2lFLElBQUksQ0FBQ3Z5RCxPQUFPLEVBQUUsV0FBVyxFQUFFdlEsRUFBRSxDQUFDO0tBQ3pIO0tBQ0EsR0FBRyxFQUFFQSxFQUFFLFdBQVdnUyxVQUFVLEVBQUU7TUFDN0JoUyxDQUFDLENBQUNxVCxRQUFRLEdBQUcsK0NBQStDLEVBQUVndkIsT0FBTyxDQUFDemhDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRWtpRSxJQUFJLENBQUN2eUQsT0FBTyxFQUFFLFdBQVc7S0FDdkg7O0tBRUEsTUFBTXZRLENBQUM7SUFDUjtHQUNEO0dBQ0EsR0FBRyxFQUFFNmlFLG1CQUFtQixFQUFFO0lBQ3pCLE1BQU07R0FDUDtHQUNBLEdBQUcsRUFBRSxJQUFJLENBQUNWLFlBQVksRUFBRTlFLE1BQU0sRUFBRSxFQUFFO0lBQ2pDLElBQUksQ0FBQ3lFLFdBQVcsQ0FBQ250RSxJQUFJLEVBQUUwdEMsUUFBUSxDQUFDO0dBQ2pDO0dBQ0EsT0FBTyxJQUFJO0VBQ1osQ0FBQzs7Ozs7RUFLRCtnQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUvZ0MsT0FBTyxFQUFFOXhCLE9BQU8sRUFBRTtHQUM5QyxPQUFPa3RCLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDbnRCLElBQUksRUFBRSxNQUFNLEVBQUUzRSxNQUFNLENBQUM4eUIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDN3VCLFdBQVcsQ0FBQyxFQUFFO0lBQ2xFakUsTUFBTSxDQUFDcStCLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQ3B6QyxXQUFXLENBQUMsRUFBRSxFQUFFLEdBQUdpaUMsQ0FBQyxFQUFFNEUsUUFBUSxDQUFDLENBQUNudEIsSUFBSSxFQUFFLE1BQU0sQ0FBQztFQUNyRSxDQUFDOzs7RUFHRG11RCxhQUFhLEVBQUUsUUFBUSxFQUFFcHFFLElBQUksRUFBRXNYLE9BQU8sRUFBRTtHQUN2QyxJQUFJcFEsRUFBRSxFQUFFLElBQUksQ0FBQysxQixRQUFRLENBQUNzZ0IsUUFBUSxFQUFFdjlDLEtBQUssQ0FBQztHQUN0QyxPQUFPa0gsRUFBRSxHQUFHLEVBQUVBLENBQUMsQ0FBQzVJLFlBQVksSUFBSTBILE9BQU8sRUFBRWtCLEVBQUUsRUFBRUEsQ0FBQyxFQUFFb1EsT0FBTyxFQUFFLENBQUM7RUFDM0QsQ0FBQzs7O0VBR0QreUQsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0dBQ3ZCLElBQUksRUFBRSxJQUFJcHRFLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRW9DLFNBQVMsQ0FBQ2QsTUFBTSxFQUFFdEIsQ0FBQyxHQUFHLEVBQUU7SUFDNUMsR0FBRyxFQUFFb0MsU0FBUyxFQUFFcEMsRUFBRSxFQUFFLElBQUl3RCxVQUFVLEVBQUU7S0FDbkMsT0FBT3BCLFNBQVMsRUFBRXBDLEVBQUUsQ0FBQztJQUN0QjtHQUNEO0dBQ0EsT0FBT3dELFNBQVM7RUFDakIsQ0FBQzs7Ozs7Ozs7Ozs7RUFXRDZwRSxjQUFjLEVBQUUsUUFBUSxFQUFFbGhDLE9BQU8sRUFBRXlnQyxLQUFLLEVBQUU7R0FDekMsR0FBRyxFQUFFLE9BQU9BLEtBQUssSUFBSSxTQUFTLEVBQUU7SUFDL0JBLEtBQUssRUFBRSxFQUFFdnlELE1BQU0sRUFBRXV5RCxLQUFLLENBQUM7R0FDeEI7O0dBRUEsSUFBSXp2RCxRQUFRLEVBQUUsSUFBSSxDQUFDaXdELFdBQVc7S0FDNUIsSUFBSSxDQUFDRCxhQUFhLEVBQUVoaEMsT0FBTyxDQUFDcHBDLElBQUksRUFBRTZwRSxJQUFJLENBQUN2eUQsT0FBTyxDQUFDO0tBQy9DLElBQUksQ0FBQzZ5RCxpQkFBaUIsRUFBRS9nQyxPQUFPLEVBQUV5Z0MsSUFBSSxDQUFDdnlELE9BQU8sQ0FBQzs7O0tBRzlDLENBQUMsSUFBSSxDQUFDMmxCLFFBQVEsQ0FBQzRvQyxZQUFZLEdBQUd6OEIsT0FBTyxDQUFDc1csTUFBTSxHQUFHai9DLFNBQVM7S0FDeEQrakMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUVzc0IsSUFBSSxDQUFDdnlELE9BQU8sQ0FBQztLQUNuQywyQ0FBMkMsRUFBRTh4QixPQUFPLENBQUNwcEMsS0FBSyxFQUFFO0lBQzdELENBQUM7SUFDRHVxRSxTQUFTLEVBQUUsZUFBZTtHQUMzQixHQUFHLEVBQUUsT0FBT253RCxRQUFRLElBQUksV0FBVyxFQUFFO0lBQ3BDQSxRQUFRLEVBQUVBLE9BQU8sQ0FBQ2xlLElBQUksRUFBRSxJQUFJLEVBQUUydEUsSUFBSSxDQUFDRSxVQUFVLEVBQUUzZ0MsUUFBUSxDQUFDO0dBQ3pELEVBQUUsS0FBSyxHQUFHLEVBQUVtaEMsUUFBUSxDQUFDeGlFLElBQUksRUFBRXFTLFFBQVEsRUFBRSxFQUFFO0lBQ3RDQSxRQUFRLEVBQUVvcUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRTNsRCxPQUFPLENBQUN2WixPQUFPLEVBQUUwcEUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFVixJQUFJLENBQUNFLFdBQVcsQ0FBQztHQUNyRjs7R0FFQSxPQUFPM3ZELE9BQU87RUFDZixDQUFDOztFQUVENnZELFlBQVksRUFBRSxRQUFRLEVBQUU3Z0MsT0FBTyxFQUFFeWdDLEtBQUssRUFBRTtHQUN2QyxJQUFJenZELFFBQVEsRUFBRSxJQUFJLENBQUNrd0QsY0FBYyxFQUFFbGhDLE9BQU8sRUFBRXlnQyxLQUFLLENBQUM7O0dBRWxELElBQUksQ0FBQzFGLFNBQVMsQ0FBQ3pvRSxJQUFJLEVBQUU7SUFDcEIwZSxPQUFPLEVBQUVBLE9BQU87SUFDaEJndkIsT0FBTyxFQUFFQSxPQUFPO0lBQ2hCOXhCLE1BQU0sRUFBRXV5RCxJQUFJLENBQUN2eUQ7R0FDZCxFQUFFLENBQUM7O0dBRUgsSUFBSSxDQUFDd3dELFFBQVEsRUFBRTErQixPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUVvYSxPQUFPO0dBQ3ZDLElBQUksQ0FBQ2lzRCxTQUFTLEVBQUVqOUIsT0FBTyxDQUFDcHBDLEtBQUssRUFBRSxFQUFFb2EsT0FBTztFQUN6QyxDQUFDOztFQUVEK3VELFVBQVUsRUFBRSxRQUFRLEVBQUVxQixTQUFTLEVBQUU7R0FDaEMsR0FBRyxFQUFFLElBQUksQ0FBQ3Z0QyxRQUFRLENBQUN3dEMsUUFBUSxFQUFFO0lBQzVCRCxTQUFTLEVBQUVBLFFBQVEsQ0FBQ3gxRCxHQUFHLEVBQUV3MUQsUUFBUSxDQUFDcjhELE1BQU0sRUFBRSxJQUFJLENBQUM4dUIsUUFBUSxDQUFDd3RDLFFBQVEsRUFBRSxDQUFDO0dBQ3BFO0dBQ0EsT0FBT0QsUUFBUTtFQUNoQixDQUFDOztFQUVEMUIsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDN0IsSUFBSTdyRSxDQUFDLEVBQUVrUCxRQUFRLEVBQUVwTCxLQUFLO0dBQ3RCLElBQUksRUFBRTlELEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDa25FLFNBQVMsRUFBRWxuRSxFQUFFLENBQUMsRUFBRUEsQ0FBQyxHQUFHLEVBQUU7SUFDdkM4RCxNQUFNLEVBQUUsSUFBSSxDQUFDb2pFLFNBQVMsRUFBRWxuRSxFQUFFLENBQUM7SUFDM0IsR0FBRyxFQUFFLElBQUksQ0FBQ2dnQyxRQUFRLENBQUMycEMsVUFBVSxFQUFFO0tBQzlCLElBQUksQ0FBQzNwQyxRQUFRLENBQUMycEMsU0FBUyxDQUFDMXFFLElBQUksRUFBRSxJQUFJLEVBQUU2RSxLQUFLLENBQUNxb0MsT0FBTyxFQUFFLElBQUksQ0FBQ25NLFFBQVEsQ0FBQ29vQyxVQUFVLEVBQUUsSUFBSSxDQUFDcG9DLFFBQVEsQ0FBQ3NvQyxXQUFXLENBQUM7SUFDeEc7SUFDQSxJQUFJLENBQUNsbUIsU0FBUyxFQUFFdCtDLEtBQUssQ0FBQ3FvQyxPQUFPLEVBQUVyb0MsS0FBSyxDQUFDcVosUUFBUSxDQUFDO0dBQy9DO0dBQ0EsR0FBRyxFQUFFLElBQUksQ0FBQytwRCxTQUFTLENBQUM1bEUsT0FBTyxFQUFFO0lBQzVCLElBQUksQ0FBQ2dyRSxPQUFPLEVBQUUsSUFBSSxDQUFDQSxNQUFNLENBQUN2MEQsR0FBRyxFQUFFLElBQUksQ0FBQ3NvRCxXQUFXLENBQUM7R0FDakQ7R0FDQSxHQUFHLEVBQUUsSUFBSSxDQUFDcmdDLFFBQVEsQ0FBQ2dDLFFBQVEsRUFBRTtJQUM1QixJQUFJLEVBQUVoaUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM0ckUsV0FBVyxFQUFFNXJFLEVBQUUsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsRUFBRTtLQUN6QyxJQUFJLENBQUNvaUQsU0FBUyxFQUFFLElBQUksQ0FBQ3dwQixXQUFXLEVBQUU1ckUsRUFBRSxFQUFFLENBQUM7SUFDeEM7R0FDRDtHQUNBLEdBQUcsRUFBRSxJQUFJLENBQUNnZ0MsUUFBUSxDQUFDK29DLFlBQVksRUFBRTtJQUNoQyxJQUFJLEVBQUUvb0UsRUFBRSxFQUFFLENBQUMsRUFBRWtQLFNBQVMsRUFBRSxJQUFJLENBQUN1K0QsYUFBYSxDQUFDLENBQUMsRUFBRXYrRCxRQUFRLEVBQUVsUCxFQUFFLENBQUMsRUFBRUEsQ0FBQyxHQUFHLEVBQUU7S0FDbEUsSUFBSSxDQUFDZ2dDLFFBQVEsQ0FBQytvQyxXQUFXLENBQUM5cEUsSUFBSSxFQUFFLElBQUksRUFBRWlRLFFBQVEsRUFBRWxQLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQ2dnQyxRQUFRLENBQUNvb0MsVUFBVSxFQUFFLElBQUksQ0FBQ3BvQyxRQUFRLENBQUNzb0MsV0FBVyxDQUFDO0lBQzFHO0dBQ0Q7R0FDQSxJQUFJLENBQUNvRCxPQUFPLEVBQUUsSUFBSSxDQUFDQSxNQUFNLENBQUM1MEQsR0FBRyxFQUFFLElBQUksQ0FBQ3cxRCxPQUFPLENBQUM7R0FDNUMsSUFBSSxDQUFDUCxVQUFVLENBQUMsQ0FBQztHQUNqQixJQUFJLENBQUNHLFVBQVUsRUFBRSxJQUFJLENBQUNJLE9BQU8sQ0FBQyxDQUFDbnFELElBQUksQ0FBQyxDQUFDO0VBQ3RDLENBQUM7O0VBRURzckQsYUFBYSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0dBQ3pCLE9BQU8sSUFBSSxDQUFDekMsZUFBZSxDQUFDbDBELEdBQUcsRUFBRSxJQUFJLENBQUM0MkQsZUFBZSxDQUFDLEVBQUUsQ0FBQztFQUMxRCxDQUFDOztFQUVEQSxlQUFlLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDM0IsT0FBT25tQyxDQUFDLEVBQUUsSUFBSSxDQUFDMi9CLFVBQVUsQ0FBQyxDQUFDamxFLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRTtJQUMxQyxPQUFPLElBQUksQ0FBQ2txQyxPQUFPO0dBQ3BCLEVBQUUsQ0FBQztFQUNKLENBQUM7O0VBRURpVyxTQUFTLEVBQUUsUUFBUSxFQUFFalcsT0FBTyxFQUFFaHZCLFFBQVEsRUFBRTtHQUN2QyxJQUFJd3dELEtBQUssRUFBRXJDLEtBQUssRUFBRXNDLE9BQU8sRUFBRTl6RCxDQUFDO0lBQzNCaFcsTUFBTSxFQUFFLElBQUksQ0FBQ21sRSxTQUFTLEVBQUU5OEIsUUFBUSxDQUFDO0lBQ2pDMGhDLFVBQVUsRUFBRSxJQUFJLENBQUNDLFFBQVEsRUFBRTNoQyxRQUFRLENBQUM7SUFDcEM0aEMsWUFBWSxFQUFFeG1DLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxtQkFBbUIsQ0FBQzs7R0FFdEQsR0FBRyxFQUFFckwsS0FBSyxDQUFDeEMsT0FBTyxFQUFFOzs7SUFHbkJ3QyxLQUFLLENBQUN1MkIsV0FBVyxFQUFFLElBQUksQ0FBQzJGLFFBQVEsQ0FBQ3NvQyxXQUFXLENBQUMsQ0FBQ3R1QyxRQUFRLEVBQUUsSUFBSSxDQUFDZ0csUUFBUSxDQUFDb29DLFdBQVcsQ0FBQzs7O0lBR2xGdGtFLEtBQUssQ0FBQzBvQixJQUFJLEVBQUVyUCxRQUFRLENBQUM7R0FDdEIsRUFBRSxLQUFLOzs7SUFHTnJaLE1BQU0sRUFBRXlqQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQ3ZILFFBQVEsQ0FBQ3VvQyxhQUFhLEVBQUUsSUFBSTtLQUNqRCxDQUFDcDVELElBQUksRUFBRSxJQUFJLEVBQUUwK0QsVUFBVSxFQUFFLFNBQVM7S0FDbEMsQ0FBQzd6QyxRQUFRLEVBQUUsSUFBSSxDQUFDZ0csUUFBUSxDQUFDb29DLFdBQVc7S0FDcEMsQ0FBQzU3QyxJQUFJLEVBQUVyUCxRQUFRLEdBQUcsR0FBRyxDQUFDOzs7SUFHdkJ3d0QsTUFBTSxFQUFFN3BFLEtBQUs7SUFDYixHQUFHLEVBQUUsSUFBSSxDQUFDazhCLFFBQVEsQ0FBQ3d0QyxRQUFRLEVBQUU7Ozs7S0FJNUJHLE1BQU0sRUFBRTdwRSxLQUFLLENBQUN1ZSxJQUFJLENBQUMsQ0FBQyxDQUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDMkIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUNrYyxRQUFRLENBQUN3dEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDdDhELE1BQU0sQ0FBQyxDQUFDO0lBQ2hGO0lBQ0EsR0FBRyxFQUFFLElBQUksQ0FBQ3E1RCxjQUFjLENBQUNqcEUsT0FBTyxFQUFFO0tBQ2pDLElBQUksQ0FBQ2lwRSxjQUFjLENBQUNyOUMsTUFBTSxFQUFFeWdELE1BQU0sQ0FBQztJQUNwQyxFQUFFLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQzN0QyxRQUFRLENBQUNndUMsZUFBZSxFQUFFO0tBQzFDLElBQUksQ0FBQ2h1QyxRQUFRLENBQUNndUMsY0FBYyxDQUFDL3VFLElBQUksRUFBRSxJQUFJLEVBQUUwdUUsS0FBSyxFQUFFcG1DLENBQUMsRUFBRTRFLFFBQVEsRUFBRSxDQUFDO0lBQy9ELEVBQUUsS0FBSztLQUNOd2hDLEtBQUssQ0FBQ2hnRCxXQUFXLEVBQUV3ZSxRQUFRLENBQUM7SUFDN0I7OztJQUdBLEdBQUcsRUFBRXJvQyxLQUFLLENBQUN3UyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUU7OztLQUcxQnhTLEtBQUssQ0FBQ3FMLElBQUksRUFBRSxLQUFLLEVBQUUwK0QsVUFBVSxDQUFDOzs7O0lBSS9CLEVBQUUsS0FBSyxHQUFHLEVBQUUvcEUsS0FBSyxDQUFDb1UsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMrMUQsYUFBYSxFQUFFSixVQUFVLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQ3ZzRSxPQUFPLElBQUksRUFBRSxFQUFFO0tBQ2xHc3NFLFFBQVEsRUFBRTlwRSxLQUFLLENBQUNxTCxJQUFJLEVBQUUsS0FBSyxDQUFDOzs7S0FHNUIsR0FBRyxFQUFFLENBQUM0K0QsWUFBWSxFQUFFO01BQ25CQSxZQUFZLEVBQUVILE9BQU87S0FDdEIsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDRyxXQUFXLENBQUM1akUsS0FBSyxFQUFFLElBQUl2QyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQ3FtRSxhQUFhLEVBQUVMLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7OztNQUcvRkcsWUFBWSxHQUFHLElBQUksRUFBRUgsT0FBTztLQUM3QjtLQUNBcm1DLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxrQkFBa0IsRUFBRTQrRCxZQUFZLENBQUM7OztLQUdwRHpDLE1BQU0sRUFBRSxJQUFJLENBQUNsaEUsTUFBTSxFQUFFK2hDLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUM7S0FDbkMsR0FBRyxFQUFFdW9FLE1BQU0sRUFBRTtNQUNaeHhELEVBQUUsRUFBRSxJQUFJO01BQ1J5dEIsQ0FBQyxDQUFDeGxDLElBQUksRUFBRStYLENBQUMsQ0FBQzFQLE1BQU0sRUFBRSxRQUFRLEVBQUVySCxJQUFJLEVBQUV5b0UsVUFBVSxFQUFFO09BQzdDLEdBQUcsRUFBRUEsVUFBVSxJQUFJRixNQUFNLEVBQUU7UUFDMUIvakMsQ0FBQyxFQUFFLFVBQVUsRUFBRXp0QixDQUFDLENBQUNtMEQsYUFBYSxFQUFFbHJFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRStXLENBQUMsQ0FBQ2d0RCxZQUFZO1NBQzVELENBQUMzM0QsSUFBSSxFQUFFLGtCQUFrQixFQUFFckwsS0FBSyxDQUFDcUwsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO09BQ2pEO01BQ0QsRUFBRSxDQUFDO0tBQ0o7SUFDRDtHQUNEO0dBQ0EsR0FBRyxFQUFFLENBQUNnTyxRQUFRLEdBQUcsSUFBSSxDQUFDNmlCLFFBQVEsQ0FBQ2dDLFFBQVEsRUFBRTtJQUN4Q2wrQixLQUFLLENBQUMxRCxJQUFJLEVBQUUsR0FBRyxDQUFDO0lBQ2hCLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQzQvQixRQUFRLENBQUNnQyxRQUFRLElBQUksU0FBUyxFQUFFO0tBQ2hEbCtCLEtBQUssQ0FBQ2syQixRQUFRLEVBQUUsSUFBSSxDQUFDZ0csUUFBUSxDQUFDZ0MsUUFBUSxDQUFDO0lBQ3hDLEVBQUUsS0FBSztLQUNOLElBQUksQ0FBQ2hDLFFBQVEsQ0FBQ2dDLE9BQU8sRUFBRWwrQixLQUFLLEVBQUVxb0MsUUFBUSxDQUFDO0lBQ3hDO0dBQ0Q7R0FDQSxJQUFJLENBQUNtZ0MsT0FBTyxFQUFFLElBQUksQ0FBQ0EsTUFBTSxDQUFDdjBELEdBQUcsRUFBRWpVLE1BQU0sQ0FBQztFQUN2QyxDQUFDOztFQUVEbWxFLFNBQVMsRUFBRSxRQUFRLEVBQUU5OEIsUUFBUSxFQUFFO0dBQzlCLElBQUlwcEMsS0FBSyxFQUFFLElBQUksQ0FBQ2tyRSxhQUFhLEVBQUUsSUFBSSxDQUFDSCxRQUFRLEVBQUUzaEMsUUFBUSxFQUFFLENBQUM7SUFDeEQraEMsVUFBVSxFQUFFM21DLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxtQkFBbUIsQ0FBQztJQUNuRHJPLFNBQVMsRUFBRSxjQUFjLEVBQUVpQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUVBLEtBQUssRUFBRSxNQUFNOzs7R0FHcEUsR0FBRyxFQUFFbXJFLFVBQVUsRUFBRTtJQUNoQnB0RSxTQUFTLEVBQUVBLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDbXRFLGFBQWEsRUFBRUMsVUFBVTtLQUMzRCxDQUFDdHFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0dBQzNCOztHQUVBLE9BQU87SUFDTixDQUFDK25FLE1BQU0sQ0FBQztJQUNSLENBQUNqK0QsTUFBTSxFQUFFNU0sU0FBUyxDQUFDO0VBQ3JCLENBQUM7Ozs7O0VBS0RtdEUsYUFBYSxFQUFFLFFBQVEsRUFBRXp2RCxPQUFPLEVBQUU7R0FDakMsT0FBT0EsTUFBTSxDQUFDNWEsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE9BQU8sQ0FBQztFQUMxRSxDQUFDOztFQUVEa3FFLFFBQVEsRUFBRSxRQUFRLEVBQUUzaEMsUUFBUSxFQUFFO0dBQzdCLE9BQU8sSUFBSSxDQUFDL2hDLE1BQU0sRUFBRStoQyxPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUNvbUUsU0FBUyxFQUFFaDlCLFFBQVEsRUFBRSxFQUFFQSxPQUFPLENBQUNwcEMsS0FBSyxFQUFFb3BDLE9BQU8sQ0FBQ3poQyxHQUFHLEdBQUd5aEMsT0FBTyxDQUFDcHBDLEtBQUssQ0FBQztFQUNoSCxDQUFDOztFQUVEcW9FLG1CQUFtQixFQUFFLFFBQVEsRUFBRWovQixRQUFRLEVBQUU7OztHQUd4QyxHQUFHLEVBQUUsSUFBSSxDQUFDZzlCLFNBQVMsRUFBRWg5QixRQUFRLEVBQUUsRUFBRTtJQUNoQ0EsUUFBUSxFQUFFLElBQUksQ0FBQ3k5QixVQUFVLEVBQUV6OUIsT0FBTyxDQUFDcHBDLEtBQUssQ0FBQztHQUMxQzs7O0dBR0EsT0FBT3drQyxDQUFDLEVBQUU0RSxRQUFRLENBQUMsQ0FBQ3IxQixHQUFHLEVBQUUsSUFBSSxDQUFDa3BCLFFBQVEsQ0FBQzJvQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDckQsQ0FBQzs7RUFFRFEsU0FBUyxFQUFFLFFBQVEsRUFBRWg5QixRQUFRLEVBQUU7R0FDOUIsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUNyaEMsSUFBSSxFQUFFcWhDLE9BQU8sQ0FBQzNzQyxLQUFLLENBQUM7RUFDbEQsQ0FBQzs7RUFFRG9xRSxVQUFVLEVBQUUsUUFBUSxFQUFFN21FLEtBQUssRUFBRTtHQUM1QixPQUFPd2tDLENBQUMsRUFBRSxJQUFJLENBQUN1L0IsWUFBWSxDQUFDLENBQUNsNUQsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUNxZ0UsYUFBYSxFQUFFbHJFLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQztFQUNuRixDQUFDOztFQUVEb3JFLFNBQVMsRUFBRSxRQUFRLEVBQUVscEUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtHQUNyQyxPQUFPLEVBQUVBLE9BQU8sQ0FBQ3ppQyxRQUFRLENBQUNwRSxXQUFXLENBQUMsRUFBRSxFQUFFO0dBQzFDLEtBQUssUUFBUTtJQUNaLE9BQU9paUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFNEUsUUFBUSxDQUFDLENBQUM3cUMsTUFBTTtHQUM5QyxLQUFLLE9BQU87SUFDWCxHQUFHLEVBQUUsSUFBSSxDQUFDNm5FLFNBQVMsRUFBRWg5QixRQUFRLEVBQUUsRUFBRTtLQUNoQyxPQUFPLElBQUksQ0FBQ3k5QixVQUFVLEVBQUV6OUIsT0FBTyxDQUFDcHBDLEtBQUssQ0FBQyxDQUFDMkssTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDcE0sTUFBTTtJQUNuRTtHQUNEO0dBQ0EsT0FBTzJELEtBQUssQ0FBQzNELE1BQU07RUFDcEIsQ0FBQzs7RUFFRDhzRSxNQUFNLEVBQUUsUUFBUSxFQUFFaHlDLEtBQUssRUFBRStQLFFBQVEsRUFBRTtHQUNsQyxPQUFPLElBQUksQ0FBQ2tpQyxXQUFXLEVBQUUsT0FBT2p5QyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUNpeUMsV0FBVyxFQUFFLE9BQU9qeUMsTUFBTSxDQUFDLEVBQUVBLEtBQUssRUFBRStQLFFBQVEsRUFBRSxFQUFFLElBQUk7RUFDcEcsQ0FBQzs7RUFFRGtpQyxXQUFXLEVBQUU7R0FDWixTQUFTLEVBQUUsUUFBUSxFQUFFanlDLE1BQU0sRUFBRTtJQUM1QixPQUFPQSxLQUFLO0dBQ2IsQ0FBQztHQUNELFFBQVEsRUFBRSxRQUFRLEVBQUVBLEtBQUssRUFBRStQLFFBQVEsRUFBRTtJQUNwQyxPQUFPLENBQUMsQ0FBQzVFLENBQUMsRUFBRW5MLEtBQUssRUFBRStQLE9BQU8sQ0FBQ2lNLEtBQUssQ0FBQyxDQUFDOTJDLE1BQU07R0FDekMsQ0FBQztHQUNELFVBQVUsRUFBRSxRQUFRLEVBQUU4NkIsS0FBSyxFQUFFK1AsUUFBUSxFQUFFO0lBQ3RDLE9BQU8vUCxLQUFLLEVBQUUrUCxRQUFRLENBQUM7R0FDeEI7RUFDRCxDQUFDOztFQUVEazlCLFFBQVEsRUFBRSxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFO0dBQzdCLElBQUlsc0MsSUFBSSxFQUFFLElBQUksQ0FBQ3VwRSxZQUFZLEVBQUVyOUIsUUFBUSxDQUFDO0dBQ3RDLE9BQU8sQ0FBQzVFLENBQUMsQ0FBQ2kvQixTQUFTLENBQUN1RyxPQUFPLENBQUNqRixRQUFRLENBQUM3b0UsSUFBSSxFQUFFLElBQUksRUFBRWdCLEdBQUcsRUFBRWtzQyxRQUFRLEVBQUUsR0FBRyxxQkFBcUI7RUFDekYsQ0FBQzs7RUFFRG1pQyxZQUFZLEVBQUUsUUFBUSxFQUFFbmlDLFFBQVEsRUFBRTtHQUNqQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUNpUyxPQUFPLEVBQUVqUyxPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUU7SUFDcEMsSUFBSSxDQUFDZ2tFLGNBQWMsRUFBRTtJQUNyQngvQixDQUFDLEVBQUU0RSxRQUFRLENBQUMsQ0FBQ25TLFFBQVEsRUFBRSxJQUFJLENBQUNnRyxRQUFRLENBQUNxb0MsYUFBYSxDQUFDO0lBQ25ELElBQUksQ0FBQ2pxQixPQUFPLEVBQUVqUyxPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUUsSUFBSTtHQUNwQztFQUNELENBQUM7O0VBRUR3ckUsV0FBVyxFQUFFLFFBQVEsRUFBRXBpQyxPQUFPLEVBQUU4NkIsTUFBTSxFQUFFO0dBQ3ZDLElBQUksQ0FBQ0YsY0FBYyxFQUFFOzs7R0FHckIsR0FBRyxFQUFFLElBQUksQ0FBQ0EsZUFBZSxFQUFFLEVBQUUsRUFBRTtJQUM5QixJQUFJLENBQUNBLGVBQWUsRUFBRSxDQUFDO0dBQ3hCO0dBQ0EsT0FBTyxJQUFJLENBQUMzb0IsT0FBTyxFQUFFalMsT0FBTyxDQUFDcHBDLEtBQUssQ0FBQztHQUNuQ3drQyxDQUFDLEVBQUU0RSxRQUFRLENBQUMsQ0FBQzlSLFdBQVcsRUFBRSxJQUFJLENBQUMyRixRQUFRLENBQUNxb0MsYUFBYSxDQUFDO0dBQ3RELEdBQUcsRUFBRXBCLE1BQU0sR0FBRyxJQUFJLENBQUNGLGVBQWUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDRixjQUFjLEdBQUcsSUFBSSxDQUFDenVCLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDOUU3USxDQUFDLEVBQUUsSUFBSSxDQUFDdS9CLFlBQVksQ0FBQyxDQUFDajBELE1BQU0sQ0FBQyxDQUFDOzs7Ozs7SUFNOUIsR0FBRyxFQUFFLElBQUksQ0FBQzZ6RCxhQUFhLEVBQUU7S0FDeEJuL0IsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLElBQUksQ0FBQ20vQixZQUFZLENBQUMzakUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMrakUsWUFBWSxDQUFDLENBQUN0dEQsTUFBTSxDQUFDLENBQUM7SUFDdEY7O0lBRUEsSUFBSSxDQUFDcXRELGNBQWMsRUFBRSxLQUFLO0dBQzNCLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQ0ksTUFBTSxHQUFHLElBQUksQ0FBQ0YsZUFBZSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUNGLGNBQWMsRUFBRTtJQUN2RXQvQixDQUFDLEVBQUUsSUFBSSxDQUFDdS9CLFlBQVksQ0FBQyxDQUFDdHJDLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNoRSxJQUFJLENBQUNxckMsY0FBYyxFQUFFLEtBQUs7R0FDM0I7RUFDRCxDQUFDOztFQUVEMkgsYUFBYSxFQUFFLFFBQVEsRUFBRXJpQyxPQUFPLEVBQUU5eEIsT0FBTyxFQUFFO0dBQzFDQSxPQUFPLEVBQUUsT0FBT0EsT0FBTyxJQUFJLFNBQVMsR0FBR0EsT0FBTyxHQUFHLFFBQVE7O0dBRXpELE9BQU9rdEIsQ0FBQyxDQUFDdm9CLElBQUksRUFBRW10QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRzVFLENBQUMsQ0FBQ3ZvQixJQUFJLEVBQUVtdEIsT0FBTyxFQUFFLGVBQWUsRUFBRTtJQUM5RWhyQixHQUFHLEVBQUUsSUFBSTtJQUNUOGxELEtBQUssRUFBRSxJQUFJO0lBQ1g5cEQsT0FBTyxFQUFFLElBQUksQ0FBQ2t3RCxjQUFjLEVBQUVsaEMsT0FBTyxFQUFFLEVBQUU5eEIsTUFBTSxFQUFFQSxPQUFPLEVBQUU7R0FDM0QsRUFBRSxDQUFDO0VBQ0osQ0FBQzs7O0VBR0R5ekIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0dBQ25CLElBQUksQ0FBQ2crQixTQUFTLENBQUMsQ0FBQzs7R0FFaEJ2a0MsQ0FBQyxFQUFFLElBQUksQ0FBQ3UvQixZQUFZO0lBQ25CLENBQUN4aEQsR0FBRyxFQUFFLFlBQVk7SUFDbEIsQ0FBQzNGLFVBQVUsRUFBRSxZQUFZO0lBQ3pCLENBQUMvUixJQUFJLEVBQUUseUJBQXlCO0tBQy9CLENBQUMwWCxHQUFHLEVBQUUsb0JBQW9CO0tBQzFCLENBQUMrVSxXQUFXLEVBQUUsd0JBQXdCO0lBQ3ZDLENBQUN6c0IsSUFBSSxFQUFFLDBCQUEwQjtLQUNoQyxDQUFDMFgsR0FBRyxFQUFFLHFCQUFxQjtLQUMzQixDQUFDK1UsV0FBVyxFQUFFLHlCQUF5QjtJQUN4QyxDQUFDenNCLElBQUksRUFBRSwrQkFBK0I7S0FDckMsQ0FBQzBYLEdBQUcsRUFBRSwwQkFBMEI7S0FDaEMsQ0FBQytVLFdBQVcsRUFBRSw4QkFBOEI7SUFDN0MsQ0FBQ3pzQixJQUFJLEVBQUUsa0NBQWtDO0tBQ3hDLENBQUMwWCxHQUFHLEVBQUUsNkJBQTZCO0tBQ25DLENBQUMrVSxXQUFXLEVBQUUsaUNBQWlDO0lBQ2hELENBQUN6c0IsSUFBSSxFQUFFLDZCQUE2QjtLQUNuQyxDQUFDMFgsR0FBRyxFQUFFLHdCQUF3QjtLQUM5QixDQUFDK1UsV0FBVyxFQUFFLDRCQUE0QixDQUFDO0VBQzlDOztDQUVELENBQUM7O0NBRURvMEMsaUJBQWlCLEVBQUU7RUFDbEIzRyxRQUFRLEVBQUUsRUFBRUEsUUFBUSxFQUFFLEtBQUssQ0FBQztFQUM1QitCLEtBQUssRUFBRSxFQUFFQSxLQUFLLEVBQUUsS0FBSyxDQUFDO0VBQ3RCdHFDLEdBQUcsRUFBRSxFQUFFQSxHQUFHLEVBQUUsS0FBSyxDQUFDO0VBQ2xCdXFDLElBQUksRUFBRSxFQUFFQSxJQUFJLEVBQUUsS0FBSyxDQUFDO0VBQ3BCQyxPQUFPLEVBQUUsRUFBRUEsT0FBTyxFQUFFLEtBQUssQ0FBQztFQUMxQkMsTUFBTSxFQUFFLEVBQUVBLE1BQU0sRUFBRSxLQUFLLENBQUM7RUFDeEJDLE1BQU0sRUFBRSxFQUFFQSxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ3hCeUUsVUFBVSxFQUFFLEVBQUVBLFVBQVUsRUFBRSxLQUFLO0NBQ2hDLENBQUM7O0NBRURDLGFBQWEsRUFBRSxRQUFRLEVBQUVyaEUsU0FBUyxFQUFFNjVELE1BQU0sRUFBRTtFQUMzQyxHQUFHLEVBQUU3NUQsU0FBUyxDQUFDak0sWUFBWSxJQUFJMEgsT0FBTyxFQUFFO0dBQ3ZDLElBQUksQ0FBQzBsRSxpQkFBaUIsRUFBRW5oRSxVQUFVLEVBQUUsRUFBRTY1RCxLQUFLO0VBQzVDLEVBQUUsS0FBSztHQUNONS9CLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUsSUFBSSxDQUFDNHJFLGlCQUFpQixFQUFFbmhFLFVBQVUsQ0FBQztFQUM5QztDQUNELENBQUM7O0NBRURxNkQsVUFBVSxFQUFFLFFBQVEsRUFBRXg3QixRQUFRLEVBQUU7RUFDL0IsSUFBSWc3QixNQUFNLEVBQUUsQ0FBQyxDQUFDO0dBQ2JsdEMsUUFBUSxFQUFFc04sQ0FBQyxFQUFFNEUsUUFBUSxDQUFDLENBQUNoOUIsSUFBSSxFQUFFLFFBQVEsQ0FBQzs7RUFFdkMsR0FBRyxFQUFFOHFCLFFBQVEsRUFBRTtHQUNkc04sQ0FBQyxDQUFDeGxDLElBQUksRUFBRWs0QixPQUFPLENBQUM1MEIsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0lBQ3hDLEdBQUcsRUFBRSxLQUFLLEdBQUdraUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2lJLGtCQUFrQixFQUFFO0tBQzVDbG5DLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUVza0UsS0FBSyxFQUFFNS9CLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNpSSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN6RDtHQUNELEVBQUUsQ0FBQztFQUNKO0VBQ0EsT0FBT3RILEtBQUs7Q0FDYixDQUFDOztDQUVEeUgsc0JBQXNCLEVBQUUsUUFBUSxFQUFFekgsS0FBSyxFQUFFM25FLElBQUksRUFBRTZhLE1BQU0sRUFBRXBWLE1BQU0sRUFBRTs7OztFQUk5RCxHQUFHLEVBQUUsY0FBYyxDQUFDNkYsSUFBSSxFQUFFdVAsT0FBTyxFQUFFLEdBQUcsRUFBRTdhLEtBQUssSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUNzTCxJQUFJLEVBQUV0TCxLQUFLLEVBQUUsRUFBRSxFQUFFO0dBQzdGeUYsTUFBTSxFQUFFNHBFLE1BQU0sRUFBRTVwRSxNQUFNLENBQUM7OztHQUd2QixHQUFHLEVBQUVpaUMsS0FBSyxFQUFFamlDLE1BQU0sRUFBRSxFQUFFO0lBQ3JCQSxNQUFNLEVBQUV6QixTQUFTO0dBQ2xCO0VBQ0Q7O0VBRUEsR0FBRyxFQUFFeUIsTUFBTSxHQUFHQSxNQUFNLElBQUksRUFBRSxFQUFFO0dBQzNCa2lFLEtBQUssRUFBRTlzRCxPQUFPLEVBQUUsRUFBRXBWLEtBQUs7RUFDeEIsRUFBRSxLQUFLLEdBQUcsRUFBRXpGLEtBQUssSUFBSTZhLE9BQU8sR0FBRzdhLEtBQUssSUFBSSxRQUFRLEVBQUU7Ozs7R0FJakQybkUsS0FBSyxFQUFFOXNELE9BQU8sRUFBRSxFQUFFLElBQUk7RUFDdkI7Q0FDRCxDQUFDOztDQUVEdXRELGNBQWMsRUFBRSxRQUFRLEVBQUV6N0IsUUFBUSxFQUFFO0VBQ25DLElBQUlnN0IsTUFBTSxFQUFFLENBQUMsQ0FBQztHQUNiak0sU0FBUyxFQUFFM3pCLENBQUMsRUFBRTRFLFFBQVEsQ0FBQztHQUN2QjNzQyxLQUFLLEVBQUUyc0MsT0FBTyxDQUFDOXJDLFlBQVksRUFBRSxPQUFPLENBQUM7R0FDckNnYSxNQUFNLEVBQUVwVixLQUFLOztFQUVkLElBQUksRUFBRW9WLE9BQU8sR0FBR2t0QixDQUFDLENBQUNpL0IsU0FBUyxDQUFDdUcsUUFBUSxFQUFFOzs7R0FHckMsR0FBRyxFQUFFMXlELE9BQU8sSUFBSSxXQUFXLEVBQUU7SUFDNUJwVixNQUFNLEVBQUVrbkMsT0FBTyxDQUFDOXJDLFlBQVksRUFBRWdhLE9BQU8sQ0FBQzs7OztJQUl0QyxHQUFHLEVBQUVwVixNQUFNLElBQUksR0FBRyxFQUFFO0tBQ25CQSxNQUFNLEVBQUUsSUFBSTtJQUNiOzs7SUFHQUEsTUFBTSxFQUFFLENBQUMsQ0FBQ0EsS0FBSztHQUNoQixFQUFFLEtBQUs7SUFDTkEsTUFBTSxFQUFFaTJELFFBQVEsQ0FBQy9yRCxJQUFJLEVBQUVrTCxPQUFPLENBQUM7R0FDaEM7O0dBRUEsSUFBSSxDQUFDdTBELHNCQUFzQixFQUFFekgsS0FBSyxFQUFFM25FLElBQUksRUFBRTZhLE1BQU0sRUFBRXBWLE1BQU0sQ0FBQztFQUMxRDs7O0VBR0EsR0FBRyxFQUFFa2lFLEtBQUssQ0FBQ2dELFVBQVUsR0FBRyxzQkFBc0IsQ0FBQ3IvRCxJQUFJLEVBQUVxOEQsS0FBSyxDQUFDZ0QsVUFBVSxFQUFFLEVBQUU7R0FDeEUsT0FBT2hELEtBQUssQ0FBQ2dELFNBQVM7RUFDdkI7O0VBRUEsT0FBT2hELEtBQUs7Q0FDYixDQUFDOztDQUVEVSxTQUFTLEVBQUUsUUFBUSxFQUFFMTdCLFFBQVEsRUFBRTtFQUM5QixJQUFJZzdCLE1BQU0sRUFBRSxDQUFDLENBQUM7R0FDYmpNLFNBQVMsRUFBRTN6QixDQUFDLEVBQUU0RSxRQUFRLENBQUM7R0FDdkIzc0MsS0FBSyxFQUFFMnNDLE9BQU8sQ0FBQzlyQyxZQUFZLEVBQUUsT0FBTyxDQUFDO0dBQ3JDZ2EsTUFBTSxFQUFFcFYsS0FBSzs7RUFFZCxJQUFJLEVBQUVvVixPQUFPLEdBQUdrdEIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ3VHLFFBQVEsRUFBRTtHQUNyQzluRSxNQUFNLEVBQUVpMkQsUUFBUSxDQUFDbDhDLElBQUksRUFBRSxPQUFPLEVBQUUzRSxNQUFNLENBQUM4eUIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDN3VCLFdBQVcsQ0FBQyxFQUFFLEVBQUVqRSxNQUFNLENBQUNxK0IsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDcHpDLFdBQVcsQ0FBQyxFQUFFLENBQUM7OztHQUd4RyxHQUFHLEVBQUVMLE1BQU0sSUFBSSxHQUFHLEVBQUU7SUFDbkJBLE1BQU0sRUFBRSxJQUFJO0dBQ2I7O0dBRUEsSUFBSSxDQUFDMnBFLHNCQUFzQixFQUFFekgsS0FBSyxFQUFFM25FLElBQUksRUFBRTZhLE1BQU0sRUFBRXBWLE1BQU0sQ0FBQztFQUMxRDtFQUNBLE9BQU9raUUsS0FBSztDQUNiLENBQUM7O0NBRURHLFdBQVcsRUFBRSxRQUFRLEVBQUVuN0IsUUFBUSxFQUFFO0VBQ2hDLElBQUlnN0IsTUFBTSxFQUFFLENBQUMsQ0FBQztHQUNiWCxVQUFVLEVBQUVqL0IsQ0FBQyxDQUFDdm9CLElBQUksRUFBRW10QixPQUFPLENBQUNpTSxJQUFJLEVBQUUsWUFBWSxDQUFDOztFQUVoRCxHQUFHLEVBQUVvdUIsU0FBUyxDQUFDeG1DLFFBQVEsQ0FBQ21uQyxNQUFNLEVBQUU7R0FDL0JBLE1BQU0sRUFBRTUvQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDaUIsYUFBYSxFQUFFakIsU0FBUyxDQUFDeG1DLFFBQVEsQ0FBQ21uQyxLQUFLLEVBQUVoN0IsT0FBTyxDQUFDcHBDLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3BGO0VBQ0EsT0FBT29rRSxLQUFLO0NBQ2IsQ0FBQzs7Q0FFRE8sY0FBYyxFQUFFLFFBQVEsRUFBRVAsS0FBSyxFQUFFaDdCLFFBQVEsRUFBRTs7O0VBRzFDNUUsQ0FBQyxDQUFDeGxDLElBQUksRUFBRW9sRSxLQUFLLEVBQUUsUUFBUSxFQUFFbG9ELElBQUksRUFBRWhmLElBQUksRUFBRTs7O0dBR3BDLEdBQUcsRUFBRUEsSUFBSSxJQUFJLE1BQU0sRUFBRTtJQUNwQixPQUFPa25FLEtBQUssRUFBRWxvRCxLQUFLLENBQUM7SUFDcEIsTUFBTTtHQUNQO0dBQ0EsR0FBRyxFQUFFaGYsR0FBRyxDQUFDbThCLE1BQU0sR0FBR244QixHQUFHLENBQUM2dUUsUUFBUSxFQUFFO0lBQy9CLElBQUlDLFNBQVMsRUFBRSxJQUFJO0lBQ25CLE9BQU8sRUFBRSxPQUFPOXVFLEdBQUcsQ0FBQzZ1RSxRQUFRLEVBQUU7SUFDOUIsS0FBSyxRQUFRO0tBQ1pDLFNBQVMsRUFBRSxDQUFDLENBQUN4bkMsQ0FBQyxFQUFFdG5DLEdBQUcsQ0FBQzZ1RSxPQUFPLEVBQUUzaUMsT0FBTyxDQUFDaU0sS0FBSyxDQUFDLENBQUM5MkMsTUFBTTtLQUNsRCxLQUFLO0lBQ04sS0FBSyxVQUFVO0tBQ2R5dEUsU0FBUyxFQUFFOXVFLEdBQUcsQ0FBQzZ1RSxPQUFPLENBQUM3dkUsSUFBSSxFQUFFa3RDLE9BQU8sRUFBRUEsUUFBUSxDQUFDO0tBQy9DLEtBQUs7SUFDTjtJQUNBLEdBQUcsRUFBRTRpQyxTQUFTLEVBQUU7S0FDZjVILEtBQUssRUFBRWxvRCxLQUFLLEVBQUUsRUFBRWhmLEdBQUcsQ0FBQ204QixNQUFNLElBQUk1NEIsVUFBVSxFQUFFdkQsR0FBRyxDQUFDbThCLE1BQU0sRUFBRSxJQUFJO0lBQzNELEVBQUUsS0FBSztLQUNObUwsQ0FBQyxDQUFDdm9CLElBQUksRUFBRW10QixPQUFPLENBQUNpTSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM0ekIsYUFBYSxFQUFFemtDLENBQUMsRUFBRTRFLFFBQVEsRUFBRSxDQUFDO0tBQ2pFLE9BQU9nN0IsS0FBSyxFQUFFbG9ELEtBQUssQ0FBQztJQUNyQjtHQUNEO0VBQ0QsRUFBRSxDQUFDOzs7RUFHSHNvQixDQUFDLENBQUN4bEMsSUFBSSxFQUFFb2xFLEtBQUssRUFBRSxRQUFRLEVBQUV5RixJQUFJLEVBQUVvQyxVQUFVLEVBQUU7R0FDMUM3SCxLQUFLLEVBQUV5RixLQUFLLEVBQUUsRUFBRXJsQyxDQUFDLENBQUNwb0MsVUFBVSxFQUFFNnZFLFVBQVUsRUFBRSxHQUFHcEMsS0FBSyxJQUFJLGFBQWEsRUFBRW9DLFNBQVMsRUFBRTdpQyxRQUFRLEVBQUUsRUFBRTZpQyxTQUFTO0VBQ3RHLEVBQUUsQ0FBQzs7O0VBR0h6bkMsQ0FBQyxDQUFDeGxDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRTtHQUNoRCxHQUFHLEVBQUVvbEUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3BCQSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUwSCxNQUFNLEVBQUUxSCxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7R0FDeEM7RUFDRCxFQUFFLENBQUM7RUFDSDUvQixDQUFDLENBQUN4bEMsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0dBQzlDLElBQUlzeEIsS0FBSztHQUNULEdBQUcsRUFBRTh6QyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDcEIsR0FBRyxFQUFFNS9CLENBQUMsQ0FBQ2hrQyxPQUFPLEVBQUU0akUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7S0FDakNBLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFMEgsTUFBTSxFQUFFMUgsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUwSCxNQUFNLEVBQUUxSCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMvRSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU9BLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxTQUFTLEVBQUU7S0FDL0M5ekMsTUFBTSxFQUFFOHpDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQ3ZqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDeUIsS0FBSyxFQUFFLFNBQVMsQ0FBQztLQUNoRThoRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTBILE1BQU0sRUFBRXg3QyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRXc3QyxNQUFNLEVBQUV4N0MsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDL0Q7R0FDRDtFQUNELEVBQUUsQ0FBQzs7RUFFSCxHQUFHLEVBQUVrVSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDOEQsaUJBQWlCLEVBQUU7OztHQUduQyxHQUFHLEVBQUVuRCxLQUFLLENBQUMzekIsSUFBSSxHQUFHLEtBQUssR0FBRzJ6QixLQUFLLENBQUM3MUMsSUFBSSxHQUFHLEtBQUssRUFBRTtJQUM3QzYxQyxLQUFLLENBQUN6SyxNQUFNLEVBQUUsRUFBRXlLLEtBQUssQ0FBQzN6QixHQUFHLEVBQUUyekIsS0FBSyxDQUFDNzFDLElBQUksQ0FBQztJQUN0QyxPQUFPNjFDLEtBQUssQ0FBQzN6QixHQUFHO0lBQ2hCLE9BQU8yekIsS0FBSyxDQUFDNzFDLEdBQUc7R0FDakI7R0FDQSxHQUFHLEVBQUU2MUMsS0FBSyxDQUFDaUQsVUFBVSxHQUFHLEtBQUssR0FBR2pELEtBQUssQ0FBQ2dELFVBQVUsR0FBRyxLQUFLLEVBQUU7SUFDekRoRCxLQUFLLENBQUNrRCxZQUFZLEVBQUUsRUFBRWxELEtBQUssQ0FBQ2lELFNBQVMsRUFBRWpELEtBQUssQ0FBQ2dELFVBQVUsQ0FBQztJQUN4RCxPQUFPaEQsS0FBSyxDQUFDaUQsU0FBUztJQUN0QixPQUFPakQsS0FBSyxDQUFDZ0QsU0FBUztHQUN2QjtFQUNEOztFQUVBLE9BQU9oRCxLQUFLO0NBQ2IsQ0FBQzs7O0NBR0RNLGFBQWEsRUFBRSxRQUFRLEVBQUV6b0QsS0FBSyxFQUFFO0VBQy9CLEdBQUcsRUFBRSxPQUFPQSxLQUFLLElBQUksU0FBUyxFQUFFO0dBQy9CLElBQUlpd0QsWUFBWSxFQUFFLENBQUMsQ0FBQztHQUNwQjFuQyxDQUFDLENBQUN4bEMsSUFBSSxFQUFFaWQsSUFBSSxDQUFDM1osS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0lBQ3RDNHBFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJO0dBQzNCLEVBQUUsQ0FBQztHQUNIandELEtBQUssRUFBRWl3RCxXQUFXO0VBQ25CO0VBQ0EsT0FBT2p3RCxJQUFJO0NBQ1osQ0FBQzs7O0NBR0Rrd0QsU0FBUyxFQUFFLFFBQVEsRUFBRW5zRSxJQUFJLEVBQUVzWCxNQUFNLEVBQUU4QyxRQUFRLEVBQUU7RUFDNUNvcUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ3VHLE9BQU8sRUFBRWhxRSxLQUFLLEVBQUUsRUFBRXNYLE1BQU07RUFDcENrdEIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUV2OUMsS0FBSyxFQUFFLEVBQUVvYSxRQUFRLElBQUkzWixVQUFVLEVBQUUyWixRQUFRLEVBQUVvcUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUV2OUMsS0FBSyxDQUFDO0VBQzdGLEdBQUcsRUFBRXNYLE1BQU0sQ0FBQy9ZLE9BQU8sRUFBRSxFQUFFLEVBQUU7R0FDeEJpbUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ21JLGFBQWEsRUFBRTVyRSxJQUFJLEVBQUV3a0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2lCLGFBQWEsRUFBRTFrRSxLQUFLLEVBQUUsQ0FBQztFQUNyRTtDQUNELENBQUM7OztDQUdEZ3FFLE9BQU8sRUFBRTs7O0VBR1JqRixRQUFRLEVBQUUsUUFBUSxFQUFFN2lFLEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLEVBQUU7OztHQUczQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUNneUMsTUFBTSxFQUFFaHlDLEtBQUssRUFBRStQLFFBQVEsRUFBRSxFQUFFO0lBQ3JDLE9BQU8scUJBQXFCO0dBQzdCO0dBQ0EsR0FBRyxFQUFFQSxPQUFPLENBQUN6aUMsUUFBUSxDQUFDcEUsV0FBVyxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUU7OztJQUdsRCxJQUFJckYsSUFBSSxFQUFFc25DLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDbHNDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLE9BQU9BLElBQUksR0FBR0EsR0FBRyxDQUFDcUIsT0FBTyxFQUFFLENBQUM7R0FDN0I7R0FDQSxHQUFHLEVBQUUsSUFBSSxDQUFDNm5FLFNBQVMsRUFBRWg5QixRQUFRLEVBQUUsRUFBRTtJQUNoQyxPQUFPLElBQUksQ0FBQ2dpQyxTQUFTLEVBQUVscEUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRSxFQUFFLENBQUM7R0FDNUM7R0FDQSxPQUFPbG5DLE1BQU0sSUFBSXpCLFVBQVUsR0FBR3lCLE1BQU0sSUFBSSxLQUFLLEdBQUdBLEtBQUssQ0FBQzNELE9BQU8sRUFBRSxDQUFDO0VBQ2pFLENBQUM7OztFQUdEdW9FLEtBQUssRUFBRSxRQUFRLEVBQUU1a0UsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTs7Ozs7O0dBTWpDLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyx1SUFBdUksQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7RUFDekwsQ0FBQzs7O0VBR0RzNkIsR0FBRyxFQUFFLFFBQVEsRUFBRXQ2QixLQUFLLEVBQUVrbkMsUUFBUSxFQUFFOzs7Ozs7R0FNL0IsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDBjQUEwYyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztFQUM1ZixDQUFDOzs7RUFHRDZrRSxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtHQUNsQixJQUFJcUYsT0FBTyxFQUFFLEtBQUs7O0dBRWxCLE9BQU8sUUFBUSxFQUFFbHFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7SUFDakMsR0FBRyxFQUFFLENBQUNnakMsT0FBTyxFQUFFO0tBQ2RBLE9BQU8sRUFBRSxJQUFJO0tBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQ252QyxRQUFRLENBQUN1bUMsTUFBTSxHQUFHdG9FLE1BQU0sQ0FBQ2dmLFFBQVEsRUFBRTtNQUM1Q0EsT0FBTyxDQUFDQyxJQUFJO09BQ1gsNEVBQTRFO09BQzVFLHdFQUF3RTtPQUN4RSx3RUFBd0U7T0FDeEUsc0VBQXNFO09BQ3RFO01BQ0QsQ0FBQztLQUNGO0lBQ0Q7O0lBRUEsT0FBTyxJQUFJLENBQUNtc0QsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDcmhDLElBQUksRUFBRSxJQUFJdkUsSUFBSSxFQUFFdEIsTUFBTSxDQUFDLENBQUNyRyxRQUFRLENBQUMsRUFBRSxDQUFDO0dBQ3ZGLENBQUM7RUFDRixDQUFDLENBQUMsRUFBRSxDQUFDOzs7RUFHTG1yRSxPQUFPLEVBQUUsUUFBUSxFQUFFOWtFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7R0FDbkMsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDhEQUE4RCxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztFQUNoSCxDQUFDOzs7RUFHRCtrRSxNQUFNLEVBQUUsUUFBUSxFQUFFL2tFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7R0FDbEMsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDZDQUE2QyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztFQUMvRixDQUFDOzs7RUFHRGdsRSxNQUFNLEVBQUUsUUFBUSxFQUFFaGxFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7R0FDbEMsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7RUFDekQsQ0FBQzs7O0VBR0RtbEUsU0FBUyxFQUFFLFFBQVEsRUFBRW5sRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0dBQzVDLElBQUk5NkIsT0FBTyxFQUFFaW1DLENBQUMsQ0FBQ2hrQyxPQUFPLEVBQUUwQixNQUFNLEVBQUUsRUFBRUEsS0FBSyxDQUFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQzZzRSxTQUFTLEVBQUVscEUsS0FBSyxFQUFFa25DLFFBQVEsQ0FBQztHQUNqRixPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUc3cUMsT0FBTyxHQUFHODZCLEtBQUs7RUFDbkQsQ0FBQzs7O0VBR0QrdEMsU0FBUyxFQUFFLFFBQVEsRUFBRWxsRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0dBQzVDLElBQUk5NkIsT0FBTyxFQUFFaW1DLENBQUMsQ0FBQ2hrQyxPQUFPLEVBQUUwQixNQUFNLEVBQUUsRUFBRUEsS0FBSyxDQUFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQzZzRSxTQUFTLEVBQUVscEUsS0FBSyxFQUFFa25DLFFBQVEsQ0FBQztHQUNqRixPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUc3cUMsT0FBTyxHQUFHODZCLEtBQUs7RUFDbkQsQ0FBQzs7O0VBR0RpdUMsV0FBVyxFQUFFLFFBQVEsRUFBRXBsRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0dBQzlDLElBQUk5NkIsT0FBTyxFQUFFaW1DLENBQUMsQ0FBQ2hrQyxPQUFPLEVBQUUwQixNQUFNLEVBQUUsRUFBRUEsS0FBSyxDQUFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQzZzRSxTQUFTLEVBQUVscEUsS0FBSyxFQUFFa25DLFFBQVEsQ0FBQztHQUNqRixPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsRUFBRTdxQyxPQUFPLEdBQUc4NkIsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHOTZCLE9BQU8sR0FBRzg2QixLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDcEYsQ0FBQzs7O0VBR0RvWCxHQUFHLEVBQUUsUUFBUSxFQUFFdnVDLEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLEVBQUU7R0FDdEMsT0FBTyxJQUFJLENBQUNpdEMsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHbG5DLE1BQU0sR0FBR20zQixLQUFLO0VBQ2xELENBQUM7OztFQUdEOUssR0FBRyxFQUFFLFFBQVEsRUFBRXJzQixLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0dBQ3RDLE9BQU8sSUFBSSxDQUFDaXRDLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBR2xuQyxNQUFNLEdBQUdtM0IsS0FBSztFQUNsRCxDQUFDOzs7RUFHRHNnQyxLQUFLLEVBQUUsUUFBUSxFQUFFejNELEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLEVBQUU7R0FDeEMsT0FBTyxJQUFJLENBQUNpdEMsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLEVBQUVsbkMsTUFBTSxHQUFHbTNCLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBR24zQixNQUFNLEdBQUdtM0IsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ2xGLENBQUM7OztFQUdEdEksSUFBSSxFQUFFLFFBQVEsRUFBRTd1QixLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0dBQ3ZDLElBQUk1OEIsS0FBSyxFQUFFK25DLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxPQUFPLENBQUM7SUFDckNpZ0UsYUFBYSxFQUFFLGdDQUFnQyxFQUFFNXZFLEtBQUssRUFBRSxvQkFBb0I7SUFDNUU2dkUsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDOUNuOUIsR0FBRyxFQUFFLElBQUl0cUMsTUFBTSxFQUFFLE1BQU0sRUFBRXBJLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDdkM4dkUsYUFBYSxFQUFFOXZFLEtBQUssR0FBRyxDQUFDMHlDLEVBQUUsQ0FBQ3BuQyxJQUFJLEVBQUV1a0UsY0FBYyxDQUFDcmtFLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDeER1a0UsY0FBYyxFQUFFLFFBQVEsRUFBRTl0RSxJQUFJLEVBQUU7S0FDL0IsSUFBSTBJLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRTFJLElBQUksQ0FBQyxDQUFDMEksS0FBSyxFQUFFLGdCQUFnQixDQUFDO0tBQ2pELEdBQUcsRUFBRSxDQUFDQSxNQUFNLEVBQUU7TUFDYixPQUFPLENBQUM7S0FDVDs7O0tBR0EsT0FBT0EsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFQSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM3SSxPQUFPLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBQ0RrdUUsTUFBTSxFQUFFLFFBQVEsRUFBRS90RSxJQUFJLEVBQUU7S0FDdkIsT0FBT2lDLElBQUksQ0FBQzByQixLQUFLLEVBQUUzdEIsSUFBSSxFQUFFaUMsSUFBSSxDQUFDc3pDLEdBQUcsRUFBRSxFQUFFLEVBQUV5NEIsU0FBUyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUNEeEksTUFBTSxFQUFFLElBQUk7SUFDWndJLFFBQVE7Ozs7R0FJVCxHQUFHLEVBQUVILGFBQWEsRUFBRTtJQUNuQixNQUFNLElBQUl0eEUsS0FBSyxFQUFFb3hFLGFBQWEsQ0FBQztHQUNoQzs7R0FFQUssU0FBUyxFQUFFRixhQUFhLEVBQUVuekMsTUFBTSxDQUFDOzs7R0FHakMsR0FBRyxFQUFFbXpDLGFBQWEsRUFBRXRxRSxNQUFNLEVBQUUsRUFBRXdxRSxTQUFTLEdBQUdELEtBQUssRUFBRXZxRSxNQUFNLEVBQUUsRUFBRXVxRSxLQUFLLEVBQUVwekMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ2pGNnFDLE1BQU0sRUFBRSxLQUFLO0dBQ2Q7O0dBRUEsT0FBTyxJQUFJLENBQUNvQyxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUc4NkIsS0FBSztFQUN6QyxDQUFDOzs7RUFHRGlELE9BQU8sRUFBRSxRQUFRLEVBQUVqbEUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRS9QLE1BQU0sRUFBRTs7O0dBRzFDLElBQUlqNUIsT0FBTyxFQUFFb2tDLENBQUMsRUFBRW5MLE1BQU0sQ0FBQztHQUN2QixHQUFHLEVBQUUsSUFBSSxDQUFDNEQsUUFBUSxDQUFDa3BDLFdBQVcsR0FBRy9sRSxNQUFNLENBQUMyVCxHQUFHLEVBQUUseUJBQXlCLENBQUMsQ0FBQ3hWLE9BQU8sRUFBRTtJQUNoRjZCLE1BQU0sQ0FBQzYyQixRQUFRLEVBQUUsd0JBQXdCLENBQUMsQ0FBQy9VLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLENBQUMsRUFBRTtLQUNsRnNpQixDQUFDLEVBQUU0RSxRQUFRLENBQUMsQ0FBQzg2QixLQUFLLENBQUMsQ0FBQztJQUNyQixFQUFFLENBQUM7R0FDSjtHQUNBLE9BQU9oaUUsTUFBTSxJQUFJOUIsTUFBTSxDQUFDbEQsR0FBRyxDQUFDLENBQUM7RUFDOUIsQ0FBQzs7O0VBR0Q4bkUsTUFBTSxFQUFFLFFBQVEsRUFBRTlpRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsS0FBSyxFQUFFL2hCLE9BQU8sRUFBRTtHQUNqRCxHQUFHLEVBQUUsSUFBSSxDQUFDZ3ZELFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsRUFBRTtJQUMvQixPQUFPLHFCQUFxQjtHQUM3Qjs7R0FFQTl4QixPQUFPLEVBQUUsT0FBT0EsT0FBTyxJQUFJLFNBQVMsR0FBR0EsT0FBTyxHQUFHLFFBQVE7O0dBRXpELElBQUl5aUMsU0FBUyxFQUFFLElBQUksQ0FBQzB4QixhQUFhLEVBQUVyaUMsT0FBTyxFQUFFOXhCLE9BQU8sQ0FBQztJQUNuRG1zRCxTQUFTLEVBQUV4bkQsSUFBSSxFQUFFMHdELGdCQUFnQjs7R0FFbEMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDMXZDLFFBQVEsQ0FBQ3NnQixRQUFRLEVBQUVuVSxPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUU7SUFDOUMsSUFBSSxDQUFDaTlCLFFBQVEsQ0FBQ3NnQixRQUFRLEVBQUVuVSxPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQzVDO0dBQ0ErNUMsUUFBUSxDQUFDNnlCLGdCQUFnQixFQUFFN3lCLFFBQVEsQ0FBQzZ5QixnQkFBZ0IsR0FBRyxJQUFJLENBQUMzdkMsUUFBUSxDQUFDc2dCLFFBQVEsRUFBRW5VLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUMsRUFBRXNYLE9BQU8sQ0FBQztHQUN2RyxJQUFJLENBQUMybEIsUUFBUSxDQUFDc2dCLFFBQVEsRUFBRW5VLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUMsRUFBRXNYLE9BQU8sRUFBRSxFQUFFeWlDLFFBQVEsQ0FBQzMvQixPQUFPOztHQUVuRWlmLE1BQU0sRUFBRSxPQUFPQSxNQUFNLElBQUksU0FBUyxHQUFHLEVBQUVtRCxHQUFHLEVBQUVuRCxNQUFNLEVBQUUsR0FBR0EsS0FBSztHQUM1RHN6QyxpQkFBaUIsRUFBRW5vQyxDQUFDLENBQUNuTCxLQUFLLEVBQUVtTCxDQUFDLENBQUMxa0MsTUFBTSxFQUFFLEVBQUVtYyxJQUFJLEVBQUUvWixNQUFNLENBQUMsRUFBRW0zQixLQUFLLENBQUNwZCxLQUFLLEVBQUUsQ0FBQztHQUNyRSxHQUFHLEVBQUU4OUIsUUFBUSxDQUFDMzdCLElBQUksSUFBSXV1RCxpQkFBaUIsRUFBRTtJQUN4QyxPQUFPNXlCLFFBQVEsQ0FBQ21xQixLQUFLO0dBQ3RCOztHQUVBbnFCLFFBQVEsQ0FBQzM3QixJQUFJLEVBQUV1dUQsZ0JBQWdCO0dBQy9CbEosVUFBVSxFQUFFLElBQUk7R0FDaEIsSUFBSSxDQUFDOEgsWUFBWSxFQUFFbmlDLFFBQVEsQ0FBQztHQUM1Qm50QixLQUFLLEVBQUUsQ0FBQyxDQUFDO0dBQ1RBLElBQUksRUFBRW10QixPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUVrQyxLQUFLO0dBQzVCc2lDLENBQUMsQ0FBQ3BILElBQUksRUFBRW9ILENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQ3ZCZ3pDLElBQUksRUFBRSxPQUFPO0lBQ2IrNUIsSUFBSSxFQUFFLFdBQVcsRUFBRXpqQyxPQUFPLENBQUNwcEMsSUFBSTtJQUMvQnc2QixRQUFRLEVBQUUsTUFBTTtJQUNoQnZlLElBQUksRUFBRUEsSUFBSTtJQUNWamUsT0FBTyxFQUFFeWxFLFNBQVMsQ0FBQ00sV0FBVztJQUM5QjlrQyxPQUFPLEVBQUUsUUFBUSxFQUFFcEQsU0FBUyxFQUFFO0tBQzdCLElBQUlxb0MsTUFBTSxFQUFFcm9DLFNBQVMsSUFBSSxLQUFLLEdBQUdBLFNBQVMsSUFBSSxNQUFNO01BQ25EK3NDLE1BQU0sRUFBRXh1RCxPQUFPLEVBQUVpc0QsU0FBUzs7S0FFM0I1QyxTQUFTLENBQUN4bUMsUUFBUSxDQUFDc2dCLFFBQVEsRUFBRW5VLE9BQU8sQ0FBQ3BwQyxLQUFLLENBQUMsRUFBRXNYLE9BQU8sRUFBRSxFQUFFeWlDLFFBQVEsQ0FBQzZ5QixlQUFlO0tBQ2hGLEdBQUcsRUFBRTFJLE1BQU0sRUFBRTtNQUNabUMsVUFBVSxFQUFFNUMsU0FBUyxDQUFDSyxhQUFhO01BQ25DTCxTQUFTLENBQUM2RixjQUFjLENBQUMsQ0FBQztNQUMxQjdGLFNBQVMsQ0FBQ2tGLE9BQU8sRUFBRWxGLFNBQVMsQ0FBQ3lDLFNBQVMsRUFBRTk4QixRQUFRLENBQUM7TUFDakRxNkIsU0FBUyxDQUFDSyxjQUFjLEVBQUV1QyxTQUFTO01BQ25DNUMsU0FBUyxDQUFDb0YsV0FBVyxDQUFDbnRFLElBQUksRUFBRTB0QyxRQUFRLENBQUM7TUFDckNxNkIsU0FBUyxDQUFDaUQsT0FBTyxFQUFFdDlCLE9BQU8sQ0FBQ3BwQyxLQUFLLEVBQUUsRUFBRSxLQUFLO01BQ3pDeWpFLFNBQVMsQ0FBQ3NFLFVBQVUsQ0FBQyxDQUFDO0tBQ3ZCLEVBQUUsS0FBSztNQUNOYSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1h4dUQsUUFBUSxFQUFFeWhCLFNBQVMsR0FBRzRuQyxTQUFTLENBQUM2RyxjQUFjLEVBQUVsaEMsT0FBTyxFQUFFLEVBQUU5eEIsTUFBTSxFQUFFQSxNQUFNLEVBQUV5eUQsVUFBVSxFQUFFN25FLE1BQU0sRUFBRSxDQUFDO01BQ2hHMG1FLE1BQU0sRUFBRXgvQixPQUFPLENBQUNwcEMsS0FBSyxFQUFFLEVBQUUrNUMsUUFBUSxDQUFDMy9CLFFBQVEsRUFBRUEsT0FBTztNQUNuRHFwRCxTQUFTLENBQUNpRCxPQUFPLEVBQUV0OUIsT0FBTyxDQUFDcHBDLEtBQUssRUFBRSxFQUFFLElBQUk7TUFDeEN5akUsU0FBUyxDQUFDc0UsVUFBVSxFQUFFYSxPQUFPLENBQUM7S0FDL0I7S0FDQTd1QixRQUFRLENBQUNtcUIsTUFBTSxFQUFFQSxLQUFLO0tBQ3RCVCxTQUFTLENBQUMrSCxXQUFXLEVBQUVwaUMsT0FBTyxFQUFFODZCLE1BQU0sQ0FBQztJQUN4QztHQUNELENBQUMsRUFBRTdxQyxNQUFNLEVBQUUsQ0FBQztHQUNaLE9BQU8sU0FBUztFQUNqQjtDQUNEOztBQUVELEVBQUUsQ0FBQzs7Ozs7O0FDcmpESCxJQUFJeXpDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztDQUN2QjF2QyxJQUFJOzs7QUFHTCxHQUFHLEVBQUVvSCxDQUFDLENBQUN0SCxjQUFjLEVBQUU7Q0FDdEJzSCxDQUFDLENBQUN0SCxhQUFhLEVBQUUsUUFBUSxFQUFFRCxRQUFRLEVBQUVyM0IsQ0FBQyxFQUFFazZCLElBQUksRUFBRTtFQUM3QyxJQUFJK3NDLEtBQUssRUFBRTV2QyxRQUFRLENBQUM0dkMsSUFBSTtFQUN4QixHQUFHLEVBQUU1dkMsUUFBUSxDQUFDNlYsS0FBSyxJQUFJLFFBQVEsRUFBRTtHQUNoQyxHQUFHLEVBQUVnNkIsZUFBZSxFQUFFRCxLQUFLLEVBQUUsRUFBRTtJQUM5QkMsZUFBZSxFQUFFRCxLQUFLLENBQUMsQ0FBQ3J1QyxLQUFLLENBQUMsQ0FBQztHQUNoQztHQUNBc3VDLGVBQWUsRUFBRUQsS0FBSyxFQUFFLEVBQUUvc0MsR0FBRztFQUM5QjtDQUNELEVBQUUsQ0FBQztBQUNKLEVBQUUsS0FBSzs7O0NBR04xQyxLQUFLLEVBQUVvSCxDQUFDLENBQUNwSCxJQUFJO0NBQ2JvSCxDQUFDLENBQUNwSCxLQUFLLEVBQUUsUUFBUSxFQUFFSCxTQUFTLEVBQUU7RUFDN0IsSUFBSTZWLEtBQUssRUFBRSxFQUFFLE9BQU8sR0FBRzdWLFNBQVMsRUFBRUEsU0FBUyxFQUFFdUgsQ0FBQyxDQUFDckosYUFBYSxDQUFDLENBQUMyWCxJQUFJO0dBQ2pFKzVCLEtBQUssRUFBRSxFQUFFLE9BQU8sR0FBRzV2QyxTQUFTLEVBQUVBLFNBQVMsRUFBRXVILENBQUMsQ0FBQ3JKLGFBQWEsQ0FBQyxDQUFDMHhDLElBQUk7RUFDL0QsR0FBRyxFQUFFLzVCLEtBQUssSUFBSSxRQUFRLEVBQUU7R0FDdkIsR0FBRyxFQUFFZzZCLGVBQWUsRUFBRUQsS0FBSyxFQUFFLEVBQUU7SUFDOUJDLGVBQWUsRUFBRUQsS0FBSyxDQUFDLENBQUNydUMsS0FBSyxDQUFDLENBQUM7R0FDaEM7R0FDQXN1QyxlQUFlLEVBQUVELEtBQUssRUFBRSxFQUFFenZDLElBQUksQ0FBQ2grQixLQUFLLEVBQUUsSUFBSSxFQUFFQyxVQUFVLENBQUM7R0FDdkQsT0FBT3l0RSxlQUFlLEVBQUVELEtBQUssQ0FBQztFQUMvQjtFQUNBLE9BQU96dkMsSUFBSSxDQUFDaCtCLEtBQUssRUFBRSxJQUFJLEVBQUVDLFVBQVUsQ0FBQztDQUNyQyxDQUFDO0FBQ0Y7Ozs7Ozs7O0FDNUJBbWxDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFanFFLE1BQU0sRUFBRTtDQUM1RCxJQUFJNnFFLFNBQVMsRUFBRSxDQUFDO0NBQ2hCLElBQUk3OEQsT0FBTyxFQUFFaE8sS0FBSyxDQUFDSSxLQUFLLEVBQUUsR0FBRyxDQUFDO0NBQzlCLElBQUkvRCxPQUFPLEVBQUUyUixNQUFNLENBQUMzUixNQUFNOzs7Q0FHMUIsR0FBRyxFQUFFQSxPQUFPLElBQUksRUFBRSxFQUFFO0VBQ25CLE9BQU8sS0FBSztDQUNiOzs7O0NBSUEsSUFBSSxFQUFFLElBQUl0QixFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUVzQixNQUFNLEVBQUV0QixFQUFFLEdBQUcsRUFBRSxFQUFFO0VBQ3JDOHZFLFNBQVMsR0FBR2wyQyxRQUFRLEVBQUUzbUIsTUFBTSxFQUFFalQsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRTtLQUM3QzQ1QixRQUFRLEVBQUUzbUIsTUFBTSxFQUFFalQsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7S0FDcEM0NUIsUUFBUSxFQUFFM21CLE1BQU0sRUFBRWpULEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7Q0FDbkM7OztDQUdBLEdBQUcsRUFBRTh2RSxTQUFTLElBQUksRUFBRSxHQUFHQSxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtFQUM1QyxPQUFPLElBQUk7Q0FDWjs7Q0FFQSxPQUFPLEtBQUs7QUFDYixDQUFDLEVBQUUsdUNBQXVDLENBQUM7OztBQzdCM0N2b0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLEVBQUU7OztDQUdsRSxJQUFJMnpDLFVBQVUsRUFBRSxPQUFPM3pDLE1BQU0sSUFBSSxTQUFTLEVBQUVBLEtBQUssQ0FBQ3g0QixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVM7RUFDakZvc0UsY0FBYyxFQUFFLElBQUksQ0FBQzNHLFFBQVEsRUFBRWw5QixRQUFRLENBQUM7RUFDeENuc0MsQ0FBQyxFQUFFMFMsSUFBSSxFQUFFdTlELEtBQUs7OztDQUdmLEdBQUcsRUFBRUQsY0FBYyxFQUFFO0VBQ3BCLE9BQU9BLGFBQWE7Q0FDckI7O0NBRUEsR0FBRyxFQUFFem9DLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7Ozs7O0VBSzdDNGdFLFVBQVUsRUFBRUE7SUFDVixDQUFDbnNFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxPQUFPO0lBQ3RELENBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSTtJQUNwQixDQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQzs7O0VBRzVCLEdBQUcsRUFBRXVvQyxPQUFPLENBQUMrakMsTUFBTSxHQUFHL2pDLE9BQU8sQ0FBQytqQyxLQUFLLENBQUM1dUUsT0FBTyxFQUFFO0dBQzVDMnVFLE1BQU0sRUFBRSxJQUFJcm9FLE1BQU0sRUFBRSxNQUFNLEVBQUVtb0UsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7R0FDbkQsSUFBSSxFQUFFL3ZFLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRW1zQyxPQUFPLENBQUMrakMsS0FBSyxDQUFDNXVFLE1BQU0sRUFBRXRCLENBQUMsR0FBRyxFQUFFO0lBQzVDMFMsS0FBSyxFQUFFeTVCLE9BQU8sQ0FBQytqQyxLQUFLLEVBQUVsd0UsRUFBRSxDQUFDOzs7SUFHekIsR0FBRyxFQUFFLENBQUMwUyxJQUFJLENBQUNsVCxJQUFJLENBQUMySyxLQUFLLEVBQUU4bEUsTUFBTSxFQUFFLEVBQUU7S0FDaEMsT0FBTyxLQUFLO0lBQ2I7R0FDRDtFQUNEO0NBQ0Q7Ozs7Q0FJQSxPQUFPLElBQUk7QUFDWixDQUFDLEVBQUUxb0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4Q0FBOEMsRUFBRSxDQUFDOztBQ3hDeEUsRUFBRSxRQUFRLENBQUMsRUFBRTs7Q0FFWixTQUFTcU4sU0FBUyxFQUFFbHJFLE1BQU0sRUFBRTs7O0VBRzNCLE9BQU9BLEtBQUssQ0FBQ3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJOzs7RUFHM0UsQ0FBQ0EsT0FBTyxFQUFFLDhCQUE4QixFQUFFLEdBQUcsQ0FBQztDQUMvQzs7Q0FFQTJqQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRXBILE9BQU8sRUFBRTtFQUNyRSxPQUFPLElBQUksQ0FBQ3NrQyxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUdna0MsU0FBUyxFQUFFbHJFLE1BQU0sQ0FBQyxDQUFDa0YsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDN0ksT0FBTyxHQUFHeWpDLE1BQU07Q0FDM0YsQ0FBQyxFQUFFd0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxrQ0FBa0MsRUFBRSxDQUFDOztDQUU1RHY3QixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRXBILE9BQU8sRUFBRTtFQUNyRSxPQUFPLElBQUksQ0FBQ3NrQyxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUdna0MsU0FBUyxFQUFFbHJFLE1BQU0sQ0FBQyxDQUFDa0YsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDN0ksT0FBTyxHQUFHeWpDLE1BQU07Q0FDM0YsQ0FBQyxFQUFFd0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxDQUFDOztDQUU3RHY3QixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRXBILE9BQU8sRUFBRTtFQUN2RSxJQUFJcXJDLGNBQWMsRUFBRUQsU0FBUyxFQUFFbHJFLE1BQU0sQ0FBQztHQUNyQ2dyRSxNQUFNLEVBQUUsVUFBVTtFQUNuQixPQUFPLElBQUksQ0FBQzVHLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBR2lrQyxhQUFhLENBQUNqbUUsS0FBSyxFQUFFOGxFLE1BQU0sQ0FBQyxDQUFDM3VFLE9BQU8sR0FBR3lqQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUdxckMsYUFBYSxDQUFDam1FLEtBQUssRUFBRThsRSxNQUFNLENBQUMsQ0FBQzN1RSxPQUFPLEdBQUd5akMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUM1SSxDQUFDLEVBQUV3QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDBDQUEwQyxFQUFFLENBQUM7O0FBRXJFLENBQUMsQ0FBQyxFQUFFLENBQUM7O0FDekJMdjdCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ2pFLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxRQUFRLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0FBQzFELENBQUMsRUFBRSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7QUNJcERzaUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDbEUsR0FBRyxFQUFFLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEVBQUU7RUFDL0IsT0FBTyxJQUFJO0NBQ1o7Q0FDQSxHQUFHLEVBQUUsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sRUFBRSxFQUFFLEVBQUU7RUFDN0QsT0FBTyxLQUFLO0NBQ2I7OztDQUdBLElBQUlvckUsUUFBUSxFQUFFcHJFLEtBQUssQ0FBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0VBQ3RDMHNFLElBQUksRUFBRSxDQUFDO0VBQ1A5dEUsSUFBSSxFQUFFNnRFLE9BQU8sQ0FBQy91RSxNQUFNO0VBQ3BCdXlCLEdBQUcsRUFBRTA4QyxNQUFNLEVBQUVDLEtBQUs7Q0FDbkIsSUFBSSxFQUFFMzhDLElBQUksRUFBRSxDQUFDLEVBQUVBLElBQUksRUFBRXJ4QixHQUFHLEVBQUVxeEIsR0FBRyxHQUFHLEVBQUU7RUFDakMwOEMsT0FBTyxFQUFFL3RFLElBQUksRUFBRXF4QixHQUFHO0VBQ2xCMjhDLE1BQU0sRUFBRUgsT0FBTyxDQUFDMzNCLFNBQVMsRUFBRTdrQixHQUFHLEVBQUVBLElBQUksRUFBRSxFQUFFLENBQUM7RUFDekN5OEMsSUFBSSxFQUFFQSxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsS0FBSztDQUMzQjtDQUNBLE9BQU9GLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QixDQUFDLEVBQUUsNkNBQTZDLENBQUM7O0FDekJqRC9vQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ3hFLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUU7R0FDOUIsRUFBRTVFLENBQUMsQ0FBQ2kvQixTQUFTLENBQUN1RyxPQUFPLENBQUMwRCxhQUFhLENBQUN4eEUsSUFBSSxFQUFFLElBQUksRUFBRWdHLEtBQUssRUFBRWtuQyxRQUFRLEVBQUUsRUFBRTtHQUNuRSxFQUFFNUUsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ3VHLE9BQU8sQ0FBQzJELGFBQWEsQ0FBQ3p4RSxJQUFJLEVBQUUsSUFBSSxFQUFFZ0csS0FBSyxFQUFFa25DLFFBQVEsRUFBRSxDQUFDO0FBQ3JFLENBQUMsRUFBRSxxREFBcUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNXekQ1RSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtJQUNyRCxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsK0RBQStELENBQUNyaEMsSUFBSSxFQUFFN0YsS0FBSyxDQUFDcVosV0FBVyxDQUFDLEVBQUUsQ0FBQztBQUNsSSxDQUFDLEVBQUUsa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNpQ3RDaXBCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQzFELFlBQVk7O0NBRVosR0FBRyxFQUFFLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEVBQUU7RUFDL0IsT0FBTyxJQUFJO0NBQ1o7O0NBRUEsSUFBSXdrQyxTQUFTLEVBQUUsSUFBSS9vRSxNQUFNLEVBQUUsZ0RBQWdELENBQUM7Q0FDNUUsSUFBSXlXLFFBQVEsRUFBRXBaLEtBQUssQ0FBQ3l6QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNwQ3N4QixRQUFRLEVBQUUva0UsS0FBSyxDQUFDeXpDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2pDazRCLFFBQVEsRUFBRTNyRSxLQUFLLENBQUN5ekMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDakNtNEIsUUFBUSxFQUFFLENBQUM7RUFDWEMsU0FBUyxFQUFFLENBQUM7RUFDWkMsUUFBUSxFQUFFLENBQUM7RUFDWC93RSxDQUFDLEVBQUV3VyxDQUFDO0VBQ0p3NkQsYUFBYTtFQUNiQyxjQUFjOztDQUVmLFNBQVNDLEtBQUssRUFBRTE2RCxFQUFFLEVBQUU7RUFDbkIsT0FBT0EsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO0NBQ25COzs7Q0FHQSxHQUFHLEVBQUV2UixLQUFLLENBQUMzRCxPQUFPLElBQUksRUFBRSxHQUFHLENBQUNxdkUsUUFBUSxDQUFDN2xFLElBQUksRUFBRTdGLE1BQU0sRUFBRSxFQUFFO0VBQ3BELE9BQU8sS0FBSztDQUNiOztDQUVBLElBQUksRUFBRWpGLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRWdxRSxNQUFNLENBQUMxb0UsTUFBTSxFQUFFdEIsQ0FBQyxHQUFHLEVBQUU7RUFDckN3VyxFQUFFLEVBQUVvakIsUUFBUSxFQUFFb3dDLE1BQU0sRUFBRWhxRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7OztFQUcvQixHQUFHLEVBQUVreEUsS0FBSyxFQUFFbHhFLEVBQUUsRUFBRSxFQUFFOzs7R0FHakJ3VyxFQUFFLEdBQUcsQ0FBQzs7O0dBR051NkQsUUFBUSxHQUFHdjZELEVBQUUsRUFBRSxHQUFHLEVBQUVBLEVBQUUsRUFBRUEsRUFBRSxFQUFFLENBQUM7Ozs7RUFJOUIsRUFBRSxLQUFLO0dBQ05zNkQsU0FBUyxHQUFHdDZELENBQUM7RUFDZDtDQUNEOztDQUVBcTZELFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPO0NBQzVCQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRUgsUUFBUSxDQUFDLENBQUNqeUUsUUFBUSxDQUFDLENBQUMsQ0FBQ3NwRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDdHBELFFBQVEsQ0FBQyxDQUFDO0NBQ3ZFb3lFLGNBQWMsRUFBRXAzQyxRQUFRLEVBQUVvM0MsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUVBLGFBQWE7Q0FDdkVDLGVBQWUsRUFBRSxZQUFZLENBQUMvb0IsTUFBTSxFQUFFOG9CLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQ3B5RSxRQUFRLENBQUMsQ0FBQzs7O0NBR25FLEdBQUcsRUFBRXlmLE1BQU0sQ0FBQ2xVLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtFQUMvQixPQUFPeW1FLFFBQVEsSUFBSUksYUFBYTs7O0NBR2pDLEVBQUUsS0FBSyxHQUFHLEVBQUUzeUQsTUFBTSxDQUFDbFUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO0VBQ3RDLE9BQU95bUUsUUFBUSxJQUFJSyxjQUFjO0NBQ2xDOzs7Q0FHQSxPQUFPTCxRQUFRLElBQUlJLGNBQWMsR0FBR0osUUFBUSxJQUFJSyxjQUFjOztBQUUvRCxDQUFDLEVBQUUscUNBQXFDLENBQUM7Ozs7OztBQzdHekMxcEMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFanFFLE1BQU0sRUFBRTs7O0VBR2hEQSxNQUFNLEVBQUVBLEtBQUssQ0FBQ3JCLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxHQUFHLENBQUM7OztFQUcxRSxHQUFHLEVBQUVxQixLQUFLLENBQUMzRCxPQUFPLElBQUksR0FBRyxFQUFFO0lBQ3pCLE9BQU8sS0FBSztFQUNkOztFQUVBLElBQUlndkUsSUFBSSxFQUFFLENBQUMsRUFBRWEsSUFBSSxFQUFFLENBQUMsRUFBRUMsU0FBUztFQUMvQkMsT0FBTyxFQUFFQyxRQUFRLEVBQUV0eEUsQ0FBQyxFQUFFeUMsQ0FBQyxFQUFFcVgsQ0FBQzs7RUFFMUJzM0QsVUFBVSxFQUFFbnNFLEtBQUssQ0FBQ2tvQyxNQUFNLEVBQUUsRUFBRSxDQUFDOztFQUU3QixHQUFHLEVBQUUsSUFBSTdwQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMwSCxJQUFJLEVBQUVvbUUsVUFBVSxFQUFFLElBQUluc0UsTUFBTSxFQUFFO0lBQ2pELE9BQU8sS0FBSztFQUNkOzs7RUFHQSxJQUFJLEVBQUVqRixFQUFFLEVBQUUsQ0FBQyxFQUFFeUMsRUFBRSxFQUFFLENBQUMsRUFBRXFYLEVBQUUsRUFBRSxDQUFDLEVBQUU5WixFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUVBLENBQUMsRUFBRSxFQUFFeUMsRUFBRSxFQUFFO0lBQzNDNnRFLElBQUksR0FBRyxDQUFDLEVBQUVyckUsS0FBSyxDQUFDa29DLE1BQU0sRUFBRW50QyxFQUFFLEVBQUUsRUFBRXlDLEVBQUUsQ0FBQztFQUNuQzs7RUFFQTR1RSxRQUFRLEVBQUVmLElBQUksRUFBRSxFQUFFO0VBQ2xCLEdBQUcsRUFBRWUsUUFBUSxHQUFHLEdBQUcsRUFBRTtJQUNuQkEsUUFBUSxFQUFFLENBQUM7SUFDWEYsSUFBSSxFQUFFLENBQUM7RUFDVDs7RUFFQWIsSUFBSSxFQUFFLENBQUM7RUFDUCxJQUFJLEVBQUV0d0UsRUFBRSxFQUFFLENBQUMsRUFBRXlDLEVBQUUsRUFBRSxDQUFDLEVBQUVxWCxFQUFFLEVBQUUsQ0FBQyxFQUFFOVosRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFQSxDQUFDLEVBQUUsRUFBRXlDLEVBQUUsRUFBRTtJQUMzQzZ0RSxJQUFJLEdBQUcsQ0FBQyxFQUFFcnJFLEtBQUssQ0FBQ2tvQyxNQUFNLEVBQUVudEMsRUFBRSxFQUFFLEVBQUV5QyxFQUFFLENBQUM7RUFDbkM7O0VBRUE2dUUsU0FBUyxFQUFFaEIsSUFBSSxFQUFFLEVBQUU7RUFDbkIsR0FBRyxFQUFFZ0IsU0FBUyxHQUFHLEdBQUcsRUFBRTtJQUNwQkEsU0FBUyxFQUFFLENBQUM7RUFDZCxFQUFFLEtBQUs7SUFDTEEsU0FBUyxFQUFFQSxTQUFTLEVBQUVILEdBQUc7RUFDM0I7O0VBRUEsT0FBTyxFQUFFcG9FLE1BQU0sRUFBRXNvRSxRQUFRLENBQUMsQ0FBQzd5RSxNQUFNLEVBQUU4eUUsU0FBUyxFQUFFLElBQUlyc0UsS0FBSyxDQUFDaWpELE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDOztBQUV4RSxDQUFDLEVBQUUsb0NBQW9DLENBQUM7Ozs7OztBQzVDeEMzZ0IsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDM0QsWUFBWTs7Q0FFWixHQUFHLEVBQUUsSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsRUFBRTtFQUMvQixPQUFPLElBQUk7Q0FDWjs7O0NBR0FsbkMsTUFBTSxFQUFFQSxLQUFLLENBQUNyQixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQzs7O0NBR3RDLEdBQUcsRUFBRXFCLEtBQUssQ0FBQzNELE9BQU8sSUFBSSxHQUFHLEVBQUU7RUFDMUIsT0FBTyxLQUFLO0NBQ2I7OztDQUdBLEdBQUcsRUFBRTJELE1BQU0sSUFBSSxpQkFBaUI7RUFDL0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUI7RUFDM0JBLE1BQU0sSUFBSSxpQkFBaUIsRUFBRTtFQUM3QixPQUFPLEtBQUs7Q0FDYjs7O0NBR0EsSUFBSXNzRSxRQUFRLEVBQUUsRUFBRXRzRSxLQUFLLENBQUMzRCxPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ2xDLElBQUlrd0UsUUFBUSxFQUFFdnNFLEtBQUssQ0FBQ3l6QyxTQUFTLEVBQUUsQ0FBQyxFQUFFNjRCLFFBQVEsQ0FBQztDQUMzQyxJQUFJRSxRQUFRLEVBQUV4c0UsS0FBSyxDQUFDeXpDLFNBQVMsRUFBRTY0QixRQUFRLENBQUM7Q0FDeEMsSUFBSUcsS0FBSyxFQUFFLENBQUM7Q0FDWixJQUFJNzlDLElBQUksRUFBRTA5QyxRQUFRLEVBQUUsQ0FBQzs7Q0FFckIsSUFBSSxFQUFFLElBQUl2eEUsRUFBRSxFQUFFdXhFLE9BQU8sRUFBRXZ4RSxFQUFFLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsRUFBRTtFQUNwQzB4RSxLQUFLLEdBQUdGLE9BQU8sQ0FBQ3JrQyxNQUFNLEVBQUVva0MsUUFBUSxFQUFFdnhFLEVBQUUsRUFBRSxFQUFFNnpCLEdBQUcsRUFBRTtFQUM3QyxHQUFHLEVBQUVBLElBQUksRUFBRSxFQUFFLEVBQUU7R0FDZEEsSUFBSSxFQUFFLENBQUM7RUFDUjtDQUNEOztDQUVBLElBQUk4OUMsVUFBVSxFQUFFRCxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFQSxLQUFLLEVBQUUsRUFBRTs7Q0FFbEQsR0FBRyxFQUFFQyxVQUFVLElBQUkvM0MsUUFBUSxFQUFFNjNDLE9BQU8sQ0FBQ3RrQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7RUFDeEQsT0FBTyxLQUFLO0NBQ2I7O0NBRUFva0MsUUFBUSxFQUFFQSxRQUFRLEVBQUUsQ0FBQztDQUNyQkMsUUFBUSxFQUFFdnNFLEtBQUssQ0FBQ3l6QyxTQUFTLEVBQUUsQ0FBQyxFQUFFNjRCLFFBQVEsQ0FBQztDQUN2Q0csS0FBSyxFQUFFLENBQUM7Q0FDUjc5QyxJQUFJLEVBQUUwOUMsUUFBUSxFQUFFLENBQUM7O0NBRWpCLElBQUksRUFBRSxJQUFJSyxHQUFHLEVBQUVMLE9BQU8sRUFBRUssR0FBRyxHQUFHLENBQUMsRUFBRUEsRUFBRSxHQUFHLEVBQUU7RUFDdkNGLEtBQUssR0FBR0YsT0FBTyxDQUFDcmtDLE1BQU0sRUFBRW9rQyxRQUFRLEVBQUVLLEdBQUcsRUFBRSxFQUFFLzlDLEdBQUcsRUFBRTtFQUM5QyxHQUFHLEVBQUVBLElBQUksRUFBRSxFQUFFLEVBQUU7R0FDZEEsSUFBSSxFQUFFLENBQUM7RUFDUjtDQUNEOztDQUVBODlDLFVBQVUsRUFBRUQsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRUEsS0FBSyxFQUFFLEVBQUU7O0NBRTlDLEdBQUcsRUFBRUMsVUFBVSxJQUFJLzNDLFFBQVEsRUFBRTYzQyxPQUFPLENBQUN0a0MsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO0VBQ3hELE9BQU8sS0FBSztDQUNiOztDQUVBLE9BQU8sSUFBSTs7QUFFWixDQUFDLEVBQUUscUNBQXFDLENBQUM7Ozs7OztBQ3JFekM1RixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtDQUMxRCxZQUFZOztDQUVaLEdBQUcsRUFBRSxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxFQUFFO0VBQy9CLE9BQU8sSUFBSTtDQUNaOzs7Q0FHQWxuQyxNQUFNLEVBQUVBLEtBQUssQ0FBQ3JCLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxHQUFHLENBQUM7OztDQUcxRSxHQUFHLEVBQUVxQixLQUFLLENBQUMzRCxPQUFPLElBQUksR0FBRyxFQUFFO0VBQzFCLE9BQU8sS0FBSztDQUNiOztDQUVBLElBQUlndkUsSUFBSSxFQUFFLENBQUM7RUFDVmUsT0FBTyxFQUFFQyxRQUFRLEVBQUVPLFdBQVcsRUFBRTd4RSxDQUFDOztDQUVsQ3F4RSxRQUFRLEVBQUV6M0MsUUFBUSxFQUFFMzBCLEtBQUssQ0FBQ3l6QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztDQUNsRDQ0QixTQUFTLEVBQUUxM0MsUUFBUSxFQUFFMzBCLEtBQUssQ0FBQ3l6QyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQzs7Q0FFcERtNUIsWUFBWSxFQUFFLFFBQVEsRUFBRXZCLEdBQUcsRUFBRXdCLEdBQUcsRUFBRTtFQUNqQyxJQUFJdGhFLE9BQU8sRUFBRSxFQUFFOC9ELElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0VBQzlCLEdBQUcsRUFBRSxFQUFFOS9ELE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFQSxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUU7R0FDN0NBLE9BQU8sRUFBRSxDQUFDO0VBQ1g7RUFDQSxPQUFPLEVBQUVBLE9BQU8sSUFBSXNoRSxHQUFHLENBQUM7Q0FDekIsQ0FBQzs7O0NBR0QsR0FBRyxFQUFFN3NFLE1BQU0sSUFBSSxHQUFHO0VBQ2pCQSxNQUFNLElBQUksY0FBYztFQUN4QkEsTUFBTSxJQUFJLGNBQWM7RUFDeEJBLE1BQU0sSUFBSSxjQUFjO0VBQ3hCQSxNQUFNLElBQUksY0FBYztFQUN4QkEsTUFBTSxJQUFJLGNBQWM7RUFDeEJBLE1BQU0sSUFBSSxjQUFjO0VBQ3hCQSxNQUFNLElBQUksY0FBYztFQUN4QkEsTUFBTSxJQUFJLGNBQWM7RUFDeEJBLE1BQU0sSUFBSSxjQUFjO0VBQ3hCQSxNQUFNLElBQUk7Q0FDWCxFQUFFO0VBQ0QsT0FBTyxLQUFLO0NBQ2I7OztDQUdBLElBQUksRUFBRWpGLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxFQUFFO0VBQzFCc3dFLElBQUksRUFBRUEsSUFBSSxFQUFFMTJDLFFBQVEsRUFBRTMwQixLQUFLLENBQUN5ekMsU0FBUyxFQUFFMTRDLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFQSxFQUFFLENBQUM7Q0FDckU7OztDQUdBLEdBQUcsRUFBRTZ4RSxXQUFXLEVBQUV2QixHQUFHLEVBQUVlLFFBQVEsRUFBRSxFQUFFO0VBQ2xDZixJQUFJLEVBQUUsQ0FBQztFQUNQLElBQUksRUFBRXR3RSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRSxFQUFFQSxDQUFDLEdBQUcsRUFBRTtHQUMzQnN3RSxJQUFJLEVBQUVBLElBQUksRUFBRTEyQyxRQUFRLEVBQUUzMEIsS0FBSyxDQUFDeXpDLFNBQVMsRUFBRTE0QyxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRUEsRUFBRSxDQUFDO0VBQ3JFO0VBQ0EsT0FBTzZ4RSxXQUFXLEVBQUV2QixHQUFHLEVBQUVnQixTQUFTLENBQUM7Q0FDcEM7Q0FDQSxPQUFPLEtBQUs7O0FBRWIsQ0FBQyxFQUFFLG9DQUFvQyxDQUFDOzs7O0FDOUR4Qy9wQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtDQUMvRCxHQUFHLEVBQUUsSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsRUFBRTtFQUMvQixPQUFPLHFCQUFxQjtDQUM3Qjs7O0NBR0EsR0FBRyxFQUFFLFlBQVksQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLEVBQUUsRUFBRTtFQUNqQyxPQUFPLEtBQUs7Q0FDYjs7Q0FFQSxJQUFJOHNFLE9BQU8sRUFBRSxDQUFDO0VBQ2JDLE9BQU8sRUFBRSxDQUFDO0VBQ1ZDLE1BQU0sRUFBRSxLQUFLO0VBQ2J6N0QsQ0FBQyxFQUFFMDdELE1BQU07O0NBRVZqdEUsTUFBTSxFQUFFQSxLQUFLLENBQUNyQixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQzs7OztDQUlsQyxHQUFHLEVBQUVxQixLQUFLLENBQUMzRCxPQUFPLEVBQUUsR0FBRyxHQUFHMkQsS0FBSyxDQUFDM0QsT0FBTyxFQUFFLEdBQUcsRUFBRTtFQUM3QyxPQUFPLEtBQUs7Q0FDYjs7Q0FFQSxJQUFJLEVBQUVrVixFQUFFLEVBQUV2UixLQUFLLENBQUMzRCxPQUFPLEVBQUUsQ0FBQyxFQUFFa1YsRUFBRSxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLEVBQUU7RUFDekMwN0QsT0FBTyxFQUFFanRFLEtBQUssQ0FBQ2tvQyxNQUFNLEVBQUUzMkIsRUFBRSxDQUFDO0VBQzFCdzdELE9BQU8sRUFBRXA0QyxRQUFRLEVBQUVzNEMsTUFBTSxFQUFFLEdBQUcsQ0FBQztFQUMvQixHQUFHLEVBQUVELE1BQU0sRUFBRTtHQUNaLEdBQUcsRUFBRSxFQUFFRCxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQzFCQSxPQUFPLEdBQUcsQ0FBQztHQUNaO0VBQ0Q7O0VBRUFELE9BQU8sR0FBR0MsTUFBTTtFQUNoQkMsTUFBTSxFQUFFLENBQUNBLEtBQUs7Q0FDZjs7Q0FFQSxPQUFPLEVBQUVGLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQzdCLENBQUMsRUFBRSwyQ0FBMkMsQ0FBQzs7Ozs7O0FDbkMvQ3hxQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0NBQzNFLEdBQUcsRUFBRSxXQUFXLENBQUN0eEIsSUFBSSxFQUFFN0YsTUFBTSxFQUFFLEVBQUU7RUFDaEMsT0FBTyxLQUFLO0NBQ2I7O0NBRUFBLE1BQU0sRUFBRUEsS0FBSyxDQUFDckIsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7O0NBRWxDLElBQUl1dUUsV0FBVyxFQUFFLE1BQU07O0NBRXZCLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNnMkMsV0FBVyxFQUFFO0VBQ3ZCRCxXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNpMkMsS0FBSyxFQUFFO0VBQ2pCRixXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNrMkMsS0FBSyxFQUFFO0VBQ2pCSCxXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNtMkMsV0FBVyxFQUFFO0VBQ3ZCSixXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNvMkMsUUFBUSxFQUFFO0VBQ3BCTCxXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNxMkMsU0FBUyxFQUFFO0VBQ3JCTixXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNzMkMsSUFBSSxFQUFFO0VBQ2hCUCxXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUN1MkMsUUFBUSxFQUFFO0VBQ3BCUixXQUFXLEdBQUcsTUFBTTtDQUNyQjtDQUNBLEdBQUcsRUFBRS8xQyxLQUFLLENBQUNoZSxJQUFJLEVBQUU7RUFDaEIrekQsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNO0NBQ25GO0NBQ0EsR0FBRyxFQUFFQSxXQUFXLEVBQUUsT0FBTyxHQUFHLEVBQUUsYUFBYSxDQUFDcm5FLElBQUksRUFBRTdGLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQzZGLElBQUksRUFBRTdGLE1BQU0sRUFBRSxFQUFFLEVBQUU7RUFDN0YsT0FBT0EsS0FBSyxDQUFDM0QsT0FBTyxJQUFJLEVBQUU7Q0FDM0I7Q0FDQSxHQUFHLEVBQUU2d0UsV0FBVyxFQUFFLE9BQU8sR0FBRyxNQUFNLENBQUNybkUsSUFBSSxFQUFFN0YsTUFBTSxFQUFFLEVBQUU7RUFDbEQsT0FBT0EsS0FBSyxDQUFDM0QsT0FBTyxJQUFJLEVBQUU7Q0FDM0I7Q0FDQSxHQUFHLEVBQUU2d0UsV0FBVyxFQUFFLE9BQU8sR0FBRyxVQUFVLENBQUNybkUsSUFBSSxFQUFFN0YsTUFBTSxFQUFFLEVBQUU7RUFDdEQsT0FBT0EsS0FBSyxDQUFDM0QsT0FBTyxJQUFJLEVBQUU7Q0FDM0I7Q0FDQSxHQUFHLEVBQUU2d0UsV0FBVyxFQUFFLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQ3JuRSxJQUFJLEVBQUU3RixNQUFNLEVBQUUsRUFBRTtFQUNsRSxPQUFPQSxLQUFLLENBQUMzRCxPQUFPLElBQUksRUFBRTtDQUMzQjtDQUNBLEdBQUcsRUFBRTZ3RSxXQUFXLEVBQUUsT0FBTyxHQUFHLGVBQWUsQ0FBQ3JuRSxJQUFJLEVBQUU3RixNQUFNLEVBQUUsRUFBRTtFQUMzRCxPQUFPQSxLQUFLLENBQUMzRCxPQUFPLElBQUksRUFBRTtDQUMzQjtDQUNBLEdBQUcsRUFBRTZ3RSxXQUFXLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQ3JuRSxJQUFJLEVBQUU3RixNQUFNLEVBQUUsRUFBRTtFQUNyRCxPQUFPQSxLQUFLLENBQUMzRCxPQUFPLElBQUksRUFBRTtDQUMzQjtDQUNBLEdBQUcsRUFBRTZ3RSxXQUFXLEVBQUUsT0FBTyxHQUFHLE1BQU0sQ0FBQ3JuRSxJQUFJLEVBQUU3RixNQUFNLEVBQUUsRUFBRTtFQUNsRCxPQUFPQSxLQUFLLENBQUMzRCxPQUFPLElBQUksRUFBRTtDQUMzQjtDQUNBLEdBQUcsRUFBRTZ3RSxXQUFXLEVBQUUsT0FBTyxHQUFHLGNBQWMsQ0FBQ3JuRSxJQUFJLEVBQUU3RixNQUFNLEVBQUUsRUFBRTtFQUMxRCxPQUFPQSxLQUFLLENBQUMzRCxPQUFPLElBQUksRUFBRTtDQUMzQjtDQUNBLEdBQUcsRUFBRTZ3RSxXQUFXLEVBQUUsT0FBTyxFQUFFO0VBQzFCLE9BQU8sSUFBSTtDQUNaO0NBQ0EsT0FBTyxLQUFLO0FBQ2IsQ0FBQyxFQUFFLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Qy9DNXFDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0lBQ2pFLElBQUl3MkMsY0FBYyxFQUFFLE9BQU94MkMsTUFBTSxJQUFJLFFBQVE7UUFDekN5MkMsT0FBTyxFQUFFRCxjQUFjLEVBQUV4MkMsTUFBTSxFQUFFQSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzNDMDJDLEtBQUssRUFBRUYsY0FBYyxFQUFFLEtBQUssRUFBRXgyQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3hDNnpDLEtBQUs7O0lBRVQ0QyxPQUFPLEVBQUVBLE1BQU0sQ0FBQ2p2RSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztJQUNuQ2l2RSxPQUFPLEVBQUVDLEtBQUssRUFBRUQsT0FBTyxFQUFFLElBQUksRUFBRUEsT0FBTyxFQUFFLElBQUk7SUFDNUM1QyxNQUFNLEVBQUUsS0FBSyxFQUFFNEMsT0FBTyxFQUFFLDBIQUEwSDtJQUNsSjVDLE1BQU0sRUFBRSxJQUFJcm9FLE1BQU0sRUFBRXFvRSxNQUFNLENBQUM7SUFDM0IsT0FBTyxJQUFJLENBQUM1RyxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUc4akMsS0FBSyxDQUFDbmxFLElBQUksRUFBRTdGLE1BQU0sQ0FBQzs7QUFFMUQsQ0FBQyxFQUFFLGtDQUFrQyxDQUFDOztBQ3hDdENzaUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDM0QsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLGdIQUFnSCxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUNsSyxDQUFDLEVBQUVzaUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLENBQUN3cEIsS0FBSyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNpQjlCdmlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQzVELElBQUk1N0IsTUFBTSxFQUFFLEtBQUs7RUFDaEIyaEMsR0FBRyxFQUFFLDJCQUEyQjtFQUNoQzZnQyxLQUFLLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxJQUFJLEVBQUVDLEtBQUs7Q0FDM0IsR0FBRyxFQUFFamhDLEVBQUUsQ0FBQ3BuQyxJQUFJLEVBQUU3RixNQUFNLEVBQUUsRUFBRTtFQUN2Qjh0RSxNQUFNLEVBQUU5dEUsS0FBSyxDQUFDSSxLQUFLLEVBQUUsSUFBSSxDQUFDO0VBQzFCMnRFLEdBQUcsRUFBRXA1QyxRQUFRLEVBQUVtNUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUMvQkUsR0FBRyxFQUFFcjVDLFFBQVEsRUFBRW01QyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQy9CRyxLQUFLLEVBQUV0NUMsUUFBUSxFQUFFbTVDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDakNJLE1BQU0sRUFBRSxJQUFJNXNFLElBQUksRUFBRUEsSUFBSSxDQUFDNnNFLEdBQUcsRUFBRUYsSUFBSSxFQUFFRCxHQUFHLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDN0QsR0FBRyxFQUFFLEVBQUVHLEtBQUssQ0FBQ0UsY0FBYyxDQUFDLEVBQUUsSUFBSUgsS0FBSyxFQUFFLEdBQUcsRUFBRUMsS0FBSyxDQUFDRyxXQUFXLENBQUMsRUFBRSxJQUFJTCxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRUUsS0FBSyxDQUFDSSxVQUFVLENBQUMsRUFBRSxJQUFJUCxHQUFHLEVBQUUsRUFBRTtHQUNqSHppRSxNQUFNLEVBQUUsSUFBSTtFQUNiLEVBQUUsS0FBSztHQUNOQSxNQUFNLEVBQUUsS0FBSztFQUNkO0NBQ0QsRUFBRSxLQUFLO0VBQ05BLE1BQU0sRUFBRSxLQUFLO0NBQ2Q7Q0FDQSxPQUFPLElBQUksQ0FBQzg0RCxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUc1N0IsS0FBSztBQUN6QyxDQUFDLEVBQUVnM0IsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLENBQUN3cEIsS0FBSyxDQUFDOztBQ3RDOUJ2aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDM0QsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLHlFQUF5RSxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUMzSCxDQUFDLEVBQUVzaUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLENBQUN3cEIsS0FBSyxDQUFDOzs7QUNEOUJ2aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLEVBQUU7Q0FDckVBLE1BQU0sRUFBRSxPQUFPQSxNQUFNLElBQUksU0FBUyxFQUFFQSxLQUFLLENBQUN4NEIsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxlQUFlO0NBQ2hGLE9BQU8sSUFBSSxDQUFDeWxFLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBR2xuQyxLQUFLLENBQUNrRixLQUFLLEVBQUUsSUFBSXZDLE1BQU0sRUFBRSxPQUFPLEVBQUV3MEIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMzRixDQUFDLEVBQUVtTCxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxFQUFFLENBQUM7Ozs7O0FDRHpFdjdCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ2xFLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxjQUFjLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0FBQ2hFLENBQUMsRUFBRSw2Q0FBNkMsQ0FBQzs7QUNMakRzaUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLEVBQUU7SUFDcEUsSUFBSWo1QixPQUFPLEVBQUVva0MsQ0FBQyxFQUFFbkwsTUFBTSxDQUFDOztJQUV2QixHQUFHLEVBQUUsSUFBSSxDQUFDNEQsUUFBUSxDQUFDa3BDLFdBQVcsR0FBRy9sRSxNQUFNLENBQUMyVCxHQUFHLEVBQUUsNkJBQTZCLENBQUMsQ0FBQ3hWLE9BQU8sRUFBRTtRQUNqRjZCLE1BQU0sQ0FBQzYyQixRQUFRLEVBQUUsNEJBQTRCLENBQUMsQ0FBQy9VLEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN2RnNpQixDQUFDLEVBQUU0RSxRQUFRLENBQUMsQ0FBQzg2QixLQUFLLENBQUMsQ0FBQztRQUN4QixFQUFFLENBQUM7SUFDUDs7SUFFQSxPQUFPaGlFLE1BQU0sRUFBRTlCLE1BQU0sQ0FBQ2xELEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUMsRUFBRSxnQ0FBZ0MsQ0FBQzs7QUNWcENzbkMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRS9QLE1BQU0sRUFBRTtJQUN6RSxJQUFJajVCLE9BQU8sRUFBRW9rQyxDQUFDLEVBQUVuTCxNQUFNLENBQUM7O0lBRXZCLEdBQUcsRUFBRSxJQUFJLENBQUM0RCxRQUFRLENBQUNrcEMsV0FBVyxHQUFHL2xFLE1BQU0sQ0FBQzJULEdBQUcsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDeFYsT0FBTyxFQUFFO1FBQ3RGNkIsTUFBTSxDQUFDNjJCLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDL1UsRUFBRSxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2pHc2lCLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDODZCLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsQ0FBQztJQUNQOztJQUVBLE9BQU9oaUUsTUFBTSxHQUFHOUIsTUFBTSxDQUFDbEQsR0FBRyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxFQUFFLGdDQUFnQyxDQUFDOzs7Ozs7OztBQ0pwQ3NuQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTs7O0NBR3pELEdBQUcsRUFBRSxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxFQUFFO0VBQy9CLE9BQU8sSUFBSTtDQUNaOzs7Q0FHQSxJQUFJcW5DLEtBQUssRUFBRXZ1RSxLQUFLLENBQUNyQixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDMGEsV0FBVyxDQUFDLENBQUM7RUFDakRtMUQsZ0JBQWdCLEVBQUUsRUFBRTtFQUNwQkMsY0FBYyxFQUFFLElBQUk7RUFDcEJDLE1BQU0sRUFBRSxFQUFFO0VBQ1ZDLFVBQVUsRUFBRSxFQUFFO0VBQ2RDLFdBQVcsRUFBRUMsU0FBUyxFQUFFM21DLE1BQU0sRUFBRTRtQyxLQUFLLEVBQUVDLFdBQVcsRUFBRUMsbUJBQW1CLEVBQUVDLFVBQVUsRUFBRWwwRSxDQUFDLEVBQUVtMEIsQ0FBQzs7Ozs7OztDQU8xRixJQUFJZ2dELGtCQUFrQixFQUFFLENBQUM7Q0FDekIsR0FBRyxFQUFFWCxJQUFJLENBQUNseUUsT0FBTyxFQUFFNnlFLGtCQUFrQixFQUFFO0VBQ3RDLE9BQU8sS0FBSztDQUNiOzs7Q0FHQU4sWUFBWSxFQUFFTCxJQUFJLENBQUM5NkIsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDcEN1N0Isb0JBQW9CLEVBQUU7RUFDckIsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsb0JBQW9CO0VBQzFCLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxzQkFBc0I7RUFDNUIsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsc0JBQXNCO0VBQzVCLElBQUksRUFBRSwyQkFBMkI7RUFDakMsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxvQkFBb0I7RUFDMUIsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxpQkFBaUI7RUFDdkIsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLDJCQUEyQjtFQUNqQyxJQUFJLEVBQUUsb0JBQW9CO0VBQzFCLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLHNCQUFzQjtFQUM1QixJQUFJLEVBQUUsb0JBQW9CO0VBQzFCLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLHlCQUF5QjtFQUMvQixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSwwQkFBMEI7RUFDaEMsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsc0JBQXNCO0VBQzVCLElBQUksRUFBRSxzQkFBc0I7RUFDNUIsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsb0JBQW9CO0VBQzFCLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsMEJBQTBCO0VBQ2hDLElBQUksRUFBRSw0QkFBNEI7RUFDbEMsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUseUJBQXlCO0VBQy9CLElBQUksRUFBRSwyQkFBMkI7RUFDakMsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxpQkFBaUI7RUFDdkIsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsb0JBQW9CO0VBQzFCLElBQUksRUFBRSxvQkFBb0I7RUFDMUIsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxzQkFBc0I7RUFDNUIsSUFBSSxFQUFFLDBCQUEwQjtFQUNoQyxJQUFJLEVBQUUsb0JBQW9CO0VBQzFCLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsU0FBUztFQUNmLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLFNBQVM7RUFDZixJQUFJLEVBQUUsb0JBQW9CO0VBQzFCLElBQUksRUFBRSxTQUFTO0VBQ2YsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQixJQUFJLEVBQUUsZUFBZTtFQUNyQixJQUFJLEVBQUUsaUJBQWlCO0VBQ3ZCLElBQUksRUFBRTtDQUNQLENBQUM7O0NBRURELFlBQVksRUFBRUMsbUJBQW1CLEVBQUVKLFlBQVksQ0FBQzs7Ozs7Ozs7O0NBU2hELEdBQUcsRUFBRSxPQUFPRyxZQUFZLElBQUksWUFBWSxFQUFFO0VBQ3pDRSxXQUFXLEVBQUUsSUFBSXRzRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUVvc0UsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDcEUsR0FBRyxFQUFFLENBQUMsRUFBRUUsVUFBVSxDQUFDcHBFLElBQUksRUFBRTBvRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0dBQ25DLE9BQU8sS0FBSztFQUNiO0NBQ0Q7OztDQUdBTSxVQUFVLEVBQUVOLElBQUksQ0FBQzk2QixTQUFTLEVBQUUsQ0FBQyxFQUFFODZCLElBQUksQ0FBQ2x5RSxPQUFPLEVBQUUsRUFBRWt5RSxJQUFJLENBQUM5NkIsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDckUsSUFBSSxFQUFFMTRDLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRTh6RSxTQUFTLENBQUN4eUUsTUFBTSxFQUFFdEIsQ0FBQyxHQUFHLEVBQUU7RUFDeENtdEMsT0FBTyxFQUFFMm1DLFNBQVMsQ0FBQzNtQyxNQUFNLEVBQUVudEMsRUFBRSxDQUFDO0VBQzlCLEdBQUcsRUFBRW10QyxPQUFPLElBQUksSUFBSSxFQUFFO0dBQ3JCdW1DLGNBQWMsRUFBRSxLQUFLO0VBQ3RCO0VBQ0EsR0FBRyxFQUFFLENBQUNBLGNBQWMsRUFBRTtHQUNyQkQsZ0JBQWdCLEdBQUcsc0NBQXNDLENBQUMvMEUsT0FBTyxFQUFFeXVDLE9BQU8sQ0FBQztFQUM1RTtDQUNEOzs7Q0FHQSxJQUFJLEVBQUVoWixFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUVzL0MsZUFBZSxDQUFDbnlFLE1BQU0sRUFBRTZ5QixDQUFDLEdBQUcsRUFBRTtFQUM5QzQvQyxNQUFNLEVBQUVOLGVBQWUsQ0FBQ3RtQyxNQUFNLEVBQUVoWixFQUFFLENBQUM7RUFDbkN5L0MsVUFBVSxFQUFFLEdBQUcsRUFBRUQsTUFBTSxFQUFFLEdBQUcsRUFBRUksS0FBSztFQUNuQ0osTUFBTSxFQUFFQyxVQUFVLEVBQUUsRUFBRTtDQUN2QjtDQUNBLE9BQU9ELE1BQU0sSUFBSSxDQUFDO0FBQ25CLENBQUMsRUFBRSw4QkFBOEIsQ0FBQzs7QUN2SWxDcHNDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQzVELE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxTQUFTLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0FBQzNELENBQUMsRUFBRSxtREFBbUQsQ0FBQzs7QUNGdkRzaUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDekQsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLCtIQUErSCxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUNqTCxDQUFDLEVBQUUsc0NBQXNDLENBQUM7O0FDRjFDc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ3pELE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxvMkJBQW8yQixDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUN0NUIsQ0FBQyxFQUFFLHNDQUFzQyxDQUFDOztBQ0YxQ3NpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRS9QLE1BQU0sRUFBRTtJQUNqRSxJQUFJajVCLE9BQU8sRUFBRW9rQyxDQUFDLEVBQUVuTCxNQUFNLENBQUM7O0lBRXZCLEdBQUcsRUFBRSxJQUFJLENBQUM0RCxRQUFRLENBQUNrcEMsV0FBVyxHQUFHL2xFLE1BQU0sQ0FBQzJULEdBQUcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDeFYsT0FBTyxFQUFFO1FBQzlFNkIsTUFBTSxDQUFDNjJCLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDL1UsRUFBRSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2pGc2lCLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDODZCLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsQ0FBQztJQUNQOztJQUVBLE9BQU9oaUUsTUFBTSxFQUFFOUIsTUFBTSxDQUFDbEQsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxFQUFFLCtCQUErQixDQUFDOztBQ1ZuQ3NuQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRS9QLE1BQU0sRUFBRTtJQUN0RSxJQUFJajVCLE9BQU8sRUFBRW9rQyxDQUFDLEVBQUVuTCxNQUFNLENBQUM7O0lBRXZCLEdBQUcsRUFBRSxJQUFJLENBQUM0RCxRQUFRLENBQUNrcEMsV0FBVyxHQUFHL2xFLE1BQU0sQ0FBQzJULEdBQUcsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDeFYsT0FBTyxFQUFFO1FBQ25GNkIsTUFBTSxDQUFDNjJCLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDL1UsRUFBRSxFQUFFLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzNGc2lCLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDODZCLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsQ0FBQztJQUNQOztJQUVBLE9BQU9oaUUsTUFBTSxHQUFHOUIsTUFBTSxDQUFDbEQsR0FBRyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxFQUFFLCtCQUErQixDQUFDOztBQ1ZuQ3NuQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtDQUNoRSxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUM3RCxDQUFDLEVBQUUsc0JBQXNCLENBQUM7O0FDRjFCc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDekUsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLHFCQUFxQixDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUN2RSxDQUFDLEVBQUUscUNBQXFDLENBQUM7OztBQ0R6Q3NpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRS9QLE1BQU0sRUFBRTtDQUNwRSxHQUFHLEVBQUUsSUFBSSxDQUFDaXRDLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsRUFBRTtFQUMvQixPQUFPLElBQUk7Q0FDWjs7Q0FFQSxHQUFHLEVBQUU1RSxDQUFDLEVBQUU0RSxRQUFRLENBQUMsQ0FBQ2g5QixJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFO0VBQzdDLEdBQUcsRUFBRWc5QixPQUFPLENBQUMrakMsTUFBTSxHQUFHL2pDLE9BQU8sQ0FBQytqQyxLQUFLLENBQUM1dUUsT0FBTyxFQUFFODZCLE1BQU0sRUFBRTtHQUNwRCxPQUFPLEtBQUs7RUFDYjtDQUNEOztDQUVBLE9BQU8sSUFBSTtBQUNaLENBQUMsRUFBRW1MLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsd0NBQXdDLEVBQUUsQ0FBQzs7O0FDWmxFdjdCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0NBQ25FLEdBQUcsRUFBRSxJQUFJLENBQUNpdEMsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxFQUFFO0VBQy9CLE9BQU8sSUFBSTtDQUNaOztDQUVBLEdBQUcsRUFBRTVFLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7RUFDN0MsR0FBRyxFQUFFZzlCLE9BQU8sQ0FBQytqQyxNQUFNLEdBQUcvakMsT0FBTyxDQUFDK2pDLEtBQUssQ0FBQzV1RSxPQUFPLEVBQUU7R0FDNUMsSUFBSSxFQUFFLElBQUl0QixFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUVtc0MsT0FBTyxDQUFDK2pDLEtBQUssQ0FBQzV1RSxNQUFNLEVBQUV0QixDQUFDLEdBQUcsRUFBRTtJQUNoRCxHQUFHLEVBQUVtc0MsT0FBTyxDQUFDK2pDLEtBQUssRUFBRWx3RSxFQUFFLENBQUMsQ0FBQzgzQyxLQUFLLEVBQUUxYixNQUFNLEVBQUU7S0FDdEMsT0FBTyxLQUFLO0lBQ2I7R0FDRDtFQUNEO0NBQ0Q7O0NBRUEsT0FBTyxJQUFJO0FBQ1osQ0FBQyxFQUFFbUwsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDOzs7QUNoQnRFdjdCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0NBQ3hFLEdBQUcsRUFBRSxJQUFJLENBQUNpdEMsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxFQUFFO0VBQy9CLE9BQU8sSUFBSTtDQUNaOztDQUVBLEdBQUcsRUFBRTVFLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDaDlCLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7RUFDN0MsR0FBRyxFQUFFZzlCLE9BQU8sQ0FBQytqQyxNQUFNLEdBQUcvakMsT0FBTyxDQUFDK2pDLEtBQUssQ0FBQzV1RSxPQUFPLEVBQUU7R0FDNUMsSUFBSTh5RSxVQUFVLEVBQUUsQ0FBQzs7R0FFakIsSUFBSSxFQUFFLElBQUlwMEUsRUFBRSxFQUFFLENBQUMsRUFBRUEsRUFBRSxFQUFFbXNDLE9BQU8sQ0FBQytqQyxLQUFLLENBQUM1dUUsTUFBTSxFQUFFdEIsQ0FBQyxHQUFHLEVBQUU7SUFDaERvMEUsVUFBVSxHQUFHam9DLE9BQU8sQ0FBQytqQyxLQUFLLEVBQUVsd0UsRUFBRSxDQUFDLENBQUM4M0MsSUFBSTtJQUNwQyxHQUFHLEVBQUVzOEIsVUFBVSxFQUFFaDRDLE1BQU0sRUFBRTtLQUN4QixPQUFPLEtBQUs7SUFDYjtHQUNEO0VBQ0Q7Q0FDRDs7Q0FFQSxPQUFPLElBQUk7QUFDWixDQUFDLEVBQUVtTCxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFEQUFxRCxFQUFFLENBQUM7OztBQ3BCL0V2N0IsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDN0QsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLHFGQUFxRixDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUN2SSxDQUFDLEVBQUUsdUNBQXVDLENBQUM7O0FDRjNDc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRW1GLFlBQVksRUFBRWxvQyxRQUFRLEVBQUU7Q0FDcEUsSUFBSW1vQyxlQUFlLEVBQUVELFlBQVksQ0FBQ3p3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQztDQUMvRCxPQUFPLElBQUksQ0FBQ3lsRSxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUdtb0MsY0FBYyxDQUFDaHpFLE9BQU8sRUFBRSxFQUFFLEdBQUcsMkJBQTJCLENBQUN3SixJQUFJLEVBQUV3cEUsZUFBZSxDQUFDO0FBQ25ILENBQUMsRUFBRSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7OztBQ0szQy9zQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUVtRixZQUFZLEVBQUVsb0MsUUFBUSxFQUFFO0NBQ3BFa29DLGFBQWEsRUFBRUEsWUFBWSxDQUFDendFLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDO0NBQ3pELE9BQU8sSUFBSSxDQUFDeWxFLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBR2tvQyxZQUFZLENBQUMveUUsT0FBTyxFQUFFLEVBQUU7RUFDMUQreUUsWUFBWSxDQUFDbHFFLEtBQUssRUFBRSx1RUFBdUUsQ0FBQztBQUM5RixDQUFDLEVBQUUsdUNBQXVDLENBQUM7O0FDWjNDbzlCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0lBQ3pELE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxpTEFBaUwsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7QUFDdE8sQ0FBQyxFQUFFLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FDTXBDc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQzFELFlBQVk7O0NBRVosR0FBRyxFQUFFLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEVBQUU7RUFDL0IsT0FBTyxJQUFJO0NBQ1o7O0NBRUEsSUFBSW9vQyxTQUFTLEVBQUUsSUFBSTNzRSxNQUFNLEVBQUUsdURBQXVELENBQUM7Q0FDbkYsSUFBSTRzRSxXQUFXLEVBQUUsMEJBQTBCO0VBQzFDbjJELE9BQU8sRUFBRXBaLEtBQUssQ0FBQ2lqRCxNQUFNLEVBQUVqakQsS0FBSyxDQUFDM0QsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDZ2QsV0FBVyxDQUFDLENBQUM7RUFDdkQwckQsTUFBTTs7Q0FFUC9rRSxNQUFNLEVBQUVBLEtBQUssQ0FBQ3JHLFFBQVEsQ0FBQyxDQUFDLENBQUMwZixXQUFXLENBQUMsQ0FBQzs7O0NBR3RDLEdBQUcsRUFBRXJaLEtBQUssQ0FBQzNELE9BQU8sRUFBRSxHQUFHLEdBQUcyRCxLQUFLLENBQUMzRCxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUNpekUsUUFBUSxDQUFDenBFLElBQUksRUFBRTdGLE1BQU0sRUFBRSxFQUFFO0VBQ3ZFLE9BQU8sS0FBSztDQUNiOzs7OztDQUtBQSxNQUFNLEVBQUVBLEtBQUssQ0FBQ3JCLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSTtFQUNsQyxDQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUk7RUFDdEIsQ0FBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7O0NBRXhCb21FLE9BQU8sRUFBRS9rRSxLQUFLLENBQUMzRCxPQUFPLElBQUksRUFBRSxFQUFFMkQsS0FBSyxDQUFDaWpELE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUVqakQsS0FBSyxDQUFDaWpELE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDOztDQUV6RSxPQUFPc3NCLFVBQVUsQ0FBQ3JuQyxNQUFNLEVBQUV2VCxRQUFRLEVBQUVvd0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJM3JELE1BQU07O0FBRW5FLENBQUMsRUFBRSxxQ0FBcUMsQ0FBQzs7Ozs7QUNuQ3pDa3BCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQzFELFlBQVk7O0NBRVosR0FBRyxFQUFFLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEVBQUU7RUFDL0IsT0FBTyxJQUFJO0NBQ1o7O0NBRUFsbkMsTUFBTSxFQUFFQSxLQUFLLENBQUNxWixXQUFXLENBQUMsQ0FBQzs7O0NBRzNCLEdBQUcsRUFBRSxDQUFDclosS0FBSyxDQUFDa0YsS0FBSyxFQUFFLDJFQUEyRSxFQUFFLEVBQUU7RUFDakcsT0FBTyxLQUFLO0NBQ2I7OztDQUdBLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQ1csSUFBSSxFQUFFN0YsTUFBTSxFQUFFLEVBQUU7RUFDekMsT0FBTyxFQUFFLHlCQUF5QixDQUFDa29DLE1BQU0sRUFBRWxvQyxLQUFLLENBQUN5ekMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSXp6QyxLQUFLLENBQUNrb0MsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ2xHOzs7Q0FHQSxHQUFHLEVBQUUsV0FBVyxDQUFDcmlDLElBQUksRUFBRTdGLE1BQU0sRUFBRSxFQUFFO0VBQ2hDLE9BQU8sRUFBRUEsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLHlCQUF5QixDQUFDa29DLE1BQU0sRUFBRWxvQyxLQUFLLENBQUN5ekMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMzRjs7Q0FFQSxPQUFPLEtBQUs7O0FBRWIsQ0FBQyxFQUFFLHFDQUFxQyxDQUFDOzs7OztBQzFCekNuUixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUVqcUUsTUFBTSxFQUFFO0NBQ2pELFlBQVk7O0NBRVpBLE1BQU0sRUFBRUEsS0FBSyxDQUFDckIsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUM7O0NBRXRDLEdBQUcsRUFBRXFCLEtBQUssQ0FBQzNELE9BQU8sSUFBSSxHQUFHLEVBQUU7RUFDMUIsT0FBTyxLQUFLO0NBQ2I7O0NBRUEsSUFBSW16RSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUM1QyxJQUFJQyxPQUFPLEVBQUUsQ0FBQztDQUNkLElBQUksRUFBRSxJQUFJMTBFLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRSxDQUFDLEVBQUVBLENBQUMsR0FBRyxFQUFFO0VBQzdCMDBFLE9BQU8sR0FBR0QsUUFBUSxFQUFFejBFLEVBQUUsRUFBRSxFQUFFaUYsS0FBSyxFQUFFakYsRUFBRSxDQUFDO0NBQ3JDO0NBQ0EsSUFBSTIwRSxLQUFLLEVBQUVELE9BQU8sRUFBRSxFQUFFO0NBQ3RCLElBQUlFLGFBQWEsRUFBRSxFQUFFRCxLQUFLLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFQSxJQUFJOztDQUU3QyxPQUFPLEVBQUVDLGFBQWEsSUFBSWg3QyxRQUFRLEVBQUUzMEIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELENBQUMsRUFBRSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FDWHpDc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRWpxRSxNQUFNLEVBQUU7Q0FDakQsSUFBSStrRSxNQUFNO0NBQ1YsSUFBSThILEVBQUU7Q0FDTixJQUFJeEIsSUFBSSxFQUFFLENBQUM7Q0FDWCxJQUFJdUUsRUFBRTtDQUNOLElBQUl4MEQsS0FBSztDQUNULElBQUl5MEQsVUFBVTs7O0NBR2Q3dkUsTUFBTSxFQUFFQSxLQUFLLENBQUNyQixPQUFPLEVBQUUsNkNBQTZDLEVBQUUsR0FBRyxDQUFDOzs7Q0FHMUUsR0FBRyxFQUFFcUIsS0FBSyxDQUFDM0QsT0FBTyxJQUFJLEdBQUcsRUFBRTtFQUMxQixPQUFPLEtBQUs7Q0FDYjs7O0NBR0F3d0UsR0FBRyxFQUFFbDRDLFFBQVEsRUFBRTMwQixLQUFLLENBQUN5ekMsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUM7OztDQUc5Q3N4QixPQUFPLEVBQUVwd0MsUUFBUSxFQUFFMzBCLEtBQUssQ0FBQ3l6QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQzs7Q0FFakQsSUFBSSxFQUFFcjRCLE1BQU0sRUFBRSxDQUFDLEVBQUVBLE1BQU0sRUFBRSxFQUFFLEVBQUVBLEtBQUssR0FBRyxFQUFFO0VBQ3RDeTBELFdBQVcsRUFBRXowRCxLQUFLO0VBQ2xCLEdBQUcsRUFBRUEsTUFBTSxJQUFJLEdBQUcsRUFBRTtHQUNuQnkwRCxXQUFXLEVBQUUsQ0FBQztFQUNmO0VBQ0EsR0FBRyxFQUFFejBELE1BQU0sSUFBSSxHQUFHLEVBQUU7R0FDbkJ5MEQsV0FBVyxFQUFFLENBQUM7RUFDZjtFQUNBeEUsSUFBSSxHQUFHLEVBQUUsRUFBRXRHLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRThLLFdBQVcsQ0FBQztFQUN2QzlLLE9BQU8sRUFBRXB3QyxRQUFRLEVBQUVvd0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7Q0FDckM7Q0FDQTZLLEdBQUcsRUFBRSxFQUFFdkUsSUFBSSxFQUFFLEdBQUcsQ0FBQzs7Q0FFakIsR0FBRyxFQUFFdUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtFQUNiQSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUVBLEdBQUcsQ0FBQztDQUNqQixFQUFFLEtBQUs7RUFDTkEsR0FBRyxFQUFFLENBQUM7Q0FDUDs7Q0FFQSxHQUFHLEVBQUUvQyxHQUFHLElBQUkrQyxHQUFHLEVBQUU7RUFDaEIsT0FBTyxJQUFJO0NBQ1osRUFBRSxLQUFLO0VBQ04sT0FBTyxLQUFLO0NBQ2I7QUFDRCxDQUFDLEVBQUUsd0NBQXdDLENBQUM7O0FDeEQ1Q3R0QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLE9BQU8sRUFBRS9QLE1BQU0sRUFBRTtDQUN0RSxPQUFPLElBQUksQ0FBQ2l0QyxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsQ0FBQzVFLENBQUMsQ0FBQ2kvQixTQUFTLENBQUN1RyxPQUFPLENBQUM3QyxPQUFPLENBQUNqckUsSUFBSSxFQUFFLElBQUksRUFBRWdHLEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLENBQUM7QUFDcEcsQ0FBQyxFQUFFLCtEQUErRCxDQUFDOztBQ0ZuRW1MLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ2pFLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxRQUFRLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0FBQzFELENBQUMsRUFBRSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FDVzVCc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFL1AsTUFBTSxFQUFFO0NBQ25FLEdBQUcsRUFBRSxJQUFJLENBQUNpdEMsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxFQUFFO0VBQy9CLE9BQU8sSUFBSTtDQUNaO0NBQ0EsR0FBRyxFQUFFLE9BQU8vUCxNQUFNLElBQUksU0FBUyxFQUFFO0VBQ2hDQSxNQUFNLEVBQUUsSUFBSXgwQixNQUFNLEVBQUUsT0FBTyxFQUFFdzBCLE1BQU0sRUFBRSxLQUFLLENBQUM7Q0FDNUM7Q0FDQSxPQUFPQSxLQUFLLENBQUN0eEIsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0FBQzNCLENBQUMsRUFBRSxrQkFBa0IsQ0FBQzs7Ozs7QUNsQnRCc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQzVELE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyx5RkFBeUYsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7QUFDM0ksQ0FBQyxFQUFFLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2EzQ3NpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUVtRixZQUFZLEVBQUVsb0MsUUFBUSxFQUFFO0NBQ25Fa29DLGFBQWEsRUFBRUEsWUFBWSxDQUFDendFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0NBQ2pELElBQUlteEUsT0FBTyxFQUFFLGlIQUFpSDtDQUM5SCxPQUFPLElBQUksQ0FBQzFMLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRzRvQyxNQUFNLENBQUNqcUUsSUFBSSxFQUFFdXBFLGFBQWEsQ0FBQztBQUMvRCxDQUFDLEVBQUUsc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7OztBQ1oxQzlzQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUVtRixZQUFZLEVBQUVsb0MsUUFBUSxFQUFFO0NBQ3BFa29DLGFBQWEsRUFBRUEsWUFBWSxDQUFDendFLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDO0NBQ3pELE9BQU8sSUFBSSxDQUFDeWxFLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBR2tvQyxZQUFZLENBQUMveUUsT0FBTyxFQUFFLEVBQUU7RUFDMUQreUUsWUFBWSxDQUFDbHFFLEtBQUssRUFBRSxtRkFBbUYsQ0FBQztBQUMxRyxDQUFDLEVBQUUseUNBQXlDLENBQUM7Ozs7Ozs7Ozs7QUNON0NvOUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFbUYsWUFBWSxFQUFFbG9DLFFBQVEsRUFBRTtDQUNuRWtvQyxhQUFhLEVBQUVBLFlBQVksQ0FBQ3p3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQztDQUN6RCxPQUFPLElBQUksQ0FBQ3lsRSxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUdrb0MsWUFBWSxDQUFDL3lFLE9BQU8sRUFBRSxFQUFFO0VBQzFEK3lFLFlBQVksQ0FBQ2xxRSxLQUFLLEVBQUUsb0pBQW9KLENBQUM7QUFDM0ssQ0FBQyxFQUFFLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNJMUNvOUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFbUYsWUFBWSxFQUFFbG9DLFFBQVEsRUFBRTtDQUNuRWtvQyxhQUFhLEVBQUVBLFlBQVksQ0FBQ3p3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztDQUNqRCxPQUFPLElBQUksQ0FBQ3lsRSxRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUdrb0MsWUFBWSxDQUFDL3lFLE9BQU8sRUFBRSxFQUFFO0VBQzFEK3lFLFlBQVksQ0FBQ2xxRSxLQUFLLEVBQUUsc0ZBQXNGLENBQUM7QUFDN0csQ0FBQyxFQUFFLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7O0FDWjFDbzlCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRThGLFNBQVMsRUFBRTdvQyxRQUFRLEVBQUU7Q0FDckUsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLHNDQUFzQyxDQUFDcmhDLElBQUksRUFBRWtxRSxVQUFVLENBQUM7QUFDNUYsQ0FBQyxFQUFFLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNHN0J6dEMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDakUsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDZFQUE2RSxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUMvSCxDQUFDLEVBQUUscUNBQXFDLENBQUM7OztBQ2R6Q3NpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtDQUNqRSxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUMzRCxDQUFDLEVBQUUscUNBQXFDLENBQUM7O0FDSHpDc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ2pFLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRywrQkFBK0IsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7QUFDakYsQ0FBQyxFQUFFLHFDQUFxQyxDQUFDOzs7QUNEekNzaUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7Q0FDL0QsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLGdPQUFnTyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUNsUixDQUFDLEVBQUUscUNBQXFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2F6Q3NpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFcnBDLFFBQVEsRUFBRTtDQUNoRixJQUFJbXlFLFFBQVEsRUFBRTF0QyxDQUFDLEVBQUV6a0MsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFcXBDLE9BQU8sQ0FBQ2lNLEtBQUssQ0FBQztFQUM1Qzg4QixhQUFhLEVBQUVELE9BQU8sQ0FBQzN5RSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzlCa2tFLFVBQVUsRUFBRTBPLFlBQVksQ0FBQ2wyRCxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRWsyRCxZQUFZLENBQUNsMkQsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEVBQUV1b0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7RUFDOUdrZ0UsUUFBUSxFQUFFa1MsT0FBTyxDQUFDdm5FLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtHQUNwQyxPQUFPODRELFNBQVMsQ0FBQ2dELFlBQVksRUFBRSxLQUFLLENBQUM7RUFDdEMsRUFBRSxDQUFDLENBQUNsb0UsT0FBTyxHQUFHd0IsT0FBTyxFQUFFLEVBQUUsQ0FBQzs7O0NBRzNCb3lFLFlBQVksQ0FBQ2wyRCxJQUFJLEVBQUUsZUFBZSxFQUFFd25ELFVBQVUsQ0FBQzs7O0NBRy9DLEdBQUcsRUFBRSxDQUFDai9CLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDbnRCLElBQUksRUFBRSxrQkFBa0IsRUFBRSxFQUFFO0VBQzlDaTJELE9BQU8sQ0FBQ2oyRCxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0VBQ3ZDaTJELE9BQU8sQ0FBQ2x6RSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDeEJ5a0UsU0FBUyxDQUFDcjZCLE9BQU8sRUFBRSxLQUFLLENBQUM7RUFDMUIsRUFBRSxDQUFDO0VBQ0g4b0MsT0FBTyxDQUFDajJELElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUM7Q0FDekM7Q0FDQSxPQUFPK2pELE9BQU87QUFDZixDQUFDLEVBQUV4N0IsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2Z0RXY3QixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsT0FBTyxFQUFFcnBDLFFBQVEsRUFBRTtDQUNsRixJQUFJbXlFLFFBQVEsRUFBRTF0QyxDQUFDLEVBQUV6a0MsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFcXBDLE9BQU8sQ0FBQ2lNLEtBQUssQ0FBQztFQUM1Qzg4QixhQUFhLEVBQUVELE9BQU8sQ0FBQzN5RSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzlCa2tFLFVBQVUsRUFBRTBPLFlBQVksQ0FBQ2wyRCxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUVrMkQsWUFBWSxDQUFDbDJELElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRXVvQixDQUFDLENBQUMxa0MsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztFQUN4R3N5RSxhQUFhLEVBQUVGLE9BQU8sQ0FBQ3ZuRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDekMsT0FBTzg0RCxTQUFTLENBQUNnRCxZQUFZLEVBQUUsS0FBSyxDQUFDO0VBQ3RDLEVBQUUsQ0FBQyxDQUFDbG9FLE1BQU07RUFDVnloRSxRQUFRLEVBQUVvUyxhQUFhLElBQUksRUFBRSxHQUFHQSxhQUFhLEdBQUdyeUUsT0FBTyxFQUFFLEVBQUUsQ0FBQzs7O0NBRzdEb3lFLFlBQVksQ0FBQ2wyRCxJQUFJLEVBQUUsWUFBWSxFQUFFd25ELFVBQVUsQ0FBQzs7O0NBRzVDLEdBQUcsRUFBRSxDQUFDai9CLENBQUMsRUFBRTRFLFFBQVEsQ0FBQyxDQUFDbnRCLElBQUksRUFBRSxrQkFBa0IsRUFBRSxFQUFFO0VBQzlDaTJELE9BQU8sQ0FBQ2oyRCxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0VBQ3ZDaTJELE9BQU8sQ0FBQ2x6RSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7R0FDeEJ5a0UsU0FBUyxDQUFDcjZCLE9BQU8sRUFBRSxLQUFLLENBQUM7RUFDMUIsRUFBRSxDQUFDO0VBQ0g4b0MsT0FBTyxDQUFDajJELElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUM7Q0FDekM7Q0FDQSxPQUFPK2pELE9BQU87QUFDZixDQUFDLEVBQUV4N0IsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnRUFBZ0UsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSMUZ2N0IsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzBJLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxPQUFPLEVBQUVycEMsUUFBUSxFQUFFO0NBQ3JFLElBQUlzeUUsVUFBVSxFQUFFLE9BQU90eUUsUUFBUSxJQUFJLFdBQVc7RUFDN0N1eUUsY0FBYyxFQUFFLEVBQUVELFVBQVUsR0FBRyxPQUFPdHlFLE9BQU8sQ0FBQ3V5RSxjQUFjLElBQUksWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFdnlFLE9BQU8sQ0FBQ3V5RSxhQUFhO0VBQzdHQyxtQkFBbUIsRUFBRSxFQUFFRixVQUFVLEdBQUcsT0FBT3R5RSxPQUFPLENBQUN3eUUsbUJBQW1CLElBQUksWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFeHlFLE9BQU8sQ0FBQ3d5RSxrQkFBa0I7RUFDNUhDLGdCQUFnQixFQUFFLEVBQUVILFVBQVUsR0FBRyxPQUFPdHlFLE9BQU8sQ0FBQ3l5RSxnQkFBZ0IsSUFBSSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUV6eUUsT0FBTyxDQUFDeXlFLGVBQWU7RUFDbkh0RixLQUFLOztDQUVOLEdBQUcsRUFBRSxDQUFDcUYsbUJBQW1CLEdBQUcsQ0FBQ0MsZ0JBQWdCLEVBQUU7RUFDOUN0RixNQUFNLEVBQUUsc0hBQXNIO0NBQy9ILEVBQUUsS0FBSyxHQUFHLEVBQUVxRixtQkFBbUIsR0FBR0MsZ0JBQWdCLEVBQUU7RUFDbkR0RixNQUFNLEVBQUUsa0lBQWtJO0NBQzNJLEVBQUUsS0FBSyxHQUFHLEVBQUVxRixtQkFBbUIsRUFBRTtFQUNoQ3JGLE1BQU0sRUFBRSwrSEFBK0g7Q0FDeEksRUFBRSxLQUFLO0VBQ05BLE1BQU0sRUFBRSx5SEFBeUg7Q0FDbEk7O0NBRUFBLE1BQU0sRUFBRW9GLGNBQWMsRUFBRSxJQUFJenRFLE1BQU0sRUFBRXFvRSxNQUFNLEVBQUUsRUFBRSxJQUFJcm9FLE1BQU0sRUFBRXFvRSxLQUFLLEVBQUUsSUFBSSxDQUFDO0NBQ3RFLE9BQU8sSUFBSSxDQUFDNUcsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHOGpDLEtBQUssQ0FBQ25sRSxJQUFJLEVBQUU3RixNQUFNLENBQUM7QUFDdkQsQ0FBQyxFQUFFLCtCQUErQixDQUFDOzs7QUNwRG5Dc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFanFFLEtBQUssRUFBRWtuQyxPQUFPLEVBQUUvUCxNQUFNLEVBQUU7Q0FDN0UsT0FBT21MLENBQUMsRUFBRXRpQyxNQUFNLENBQUMsQ0FBQzdFLElBQUksQ0FBQyxDQUFDLENBQUNrQixPQUFPLEdBQUc4NkIsS0FBSztBQUN6QyxDQUFDLEVBQUVtTCxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVDQUF1QyxFQUFFLENBQUM7O0FDSGpFdjdCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ3pELE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyx3Q0FBd0MsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7QUFDMUYsQ0FBQyxFQUFFLHFEQUFxRCxDQUFDOztBQ0Z6RHNpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtDQUM1RCxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsZ0RBQWdELENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0FBQ2xHLENBQUMsRUFBRSxvREFBb0QsQ0FBQzs7O0FDRHhEc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQ3pELE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxvcUNBQW9xQyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztBQUN0dEMsQ0FBQyxFQUFFc2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxDQUFDL2dCLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUNTN0JnSSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUVwMUQsRUFBRSxFQUFFO0NBQzdDLEdBQUcsRUFBRUEsQ0FBQyxDQUFDeFksT0FBTyxJQUFJLEdBQUcsRUFBRTtFQUN0QixPQUFPLEtBQUs7Q0FDYjs7Q0FFQSxJQUFJazBFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7RUFDN0hDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDNUVDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDM0RySyxHQUFHLEVBQUUsQ0FBQztFQUNOcnJFLENBQUMsRUFBRXdXLENBQUMsRUFBRWk1QixDQUFDLEVBQUVTLENBQUMsRUFBRXlsQyxFQUFFLEVBQUVDLEdBQUc7O0NBRXBCLElBQUksRUFBRTUxRSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUUsRUFBRSxFQUFFQSxDQUFDLEdBQUcsRUFBRTtFQUMxQmt3QyxFQUFFLEVBQUV3bEMsRUFBRSxFQUFFMTFFLEVBQUUsQ0FBQztFQUNYeXZDLEVBQUUsRUFBRTMxQixDQUFDLENBQUN2YixLQUFLLEVBQUV5QixDQUFDLEVBQUVBLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDdkIsR0FBRyxFQUFFQSxFQUFFLElBQUksRUFBRSxFQUFFO0dBQ2Q0MUUsSUFBSSxFQUFFbm1DLENBQUM7RUFDUjtFQUNBLEdBQUcsRUFBRSxDQUFDdkksS0FBSyxFQUFFdUksRUFBRSxFQUFFLEVBQUU7R0FDbEJBLEVBQUUsR0FBR1MsQ0FBQztFQUNQLEVBQUUsS0FBSztHQUNOLElBQUksRUFBRTE1QixFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUVnL0QsRUFBRSxDQUFDbDBFLE1BQU0sRUFBRWtWLENBQUMsR0FBRyxFQUFFO0lBQ2pDLEdBQUcsRUFBRWk1QixDQUFDLENBQUNueEIsV0FBVyxDQUFDLEVBQUUsSUFBSWszRCxFQUFFLEVBQUVoL0QsRUFBRSxFQUFFLEVBQUU7S0FDbENpNUIsRUFBRSxFQUFFZ21DLEVBQUUsRUFBRWovRCxFQUFFLENBQUM7S0FDWGk1QixFQUFFLEdBQUdTLENBQUM7S0FDTixHQUFHLEVBQUVoSixLQUFLLEVBQUUwdUMsSUFBSSxFQUFFLEdBQUdwL0QsRUFBRSxJQUFJLEVBQUUsRUFBRTtNQUM5Qm8vRCxJQUFJLEVBQUVKLEVBQUUsRUFBRWgvRCxFQUFFLENBQUM7S0FDZDtLQUNBLEtBQUs7SUFDTjtHQUNEO0VBQ0Q7RUFDQTYwRCxHQUFHLEdBQUc1N0IsQ0FBQztDQUNSO0NBQ0FrbUMsR0FBRyxFQUFFdEssR0FBRyxFQUFFLEVBQUU7Q0FDWixHQUFHLEVBQUVzSyxHQUFHLElBQUksR0FBRyxFQUFFO0VBQ2hCQSxHQUFHLEVBQUUsR0FBRztDQUNUO0NBQ0EsR0FBRyxFQUFFQSxHQUFHLElBQUlDLElBQUksRUFBRTtFQUNqQixPQUFPLElBQUk7Q0FDWjtDQUNBLE9BQU8sS0FBSztBQUNiLENBQUMsRUFBRSxnRUFBZ0UsQ0FBQzs7QUNyRHBFcnVDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMwSSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRWpxRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0NBQzlELE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7QUFDcEUsQ0FBQyxFQUFFLHVDQUF1QyxDQUFDOztBQ0YzQ3NpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMEksU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUVqcUUsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtDQUM3RCxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsd0JBQXdCLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0FBQzFFLENBQUMsRUFBRSw4REFBOEQsQ0FBQzs7Ozs7O0FDRWxFc2lDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLGtCQUFrQjtDQUM1QkMsTUFBTSxFQUFFLCtCQUErQjtDQUN2QzhCLEtBQUssRUFBRSxxQ0FBcUM7Q0FDNUN0cUMsR0FBRyxFQUFFLHFDQUFxQztDQUMxQ3VxQyxJQUFJLEVBQUUsdUJBQXVCO0NBQzdCQyxPQUFPLEVBQUUsNkJBQTZCO0NBQ3RDQyxNQUFNLEVBQUUsNkJBQTZCO0NBQ3JDQyxNQUFNLEVBQUUsc0JBQXNCO0NBQzlCeUUsVUFBVSxFQUFFLGtDQUFrQztDQUM5Q3hFLE9BQU8sRUFBRSx1QkFBdUI7Q0FDaEMyTCxTQUFTLEVBQUUsbUNBQW1DO0NBQzlDMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsaUNBQWlDLENBQUM7Q0FDakVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpQ0FBaUMsQ0FBQztDQUNqRXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVDQUF1QyxDQUFDO0NBQ3pFcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUNBQXFDLENBQUM7Q0FDakV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxQ0FBcUMsQ0FBQztDQUMvRHR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHNDQUFzQztBQUNoRSxFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxpQ0FBaUM7Q0FDM0NDLE1BQU0sRUFBRSx3Q0FBd0M7Q0FDaEQ4QixLQUFLLEVBQUUsaURBQWlEO0NBQ3hEdHFDLEdBQUcsRUFBRSx1Q0FBdUM7Q0FDNUN1cUMsSUFBSSxFQUFFLHlDQUF5QztDQUMvQ0MsT0FBTyxFQUFFLHNEQUFzRDtDQUMvREMsTUFBTSxFQUFFLHlDQUF5QztDQUNqREMsTUFBTSxFQUFFLHlDQUF5QztDQUNqRHlFLFVBQVUsRUFBRSx5REFBeUQ7Q0FDckV4RSxPQUFPLEVBQUUsaURBQWlEO0NBQzFEMkwsU0FBUyxFQUFFLHVEQUF1RDtDQUNsRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHlEQUF5RCxDQUFDO0NBQ3pGc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsd0RBQXdELENBQUM7Q0FDeEZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx3RUFBd0UsQ0FBQztDQUMxR3BHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHdEQUF3RCxDQUFDO0NBQ3BGeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0RBQXNELENBQUM7Q0FDaEZ0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxREFBcUQ7QUFDL0UsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsd0JBQXdCO0NBQ2xDQyxNQUFNLEVBQUUscUNBQXFDO0NBQzdDOEIsS0FBSyxFQUFFLCtCQUErQjtDQUN0Q3RxQyxHQUFHLEVBQUUsNkJBQTZCO0NBQ2xDdXFDLElBQUksRUFBRSw4QkFBOEI7Q0FDcENDLE9BQU8sRUFBRSxvQ0FBb0M7Q0FDN0NDLE1BQU0sRUFBRSwrQkFBK0I7Q0FDdkNDLE1BQU0sRUFBRSw0QkFBNEI7Q0FDcEN5RSxVQUFVLEVBQUUsaURBQWlEO0NBQzdEeEUsT0FBTyxFQUFFLHdDQUF3QztDQUNqRDJMLFNBQVMsRUFBRSwrQ0FBK0M7Q0FDMUQxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyQ0FBMkMsQ0FBQztDQUMzRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG1DQUFtQyxDQUFDO0NBQ25FdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNkRBQTZELENBQUM7Q0FDL0ZwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyQ0FBMkMsQ0FBQztDQUN2RXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFEQUFxRCxDQUFDO0NBQy9FdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0RBQXNEO0FBQ2hGLEVBQUUsQ0FBQzs7Ozs7O0FDbEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLG1CQUFtQjtDQUM3QkMsTUFBTSxFQUFFLHFCQUFxQjtDQUM3QjhCLEtBQUssRUFBRSwwQ0FBMEM7Q0FDakR0cUMsR0FBRyxFQUFFLGtDQUFrQztDQUN2Q3VxQyxJQUFJLEVBQUUsZ0JBQWdCO0NBQ3RCQyxPQUFPLEVBQUUsMENBQTBDO0NBQ25EQyxNQUFNLEVBQUUsb0NBQW9DO0NBQzVDQyxNQUFNLEVBQUUscUNBQXFDO0NBQzdDeUUsVUFBVSxFQUFFLG9EQUFvRDtDQUNoRXhFLE9BQU8sRUFBRSxxQkFBcUI7Q0FDOUIyTCxTQUFTLEVBQUUsNkJBQTZCO0NBQ3hDMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0NBQWtDLENBQUM7Q0FDbEVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnQ0FBZ0MsQ0FBQztDQUNoRXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJDQUEyQyxDQUFDO0NBQzdFcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0NBQStDLENBQUM7Q0FDM0V4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvREFBb0QsQ0FBQztDQUM5RXR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHNEQUFzRDtBQUNoRixFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSw0QkFBNEI7Q0FDdENDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDeEM4QixLQUFLLEVBQUUsa0RBQWtEO0NBQ3pEdHFDLEdBQUcsRUFBRSxvQ0FBb0M7Q0FDekN1cUMsSUFBSSxFQUFFLHFDQUFxQztDQUMzQ0MsT0FBTyxFQUFFLDJDQUEyQztDQUNwREMsTUFBTSxFQUFFLDJDQUEyQztDQUNuREMsTUFBTSxFQUFFLGtDQUFrQztDQUMxQ3lFLFVBQVUsRUFBRSxnREFBZ0Q7Q0FDNUR4RSxPQUFPLEVBQUUsNENBQTRDO0NBQ3JEMkwsU0FBUyxFQUFFLHlEQUF5RDtDQUNwRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlEQUFpRCxDQUFDO0NBQ2pGc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbURBQW1ELENBQUM7Q0FDbkZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5REFBeUQsQ0FBQztDQUMzRnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxDQUFDO0NBQzNFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbURBQW1ELENBQUM7Q0FDN0V0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtREFBbUQ7QUFDN0UsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsd0JBQXdCO0NBQ2xDQyxNQUFNLEVBQUUsNkJBQTZCO0NBQ3JDOEIsS0FBSyxFQUFFLGdDQUFnQztDQUN2Q3RxQyxHQUFHLEVBQUUsNkJBQTZCO0NBQ2xDdXFDLElBQUksRUFBRSwrQkFBK0I7Q0FDckNDLE9BQU8sRUFBRSxxQ0FBcUM7Q0FDOUNDLE1BQU0sRUFBRSx3QkFBd0I7Q0FDaENDLE1BQU0sRUFBRSxrQ0FBa0M7Q0FDMUN5RSxVQUFVLEVBQUUsdUNBQXVDO0NBQ25EeEUsT0FBTyxFQUFFLHdDQUF3QztDQUNqRDJMLFNBQVMsRUFBRSw4Q0FBOEM7Q0FDekQxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxQ0FBcUMsQ0FBQztDQUNyRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFDQUFxQyxDQUFDO0NBQ3JFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdUNBQXVDLENBQUM7Q0FDekVwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5Q0FBeUMsQ0FBQztDQUNyRXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdEQUFnRCxDQUFDO0NBQzFFdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0RBQWdELENBQUM7Q0FDMUVodkMsSUFBSSxFQUFFeVQsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwrQkFBK0I7QUFDMUQsRUFBRSxDQUFDOzs7Ozs7QUNuQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUseUJBQXlCO0NBQ25DQyxNQUFNLEVBQUUseUJBQXlCO0NBQ2pDOEIsS0FBSyxFQUFFLGtDQUFrQztDQUN6Q3RxQyxHQUFHLEVBQUUsd0JBQXdCO0NBQzdCdXFDLElBQUksRUFBRSx5QkFBeUI7Q0FDL0JFLE1BQU0sRUFBRSxpQkFBaUI7Q0FDekJDLE1BQU0sRUFBRSxvQkFBb0I7Q0FDNUJ5RSxVQUFVLEVBQUUsc0NBQXNDO0NBQ2xEeEUsT0FBTyxFQUFFLCtCQUErQjtDQUN4Q3p4QyxJQUFJLEVBQUUsZ0RBQWdEO0NBQ3REcTlDLElBQUksRUFBRSx3Q0FBd0M7Q0FDOUNDLElBQUksRUFBRSx3Q0FBd0M7Q0FDOUNDLGtCQUFrQixHQUFHenVDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0NBQW9DLENBQUM7Q0FDOUUrUyxTQUFTLEVBQUUsaURBQWlEO0NBQzVEeGxFLE9BQU8sRUFBRSxpQkFBaUI7Q0FDMUI0bEUsV0FBVyxFQUFFLCtCQUErQjtDQUM1Q0MsWUFBWSxFQUFFLDRCQUE0QjtDQUMxQy9MLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDBCQUEwQixDQUFDO0NBQzFEc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkJBQTJCLENBQUM7Q0FDM0R1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx3Q0FBd0MsQ0FBQztDQUMxRXBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9DQUFvQyxDQUFDO0NBQ2hFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbUNBQW1DLENBQUM7Q0FDN0R0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQztDQUM5RHFULFFBQVEsRUFBRTV1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGtDQUFrQyxDQUFDO0NBQ2pFc1QsUUFBUSxHQUFHN3VDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsaUNBQWlDLENBQUM7Q0FDakVodkMsSUFBSSxFQUFFeVQsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0QkFBNEIsQ0FBQztDQUN2RHVULFVBQVUsRUFBRSx5REFBeUQ7Q0FDckVDLE9BQU8sRUFBRTtBQUNWLEVBQUUsQ0FBQzs7Ozs7O0FDN0JIL3VDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLGtDQUFrQztDQUM1Q3FDLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJDQUEyQyxDQUFDO0NBQzNFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsOENBQThDLENBQUM7Q0FDOUV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4REFBOEQsQ0FBQztDQUNoRytHLEtBQUssRUFBRSxrREFBa0Q7Q0FDekR0cUMsR0FBRyxFQUFFLHVDQUF1QztDQUM1Q3VxQyxJQUFJLEVBQUUseUNBQXlDO0NBQy9DRSxNQUFNLEVBQUUsa0NBQWtDO0NBQzFDQyxNQUFNLEVBQUUsa0NBQWtDO0NBQzFDQyxPQUFPLEVBQUUsdUNBQXVDO0NBQ2hEeE4sS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdURBQXVELENBQUM7Q0FDbkZ4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwREFBMEQsQ0FBQztDQUNwRnR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHlEQUF5RCxDQUFDO0NBQ25GNEwsVUFBVSxFQUFFLHVEQUF1RDtDQUNuRTNHLE1BQU0sRUFBRSxvQ0FBb0M7Q0FDNUNnQyxPQUFPLEVBQUUsc0RBQXNEO0NBQy9EajJDLElBQUksRUFBRXlULENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsOENBQThDLENBQUM7Q0FDekVzVCxRQUFRLEVBQUU3dUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwrQ0FBK0MsQ0FBQztDQUM5RXFULFFBQVEsRUFBRTV1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZDQUE2QyxDQUFDO0NBQzVFeVQsVUFBVSxFQUFFaHZDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0RBQW9ELENBQUM7Q0FDckZySyxNQUFNLEVBQUUsNkRBQTZEO0NBQ3JFK2QsWUFBWSxFQUFFLCtFQUErRTtDQUM3Ri9GLGFBQWEsRUFBRSwrQ0FBK0M7Q0FDOURnRyxtQkFBbUIsRUFBRSw4REFBOEQ7Q0FDbkZDLEdBQUcsRUFBRSw4Q0FBOEM7Q0FDbkRDLEtBQUssRUFBRSw4Q0FBOEM7Q0FDckRDLEtBQUssRUFBRSw4Q0FBOEM7Q0FDckRDLGVBQWUsRUFBRSx1REFBdUQ7Q0FDeEVDLFFBQVEsRUFBRSwyQ0FBMkM7Q0FDckRqQixTQUFTLEVBQUUsZ0VBQWdFO0NBQzNFbkYsYUFBYSxFQUFFLG1EQUFtRDtDQUNsRThDLElBQUksRUFBRSx3Q0FBd0M7Q0FDOUM4QyxPQUFPLEdBQUcsb0VBQW9FO0NBQzlFUixJQUFJLEVBQUUsZ0RBQWdEO0NBQ3REQyxJQUFJLEVBQUUsZ0RBQWdEO0NBQ3RERSxXQUFXLEVBQUUscUNBQXFDO0NBQ2xEYyxvQkFBb0IsRUFBRSx3REFBd0Q7Q0FDOUVDLFFBQVEsRUFBRSwrQ0FBK0M7Q0FDekRDLFFBQVEsRUFBRSwrQ0FBK0M7Q0FDekRDLE9BQU8sR0FBRyw2Q0FBNkM7Q0FDdkRDLEtBQUssRUFBRSw4Q0FBOEM7Q0FDckRDLEtBQUssRUFBRSw4Q0FBOEM7Q0FDckRDLEtBQUssRUFBRSw4Q0FBOEM7Q0FDckRoQixVQUFVLEVBQUUsNkVBQTZFO0NBQ3pGSCxZQUFZLEVBQUUseUJBQXlCO0NBQ3ZDN2xFLE9BQU8sRUFBRSxvQkFBb0I7Q0FDN0JpbkUsT0FBTyxFQUFFLGlEQUFpRDtDQUMxREMsUUFBUSxFQUFFLDJEQUEyRDtDQUNyRUMsT0FBTyxFQUFFLGlEQUFpRDtDQUMxREMsT0FBTyxFQUFFLGlEQUFpRDtDQUMxREMsWUFBWSxFQUFFLCtEQUErRDtDQUM3RUMsWUFBWSxFQUFFLDJEQUEyRDtDQUN6RUMsWUFBWSxFQUFFLDZEQUE2RDtDQUMzRUMsWUFBWSxFQUFFLGdFQUFnRTtDQUM5RUMsVUFBVSxFQUFFLDBEQUEwRDtDQUN0RTlCLGtCQUFrQixFQUFFenVDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscURBQXFELENBQUM7Q0FDOUZpVixvQkFBb0IsRUFBRXh3QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9GQUFvRixDQUFDO0NBQy9Ia1YsT0FBTyxFQUFFLG9EQUFvRDtDQUM3REMsaUJBQWlCLEVBQUUxd0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4Q0FBOEMsQ0FBQztDQUN0RnJxQyxJQUFJLEVBQUUsb0VBQW9FO0NBQzFFeS9DLE9BQU8sRUFBRSxnRUFBZ0U7Q0FDekVDLEtBQUssRUFBRSxrRUFBa0U7Q0FDekVDLFNBQVMsRUFBRSw4Q0FBOEM7Q0FDekRDLFFBQVEsRUFBRTtBQUNYLEVBQUUsQ0FBQzs7Ozs7O0FDakVIOXdDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLGtDQUFrQztDQUM1Q0MsTUFBTSxFQUFFLG1DQUFtQztDQUMzQzhCLEtBQUssRUFBRSwrQ0FBK0M7Q0FDdER0cUMsR0FBRyxFQUFFLG1DQUFtQztDQUN4Q3VxQyxJQUFJLEVBQUUsMENBQTBDO0NBQ2hEQyxPQUFPLEVBQUUsZ0RBQWdEO0NBQ3pEQyxNQUFNLEVBQUUsdUNBQXVDO0NBQy9DQyxNQUFNLEVBQUUsMENBQTBDO0NBQ2xEeUUsVUFBVSxFQUFFLHlEQUF5RDtDQUNyRXhFLE9BQU8sRUFBRSx1Q0FBdUM7Q0FDaEQyTCxTQUFTLEVBQUUsd0RBQXdEO0NBQ25FMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsOENBQThDLENBQUM7Q0FDOUVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnREFBZ0QsQ0FBQztDQUNoRnVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFFQUFxRSxDQUFDO0NBQ3ZHcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsaURBQWlELENBQUM7Q0FDN0V4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxzREFBc0QsQ0FBQztDQUNoRnR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVEQUF1RDtBQUNqRixFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSw0QkFBNEI7Q0FDdENDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDeEM4QixLQUFLLEVBQUUsb0RBQW9EO0NBQzNEdHFDLEdBQUcsRUFBRSxvQ0FBb0M7Q0FDekN1cUMsSUFBSSxFQUFFLHNDQUFzQztDQUM1Q0MsT0FBTyxFQUFFLDRDQUE0QztDQUNyREMsTUFBTSxFQUFFLHNDQUFzQztDQUM5Q0MsTUFBTSxFQUFFLGtDQUFrQztDQUMxQ3lFLFVBQVUsRUFBRSxpREFBaUQ7Q0FDN0R4RSxPQUFPLEVBQUUsNkNBQTZDO0NBQ3REMkwsU0FBUyxFQUFFLHlEQUF5RDtDQUNwRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdEQUFnRCxDQUFDO0NBQ2hGc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0RBQWtELENBQUM7Q0FDbEZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwREFBMEQsQ0FBQztDQUM1RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxDQUFDO0NBQzNFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbURBQW1ELENBQUM7Q0FDN0V0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtREFBbUQsQ0FBQztDQUM3RXNVLEtBQUssRUFBRSxtQ0FBbUM7Q0FDMUNELEtBQUssRUFBRSxtQ0FBbUM7Q0FDMUNSLEtBQUssRUFBRTtBQUNSLEVBQUUsQ0FBQzs7Ozs7OztBQ3BCSHB2QyxDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSw0QkFBNEI7Q0FDdENDLE1BQU0sRUFBRSxpQ0FBaUM7Q0FDekM4QixLQUFLLEVBQUUsb0RBQW9EO0NBQzNEdHFDLEdBQUcsRUFBRSxvQ0FBb0M7Q0FDekN1cUMsSUFBSSxFQUFFLHNDQUFzQztDQUM1Q0MsT0FBTyxFQUFFLDRDQUE0QztDQUNyREMsTUFBTSxFQUFFLDZDQUE2QztDQUNyREMsTUFBTSxFQUFFLGtDQUFrQztDQUMxQ3lFLFVBQVUsRUFBRSxpREFBaUQ7Q0FDN0R4RSxPQUFPLEVBQUUsNkNBQTZDO0NBQ3REMkwsU0FBUyxFQUFFLHlEQUF5RDtDQUNwRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdEQUFnRCxDQUFDO0NBQ2hGc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0RBQWtELENBQUM7Q0FDbEZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwREFBMEQsQ0FBQztDQUM1RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxDQUFDO0NBQzNFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbURBQW1ELENBQUM7Q0FDN0V0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtREFBbUQsQ0FBQztDQUM3RXNVLEtBQUssRUFBRSxtQ0FBbUM7Q0FDMUNELEtBQUssRUFBRSxtQ0FBbUM7Q0FDMUNSLEtBQUssRUFBRTtBQUNSLEVBQUUsQ0FBQzs7Ozs7OztBQ3JCSHB2QyxDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSw0QkFBNEI7Q0FDdENDLE1BQU0sRUFBRSw4QkFBOEI7Q0FDdEM4QixLQUFLLEVBQUUsa0RBQWtEO0NBQ3pEdHFDLEdBQUcsRUFBRSxvQ0FBb0M7Q0FDekN1cUMsSUFBSSxFQUFFLHNDQUFzQztDQUM1Q0MsT0FBTyxFQUFFLDRDQUE0QztDQUNyREMsTUFBTSxFQUFFLHNDQUFzQztDQUM5Q0MsTUFBTSxFQUFFLGtDQUFrQztDQUMxQ3lFLFVBQVUsRUFBRSxpREFBaUQ7Q0FDN0R4RSxPQUFPLEVBQUUsNkNBQTZDO0NBQ3REMkwsU0FBUyxFQUFFLDBEQUEwRDtDQUNyRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxDQUFDO0NBQy9Fc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsaURBQWlELENBQUM7Q0FDakZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwREFBMEQsQ0FBQztDQUM1RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxDQUFDO0NBQzNFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbURBQW1ELENBQUM7Q0FDN0V0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtREFBbUQsQ0FBQztDQUM3RXNVLEtBQUssRUFBRSxtQ0FBbUM7Q0FDMUNELEtBQUssRUFBRSxtQ0FBbUM7Q0FDMUNSLEtBQUssRUFBRTtBQUNSLEVBQUUsQ0FBQzs7Ozs7O0FDdEJIcHZDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLCtCQUErQjtDQUN6Q3FDLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJDQUEyQyxDQUFDO0NBQzNFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMENBQTBDLENBQUM7Q0FDMUV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0REFBNEQsQ0FBQztDQUM5RitHLEtBQUssRUFBRSw0Q0FBNEM7Q0FDbkR0cUMsR0FBRyxFQUFFLGdDQUFnQztDQUNyQ3VxQyxJQUFJLEVBQUUsb0NBQW9DO0NBQzFDQyxPQUFPLEVBQUUsaURBQWlEO0NBQzFEQyxNQUFNLEVBQUUsbUNBQW1DO0NBQzNDQyxNQUFNLEVBQUUsa0NBQWtDO0NBQzFDQyxPQUFPLEVBQUUsc0NBQXNDO0NBQy9DeE4sS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0RBQWtELENBQUM7Q0FDOUV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpRUFBaUUsQ0FBQztDQUMzRnR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdFQUFnRSxDQUFDO0NBQzFGNEwsVUFBVSxFQUFFO0FBQ2IsRUFBRSxDQUFDOzs7Ozs7QUNoQkhubkMsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsMkJBQTJCO0NBQ3JDQyxNQUFNLEVBQUUsMEJBQTBCO0NBQ2xDOEIsS0FBSyxFQUFFLDZDQUE2QztDQUNwRHRxQyxHQUFHLEVBQUUsbUNBQW1DO0NBQ3hDdXFDLElBQUksRUFBRSxvQ0FBb0M7Q0FDMUNDLE9BQU8sRUFBRSwwQ0FBMEM7Q0FDbkRDLE1BQU0sRUFBRSwyQ0FBMkM7Q0FDbkRDLE1BQU0sRUFBRSxrQ0FBa0M7Q0FDMUN5RSxVQUFVLEVBQUUsK0NBQStDO0NBQzNEeEUsT0FBTyxFQUFFLHNDQUFzQztDQUMvQzJMLFNBQVMsRUFBRSxxREFBcUQ7Q0FDaEUxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxrREFBa0QsQ0FBQztDQUNsRnNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG1EQUFtRCxDQUFDO0NBQ25GdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMERBQTBELENBQUM7Q0FDNUZwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnREFBZ0QsQ0FBQztDQUM1RXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG1EQUFtRCxDQUFDO0NBQzdFdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbURBQW1EO0FBQzdFLEVBQUUsQ0FBQzs7Ozs7O0FDbEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLDRCQUE0QjtDQUN0Q0MsTUFBTSxFQUFFLDhCQUE4QjtDQUN0QzhCLEtBQUssRUFBRSwrQkFBK0I7Q0FDdEN0cUMsR0FBRyxFQUFFLDJCQUEyQjtDQUNoQ3VxQyxJQUFJLEVBQUUsNEJBQTRCO0NBQ2xDd08sTUFBTSxFQUFFLCtCQUErQjtDQUN2Q3ZPLE9BQU8sRUFBRSxrQ0FBa0M7Q0FDM0NDLE1BQU0sRUFBRSwwQkFBMEI7Q0FDbENDLE1BQU0sRUFBRSwwQkFBMEI7Q0FDbEN5RSxVQUFVLEVBQUUsa0NBQWtDO0NBQzlDeEUsT0FBTyxFQUFFLDhCQUE4QjtDQUN2QzJMLFNBQVMsRUFBRSwwQkFBMEI7Q0FDckNXLFlBQVksRUFBRSx3Q0FBd0M7Q0FDdERyTSxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQztDQUNwRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG1DQUFtQyxDQUFDO0NBQ25FdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNENBQTRDLENBQUM7Q0FDOUVwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0Q0FBNEMsQ0FBQztDQUN4RXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFDQUFxQyxDQUFDO0NBQy9EdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0NBQXNDLENBQUM7Q0FDaEVxVCxRQUFRLEVBQUU1dUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpQ0FBaUMsQ0FBQztDQUNoRXNULFFBQVEsRUFBRTd1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGtDQUFrQztBQUNqRSxFQUFFLENBQUM7Ozs7OztBQ3RCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSwyQ0FBMkM7Q0FDckQrQixLQUFLLEVBQUUsbURBQW1EO0NBQzFEdHFDLEdBQUcsRUFBRSxtQ0FBbUM7Q0FDeEN1cUMsSUFBSSxFQUFFLDREQUE0RDtDQUNsRUMsT0FBTyxFQUFFLGdGQUFnRjtDQUN6RkMsTUFBTSxFQUFFLHVCQUF1QjtDQUMvQjBFLFVBQVUsRUFBRSxvREFBb0Q7Q0FDaEV6RSxNQUFNLEVBQUUsc0RBQXNEO0NBQzlEQyxPQUFPLEVBQUUsc0NBQXNDO0NBQy9DQyxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtRUFBbUUsQ0FBQztDQUNuR3NILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZDQUE2QyxDQUFDO0NBQzdFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdUZBQXVGLENBQUM7Q0FDekhwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx3REFBd0QsQ0FBQztDQUNwRnh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHdEQUF3RCxDQUFDO0NBQ2xGdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsOERBQThEO0FBQ3hGLEVBQUUsQ0FBQzs7Ozs7O0FDaEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLDJCQUEyQjtDQUNyQ0MsTUFBTSxFQUFFLDZCQUE2QjtDQUNyQzhCLEtBQUssRUFBRSxtREFBbUQ7Q0FDMUR0cUMsR0FBRyxFQUFFLDBDQUEwQztDQUMvQ3VxQyxJQUFJLEVBQUUsbUNBQW1DO0NBQ3pDQyxPQUFPLEVBQUUseUNBQXlDO0NBQ2xEQyxNQUFNLEVBQUUsb0NBQW9DO0NBQzVDQyxNQUFNLEVBQUUsMENBQTBDO0NBQ2xEeUUsVUFBVSxFQUFFLHVEQUF1RDtDQUNuRXhFLE9BQU8sRUFBRSx5Q0FBeUM7Q0FDbERtTSxVQUFVLEVBQUUscUZBQXFGO0NBQ2pHUixTQUFTLEVBQUUsd0RBQXdEO0NBQ25FMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkNBQTJDLENBQUM7Q0FDM0VzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0Q0FBNEMsQ0FBQztDQUM1RXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHdFQUF3RSxDQUFDO0NBQzFHcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0RBQWdELENBQUM7Q0FDNUV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5REFBeUQsQ0FBQztDQUNuRnR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHlEQUF5RCxDQUFDO0NBQ25GaHZDLElBQUksRUFBRXlULENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0NBQStDLENBQUM7Q0FDMUVzVCxRQUFRLEVBQUU3dUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxQ0FBcUMsQ0FBQztDQUNwRXFULFFBQVEsRUFBRTV1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHNDQUFzQyxDQUFDO0NBQ3JFeVQsVUFBVSxFQUFFaHZDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMENBQTBDLENBQUM7Q0FDM0VpVSxvQkFBb0IsRUFBRSxzRUFBc0U7Q0FDNUZQLFlBQVksRUFBRSwwRUFBMEU7Q0FDeEZQLFdBQVcsRUFBRSx5Q0FBeUM7Q0FDdERDLFlBQVksRUFBRSw0Q0FBNEM7Q0FDMURtQyxRQUFRLEVBQUUsa0VBQWtFO0NBQzVFL0IsT0FBTyxFQUFFLG9FQUFvRTtDQUM3RTZCLEtBQUssRUFBRSxnRUFBZ0U7Q0FDdkVJLE9BQU8sRUFBRSxtQ0FBbUM7Q0FDNUM5L0MsSUFBSSxFQUFFLHlEQUF5RDtDQUMvRGcvQyxPQUFPLEVBQUUsaURBQWlEO0NBQzFERCxPQUFPLEVBQUUsaURBQWlEO0NBQzFEUCxRQUFRLEVBQUUsd0RBQXdEO0NBQ2xFZ0IsaUJBQWlCLEVBQUUxd0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0Q0FBNEMsQ0FBQztDQUNwRjBWLE1BQU0sRUFBRSxtREFBbUQ7Q0FDM0RDLElBQUksRUFBRSwwQ0FBMEM7Q0FDaEQ1QixlQUFlLEVBQUUsdURBQXVEO0NBQ3hFZixJQUFJLEVBQUUsNENBQTRDO0NBQ2xEQyxJQUFJLEVBQUUsNENBQTRDO0NBQ2xEQyxrQkFBa0IsRUFBRXp1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxDQUFDO0NBQ3hGc1UsS0FBSyxFQUFFLHdDQUF3QztDQUMvQ0QsS0FBSyxFQUFFLHdDQUF3QztDQUMvQ1IsS0FBSyxFQUFFLHdDQUF3QztDQUMvQ2dCLFlBQVksRUFBRTtBQUNmLEVBQUUsQ0FBQzs7Ozs7OztBQzdDSHB3QyxDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxzQkFBc0I7Q0FDaENDLE1BQU0sRUFBRSxtQkFBbUI7Q0FDM0I4QixLQUFLLEVBQUUsa0NBQWtDO0NBQ3pDdHFDLEdBQUcsRUFBRSxrQ0FBa0M7Q0FDdkN1cUMsSUFBSSxFQUFFLGdDQUFnQztDQUN0Q0MsT0FBTyxFQUFFLHdDQUF3QztDQUNqREMsTUFBTSxFQUFFLDBCQUEwQjtDQUNsQ0MsTUFBTSxFQUFFLDRCQUE0QjtDQUNwQ3lFLFVBQVUsRUFBRSwrQ0FBK0M7Q0FDM0R4RSxPQUFPLEVBQUUscUNBQXFDO0NBQzlDQyxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQztDQUM3RXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlDQUFpQyxDQUFDO0NBQ2pFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNERBQTRELENBQUM7Q0FDOUZwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQztDQUM5RHh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVEQUF1RCxDQUFDO0NBQ2pGdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0RBQW9EO0FBQzlFLEVBQUUsQ0FBQzs7Ozs7O0FDbEJILEVBQUUsUUFBUSxFQUFFdjdCLEVBQUUsRUFBRTtDQUNmQSxDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0VBQy9Cd25CLFFBQVEsRUFBRSwyQkFBMkI7RUFDckNDLE1BQU0sRUFBRSw4QkFBOEI7RUFDdEM4QixLQUFLLEVBQUUscURBQXFEO0VBQzVEdHFDLEdBQUcsRUFBRSxxQ0FBcUM7RUFDMUN1cUMsSUFBSSxFQUFFLHNDQUFzQztFQUM1Q0MsT0FBTyxFQUFFLDRDQUE0QztFQUNyREMsTUFBTSxFQUFFLHNDQUFzQztFQUM5Q0MsTUFBTSxFQUFFLGdDQUFnQztFQUN4Q3lFLFVBQVUsRUFBRSxpREFBaUQ7RUFDN0R4RSxPQUFPLEVBQUUsMkNBQTJDO0VBQ3BEMkwsU0FBUyxFQUFFLHVEQUF1RDtFQUNsRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGtEQUFrRCxDQUFDO0VBQ2xGc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbURBQW1ELENBQUM7RUFDbkZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwREFBMEQsQ0FBQztFQUM1RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQyxDQUFDO0VBQzNFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0RBQW9ELENBQUM7RUFDOUV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvREFBb0QsQ0FBQztFQUM5RXNVLEtBQUssRUFBRSxtQ0FBbUM7RUFDMUNELEtBQUssRUFBRSxtQ0FBbUM7RUFDMUNSLEtBQUssRUFBRTtDQUNSLEVBQUUsQ0FBQztBQUNKLENBQUMsRUFBRTkxRSxPQUFPLEVBQUUsQ0FBQzs7Ozs7O0FDdkJiMG1DLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLHdCQUF3QjtDQUNsQ0MsTUFBTSxFQUFFLGdCQUFnQjtDQUN4QjhCLEtBQUssRUFBRSw0QkFBNEI7Q0FDbkN0cUMsR0FBRyxFQUFFLDZCQUE2QjtDQUNsQ3VxQyxJQUFJLEVBQUUsb0JBQW9CO0NBQzFCQyxPQUFPLEVBQUUsMEJBQTBCO0NBQ25DQyxNQUFNLEVBQUUsY0FBYztDQUN0QkMsTUFBTSxFQUFFLG1CQUFtQjtDQUMzQnlFLFVBQVUsRUFBRSwrQkFBK0I7Q0FDM0N4RSxPQUFPLEVBQUUseUJBQXlCO0NBQ2xDMkwsU0FBUyxFQUFFLDRCQUE0QjtDQUN2QzFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdDQUFnQyxDQUFDO0NBQ2hFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMEJBQTBCLENBQUM7Q0FDMUR1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQztDQUNyRXBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZCQUE2QixDQUFDO0NBQ3pEeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsaUNBQWlDLENBQUM7Q0FDM0R0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxrQ0FBa0M7QUFDNUQsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsd0JBQXdCO0NBQ2xDQyxNQUFNLEVBQUUsNEJBQTRCO0NBQ3BDOEIsS0FBSyxFQUFFLGlDQUFpQztDQUN4Q3RxQyxHQUFHLEVBQUUsdUJBQXVCO0NBQzVCdXFDLElBQUksRUFBRSx5QkFBeUI7Q0FDL0JDLE9BQU8sRUFBRSwrQkFBK0I7Q0FDeENDLE1BQU0sRUFBRSx3QkFBd0I7Q0FDaENDLE1BQU0sRUFBRSx1QkFBdUI7Q0FDL0J5RSxVQUFVLEVBQUUseUNBQXlDO0NBQ3JEeEUsT0FBTyxFQUFFLGlDQUFpQztDQUMxQzJMLFNBQVMsRUFBRSw4Q0FBOEM7Q0FDekQxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQztDQUNuRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGtDQUFrQyxDQUFDO0NBQ2xFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0NBQStDLENBQUM7Q0FDakZwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx1Q0FBdUMsQ0FBQztDQUNuRXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDRDQUE0QyxDQUFDO0NBQ3RFdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkNBQTJDO0FBQ3JFLEVBQUUsQ0FBQzs7Ozs7O0FDbEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLG1CQUFtQjtDQUM3QnFDLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHlDQUF5QyxDQUFDO0NBQ3pFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdUNBQXVDLENBQUM7Q0FDdkV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5REFBeUQsQ0FBQztDQUMzRitHLEtBQUssRUFBRSxxQ0FBcUM7Q0FDNUN0cUMsR0FBRyxFQUFFLCtCQUErQjtDQUNwQ3VxQyxJQUFJLEVBQUUsdUJBQXVCO0NBQzdCRSxNQUFNLEVBQUUsc0JBQXNCO0NBQzlCQyxNQUFNLEVBQUUsMkJBQTJCO0NBQ25DQyxPQUFPLEVBQUUsbUNBQW1DO0NBQzVDeE4sS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsOEJBQThCLENBQUM7Q0FDMUR4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwrQkFBK0IsQ0FBQztDQUN6RHR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhCQUE4QixDQUFDO0NBQ3hENEwsVUFBVSxFQUFFLDBDQUEwQztDQUN0RDNHLE1BQU0sRUFBRSwrQkFBK0I7Q0FDdkNnQyxPQUFPLEVBQUUsNENBQTRDO0NBQ3JEajJDLElBQUksRUFBRXlULENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUNBQXFDO0FBQ2hFLEVBQUUsQ0FBQzs7Ozs7O0FDbEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLHVCQUF1QjtDQUNqQ0MsTUFBTSxFQUFFLHVCQUF1QjtDQUMvQjhCLEtBQUssRUFBRSwwQ0FBMEM7Q0FDakR0cUMsR0FBRyxFQUFFLHFCQUFxQjtDQUMxQnVxQyxJQUFJLEVBQUUseUJBQXlCO0NBQy9CQyxPQUFPLEVBQUUsdUNBQXVDO0NBQ2hEQyxNQUFNLEVBQUUsZUFBZTtDQUN2QkMsTUFBTSxFQUFFLHNCQUFzQjtDQUM5QnlFLFVBQVUsRUFBRSxxQ0FBcUM7Q0FDakR4RSxPQUFPLEVBQUUsdUNBQXVDO0NBQ2hEMkwsU0FBUyxFQUFFLDhCQUE4QjtDQUN6QzFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdDQUFnQyxDQUFDO0NBQ2hFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsaUNBQWlDLENBQUM7Q0FDakV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwQ0FBMEMsQ0FBQztDQUM1RXBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVDQUF1QyxDQUFDO0NBQ25FeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0NBQStDLENBQUM7Q0FDekV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4Q0FBOEM7QUFDeEUsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsdUJBQXVCO0NBQ2pDQyxNQUFNLEVBQUUsMkJBQTJCO0NBQ25DOEIsS0FBSyxFQUFFLDJDQUEyQztDQUNsRHRxQyxHQUFHLEVBQUUseUNBQXlDO0NBQzlDdXFDLElBQUksRUFBRSw2Q0FBNkM7Q0FDbkRDLE9BQU8sRUFBRSxrREFBa0Q7Q0FDM0RDLE1BQU0sRUFBRSxvQ0FBb0M7Q0FDNUNDLE1BQU0sRUFBRSwyQkFBMkI7Q0FDbkN5RSxVQUFVLEVBQUUsZ0RBQWdEO0NBQzVEeEUsT0FBTyxFQUFFLGlEQUFpRDtDQUMxREMsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUNBQXFDLENBQUM7Q0FDckVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx3Q0FBd0MsQ0FBQztDQUN4RXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZEQUE2RCxDQUFDO0NBQy9GcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkNBQTJDLENBQUM7Q0FDdkV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5REFBeUQsQ0FBQztDQUNuRnR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHlEQUF5RDtBQUNuRixFQUFFLENBQUM7Ozs7OztBQ2pCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSwrQkFBK0I7Q0FDekNDLE1BQU0sRUFBRSxxQkFBcUI7Q0FDN0JvQyxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0QkFBNEIsQ0FBQztDQUM1RHNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhCQUE4QixDQUFDO0NBQzlEdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMENBQTBDLENBQUM7Q0FDNUUrRyxLQUFLLEVBQUUseUJBQXlCO0NBQ2hDdHFDLEdBQUcsRUFBRSwwQkFBMEI7Q0FDL0J1cUMsSUFBSSxFQUFFLDhCQUE4QjtDQUNwQ0UsTUFBTSxFQUFFLGlCQUFpQjtDQUN6QkMsTUFBTSxFQUFFLCtCQUErQjtDQUN2Q0MsT0FBTyxFQUFFLDZCQUE2QjtDQUN0Q3hOLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9DQUFvQyxDQUFDO0NBQ2hFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0RBQW9ELENBQUM7Q0FDOUV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxREFBcUQsQ0FBQztDQUMvRTRMLFVBQVUsRUFBRTtBQUNiLEVBQUUsQ0FBQzs7Ozs7O0FDaEJIbm5DLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLG9CQUFvQjtDQUM5QkMsTUFBTSxFQUFFLHdCQUF3QjtDQUNoQzhCLEtBQUssRUFBRSxxQ0FBcUM7Q0FDNUN0cUMsR0FBRyxFQUFFLG1DQUFtQztDQUN4Q3VxQyxJQUFJLEVBQUUsMkJBQTJCO0NBQ2pDQyxPQUFPLEVBQUUsaUNBQWlDO0NBQzFDQyxNQUFNLEVBQUUsNEJBQTRCO0NBQ3BDQyxNQUFNLEVBQUUsdUJBQXVCO0NBQy9CeUUsVUFBVSxFQUFFLGdEQUFnRDtDQUM1RHhFLE9BQU8sRUFBRSwyQkFBMkI7Q0FDcEMyTCxTQUFTLEVBQUUsbURBQW1EO0NBQzlEMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkNBQTJDLENBQUM7Q0FDM0VzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpQ0FBaUMsQ0FBQztDQUNqRXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVEQUF1RCxDQUFDO0NBQ3pGcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNkNBQTZDLENBQUM7Q0FDekV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0Q0FBNEMsQ0FBQztDQUN0RXR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhDQUE4QyxDQUFDO0NBQ3hFc1UsS0FBSyxFQUFFLHlCQUF5QjtDQUNoQ0QsS0FBSyxFQUFFLHlCQUF5QjtDQUNoQ1IsS0FBSyxFQUFFLHlCQUF5QjtDQUNoQ0csUUFBUSxFQUFFO0FBQ1gsRUFBRSxDQUFDOzs7Ozs7QUN0Qkh2dkMsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsZUFBZTtDQUN6QkMsTUFBTSxFQUFFLG1CQUFtQjtDQUMzQjhCLEtBQUssRUFBRSx1QkFBdUI7Q0FDOUJ0cUMsR0FBRyxFQUFFLGtCQUFrQjtDQUN2QnVxQyxJQUFJLEVBQUUsaUJBQWlCO0NBQ3ZCQyxPQUFPLEVBQUUsc0JBQXNCO0NBQy9CQyxNQUFNLEVBQUUsaUJBQWlCO0NBQ3pCQyxNQUFNLEVBQUUsZ0JBQWdCO0NBQ3hCeUUsVUFBVSxFQUFFLHlCQUF5QjtDQUNyQ3hFLE9BQU8sRUFBRSxtQkFBbUI7Q0FDNUIyTCxTQUFTLEVBQUUsc0JBQXNCO0NBQ2pDMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUJBQXFCLENBQUM7Q0FDckRzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxQkFBcUIsQ0FBQztDQUNyRHVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdDQUFnQyxDQUFDO0NBQ2xFcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNEJBQTRCLENBQUM7Q0FDeERodkMsSUFBSSxFQUFFeVQsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvQkFBb0IsQ0FBQztDQUMvQ3h4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFCQUFxQixDQUFDO0NBQy9DdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUJBQXFCO0FBQy9DLEVBQUUsQ0FBQzs7Ozs7O0FDbkJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLCtCQUErQjtDQUN6Q0MsTUFBTSxFQUFFLG9DQUFvQztDQUM1QzhCLEtBQUssRUFBRSxnREFBZ0Q7Q0FDdkR0cUMsR0FBRyxFQUFFLGdDQUFnQztDQUNyQ3VxQyxJQUFJLEVBQUUsbUNBQW1DO0NBQ3pDQyxPQUFPLEVBQUUsZ0RBQWdEO0NBQ3pEQyxNQUFNLEVBQUUsd0JBQXdCO0NBQ2hDQyxNQUFNLEVBQUUsaUNBQWlDO0NBQ3pDeUUsVUFBVSxFQUFFLHFEQUFxRDtDQUNqRXhFLE9BQU8sRUFBRSxtREFBbUQ7Q0FDNUQyTCxTQUFTLEVBQUUsNkNBQTZDO0NBQ3hEMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0NBQW9DLENBQUM7Q0FDcEVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQztDQUM3RXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJEQUEyRCxDQUFDO0NBQzdGcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMENBQTBDLENBQUM7Q0FDdEV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwREFBMEQsQ0FBQztDQUNwRnR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVEQUF1RDtBQUNqRixFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSx1Q0FBdUM7Q0FDakRDLE1BQU0sRUFBRSxxQ0FBcUM7Q0FDN0M4QixLQUFLLEVBQUUsb0RBQW9EO0NBQzNEdHFDLEdBQUcsRUFBRSxxQ0FBcUM7Q0FDMUN1cUMsSUFBSSxFQUFFLHFDQUFxQztDQUMzQ0MsT0FBTyxFQUFFLDREQUE0RDtDQUNyRUMsTUFBTSxFQUFFLDhCQUE4QjtDQUN0Q0MsTUFBTSxFQUFFLDBDQUEwQztDQUNsRHlFLFVBQVUsRUFBRSx1REFBdUQ7Q0FDbkV4RSxPQUFPLEVBQUUsd0NBQXdDO0NBQ2pEMkwsU0FBUyxFQUFFLG1DQUFtQztDQUM5QzFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVDQUF1QyxDQUFDO0NBQ3ZFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0NBQXNDLENBQUM7Q0FDdEV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvREFBb0QsQ0FBQztDQUN0RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9GQUFvRixDQUFDO0NBQ2hIeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0RBQWdELENBQUM7Q0FDMUV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxrREFBa0Q7QUFDNUUsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsV0FBVztDQUNyQkMsTUFBTSxFQUFFLFlBQVk7Q0FDcEI4QixLQUFLLEVBQUUsc0JBQXNCO0NBQzdCdHFDLEdBQUcsRUFBRSxpQkFBaUI7Q0FDdEJ1cUMsSUFBSSxFQUFFLGdCQUFnQjtDQUN0QkMsT0FBTyxFQUFFLHFCQUFxQjtDQUM5QkMsTUFBTSxFQUFFLGVBQWU7Q0FDdkJDLE1BQU0sRUFBRSxlQUFlO0NBQ3ZCeUUsVUFBVSxFQUFFLG9CQUFvQjtDQUNoQ3hFLE9BQU8sRUFBRSxpQkFBaUI7Q0FDMUIyTCxTQUFTLEVBQUUsZ0JBQWdCO0NBQzNCMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0JBQW9CLENBQUM7Q0FDcERzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpQkFBaUIsQ0FBQztDQUNqRHVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGtDQUFrQyxDQUFDO0NBQ3BFcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkJBQTJCLENBQUM7Q0FDdkR4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvQkFBb0IsQ0FBQztDQUM5Q3R2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9CQUFvQjtBQUM5QyxFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSw0QkFBNEI7Q0FDdENDLE1BQU0sRUFBRSw0QkFBNEI7Q0FDcEM4QixLQUFLLEVBQUUsbURBQW1EO0NBQzFEdHFDLEdBQUcsRUFBRSw2QkFBNkI7Q0FDbEN1cUMsSUFBSSxFQUFFLDhCQUE4QjtDQUNwQ0MsT0FBTyxFQUFFLG9DQUFvQztDQUM3Q0MsTUFBTSxFQUFFLGlDQUFpQztDQUN6Q0MsTUFBTSxFQUFFLGdDQUFnQztDQUN4Q3lFLFVBQVUsRUFBRSxvREFBb0Q7Q0FDaEV4RSxPQUFPLEVBQUUsMkNBQTJDO0NBQ3BEMkwsU0FBUyxFQUFFLDZDQUE2QztDQUN4RDFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhDQUE4QyxDQUFDO0NBQzlFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0NBQW9DLENBQUM7Q0FDcEV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnRUFBZ0UsQ0FBQztDQUNsR3BHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG1EQUFtRCxDQUFDO0NBQy9FeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0RBQWdELENBQUM7Q0FDMUV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnREFBZ0Q7QUFDMUUsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsd0JBQXdCO0NBQ2xDQyxNQUFNLEVBQUUsNkJBQTZCO0NBQ3JDOEIsS0FBSyxFQUFFLHdDQUF3QztDQUMvQ3RxQyxHQUFHLEVBQUUsb0NBQW9DO0NBQ3pDdXFDLElBQUksRUFBRSxnQ0FBZ0M7Q0FDdENDLE9BQU8sRUFBRSxzQ0FBc0M7Q0FDL0NDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDeENDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDeEN5RSxVQUFVLEVBQUUsNkNBQTZDO0NBQ3pEeEUsT0FBTyxFQUFFLGtDQUFrQztDQUMzQzJMLFNBQVMsRUFBRSxrREFBa0Q7Q0FDN0QxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwrQ0FBK0MsQ0FBQztDQUMvRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHlDQUF5QyxDQUFDO0NBQ3pFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMENBQTBDLENBQUM7Q0FDNUVwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyQ0FBMkMsQ0FBQztDQUN2RXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhEQUE4RCxDQUFDO0NBQ3hGdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0RBQStEO0FBQ3pGLEVBQUUsQ0FBQzs7Ozs7O0FDbEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLHdCQUF3QjtDQUNsQ0MsTUFBTSxFQUFFLHVCQUF1QjtDQUMvQjhCLEtBQUssRUFBRSxnQ0FBZ0M7Q0FDdkN0cUMsR0FBRyxFQUFFLHVCQUF1QjtDQUM1QnVxQyxJQUFJLEVBQUUsd0JBQXdCO0NBQzlCQyxPQUFPLEVBQUUsK0JBQStCO0NBQ3hDQyxNQUFNLEVBQUUsd0JBQXdCO0NBQ2hDQyxNQUFNLEVBQUUsc0JBQXNCO0NBQzlCeUUsVUFBVSxFQUFFLCtDQUErQztDQUMzRHhFLE9BQU8sRUFBRSxzQ0FBc0M7Q0FDL0MyTCxTQUFTLEVBQUUsMkNBQTJDO0NBQ3REMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0NBQWdDLENBQUM7Q0FDaEVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyQkFBMkIsQ0FBQztDQUMzRHVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHNEQUFzRCxDQUFDO0NBQ3hGcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUNBQXFDLENBQUM7Q0FDakV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4Q0FBOEMsQ0FBQztDQUN4RXR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtDQUErQztBQUN6RSxFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSx1QkFBdUI7Q0FDakNDLE1BQU0sRUFBRSwwQkFBMEI7Q0FDbEM4QixLQUFLLEVBQUUsdUNBQXVDO0NBQzlDdHFDLEdBQUcsRUFBRSwrQkFBK0I7Q0FDcEN1cUMsSUFBSSxFQUFFLGtDQUFrQztDQUN4Q0MsT0FBTyxFQUFFLHVDQUF1QztDQUNoREMsTUFBTSxFQUFFLGtDQUFrQztDQUMxQ0MsTUFBTSxFQUFFLG1DQUFtQztDQUMzQ3lFLFVBQVUsRUFBRSw2Q0FBNkM7Q0FDekR4RSxPQUFPLEVBQUUsdUNBQXVDO0NBQ2hEMkwsU0FBUyxFQUFFLDBDQUEwQztDQUNyRDFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZDQUE2QyxDQUFDO0NBQzdFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0NBQStDLENBQUM7Q0FDL0V1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtREFBbUQsQ0FBQztDQUNyRnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlEQUFpRCxDQUFDO0NBQzdFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsd0RBQXdELENBQUM7Q0FDbEZ0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx1REFBdUQ7QUFDakYsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsNEJBQTRCO0NBQ3RDQyxNQUFNLEVBQUUsc0JBQXNCO0NBQzlCOEIsS0FBSyxFQUFFLHFDQUFxQztDQUM1Q3RxQyxHQUFHLEVBQUUsOEJBQThCO0NBQ25DdXFDLElBQUksRUFBRSxnQ0FBZ0M7Q0FDdENDLE9BQU8sRUFBRSw4Q0FBOEM7Q0FDdkRDLE1BQU0sRUFBRSwrQkFBK0I7Q0FDdkNDLE1BQU0sRUFBRSw4QkFBOEI7Q0FDdEN5RSxVQUFVLEVBQUUsMENBQTBDO0NBQ3REeEUsT0FBTyxFQUFFLDhCQUE4QjtDQUN2QzJMLFNBQVMsRUFBRSxrREFBa0Q7Q0FDN0QxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQztDQUNuRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG1DQUFtQyxDQUFDO0NBQ25FdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0VBQWtFLENBQUM7Q0FDcEdwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyREFBMkQsQ0FBQztDQUN2Rnh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHdEQUF3RCxDQUFDO0NBQ2xGdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdURBQXVELENBQUM7Q0FDakZodkMsSUFBSSxFQUFFeVQsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQzs7O0NBRy9EMFEsSUFBSSxFQUFFLDhCQUE4QjtDQUNwQ2tGLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDeENwQixPQUFPLEVBQUUsbURBQW1EO0NBQzVETixRQUFRLEVBQUUsMERBQTBEO0NBQ3BFYSxZQUFZLEVBQUUsbUNBQW1DO0NBQ2pEcEgsYUFBYSxFQUFFLDRDQUE0QztDQUMzREMsYUFBYSxFQUFFLG9DQUFvQztDQUNuRCtGLG1CQUFtQixFQUFFO0FBQ3RCLEVBQUUsQ0FBQzs7Ozs7O0FDN0JIbHZDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLGdCQUFnQjtDQUMxQkMsTUFBTSxFQUFFLGdCQUFnQjtDQUN4QjhCLEtBQUssRUFBRSw4QkFBOEI7Q0FDckN0cUMsR0FBRyxFQUFFLHFCQUFxQjtDQUMxQnVxQyxJQUFJLEVBQUUsc0JBQXNCO0NBQzVCQyxPQUFPLEVBQUUsMkRBQTJEO0NBQ3BFQyxNQUFNLEVBQUUsc0JBQXNCO0NBQzlCQyxNQUFNLEVBQUUsaUJBQWlCO0NBQ3pCQyxPQUFPLEVBQUUsMEJBQTBCO0NBQ25DQyxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxzQkFBc0IsQ0FBQztDQUN0RHNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9CQUFvQixDQUFDO0NBQ3BEdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUseUNBQXlDLENBQUM7Q0FDM0VwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQztDQUMvRHh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZDQUE2QyxDQUFDO0NBQ3ZFdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0RBQW9ELENBQUM7Q0FDOUVodkMsSUFBSSxFQUFFeVQsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0QkFBNEIsQ0FBQztDQUN2RDRMLFVBQVUsRUFBRTtBQUNiLEVBQUUsQ0FBQzs7Ozs7O0FDbEJIbm5DLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLHdCQUF3QjtDQUNsQ0MsTUFBTSxFQUFFLGlDQUFpQztDQUN6QzhCLEtBQUssRUFBRSw2Q0FBNkM7Q0FDcER0cUMsR0FBRyxFQUFFLG9DQUFvQztDQUN6Q3VxQyxJQUFJLEVBQUUsb0NBQW9DO0NBQzFDQyxPQUFPLEVBQUUsMENBQTBDO0NBQ25EQyxNQUFNLEVBQUUsc0NBQXNDO0NBQzlDQyxNQUFNLEVBQUUsK0JBQStCO0NBQ3ZDeUUsVUFBVSxFQUFFLGdEQUFnRDtDQUM1RHhFLE9BQU8sRUFBRSwrQ0FBK0M7Q0FDeEQyTCxTQUFTLEVBQUUsd0RBQXdEO0NBQ25Fd0IsS0FBSyxFQUFFLDJDQUEyQztDQUNsRHNCLE9BQU8sRUFBRSwrQ0FBK0M7Q0FDeER4TyxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4Q0FBOEMsQ0FBQztDQUM5RXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDRDQUE0QyxDQUFDO0NBQzVFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNkRBQTZELENBQUM7Q0FDL0ZwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx3REFBd0QsQ0FBQztDQUNwRnh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVEQUF1RCxDQUFDO0NBQ2pGdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0RBQXNELENBQUM7Q0FDaEZ6eUQsT0FBTyxFQUFFazNCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbUNBQW1DO0FBQ2pFLEVBQUUsQ0FBQzs7Ozs7OztBQ3BCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFOzs7Q0FHL0J3bkIsUUFBUSxFQUFFLGdDQUFnQztDQUMxQ0MsTUFBTSxFQUFFLGdDQUFnQztDQUN4QzhCLEtBQUssRUFBRSxzRUFBc0U7Q0FDN0V0cUMsR0FBRyxFQUFFLGtEQUFrRDtDQUN2RHVxQyxJQUFJLEVBQUUsbURBQW1EO0NBQ3pEQyxPQUFPLEVBQUUseURBQXlEO0NBQ2xFQyxNQUFNLEVBQUUsMkRBQTJEO0NBQ25FQyxNQUFNLEVBQUUsbURBQW1EO0NBQzNEeUUsVUFBVSxFQUFFLDZFQUE2RTtDQUN6RnhFLE9BQU8sRUFBRSxvREFBb0Q7Q0FDN0RDLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdFQUFnRSxDQUFDO0NBQ2hHc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscURBQXFELENBQUM7Q0FDckZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnRkFBZ0YsQ0FBQztDQUNsSHBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHNEQUFzRCxDQUFDO0NBQ2xGeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkRBQTJELENBQUM7Q0FDckZ0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyREFBMkQsQ0FBQztDQUNyRmh2QyxJQUFJLEVBQUV5VCxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZEQUE2RCxDQUFDOzs7Q0FHeEZzVCxRQUFRLEVBQUU3dUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx1REFBdUQsQ0FBQztDQUN0RnFULFFBQVEsRUFBRTV1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFEQUFxRCxDQUFDO0NBQ3BGeVQsVUFBVSxFQUFFaHZDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0RBQXNELENBQUM7Q0FDdkZySyxNQUFNLEVBQUUsa0RBQWtEO0NBQzFEK2QsWUFBWSxFQUFFLDZFQUE2RTtDQUMzRi9GLGFBQWEsRUFBRSx3RkFBd0Y7Q0FDdkdnRyxtQkFBbUIsRUFBRSw2RUFBNkU7Q0FDbEdDLEdBQUcsRUFBRSwrREFBK0Q7Q0FDcEVDLEtBQUssRUFBRSwrREFBK0Q7Q0FDdEVFLGVBQWUsRUFBRSw4RkFBOEY7Q0FDL0dDLFFBQVEsRUFBRSxvREFBb0Q7Q0FDOUR3QixNQUFNLEVBQUUsNkNBQTZDO0NBQ3JEQyxPQUFPLEVBQUUsNkNBQTZDO0NBQ3RERyxNQUFNLEVBQUUsNkNBQTZDO0NBQ3JEN0MsU0FBUyxFQUFFLDJFQUEyRTtDQUN0Rm5GLGFBQWEsRUFBRSw2RUFBNkU7Q0FDNUY4QyxJQUFJLEVBQUUsZ0VBQWdFO0NBQ3RFOEMsT0FBTyxFQUFFLGdFQUFnRTtDQUN6RVIsSUFBSSxFQUFFLGtEQUFrRDtDQUN4REMsSUFBSSxFQUFFLGtEQUFrRDtDQUN4REUsV0FBVyxFQUFFLDhDQUE4QztDQUMzRGMsb0JBQW9CLEVBQUUsK0RBQStEO0NBQ3JGQyxRQUFRLEVBQUUseUVBQXlFO0NBQ25GQyxRQUFRLEVBQUUseUVBQXlFO0NBQ25GRSxLQUFLLEVBQUUsaURBQWlEO0NBQ3hEQyxLQUFLLEVBQUUsaURBQWlEO0NBQ3hEbEIsWUFBWSxFQUFFLHlEQUF5RDtDQUN2RTdsRSxPQUFPLEVBQUUsK0NBQStDO0NBQ3hEaW5FLE9BQU8sRUFBRSx1RUFBdUU7Q0FDaEZFLE9BQU8sRUFBRSx1RUFBdUU7Q0FDaEZDLE9BQU8sRUFBRSx1RUFBdUU7Q0FDaEZGLFFBQVEsRUFBRSx1RUFBdUU7Q0FDakZJLFlBQVksRUFBRSxtRkFBbUY7Q0FDakdDLFlBQVksRUFBRSxtRkFBbUY7Q0FDakdDLFlBQVksRUFBRSxtRkFBbUY7Q0FDakdDLFVBQVUsRUFBRSxtRkFBbUY7Q0FDL0ZKLFlBQVksRUFBRSxpREFBaUQ7Q0FDL0QxQixrQkFBa0IsRUFBRXp1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDBEQUEwRCxDQUFDO0NBQ25HaVYsb0JBQW9CLEVBQUV4d0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpRkFBaUYsQ0FBQztDQUM1SGtWLE9BQU8sRUFBRSxvREFBb0Q7Q0FDN0RDLGlCQUFpQixFQUFFMXdDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdURBQXVELENBQUM7Q0FDL0ZycUMsSUFBSSxFQUFFLDJGQUEyRjtDQUNqR3kvQyxPQUFPLEVBQUUsaUdBQWlHO0NBQzFHTyxJQUFJLEVBQUUsa0RBQWtEO0NBQ3hETixLQUFLLEVBQUUsNEdBQTRHO0NBQ25IQyxTQUFTLEVBQUUsNEVBQTRFO0NBQ3ZGQyxRQUFRLEVBQUUsaUVBQWlFO0NBQzNFekIsS0FBSyxFQUFFLGlEQUFpRDtDQUN4RGdDLEtBQUssRUFBRSxvREFBb0Q7Q0FDM0RDLEtBQUssRUFBRSxpREFBaUQ7Q0FDeERDLE1BQU0sRUFBRTtBQUNULEVBQUUsQ0FBQzs7Ozs7OztBQ3pFSHZ4QyxDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSw0Q0FBNEM7Q0FDdERDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDeEM4QixLQUFLLEVBQUUsMEVBQTBFO0NBQ2pGdHFDLEdBQUcsRUFBRSw0Q0FBNEM7Q0FDakR1cUMsSUFBSSxFQUFFLDhDQUE4QztDQUNwREMsT0FBTyxFQUFFLG9EQUFvRDtDQUM3REMsTUFBTSxFQUFFLHNEQUFzRDtDQUM5REMsTUFBTSxFQUFFLDZDQUE2QztDQUNyRHlFLFVBQVUsRUFBRSx5RkFBeUY7Q0FDckd4RSxPQUFPLEVBQUUsNkNBQTZDO0NBQ3REMkwsU0FBUyxFQUFFLHlFQUF5RTtDQUNwRjFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhEQUE4RCxDQUFDO0NBQzlGc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0RBQWtELENBQUM7Q0FDbEZ1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtREFBbUQsQ0FBQztDQUNyRnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlEQUFpRCxDQUFDO0NBQzdFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0RBQXNELENBQUM7Q0FDaEZ0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxzREFBc0QsQ0FBQztDQUNoRnNVLEtBQUssRUFBRSw0Q0FBNEM7Q0FDbkRELEtBQUssRUFBRSw0Q0FBNEM7Q0FDbkRSLEtBQUssRUFBRTtBQUNSLEVBQUUsQ0FBQzs7Ozs7O0FDdEJIcHZDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLDhCQUE4QjtDQUN4Q0MsTUFBTSxFQUFFLG9DQUFvQztDQUM1QzhCLEtBQUssRUFBRSxnREFBZ0Q7Q0FDdkR0cUMsR0FBRyxFQUFFLDRDQUE0QztDQUNqRHVxQyxJQUFJLEVBQUUsdUNBQXVDO0NBQzdDQyxPQUFPLEVBQUUsNkNBQTZDO0NBQ3REQyxNQUFNLEVBQUUsOENBQThDO0NBQ3REQyxNQUFNLEVBQUUsbUNBQW1DO0NBQzNDeUUsVUFBVSxFQUFFLDBEQUEwRDtDQUN0RXhFLE9BQU8sRUFBRSxtQ0FBbUM7Q0FDNUMyTCxTQUFTLEVBQUUsdURBQXVEO0NBQ2xFMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0RBQXNELENBQUM7Q0FDdEZzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpREFBaUQsQ0FBQztDQUNqRnVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhEQUE4RCxDQUFDO0NBQ2hHcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0RBQW9ELENBQUM7Q0FDaEZ4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwrREFBK0QsQ0FBQztDQUN6RnR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtEQUErRDtBQUN6RixFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxnQ0FBZ0M7Q0FDMUNDLE1BQU0sRUFBRSwwQ0FBMEM7Q0FDbEQ4QixLQUFLLEVBQUUseURBQXlEO0NBQ2hFdHFDLEdBQUcsRUFBRSxxQ0FBcUM7Q0FDMUN1cUMsSUFBSSxFQUFFLHNDQUFzQztDQUM1Q0MsT0FBTyxFQUFFLG9EQUFvRDtDQUM3REMsTUFBTSxFQUFFLDRCQUE0QjtDQUNwQ0MsTUFBTSxFQUFFLG1DQUFtQztDQUMzQ3lFLFVBQVUsRUFBRSx1REFBdUQ7Q0FDbkV4RSxPQUFPLEVBQUUsZ0RBQWdEO0NBQ3pEMkwsU0FBUyxFQUFFLHFEQUFxRDtDQUNoRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhDQUE4QyxDQUFDO0NBQzlFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsOENBQThDLENBQUM7Q0FDOUV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4REFBOEQsQ0FBQztDQUNoR3BHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJDQUEyQyxDQUFDO0NBQ3ZFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscURBQXFELENBQUM7Q0FDL0V0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxREFBcUQ7QUFDL0UsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtJQUM1QnduQixRQUFRLEVBQUUsdUJBQXVCO0lBQ2pDQyxNQUFNLEVBQUUsdUJBQXVCO0lBQy9COEIsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QnRxQyxHQUFHLEVBQUUscUJBQXFCO0lBQzFCdXFDLElBQUksRUFBRSxvQkFBb0I7SUFDMUJDLE9BQU8sRUFBRSwyQ0FBMkM7SUFDcERDLE1BQU0sRUFBRSxvQkFBb0I7SUFDNUJDLE1BQU0sRUFBRSwyQkFBMkI7SUFDbkN5RSxVQUFVLEVBQUUsNEJBQTRCO0lBQ3hDeEUsT0FBTyxFQUFFLDBCQUEwQjtJQUNuQzJMLFNBQVMsRUFBRSxjQUFjO0lBQ3pCMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsc0NBQXNDLENBQUM7SUFDdEVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx1Q0FBdUMsQ0FBQztJQUN2RXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDBDQUEwQyxDQUFDO0lBQzVFcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMENBQTBDLENBQUM7SUFDdEV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxzQ0FBc0MsQ0FBQztJQUNoRXR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVDQUF1QztBQUNwRSxFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxzQkFBc0I7Q0FDaENDLE1BQU0sRUFBRSxxQ0FBcUM7Q0FDN0M4QixLQUFLLEVBQUUsc0NBQXNDO0NBQzdDdHFDLEdBQUcsRUFBRSw2QkFBNkI7Q0FDbEN1cUMsSUFBSSxFQUFFLCtCQUErQjtDQUNyQ0MsT0FBTyxFQUFFLHFDQUFxQztDQUM5Q0MsTUFBTSxFQUFFLGtDQUFrQztDQUMxQ0MsTUFBTSxFQUFFLGlDQUFpQztDQUN6Q3lFLFVBQVUsRUFBRSxtREFBbUQ7Q0FDL0R4RSxPQUFPLEVBQUUseUNBQXlDO0NBQ2xEMkwsU0FBUyxFQUFFLDRDQUE0QztDQUN2RDFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZDQUE2QyxDQUFDO0NBQzdFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsb0NBQW9DLENBQUM7Q0FDcEV1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5Q0FBeUMsQ0FBQztDQUMzRXBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDRDQUE0QyxDQUFDO0NBQ3hFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0RBQWtELENBQUM7Q0FDNUV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpREFBaUQ7QUFDM0UsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsZ0JBQWdCO0NBQzFCcUMsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsd0JBQXdCLENBQUM7Q0FDeERzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx3QkFBd0IsQ0FBQztDQUN4RHVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHdDQUF3QyxDQUFDO0NBQzFFK0csS0FBSyxFQUFFLG1DQUFtQztDQUMxQ3RxQyxHQUFHLEVBQUUsc0JBQXNCO0NBQzNCdXFDLElBQUksRUFBRSxpQkFBaUI7Q0FDdkJFLE1BQU0sRUFBRSxpQkFBaUI7Q0FDekJDLE1BQU0sRUFBRSw2QkFBNkI7Q0FDckNDLE9BQU8sRUFBRSw4QkFBOEI7Q0FDdkN4TixLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw0QkFBNEIsQ0FBQztDQUN4RHh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJCQUEyQixDQUFDO0NBQ3JEdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNEJBQTRCLENBQUM7Q0FDdEQ0TCxVQUFVLEVBQUUsd0NBQXdDO0NBQ3BENTZDLElBQUksRUFBRXlULENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0JBQStCO0FBQzFELEVBQUUsQ0FBQzs7Ozs7O0FDaEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLHNCQUFzQjtDQUNoQ0MsTUFBTSxFQUFFLDZCQUE2QjtDQUNyQzhCLEtBQUssRUFBRSx3Q0FBd0M7Q0FDL0N0cUMsR0FBRyxFQUFFLHNDQUFzQztDQUMzQ3VxQyxJQUFJLEVBQUUsaUNBQWlDO0NBQ3ZDQyxPQUFPLEVBQUUscUNBQXFDO0NBQzlDQyxNQUFNLEVBQUUsbUNBQW1DO0NBQzNDQyxNQUFNLEVBQUUsK0JBQStCO0NBQ3ZDeUUsVUFBVSxFQUFFLHFEQUFxRDtDQUNqRXhFLE9BQU8sRUFBRSxtQ0FBbUM7Q0FDNUMyTCxTQUFTLEVBQUUsK0NBQStDO0NBQzFEMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUNBQXFDLENBQUM7Q0FDckVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxzQ0FBc0MsQ0FBQztDQUN0RXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9EQUFvRCxDQUFDO0NBQ3RGcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkNBQTJDLENBQUM7Q0FDdkV4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpREFBaUQsQ0FBQztDQUMzRXR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGdEQUFnRDtBQUMxRSxFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxtQkFBbUI7Q0FDN0JDLE1BQU0sRUFBRSxtQkFBbUI7Q0FDM0I4QixLQUFLLEVBQUUsaUNBQWlDO0NBQ3hDdHFDLEdBQUcsRUFBRSx1QkFBdUI7Q0FDNUJ1cUMsSUFBSSxFQUFFLHlCQUF5QjtDQUMvQkMsT0FBTyxFQUFFLCtCQUErQjtDQUN4Q0MsTUFBTSxFQUFFLHdCQUF3QjtDQUNoQ0MsTUFBTSxFQUFFLG9CQUFvQjtDQUM1QnlFLFVBQVUsRUFBRSx5Q0FBeUM7Q0FDckR4RSxPQUFPLEVBQUUsK0JBQStCO0NBQ3hDMkwsU0FBUyxFQUFFLGdEQUFnRDtDQUMzRDFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlDQUFpQyxDQUFDO0NBQ2pFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0JBQStCLENBQUM7Q0FDL0R1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx1REFBdUQsQ0FBQztDQUN6RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFDQUFxQyxDQUFDO0NBQ2pFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUseUNBQXlDLENBQUM7Q0FDbkV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5Q0FBeUMsQ0FBQztDQUNuRWh2QyxJQUFJLEVBQUV5VCxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhDQUE4QztBQUN6RSxFQUFFLENBQUM7Ozs7OztBQ25CSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxvQkFBb0I7Q0FDOUJDLE1BQU0sRUFBRSxvQkFBb0I7Q0FDNUI4QixLQUFLLEVBQUUsZ0NBQWdDO0NBQ3ZDdHFDLEdBQUcsRUFBRSx1QkFBdUI7Q0FDNUJ1cUMsSUFBSSxFQUFFLHlCQUF5QjtDQUMvQkMsT0FBTyxFQUFFLCtCQUErQjtDQUN4Q0MsTUFBTSxFQUFFLHdCQUF3QjtDQUNoQ0MsTUFBTSxFQUFFLHFCQUFxQjtDQUM3QnlFLFVBQVUsRUFBRSx5Q0FBeUM7Q0FDckR4RSxPQUFPLEVBQUUsK0JBQStCO0NBQ3hDMkwsU0FBUyxFQUFFLGdEQUFnRDtDQUMzRDFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGtDQUFrQyxDQUFDO0NBQ2xFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0JBQStCLENBQUM7Q0FDL0R1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx1REFBdUQsQ0FBQztDQUN6RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFDQUFxQyxDQUFDO0NBQ2pFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMENBQTBDLENBQUM7Q0FDcEV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5Q0FBeUMsQ0FBQztDQUNuRWh2QyxJQUFJLEVBQUV5VCxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhDQUE4QztBQUN6RSxFQUFFLENBQUM7Ozs7OztBQ25CSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSx3Q0FBd0M7Q0FDbERDLE1BQU0sRUFBRSxtQ0FBbUM7Q0FDM0NvQyxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyQ0FBMkMsQ0FBQztDQUMzRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHdDQUF3QyxDQUFDO0NBQ3hFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUscUNBQXFDLENBQUM7Q0FDdkUrRyxLQUFLLEVBQUUsK0JBQStCO0NBQ3RDdHFDLEdBQUcsRUFBRSxzQkFBc0I7Q0FDM0J1cUMsSUFBSSxFQUFFLHlCQUF5QjtDQUMvQkMsT0FBTyxFQUFFLDhEQUE4RDtDQUN2RUMsTUFBTSxFQUFFLDBCQUEwQjtDQUNsQ0MsTUFBTSxFQUFFLHNCQUFzQjtDQUM5QkMsT0FBTyxFQUFFLDZCQUE2QjtDQUN0Q3hOLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDBDQUEwQyxDQUFDO0NBQ3RFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNkRBQTZELENBQUM7Q0FDdkZ0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxrRUFBa0UsQ0FBQztDQUM1RjRMLFVBQVUsRUFBRSxxQ0FBcUM7Q0FDakRyK0QsT0FBTyxFQUFFO0FBQ1YsRUFBRSxDQUFDOzs7Ozs7QUNsQkhrM0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsVUFBVTtDQUNwQkMsTUFBTSxFQUFFLHFCQUFxQjtDQUM3QjhCLEtBQUssRUFBRSxpQ0FBaUM7Q0FDeEN0cUMsR0FBRyxFQUFFLHlCQUF5QjtDQUM5QnVxQyxJQUFJLEVBQUUsMkJBQTJCO0NBQ2pDQyxPQUFPLEVBQUUsdUNBQXVDO0NBQ2hEQyxNQUFNLEVBQUUsMEJBQTBCO0NBQ2xDQyxNQUFNLEVBQUUsNkJBQTZCO0NBQ3JDeUUsVUFBVSxFQUFFLGtDQUFrQztDQUM5Q3hFLE9BQU8sRUFBRSx5QkFBeUI7Q0FDbEMyTCxTQUFTLEVBQUUsb0NBQW9DO0NBQy9DMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdUNBQXVDLENBQUM7Q0FDdkVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx3Q0FBd0MsQ0FBQztDQUN4RXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG1EQUFtRCxDQUFDO0NBQ3JGcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsaUNBQWlDLENBQUM7Q0FDN0R4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxxQ0FBcUMsQ0FBQztDQUMvRHR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLG9DQUFvQztBQUM5RCxFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxvQ0FBb0M7Q0FDOUNDLE1BQU0sRUFBRSx1Q0FBdUM7Q0FDL0M4QixLQUFLLEVBQUUsK0NBQStDO0NBQ3REdHFDLEdBQUcsRUFBRSx3Q0FBd0M7Q0FDN0N1cUMsSUFBSSxFQUFFLHFDQUFxQztDQUMzQ0MsT0FBTyxFQUFFLDZDQUE2QztDQUN0REMsTUFBTSxFQUFFLHNDQUFzQztDQUM5Q0MsTUFBTSxFQUFFLG1DQUFtQztDQUMzQ3lFLFVBQVUsRUFBRSwwQ0FBMEM7Q0FDdER4RSxPQUFPLEVBQUUsdUNBQXVDO0NBQ2hEMkwsU0FBUyxFQUFFLDZDQUE2QztDQUN4RDFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDZDQUE2QyxDQUFDO0NBQzdFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNkNBQTZDLENBQUM7Q0FDN0V1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyREFBMkQsQ0FBQztDQUM3RnBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlEQUFpRCxDQUFDO0NBQzdFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsOENBQThDLENBQUM7Q0FDeEV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4Q0FBOEM7QUFDeEUsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsb0NBQW9DO0NBQzlDQyxNQUFNLEVBQUUsMkJBQTJCO0NBQ25DOEIsS0FBSyxFQUFFLDRDQUE0QztDQUNuRHRxQyxHQUFHLEVBQUUsOENBQThDO0NBQ25EdXFDLElBQUksRUFBRSxtQ0FBbUM7Q0FDekNDLE9BQU8sRUFBRSxrREFBa0Q7Q0FDM0RDLE1BQU0sRUFBRSxrQ0FBa0M7Q0FDMUNDLE1BQU0sRUFBRSw0Q0FBNEM7Q0FDcER5RSxVQUFVLEVBQUUseUNBQXlDO0NBQ3JEeEUsT0FBTyxFQUFFLG9DQUFvQztDQUM3QzJMLFNBQVMsRUFBRSxrREFBa0Q7Q0FDN0QxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw4REFBOEQsQ0FBQztDQUM5RnNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJEQUEyRCxDQUFDO0NBQzNGdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0VBQWtFLENBQUM7Q0FDcEdwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpREFBaUQsQ0FBQztDQUM3RXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLCtEQUErRCxDQUFDO0NBQ3pGdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0RBQStELENBQUM7Q0FDekZrVCxrQkFBa0IsRUFBRXp1QyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHFEQUFxRDtBQUM5RixFQUFFLENBQUM7Ozs7OztBQ25CSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSw4QkFBOEI7Q0FDeENDLE1BQU0sRUFBRSx5Q0FBeUM7Q0FDakQ4QixLQUFLLEVBQUUsd0RBQXdEO0NBQy9EdHFDLEdBQUcsRUFBRSxvQ0FBb0M7Q0FDekN1cUMsSUFBSSxFQUFFLG9DQUFvQztDQUMxQ0MsT0FBTyxFQUFFLGtEQUFrRDtDQUMzREMsTUFBTSxFQUFFLDRCQUE0QjtDQUNwQ0MsTUFBTSxFQUFFLDhCQUE4QjtDQUN0Q3lFLFVBQVUsRUFBRSx1REFBdUQ7Q0FDbkV4RSxPQUFPLEVBQUUsNkNBQTZDO0NBQ3REMkwsU0FBUyxFQUFFLHFEQUFxRDtDQUNoRTFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDhDQUE4QyxDQUFDO0NBQzlFc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsNkNBQTZDLENBQUM7Q0FDN0V1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpRUFBaUUsQ0FBQztDQUNuR3BHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDRDQUE0QyxDQUFDO0NBQ3hFeHhDLEdBQUcsRUFBRWlXLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsa0RBQWtELENBQUM7Q0FDNUV0dkIsR0FBRyxFQUFFak0sQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxtREFBbUQ7QUFDN0UsRUFBRSxDQUFDOzs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsK0JBQStCO0NBQ3pDQyxNQUFNLEVBQUUsK0JBQStCO0NBQ3ZDOEIsS0FBSyxFQUFFLGlDQUFpQztDQUN4Q3RxQyxHQUFHLEVBQUUsOEJBQThCO0NBQ25DdXFDLElBQUksRUFBRSwrQkFBK0I7Q0FDckNDLE9BQU8sRUFBRSwrQ0FBK0M7Q0FDeERDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDeENDLE1BQU0sRUFBRSxpQ0FBaUM7Q0FDekN5RSxVQUFVLEVBQUUsb0NBQW9DO0NBQ2hEeEUsT0FBTyxFQUFFLCtCQUErQjtDQUN4QzJMLFNBQVMsRUFBRSxxQkFBcUI7Q0FDaEMxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwyQ0FBMkMsQ0FBQztDQUMzRXNILFNBQVMsRUFBRTdpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHVDQUF1QyxDQUFDO0NBQ3ZFdUgsV0FBVyxFQUFFOWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsK0NBQStDLENBQUM7Q0FDakZwRyxLQUFLLEVBQUVuMUIsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxnREFBZ0QsQ0FBQztDQUM1RXh4QyxHQUFHLEVBQUVpVyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJDQUEyQyxDQUFDO0NBQ3JFdHZCLEdBQUcsRUFBRWpNLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsdUNBQXVDO0FBQ2pFLEVBQUUsQ0FBQzs7Ozs7O0FDbEJIdjdCLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ2xtQixRQUFRLEVBQUU7Q0FDL0J3bkIsUUFBUSxFQUFFLFdBQVc7Q0FDckJDLE1BQU0sRUFBRSxtQkFBbUI7Q0FDM0I4QixLQUFLLEVBQUUsaUJBQWlCO0NBQ3hCdHFDLEdBQUcsRUFBRSxlQUFlO0NBQ3BCdXFDLElBQUksRUFBRSxnQkFBZ0I7Q0FDdEJDLE9BQU8sRUFBRSxzQkFBc0I7Q0FDL0JDLE1BQU0sRUFBRSxjQUFjO0NBQ3RCQyxNQUFNLEVBQUUsa0JBQWtCO0NBQzFCeUUsVUFBVSxFQUFFLDJCQUEyQjtDQUN2Q3hFLE9BQU8sRUFBRSx3QkFBd0I7Q0FDakMyTCxTQUFTLEVBQUUsMEJBQTBCO0NBQ3JDMUwsU0FBUyxFQUFFNWlDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsbUNBQW1DLENBQUM7Q0FDbkVzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpQ0FBaUMsQ0FBQztDQUNqRXVILFdBQVcsRUFBRTlpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlDQUFpQyxDQUFDO0NBQ25FcEcsS0FBSyxFQUFFbjFCLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsMkJBQTJCLENBQUM7Q0FDdkR4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSw2QkFBNkIsQ0FBQztDQUN2RHR2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLDJCQUEyQjtBQUNyRCxFQUFFLENBQUM7Ozs7OztBQ2xCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUNsbUIsUUFBUSxFQUFFO0NBQy9Cd25CLFFBQVEsRUFBRSxRQUFRO0NBQ2xCQyxNQUFNLEVBQUUsUUFBUTtDQUNoQjhCLEtBQUssRUFBRSxjQUFjO0NBQ3JCdHFDLEdBQUcsRUFBRSxVQUFVO0NBQ2Z1cUMsSUFBSSxFQUFFLFVBQVU7Q0FDaEJDLE9BQU8sRUFBRSx1QkFBdUI7Q0FDaENDLE1BQU0sRUFBRSxVQUFVO0NBQ2xCQyxNQUFNLEVBQUUsUUFBUTtDQUNoQnlFLFVBQVUsRUFBRSxhQUFhO0NBQ3pCeEUsT0FBTyxFQUFFLFNBQVM7Q0FDbEIyTCxTQUFTLEVBQUUsVUFBVTtDQUNyQjFMLFNBQVMsRUFBRTVpQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlCQUFpQixDQUFDO0NBQ2pEc0gsU0FBUyxFQUFFN2lDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7Q0FDaER1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSwwQkFBMEIsQ0FBQztDQUM1RHBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHlCQUF5QixDQUFDO0NBQ3JEaHZDLElBQUksRUFBRXlULENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7Q0FDM0N4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpQkFBaUIsQ0FBQztDQUMzQ3R2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlCQUFpQjtBQUMzQyxFQUFFLENBQUM7Ozs7Ozs7QUNsQkh2N0IsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDbG1CLFFBQVEsRUFBRTtDQUMvQnduQixRQUFRLEVBQUUsTUFBTTtDQUNoQkMsTUFBTSxFQUFFLFFBQVE7Q0FDaEI4QixLQUFLLEVBQUUsWUFBWTtDQUNuQnRxQyxHQUFHLEVBQUUsVUFBVTtDQUNmdXFDLElBQUksRUFBRSxVQUFVO0NBQ2hCQyxPQUFPLEVBQUUsdUJBQXVCO0NBQ2hDQyxNQUFNLEVBQUUsVUFBVTtDQUNsQkMsTUFBTSxFQUFFLFFBQVE7Q0FDaEJ5RSxVQUFVLEVBQUUsYUFBYTtDQUN6QnhFLE9BQU8sRUFBRSxTQUFTO0NBQ2xCMkwsU0FBUyxFQUFFLFVBQVU7Q0FDckIxTCxTQUFTLEVBQUU1aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxZQUFZLENBQUM7Q0FDNUNzSCxTQUFTLEVBQUU3aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxZQUFZLENBQUM7Q0FDNUN1SCxXQUFXLEVBQUU5aUMsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSx5QkFBeUIsQ0FBQztDQUMzRHBHLEtBQUssRUFBRW4xQixDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLHNCQUFzQixDQUFDO0NBQ2xEaHZDLElBQUksRUFBRXlULENBQUMsQ0FBQ2kvQixTQUFTLENBQUMxRCxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7Q0FDM0N4eEMsR0FBRyxFQUFFaVcsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQzFELE1BQU0sRUFBRSxpQkFBaUIsQ0FBQztDQUMzQ3R2QixHQUFHLEVBQUVqTSxDQUFDLENBQUNpL0IsU0FBUyxDQUFDMUQsTUFBTSxFQUFFLGlCQUFpQjtBQUMzQyxFQUFFLENBQUM7Ozs7OztBQ3BCSHY3QixDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUN1RyxPQUFPLEVBQUU7Q0FDOUJqRCxJQUFJLEVBQUUsUUFBUSxFQUFFN2tFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7RUFDaEMsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDRCQUE0QixDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztDQUM5RSxDQUFDO0NBQ0Qra0UsTUFBTSxFQUFFLFFBQVEsRUFBRS9rRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0VBQ2xDLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRywwQ0FBMEMsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7Q0FDNUY7QUFDRCxFQUFFLENBQUM7Ozs7OztBQ1BIc2lDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ3VHLE9BQU8sRUFBRTtDQUM5QmpELElBQUksRUFBRSxRQUFRLEVBQUU3a0UsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtFQUNoQyxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsNEJBQTRCLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0NBQzlFLENBQUM7Q0FDRCtrRSxNQUFNLEVBQUUsUUFBUSxFQUFFL2tFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7RUFDbEMsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDBDQUEwQyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztDQUM1RjtBQUNELEVBQUUsQ0FBQzs7Ozs7O0FDUEhzaUMsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDdUcsT0FBTyxFQUFFO0NBQzlCakQsSUFBSSxFQUFFLFFBQVEsRUFBRTdrRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0VBQ2hDLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRywyQkFBMkIsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7Q0FDN0UsQ0FBQztDQUNEK2tFLE1BQU0sRUFBRSxRQUFRLEVBQUUva0UsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtFQUNsQyxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsc0JBQXNCLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0NBQ3hFO0FBQ0QsRUFBRSxDQUFDOzs7Ozs7QUNQSHNpQyxDQUFDLENBQUMxa0MsTUFBTSxFQUFFMGtDLENBQUMsQ0FBQ2kvQixTQUFTLENBQUN1RyxPQUFPLEVBQUU7Q0FDOUJqRCxJQUFJLEVBQUUsUUFBUSxFQUFFN2tFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7RUFDaEMsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDRCQUE0QixDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztDQUM5RSxDQUFDO0NBQ0Qra0UsTUFBTSxFQUFFLFFBQVEsRUFBRS9rRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0VBQ2xDLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRywwQ0FBMEMsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7Q0FDNUY7QUFDRCxFQUFFLENBQUM7Ozs7OztBQ1BIc2lDLENBQUMsQ0FBQzFrQyxNQUFNLEVBQUUwa0MsQ0FBQyxDQUFDaS9CLFNBQVMsQ0FBQ3VHLE9BQU8sRUFBRTtDQUM5QmpELElBQUksRUFBRSxRQUFRLEVBQUU3a0UsS0FBSyxFQUFFa25DLFFBQVEsRUFBRTtFQUNoQyxPQUFPLElBQUksQ0FBQ2s5QixRQUFRLEVBQUVsOUIsUUFBUSxFQUFFLEdBQUcsd0NBQXdDLENBQUNyaEMsSUFBSSxFQUFFN0YsTUFBTSxDQUFDO0NBQzFGLENBQUM7Q0FDRCtrRSxNQUFNLEVBQUUsUUFBUSxFQUFFL2tFLEtBQUssRUFBRWtuQyxRQUFRLEVBQUU7RUFDbEMsT0FBTyxJQUFJLENBQUNrOUIsUUFBUSxFQUFFbDlCLFFBQVEsRUFBRSxHQUFHLDBDQUEwQyxDQUFDcmhDLElBQUksRUFBRTdGLE1BQU0sQ0FBQztDQUM1RjtBQUNELEVBQUUsQ0FBQzs7Ozs7O0FDUEhzaUMsQ0FBQyxDQUFDMWtDLE1BQU0sRUFBRTBrQyxDQUFDLENBQUNpL0IsU0FBUyxDQUFDdUcsT0FBTyxFQUFFO0NBQzlCakQsSUFBSSxFQUFFLFFBQVEsRUFBRTdrRSxLQUFLLEVBQUVrbkMsUUFBUSxFQUFFO0VBQ2hDLE9BQU8sSUFBSSxDQUFDazlCLFFBQVEsRUFBRWw5QixRQUFRLEVBQUUsR0FBRyw0QkFBNEIsQ0FBQ3JoQyxJQUFJLEVBQUU3RixNQUFNLENBQUM7Q0FDOUU7QUFDRCxFQUFFLENBQUM7Ozs7Ozs7Ozs7OztBQ0VILENBQUMsU0FBUyxDQUFDaEgsTUFBTSxFQUFFSCxRQUFRLEVBQUV5cEMsQ0FBQyxFQUFFL2pDLFNBQVMsRUFBRTtFQUN6QyxZQUFZOztFQUVadkYsTUFBTSxDQUFDZ2YsUUFBUSxFQUFFaGYsTUFBTSxDQUFDZ2YsUUFBUSxHQUFHO0lBQ2pDODdELElBQUksRUFBRSxTQUFTLENBQUNDLEtBQUssRUFBRSxDQUFDO0VBQzFCLENBQUM7Ozs7O0VBS0QsR0FBRyxDQUFDLENBQUN6eEMsQ0FBQyxFQUFFO0lBQ04sTUFBTTtFQUNSOzs7OztFQUtBLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQ2k0RSxRQUFRLEVBQUU7SUFDakJoOEQsT0FBTyxDQUFDODdELElBQUksQ0FBQyw4QkFBOEIsQ0FBQzs7SUFFNUMsTUFBTTtFQUNSOzs7OztFQUtBLElBQUk1USxTQUFTLEVBQUU7OztJQUdiK1EsYUFBYSxFQUFFLEtBQUs7OztJQUdwQkMsSUFBSSxFQUFFLEtBQUs7OztJQUdYQyxNQUFNLEVBQUUsRUFBRTs7O0lBR1ZDLFFBQVEsRUFBRSxJQUFJOzs7SUFHZEMscUJBQXFCLEVBQUUsSUFBSTs7O0lBRzNCQyxNQUFNLEVBQUUsSUFBSTs7O0lBR1pDLE9BQU8sRUFBRSxJQUFJOzs7OztJQUtiQyxRQUFRLEVBQUUsTUFBTTs7Ozs7SUFLaEJDLE9BQU8sRUFBRSxNQUFNOzs7OztJQUtmMXZELE9BQU8sRUFBRTtNQUNQLE1BQU07O01BRU4sV0FBVzs7O01BR1gsUUFBUTtNQUNSO0lBQ0YsQ0FBQzs7O0lBR0QydkQsUUFBUSxFQUFFLENBQUM7OztJQUdYQyxPQUFPLEVBQUUsS0FBSzs7O0lBR2Q3akIsS0FBSyxFQUFFLEtBQUs7O0lBRVpuakQsS0FBSyxFQUFFOzs7OztNQUtMaW5FLE9BQU8sRUFBRTtJQUNYLENBQUM7O0lBRUQxNUMsSUFBSSxFQUFFOztNQUVKSCxRQUFRLEVBQUU7OztRQUdSaGhCLElBQUksRUFBRTtVQUNKaTZELFFBQVEsRUFBRTtRQUNaO01BQ0Y7SUFDRixDQUFDOztJQUVEYSxNQUFNLEVBQUU7O01BRU5DLEdBQUcsRUFBRSxxS0FBcUs7Ozs7O01BSzFLRixPQUFPLEVBQUUsSUFBSTs7OztNQUliNTRELEdBQUcsRUFBRSxDQUFDLENBQUM7OztNQUdQOVIsSUFBSSxFQUFFO1FBQ0o2cUUsU0FBUyxFQUFFO01BQ2I7SUFDRixDQUFDOzs7SUFHREMsS0FBSyxFQUFFO01BQ0xGLEdBQUcsRUFBRSx3RkFBd0Y7UUFDM0YsNkNBQTZDO1FBQzdDLGtJQUFrSTtRQUNsSSxVQUFVO01BQ1pqWCxNQUFNLEVBQUUsRUFBRTtNQUNWb1gsU0FBUyxFQUFFO0lBQ2IsQ0FBQzs7O0lBR0RDLFdBQVcsRUFBRSxPQUFPOzs7Ozs7Ozs7SUFTcEJDLGVBQWUsRUFBRSxNQUFNOzs7SUFHdkJDLGlCQUFpQixFQUFFLEdBQUc7Ozs7SUFJdEJDLFdBQVcsRUFBRSxNQUFNOzs7Ozs7Ozs7Ozs7O0lBYW5CQyxnQkFBZ0IsRUFBRSxNQUFNOzs7SUFHeEJDLGtCQUFrQixFQUFFLEdBQUc7OztJQUd2QkMsVUFBVSxFQUFFLEVBQUU7OztJQUdkQyxTQUFTLEVBQUUsRUFBRTs7O0lBR2JDLE9BQU8sRUFBRSwrREFBK0Q7TUFDdEUsa0NBQWtDO01BQ2xDLCtCQUErQjtNQUMvQixzSEFBc0g7TUFDdEgsa0RBQWtEO01BQ2xELG9EQUFvRDtNQUNwRCxxQ0FBcUM7TUFDckMsaUZBQWlGO01BQ2pGLFNBQVM7TUFDVCxRQUFROzs7SUFHVkMsVUFBVSxFQUFFLHNDQUFzQzs7O0lBR2xEQyxRQUFRLEVBQUUsb0RBQW9EOztJQUU5REMsTUFBTSxFQUFFO01BQ05DLFFBQVEsRUFBRSxpSUFBaUk7UUFDekksZ0xBQWdMO1FBQ2hMLE1BQU07O01BRVJubkIsSUFBSSxFQUFFLDZGQUE2RjtRQUNqRyxnU0FBZ1M7UUFDaFMsV0FBVzs7TUFFYjNWLEtBQUssRUFBRSxnR0FBZ0c7UUFDckcsMExBQTBMO1FBQzFMLFdBQVc7OztNQUdiKzhCLFNBQVMsRUFBRSxtR0FBbUc7UUFDNUcsa0tBQWtLO1FBQ2xLLFdBQVc7O01BRWJDLFVBQVUsRUFBRSxvR0FBb0c7UUFDOUcseUtBQXlLO1FBQ3pLLFdBQVc7Ozs7TUFJYnhCLFFBQVEsRUFBRSw0R0FBNEc7UUFDcEgsZ0pBQWdKO1FBQ2hKO0lBQ0osQ0FBQzs7O0lBR0R5QixRQUFRLEVBQUUsTUFBTTs7O0lBR2hCQyxhQUFhLEVBQUUsSUFBSTs7Ozs7O0lBTW5CcjlCLFNBQVMsRUFBRSxJQUFJOzs7SUFHZnM5QixTQUFTLEVBQUUsSUFBSTs7O0lBR2ZDLFNBQVMsRUFBRSxJQUFJOzs7OztJQUtmQyxVQUFVLEVBQUU7TUFDVnBCLFNBQVMsRUFBRTtJQUNiLENBQUM7OztJQUdEcUIsS0FBSyxFQUFFO01BQ0xocUMsUUFBUSxFQUFFLElBQUk7TUFDZGlxQyxRQUFRLEVBQUU7SUFDWixDQUFDOzs7O0lBSUR6cEUsSUFBSSxFQUFFLElBQUk7Ozs7Ozs7Ozs7Ozs7SUFhVjBwRSxLQUFLLEVBQUUsQ0FBQyxDQUFDOztJQUVUQyxTQUFTLEVBQUU7TUFDVHhCLFNBQVMsRUFBRSxLQUFLO01BQ2hCOWlELEtBQUssRUFBRTtJQUNULENBQUM7O0lBRUR1a0QsTUFBTSxFQUFFO01BQ056QixTQUFTLEVBQUUsS0FBSztNQUNoQjBCLFdBQVcsRUFBRSxJQUFJO01BQ2pCVixRQUFRLEVBQUUscUJBQXFCO01BQy9CeHRCLElBQUksRUFBRTtJQUNSLENBQUM7Ozs7SUFJRG11QixLQUFLLEVBQUUsTUFBTTs7Ozs7Ozs7Ozs7Ozs7SUFjYkMsTUFBTSxFQUFFdjBDLENBQUMsQ0FBQ3ZqQyxJQUFJOztJQUVkdy9ELFVBQVUsRUFBRWo4QixDQUFDLENBQUN2akMsSUFBSTtJQUNsQiszRSxTQUFTLEVBQUV4MEMsQ0FBQyxDQUFDdmpDLElBQUk7O0lBRWpCK21DLFVBQVUsRUFBRXhELENBQUMsQ0FBQ3ZqQyxJQUFJO0lBQ2xCZzRFLFNBQVMsRUFBRXowQyxDQUFDLENBQUN2akMsSUFBSTs7SUFFakJneUQsV0FBVyxFQUFFenVCLENBQUMsQ0FBQ3ZqQyxJQUFJO0lBQ25CaTRFLFVBQVUsRUFBRTEwQyxDQUFDLENBQUN2akMsSUFBSTs7SUFFbEJrNEUsVUFBVSxFQUFFMzBDLENBQUMsQ0FBQ3ZqQyxJQUFJO0lBQ2xCbTRFLFlBQVksRUFBRTUwQyxDQUFDLENBQUN2akMsSUFBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQnBCbzRFLFlBQVksRUFBRSxTQUFTLENBQUNyOUMsT0FBTyxFQUFFMVosS0FBSyxFQUFFO01BQ3RDLE9BQU8wWixPQUFPLENBQUN2L0IsS0FBSyxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSztJQUNsRCxDQUFDOzs7SUFHRDY4RSxVQUFVLEVBQUUsT0FBTzs7OztJQUluQkMsWUFBWSxFQUFFLE9BQU87OztJQUdyQkMsZUFBZSxFQUFFLEtBQUs7SUFDdEJDLGFBQWEsRUFBRSxLQUFLO0lBQ3BCQyxlQUFlLEVBQUUsS0FBSzs7Ozs7SUFLdEJDLE1BQU0sRUFBRTtNQUNOcEQscUJBQXFCLEVBQUUsS0FBSztNQUM1QkssUUFBUSxFQUFFLEtBQUs7TUFDZnlDLFlBQVksRUFBRSxTQUFTLENBQUNyOUMsT0FBTyxFQUFFMVosS0FBSyxFQUFFO1FBQ3RDLE9BQU8wWixPQUFPLENBQUN2L0IsS0FBSyxJQUFJLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxLQUFLO01BQzVELENBQUM7TUFDRDY4RSxVQUFVLEVBQUUsU0FBUyxDQUFDdDlDLE9BQU8sRUFBRTFaLEtBQUssRUFBRTtRQUNwQyxPQUFPMFosT0FBTyxDQUFDdi9CLEtBQUssSUFBSSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsT0FBTztNQUM5RCxDQUFDO01BQ0QrOEUsZUFBZSxFQUFFLFNBQVMsQ0FBQ3g5QyxPQUFPLEVBQUUxWixLQUFLLEVBQUU7UUFDekMsT0FBTzBaLE9BQU8sQ0FBQ3YvQixLQUFLLElBQUksUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLO01BQ2xELENBQUM7TUFDRGc5RSxhQUFhLEVBQUUsU0FBUyxDQUFDejlDLE9BQU8sRUFBRTFaLEtBQUssRUFBRTtRQUN2QyxPQUFPMFosT0FBTyxDQUFDdi9CLEtBQUssSUFBSSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUs7TUFDbEQ7SUFDRixDQUFDOzs7OztJQUtEcVMsSUFBSSxFQUFFLElBQUk7SUFDVjhxRSxJQUFJLEVBQUU7TUFDSi93QyxFQUFFLEVBQUU7UUFDRmd4QyxLQUFLLEVBQUUsT0FBTztRQUNkQyxJQUFJLEVBQUUsTUFBTTtRQUNaQyxJQUFJLEVBQUUsVUFBVTtRQUNoQkMsS0FBSyxFQUFFLHVFQUF1RTtRQUM5RUMsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QkMsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QkMsV0FBVyxFQUFFLGFBQWE7UUFDMUJDLE1BQU0sRUFBRSxZQUFZO1FBQ3BCQyxRQUFRLEVBQUUsVUFBVTtRQUNwQkMsS0FBSyxFQUFFLE9BQU87UUFDZEMsSUFBSSxFQUFFO01BQ1IsQ0FBQztNQUNEQyxFQUFFLEVBQUU7UUFDRlgsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QkMsSUFBSSxFQUFFLFFBQVE7UUFDZEMsSUFBSSxFQUFFLGFBQWE7UUFDbkJDLEtBQUssRUFBRSx5R0FBeUc7UUFDaEhDLFVBQVUsRUFBRSxrQkFBa0I7UUFDOUJDLFNBQVMsRUFBRSxrQkFBa0I7UUFDN0JDLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCQyxNQUFNLEVBQUUsZ0JBQWdCO1FBQ3hCQyxRQUFRLEVBQUUsZUFBZTtRQUN6QkMsS0FBSyxFQUFFLFFBQVE7UUFDZkMsSUFBSSxFQUFFO01BQ1I7SUFDRjtFQUNGLENBQUM7Ozs7O0VBS0QsSUFBSUUsR0FBRyxFQUFFajJDLENBQUMsQ0FBQ3RwQyxNQUFNLENBQUM7RUFDbEIsSUFBSXcvRSxHQUFHLEVBQUVsMkMsQ0FBQyxDQUFDenBDLFFBQVEsQ0FBQzs7RUFFcEIsSUFBSXF4RSxPQUFPLEVBQUUsQ0FBQzs7OztFQUlkLElBQUl1TyxRQUFRLEVBQUUsU0FBUyxDQUFDdCtFLEdBQUcsRUFBRTtJQUMzQixPQUFPQSxJQUFJLEdBQUdBLEdBQUcsQ0FBQ04sZUFBZSxHQUFHTSxJQUFJLFdBQVdtb0MsQ0FBQztFQUN0RCxDQUFDOzs7O0VBSUQsSUFBSW8yQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtJQUMvQixPQUFPO01BQ0wxL0UsTUFBTSxDQUFDNDJCLHNCQUFzQjtNQUM3QjUyQixNQUFNLENBQUMyL0UsNEJBQTRCO01BQ25DMy9FLE1BQU0sQ0FBQzQvRSx5QkFBeUI7TUFDaEM1L0UsTUFBTSxDQUFDNi9FLHVCQUF1Qjs7TUFFOUIsU0FBUyxDQUFDOTdFLFFBQVEsRUFBRTtRQUNsQixPQUFPL0QsTUFBTSxDQUFDcWUsVUFBVSxDQUFDdGEsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7TUFDL0M7SUFDRixDQUFDO0VBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFSixJQUFJKzdFLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQzlCLE9BQU87TUFDTDkvRSxNQUFNLENBQUMrL0UscUJBQXFCO01BQzVCLy9FLE1BQU0sQ0FBQ2dnRiwyQkFBMkI7TUFDbENoZ0YsTUFBTSxDQUFDaWdGLHdCQUF3QjtNQUMvQmpnRixNQUFNLENBQUNrZ0Ysc0JBQXNCO01BQzdCLFNBQVMsQ0FBQ3p6RSxFQUFFLEVBQUU7UUFDWnpNLE1BQU0sQ0FBQzA2QixZQUFZLENBQUNqdUIsRUFBRSxDQUFDO01BQ3pCO0lBQ0YsQ0FBQztFQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7RUFJSixJQUFJMHpFLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQy9CLElBQUl4eUUsR0FBRyxFQUFFOU4sUUFBUSxDQUFDcUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztNQUM1Q3VsQixDQUFDOztJQUVILElBQUkyNEQsWUFBWSxFQUFFO01BQ2hCbHJDLFVBQVUsRUFBRSxlQUFlO01BQzNCbXJDLFdBQVcsRUFBRSxnQkFBZ0I7TUFDN0JDLGFBQWEsRUFBRSxlQUFlO01BQzlCQyxnQkFBZ0IsRUFBRTtJQUNwQixDQUFDOztJQUVELElBQUksQ0FBQzk0RCxFQUFFLEdBQUcyNEQsV0FBVyxFQUFFO01BQ3JCLEdBQUcsQ0FBQ3p5RSxFQUFFLENBQUNtVixLQUFLLENBQUMyRSxDQUFDLEVBQUUsSUFBSWxpQixTQUFTLEVBQUU7UUFDN0IsT0FBTzY2RSxXQUFXLENBQUMzNEQsQ0FBQyxDQUFDO01BQ3ZCO0lBQ0Y7O0lBRUEsT0FBTyxlQUFlO0VBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0VBS0osSUFBSSs0RCxZQUFZLEVBQUUsU0FBUyxDQUFDQyxHQUFHLEVBQUU7SUFDL0IsT0FBT0EsSUFBSSxHQUFHQSxHQUFHLENBQUNwOUUsT0FBTyxHQUFHbzlFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzk3QyxZQUFZO0VBQ2pELENBQUM7Ozs7RUFJRCxJQUFJKzdDLFVBQVUsRUFBRSxTQUFTLENBQUNDLEtBQUssRUFBRUMsS0FBSyxFQUFFO0lBQ3RDLElBQUlDLElBQUksRUFBRXYzQyxDQUFDLENBQUMxa0MsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSs3RSxLQUFLLEVBQUVDLEtBQUssQ0FBQzs7SUFFMUN0M0MsQ0FBQyxDQUFDeGxDLElBQUksQ0FBQzg4RSxLQUFLLEVBQUUsU0FBUyxDQUFDdHpFLEdBQUcsRUFBRXRHLEtBQUssRUFBRTtNQUNsQyxHQUFHLENBQUNzaUMsQ0FBQyxDQUFDaGtDLE9BQU8sQ0FBQzBCLEtBQUssQ0FBQyxFQUFFO1FBQ3BCNjVFLEdBQUcsQ0FBQ3Z6RSxHQUFHLEVBQUUsRUFBRXRHLEtBQUs7TUFDbEI7SUFDRixDQUFDLENBQUM7O0lBRUYsT0FBTzY1RSxHQUFHO0VBQ1osQ0FBQzs7Ozs7RUFLRCxJQUFJQyxXQUFXLEVBQUUsU0FBUyxDQUFDNzhFLElBQUksRUFBRTtJQUMvQixJQUFJODhFLFVBQVUsRUFBRUYsR0FBRzs7SUFFbkIsR0FBRyxDQUFDLENBQUM1OEUsS0FBSyxHQUFHQSxJQUFJLENBQUNxSSxjQUFjLElBQUl6TSxRQUFRLEVBQUU7TUFDNUMsT0FBTyxLQUFLO0lBQ2Q7O0lBRUF5cEMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUN0bUIsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQzs7SUFFdEQrOUQsV0FBVyxFQUFFO01BQ1h2dUMsQ0FBQyxFQUFFdnVDLElBQUksQ0FBQ3l3QixxQkFBcUIsQ0FBQyxDQUFDLENBQUNFLEtBQUssRUFBRTN3QixJQUFJLENBQUNndEIsWUFBWSxFQUFFLENBQUM7TUFDM0RtaEIsQ0FBQyxFQUFFbnVDLElBQUksQ0FBQ3l3QixxQkFBcUIsQ0FBQyxDQUFDLENBQUN4bEIsSUFBSSxFQUFFakwsSUFBSSxDQUFDMGdDLGFBQWEsRUFBRTtJQUM1RCxDQUFDOztJQUVEazhDLElBQUksRUFBRWhoRixRQUFRLENBQUNtaEYsZ0JBQWdCLENBQUNELFVBQVUsQ0FBQ3Z1QyxDQUFDLEVBQUV1dUMsVUFBVSxDQUFDM3VDLENBQUMsRUFBRSxJQUFJbnVDLElBQUk7O0lBRXBFcWxDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDdG1CLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7O0lBRWxELE9BQU82OUQsR0FBRztFQUNaLENBQUM7Ozs7O0VBS0QsSUFBSUksU0FBUyxFQUFFLFNBQVMsQ0FBQzFtRSxPQUFPLEVBQUVpZCxJQUFJLEVBQUU1ZCxLQUFLLEVBQUU7SUFDN0MsSUFBSWQsS0FBSyxFQUFFLElBQUk7O0lBRWZBLElBQUksQ0FBQzBlLEtBQUssRUFBRWtwRCxTQUFTLENBQUM7TUFDcEI5bUUsS0FBSyxFQUFFQTtJQUNULENBQUMsRUFBRTB2QixDQUFDLENBQUMweEMsUUFBUSxDQUFDOVEsUUFBUSxDQUFDOztJQUV2QixHQUFHLENBQUM1Z0MsQ0FBQyxDQUFDbGtDLGFBQWEsQ0FBQ295QixJQUFJLENBQUMsRUFBRTtNQUN6QjFlLElBQUksQ0FBQzBlLEtBQUssRUFBRWtwRCxTQUFTLENBQUM1bkUsSUFBSSxDQUFDMGUsSUFBSSxFQUFFQSxJQUFJLENBQUM7SUFDeEM7O0lBRUEsR0FBRyxDQUFDOFIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ2tHLFFBQVEsRUFBRTtNQUN2QnBvRSxJQUFJLENBQUMwZSxLQUFLLEVBQUVrcEQsU0FBUyxDQUFDNW5FLElBQUksQ0FBQzBlLElBQUksRUFBRTFlLElBQUksQ0FBQzBlLElBQUksQ0FBQ2luRCxNQUFNLENBQUM7SUFDcEQ7O0lBRUEzbEUsSUFBSSxDQUFDck0sR0FBRyxFQUFFcU0sSUFBSSxDQUFDMGUsSUFBSSxDQUFDL3FCLEdBQUcsR0FBRyxFQUFFeWtFLE1BQU07O0lBRWxDcDRELElBQUksQ0FBQ3FvRSxVQUFVLEVBQUV4bEQsUUFBUSxDQUFDN2lCLElBQUksQ0FBQzBlLElBQUksQ0FBQzVkLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25EZCxJQUFJLENBQUNzb0UsVUFBVSxFQUFFLElBQUk7O0lBRXJCdG9FLElBQUksQ0FBQ3VvRSxRQUFRLEVBQUUsSUFBSTtJQUNuQnZvRSxJQUFJLENBQUN3b0UsUUFBUSxFQUFFLENBQUM7O0lBRWhCeG9FLElBQUksQ0FBQ3lvRSxTQUFTLEVBQUUsSUFBSTs7O0lBR3BCem9FLElBQUksQ0FBQ3UwRCxNQUFNLEVBQUUsQ0FBQyxDQUFDOzs7SUFHZnYwRCxJQUFJLENBQUMwb0UsT0FBTyxFQUFFLENBQUMsQ0FBQzs7O0lBR2hCMW9FLElBQUksQ0FBQzJvRSxVQUFVLENBQUNsbkUsT0FBTyxDQUFDOztJQUV4QixHQUFHLENBQUMsQ0FBQ3pCLElBQUksQ0FBQ3UwRCxLQUFLLENBQUNocUUsTUFBTSxFQUFFO01BQ3RCLE1BQU07SUFDUjs7SUFFQXlWLElBQUksQ0FBQzlWLElBQUksQ0FBQyxDQUFDO0VBQ2IsQ0FBQzs7RUFFRHNtQyxDQUFDLENBQUMxa0MsTUFBTSxDQUFDcThFLFFBQVEsQ0FBQy85RSxTQUFTLEVBQUU7Ozs7SUFJM0JGLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtNQUNoQixJQUFJOFYsS0FBSyxFQUFFLElBQUk7UUFDYjRvRSxVQUFVLEVBQUU1b0UsSUFBSSxDQUFDdTBELEtBQUssQ0FBQ3YwRCxJQUFJLENBQUNxb0UsU0FBUyxDQUFDO1FBQ3RDUSxjQUFjLEVBQUVELFNBQVMsQ0FBQ2xxRCxJQUFJO1FBQzlCb3FELFVBQVU7UUFDVkMsU0FBUzs7TUFFWCxHQUFHLENBQUNGLGFBQWEsQ0FBQzFHLGFBQWEsRUFBRTtRQUMvQjN4QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDaDdCLEtBQUssQ0FBQyxJQUFJLENBQUM7TUFDeEI7Ozs7O01BS0ExVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUN2TixRQUFRLENBQUMsaUJBQWlCLENBQUM7O01BRXJDLEdBQUc7UUFDRCxDQUFDdU4sQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQzhHLFdBQVcsQ0FBQyxFQUFFO1FBQzFCSCxhQUFhLENBQUN6RSxjQUFjLElBQUksTUFBTTtRQUN0QyxDQUFDNXpDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNrRyxTQUFTO1FBQ3JCcmhGLFFBQVEsQ0FBQ21rQixJQUFJLENBQUM4dEIsYUFBYSxFQUFFOXhDLE1BQU0sQ0FBQzQ0QztNQUN0QyxFQUFFO1FBQ0F0UCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUNyYSxNQUFNO1VBQ2QsOEZBQThGO1VBQzlGLENBQUNqdkIsTUFBTSxDQUFDNjRDLFdBQVcsRUFBRWg1QyxRQUFRLENBQUNpUCxlQUFlLENBQUM0aUMsV0FBVyxFQUFFO1VBQzNEO1FBQ0YsQ0FBQzs7UUFFRHBJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQ3ZOLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQztNQUNoRDs7Ozs7O01BTUE4bEQsVUFBVSxFQUFFLEVBQUU7O01BRWR2NEMsQ0FBQyxDQUFDeGxDLElBQUksQ0FBQzY5RSxhQUFhLENBQUM1MUQsT0FBTyxFQUFFLFNBQVMsQ0FBQ25TLEtBQUssRUFBRTVTLEtBQUssRUFBRTtRQUNwRDY2RSxVQUFVLEdBQUdGLGFBQWEsQ0FBQzlFLE1BQU0sQ0FBQzcxRSxLQUFLLEVBQUUsR0FBRyxFQUFFO01BQ2hELENBQUMsQ0FBQzs7OztNQUlGNDZFLFdBQVcsRUFBRXQ0QyxDQUFDO1VBQ1Z4d0IsSUFBSSxDQUFDaXBFLFNBQVM7WUFDWmpwRSxJQUFJO1lBQ0o2b0UsYUFBYSxDQUFDakY7WUFDZCxDQUFDLzJFLE9BQU8sQ0FBQyxhQUFhLEVBQUVrOEUsU0FBUztZQUNqQyxDQUFDbDhFLE9BQU8sQ0FBQyxZQUFZLEVBQUVnOEUsYUFBYSxDQUFDOUUsTUFBTSxDQUFDRSxVQUFVLEVBQUU0RSxhQUFhLENBQUM5RSxNQUFNLENBQUNHLFVBQVU7VUFDekY7UUFDRjtRQUNBLENBQUM5ckUsSUFBSSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTRILElBQUksQ0FBQ3JNLEVBQUU7UUFDM0MsQ0FBQ3N2QixRQUFRLENBQUM0bEQsYUFBYSxDQUFDbEYsU0FBUztRQUNqQyxDQUFDMTdELElBQUksQ0FBQyxVQUFVLEVBQUVqSSxJQUFJO1FBQ3RCLENBQUMwVyxRQUFRLENBQUNteUQsYUFBYSxDQUFDMUUsUUFBUSxDQUFDOzs7TUFHbkNua0UsSUFBSSxDQUFDa3BFLE1BQU0sRUFBRTtRQUNYNXhELFNBQVMsRUFBRXd4RDtNQUNiLENBQUM7O01BRUQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQ0ssT0FBTyxDQUFDLFNBQVMsQ0FBQ3ppQyxJQUFJLEVBQUU7UUFDOUYxbUMsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQ3hpQyxJQUFJLEVBQUUsRUFBRW9pQyxVQUFVLENBQUNqeUUsSUFBSSxDQUFDLGFBQWEsRUFBRTZ2QyxJQUFJLENBQUM7TUFDekQsQ0FBQyxDQUFDOztNQUVGMW1DLElBQUksQ0FBQ3FSLE9BQU8sQ0FBQyxRQUFRLENBQUM7OztNQUd0QnJSLElBQUksQ0FBQ3NqQyxRQUFRLENBQUMsQ0FBQzs7O01BR2Z0akMsSUFBSSxDQUFDb3BFLE1BQU0sQ0FBQ3BwRSxJQUFJLENBQUNxb0UsU0FBUyxDQUFDO0lBQzdCLENBQUM7Ozs7OztJQU1EWSxTQUFTLEVBQUUsU0FBUyxDQUFDNWdGLEdBQUcsRUFBRWdoRixHQUFHLEVBQUU7TUFDN0IsSUFBSWppRixJQUFJLEVBQUVpQixHQUFHLENBQUNxMkIsSUFBSSxDQUFDa25ELElBQUksQ0FBQ3Y5RSxHQUFHLENBQUNxMkIsSUFBSSxDQUFDNWpCLElBQUksRUFBRSxHQUFHelMsR0FBRyxDQUFDcTJCLElBQUksQ0FBQ2tuRCxJQUFJLENBQUMvd0MsRUFBRTs7TUFFMUQsT0FBT3cwQyxHQUFHLENBQUN4OEUsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQ3VHLEtBQUssRUFBRXFNLENBQUMsRUFBRTtRQUN2RCxPQUFPclksR0FBRyxDQUFDcVksQ0FBQyxFQUFFLElBQUloVCxVQUFVLEVBQUUyRyxNQUFNLEVBQUVoTSxHQUFHLENBQUNxWSxDQUFDLENBQUM7TUFDOUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs7Ozs7O0lBTURrcEUsVUFBVSxFQUFFLFNBQVMsQ0FBQ2xuRSxPQUFPLEVBQUU7TUFDN0IsSUFBSXpCLEtBQUssRUFBRSxJQUFJO1FBQ2JvbEMsTUFBTSxFQUFFNVUsQ0FBQyxDQUFDaGpDLFNBQVMsQ0FBQ2lVLE9BQU8sQ0FBQztRQUM1Qm1qRSxNQUFNOztNQUVScDBDLENBQUMsQ0FBQ3hsQyxJQUFJLENBQUNvNkMsS0FBSyxFQUFFLFNBQVMsQ0FBQ244QyxDQUFDLEVBQUV5OUMsSUFBSSxFQUFFO1FBQy9CLElBQUlyK0MsSUFBSSxFQUFFLENBQUMsQ0FBQztVQUNWcTJCLEtBQUssRUFBRSxDQUFDLENBQUM7VUFDVDRxRCxLQUFLO1VBQ0w3Z0YsSUFBSTtVQUNKOGdGLEtBQUs7VUFDTDdnRixHQUFHO1VBQ0g4Z0YsUUFBUTs7Ozs7UUFLVixHQUFHLENBQUNoNUMsQ0FBQyxDQUFDbGtDLGFBQWEsQ0FBQ282QyxJQUFJLENBQUMsRUFBRTs7OztVQUl6QnIrQyxJQUFJLEVBQUVxK0MsSUFBSTtVQUNWaG9CLEtBQUssRUFBRWdvQixJQUFJLENBQUNob0IsS0FBSyxHQUFHZ29CLElBQUk7UUFDMUIsRUFBRSxLQUFLLEdBQUcsQ0FBQ2xXLENBQUMsQ0FBQy9uQyxJQUFJLENBQUNpK0MsSUFBSSxFQUFFLElBQUksU0FBUyxHQUFHbFcsQ0FBQyxDQUFDa1csSUFBSSxDQUFDLENBQUNuOEMsTUFBTSxFQUFFOztVQUV0RCsrRSxNQUFNLEVBQUU5NEMsQ0FBQyxDQUFDa1csSUFBSSxDQUFDOzs7VUFHZmhvQixLQUFLLEVBQUU0cUQsS0FBSyxDQUFDcmhFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQ3pCeVcsS0FBSyxFQUFFOFIsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU0eUIsSUFBSSxFQUFFQSxJQUFJLENBQUMzeUIsT0FBTyxDQUFDOzs7VUFHN0MyeUIsSUFBSSxDQUFDK3FELE1BQU0sRUFBRUgsS0FBSzs7VUFFbEJqaEYsR0FBRyxDQUFDSyxJQUFJLEVBQUVzWCxJQUFJLENBQUMwZSxJQUFJLENBQUNoMkIsSUFBSSxHQUFHZzJCLElBQUksQ0FBQ2gyQixJQUFJLEdBQUc0Z0YsS0FBSyxDQUFDbHhFLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7VUFJekQsR0FBRyxDQUFDLENBQUMvUCxHQUFHLENBQUNJLEtBQUssR0FBRyxDQUFDSixHQUFHLENBQUNLLEdBQUcsRUFBRTtZQUN6QkwsR0FBRyxDQUFDSSxLQUFLLEVBQUUsUUFBUTtZQUNuQkosR0FBRyxDQUFDSyxJQUFJLEVBQUVnK0MsSUFBSTtVQUNoQjtRQUNGLEVBQUUsS0FBSzs7O1VBR0xyK0MsSUFBSSxFQUFFO1lBQ0pJLElBQUksRUFBRSxNQUFNO1lBQ1pDLEdBQUcsRUFBRWcrQyxLQUFLLEVBQUU7VUFDZCxDQUFDO1FBQ0g7OztRQUdBcitDLEdBQUcsQ0FBQ3EyQixLQUFLLEVBQUU4UixDQUFDLENBQUMxa0MsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRWtVLElBQUksQ0FBQzBlLElBQUksRUFBRUEsSUFBSSxDQUFDOzs7UUFHOUMsR0FBRyxDQUFDOFIsQ0FBQyxDQUFDaGtDLE9BQU8sQ0FBQ2t5QixJQUFJLENBQUN6TCxPQUFPLENBQUMsRUFBRTtVQUMzQjVxQixHQUFHLENBQUNxMkIsSUFBSSxDQUFDekwsUUFBUSxFQUFFeUwsSUFBSSxDQUFDekwsT0FBTztRQUNqQzs7UUFFQSxHQUFHLENBQUN1ZCxDQUFDLENBQUMweEMsUUFBUSxDQUFDa0csU0FBUyxHQUFHLy9FLEdBQUcsQ0FBQ3EyQixJQUFJLENBQUNpbkQsTUFBTSxFQUFFO1VBQzFDdDlFLEdBQUcsQ0FBQ3EyQixLQUFLLEVBQUVrcEQsU0FBUyxDQUFDdi9FLEdBQUcsQ0FBQ3EyQixJQUFJLEVBQUVyMkIsR0FBRyxDQUFDcTJCLElBQUksQ0FBQ2luRCxNQUFNLENBQUM7UUFDakQ7Ozs7O1FBS0FsOUUsS0FBSyxFQUFFSixHQUFHLENBQUNJLEtBQUssR0FBR0osR0FBRyxDQUFDcTJCLElBQUksQ0FBQ2oyQixJQUFJO1FBQ2hDQyxJQUFJLEVBQUVMLEdBQUcsQ0FBQ0ssSUFBSSxHQUFHLEVBQUU7O1FBRW5CLEdBQUcsQ0FBQyxDQUFDRCxLQUFLLEdBQUdDLEdBQUcsRUFBRTtVQUNoQixHQUFHLENBQUMsQ0FBQzZnRixNQUFNLEVBQUU3Z0YsR0FBRyxDQUFDMEssS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsRUFBRTtZQUM1RDNLLEtBQUssRUFBRSxPQUFPOztZQUVkLEdBQUcsQ0FBQyxDQUFDSixHQUFHLENBQUNxMkIsSUFBSSxDQUFDd2tELEtBQUssQ0FBQ25YLE1BQU0sRUFBRTtjQUMxQjFqRSxHQUFHLENBQUNxMkIsSUFBSSxDQUFDd2tELEtBQUssQ0FBQ25YLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQ3dkLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUU7VUFDRixFQUFFLEtBQUssR0FBRyxDQUFDN2dGLEdBQUcsQ0FBQzBLLEtBQUssQ0FBQyxzRkFBc0YsQ0FBQyxFQUFFO1lBQzVHM0ssS0FBSyxFQUFFLE9BQU87VUFDaEIsRUFBRSxLQUFLLEdBQUcsQ0FBQ0MsR0FBRyxDQUFDMEssS0FBSyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDNUMzSyxLQUFLLEVBQUUsUUFBUTtZQUNmSixJQUFJLEVBQUVtb0MsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxJQUFJLEVBQUV6RCxHQUFHLEVBQUU7Y0FDeEJ3Z0MsV0FBVyxFQUFFLEtBQUs7Y0FDbEJuSyxJQUFJLEVBQUU7Z0JBQ0pxa0QsTUFBTSxFQUFFO2tCQUNORCxPQUFPLEVBQUU7Z0JBQ1g7Y0FDRjtZQUNGLENBQUMsQ0FBQztVQUNKLEVBQUUsS0FBSyxHQUFHLENBQUNwNkUsR0FBRyxDQUFDMHRDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDaEMzdEMsS0FBSyxFQUFFLFFBQVE7VUFDakI7UUFDRjs7UUFFQSxHQUFHLENBQUNBLElBQUksRUFBRTtVQUNSSixHQUFHLENBQUNJLEtBQUssRUFBRUEsSUFBSTtRQUNqQixFQUFFLEtBQUs7VUFDTHVYLElBQUksQ0FBQ3FSLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRWhwQixHQUFHLENBQUM7UUFDdEM7O1FBRUEsR0FBRyxDQUFDLENBQUNBLEdBQUcsQ0FBQ3dnQyxXQUFXLEVBQUU7VUFDcEJ4Z0MsR0FBRyxDQUFDd2dDLFlBQVksRUFBRTJILENBQUMsQ0FBQzlpQyxPQUFPLENBQUNyRixHQUFHLENBQUNJLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUVKLEdBQUcsQ0FBQ0ksSUFBSTtRQUM1Rjs7Ozs7UUFLQUosR0FBRyxDQUFDeVksTUFBTSxFQUFFZCxJQUFJLENBQUN1MEQsS0FBSyxDQUFDaHFFLE1BQU07O1FBRTdCLEdBQUcsQ0FBQ2xDLEdBQUcsQ0FBQ3EyQixJQUFJLENBQUNna0QsU0FBUyxHQUFHLE1BQU0sRUFBRTtVQUMvQnI2RSxHQUFHLENBQUNxMkIsSUFBSSxDQUFDZ2tELFNBQVMsRUFBRWx5QyxDQUFDLENBQUM5aUMsT0FBTyxDQUFDckYsR0FBRyxDQUFDSSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFFOztRQUVBLEdBQUcsQ0FBQ0osR0FBRyxDQUFDcTJCLElBQUksQ0FBQ2lrRCxRQUFRLElBQUksTUFBTSxFQUFFO1VBQy9CdDZFLEdBQUcsQ0FBQ3EyQixJQUFJLENBQUNpa0QsUUFBUSxFQUFFLENBQUN0NkUsR0FBRyxDQUFDcTJCLElBQUksQ0FBQ2drRCxRQUFRO1FBQ3ZDOzs7UUFHQXI2RSxHQUFHLENBQUNxaEYsT0FBTyxFQUFFcmhGLEdBQUcsQ0FBQ3EyQixJQUFJLENBQUNnckQsT0FBTyxHQUFHLElBQUk7O1FBRXBDLEdBQUcsQ0FBQ3JoRixHQUFHLENBQUNxMkIsSUFBSSxDQUFDaXJELFNBQVMsR0FBR3RoRixHQUFHLENBQUN5WSxNQUFNLElBQUlkLElBQUksQ0FBQzBlLElBQUksQ0FBQzVkLEtBQUssRUFBRTtVQUN0RHpZLEdBQUcsQ0FBQ3FoRixPQUFPLEVBQUVyaEYsR0FBRyxDQUFDcTJCLElBQUksQ0FBQ2lyRCxRQUFRLENBQUM5eUUsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7VUFFaEQsR0FBRyxDQUFDeE8sR0FBRyxDQUFDcWhGLE1BQU0sQ0FBQ24vRSxNQUFNLEVBQUU7WUFDckJsQyxHQUFHLENBQUNxMkIsSUFBSSxDQUFDK3FELE1BQU0sRUFBRXBoRixHQUFHLENBQUNxMkIsSUFBSSxDQUFDaXJELFFBQVE7VUFDcEM7UUFDRjs7UUFFQSxHQUFHLENBQUMsQ0FBQyxDQUFDdGhGLEdBQUcsQ0FBQ3FoRixPQUFPLEdBQUdyaEYsR0FBRyxDQUFDcWhGLE1BQU0sQ0FBQ24vRSxNQUFNLEVBQUUsR0FBR2xDLEdBQUcsQ0FBQ3EyQixJQUFJLENBQUMrcUQsS0FBSyxFQUFFO1VBQ3hEcGhGLEdBQUcsQ0FBQ3FoRixPQUFPLEVBQUVyaEYsR0FBRyxDQUFDcTJCLElBQUksQ0FBQytxRCxLQUFLLENBQUM1eUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMvQzs7UUFFQSxHQUFHLENBQUN4TyxHQUFHLENBQUNxaEYsT0FBTyxHQUFHLENBQUNyaEYsR0FBRyxDQUFDcWhGLE1BQU0sQ0FBQ24vRSxNQUFNLEVBQUU7VUFDcENsQyxHQUFHLENBQUNxaEYsT0FBTyxFQUFFLElBQUk7UUFDbkI7O1FBRUFyaEYsR0FBRyxDQUFDdWhGLE1BQU0sRUFBRXZoRixHQUFHLENBQUNxMkIsSUFBSSxDQUFDa3JELE1BQU0sR0FBRyxDQUFDdmhGLEdBQUcsQ0FBQ3FoRixPQUFPLEVBQUVyaEYsR0FBRyxDQUFDcWhGLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ2hoRixJQUFJLEVBQUUsSUFBSSxDQUFDOzs7UUFHckUsR0FBRyxDQUFDOG5DLENBQUMsQ0FBQy9uQyxJQUFJLENBQUNKLEdBQUcsQ0FBQ3EyQixJQUFJLENBQUNwUyxPQUFPLEVBQUUsSUFBSSxVQUFVLEVBQUU7VUFDM0Nqa0IsR0FBRyxDQUFDcTJCLElBQUksQ0FBQ3BTLFFBQVEsRUFBRWprQixHQUFHLENBQUNxMkIsSUFBSSxDQUFDcFMsT0FBTyxDQUFDbGhCLEtBQUssQ0FBQ3M3QyxJQUFJLEVBQUUsQ0FBQzFtQyxJQUFJLEVBQUUzWCxHQUFHLENBQUMsQ0FBQztRQUM5RDs7UUFFQSxHQUFHLENBQUNtb0MsQ0FBQyxDQUFDL25DLElBQUksQ0FBQ3VYLElBQUksQ0FBQzBlLElBQUksQ0FBQ3BTLE9BQU8sRUFBRSxJQUFJLFVBQVUsRUFBRTtVQUM1Q2prQixHQUFHLENBQUNxMkIsSUFBSSxDQUFDcFMsUUFBUSxFQUFFdE0sSUFBSSxDQUFDMGUsSUFBSSxDQUFDcFMsT0FBTyxDQUFDbGhCLEtBQUssQ0FBQ3M3QyxJQUFJLEVBQUUsQ0FBQzFtQyxJQUFJLEVBQUUzWCxHQUFHLENBQUMsQ0FBQztRQUMvRDs7O1FBR0EsR0FBRyxDQUFDLENBQUMsQ0FBQ0EsR0FBRyxDQUFDcTJCLElBQUksQ0FBQ3BTLFFBQVEsV0FBV2trQixDQUFDLENBQUMsRUFBRTtVQUNwQ25vQyxHQUFHLENBQUNxMkIsSUFBSSxDQUFDcFMsUUFBUSxFQUFFamtCLEdBQUcsQ0FBQ3EyQixJQUFJLENBQUNwUyxRQUFRLElBQUk3ZixVQUFVLEVBQUUsR0FBRyxFQUFFcEUsR0FBRyxDQUFDcTJCLElBQUksQ0FBQ3BTLFFBQVEsRUFBRSxFQUFFO1FBQ2hGOzs7O1FBSUEsR0FBRyxDQUFDamtCLEdBQUcsQ0FBQ0ksS0FBSyxJQUFJLE1BQU0sRUFBRTtVQUN2QitnRixTQUFTLEVBQUU5Z0YsR0FBRyxDQUFDNEYsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7O1VBRTlCLEdBQUcsQ0FBQ2s3RSxRQUFRLENBQUNqL0UsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUN2QmxDLEdBQUcsQ0FBQ0ssSUFBSSxFQUFFOGdGLFFBQVEsQ0FBQzkwRSxLQUFLLENBQUMsQ0FBQzs7WUFFMUJyTSxHQUFHLENBQUNxMkIsSUFBSSxDQUFDL25CLE9BQU8sRUFBRTZ5RSxRQUFRLENBQUM5MEUsS0FBSyxDQUFDLENBQUM7VUFDcEM7UUFDRjs7O1FBR0EsR0FBRyxDQUFDck0sR0FBRyxDQUFDcTJCLElBQUksQ0FBQ3NnQyxLQUFLLEVBQUU7VUFDbEIzMkQsR0FBRyxDQUFDcTJCLEtBQUssRUFBRThSLENBQUMsQ0FBQzFrQyxNQUFNLENBQUMsSUFBSSxFQUFFekQsR0FBRyxDQUFDcTJCLElBQUksRUFBRTtZQUNsQzRsRCxTQUFTLEVBQUUsSUFBSTs7WUFFZjdCLE9BQU8sRUFBRSxDQUFDO1lBQ1ZFLE9BQU8sRUFBRSxDQUFDOztZQUVWRCxRQUFRLEVBQUUsQ0FBQzs7O1lBR1hKLFFBQVEsRUFBRSxDQUFDOzs7WUFHWHFDLFNBQVMsRUFBRSxDQUFDO1lBQ1pKLFVBQVUsRUFBRSxDQUFDO1lBQ2JLLE1BQU0sRUFBRSxDQUFDO1lBQ1RKLEtBQUssRUFBRSxDQUFDOzs7WUFHUmEsWUFBWSxFQUFFLEtBQUs7WUFDbkJDLFVBQVUsRUFBRSxLQUFLO1lBQ2pCQyxZQUFZLEVBQUUsS0FBSztZQUNuQkMsZUFBZSxFQUFFLEtBQUs7WUFDdEJDLGFBQWEsRUFBRSxLQUFLO1lBQ3BCQyxlQUFlLEVBQUU7VUFDbkIsQ0FBQyxDQUFDO1FBQ0o7Ozs7O1FBS0ExbEUsSUFBSSxDQUFDdTBELEtBQUssQ0FBQzdzRSxJQUFJLENBQUNXLEdBQUcsQ0FBQztNQUN0QixDQUFDLENBQUM7OztNQUdGLEdBQUcsQ0FBQ2YsTUFBTSxDQUFDZ04sSUFBSSxDQUFDMEwsSUFBSSxDQUFDMG9FLE1BQU0sQ0FBQyxDQUFDbitFLE1BQU0sRUFBRTtRQUNuQ3lWLElBQUksQ0FBQzZwRSxjQUFjLENBQUMsQ0FBQzs7O1FBR3JCakYsT0FBTyxFQUFFNWtFLElBQUksQ0FBQzhwRSxNQUFNOztRQUVwQixHQUFHLENBQUNsRixPQUFPLEdBQUdBLE1BQU0sQ0FBQ21GLFFBQVEsRUFBRTtVQUM3Qm5GLE1BQU0sQ0FBQ3J1QyxNQUFNLENBQUMsQ0FBQzs7VUFFZnF1QyxNQUFNLENBQUM5d0QsS0FBSyxDQUFDLENBQUM7UUFDaEI7TUFDRjtJQUNGLENBQUM7Ozs7Ozs7Ozs7SUFVRGsyRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7TUFDckIsSUFBSWhxRSxLQUFLLEVBQUUsSUFBSTs7TUFFZkEsSUFBSSxDQUFDaXFFLFlBQVksQ0FBQyxDQUFDOzs7OztNQUtuQmpxRSxJQUFJLENBQUNrcEUsS0FBSyxDQUFDNXhEO1FBQ1QsQ0FBQ3BKLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLENBQUNuYixDQUFDLEVBQUU7VUFDMURBLENBQUMsQ0FBQ3VkLGVBQWUsQ0FBQyxDQUFDO1VBQ25CdmQsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUM7O1VBRWxCclEsSUFBSSxDQUFDa25DLEtBQUssQ0FBQ24wQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBQ0QsQ0FBQ21iLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLENBQUNuYixDQUFDLEVBQUU7VUFDM0VBLENBQUMsQ0FBQ3VkLGVBQWUsQ0FBQyxDQUFDO1VBQ25CdmQsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUM7O1VBRWxCclEsSUFBSSxDQUFDK2xDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxDQUFDNzNCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLENBQUNuYixDQUFDLEVBQUU7VUFDM0VBLENBQUMsQ0FBQ3VkLGVBQWUsQ0FBQyxDQUFDO1VBQ25CdmQsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUM7O1VBRWxCclEsSUFBSSxDQUFDbk4sSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDO1FBQ0QsQ0FBQ3FiLEVBQUUsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFOztVQUVuRGlOLElBQUksQ0FBQ0EsSUFBSSxDQUFDa3FFLFlBQVksQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUM7Ozs7O01BS0p6RCxFQUFFLENBQUN2NEQsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLFNBQVMsQ0FBQ25iLENBQUMsRUFBRTtRQUNuRCxHQUFHLENBQUNBLEVBQUUsR0FBR0EsQ0FBQyxDQUFDZ2UsY0FBYyxHQUFHaGUsQ0FBQyxDQUFDZ2UsYUFBYSxDQUFDdG9CLEtBQUssSUFBSSxRQUFRLEVBQUU7VUFDN0QsR0FBRyxDQUFDdVgsSUFBSSxDQUFDbXFFLFNBQVMsRUFBRTtZQUNsQm5ELFlBQVksQ0FBQ2huRSxJQUFJLENBQUNtcUUsU0FBUyxDQUFDO1VBQzlCOztVQUVBbnFFLElBQUksQ0FBQ21xRSxVQUFVLEVBQUV2RCxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekM1bUUsSUFBSSxDQUFDdW9ELE1BQU0sQ0FBQ3gxRCxDQUFDLENBQUM7VUFDaEIsQ0FBQyxDQUFDO1FBQ0osRUFBRSxLQUFLO1VBQ0wsR0FBRyxDQUFDaU4sSUFBSSxDQUFDZ29CLFFBQVEsR0FBR2hvQixJQUFJLENBQUNnb0IsT0FBTyxDQUFDdi9CLEtBQUssSUFBSSxRQUFRLEVBQUU7WUFDbER1WCxJQUFJLENBQUNrcEUsS0FBSyxDQUFDa0IsS0FBSyxDQUFDOStELElBQUksQ0FBQyxDQUFDO1VBQ3pCOztVQUVBL0YsVUFBVTtZQUNSLFNBQVMsQ0FBQyxFQUFFO2NBQ1Z2RixJQUFJLENBQUNrcEUsS0FBSyxDQUFDa0IsS0FBSyxDQUFDaC9ELElBQUksQ0FBQyxDQUFDOztjQUV2QnBMLElBQUksQ0FBQ3VvRCxNQUFNLENBQUN4MUQsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7WUFDRHk5QixDQUFDLENBQUMweEMsUUFBUSxDQUFDa0csU0FBUyxFQUFFLElBQUksRUFBRTtVQUM5QixDQUFDO1FBQ0g7TUFDRixDQUFDLENBQUM7O01BRUYxQixFQUFFLENBQUN4NEQsRUFBRSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUNuYixDQUFDLEVBQUU7UUFDL0IsSUFBSTIxRCxTQUFTLEVBQUVsNEIsQ0FBQyxDQUFDMHhDLFNBQVMsRUFBRTF4QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDOEcsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJO1VBQ3pEaGhELFFBQVEsRUFBRTBnQyxRQUFRLENBQUMxZ0MsT0FBTztVQUMxQnFpRCxRQUFRLEVBQUV0M0UsQ0FBQyxDQUFDaWdCLFFBQVEsR0FBR2pnQixDQUFDLENBQUM4Z0IsS0FBSzs7Ozs7UUFLaEMsR0FBRyxDQUFDdzJELFFBQVEsR0FBRyxDQUFDLEVBQUU7VUFDaEIsR0FBRyxDQUFDcmlELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzRsRCxTQUFTLEVBQUU7WUFDMUJ0a0UsSUFBSSxDQUFDOFQsS0FBSyxDQUFDL2dCLENBQUMsQ0FBQztVQUNmOztVQUVBLE1BQU07UUFDUjs7Ozs7UUFLQSxHQUFHLENBQUMsQ0FBQ2kxQixPQUFPLENBQUN0SixJQUFJLENBQUM0akQsU0FBUyxHQUFHdnZFLENBQUMsQ0FBQ3dmLFFBQVEsR0FBR3hmLENBQUMsQ0FBQ29mLE9BQU8sR0FBR3BmLENBQUMsQ0FBQzhmLFNBQVMsR0FBRzJkLENBQUMsQ0FBQ3o5QixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQ21ULEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFO1VBQ3hILE1BQU07UUFDUjs7O1FBR0EsR0FBRyxDQUFDOHFFLFFBQVEsSUFBSSxFQUFFLEdBQUdBLFFBQVEsSUFBSSxFQUFFLEVBQUU7VUFDbkN0M0UsQ0FBQyxDQUFDc2QsY0FBYyxDQUFDLENBQUM7O1VBRWxCclEsSUFBSSxDQUFDa25DLEtBQUssQ0FBQ24wQyxDQUFDLENBQUM7O1VBRWIsTUFBTTtRQUNSOzs7UUFHQSxHQUFHLENBQUNzM0UsUUFBUSxJQUFJLEdBQUcsR0FBR0EsUUFBUSxJQUFJLEVBQUUsRUFBRTtVQUNwQ3QzRSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQzs7VUFFbEJyUSxJQUFJLENBQUMrbEMsUUFBUSxDQUFDLENBQUM7O1VBRWYsTUFBTTtRQUNSOzs7UUFHQSxHQUFHLENBQUNza0MsUUFBUSxJQUFJLEdBQUcsR0FBR0EsUUFBUSxJQUFJLEVBQUUsRUFBRTtVQUNwQ3QzRSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQzs7VUFFbEJyUSxJQUFJLENBQUNuTixJQUFJLENBQUMsQ0FBQzs7VUFFWCxNQUFNO1FBQ1I7O1FBRUFtTixJQUFJLENBQUNxUixPQUFPLENBQUMsY0FBYyxFQUFFdGUsQ0FBQyxFQUFFczNFLE9BQU8sQ0FBQztNQUMxQyxDQUFDLENBQUM7OztNQUdGLEdBQUcsQ0FBQ3JxRSxJQUFJLENBQUN1MEQsS0FBSyxDQUFDdjBELElBQUksQ0FBQ3FvRSxTQUFTLENBQUMsQ0FBQzNwRCxJQUFJLENBQUNra0QsUUFBUSxFQUFFO1FBQzVDNWlFLElBQUksQ0FBQ3NxRSxtQkFBbUIsRUFBRSxDQUFDOztRQUUzQjVELEVBQUUsQ0FBQ3g0RCxFQUFFO1VBQ0gsNEhBQTRIO1VBQzVILFNBQVMsQ0FBQ25iLENBQUMsRUFBRTtZQUNYaU4sSUFBSSxDQUFDc3FFLG1CQUFtQixFQUFFLENBQUM7O1lBRTNCLEdBQUcsQ0FBQ3RxRSxJQUFJLENBQUN1cUUsTUFBTSxFQUFFO2NBQ2Z2cUUsSUFBSSxDQUFDd3FFLFlBQVksQ0FBQyxDQUFDO1lBQ3JCOztZQUVBeHFFLElBQUksQ0FBQ3VxRSxPQUFPLEVBQUUsS0FBSztVQUNyQjtRQUNGLENBQUM7O1FBRUR2cUUsSUFBSSxDQUFDeXFFLGFBQWEsRUFBRXZqRixNQUFNLENBQUMrbkUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ2pEanZELElBQUksQ0FBQ3NxRSxrQkFBa0IsRUFBRTs7VUFFekIsR0FBRyxDQUFDdHFFLElBQUksQ0FBQ3NxRSxtQkFBbUIsR0FBR3RxRSxJQUFJLENBQUN1MEQsS0FBSyxDQUFDdjBELElBQUksQ0FBQ3FvRSxTQUFTLENBQUMsQ0FBQzNwRCxJQUFJLENBQUNra0QsU0FBUyxHQUFHLENBQUM1aUUsSUFBSSxDQUFDMHFFLFVBQVUsRUFBRTtZQUMzRjFxRSxJQUFJLENBQUN1cUUsT0FBTyxFQUFFLElBQUk7WUFDbEJ2cUUsSUFBSSxDQUFDc3FFLG1CQUFtQixFQUFFLENBQUM7O1lBRTNCdHFFLElBQUksQ0FBQzJxRSxZQUFZLENBQUMsQ0FBQztVQUNyQjtRQUNGLENBQUMsRUFBRSxJQUFJLENBQUM7TUFDVjtJQUNGLENBQUM7Ozs7O0lBS0RWLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtNQUN4QixJQUFJanFFLEtBQUssRUFBRSxJQUFJOztNQUVmeW1FLEVBQUUsQ0FBQ2w0RCxHQUFHLENBQUMsZ0NBQWdDLENBQUM7TUFDeENtNEQsRUFBRSxDQUFDbjRELEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQzs7TUFFN0IsSUFBSSxDQUFDMjZELEtBQUssQ0FBQzV4RCxTQUFTLENBQUMvSSxHQUFHLENBQUMsNkJBQTZCLENBQUM7O01BRXZELEdBQUcsQ0FBQ3ZPLElBQUksQ0FBQ3lxRSxZQUFZLEVBQUU7UUFDckJ2akYsTUFBTSxDQUFDZ29FLGFBQWEsQ0FBQ2x2RCxJQUFJLENBQUN5cUUsWUFBWSxDQUFDOztRQUV2Q3pxRSxJQUFJLENBQUN5cUUsYUFBYSxFQUFFLElBQUk7TUFDMUI7SUFDRixDQUFDOzs7OztJQUtEMWtDLFFBQVEsRUFBRSxTQUFTLENBQUNscEIsUUFBUSxFQUFFO01BQzVCLE9BQU8sSUFBSSxDQUFDdXNELE1BQU0sQ0FBQyxJQUFJLENBQUNaLFFBQVEsRUFBRSxDQUFDLEVBQUUzckQsUUFBUSxDQUFDO0lBQ2hELENBQUM7Ozs7O0lBS0RocUIsSUFBSSxFQUFFLFNBQVMsQ0FBQ2dxQixRQUFRLEVBQUU7TUFDeEIsT0FBTyxJQUFJLENBQUN1c0QsTUFBTSxDQUFDLElBQUksQ0FBQ1osUUFBUSxFQUFFLENBQUMsRUFBRTNyRCxRQUFRLENBQUM7SUFDaEQsQ0FBQzs7Ozs7SUFLRHVzRCxNQUFNLEVBQUUsU0FBUyxDQUFDdHNELEdBQUcsRUFBRUQsUUFBUSxFQUFFO01BQy9CLElBQUk3YyxLQUFLLEVBQUUsSUFBSTtRQUNiNHFFLFNBQVMsRUFBRTVxRSxJQUFJLENBQUN1MEQsS0FBSyxDQUFDaHFFLE1BQU07UUFDNUJrK0UsUUFBUTtRQUNSb0MsT0FBTztRQUNQekksSUFBSTtRQUNKcDZDLE9BQU87UUFDUCtkLFFBQVE7UUFDUitrQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUjdpRSxJQUFJO1FBQ0o5UyxJQUFJOztNQUVOLEdBQUcsQ0FBQzRLLElBQUksQ0FBQzBxRSxXQUFXLEdBQUcxcUUsSUFBSSxDQUFDZ3JFLFVBQVUsR0FBRyxDQUFDaHJFLElBQUksQ0FBQ2lyRSxZQUFZLEdBQUdqckUsSUFBSSxDQUFDeW9FLFFBQVEsQ0FBQyxFQUFFO1FBQzVFLE1BQU07TUFDUjs7O01BR0EzckQsSUFBSSxFQUFFK0YsUUFBUSxDQUFDL0YsR0FBRyxFQUFFLEVBQUUsQ0FBQztNQUN2QnNsRCxLQUFLLEVBQUVwaUUsSUFBSSxDQUFDZ29CLFFBQVEsRUFBRWhvQixJQUFJLENBQUNnb0IsT0FBTyxDQUFDdEosSUFBSSxDQUFDMGpELEtBQUssRUFBRXBpRSxJQUFJLENBQUMwZSxJQUFJLENBQUMwakQsSUFBSTs7TUFFN0QsR0FBRyxDQUFDLENBQUNBLEtBQUssR0FBRyxDQUFDdGxELElBQUksRUFBRSxFQUFFLEdBQUdBLElBQUksR0FBRzh0RCxRQUFRLENBQUMsRUFBRTtRQUN6QyxPQUFPLEtBQUs7TUFDZDs7O01BR0FuQyxTQUFTLEVBQUV6b0UsSUFBSSxDQUFDeW9FLFNBQVMsRUFBRSxDQUFDbmhGLE1BQU0sQ0FBQ2dOLElBQUksQ0FBQzBMLElBQUksQ0FBQzBvRSxNQUFNLENBQUMsQ0FBQ24rRSxNQUFNOzs7TUFHM0R3N0MsU0FBUyxFQUFFL2xDLElBQUksQ0FBQ2dvQixPQUFPOztNQUV2QmhvQixJQUFJLENBQUNzb0UsVUFBVSxFQUFFdG9FLElBQUksQ0FBQ3FvRSxTQUFTO01BQy9Ccm9FLElBQUksQ0FBQ3VvRSxRQUFRLEVBQUV2b0UsSUFBSSxDQUFDd29FLE9BQU87O01BRTNCeGdELFFBQVEsRUFBRWhvQixJQUFJLENBQUNrckUsV0FBVyxDQUFDcHVELEdBQUcsQ0FBQzs7TUFFL0IsR0FBRyxDQUFDOHRELFNBQVMsRUFBRSxDQUFDLEVBQUU7UUFDaEIsR0FBRyxDQUFDeEksS0FBSyxHQUFHcDZDLE9BQU8sQ0FBQ2xuQixNQUFNLEVBQUU4cEUsU0FBUyxFQUFFLENBQUMsRUFBRTtVQUN4QzVxRSxJQUFJLENBQUNrckUsV0FBVyxDQUFDcHVELElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0I7O1FBRUEsR0FBRyxDQUFDc2xELEtBQUssR0FBR3A2QyxPQUFPLENBQUNsbkIsTUFBTSxFQUFFLENBQUMsRUFBRTtVQUM3QmQsSUFBSSxDQUFDa3JFLFdBQVcsQ0FBQ3B1RCxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNCO01BQ0Y7O01BRUE5YyxJQUFJLENBQUNnb0IsUUFBUSxFQUFFQSxPQUFPO01BQ3RCaG9CLElBQUksQ0FBQ3FvRSxVQUFVLEVBQUVyZ0QsT0FBTyxDQUFDbG5CLEtBQUs7TUFDOUJkLElBQUksQ0FBQ3dvRSxRQUFRLEVBQUV4Z0QsT0FBTyxDQUFDbEwsR0FBRzs7TUFFMUI5YyxJQUFJLENBQUNxUixPQUFPLENBQUMsWUFBWSxFQUFFbzNELFFBQVEsQ0FBQzs7TUFFcEN6b0UsSUFBSSxDQUFDNnBFLGNBQWMsQ0FBQyxDQUFDOzs7TUFHckI3aEQsT0FBTyxDQUFDbWpELGVBQWUsRUFBRTErRSxTQUFTOztNQUVsQyxHQUFHLENBQUMrakMsQ0FBQyxDQUFDTixTQUFTLENBQUNyVCxRQUFRLENBQUMsRUFBRTtRQUN6Qm1MLE9BQU8sQ0FBQ21qRCxlQUFlLEVBQUV0dUQsUUFBUTtNQUNuQyxFQUFFLEtBQUs7UUFDTEEsU0FBUyxFQUFFbUwsT0FBTyxDQUFDdEosSUFBSSxDQUFDK3BELFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQztNQUNoRjs7TUFFQTVyRCxTQUFTLEVBQUVnRyxRQUFRLENBQUNoRyxRQUFRLEVBQUUsRUFBRSxDQUFDOzs7TUFHakNndUQsUUFBUSxFQUFFN3FFLElBQUksQ0FBQzZxRSxPQUFPLENBQUM3aUQsT0FBTyxDQUFDOzs7TUFHL0JBLE9BQU8sQ0FBQ29qRCxNQUFNLENBQUNub0QsUUFBUSxDQUFDLHlCQUF5QixDQUFDOzs7TUFHbEQsR0FBRyxDQUFDd2xELFFBQVEsRUFBRTtRQUNaLEdBQUcsQ0FBQ3pnRCxPQUFPLENBQUN0SixJQUFJLENBQUMya0QsZ0JBQWdCLEdBQUd4bUQsUUFBUSxFQUFFO1VBQzVDN2MsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQzV4RCxTQUFTLENBQUNwTixHQUFHLENBQUMscUJBQXFCLEVBQUUyUyxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQ2xFOztRQUVBN2MsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQzV4RCxTQUFTLENBQUMyTCxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQzVSLE9BQU8sQ0FBQyxPQUFPLENBQUM7Ozs7UUFJbEVyUixJQUFJLENBQUNxckUsU0FBUyxDQUFDcmpELE9BQU8sQ0FBQzs7UUFFdkJob0IsSUFBSSxDQUFDOGlFLE9BQU8sQ0FBQyxPQUFPLENBQUM7O1FBRXJCLE1BQU07TUFDUjs7O01BR0FnSSxTQUFTLEVBQUV0NkMsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ3ZsQyxRQUFRLENBQUNxbEMsTUFBTSxDQUFDO01BQ25ETCxTQUFTLEVBQUV2NkMsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ3RyRSxJQUFJLENBQUNrcEUsS0FBSyxDQUFDa0IsS0FBSyxDQUFDOzs7TUFHcEQ1NUMsQ0FBQyxDQUFDeGxDLElBQUksQ0FBQ2dWLElBQUksQ0FBQzBvRSxNQUFNLEVBQUUsU0FBUyxDQUFDNW5FLEtBQUssRUFBRXdsRCxLQUFLLEVBQUU7UUFDMUM5MUIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQy80RCxJQUFJLENBQUNtOUMsS0FBSyxDQUFDOGtCLE1BQU0sRUFBRSxJQUFJLENBQUM7TUFDckMsQ0FBQyxDQUFDOztNQUVGLEdBQUcsQ0FBQ3JsQyxRQUFRLENBQUNqcEIsSUFBSSxJQUFJa0wsT0FBTyxDQUFDbEwsR0FBRyxFQUFFO1FBQ2hDaXBCLFFBQVEsQ0FBQ3dsQyxXQUFXLEVBQUUsS0FBSztNQUM3Qjs7TUFFQXhsQyxRQUFRLENBQUNxbEMsTUFBTSxDQUFDOW5ELFdBQVcsQ0FBQyxrREFBa0QsQ0FBQzs7O01BRy9FLEdBQUcsQ0FBQ3VuRCxPQUFPLEVBQUU7O1FBRVh6MUUsS0FBSyxFQUFFMDFFLFFBQVEsQ0FBQ2h2RCxLQUFLLEVBQUUsQ0FBQ2lxQixRQUFRLENBQUNqcEIsSUFBSSxFQUFFZ3VELFFBQVEsQ0FBQzl5RCxNQUFNLEVBQUUrdEIsUUFBUSxDQUFDanBCLElBQUksRUFBRWlwQixRQUFRLENBQUNybkIsSUFBSSxDQUFDMmpELE1BQU0sQ0FBQzs7UUFFNUY3eEMsQ0FBQyxDQUFDeGxDLElBQUksQ0FBQ2dWLElBQUksQ0FBQzBvRSxNQUFNLEVBQUUsU0FBUyxDQUFDNW5FLEtBQUssRUFBRXdsRCxLQUFLLEVBQUU7VUFDMUNBLEtBQUssQ0FBQzhrQixNQUFNLENBQUM5bkQsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUN4aUIsS0FBSyxFQUFFdkssU0FBUyxFQUFFO1lBQ3BGLE9BQU8sQ0FBQ0EsU0FBUyxDQUFDbkQsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ2EsSUFBSSxDQUFDLEdBQUcsQ0FBQztVQUNwRSxDQUFDLENBQUM7Ozs7VUFJRixJQUFJdTNFLFFBQVEsRUFBRWxsQixLQUFLLENBQUN4cEMsSUFBSSxFQUFFZ3VELFFBQVEsQ0FBQzl5RCxNQUFNLEVBQUVzdUMsS0FBSyxDQUFDeHBDLElBQUksRUFBRXdwQyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDMmpELE1BQU07O1VBRXhFN3hDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUN1SixZQUFZLENBQUNubEIsS0FBSyxDQUFDOGtCLE1BQU0sRUFBRTtZQUNwQ2gxRSxHQUFHLEVBQUUsQ0FBQztZQUNOMGxCLElBQUksRUFBRTB2RCxRQUFRLEVBQUVULFFBQVEsQ0FBQ2p2RCxLQUFLLEVBQUUxbUI7VUFDbEMsQ0FBQyxDQUFDOztVQUVGLEdBQUcsQ0FBQ2t4RCxLQUFLLENBQUN4cEMsSUFBSSxJQUFJa0wsT0FBTyxDQUFDbEwsR0FBRyxFQUFFO1lBQzdCd3BDLEtBQUssQ0FBQzhrQixNQUFNLENBQUNub0QsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUNxakMsS0FBSyxDQUFDeHBDLElBQUksRUFBRWtMLE9BQU8sQ0FBQ2xMLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7VUFDN0Y7OztVQUdBNHFELFdBQVcsQ0FBQ3BoQixLQUFLLENBQUM4a0IsTUFBTSxDQUFDOzs7VUFHekI1NkMsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ3hoRCxPQUFPO1lBQ2hCNGxDLEtBQUssQ0FBQzhrQixNQUFNLEVBQUU7Y0FDWmgxRSxHQUFHLEVBQUUsQ0FBQztjQUNOMGxCLElBQUksRUFBRSxDQUFDd3FDLEtBQUssQ0FBQ3hwQyxJQUFJLEVBQUVrTCxPQUFPLENBQUNsTCxHQUFHLEVBQUUsRUFBRWd1RCxRQUFRLENBQUM5eUQsTUFBTSxFQUFFLENBQUNzdUMsS0FBSyxDQUFDeHBDLElBQUksRUFBRWtMLE9BQU8sQ0FBQ2xMLEdBQUcsRUFBRSxFQUFFd3BDLEtBQUssQ0FBQzVuQyxJQUFJLENBQUMyakQ7WUFDNUYsQ0FBQztZQUNEeGxELFFBQVE7WUFDUixTQUFTLENBQUMsRUFBRTtjQUNWeXBDLEtBQUssQ0FBQzhrQjtnQkFDSixDQUFDbGhFLEdBQUcsQ0FBQztrQkFDSHdoRSxTQUFTLEVBQUUsRUFBRTtrQkFDYm53RCxPQUFPLEVBQUU7Z0JBQ1gsQ0FBQztnQkFDRCxDQUFDK0gsV0FBVyxDQUFDLCtDQUErQyxDQUFDOztjQUUvRCxHQUFHLENBQUNnakMsS0FBSyxDQUFDeHBDLElBQUksSUFBSTljLElBQUksQ0FBQ3dvRSxPQUFPLEVBQUU7Z0JBQzlCeG9FLElBQUksQ0FBQ2lnQixRQUFRLENBQUMsQ0FBQztjQUNqQjtZQUNGO1VBQ0YsQ0FBQztRQUNILENBQUMsQ0FBQztNQUNKLEVBQUUsS0FBSyxHQUFHLENBQUNwRCxTQUFTLEdBQUdtTCxPQUFPLENBQUN0SixJQUFJLENBQUM4a0QsZ0JBQWdCLEVBQUU7O1FBRXBEdDdELEtBQUssRUFBRSxpQ0FBaUMsRUFBRThmLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzhrRCxnQkFBZ0I7O1FBRXZFejlCLFFBQVEsQ0FBQ3FsQyxNQUFNLENBQUNub0QsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM4aUIsUUFBUSxDQUFDanBCLElBQUksRUFBRWtMLE9BQU8sQ0FBQ2xMLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7O1FBRWpHMFQsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ3hoRCxPQUFPO1VBQ2hCcWxCLFFBQVEsQ0FBQ3FsQyxNQUFNO1VBQ2ZsakUsSUFBSTtVQUNKMlUsUUFBUTtVQUNSLFNBQVMsQ0FBQyxFQUFFO1lBQ1ZrcEIsUUFBUSxDQUFDcWxDLE1BQU0sQ0FBQzluRCxXQUFXLENBQUNwYixJQUFJLENBQUMsQ0FBQ29iLFdBQVcsQ0FBQywrQ0FBK0MsQ0FBQztVQUNoRyxDQUFDO1VBQ0Q7UUFDRixDQUFDO01BQ0g7O01BRUEsR0FBRyxDQUFDMEUsT0FBTyxDQUFDMmpELFFBQVEsRUFBRTtRQUNwQjNyRSxJQUFJLENBQUM0ckUsYUFBYSxDQUFDNWpELE9BQU8sQ0FBQztNQUM3QixFQUFFLEtBQUs7UUFDTGhvQixJQUFJLENBQUNxckUsU0FBUyxDQUFDcmpELE9BQU8sQ0FBQztNQUN6Qjs7TUFFQWhvQixJQUFJLENBQUM4aUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDOzs7Ozs7SUFNRG9JLFdBQVcsRUFBRSxTQUFTLENBQUNwdUQsR0FBRyxFQUFFO01BQzFCLElBQUk5YyxLQUFLLEVBQUUsSUFBSTtRQUNib3JFLE1BQU07UUFDTnRxRSxLQUFLOztNQUVQQSxNQUFNLEVBQUVnYyxJQUFJLEVBQUU5YyxJQUFJLENBQUN1MEQsS0FBSyxDQUFDaHFFLE1BQU07TUFDL0J1VyxNQUFNLEVBQUVBLE1BQU0sRUFBRSxFQUFFLEVBQUVkLElBQUksQ0FBQ3UwRCxLQUFLLENBQUNocUUsT0FBTyxFQUFFdVcsTUFBTSxFQUFFQSxLQUFLOztNQUVyRCxHQUFHLENBQUMsQ0FBQ2QsSUFBSSxDQUFDMG9FLE1BQU0sQ0FBQzVyRCxHQUFHLEVBQUUsR0FBRzljLElBQUksQ0FBQ3UwRCxLQUFLLENBQUN6ekQsS0FBSyxDQUFDLEVBQUU7UUFDMUNzcUUsT0FBTyxFQUFFNTZDLENBQUMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDOVosUUFBUSxDQUFDMVcsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQ2tCLEtBQUssQ0FBQzs7UUFFM0VwcUUsSUFBSSxDQUFDMG9FLE1BQU0sQ0FBQzVyRCxHQUFHLEVBQUUsRUFBRTBULENBQUMsQ0FBQzFrQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFa1UsSUFBSSxDQUFDdTBELEtBQUssQ0FBQ3p6RCxLQUFLLENBQUMsRUFBRTtVQUN2RGdjLEdBQUcsRUFBRUEsR0FBRztVQUNSc3VELE1BQU0sRUFBRUEsTUFBTTtVQUNkTyxRQUFRLEVBQUU7UUFDWixDQUFDLENBQUM7O1FBRUYzckUsSUFBSSxDQUFDNnJFLFdBQVcsQ0FBQzdyRSxJQUFJLENBQUMwb0UsTUFBTSxDQUFDNXJELEdBQUcsQ0FBQyxDQUFDO01BQ3BDOztNQUVBLE9BQU85YyxJQUFJLENBQUMwb0UsTUFBTSxDQUFDNXJELEdBQUcsQ0FBQztJQUN6QixDQUFDOzs7Ozs7SUFNRGd2RCxhQUFhLEVBQUUsU0FBUyxDQUFDcHlDLENBQUMsRUFBRUosQ0FBQyxFQUFFemMsUUFBUSxFQUFFO01BQ3ZDLElBQUk3YyxLQUFLLEVBQUUsSUFBSTtRQUNiZ29CLFFBQVEsRUFBRWhvQixJQUFJLENBQUNnb0IsT0FBTztRQUN0QitqRCxTQUFTLEVBQUUvakQsT0FBTyxDQUFDK2pELFFBQVE7UUFDM0JDLFlBQVksRUFBRXg3QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDb0osWUFBWSxDQUFDdGpELE9BQU8sQ0FBQ29qRCxNQUFNLENBQUMsQ0FBQ3B6RCxLQUFLO1FBQzNEaTBELGFBQWEsRUFBRXo3QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDb0osWUFBWSxDQUFDdGpELE9BQU8sQ0FBQ29qRCxNQUFNLENBQUMsQ0FBQ2h0RCxNQUFNO1FBQzdEOHRELFlBQVksRUFBRWxrRCxPQUFPLENBQUNoUSxLQUFLO1FBQzNCbTBELGFBQWEsRUFBRW5rRCxPQUFPLENBQUM1SixNQUFNO1FBQzdCZ3VELE1BQU07UUFDTkMsSUFBSTtRQUNKQyxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsTUFBTTs7TUFFUixHQUFHLENBQUN4c0UsSUFBSSxDQUFDaXJFLFlBQVksR0FBR2pyRSxJQUFJLENBQUM2cUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDa0IsU0FBUyxHQUFHLENBQUMsQ0FBQy9qRCxPQUFPLENBQUN2L0IsS0FBSyxHQUFHLFFBQVEsR0FBR3UvQixPQUFPLENBQUMyakQsU0FBUyxHQUFHLENBQUMzakQsT0FBTyxDQUFDeWtELFFBQVEsQ0FBQyxFQUFFO1FBQzFILE1BQU07TUFDUjs7TUFFQXpzRSxJQUFJLENBQUNpckUsWUFBWSxFQUFFLElBQUk7O01BRXZCejZDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUMvNEQsSUFBSSxDQUFDNGlFLFFBQVEsQ0FBQzs7TUFFekJyeUMsRUFBRSxFQUFFQSxFQUFFLElBQUlqdEMsVUFBVSxFQUFFdS9FLFlBQVksRUFBRSxJQUFJLEVBQUV0eUMsQ0FBQztNQUMzQ0osRUFBRSxFQUFFQSxFQUFFLElBQUk3c0MsVUFBVSxFQUFFdy9FLGFBQWEsRUFBRSxJQUFJLEVBQUUzeUMsQ0FBQzs7TUFFNUM4eUMsT0FBTyxFQUFFNTdDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNvSixZQUFZLENBQUNTLFFBQVEsQ0FBQzs7TUFFMUNLLE1BQU0sQ0FBQ2gyRSxJQUFJLEdBQUdvNkIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ3RqRCxPQUFPLENBQUNvakQsTUFBTSxDQUFDLENBQUNoMUUsR0FBRztNQUN6RGcyRSxNQUFNLENBQUN0d0QsS0FBSyxHQUFHMFUsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ3RqRCxPQUFPLENBQUNvakQsTUFBTSxDQUFDLENBQUN0dkQsSUFBSTs7TUFFM0R5d0QsT0FBTyxFQUFFTCxZQUFZLEVBQUVFLE1BQU0sQ0FBQ3AwRCxLQUFLO01BQ25DdzBELE9BQU8sRUFBRUwsYUFBYSxFQUFFQyxNQUFNLENBQUNodUQsTUFBTTs7O01BR3JDaXVELEtBQUssRUFBRUwsWUFBWSxFQUFFLElBQUksRUFBRUUsWUFBWSxFQUFFLEdBQUc7TUFDNUNJLEtBQUssRUFBRUwsYUFBYSxFQUFFLElBQUksRUFBRUUsYUFBYSxFQUFFLEdBQUc7OztNQUc5QyxHQUFHLENBQUNELFlBQVksRUFBRUYsV0FBVyxFQUFFO1FBQzdCSyxLQUFLLEVBQUVELE1BQU0sQ0FBQ3R3RCxLQUFLLEVBQUV5d0QsT0FBTyxFQUFFLENBQUM3eUMsRUFBRSxFQUFFNnlDLE9BQU8sRUFBRTd5QyxDQUFDLENBQUM7O1FBRTlDLEdBQUcsQ0FBQzJ5QyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1VBQ1pBLEtBQUssRUFBRSxDQUFDO1FBQ1Y7O1FBRUEsR0FBRyxDQUFDQSxLQUFLLEVBQUVMLFlBQVksRUFBRUUsV0FBVyxFQUFFO1VBQ3BDRyxLQUFLLEVBQUVMLFlBQVksRUFBRUUsV0FBVztRQUNsQztNQUNGOztNQUVBLEdBQUcsQ0FBQ0MsYUFBYSxFQUFFRixZQUFZLEVBQUU7UUFDL0JLLEtBQUssRUFBRUYsTUFBTSxDQUFDaDJFLElBQUksRUFBRW8yRSxPQUFPLEVBQUUsQ0FBQ2x6QyxFQUFFLEVBQUVrekMsT0FBTyxFQUFFbHpDLENBQUMsQ0FBQzs7UUFFN0MsR0FBRyxDQUFDZ3pDLEtBQUssRUFBRSxDQUFDLEVBQUU7VUFDWkEsS0FBSyxFQUFFLENBQUM7UUFDVjs7UUFFQSxHQUFHLENBQUNBLEtBQUssRUFBRUwsYUFBYSxFQUFFRSxZQUFZLEVBQUU7VUFDdENHLEtBQUssRUFBRUwsYUFBYSxFQUFFRSxZQUFZO1FBQ3BDO01BQ0Y7O01BRUFuc0UsSUFBSSxDQUFDMHNFLFlBQVksQ0FBQ1IsV0FBVyxFQUFFQyxZQUFZLENBQUM7O01BRTVDMzdDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUN4aEQsT0FBTztRQUNoQnFyRCxRQUFRLEVBQUU7VUFDUjMxRSxHQUFHLEVBQUVrMkUsSUFBSTtVQUNUeHdELElBQUksRUFBRXV3RCxJQUFJO1VBQ1ZFLE1BQU0sRUFBRUEsTUFBTTtVQUNkQyxNQUFNLEVBQUVBO1FBQ1YsQ0FBQztRQUNEM3ZELFNBQVMsR0FBRyxHQUFHO1FBQ2YsU0FBUyxDQUFDLEVBQUU7VUFDVjdjLElBQUksQ0FBQ2lyRSxZQUFZLEVBQUUsS0FBSztRQUMxQjtNQUNGLENBQUM7OztNQUdELEdBQUcsQ0FBQ2pyRSxJQUFJLENBQUMyc0UsVUFBVSxHQUFHM3NFLElBQUksQ0FBQzJzRSxTQUFTLENBQUM1QyxRQUFRLEVBQUU7UUFDN0MvcEUsSUFBSSxDQUFDMnNFLFNBQVMsQ0FBQ3hqRSxJQUFJLENBQUMsQ0FBQztNQUN2QjtJQUNGLENBQUM7Ozs7O0lBS0R5akUsVUFBVSxFQUFFLFNBQVMsQ0FBQy92RCxRQUFRLEVBQUU7TUFDOUIsSUFBSTdjLEtBQUssRUFBRSxJQUFJO1FBQ2Jnb0IsUUFBUSxFQUFFaG9CLElBQUksQ0FBQ2dvQixPQUFPO1FBQ3RCK2pELFNBQVMsRUFBRS9qRCxPQUFPLENBQUMrakQsUUFBUTtRQUMzQnBnRixHQUFHOztNQUVMLEdBQUcsQ0FBQ3FVLElBQUksQ0FBQ2lyRSxZQUFZLEdBQUdqckUsSUFBSSxDQUFDNnFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQ2tCLFNBQVMsR0FBRyxDQUFDLENBQUMvakQsT0FBTyxDQUFDdi9CLEtBQUssR0FBRyxRQUFRLEdBQUd1L0IsT0FBTyxDQUFDMmpELFNBQVMsR0FBRyxDQUFDM2pELE9BQU8sQ0FBQ3lrRCxRQUFRLENBQUMsRUFBRTtRQUMxSCxNQUFNO01BQ1I7O01BRUF6c0UsSUFBSSxDQUFDaXJFLFlBQVksRUFBRSxJQUFJOztNQUV2Qno2QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDLzRELElBQUksQ0FBQzRpRSxRQUFRLENBQUM7O01BRXpCcGdGLElBQUksRUFBRXFVLElBQUksQ0FBQzZzRSxTQUFTLENBQUM3a0QsT0FBTyxDQUFDOztNQUU3QmhvQixJQUFJLENBQUMwc0UsWUFBWSxDQUFDL2dGLEdBQUcsQ0FBQ3FzQixLQUFLLEVBQUVyc0IsR0FBRyxDQUFDeXlCLE1BQU0sQ0FBQzs7TUFFeENvUyxDQUFDLENBQUMweEMsUUFBUSxDQUFDeGhELE9BQU87UUFDaEJxckQsUUFBUSxFQUFFO1VBQ1IzMUUsR0FBRyxFQUFFekssR0FBRyxDQUFDeUssR0FBRztVQUNaMGxCLElBQUksRUFBRW53QixHQUFHLENBQUNtd0IsSUFBSTtVQUNkeXdELE1BQU0sRUFBRTVnRixHQUFHLENBQUNxc0IsTUFBTSxFQUFFK3pELFFBQVEsQ0FBQy96RCxLQUFLLENBQUMsQ0FBQztVQUNwQ3cwRCxNQUFNLEVBQUU3Z0YsR0FBRyxDQUFDeXlCLE9BQU8sRUFBRTJ0RCxRQUFRLENBQUMzdEQsTUFBTSxDQUFDO1FBQ3ZDLENBQUM7UUFDRHZCLFNBQVMsR0FBRyxHQUFHO1FBQ2YsU0FBUyxDQUFDLEVBQUU7VUFDVjdjLElBQUksQ0FBQ2lyRSxZQUFZLEVBQUUsS0FBSztRQUMxQjtNQUNGLENBQUM7SUFDSCxDQUFDOzs7OztJQUtENEIsU0FBUyxFQUFFLFNBQVMsQ0FBQ3ZtQixLQUFLLEVBQUU7TUFDMUIsSUFBSXRtRCxLQUFLLEVBQUUsSUFBSTtRQUNiK3JFLFNBQVMsRUFBRXpsQixLQUFLLENBQUN5bEIsUUFBUTtRQUN6QlgsT0FBTyxFQUFFOWtCLEtBQUssQ0FBQzhrQixNQUFNO1FBQ3JCcHpELE1BQU0sRUFBRXN1QyxLQUFLLENBQUN0dUMsTUFBTSxHQUFHc3VDLEtBQUssQ0FBQzVuQyxJQUFJLENBQUMxRyxLQUFLO1FBQ3ZDb0csT0FBTyxFQUFFa29DLEtBQUssQ0FBQ2xvQyxPQUFPLEdBQUdrb0MsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ04sTUFBTTtRQUMxQ25GLFFBQVE7UUFDUmlqQyxTQUFTO1FBQ1Q0d0IsUUFBUTtRQUNSaHhCLFdBQVc7UUFDWGlzQixJQUFJLEVBQUUsQ0FBQyxDQUFDOztNQUVWLEdBQUcsQ0FBQyxDQUFDemhCLEtBQUssQ0FBQ3FsQixTQUFTLEdBQUcsQ0FBQ0ksU0FBUyxHQUFHLENBQUNBLFFBQVEsQ0FBQ3hoRixNQUFNLEVBQUU7UUFDcEQsT0FBTyxLQUFLO01BQ2Q7O01BRUEwdUIsU0FBUyxFQUFFdVgsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ3RyRSxJQUFJLENBQUNrcEUsS0FBSyxDQUFDa0IsS0FBSyxDQUFDLENBQUNweUQsS0FBSztNQUMxRGtrQyxVQUFVLEVBQUUxckIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ3RyRSxJQUFJLENBQUNrcEUsS0FBSyxDQUFDa0IsS0FBSyxDQUFDLENBQUNoc0QsTUFBTTs7TUFFNURuRixTQUFTO1FBQ1BYLFVBQVUsQ0FBQzh5RCxNQUFNLENBQUNsaEUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ3RDb08sVUFBVSxDQUFDOHlELE1BQU0sQ0FBQ2xoRSxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDdkNvTyxVQUFVLENBQUN5ekQsUUFBUSxDQUFDN2hFLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUN2Q29PLFVBQVUsQ0FBQ3l6RCxRQUFRLENBQUM3aEUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDOztNQUV6Q2d5QyxVQUFVO1FBQ1I1akMsVUFBVSxDQUFDOHlELE1BQU0sQ0FBQ2xoRSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDckNvTyxVQUFVLENBQUM4eUQsTUFBTSxDQUFDbGhFLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUN4Q29PLFVBQVUsQ0FBQ3l6RCxRQUFRLENBQUM3aEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ3RDb08sVUFBVSxDQUFDeXpELFFBQVEsQ0FBQzdoRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7O01BRTFDLEdBQUcsQ0FBQyxDQUFDOE4sTUFBTSxHQUFHLENBQUNvRyxNQUFNLEVBQUU7UUFDckJwRyxNQUFNLEVBQUVpQixRQUFRO1FBQ2hCbUYsT0FBTyxFQUFFODlCLFNBQVM7TUFDcEI7O01BRUE0d0IsU0FBUyxFQUFFbmdGLElBQUksQ0FBQzh2QyxHQUFHLENBQUMsQ0FBQyxFQUFFeGpCLFNBQVMsRUFBRWpCLEtBQUssRUFBRWtrQyxVQUFVLEVBQUU5OUIsTUFBTSxDQUFDOztNQUU1RHBHLE1BQU0sRUFBRTgwRCxTQUFTLEVBQUU5MEQsS0FBSztNQUN4Qm9HLE9BQU8sRUFBRTB1RCxTQUFTLEVBQUUxdUQsTUFBTTs7O01BRzFCLEdBQUcsQ0FBQ3BHLE1BQU0sRUFBRWlCLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDMUJqQixNQUFNLEVBQUVpQixRQUFRO01BQ2xCOztNQUVBLEdBQUcsQ0FBQ21GLE9BQU8sRUFBRTg5QixVQUFVLEVBQUUsR0FBRyxFQUFFO1FBQzVCOTlCLE9BQU8sRUFBRTg5QixTQUFTO01BQ3BCOztNQUVBLEdBQUcsQ0FBQ29LLEtBQUssQ0FBQzc5RCxLQUFLLElBQUksT0FBTyxFQUFFO1FBQzFCcy9FLEdBQUcsQ0FBQzN4RSxJQUFJLEVBQUV6SixJQUFJLENBQUNxdUMsS0FBSyxDQUFDLENBQUNraEIsVUFBVSxFQUFFOTlCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFOUYsVUFBVSxDQUFDOHlELE1BQU0sQ0FBQ2xoRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkY2OUQsR0FBRyxDQUFDanNELEtBQUssRUFBRW52QixJQUFJLENBQUNxdUMsS0FBSyxDQUFDLENBQUMvaEIsU0FBUyxFQUFFakIsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUVNLFVBQVUsQ0FBQzh5RCxNQUFNLENBQUNsaEUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO01BQ3pGLEVBQUUsS0FBSyxHQUFHLENBQUNvOEMsS0FBSyxDQUFDejlCLFlBQVksSUFBSSxPQUFPLEVBQUU7OztRQUd4Q2l6QixZQUFZLEVBQUV3SyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDMUcsTUFBTSxHQUFHc3VDLEtBQUssQ0FBQzVuQyxJQUFJLENBQUNOLE9BQU8sRUFBRXBHLE1BQU0sRUFBRW9HLE9BQU8sRUFBRWtvQyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDcXVELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQzs7UUFFakcsR0FBRyxDQUFDM3VELE9BQU8sRUFBRXBHLE1BQU0sRUFBRThqQyxXQUFXLEVBQUU7VUFDaEMxOUIsT0FBTyxFQUFFcEcsTUFBTSxFQUFFOGpDLFdBQVc7UUFDOUIsRUFBRSxLQUFLLEdBQUcsQ0FBQzlqQyxNQUFNLEVBQUVvRyxPQUFPLEVBQUUwOUIsV0FBVyxFQUFFO1VBQ3ZDOWpDLE1BQU0sRUFBRW9HLE9BQU8sRUFBRTA5QixXQUFXO1FBQzlCO01BQ0Y7O01BRUFpc0IsR0FBRyxDQUFDL3ZELE1BQU0sRUFBRUEsS0FBSztNQUNqQit2RCxHQUFHLENBQUMzcEQsT0FBTyxFQUFFQSxNQUFNOztNQUVuQixPQUFPMnBELEdBQUc7SUFDWixDQUFDOzs7OztJQUtEeGYsTUFBTSxFQUFFLFNBQVMsQ0FBQ3gxRCxDQUFDLEVBQUU7TUFDbkIsSUFBSWlOLEtBQUssRUFBRSxJQUFJOztNQUVmd3dCLENBQUMsQ0FBQ3hsQyxJQUFJLENBQUNnVixJQUFJLENBQUMwb0UsTUFBTSxFQUFFLFNBQVMsQ0FBQ2wwRSxHQUFHLEVBQUU4eEQsS0FBSyxFQUFFO1FBQ3hDdG1ELElBQUksQ0FBQzZyRSxXQUFXLENBQUN2bEIsS0FBSyxFQUFFdnpELENBQUMsQ0FBQztNQUM1QixDQUFDLENBQUM7SUFDSixDQUFDOzs7OztJQUtEODRFLFdBQVcsRUFBRSxTQUFTLENBQUN2bEIsS0FBSyxFQUFFdnpELENBQUMsRUFBRTtNQUMvQixJQUFJaU4sS0FBSyxFQUFFLElBQUk7UUFDYityRSxTQUFTLEVBQUV6bEIsTUFBTSxHQUFHQSxLQUFLLENBQUN5bEIsUUFBUTtRQUNsQy96RCxNQUFNLEVBQUVzdUMsS0FBSyxDQUFDdHVDLE1BQU0sR0FBR3N1QyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDMUcsS0FBSztRQUN2Q29HLE9BQU8sRUFBRWtvQyxLQUFLLENBQUNsb0MsT0FBTyxHQUFHa29DLEtBQUssQ0FBQzVuQyxJQUFJLENBQUNOLE1BQU07UUFDMUNndEQsT0FBTyxFQUFFOWtCLEtBQUssQ0FBQzhrQixNQUFNOzs7TUFHdkJwckUsSUFBSSxDQUFDZ3RFLGFBQWEsQ0FBQzFtQixLQUFLLENBQUM7OztNQUd6QixHQUFHLENBQUN5bEIsU0FBUyxHQUFHLENBQUMvekQsTUFBTSxHQUFHb0csT0FBTyxHQUFHa29DLEtBQUssQ0FBQ3o5QixZQUFZLElBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQ3k5QixLQUFLLENBQUNtbUIsUUFBUSxFQUFFO1FBQ3JGajhDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUMvNEQsSUFBSSxDQUFDNGlFLFFBQVEsQ0FBQzs7UUFFekJ2N0MsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ3VKLFlBQVksQ0FBQ00sUUFBUSxFQUFFL3JFLElBQUksQ0FBQzZzRSxTQUFTLENBQUN2bUIsS0FBSyxDQUFDLENBQUM7O1FBRXhELEdBQUcsQ0FBQ0EsS0FBSyxDQUFDeHBDLElBQUksSUFBSTljLElBQUksQ0FBQ3dvRSxPQUFPLEVBQUU7VUFDOUJ4b0UsSUFBSSxDQUFDaXJFLFlBQVksRUFBRSxLQUFLOztVQUV4QmpyRSxJQUFJLENBQUMwc0UsWUFBWSxDQUFDLENBQUM7UUFDckI7TUFDRjs7O01BR0Exc0UsSUFBSSxDQUFDaXRFLFlBQVksQ0FBQzNtQixLQUFLLENBQUM7O01BRXhCLEdBQUcsQ0FBQzhrQixNQUFNLENBQUM3Z0YsTUFBTSxFQUFFO1FBQ2pCNmdGLE1BQU0sQ0FBQy81RCxPQUFPLENBQUMsU0FBUyxDQUFDOztRQUV6QixHQUFHLENBQUNpMUMsS0FBSyxDQUFDeHBDLElBQUksSUFBSTljLElBQUksQ0FBQ3dvRSxPQUFPLEVBQUU7VUFDOUJ4b0UsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQ3ZHO1lBQ1QsQ0FBQzNoRSxHQUFHLENBQUNoQixJQUFJLENBQUNrcEUsS0FBSyxDQUFDZ0UsVUFBVSxDQUFDcjJFLElBQUksQ0FBQywrQkFBK0IsQ0FBQztZQUNoRSxDQUFDMHNCLFdBQVcsQ0FBQywwQkFBMEIsRUFBRTZuRCxNQUFNLENBQUMzZ0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDdXVDLGFBQWEsRUFBRW95QyxNQUFNLENBQUMzZ0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDNmpELFlBQVksQ0FBQztRQUNyRztNQUNGOztNQUVBdHVDLElBQUksQ0FBQ3FSLE9BQU8sQ0FBQyxVQUFVLEVBQUVpMUMsS0FBSyxFQUFFdnpELENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7OztJQUtEbzZFLFdBQVcsRUFBRSxTQUFTLENBQUN0d0QsUUFBUSxFQUFFO01BQy9CLElBQUk3YyxLQUFLLEVBQUUsSUFBSTtRQUNiZ29CLFFBQVEsRUFBRWhvQixJQUFJLENBQUNnb0IsT0FBTztRQUN0Qm9qRCxPQUFPLEVBQUVwakQsT0FBTyxDQUFDb2pELE1BQU07O01BRXpCLEdBQUcsQ0FBQ3ByRSxJQUFJLENBQUNnckUsVUFBVSxHQUFHLENBQUNoakQsT0FBTyxFQUFFO1FBQzlCLE1BQU07TUFDUjs7TUFFQW9qRCxNQUFNLENBQUM1ckUsUUFBUSxDQUFDLENBQUMsQ0FBQzBLLEdBQUcsQ0FBQztRQUNwQndoRSxTQUFTLEVBQUUsRUFBRTtRQUNibndELE9BQU8sRUFBRTtNQUNYLENBQUMsQ0FBQzs7TUFFRjZ2RDtRQUNFLENBQUNqeEUsTUFBTSxDQUFDO1FBQ1IsQ0FBQ29HLFFBQVEsQ0FBQztRQUNWLENBQUMraUIsV0FBVyxDQUFDLCtDQUErQyxDQUFDOztNQUUvRGtOLENBQUMsQ0FBQzB4QyxRQUFRLENBQUN4aEQsT0FBTztRQUNoQjBxRCxNQUFNLEVBQUU7VUFDTmgxRSxHQUFHLEVBQUUsQ0FBQztVQUNOMGxCLElBQUksRUFBRSxDQUFDO1VBQ1BQLE9BQU8sRUFBRTtRQUNYLENBQUM7UUFDRHNCLFNBQVMsSUFBSXB3QixVQUFVLEVBQUUsRUFBRSxFQUFFb3dCLFFBQVE7UUFDckMsU0FBUyxDQUFDLEVBQUU7O1VBRVZ1dUQsTUFBTSxDQUFDbGhFLEdBQUcsQ0FBQztZQUNUd2hFLFNBQVMsRUFBRSxFQUFFO1lBQ2Jud0QsT0FBTyxFQUFFO1VBQ1gsQ0FBQyxDQUFDOztVQUVGLEdBQUcsQ0FBQyxDQUFDeU0sT0FBTyxDQUFDdWpELFVBQVUsRUFBRTtZQUN2QnZyRSxJQUFJLENBQUNpZ0IsUUFBUSxDQUFDLENBQUM7VUFDakI7UUFDRixDQUFDO1FBQ0Q7TUFDRixDQUFDO0lBQ0gsQ0FBQzs7Ozs7SUFLRDRxRCxPQUFPLEVBQUUsU0FBUyxDQUFDdmtCLEtBQUssRUFBRTtNQUN4QixJQUFJdCtCLFFBQVEsRUFBRXMrQixNQUFNLEdBQUcsSUFBSSxDQUFDdCtCLE9BQU87UUFDakM4aUQsUUFBUTtRQUNSQyxRQUFROztNQUVWLEdBQUcsQ0FBQyxDQUFDL2lELE9BQU8sRUFBRTtRQUNaLE9BQU8sS0FBSztNQUNkOztNQUVBK2lELFNBQVMsRUFBRXY2QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDb0osWUFBWSxDQUFDLElBQUksQ0FBQ3BDLEtBQUssQ0FBQ2tCLEtBQUssQ0FBQztNQUNwRFUsU0FBUyxFQUFFdDZDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNvSixZQUFZLENBQUN0akQsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQzs7TUFFbEQsT0FBTztRQUNMLENBQUNwakQsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQ3puRCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7UUFDOUMsQ0FBQ2gzQixJQUFJLENBQUM4ckMsR0FBRyxDQUFDcXlDLFFBQVEsQ0FBQzEwRSxJQUFJLEVBQUUyMEUsUUFBUSxDQUFDMzBFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBR3pKLElBQUksQ0FBQzhyQyxHQUFHLENBQUNxeUMsUUFBUSxDQUFDaHZELEtBQUssRUFBRWl2RCxRQUFRLENBQUNqdkQsSUFBSSxFQUFFLEVBQUUsR0FBRztNQUMvRixDQUFDO0lBQ0gsQ0FBQzs7Ozs7SUFLRDR3RCxZQUFZLEVBQUUsU0FBUyxDQUFDVSxTQUFTLEVBQUVDLFVBQVUsRUFBRTtNQUM3QyxJQUFJcnRFLEtBQUssRUFBRSxJQUFJO1FBQ2Jnb0IsUUFBUSxFQUFFaG9CLElBQUksQ0FBQ2dvQixPQUFPO1FBQ3RCOGdELFdBQVcsRUFBRTlvRSxJQUFJLENBQUNrcEUsS0FBSyxDQUFDNXhELFNBQVM7UUFDakNnMkQsTUFBTTtRQUNOQyxVQUFVOztNQUVaLEdBQUcsQ0FBQyxDQUFDdmxELFFBQVEsR0FBR2hvQixJQUFJLENBQUNnckUsVUFBVSxHQUFHLENBQUNockUsSUFBSSxDQUFDd3RFLFNBQVMsRUFBRTtRQUNqRCxNQUFNO01BQ1I7O01BRUExRSxVQUFVLENBQUN4bEQsV0FBVyxDQUFDLG1HQUFtRyxDQUFDOztNQUUzSGdxRCxPQUFPLEVBQUV0dEUsSUFBSSxDQUFDc3RFLE1BQU0sQ0FBQ0YsU0FBUyxFQUFFQyxVQUFVLENBQUM7O01BRTNDRSxXQUFXLEVBQUVELE9BQU8sRUFBRSxLQUFLLEVBQUV0dEUsSUFBSSxDQUFDdXRFLFVBQVUsQ0FBQyxDQUFDOztNQUU5Q3pFLFVBQVUsQ0FBQ3ZsRCxXQUFXLENBQUMsc0JBQXNCLEVBQUVncUQsVUFBVSxDQUFDOztNQUUxRC84QyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQ3RvQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUNxbEUsVUFBVSxDQUFDOztNQUV2RCxHQUFHLENBQUNELE1BQU0sRUFBRTtRQUNWeEUsVUFBVSxDQUFDN2xELFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztNQUN6QyxFQUFFLEtBQUssR0FBRztRQUNSc3FELFdBQVc7UUFDWCxDQUFDdmxELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzJtRCxhQUFhLElBQUksT0FBTyxHQUFHLENBQUM3MEMsQ0FBQyxDQUFDcG9DLFVBQVUsQ0FBQzQvQixPQUFPLENBQUN0SixJQUFJLENBQUMybUQsWUFBWSxFQUFFLEdBQUdyOUMsT0FBTyxDQUFDdEosSUFBSSxDQUFDMm1ELFlBQVksQ0FBQ3I5QyxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUM7TUFDcEksRUFBRTtRQUNBOGdELFVBQVUsQ0FBQzdsRCxRQUFRLENBQUMscUJBQXFCLENBQUM7TUFDNUMsRUFBRSxLQUFLLEdBQUcsQ0FBQytFLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzhsRCxNQUFNLEdBQUcsQ0FBQ3g4QyxPQUFPLENBQUN0SixJQUFJLENBQUM4bEQsS0FBSyxDQUFDaHFDLFNBQVMsR0FBR3g2QixJQUFJLENBQUN1MEQsS0FBSyxDQUFDaHFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBR3k5QixPQUFPLENBQUNhLFlBQVksSUFBSSxPQUFPLEVBQUU7UUFDMUhpZ0QsVUFBVSxDQUFDN2xELFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztNQUMzQztJQUNGLENBQUM7Ozs7O0lBS0RzcUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ3RCLElBQUl2dEUsS0FBSyxFQUFFLElBQUk7UUFDYmdvQixRQUFRLEVBQUVob0IsSUFBSSxDQUFDZ29CLE9BQU87UUFDdEJ5bEQsTUFBTTs7Ozs7TUFLUixHQUFHLENBQUN6bEQsUUFBUSxHQUFHLENBQUNob0IsSUFBSSxDQUFDZ3JFLFVBQVUsR0FBR2hqRCxPQUFPLENBQUN2L0IsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDdS9CLE9BQU8sQ0FBQ3lrRCxRQUFRLEVBQUU7UUFDL0UsR0FBRyxDQUFDLENBQUN6a0QsT0FBTyxDQUFDMmpELFFBQVEsRUFBRTtVQUNyQixPQUFPLElBQUk7UUFDYjs7UUFFQThCLE9BQU8sRUFBRXp0RSxJQUFJLENBQUM2c0UsU0FBUyxDQUFDN2tELE9BQU8sQ0FBQzs7UUFFaEMsR0FBRyxDQUFDeWxELE9BQU8sR0FBRyxDQUFDemxELE9BQU8sQ0FBQ2hRLE1BQU0sRUFBRXkxRCxNQUFNLENBQUN6MUQsTUFBTSxHQUFHZ1EsT0FBTyxDQUFDNUosT0FBTyxFQUFFcXZELE1BQU0sQ0FBQ3J2RCxNQUFNLENBQUMsRUFBRTtVQUM5RSxPQUFPLElBQUk7UUFDYjtNQUNGOztNQUVBLE9BQU8sS0FBSztJQUNkLENBQUM7Ozs7O0lBS0Q4ckQsWUFBWSxFQUFFLFNBQVMsQ0FBQ2tELFNBQVMsRUFBRUMsVUFBVSxFQUFFO01BQzdDLElBQUlydEUsS0FBSyxFQUFFLElBQUk7UUFDYituRSxJQUFJLEVBQUUsS0FBSztRQUNYLy9DLFFBQVEsRUFBRWhvQixJQUFJLENBQUNnb0IsT0FBTztRQUN0QitqRCxTQUFTLEVBQUUvakQsT0FBTyxDQUFDK2pELFFBQVE7O01BRTdCLEdBQUcsQ0FBQ3FCLFVBQVUsSUFBSTNnRixVQUFVLEdBQUc0Z0YsV0FBVyxJQUFJNWdGLFNBQVMsRUFBRTtRQUN2RHM3RSxJQUFJLEVBQUVxRixVQUFVLEVBQUVwbEQsT0FBTyxDQUFDaFEsTUFBTSxHQUFHcTFELFdBQVcsRUFBRXJsRCxPQUFPLENBQUM1SixNQUFNO01BQ2hFLEVBQUUsS0FBSyxHQUFHLENBQUMydEQsUUFBUSxFQUFFO1FBQ25CaEUsSUFBSSxFQUFFdjNDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNvSixZQUFZLENBQUNTLFFBQVEsQ0FBQztRQUN2Q2hFLElBQUksRUFBRUEsR0FBRyxDQUFDL3ZELE1BQU0sRUFBRWdRLE9BQU8sQ0FBQ2hRLE1BQU0sR0FBRyt2RCxHQUFHLENBQUMzcEQsT0FBTyxFQUFFNEosT0FBTyxDQUFDNUosTUFBTTtNQUNoRTs7TUFFQSxPQUFPMnBELEdBQUc7SUFDWixDQUFDOzs7OztJQUtEdUYsTUFBTSxFQUFFLFNBQVMsQ0FBQ0YsU0FBUyxFQUFFQyxVQUFVLEVBQUU7TUFDdkMsSUFBSXJ0RSxLQUFLLEVBQUUsSUFBSTtRQUNiZ29CLFFBQVEsRUFBRWhvQixJQUFJLENBQUNnb0IsT0FBTztRQUN0QmxMLElBQUksRUFBRSxJQUFJO1FBQ1ZpckQsSUFBSSxFQUFFLEtBQUs7O01BRWIsR0FBRyxDQUFDLy9DLE9BQU8sQ0FBQ3YvQixLQUFLLElBQUksUUFBUSxHQUFHLENBQUN1L0IsT0FBTyxDQUFDdWpELFdBQVcsR0FBRyxDQUFDNkIsVUFBVSxHQUFHQyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUNybEQsT0FBTyxDQUFDeWtELFFBQVEsRUFBRTtRQUN0RzFFLElBQUksRUFBRS9uRSxJQUFJLENBQUM2c0UsU0FBUyxDQUFDN2tELE9BQU8sQ0FBQzs7UUFFN0IsR0FBRyxDQUFDb2xELFVBQVUsSUFBSTNnRixVQUFVLEdBQUc0Z0YsV0FBVyxJQUFJNWdGLFNBQVMsRUFBRTtVQUN2RHF3QixJQUFJLEVBQUU7WUFDSjlFLEtBQUssRUFBRW8xRCxTQUFTO1lBQ2hCaHZELE1BQU0sRUFBRWl2RDtVQUNWLENBQUM7UUFDSCxFQUFFLEtBQUssR0FBRyxDQUFDcmxELE9BQU8sQ0FBQ3VqRCxVQUFVLEVBQUU7VUFDN0J6dUQsSUFBSSxFQUFFMFQsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ3RqRCxPQUFPLENBQUMrakQsUUFBUSxDQUFDO1FBQ2pEOztRQUVBLEdBQUcsQ0FBQ2p2RCxJQUFJLEdBQUdpckQsR0FBRyxFQUFFO1VBQ2RBLElBQUksRUFBRXA3RSxJQUFJLENBQUM4ckMsR0FBRyxDQUFDM2IsR0FBRyxDQUFDOUUsTUFBTSxFQUFFK3ZELEdBQUcsQ0FBQy92RCxLQUFLLEVBQUUsRUFBRSxJQUFJLEdBQUdyckIsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQzNiLEdBQUcsQ0FBQ3NCLE9BQU8sRUFBRTJwRCxHQUFHLENBQUMzcEQsTUFBTSxFQUFFLEVBQUUsR0FBRztRQUN4RjtNQUNGOztNQUVBLE9BQU8ycEQsR0FBRztJQUNaLENBQUM7Ozs7O0lBS0RzRCxTQUFTLEVBQUUsU0FBUyxDQUFDL2tCLEtBQUssRUFBRTtNQUMxQixJQUFJdG1ELEtBQUssRUFBRSxJQUFJO1FBQ2J2WCxJQUFJO1FBQ0oyaUYsTUFBTTtRQUNOc0MsUUFBUTs7TUFFVixHQUFHLENBQUNwbkIsS0FBSyxDQUFDcW5CLFVBQVUsR0FBR3JuQixLQUFLLENBQUNxbEIsUUFBUSxFQUFFO1FBQ3JDLE1BQU07TUFDUjs7TUFFQXJsQixLQUFLLENBQUNxbkIsVUFBVSxFQUFFLElBQUk7O01BRXRCLEdBQUcsQ0FBQzN0RSxJQUFJLENBQUNxUixPQUFPLENBQUMsWUFBWSxFQUFFaTFDLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRTtRQUMvQ0EsS0FBSyxDQUFDcW5CLFVBQVUsRUFBRSxLQUFLOztRQUV2QixPQUFPLEtBQUs7TUFDZDs7TUFFQWxsRixLQUFLLEVBQUU2OUQsS0FBSyxDQUFDNzlELElBQUk7TUFDakIyaUYsT0FBTyxFQUFFOWtCLEtBQUssQ0FBQzhrQixNQUFNOztNQUVyQkE7UUFDRSxDQUFDNzhELEdBQUcsQ0FBQyxTQUFTO1FBQ2QsQ0FBQzhDLE9BQU8sQ0FBQyxTQUFTO1FBQ2xCLENBQUM0UixRQUFRLENBQUNxakMsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ2dsRCxVQUFVLENBQUM7OztNQUdsQyxPQUFPLENBQUNqN0UsSUFBSSxFQUFFO1FBQ1osS0FBSyxPQUFPO1VBQ1Z1WCxJQUFJLENBQUM0dEUsUUFBUSxDQUFDdG5CLEtBQUssQ0FBQzs7VUFFcEIsS0FBSzs7UUFFUCxLQUFLLFFBQVE7VUFDWHRtRCxJQUFJLENBQUM2dEUsU0FBUyxDQUFDdm5CLEtBQUssQ0FBQzs7VUFFckIsS0FBSzs7UUFFUCxLQUFLLE1BQU07VUFDVHRtRCxJQUFJLENBQUM4dEUsVUFBVSxDQUFDeG5CLEtBQUssRUFBRUEsS0FBSyxDQUFDNTlELElBQUksR0FBRzQ5RCxLQUFLLENBQUM3a0QsT0FBTyxDQUFDOztVQUVsRCxLQUFLOztRQUVQLEtBQUssT0FBTztVQUNWekIsSUFBSSxDQUFDOHRFLFVBQVU7WUFDYnhuQixLQUFLO1lBQ0xBLEtBQUssQ0FBQzVuQyxJQUFJLENBQUN3a0QsS0FBSyxDQUFDRjtZQUNqQixDQUFDbjJFLE9BQU8sQ0FBQyxlQUFlLEVBQUV5NUQsS0FBSyxDQUFDNTlELEdBQUc7WUFDbkMsQ0FBQ21FLE9BQU8sQ0FBQyxZQUFZLEVBQUV5NUQsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ3F2RCxZQUFZLEdBQUd6bkIsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ3drRCxLQUFLLENBQUNuWCxPQUFPLEdBQUcsRUFBRTtZQUM5RSxDQUFDbC9ELE9BQU8sQ0FBQyxZQUFZLEVBQUV5NUQsS0FBSyxDQUFDc2pCLE1BQU0sR0FBRyxFQUFFO1VBQzFDLENBQUM7O1VBRUQsS0FBSzs7UUFFUCxLQUFLLFFBQVE7VUFDWCxHQUFHLENBQUNwNUMsQ0FBQyxDQUFDODFCLEtBQUssQ0FBQzU5RCxHQUFHLENBQUMsQ0FBQzZCLE1BQU0sRUFBRTtZQUN2QnlWLElBQUksQ0FBQzh0RSxVQUFVLENBQUN4bkIsS0FBSyxFQUFFOTFCLENBQUMsQ0FBQzgxQixLQUFLLENBQUM1OUQsR0FBRyxDQUFDLENBQUM7VUFDdEMsRUFBRSxLQUFLO1lBQ0xzWCxJQUFJLENBQUNndUUsUUFBUSxDQUFDMW5CLEtBQUssQ0FBQztVQUN0Qjs7VUFFQSxLQUFLOztRQUVQLEtBQUssTUFBTTtVQUNUdG1ELElBQUksQ0FBQ2l1RSxXQUFXLENBQUMzbkIsS0FBSyxDQUFDOztVQUV2Qm9uQixTQUFTLEVBQUVsOUMsQ0FBQyxDQUFDcEgsSUFBSTtZQUNmb0gsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRXc2RCxLQUFLLENBQUM1bkMsSUFBSSxDQUFDMEssSUFBSSxDQUFDSCxRQUFRLEVBQUU7Y0FDckNULEdBQUcsRUFBRTg5QixLQUFLLENBQUM1OUQsR0FBRztjQUNkdWlDLE9BQU8sRUFBRSxTQUFTLENBQUNoakIsSUFBSSxFQUFFaW1FLFVBQVUsRUFBRTtnQkFDbkMsR0FBRyxDQUFDQSxXQUFXLElBQUksU0FBUyxFQUFFO2tCQUM1Qmx1RSxJQUFJLENBQUM4dEUsVUFBVSxDQUFDeG5CLEtBQUssRUFBRXIrQyxJQUFJLENBQUM7Z0JBQzlCO2NBQ0YsQ0FBQztjQUNEbGIsS0FBSyxFQUFFLFNBQVMsQ0FBQzQ1QixLQUFLLEVBQUV1bkQsVUFBVSxFQUFFO2dCQUNsQyxHQUFHLENBQUN2bkQsTUFBTSxHQUFHdW5ELFdBQVcsSUFBSSxPQUFPLEVBQUU7a0JBQ25DbHVFLElBQUksQ0FBQ2d1RSxRQUFRLENBQUMxbkIsS0FBSyxDQUFDO2dCQUN0QjtjQUNGO1lBQ0YsQ0FBQztVQUNILENBQUM7O1VBRUQ4a0IsTUFBTSxDQUFDaDlELEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDaENzL0QsUUFBUSxDQUFDbGpELEtBQUssQ0FBQyxDQUFDO1VBQ2xCLENBQUMsQ0FBQzs7VUFFRixLQUFLOztRQUVQLE9BQU87VUFDTHhxQixJQUFJLENBQUNndUUsUUFBUSxDQUFDMW5CLEtBQUssQ0FBQzs7VUFFcEIsS0FBSztNQUNUOztNQUVBLE9BQU8sSUFBSTtJQUNiLENBQUM7Ozs7O0lBS0RzbkIsUUFBUSxFQUFFLFNBQVMsQ0FBQ3RuQixLQUFLLEVBQUU7TUFDekIsSUFBSXRtRCxLQUFLLEVBQUUsSUFBSTtRQUNiZzhDLEtBQUs7OztNQUdQejJDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNyQixJQUFJNG9FLEtBQUssRUFBRTduQixLQUFLLENBQUM4bkIsTUFBTTs7UUFFdkIsR0FBRyxDQUFDLENBQUNwdUUsSUFBSSxDQUFDZ3JFLFVBQVUsR0FBRzFrQixLQUFLLENBQUNxbkIsVUFBVSxHQUFHLENBQUMsQ0FBQ1EsS0FBSyxHQUFHLENBQUNBLElBQUksQ0FBQzVqRixPQUFPLEdBQUcsQ0FBQzRqRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNsdUQsUUFBUSxFQUFFLEdBQUcsQ0FBQ3FtQyxLQUFLLENBQUNtbUIsUUFBUSxFQUFFO1VBQ3pHenNFLElBQUksQ0FBQ2l1RSxXQUFXLENBQUMzbkIsS0FBSyxDQUFDO1FBQ3pCO01BQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7O01BR050bUQsSUFBSSxDQUFDcXVFLFdBQVcsQ0FBQy9uQixLQUFLLENBQUM7OztNQUd2QkEsS0FBSyxDQUFDeWxCLFNBQVMsRUFBRXY3QyxDQUFDLENBQUMsc0NBQXNDO1FBQ3ZELENBQUN2TixRQUFRLENBQUMsb0JBQW9CO1FBQzlCLENBQUN2TSxRQUFRLENBQUM0dkMsS0FBSyxDQUFDOGtCLE1BQU0sQ0FBQ25vRCxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQzs7OztNQUkzRCxHQUFHLENBQUNxakMsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ29rRCxRQUFRLElBQUksTUFBTSxHQUFHeGMsS0FBSyxDQUFDNW5DLElBQUksQ0FBQzFHLE1BQU0sR0FBR3N1QyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDTixPQUFPLEdBQUdrb0MsS0FBSyxDQUFDc2pCLEtBQUssRUFBRTtRQUN4RnRqQixLQUFLLENBQUN0dUMsTUFBTSxFQUFFc3VDLEtBQUssQ0FBQzVuQyxJQUFJLENBQUMxRyxLQUFLO1FBQzlCc3VDLEtBQUssQ0FBQ2xvQyxPQUFPLEVBQUVrb0MsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ04sTUFBTTs7UUFFaEM0OUIsTUFBTSxFQUFFajFELFFBQVEsQ0FBQ3FDLGFBQWEsQ0FBQyxLQUFLLENBQUM7O1FBRXJDNHlELEtBQUssQ0FBQ3h2QixRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7VUFDMUJnRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMvdEIsTUFBTSxDQUFDLENBQUM7O1VBRWhCNmpELEtBQUssQ0FBQ2dvQixPQUFPLEVBQUUsSUFBSTtRQUNyQixDQUFDOztRQUVEdHlCLEtBQUssQ0FBQ3p2QixPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7VUFDekJ2c0IsSUFBSSxDQUFDZ2xFLFNBQVMsQ0FBQzFlLEtBQUssQ0FBQztRQUN2QixDQUFDOztRQUVEQSxLQUFLLENBQUNnb0IsT0FBTyxFQUFFOTlDLENBQUMsQ0FBQ3dyQixLQUFLO1VBQ3BCLENBQUMvNEIsUUFBUSxDQUFDLGdCQUFnQjtVQUMxQixDQUFDdk0sUUFBUSxDQUFDNHZDLEtBQUssQ0FBQ3lsQixRQUFRO1VBQ3hCLENBQUMzekUsSUFBSSxDQUFDLEtBQUssRUFBRWt1RCxLQUFLLENBQUNzakIsS0FBSyxDQUFDO01BQzdCOzs7TUFHQTVwRSxJQUFJLENBQUN1dUUsV0FBVyxDQUFDam9CLEtBQUssQ0FBQztJQUN6QixDQUFDOzs7O0lBSUQrbkIsV0FBVyxFQUFFLFNBQVMsQ0FBQy9uQixLQUFLLEVBQUU7TUFDNUIsSUFBSWtvQixPQUFPLEVBQUVsb0IsS0FBSyxDQUFDNW5DLElBQUksQ0FBQzh2RCxPQUFPLEdBQUdsb0IsS0FBSyxDQUFDNW5DLElBQUksQ0FBQzdpQixLQUFLLENBQUMyeUUsTUFBTTtRQUN2RGpGLEtBQUs7UUFDTC9yRSxJQUFJO1FBQ0ppeEUsT0FBTztRQUNQQyxXQUFXOzs7OztNQUtiLEdBQUcsQ0FBQ0YsTUFBTSxFQUFFO1FBQ1ZDLFFBQVEsRUFBRXZuRixNQUFNLENBQUN5bkYsaUJBQWlCLEdBQUcsQ0FBQztRQUN0Q0QsWUFBWSxFQUFFeG5GLE1BQU0sQ0FBQzY0QyxXQUFXLEVBQUUwdUMsT0FBTzs7UUFFekNqeEUsS0FBSyxFQUFFZ3hFLE1BQU0sQ0FBQ2xnRixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNwRCxHQUFHLENBQUMsU0FBUyxDQUFDMkosRUFBRSxFQUFFO1VBQ3pDLElBQUloSyxJQUFJLEVBQUUsQ0FBQyxDQUFDOztVQUVaZ0ssRUFBRSxDQUFDdEgsSUFBSSxDQUFDO1lBQ04sQ0FBQ2UsS0FBSyxDQUFDLEtBQUs7WUFDWixDQUFDNjZFLE9BQU8sQ0FBQyxTQUFTLENBQUN0MEUsRUFBRSxFQUFFNUwsQ0FBQyxFQUFFO2NBQ3hCLElBQUlpRixNQUFNLEVBQUUyMEIsUUFBUSxDQUFDaHVCLEVBQUUsQ0FBQzhzQyxTQUFTLENBQUMsQ0FBQyxFQUFFOXNDLEVBQUUsQ0FBQ3RLLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7O2NBRXhELEdBQUcsQ0FBQ3RCLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDNEIsR0FBRyxDQUFDMjlCLElBQUksRUFBRTN6QixFQUFFLENBQUM7Y0FDdkI7O2NBRUEsR0FBRyxDQUFDM0csS0FBSyxFQUFFO2dCQUNUckQsR0FBRyxDQUFDcUQsTUFBTSxFQUFFQSxLQUFLO2dCQUNqQnJELEdBQUcsQ0FBQytqRixRQUFRLEVBQUUvNUUsRUFBRSxDQUFDQSxFQUFFLENBQUN0SyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2NBQ2pDO1lBQ0YsQ0FBQyxDQUFDOztVQUVKLE9BQU9NLEdBQUc7UUFDWixDQUFDLENBQUM7OztRQUdGMlMsSUFBSSxDQUFDNVIsSUFBSSxDQUFDLFNBQVMsQ0FBQ3NFLENBQUMsRUFBRUMsQ0FBQyxFQUFFO1VBQ3hCLE9BQU9ELENBQUMsQ0FBQ2hDLE1BQU0sRUFBRWlDLENBQUMsQ0FBQ2pDLEtBQUs7UUFDMUIsQ0FBQyxDQUFDOzs7UUFHRixJQUFJLENBQUMsSUFBSXhDLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRThSLElBQUksQ0FBQ2pULE1BQU0sRUFBRW1CLENBQUMsRUFBRSxFQUFFO1VBQ3BDLElBQUltSixHQUFHLEVBQUUySSxJQUFJLENBQUM5UixDQUFDLENBQUM7O1VBRWhCLEdBQUcsQ0FBQyxDQUFDbUosRUFBRSxDQUFDKzVFLFFBQVEsSUFBSSxJQUFJLEdBQUcvNUUsRUFBRSxDQUFDM0csTUFBTSxHQUFHd2dGLFdBQVcsRUFBRSxHQUFHLENBQUM3NUUsRUFBRSxDQUFDKzVFLFFBQVEsSUFBSSxJQUFJLEdBQUcvNUUsRUFBRSxDQUFDM0csTUFBTSxHQUFHdWdGLE9BQU8sQ0FBQyxFQUFFO1lBQ2xHbEYsTUFBTSxFQUFFMTBFLEVBQUU7WUFDVixLQUFLO1VBQ1A7UUFDRjs7O1FBR0EsR0FBRyxDQUFDLENBQUMwMEUsTUFBTSxHQUFHL3JFLElBQUksQ0FBQ2pULE1BQU0sRUFBRTtVQUN6QmcvRSxNQUFNLEVBQUUvckUsSUFBSSxDQUFDQSxJQUFJLENBQUNqVCxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9COztRQUVBLEdBQUcsQ0FBQ2cvRSxLQUFLLEVBQUU7VUFDVGpqQixLQUFLLENBQUM1OUQsSUFBSSxFQUFFNmdGLEtBQUssQ0FBQy9nRCxHQUFHOzs7VUFHckIsR0FBRyxDQUFDODlCLEtBQUssQ0FBQ3R1QyxNQUFNLEdBQUdzdUMsS0FBSyxDQUFDbG9DLE9BQU8sR0FBR21yRCxLQUFLLENBQUNxRixRQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ3ZEdG9CLEtBQUssQ0FBQ2xvQyxPQUFPLEVBQUUsQ0FBQ2tvQyxLQUFLLENBQUN0dUMsTUFBTSxFQUFFc3VDLEtBQUssQ0FBQ2xvQyxNQUFNLEVBQUUsRUFBRW1yRCxLQUFLLENBQUNyN0UsS0FBSztZQUN6RG80RCxLQUFLLENBQUN0dUMsTUFBTSxFQUFFdXhELEtBQUssQ0FBQ3I3RSxLQUFLO1VBQzNCOztVQUVBbzRELEtBQUssQ0FBQzVuQyxJQUFJLENBQUM4dkQsT0FBTyxFQUFFQSxNQUFNO1FBQzVCO01BQ0Y7SUFDRixDQUFDOzs7OztJQUtERCxXQUFXLEVBQUUsU0FBUyxDQUFDam9CLEtBQUssRUFBRTtNQUM1QixJQUFJdG1ELEtBQUssRUFBRSxJQUFJO1FBQ2I2dUUsSUFBSSxFQUFFOW5GLFFBQVEsQ0FBQ3FDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDbkMra0YsS0FBSyxFQUFFMzlDLENBQUMsQ0FBQ3ErQyxHQUFHLENBQUM7O01BRWZ2b0IsS0FBSyxDQUFDOG5CLE9BQU8sRUFBRUQ7UUFDYixDQUFDLy9ELEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7VUFDeEJwTyxJQUFJLENBQUNndUUsUUFBUSxDQUFDMW5CLEtBQUssQ0FBQztRQUN0QixDQUFDO1FBQ0QsQ0FBQ2w0QyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1VBQ3ZCLElBQUkwZ0UsS0FBSzs7VUFFVCxHQUFHLENBQUMsQ0FBQ3hvQixLQUFLLENBQUNnb0IsTUFBTSxFQUFFO1lBQ2pCdHVFLElBQUksQ0FBQyt1RSxxQkFBcUIsQ0FBQ3pvQixLQUFLLEVBQUUsSUFBSSxDQUFDMG9CLFlBQVksRUFBRSxJQUFJLENBQUNDLGFBQWEsQ0FBQzs7WUFFeEVqdkUsSUFBSSxDQUFDZ2xFLFNBQVMsQ0FBQzFlLEtBQUssQ0FBQztVQUN2Qjs7VUFFQSxHQUFHLENBQUN0bUQsSUFBSSxDQUFDZ3JFLFNBQVMsRUFBRTtZQUNsQixNQUFNO1VBQ1I7O1VBRUEsR0FBRyxDQUFDMWtCLEtBQUssQ0FBQzVuQyxJQUFJLENBQUM4dkQsTUFBTSxFQUFFO1lBQ3JCTSxNQUFNLEVBQUV4b0IsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ293RCxLQUFLOztZQUV4QixHQUFHLENBQUMsQ0FBQ0EsTUFBTSxHQUFHQSxNQUFNLElBQUksTUFBTSxFQUFFO2NBQzlCQSxNQUFNO2dCQUNKLENBQUN4b0IsS0FBSyxDQUFDdHVDLE1BQU0sRUFBRXN1QyxLQUFLLENBQUNsb0MsT0FBTyxFQUFFLEVBQUUsR0FBR3FvRCxFQUFFLENBQUN6dUQsS0FBSyxDQUFDLEVBQUUsRUFBRXl1RCxFQUFFLENBQUNyb0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFenhCLElBQUksQ0FBQzByQixLQUFLLENBQUMsQ0FBQ2l1QyxLQUFLLENBQUN0dUMsTUFBTSxFQUFFc3VDLEtBQUssQ0FBQ2xvQyxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDMUgsSUFBSTtZQUNSOztZQUVBK3ZELElBQUksQ0FBQy8xRSxJQUFJLENBQUMsT0FBTyxFQUFFMDJFLEtBQUssQ0FBQyxDQUFDMTJFLElBQUksQ0FBQyxRQUFRLEVBQUVrdUQsS0FBSyxDQUFDNW5DLElBQUksQ0FBQzh2RCxNQUFNLENBQUM7VUFDN0Q7OztVQUdBLEdBQUcsQ0FBQ2xvQixLQUFLLENBQUNnb0IsTUFBTSxFQUFFO1lBQ2hCL29FLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtjQUNyQixHQUFHLENBQUMrZ0QsS0FBSyxDQUFDZ29CLE9BQU8sR0FBRyxDQUFDdHVFLElBQUksQ0FBQ2dyRSxTQUFTLEVBQUU7Z0JBQ25DMWtCLEtBQUssQ0FBQ2dvQixNQUFNLENBQUNoakUsSUFBSSxDQUFDLENBQUM7Y0FDckI7WUFDRixDQUFDLEVBQUUzZSxJQUFJLENBQUM4dkMsR0FBRyxDQUFDLEdBQUcsRUFBRTl2QyxJQUFJLENBQUM0dEIsR0FBRyxDQUFDLElBQUksRUFBRStyQyxLQUFLLENBQUNsb0MsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7VUFDeEQ7O1VBRUFwZSxJQUFJLENBQUNrdkUsV0FBVyxDQUFDNW9CLEtBQUssQ0FBQztRQUN6QixDQUFDO1FBQ0QsQ0FBQ3JqQyxRQUFRLENBQUMsZ0JBQWdCO1FBQzFCLENBQUM3cUIsSUFBSSxDQUFDLEtBQUssRUFBRWt1RCxLQUFLLENBQUM1OUQsR0FBRztRQUN0QixDQUFDZ3VCLFFBQVEsQ0FBQzR2QyxLQUFLLENBQUN5bEIsUUFBUSxDQUFDOztNQUUzQixHQUFHLENBQUMsQ0FBQzhDLEdBQUcsQ0FBQzV1RCxTQUFTLEdBQUc0dUQsR0FBRyxDQUFDbG9FLFdBQVcsR0FBRyxVQUFVLEVBQUUsR0FBR3duRSxJQUFJLENBQUNhLGFBQWEsR0FBR2IsSUFBSSxDQUFDYyxhQUFhLEVBQUU7UUFDN0ZkLElBQUksQ0FBQzk4RCxPQUFPLENBQUMsTUFBTSxDQUFDO01BQ3RCLEVBQUUsS0FBSyxHQUFHLENBQUN3OUQsR0FBRyxDQUFDOWhGLEtBQUssRUFBRTtRQUNwQm9oRixJQUFJLENBQUM5OEQsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUN2QjtJQUNGLENBQUM7Ozs7O0lBS0QwOUQscUJBQXFCLEVBQUUsU0FBUyxDQUFDem9CLEtBQUssRUFBRTZvQixRQUFRLEVBQUVDLFNBQVMsRUFBRTtNQUMzRCxJQUFJbjJELFNBQVMsRUFBRTRKLFFBQVEsQ0FBQ3lqQyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDMUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMzQ2trQyxVQUFVLEVBQUVyNUIsUUFBUSxDQUFDeWpDLEtBQUssQ0FBQzVuQyxJQUFJLENBQUNOLE1BQU0sRUFBRSxFQUFFLENBQUM7OztNQUc3Q2tvQyxLQUFLLENBQUN0dUMsTUFBTSxFQUFFbTNELFFBQVE7TUFDdEI3b0IsS0FBSyxDQUFDbG9DLE9BQU8sRUFBRWd4RCxTQUFTOztNQUV4QixHQUFHLENBQUNuMkQsU0FBUyxFQUFFLENBQUMsRUFBRTtRQUNoQnF0QyxLQUFLLENBQUN0dUMsTUFBTSxFQUFFaUIsUUFBUTtRQUN0QnF0QyxLQUFLLENBQUNsb0MsT0FBTyxFQUFFenhCLElBQUksQ0FBQ3F1QyxLQUFLLENBQUMsQ0FBQy9oQixTQUFTLEVBQUVtMkQsU0FBUyxFQUFFLEVBQUVELFFBQVEsQ0FBQztNQUM5RDs7TUFFQSxHQUFHLENBQUNqekIsVUFBVSxFQUFFLENBQUMsRUFBRTtRQUNqQm9LLEtBQUssQ0FBQ3R1QyxNQUFNLEVBQUVyckIsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQyxDQUFDa2hCLFVBQVUsRUFBRWl6QixRQUFRLEVBQUUsRUFBRUMsU0FBUyxDQUFDO1FBQzVEOW9CLEtBQUssQ0FBQ2xvQyxPQUFPLEVBQUU4OUIsU0FBUztNQUMxQjtJQUNGLENBQUM7Ozs7O0lBS0QyeEIsU0FBUyxFQUFFLFNBQVMsQ0FBQ3ZuQixLQUFLLEVBQUU7TUFDMUIsSUFBSXRtRCxLQUFLLEVBQUUsSUFBSTtRQUNiMGUsS0FBSyxFQUFFNG5DLEtBQUssQ0FBQzVuQyxJQUFJLENBQUNxa0QsTUFBTTtRQUN4QnFJLE9BQU8sRUFBRTlrQixLQUFLLENBQUM4a0IsTUFBTTtRQUNyQmlFLE9BQU87O01BRVQvb0IsS0FBSyxDQUFDeWxCLFNBQVMsRUFBRXY3QyxDQUFDLENBQUMsK0JBQStCLEVBQUUsQ0FBQzlSLElBQUksQ0FBQ29rRCxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVTtRQUMxRyxDQUFDNTRELEdBQUcsQ0FBQ3dVLElBQUksQ0FBQ3hVLEdBQUc7UUFDYixDQUFDd00sUUFBUSxDQUFDMDBELE1BQU0sQ0FBQzs7TUFFbkJBLE1BQU0sQ0FBQ25vRCxRQUFRLENBQUMsbUJBQW1CLEVBQUVxakMsS0FBSyxDQUFDejlCLFdBQVcsQ0FBQzs7TUFFdkR5OUIsS0FBSyxDQUFDK29CLFFBQVEsRUFBRUEsUUFBUSxFQUFFNytDLENBQUMsQ0FBQzlSLElBQUksQ0FBQ3NrRCxHQUFHLENBQUNuMkUsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJMkMsSUFBSSxDQUFDLENBQUMsQ0FBQzBoRCxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM5NEMsSUFBSSxDQUFDc21CLElBQUksQ0FBQ3RtQixJQUFJO1FBQ2YsQ0FBQ3NlLFFBQVEsQ0FBQzR2QyxLQUFLLENBQUN5bEIsUUFBUSxDQUFDOztNQUUzQixHQUFHLENBQUNydEQsSUFBSSxDQUFDb2tELE9BQU8sRUFBRTtRQUNoQjlpRSxJQUFJLENBQUNpdUUsV0FBVyxDQUFDM25CLEtBQUssQ0FBQzs7Ozs7UUFLdkIrb0IsT0FBTyxDQUFDbmhFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUNuYixDQUFDLEVBQUU7VUFDMUMsSUFBSSxDQUFDakcsUUFBUSxFQUFFLENBQUM7O1VBRWhCdzVELEtBQUssQ0FBQzhrQixNQUFNLENBQUMvNUQsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7VUFFL0JyUixJQUFJLENBQUNnbEUsU0FBUyxDQUFDMWUsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQzs7Ozs7UUFLRjhrQixNQUFNLENBQUNsOUQsRUFBRSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtVQUNsQyxJQUFJNjlELFNBQVMsRUFBRXpsQixLQUFLLENBQUN5bEIsUUFBUTtZQUMzQnVELFdBQVcsRUFBRTV3RCxJQUFJLENBQUN4VSxHQUFHLENBQUM4TixLQUFLO1lBQzNCdTNELFlBQVksRUFBRTd3RCxJQUFJLENBQUN4VSxHQUFHLENBQUNrVSxNQUFNO1lBQzdCb3hELFNBQVM7WUFDVEMsS0FBSzs7VUFFUCxHQUFHLENBQUNKLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZpRixRQUFRLElBQUksQ0FBQyxFQUFFO1lBQzVCLE1BQU07VUFDUjs7VUFFQSxJQUFJO1lBQ0YwaUYsVUFBVSxFQUFFSCxPQUFPLENBQUM3dUUsUUFBUSxDQUFDLENBQUM7WUFDOUJpdkUsTUFBTSxFQUFFRCxTQUFTLENBQUMzNEUsSUFBSSxDQUFDLE1BQU0sQ0FBQztVQUNoQyxFQUFFLE1BQU0sQ0FBQys2RCxNQUFNLEVBQUUsQ0FBQzs7O1VBR2xCLEdBQUcsQ0FBQzZkLE1BQU0sR0FBR0EsS0FBSyxDQUFDbGxGLE9BQU8sR0FBR2tsRixLQUFLLENBQUNsdkUsUUFBUSxDQUFDLENBQUMsQ0FBQ2hXLE1BQU0sRUFBRTs7WUFFcEQ2Z0YsTUFBTSxDQUFDbGhFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDOztZQUVqQzZoRSxRQUFRLENBQUM3aEUsR0FBRyxDQUFDO2NBQ1g4TixLQUFLLEVBQUUsTUFBTTtjQUNiLFdBQVcsRUFBRSxNQUFNO2NBQ25Cb0csTUFBTSxFQUFFO1lBQ1YsQ0FBQyxDQUFDOztZQUVGLEdBQUcsQ0FBQ2t4RCxXQUFXLElBQUk3aUYsU0FBUyxFQUFFO2NBQzVCNmlGLFdBQVcsRUFBRTNpRixJQUFJLENBQUNxdUIsSUFBSSxDQUFDcnVCLElBQUksQ0FBQzR0QixHQUFHLENBQUNrMUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDNzJDLFdBQVcsRUFBRTYyQyxLQUFLLENBQUNsM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEY7O1lBRUF3ekMsUUFBUSxDQUFDN2hFLEdBQUcsQ0FBQyxPQUFPLEVBQUVvbEUsV0FBVyxFQUFFQSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUNwbEUsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7O1lBRXhFLEdBQUcsQ0FBQ3FsRSxZQUFZLElBQUk5aUYsU0FBUyxFQUFFO2NBQzdCOGlGLFlBQVksRUFBRTVpRixJQUFJLENBQUNxdUIsSUFBSSxDQUFDcnVCLElBQUksQ0FBQzR0QixHQUFHLENBQUNrMUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDbmhDLFlBQVksRUFBRW1oQyxLQUFLLENBQUNqM0MsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkY7O1lBRUF1ekMsUUFBUSxDQUFDN2hFLEdBQUcsQ0FBQyxRQUFRLEVBQUVxbEUsWUFBWSxFQUFFQSxZQUFZLEVBQUUsRUFBRSxDQUFDOztZQUV0RG5FLE1BQU0sQ0FBQ2xoRSxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQztVQUNoQzs7VUFFQTZoRSxRQUFRLENBQUN6b0QsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1FBQzVDLENBQUMsQ0FBQztNQUNKLEVBQUUsS0FBSztRQUNMdGpCLElBQUksQ0FBQ2dsRSxTQUFTLENBQUMxZSxLQUFLLENBQUM7TUFDdkI7O01BRUErb0IsT0FBTyxDQUFDajNFLElBQUksQ0FBQyxLQUFLLEVBQUVrdUQsS0FBSyxDQUFDNTlELEdBQUcsQ0FBQzs7O01BRzlCMGlGLE1BQU0sQ0FBQ2g5RCxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFOztRQUVoQyxJQUFJO1VBQ0ZvaUIsQ0FBQyxDQUFDLElBQUk7WUFDSixDQUFDMzVCLElBQUksQ0FBQyxRQUFRO1lBQ2QsQ0FBQ3lVLElBQUksQ0FBQztZQUNOLENBQUNxa0IsTUFBTSxDQUFDO1lBQ1IsQ0FBQ3YzQixJQUFJLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQztRQUNqQyxFQUFFLE1BQU0sQ0FBQ3c1RCxNQUFNLEVBQUUsQ0FBQzs7UUFFbEJwaEMsQ0FBQyxDQUFDLElBQUk7VUFDSixDQUFDamlCLEdBQUcsQ0FBQyxZQUFZO1VBQ2pCLENBQUM3TCxLQUFLLENBQUMsQ0FBQzs7UUFFVjRqRCxLQUFLLENBQUNxbEIsU0FBUyxFQUFFLEtBQUs7UUFDdEJybEIsS0FBSyxDQUFDb3BCLFdBQVcsRUFBRSxLQUFLO01BQzFCLENBQUMsQ0FBQztJQUNKLENBQUM7Ozs7O0lBS0Q1QixVQUFVLEVBQUUsU0FBUyxDQUFDeG5CLEtBQUssRUFBRTdrRCxPQUFPLEVBQUU7TUFDcEMsSUFBSXpCLEtBQUssRUFBRSxJQUFJOztNQUVmLEdBQUcsQ0FBQ0EsSUFBSSxDQUFDZ3JFLFNBQVMsRUFBRTtRQUNsQixNQUFNO01BQ1I7O01BRUFockUsSUFBSSxDQUFDa3ZFLFdBQVcsQ0FBQzVvQixLQUFLLENBQUM7O01BRXZCLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDeWxCLFFBQVEsRUFBRTtRQUNsQnY3QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDLzRELElBQUksQ0FBQ205QyxLQUFLLENBQUN5bEIsUUFBUSxDQUFDO01BQ2pDOztNQUVBemxCLEtBQUssQ0FBQzhrQixNQUFNLENBQUMxb0UsS0FBSyxDQUFDLENBQUM7Ozs7TUFJcEIsR0FBRyxDQUFDaWtFLE9BQU8sQ0FBQ2xsRSxPQUFPLEVBQUUsR0FBR0EsT0FBTyxDQUFDdEgsTUFBTSxDQUFDLENBQUMsQ0FBQzVQLE1BQU0sRUFBRTs7UUFFL0MsR0FBRyxDQUFDa1gsT0FBTyxDQUFDa2lCLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHbGlCLE9BQU8sQ0FBQ3RILE1BQU0sQ0FBQyxDQUFDLENBQUN3cEIsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7VUFDekZsaUIsT0FBTyxDQUFDTixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQ2tRLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDdkQ7OztRQUdBaTFDLEtBQUssQ0FBQ3FwQixhQUFhLEVBQUVuL0MsQ0FBQyxDQUFDLE9BQU87VUFDNUIsQ0FBQ2xsQixJQUFJLENBQUM7VUFDTixDQUFDc0wsV0FBVyxDQUFDblYsT0FBTyxDQUFDOzs7UUFHdkJBLE9BQU8sQ0FBQ3lJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDO01BQ3hDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQ284QyxLQUFLLENBQUNtbUIsUUFBUSxFQUFFOztRQUUxQixHQUFHLENBQUNqOEMsQ0FBQyxDQUFDL25DLElBQUksQ0FBQ2daLE9BQU8sRUFBRSxJQUFJLFFBQVEsRUFBRTtVQUNoQ0EsUUFBUSxFQUFFK3VCLENBQUMsQ0FBQyxPQUFPO1lBQ2pCLENBQUNyYSxNQUFNLENBQUNxYSxDQUFDLENBQUNqakMsSUFBSSxDQUFDa1UsT0FBTyxDQUFDO1lBQ3ZCLENBQUNqQixRQUFRLENBQUMsQ0FBQztRQUNmOzs7UUFHQSxHQUFHLENBQUM4bEQsS0FBSyxDQUFDNW5DLElBQUksQ0FBQy9uQixNQUFNLEVBQUU7VUFDckI4SyxRQUFRLEVBQUUrdUIsQ0FBQyxDQUFDLE9BQU87WUFDakIsQ0FBQy9hLElBQUksQ0FBQ2hVLE9BQU87WUFDYixDQUFDNUssSUFBSSxDQUFDeXZELEtBQUssQ0FBQzVuQyxJQUFJLENBQUMvbkIsTUFBTSxDQUFDO1FBQzVCO01BQ0Y7O01BRUEydkQsS0FBSyxDQUFDOGtCLE1BQU0sQ0FBQ2g5RCxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFOztRQUV0Q29pQixDQUFDLENBQUMsSUFBSTtVQUNKLENBQUMzNUIsSUFBSSxDQUFDLGFBQWE7VUFDbkIsQ0FBQ3dhLE9BQU8sQ0FBQyxPQUFPLENBQUM7OztRQUduQixHQUFHLENBQUNpMUMsS0FBSyxDQUFDcXBCLFlBQVksRUFBRTtVQUN0QnJwQixLQUFLLENBQUNxcEIsWUFBWSxDQUFDcDVELEtBQUssQ0FBQzlVLE9BQU8sQ0FBQzZoQixXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQ2hZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzdJLE1BQU0sQ0FBQyxDQUFDOztVQUVqRjZqRCxLQUFLLENBQUNxcEIsYUFBYSxFQUFFLElBQUk7UUFDM0I7OztRQUdBLEdBQUcsQ0FBQ3JwQixLQUFLLENBQUNzcEIsU0FBUyxFQUFFO1VBQ25CdHBCLEtBQUssQ0FBQ3NwQixTQUFTLENBQUNudEUsTUFBTSxDQUFDLENBQUM7O1VBRXhCNmpELEtBQUssQ0FBQ3NwQixVQUFVLEVBQUUsSUFBSTtRQUN4Qjs7O1FBR0EsR0FBRyxDQUFDLENBQUN0cEIsS0FBSyxDQUFDbW1CLFFBQVEsRUFBRTtVQUNuQmo4QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM5dEIsS0FBSyxDQUFDLENBQUM7O1VBRWY0akQsS0FBSyxDQUFDcWxCLFNBQVMsRUFBRSxLQUFLO1VBQ3RCcmxCLEtBQUssQ0FBQ29wQixXQUFXLEVBQUUsS0FBSztRQUMxQjtNQUNGLENBQUMsQ0FBQzs7TUFFRmwvQyxDQUFDLENBQUMvdUIsT0FBTyxDQUFDLENBQUNpVixRQUFRLENBQUM0dkMsS0FBSyxDQUFDOGtCLE1BQU0sQ0FBQzs7TUFFakMsR0FBRyxDQUFDNTZDLENBQUMsQ0FBQy91QixPQUFPLENBQUMsQ0FBQ2xDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNoQ2l4QixDQUFDLENBQUMvdUIsT0FBTyxDQUFDLENBQUN3aEIsUUFBUSxDQUFDLGdCQUFnQixDQUFDOztRQUVyQ3VOLENBQUMsQ0FBQy91QixPQUFPLENBQUMsQ0FBQ3NMLElBQUksQ0FBQyxhQUFhLENBQUM7O1FBRTlCdTVDLEtBQUssQ0FBQ3o5QixZQUFZLEVBQUUsT0FBTzs7UUFFM0J5OUIsS0FBSyxDQUFDNW5DLElBQUksQ0FBQzFHLE1BQU0sRUFBRXN1QyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDMUcsTUFBTSxHQUFHd1ksQ0FBQyxDQUFDL3VCLE9BQU8sQ0FBQyxDQUFDckosSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMvRGt1RCxLQUFLLENBQUM1bkMsSUFBSSxDQUFDTixPQUFPLEVBQUVrb0MsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ04sT0FBTyxHQUFHb1MsQ0FBQyxDQUFDL3VCLE9BQU8sQ0FBQyxDQUFDckosSUFBSSxDQUFDLFFBQVEsQ0FBQztNQUNwRTs7TUFFQWt1RCxLQUFLLENBQUN5bEIsU0FBUyxFQUFFemxCLEtBQUssQ0FBQzhrQjtRQUNyQixDQUFDN3FFLFFBQVEsQ0FBQztRQUNWLENBQUM1SixNQUFNLENBQUMscURBQXFEO1FBQzdELENBQUNyTCxLQUFLLENBQUMsQ0FBQzs7TUFFVmc3RCxLQUFLLENBQUN5bEIsUUFBUSxDQUFDdnNFLFFBQVEsQ0FBQyxDQUFDLENBQUM4TCxJQUFJLENBQUMsQ0FBQzs7OztNQUloQyxHQUFHLENBQUMsQ0FBQ2c3QyxLQUFLLENBQUN5bEIsUUFBUSxDQUFDeGhGLE1BQU0sRUFBRTtRQUMxQis3RCxLQUFLLENBQUN5bEIsU0FBUyxFQUFFemxCLEtBQUssQ0FBQzhrQjtVQUNyQixDQUFDMy9DLFNBQVMsQ0FBQyxhQUFhO1VBQ3hCLENBQUNsckIsUUFBUSxDQUFDO1VBQ1YsQ0FBQ2pWLEtBQUssQ0FBQyxDQUFDO01BQ1o7O01BRUFnN0QsS0FBSyxDQUFDeWxCLFFBQVEsQ0FBQzlvRCxRQUFRLENBQUMsa0JBQWtCLENBQUM7O01BRTNDcWpDLEtBQUssQ0FBQzhrQixNQUFNLENBQUNub0QsUUFBUSxDQUFDLG1CQUFtQixFQUFFcWpDLEtBQUssQ0FBQ3o5QixXQUFXLENBQUM7O01BRTdEN29CLElBQUksQ0FBQ2dsRSxTQUFTLENBQUMxZSxLQUFLLENBQUM7SUFDdkIsQ0FBQzs7Ozs7SUFLRDBuQixRQUFRLEVBQUUsU0FBUyxDQUFDMW5CLEtBQUssRUFBRTtNQUN6QkEsS0FBSyxDQUFDbW1CLFNBQVMsRUFBRSxJQUFJOztNQUVyQm5tQixLQUFLLENBQUM4a0I7UUFDSixDQUFDLzVELE9BQU8sQ0FBQyxTQUFTO1FBQ2xCLENBQUNpUyxXQUFXLENBQUMsbUJBQW1CLEVBQUVnakMsS0FBSyxDQUFDejlCLFdBQVc7UUFDbkQsQ0FBQzVGLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQzs7TUFFcENxakMsS0FBSyxDQUFDejlCLFlBQVksRUFBRSxNQUFNOztNQUUxQixJQUFJLENBQUNpbEQsVUFBVSxDQUFDeG5CLEtBQUssRUFBRSxJQUFJLENBQUMyaUIsU0FBUyxDQUFDM2lCLEtBQUssRUFBRUEsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ29sRCxRQUFRLENBQUMsQ0FBQzs7TUFFbEUsR0FBRyxDQUFDeGQsS0FBSyxDQUFDeHBDLElBQUksSUFBSSxJQUFJLENBQUMwckQsT0FBTyxFQUFFO1FBQzlCLElBQUksQ0FBQ3lDLFlBQVksRUFBRSxLQUFLO01BQzFCO0lBQ0YsQ0FBQzs7Ozs7SUFLRGdELFdBQVcsRUFBRSxTQUFTLENBQUMzbkIsS0FBSyxFQUFFO01BQzVCLElBQUl0bUQsS0FBSyxFQUFFLElBQUk7O01BRWZzbUQsTUFBTSxFQUFFQSxNQUFNLEdBQUd0bUQsSUFBSSxDQUFDZ29CLE9BQU87O01BRTdCLEdBQUcsQ0FBQ3MrQixNQUFNLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDdXBCLFFBQVEsRUFBRTtRQUM1QnZwQixLQUFLLENBQUN1cEIsU0FBUyxFQUFFci9DLENBQUMsQ0FBQ3h3QixJQUFJLENBQUNpcEUsU0FBUyxDQUFDanBFLElBQUksRUFBRUEsSUFBSSxDQUFDMGUsSUFBSSxDQUFDbWxELFVBQVUsQ0FBQztVQUMzRCxDQUFDbnRELFFBQVEsQ0FBQzR2QyxLQUFLLENBQUM4a0IsTUFBTTtVQUN0QixDQUFDOS9ELElBQUksQ0FBQztVQUNOLENBQUM4VixNQUFNLENBQUMsTUFBTSxDQUFDO01BQ25CO0lBQ0YsQ0FBQzs7Ozs7SUFLRDh0RCxXQUFXLEVBQUUsU0FBUyxDQUFDNW9CLEtBQUssRUFBRTtNQUM1QixJQUFJdG1ELEtBQUssRUFBRSxJQUFJOztNQUVmc21ELE1BQU0sRUFBRUEsTUFBTSxHQUFHdG1ELElBQUksQ0FBQ2dvQixPQUFPOztNQUU3QixHQUFHLENBQUNzK0IsTUFBTSxHQUFHQSxLQUFLLENBQUN1cEIsUUFBUSxFQUFFO1FBQzNCdnBCLEtBQUssQ0FBQ3VwQixRQUFRLENBQUMxbUUsSUFBSSxDQUFDLENBQUMsQ0FBQzFHLE1BQU0sQ0FBQyxDQUFDOztRQUU5QixPQUFPNmpELEtBQUssQ0FBQ3VwQixRQUFRO01BQ3ZCO0lBQ0YsQ0FBQzs7Ozs7SUFLRDdLLFNBQVMsRUFBRSxTQUFTLENBQUMxZSxLQUFLLEVBQUU7TUFDMUIsSUFBSXRtRCxLQUFLLEVBQUUsSUFBSTs7TUFFZixHQUFHLENBQUNBLElBQUksQ0FBQ2dyRSxTQUFTLEVBQUU7UUFDbEIsTUFBTTtNQUNSOztNQUVBMWtCLEtBQUssQ0FBQ3FuQixVQUFVLEVBQUUsS0FBSztNQUN2QnJuQixLQUFLLENBQUNxbEIsU0FBUyxFQUFFLElBQUk7O01BRXJCM3JFLElBQUksQ0FBQ3FSLE9BQU8sQ0FBQyxXQUFXLEVBQUVpMUMsS0FBSyxDQUFDOztNQUVoQ3RtRCxJQUFJLENBQUNrdkUsV0FBVyxDQUFDNW9CLEtBQUssQ0FBQzs7O01BR3ZCLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDNW5DLElBQUksQ0FBQ2drRCxTQUFTLEdBQUcsQ0FBQyxDQUFDcGMsS0FBSyxDQUFDc3BCLFVBQVUsR0FBRyxDQUFDdHBCLEtBQUssQ0FBQ3NwQixTQUFTLENBQUNybEYsTUFBTSxDQUFDLEVBQUU7UUFDeEUrN0QsS0FBSyxDQUFDc3BCLFVBQVUsRUFBRXAvQyxDQUFDLENBQUN4d0IsSUFBSSxDQUFDaXBFLFNBQVMsQ0FBQzNpQixLQUFLLEVBQUVBLEtBQUssQ0FBQzVuQyxJQUFJLENBQUNxbEQsTUFBTSxDQUFDckIsUUFBUSxDQUFDLENBQUMsQ0FBQ2hzRCxRQUFRLENBQUM0dkMsS0FBSyxDQUFDeWxCLFFBQVEsQ0FBQztNQUNqRzs7O01BR0EsR0FBRyxDQUFDemxCLEtBQUssQ0FBQzVuQyxJQUFJLENBQUNta0QsUUFBUSxHQUFHdmMsS0FBSyxDQUFDeWxCLFNBQVMsR0FBRyxDQUFDemxCLEtBQUssQ0FBQ21tQixRQUFRLEVBQUU7UUFDM0RubUIsS0FBSyxDQUFDeWxCLFFBQVEsQ0FBQzc5RCxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFO1VBQy9DLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDMmQsT0FBTyxHQUFHLENBQUMsRUFBRTtZQUNqQjNkLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDO1VBQ3BCOztVQUVBLE9BQU8sSUFBSTtRQUNiLENBQUMsQ0FBQzs7OztRQUlGLEdBQUcsQ0FBQ2kyQyxLQUFLLENBQUM3OUQsS0FBSyxJQUFJLE9BQU8sRUFBRTtVQUMxQituQyxDQUFDLENBQUMsd0NBQXdDLENBQUMsQ0FBQzlaLFFBQVEsQ0FBQzR2QyxLQUFLLENBQUN5bEIsUUFBUSxDQUFDO1FBQ3RFO01BQ0Y7O01BRUEvckUsSUFBSSxDQUFDZ3RFLGFBQWEsQ0FBQzFtQixLQUFLLENBQUM7O01BRXpCdG1ELElBQUksQ0FBQ2l0RSxZQUFZLENBQUMzbUIsS0FBSyxDQUFDOztNQUV4QixHQUFHLENBQUNBLEtBQUssQ0FBQ3hwQyxJQUFJLElBQUk5YyxJQUFJLENBQUN3b0UsT0FBTyxFQUFFO1FBQzlCeG9FLElBQUksQ0FBQzBzRSxZQUFZLENBQUMsQ0FBQztNQUNyQjs7TUFFQTFzRSxJQUFJLENBQUM0ckUsYUFBYSxDQUFDdGxCLEtBQUssQ0FBQztJQUMzQixDQUFDOzs7Ozs7SUFNRDBtQixhQUFhLEVBQUUsU0FBUyxDQUFDMW1CLEtBQUssRUFBRTtNQUM5QixJQUFJdG1ELEtBQUssRUFBRSxJQUFJO1FBQ2Jnb0IsUUFBUSxFQUFFcytCLE1BQU0sR0FBR3RtRCxJQUFJLENBQUNnb0IsT0FBTztRQUMvQjFiLFFBQVEsRUFBRTBiLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ3BTLE9BQU87UUFDOUJ3akUsZUFBZSxFQUFFOW5ELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzZqRCxxQkFBcUI7UUFDbkR3TixTQUFTLEVBQUUvdkUsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQzU4RCxPQUFPO1FBQzdCMGpFLE1BQU07UUFDTkMsU0FBUyxFQUFFLEtBQUs7O01BRWxCRixRQUFRLENBQUN4c0QsV0FBVyxDQUFDLDRCQUE0QixFQUFFdXNELGNBQWMsQ0FBQzs7TUFFbEUsR0FBRyxDQUFDQSxlQUFlLEdBQUd4akUsUUFBUSxHQUFHQSxPQUFPLENBQUMvaEIsTUFBTSxFQUFFO1FBQy9DLEdBQUcsQ0FBQ3k5QixPQUFPLENBQUNsTCxJQUFJLElBQUk5YyxJQUFJLENBQUN3b0UsT0FBTyxFQUFFO1VBQ2hDd0gsT0FBTyxFQUFFRCxRQUFRLENBQUM1akYsS0FBSyxDQUFDLENBQUMsQ0FBQ3VxQixRQUFRLENBQUNxNUQsUUFBUSxDQUFDNTFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7O1VBRXJENjFFO1lBQ0UsQ0FBQ3p2RSxRQUFRLENBQUM7WUFDVixDQUFDaFYsRUFBRSxDQUFDLENBQUM7WUFDTCxDQUFDbVgsS0FBSyxDQUFDO1lBQ1AsQ0FBQytTLElBQUksQ0FBQ25KLE9BQU8sQ0FBQzs7VUFFaEIyakUsU0FBUyxFQUFFRCxNQUFNLENBQUN4M0MsV0FBVyxDQUFDLElBQUksQ0FBQzs7VUFFbkN3M0MsTUFBTSxDQUFDdHRFLEtBQUssQ0FBQyxDQUFDLENBQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLEVBQUUsS0FBSyxHQUFHLENBQUN6QyxJQUFJLENBQUMrdkUsUUFBUSxFQUFFO1VBQ3hCRSxTQUFTLEVBQUVqd0UsSUFBSSxDQUFDK3ZFLFFBQVEsQ0FBQ3YzQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzVDOztRQUVBeFEsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQ2xoRSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUrbEUsU0FBUyxHQUFHLEVBQUUsQ0FBQztNQUN0RDtJQUNGLENBQUM7Ozs7OztJQU1EaEQsWUFBWSxFQUFFLFNBQVMsQ0FBQzNtQixLQUFLLEVBQUU7TUFDN0IsSUFBSXRtRCxLQUFLLEVBQUUsSUFBSTtRQUNiZ29CLFFBQVEsRUFBRXMrQixNQUFNLEdBQUd0bUQsSUFBSSxDQUFDZ29CLE9BQU87UUFDL0JnUixZQUFZO1FBQ1pzRyxZQUFZO1FBQ1o0d0MsYUFBYTtRQUNiQyxhQUFhOztNQUVmLEdBQUcsQ0FBQ25vRCxPQUFPLENBQUMyakQsU0FBUyxHQUFHM2pELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzB4RCxpQkFBaUIsSUFBSSxJQUFJLEVBQUU7UUFDOURwb0QsT0FBTyxDQUFDK2pELFFBQVEsQ0FBQzdoRSxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQzs7OztRQUl6QyxHQUFHLENBQUM4ZCxPQUFPLENBQUMrakQsUUFBUSxDQUFDdnpDLFdBQVcsQ0FBQyxFQUFFLEVBQUV4USxPQUFPLENBQUNvakQsTUFBTSxDQUFDaHRELE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO1VBQ2xFOHhELGNBQWMsRUFBRWxvRCxPQUFPLENBQUNvakQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDcGhFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztVQUN6RG1tRSxjQUFjLEVBQUVub0QsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQ2xoRSxHQUFHLENBQUMsZ0JBQWdCLENBQUM7O1VBRXBELEdBQUcsQ0FBQ29PLFVBQVUsQ0FBQzYzRCxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDakNuM0MsYUFBYSxFQUFFaFIsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3B5QyxZQUFZOztZQUU3Q2hSLE9BQU8sQ0FBQ29qRCxNQUFNLENBQUNsaEUsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQzs7WUFFdkMsR0FBRyxDQUFDdmQsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQ08sYUFBYSxFQUFFaFIsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3B5QyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7Y0FDL0RzRyxhQUFhLEVBQUU2d0MsYUFBYTtZQUM5Qjs7WUFFQW5vRCxPQUFPLENBQUNvakQsTUFBTSxDQUFDbGhFLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRWdtRSxhQUFhLENBQUM7VUFDckQ7UUFDRjs7UUFFQWxvRCxPQUFPLENBQUMrakQsUUFBUSxDQUFDN2hFLEdBQUcsQ0FBQyxlQUFlLEVBQUVvMUIsWUFBWSxDQUFDO01BQ3JEO0lBQ0YsQ0FBQzs7Ozs7OztJQU9Ec3NDLGFBQWEsRUFBRSxTQUFTLENBQUN0bEIsS0FBSyxFQUFFO01BQzlCLElBQUl0bUQsS0FBSyxFQUFFLElBQUk7UUFDYm9yRSxPQUFPLEVBQUU5a0IsS0FBSyxDQUFDOGtCLE1BQU07UUFDckJ6L0UsSUFBSSxFQUFFLEtBQUs7UUFDWHVPLE1BQU0sRUFBRSxLQUFLO1FBQ2Iyd0UsUUFBUSxFQUFFN3FFLElBQUksQ0FBQzZxRSxPQUFPLENBQUN2a0IsS0FBSyxDQUFDO1FBQzdCb3BCLFdBQVcsRUFBRXBwQixLQUFLLENBQUNvcEIsVUFBVTtRQUM3QnQzQyxNQUFNO1FBQ05pNEMsZUFBZTtRQUNmeHpELFFBQVE7UUFDUnRCLE9BQU87O01BRVQrcUMsS0FBSyxDQUFDb3BCLFdBQVcsRUFBRSxJQUFJOztNQUV2QnQzQyxPQUFPLEVBQUVrdUIsS0FBSyxDQUFDNW5DLElBQUksQ0FBQzFlLElBQUksQ0FBQ3lvRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUM7TUFDM0U1ckQsU0FBUyxFQUFFeXBDLEtBQUssQ0FBQzVuQyxJQUFJLENBQUMxZSxJQUFJLENBQUN5b0UsU0FBUyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDOztNQUVqRjVyRCxTQUFTLEVBQUVnRyxRQUFRLENBQUN5akMsS0FBSyxDQUFDNmtCLGVBQWUsSUFBSTErRSxVQUFVLEVBQUVvd0IsU0FBUyxFQUFFeXBDLEtBQUssQ0FBQzZrQixjQUFjLEVBQUUsRUFBRSxDQUFDOztNQUU3RixHQUFHLENBQUNOLFFBQVEsR0FBR3ZrQixLQUFLLENBQUN4cEMsSUFBSSxJQUFJOWMsSUFBSSxDQUFDd29FLFFBQVEsR0FBRyxDQUFDM3JELFFBQVEsRUFBRTtRQUN0RHViLE9BQU8sRUFBRSxLQUFLO01BQ2hCOzs7TUFHQSxHQUFHLENBQUNBLE9BQU8sSUFBSSxNQUFNLEVBQUU7UUFDckIsR0FBRyxDQUFDa3VCLEtBQUssQ0FBQ3hwQyxJQUFJLElBQUk5YyxJQUFJLENBQUN3b0UsUUFBUSxHQUFHM3JELFNBQVMsR0FBR3lwQyxLQUFLLENBQUM3OUQsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDNjlELEtBQUssQ0FBQ21tQixTQUFTLEdBQUcsQ0FBQ3Z5RSxNQUFNLEVBQUU4RixJQUFJLENBQUNzd0UsV0FBVyxDQUFDaHFCLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDNUgzNkQsSUFBSSxFQUFFcVUsSUFBSSxDQUFDNnNFLFNBQVMsQ0FBQ3ZtQixLQUFLLENBQUM7UUFDN0IsRUFBRSxLQUFLO1VBQ0xsdUIsT0FBTyxFQUFFLE1BQU07UUFDakI7TUFDRjs7OztNQUlBLEdBQUcsQ0FBQ0EsT0FBTyxJQUFJLE1BQU0sRUFBRTtRQUNyQnA0QixJQUFJLENBQUNpckUsWUFBWSxFQUFFLElBQUk7O1FBRXZCdC9FLEdBQUcsQ0FBQzRnRixPQUFPLEVBQUU1Z0YsR0FBRyxDQUFDcXNCLE1BQU0sRUFBRTlkLEtBQUssQ0FBQzhkLEtBQUs7UUFDcENyc0IsR0FBRyxDQUFDNmdGLE9BQU8sRUFBRTdnRixHQUFHLENBQUN5eUIsT0FBTyxFQUFFbGtCLEtBQUssQ0FBQ2trQixNQUFNOzs7UUFHdEM3QyxRQUFRLEVBQUUrcUMsS0FBSyxDQUFDNW5DLElBQUksQ0FBQzZrRCxXQUFXOztRQUVoQyxHQUFHLENBQUNob0QsUUFBUSxHQUFHLE1BQU0sRUFBRTtVQUNyQkEsUUFBUSxFQUFFNXVCLElBQUksQ0FBQzhyQyxHQUFHLENBQUM2dEIsS0FBSyxDQUFDdHVDLE1BQU0sRUFBRXN1QyxLQUFLLENBQUNsb0MsT0FBTyxFQUFFbGtCLEtBQUssQ0FBQzhkLE1BQU0sRUFBRTlkLEtBQUssQ0FBQ2trQixNQUFNLEVBQUUsRUFBRSxHQUFHO1FBQ25GOztRQUVBLEdBQUcsQ0FBQzdDLE9BQU8sRUFBRTtVQUNYcmhCLEtBQUssQ0FBQ3FoQixRQUFRLEVBQUUsR0FBRztVQUNuQjV2QixHQUFHLENBQUM0dkIsUUFBUSxFQUFFLENBQUM7UUFDakI7OztRQUdBaVYsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ3VKLFlBQVksQ0FBQ25sQixLQUFLLENBQUN5bEIsUUFBUSxDQUFDem9ELFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFcHBCLEtBQUssQ0FBQzs7UUFFaEZ3dEUsV0FBVyxDQUFDcGhCLEtBQUssQ0FBQ3lsQixRQUFRLENBQUM7OztRQUczQnY3QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDeGhELE9BQU8sQ0FBQzRsQyxLQUFLLENBQUN5bEIsUUFBUSxFQUFFcGdGLEdBQUcsRUFBRWt4QixRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7VUFDNUQ3YyxJQUFJLENBQUNpckUsWUFBWSxFQUFFLEtBQUs7O1VBRXhCanJFLElBQUksQ0FBQ2lnQixRQUFRLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUM7O1FBRUYsTUFBTTtNQUNSOztNQUVBamdCLElBQUksQ0FBQzZyRSxXQUFXLENBQUN2bEIsS0FBSyxDQUFDOzs7O01BSXZCLEdBQUcsQ0FBQyxDQUFDbHVCLE1BQU0sRUFBRTtRQUNYa3VCLEtBQUssQ0FBQ3lsQixRQUFRLENBQUN6b0QsV0FBVyxDQUFDLG9CQUFvQixDQUFDOztRQUVoRCxHQUFHLENBQUMsQ0FBQ29zRCxXQUFXLEdBQUc3RSxRQUFRLEdBQUd2a0IsS0FBSyxDQUFDNzlELEtBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQzY5RCxLQUFLLENBQUNtbUIsUUFBUSxFQUFFO1VBQ3ZFbm1CLEtBQUssQ0FBQ3lsQixRQUFRLENBQUN6Z0UsSUFBSSxDQUFDLENBQUMsQ0FBQzhWLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdEM7O1FBRUEsR0FBRyxDQUFDa2xDLEtBQUssQ0FBQ3hwQyxJQUFJLElBQUk5YyxJQUFJLENBQUN3b0UsT0FBTyxFQUFFO1VBQzlCeG9FLElBQUksQ0FBQ2lnQixRQUFRLENBQUMsQ0FBQztRQUNqQjs7UUFFQSxNQUFNO01BQ1I7Ozs7TUFJQXVRLENBQUMsQ0FBQzB4QyxRQUFRLENBQUMvNEQsSUFBSSxDQUFDaWlFLE1BQU0sQ0FBQzs7O01BR3ZCaUYsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQy9wQixLQUFLLENBQUN4cEMsSUFBSSxHQUFHOWMsSUFBSSxDQUFDdW9FLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsa0NBQWtDLEVBQUVud0MsTUFBTTs7TUFFcklnekMsTUFBTSxDQUFDbm9ELFFBQVEsQ0FBQ290RCxlQUFlLENBQUMsQ0FBQy9zRCxXQUFXLENBQUMseUJBQXlCLENBQUM7O01BRXZFZ2pDLEtBQUssQ0FBQ3lsQixRQUFRLENBQUN6b0QsV0FBVyxDQUFDLG9CQUFvQixDQUFDOzs7TUFHaERva0QsV0FBVyxDQUFDMEQsTUFBTSxDQUFDOztNQUVuQixHQUFHLENBQUM5a0IsS0FBSyxDQUFDNzlELEtBQUssSUFBSSxPQUFPLEVBQUU7UUFDMUI2OUQsS0FBSyxDQUFDeWxCLFFBQVEsQ0FBQ3pnRSxJQUFJLENBQUMsQ0FBQyxDQUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDO01BQy9COztNQUVBb2xCLENBQUMsQ0FBQzB4QyxRQUFRLENBQUN4aEQsT0FBTztRQUNoQjBxRCxNQUFNO1FBQ04seUJBQXlCO1FBQ3pCdnVELFFBQVE7UUFDUixTQUFTLENBQUMsRUFBRTtVQUNWdXVELE1BQU0sQ0FBQzluRCxXQUFXLENBQUMrc0QsZUFBZSxDQUFDLENBQUNubUUsR0FBRyxDQUFDO1lBQ3RDd2hFLFNBQVMsRUFBRSxFQUFFO1lBQ2Jud0QsT0FBTyxFQUFFO1VBQ1gsQ0FBQyxDQUFDOztVQUVGLEdBQUcsQ0FBQytxQyxLQUFLLENBQUN4cEMsSUFBSSxJQUFJOWMsSUFBSSxDQUFDd29FLE9BQU8sRUFBRTtZQUM5QnhvRSxJQUFJLENBQUNpZ0IsUUFBUSxDQUFDLENBQUM7VUFDakI7UUFDRixDQUFDO1FBQ0Q7TUFDRixDQUFDO0lBQ0gsQ0FBQzs7Ozs7SUFLRHF3RCxXQUFXLEVBQUUsU0FBUyxDQUFDaHFCLEtBQUssRUFBRTtNQUM1QixJQUFJeWhCLElBQUksRUFBRSxLQUFLO1FBQ2IyQixPQUFPLEVBQUVwakIsS0FBSyxDQUFDb2pCLE1BQU07UUFDckI2RyxRQUFRO1FBQ1JDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7O01BRUwsR0FBRyxDQUFDLENBQUNqSCxPQUFPLEdBQUcsQ0FBQzFCLFVBQVUsQ0FBQzBCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JDLE9BQU8sS0FBSztNQUNkOztNQUVBNkcsU0FBUyxFQUFFLy9DLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNvSixZQUFZLENBQUM1QixNQUFNLENBQUM7O01BRTFDOEcsSUFBSSxFQUFFbDRELFVBQVUsQ0FBQ294RCxNQUFNLENBQUN4L0QsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3JEdW1FLElBQUksRUFBRW40RCxVQUFVLENBQUNveEQsTUFBTSxDQUFDeC9ELEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUN2RHdtRSxJQUFJLEVBQUVwNEQsVUFBVSxDQUFDb3hELE1BQU0sQ0FBQ3gvRCxHQUFHLENBQUMscUJBQXFCLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDeER5bUUsSUFBSSxFQUFFcjRELFVBQVUsQ0FBQ294RCxNQUFNLENBQUN4L0QsR0FBRyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDOztNQUV0RDY5RCxJQUFJLEVBQUU7UUFDSjN4RSxHQUFHLEVBQUVtNkUsUUFBUSxDQUFDbjZFLElBQUksRUFBRW82RSxHQUFHO1FBQ3ZCMTBELElBQUksRUFBRXkwRCxRQUFRLENBQUN6MEQsS0FBSyxFQUFFNjBELEdBQUc7UUFDekIzNEQsS0FBSyxFQUFFdTRELFFBQVEsQ0FBQ3Y0RCxNQUFNLEVBQUV5NEQsSUFBSSxFQUFFRSxHQUFHO1FBQ2pDdnlELE1BQU0sRUFBRW15RCxRQUFRLENBQUNueUQsT0FBTyxFQUFFb3lELElBQUksRUFBRUUsR0FBRztRQUNuQ25FLE1BQU0sRUFBRSxDQUFDO1FBQ1RDLE1BQU0sRUFBRTtNQUNWLENBQUM7O01BRUQsT0FBTytELFFBQVEsQ0FBQ3Y0RCxNQUFNLEVBQUUsRUFBRSxHQUFHdTRELFFBQVEsQ0FBQ255RCxPQUFPLEVBQUUsRUFBRSxFQUFFMnBELElBQUksRUFBRSxLQUFLO0lBQ2hFLENBQUM7Ozs7OztJQU1EOW5ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtNQUNwQixJQUFJamdCLEtBQUssRUFBRSxJQUFJO1FBQ2Jnb0IsUUFBUSxFQUFFaG9CLElBQUksQ0FBQ2dvQixPQUFPO1FBQ3RCMGdELE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDWGYsR0FBRzs7TUFFTCxHQUFHLENBQUMzbkUsSUFBSSxDQUFDNnFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQzdpRCxPQUFPLENBQUMyakQsUUFBUSxFQUFFO1FBQ3ZDLE1BQU07TUFDUjs7TUFFQSxHQUFHLENBQUMsQ0FBQzNqRCxPQUFPLENBQUN1akQsVUFBVSxFQUFFO1FBQ3ZCdmpELE9BQU8sQ0FBQ3VqRCxXQUFXLEVBQUUsSUFBSTs7UUFFekJ2akQsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQzVyRSxRQUFRLENBQUMsQ0FBQyxDQUFDNlIsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7UUFFNUNyUixJQUFJLENBQUM4aUUsT0FBTyxDQUFDLFFBQVEsQ0FBQzs7O1FBR3RCNEUsV0FBVyxDQUFDMS9DLE9BQU8sQ0FBQ29qRCxNQUFNLENBQUM7O1FBRTNCcGpELE9BQU8sQ0FBQ29qRCxNQUFNLENBQUNub0QsUUFBUSxDQUFDLDBCQUEwQixDQUFDOzs7UUFHbkR1TixDQUFDLENBQUN4bEMsSUFBSSxDQUFDZ1YsSUFBSSxDQUFDMG9FLE1BQU0sRUFBRSxTQUFTLENBQUNsMEUsR0FBRyxFQUFFOHhELEtBQUssRUFBRTtVQUN4QyxHQUFHLENBQUNBLEtBQUssQ0FBQ3hwQyxJQUFJLEdBQUc5YyxJQUFJLENBQUN3b0UsUUFBUSxFQUFFLEVBQUUsR0FBR2xpQixLQUFLLENBQUN4cEMsSUFBSSxHQUFHOWMsSUFBSSxDQUFDd29FLFFBQVEsRUFBRSxDQUFDLEVBQUU7WUFDbEVFLE1BQU0sQ0FBQ3BpQixLQUFLLENBQUN4cEMsR0FBRyxFQUFFLEVBQUV3cEMsS0FBSztVQUMzQixFQUFFLEtBQUssR0FBRyxDQUFDQSxLQUFLLEVBQUU7WUFDaEI5MUIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQy80RCxJQUFJLENBQUNtOUMsS0FBSyxDQUFDOGtCLE1BQU0sQ0FBQzs7WUFFN0I5a0IsS0FBSyxDQUFDOGtCLE1BQU0sQ0FBQzc4RCxHQUFHLENBQUMsQ0FBQyxDQUFDOUwsTUFBTSxDQUFDLENBQUM7VUFDN0I7UUFDRixDQUFDLENBQUM7O1FBRUZ6QyxJQUFJLENBQUMwb0UsT0FBTyxFQUFFQSxNQUFNO01BQ3RCOztNQUVBMW9FLElBQUksQ0FBQ2lyRSxZQUFZLEVBQUUsS0FBSzs7TUFFeEJqckUsSUFBSSxDQUFDMHNFLFlBQVksQ0FBQyxDQUFDOztNQUVuQjFzRSxJQUFJLENBQUNxUixPQUFPLENBQUMsV0FBVyxDQUFDOzs7TUFHekIsR0FBRyxDQUFDLENBQUMsQ0FBQzJXLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ3drRCxLQUFLLENBQUNDLFNBQVMsRUFBRTtRQUNsQ243QyxPQUFPLENBQUNvakQ7VUFDTixDQUFDdjBFLElBQUksQ0FBQyxhQUFhO1VBQ25CLENBQUNGLE1BQU0sQ0FBQyxnQkFBZ0I7VUFDeEIsQ0FBQzBhLE9BQU8sQ0FBQyxNQUFNO1VBQ2YsQ0FBQ2pELEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDeEIsR0FBRyxDQUFDd2lFLFFBQVEsQ0FBQ0MsY0FBYyxFQUFFO2NBQzNCRCxRQUFRLENBQUNDLGNBQWMsQ0FBQyxDQUFDO1lBQzNCLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDQyxvQkFBb0IsRUFBRTtjQUNwQyxJQUFJLENBQUNBLG9CQUFvQixDQUFDLENBQUM7WUFDN0I7O1lBRUE5d0UsSUFBSSxDQUFDbk4sSUFBSSxDQUFDLENBQUM7VUFDYixDQUFDLENBQUM7TUFDTjs7O01BR0EsR0FBRyxDQUFDbTFCLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ3FvQixVQUFVLEdBQUcvZSxPQUFPLENBQUNhLFlBQVksSUFBSSxNQUFNLEVBQUU7O1FBRTVEOCtDLElBQUksRUFBRTMvQyxPQUFPLENBQUMrakQsUUFBUSxDQUFDbDFFLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQzs7UUFFckUsR0FBRyxDQUFDOHdFLEdBQUcsQ0FBQ3A5RSxNQUFNLEVBQUU7VUFDZG85RSxHQUFHLENBQUN0MkQsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN0QixFQUFFLEtBQUs7VUFDTHJSLElBQUksQ0FBQzhULEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQ3hCO01BQ0Y7OztNQUdBa1UsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQ251RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7Ozs7SUFLRDRsRCxPQUFPLEVBQUUsU0FBUyxDQUFDcjZFLElBQUksRUFBRTtNQUN2QixJQUFJdVgsS0FBSyxFQUFFLElBQUk7UUFDYlMsSUFBSTtRQUNKNU4sSUFBSTs7TUFFTixHQUFHLENBQUNtTixJQUFJLENBQUN1MEQsS0FBSyxDQUFDaHFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7UUFDekIsTUFBTTtNQUNSOztNQUVBc0ksS0FBSyxFQUFFbU4sSUFBSSxDQUFDMG9FLE1BQU0sQ0FBQzFvRSxJQUFJLENBQUN3b0UsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNwQy9uRSxLQUFLLEVBQUVULElBQUksQ0FBQzBvRSxNQUFNLENBQUMxb0UsSUFBSSxDQUFDd29FLFFBQVEsRUFBRSxDQUFDLENBQUM7O01BRXBDLEdBQUcsQ0FBQy9uRSxLQUFLLEdBQUdBLElBQUksQ0FBQ2hZLEtBQUssSUFBSUEsSUFBSSxFQUFFO1FBQzlCdVgsSUFBSSxDQUFDcXJFLFNBQVMsQ0FBQzVxRSxJQUFJLENBQUM7TUFDdEI7O01BRUEsR0FBRyxDQUFDNU4sS0FBSyxHQUFHQSxJQUFJLENBQUNwSyxLQUFLLElBQUlBLElBQUksRUFBRTtRQUM5QnVYLElBQUksQ0FBQ3FyRSxTQUFTLENBQUN4NEUsSUFBSSxDQUFDO01BQ3RCO0lBQ0YsQ0FBQzs7Ozs7SUFLRGloQixLQUFLLEVBQUUsU0FBUyxDQUFDL2dCLENBQUMsRUFBRTAxRSxRQUFRLEVBQUU7TUFDNUIsSUFBSXpvRSxLQUFLLEVBQUUsSUFBSTtRQUNiK3dFLGFBQWEsRUFBRTtVQUNiLFNBQVM7VUFDVCxZQUFZO1VBQ1osK0RBQStEO1VBQy9ELDJDQUEyQztVQUMzQyw2Q0FBNkM7VUFDN0MsMkNBQTJDO1VBQzNDLFFBQVE7VUFDUixRQUFRO1VBQ1IsT0FBTztVQUNQLE9BQU87VUFDUCxPQUFPO1VBQ1AsbUJBQW1CO1VBQ25CO1FBQ0YsQ0FBQyxDQUFDOThFLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDWCs4RSxjQUFjO1FBQ2RDLGdCQUFnQjs7TUFFbEIsR0FBRyxDQUFDanhFLElBQUksQ0FBQ2dyRSxTQUFTLEVBQUU7UUFDbEIsTUFBTTtNQUNSOztNQUVBLEdBQUcsQ0FBQ2o0RSxFQUFFLEdBQUcsQ0FBQ2lOLElBQUksQ0FBQ2dvQixRQUFRLEdBQUcsQ0FBQ2hvQixJQUFJLENBQUNnb0IsT0FBTyxDQUFDdWpELFVBQVUsRUFBRTs7UUFFbER5RixlQUFlLEVBQUVoeEUsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQzV4RCxTQUFTLENBQUN6Z0IsSUFBSSxDQUFDLFdBQVcsQ0FBQztNQUN6RCxFQUFFLEtBQUs7O1FBRUxtNkUsZUFBZSxFQUFFaHhFLElBQUksQ0FBQ2dvQixPQUFPLENBQUNvakQsTUFBTSxDQUFDdjBFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzR4RSxTQUFTLEVBQUUsOEJBQThCLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDMUc7O01BRUF1SSxlQUFlLEVBQUVBLGNBQWMsQ0FBQ3I2RSxNQUFNLENBQUNvNkUsWUFBWSxDQUFDLENBQUNwNkUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3RFLE9BQU82NUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDdG1CLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQ3NtQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM3TSxRQUFRLENBQUMsVUFBVSxDQUFDO01BQ2hGLENBQUMsQ0FBQzs7TUFFRixHQUFHLENBQUNxdEQsY0FBYyxDQUFDem1GLE1BQU0sRUFBRTtRQUN6QjBtRixpQkFBaUIsRUFBRUQsY0FBYyxDQUFDbHdFLEtBQUssQ0FBQy9aLFFBQVEsQ0FBQ21VLGFBQWEsQ0FBQzs7UUFFL0QsR0FBRyxDQUFDbkksRUFBRSxHQUFHQSxDQUFDLENBQUM4ZixRQUFRLEVBQUU7O1VBRW5CLEdBQUcsQ0FBQ28rRCxpQkFBaUIsRUFBRSxFQUFFLEdBQUdBLGlCQUFpQixHQUFHLENBQUMsRUFBRTtZQUNqRGwrRSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQzs7WUFFbEIyZ0UsY0FBYyxDQUFDemxGLEVBQUUsQ0FBQ3lsRixjQUFjLENBQUN6bUYsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOG1CLE9BQU8sQ0FBQyxPQUFPLENBQUM7VUFDL0Q7UUFDRixFQUFFLEtBQUs7O1VBRUwsR0FBRyxDQUFDNC9ELGlCQUFpQixFQUFFLEVBQUUsR0FBR0EsaUJBQWlCLEdBQUdELGNBQWMsQ0FBQ3ptRixPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ3pFLEdBQUcsQ0FBQ3dJLENBQUMsRUFBRTtjQUNMQSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQztZQUNwQjs7WUFFQTJnRSxjQUFjLENBQUN6bEYsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOGxCLE9BQU8sQ0FBQyxPQUFPLENBQUM7VUFDdkM7UUFDRjtNQUNGLEVBQUUsS0FBSztRQUNMclIsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQzV4RCxTQUFTLENBQUNqRyxPQUFPLENBQUMsT0FBTyxDQUFDO01BQ3ZDO0lBQ0YsQ0FBQzs7Ozs7O0lBTURpeUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ3BCLElBQUl0akMsS0FBSyxFQUFFLElBQUk7OztNQUdmd3dCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDeGxDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN4QyxJQUFJMDlELFNBQVMsRUFBRWw0QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN2b0IsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7O1FBR3ZDLEdBQUcsQ0FBQ3lnRCxTQUFTLEdBQUdBLFFBQVEsQ0FBQy8wRCxHQUFHLElBQUlxTSxJQUFJLENBQUNyTSxHQUFHLEdBQUcsQ0FBQyswRCxRQUFRLENBQUNzaUIsU0FBUyxFQUFFO1VBQzlEdGlCLFFBQVEsQ0FBQ3IzQyxPQUFPLENBQUMsY0FBYyxDQUFDOztVQUVoQ3EzQyxRQUFRLENBQUN1aEIsWUFBWSxDQUFDLENBQUM7O1VBRXZCdmhCLFFBQVEsQ0FBQ3dvQixVQUFVLEVBQUUsS0FBSztRQUM1QjtNQUNGLENBQUMsQ0FBQzs7TUFFRmx4RSxJQUFJLENBQUNreEUsVUFBVSxFQUFFLElBQUk7O01BRXJCLEdBQUcsQ0FBQ2x4RSxJQUFJLENBQUNnb0IsUUFBUSxHQUFHaG9CLElBQUksQ0FBQ3VxRSxNQUFNLEVBQUU7UUFDL0J2cUUsSUFBSSxDQUFDdW9ELE1BQU0sQ0FBQyxDQUFDOztRQUVidm9ELElBQUksQ0FBQzZwRSxjQUFjLENBQUMsQ0FBQztNQUN2Qjs7TUFFQTdwRSxJQUFJLENBQUNxUixPQUFPLENBQUMsWUFBWSxDQUFDOztNQUUxQnJSLElBQUksQ0FBQ2dxRSxTQUFTLENBQUMsQ0FBQztJQUNsQixDQUFDOzs7Ozs7SUFNRDlpQyxLQUFLLEVBQUUsU0FBUyxDQUFDbjBDLENBQUMsRUFBRTJsQyxDQUFDLEVBQUU7TUFDckIsSUFBSTE0QixLQUFLLEVBQUUsSUFBSTtRQUNiZ29CLFFBQVEsRUFBRWhvQixJQUFJLENBQUNnb0IsT0FBTztRQUN0Qm9RLE1BQU07UUFDTnZiLFFBQVE7UUFDUmt2RCxRQUFRO1FBQ1JvRixPQUFPO1FBQ1A1MUQsT0FBTztRQUNQcmhCLEtBQUs7UUFDTHZPLEdBQUc7O01BRUwsSUFBSWdFLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQnFRLElBQUksQ0FBQ3kvQixPQUFPLENBQUMxc0MsQ0FBQyxDQUFDO01BQ2pCLENBQUM7O01BRUQsR0FBRyxDQUFDaU4sSUFBSSxDQUFDZ3JFLFNBQVMsRUFBRTtRQUNsQixPQUFPLEtBQUs7TUFDZDs7TUFFQWhyRSxJQUFJLENBQUNnckUsVUFBVSxFQUFFLElBQUk7OztNQUdyQixHQUFHLENBQUNockUsSUFBSSxDQUFDcVIsT0FBTyxDQUFDLGFBQWEsRUFBRXRlLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRTtRQUM1Q2lOLElBQUksQ0FBQ2dyRSxVQUFVLEVBQUUsS0FBSzs7UUFFdEJwRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDeEI1bUUsSUFBSSxDQUFDdW9ELE1BQU0sQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDOztRQUVGLE9BQU8sS0FBSztNQUNkOzs7O01BSUF2b0QsSUFBSSxDQUFDaXFFLFlBQVksQ0FBQyxDQUFDOztNQUVuQjhCLFNBQVMsRUFBRS9qRCxPQUFPLENBQUMrakQsUUFBUTtNQUMzQjN6QyxPQUFPLEVBQUVwUSxPQUFPLENBQUN0SixJQUFJLENBQUMya0QsZUFBZTtNQUNyQ3htRCxTQUFTLEVBQUUyVCxDQUFDLENBQUNOLFNBQVMsQ0FBQ3dJLENBQUMsRUFBRSxFQUFFQSxFQUFFLEVBQUVOLE9BQU8sRUFBRXBRLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzRrRCxrQkFBa0IsRUFBRSxDQUFDOztNQUUzRXQ3QyxPQUFPLENBQUNvakQsTUFBTSxDQUFDOW5ELFdBQVcsQ0FBQywwRkFBMEYsQ0FBQzs7TUFFdEgsR0FBRyxDQUFDdndCLEVBQUUsSUFBSSxJQUFJLEVBQUU7UUFDZHk5QixDQUFDLENBQUMweEMsUUFBUSxDQUFDLzRELElBQUksQ0FBQzZlLE9BQU8sQ0FBQ29qRCxNQUFNLENBQUM7TUFDakMsRUFBRSxLQUFLO1FBQ0xoekMsT0FBTyxFQUFFLEtBQUs7TUFDaEI7OztNQUdBcFEsT0FBTyxDQUFDb2pEO1FBQ04sQ0FBQzVyRSxRQUFRLENBQUM7UUFDVixDQUFDNlIsT0FBTyxDQUFDLFNBQVM7UUFDbEIsQ0FBQzVPLE1BQU0sQ0FBQyxDQUFDOzs7TUFHWCxHQUFHLENBQUNvYSxRQUFRLEVBQUU7UUFDWjdjLElBQUksQ0FBQ2twRSxLQUFLLENBQUM1eEQ7VUFDVCxDQUFDZ00sV0FBVyxDQUFDLGtCQUFrQjtVQUMvQixDQUFDTCxRQUFRLENBQUMscUJBQXFCO1VBQy9CLENBQUMvWSxHQUFHLENBQUMscUJBQXFCLEVBQUUyUyxTQUFTLEVBQUUsSUFBSSxDQUFDO01BQ2hEOzs7TUFHQTdjLElBQUksQ0FBQ2t2RSxXQUFXLENBQUNsbkQsT0FBTyxDQUFDOztNQUV6QmhvQixJQUFJLENBQUMycUUsWUFBWSxDQUFDLElBQUksQ0FBQzs7TUFFdkIzcUUsSUFBSSxDQUFDMHNFLFlBQVksQ0FBQyxDQUFDOzs7TUFHbkIsR0FBRztRQUNEdDBDLE9BQU8sSUFBSSxPQUFPO1FBQ2xCLENBQUMsQ0FBQzJ6QyxTQUFTLEdBQUdsdkQsU0FBUyxHQUFHbUwsT0FBTyxDQUFDdi9CLEtBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQ3VYLElBQUksQ0FBQzZxRSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUM3aUQsT0FBTyxDQUFDeWtELFNBQVMsR0FBRyxDQUFDOWdGLElBQUksRUFBRXFVLElBQUksQ0FBQ3N3RSxXQUFXLENBQUN0b0QsT0FBTyxDQUFDLENBQUM7TUFDakksRUFBRTtRQUNBb1EsT0FBTyxFQUFFLE1BQU07TUFDakI7O01BRUEsR0FBRyxDQUFDQSxPQUFPLElBQUksTUFBTSxFQUFFO1FBQ3JCNUgsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQy80RCxJQUFJLENBQUM0aUUsUUFBUSxDQUFDOztRQUV6Qm9GLFFBQVEsRUFBRTNnRCxDQUFDLENBQUMweEMsUUFBUSxDQUFDb0osWUFBWSxDQUFDUyxRQUFRLENBQUM7O1FBRTNDN3hFLE1BQU0sRUFBRTtVQUNOOUQsR0FBRyxFQUFFKzZFLE9BQU8sQ0FBQy82RSxHQUFHO1VBQ2hCMGxCLElBQUksRUFBRXExRCxPQUFPLENBQUNyMUQsSUFBSTtVQUNsQnl3RCxNQUFNLEVBQUU0RSxPQUFPLENBQUNuNUQsTUFBTSxFQUFFcnNCLEdBQUcsQ0FBQ3FzQixLQUFLO1VBQ2pDdzBELE1BQU0sRUFBRTJFLE9BQU8sQ0FBQy95RCxPQUFPLEVBQUV6eUIsR0FBRyxDQUFDeXlCLE1BQU07VUFDbkNwRyxLQUFLLEVBQUVyc0IsR0FBRyxDQUFDcXNCLEtBQUs7VUFDaEJvRyxNQUFNLEVBQUV6eUIsR0FBRyxDQUFDeXlCO1FBQ2QsQ0FBQzs7O1FBR0Q3QyxRQUFRLEVBQUV5TSxPQUFPLENBQUN0SixJQUFJLENBQUM2a0QsV0FBVzs7UUFFbEMsR0FBRyxDQUFDaG9ELFFBQVEsR0FBRyxNQUFNLEVBQUU7VUFDckJBLFFBQVEsRUFBRTV1QixJQUFJLENBQUM4ckMsR0FBRyxDQUFDelEsT0FBTyxDQUFDaFEsTUFBTSxFQUFFZ1EsT0FBTyxDQUFDNUosT0FBTyxFQUFFenlCLEdBQUcsQ0FBQ3FzQixNQUFNLEVBQUVyc0IsR0FBRyxDQUFDeXlCLE1BQU0sRUFBRSxFQUFFLEdBQUc7UUFDbkY7O1FBRUEsR0FBRyxDQUFDN0MsT0FBTyxFQUFFO1VBQ1g1dkIsR0FBRyxDQUFDNHZCLFFBQVEsRUFBRSxDQUFDO1FBQ2pCOztRQUVBaVYsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ3VKLFlBQVksQ0FBQ00sUUFBUSxFQUFFN3hFLEtBQUssQ0FBQzs7UUFFeEN3dEUsV0FBVyxDQUFDcUUsUUFBUSxDQUFDOztRQUVyQnY3QyxDQUFDLENBQUMweEMsUUFBUSxDQUFDeGhELE9BQU8sQ0FBQ3FyRCxRQUFRLEVBQUVwZ0YsR0FBRyxFQUFFa3hCLFFBQVEsRUFBRWx0QixJQUFJLENBQUM7O1FBRWpELE9BQU8sSUFBSTtNQUNiOztNQUVBLEdBQUcsQ0FBQ3lvQyxPQUFPLEdBQUd2YixRQUFRLEVBQUU7UUFDdEIyVCxDQUFDLENBQUMweEMsUUFBUSxDQUFDeGhELE9BQU87VUFDaEJzSCxPQUFPLENBQUNvakQsTUFBTSxDQUFDbm9ELFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDSyxXQUFXLENBQUMseUJBQXlCLENBQUM7VUFDMUYsaUNBQWlDLEVBQUU4VSxNQUFNO1VBQ3pDdmIsUUFBUTtVQUNSbHRCO1FBQ0YsQ0FBQztNQUNILEVBQUUsS0FBSzs7UUFFTCxHQUFHLENBQUNvRCxFQUFFLElBQUksSUFBSSxFQUFFO1VBQ2R3UyxVQUFVLENBQUM1VixJQUFJLEVBQUVrdEIsUUFBUSxDQUFDO1FBQzVCLEVBQUUsS0FBSztVQUNMbHRCLElBQUksQ0FBQyxDQUFDO1FBQ1I7TUFDRjs7TUFFQSxPQUFPLElBQUk7SUFDYixDQUFDOzs7OztJQUtEOHZDLE9BQU8sRUFBRSxTQUFTLENBQUMxc0MsQ0FBQyxFQUFFO01BQ3BCLElBQUlpTixLQUFLLEVBQUUsSUFBSTtRQUNiMG9ELFFBQVE7UUFDUjBvQixPQUFPLEVBQUVweEUsSUFBSSxDQUFDZ29CLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQytxRCxLQUFLO1FBQ2hDL3ZDLENBQUM7UUFDREosQ0FBQzs7TUFFSHQ1QixJQUFJLENBQUNnb0IsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQy81RCxPQUFPLENBQUMsU0FBUyxDQUFDOztNQUV0Q3JSLElBQUksQ0FBQ2twRSxLQUFLLENBQUM1eEQsU0FBUyxDQUFDNVUsS0FBSyxDQUFDLENBQUMsQ0FBQ0QsTUFBTSxDQUFDLENBQUM7O01BRXJDekMsSUFBSSxDQUFDcVIsT0FBTyxDQUFDLFlBQVksRUFBRXRlLENBQUMsQ0FBQzs7O01BRzdCLEdBQUcsQ0FBQyxDQUFDLENBQUNpTixJQUFJLENBQUNnb0IsT0FBTyxDQUFDdEosSUFBSSxDQUFDMmxELFNBQVMsRUFBRTtRQUNqQyxHQUFHLENBQUMsQ0FBQytNLE9BQU8sR0FBRyxDQUFDQSxNQUFNLENBQUM3bUYsT0FBTyxHQUFHLENBQUM2bUYsTUFBTSxDQUFDN3hFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUN2RDZ4RSxPQUFPLEVBQUVweEUsSUFBSSxDQUFDMnBFLFFBQVE7UUFDeEI7O1FBRUEsR0FBRyxDQUFDeUgsT0FBTyxHQUFHQSxNQUFNLENBQUM3bUYsTUFBTSxFQUFFO1VBQzNCbXZDLEVBQUUsRUFBRXh5QyxNQUFNLENBQUNtcUYsT0FBTztVQUNsQi8zQyxFQUFFLEVBQUVweUMsTUFBTSxDQUFDb3FGLE9BQU87O1VBRWxCRixNQUFNLENBQUMvL0QsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7VUFFdkJtZixDQUFDLENBQUMsWUFBWTtZQUNaLENBQUN2VCxTQUFTLENBQUNxYyxDQUFDO1lBQ1osQ0FBQ3BjLFVBQVUsQ0FBQ3djLENBQUMsQ0FBQztRQUNsQjtNQUNGOztNQUVBMTVCLElBQUksQ0FBQ2dvQixRQUFRLEVBQUUsSUFBSTs7O01BR25CMGdDLFNBQVMsRUFBRWw0QixDQUFDLENBQUMweEMsUUFBUSxDQUFDOEcsV0FBVyxDQUFDLENBQUM7O01BRW5DLEdBQUcsQ0FBQ3RnQixRQUFRLEVBQUU7UUFDWkEsUUFBUSxDQUFDcGxCLFFBQVEsQ0FBQyxDQUFDO01BQ3JCLEVBQUUsS0FBSztRQUNMOVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDbE4sV0FBVyxDQUFDLDBDQUEwQyxDQUFDOztRQUVqRWtOLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDL3RCLE1BQU0sQ0FBQyxDQUFDO01BQ3hDO0lBQ0YsQ0FBQzs7Ozs7SUFLRDRPLE9BQU8sRUFBRSxTQUFTLENBQUNybEIsSUFBSSxFQUFFczZELEtBQUssRUFBRTtNQUM5QixJQUFJOXJELEtBQUssRUFBRWpPLEtBQUssQ0FBQ25DLFNBQVMsQ0FBQzVDLEtBQUssQ0FBQ1UsSUFBSSxDQUFDbUQsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRDJVLEtBQUssRUFBRSxJQUFJO1FBQ1gzWCxJQUFJLEVBQUVpK0QsTUFBTSxHQUFHQSxLQUFLLENBQUM1bkMsS0FBSyxFQUFFNG5DLE1BQU0sRUFBRXRtRCxJQUFJLENBQUNnb0IsT0FBTztRQUNoRCsvQyxHQUFHOztNQUVMLEdBQUcsQ0FBQzEvRSxHQUFHLEVBQUU7UUFDUG1TLElBQUksQ0FBQ3ZDLE9BQU8sQ0FBQzVQLEdBQUcsQ0FBQztNQUNuQixFQUFFLEtBQUs7UUFDTEEsSUFBSSxFQUFFMlgsSUFBSTtNQUNaOztNQUVBeEYsSUFBSSxDQUFDdkMsT0FBTyxDQUFDK0gsSUFBSSxDQUFDOztNQUVsQixHQUFHLENBQUN3d0IsQ0FBQyxDQUFDcG9DLFVBQVUsQ0FBQ0MsR0FBRyxDQUFDcTJCLElBQUksQ0FBQzF5QixJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQ2hDKzdFLElBQUksRUFBRTEvRSxHQUFHLENBQUNxMkIsSUFBSSxDQUFDMXlCLElBQUksQ0FBQyxDQUFDWixLQUFLLENBQUMvQyxHQUFHLEVBQUVtUyxJQUFJLENBQUM7TUFDdkM7O01BRUEsR0FBRyxDQUFDdXRFLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDakIsT0FBT0EsR0FBRztNQUNaOztNQUVBLEdBQUcsQ0FBQy83RSxLQUFLLElBQUksYUFBYSxHQUFHLENBQUNnVSxJQUFJLENBQUNrcEUsS0FBSyxFQUFFO1FBQ3hDeEMsRUFBRSxDQUFDcjFELE9BQU8sQ0FBQ3JsQixLQUFLLEVBQUUsS0FBSyxFQUFFd08sSUFBSSxDQUFDO01BQ2hDLEVBQUUsS0FBSztRQUNMd0YsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQzV4RCxTQUFTLENBQUNqRyxPQUFPLENBQUNybEIsS0FBSyxFQUFFLEtBQUssRUFBRXdPLElBQUksQ0FBQztNQUNsRDtJQUNGLENBQUM7Ozs7O0lBS0RxdkUsY0FBYyxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQzFCLElBQUk3cEUsS0FBSyxFQUFFLElBQUk7UUFDYmdvQixRQUFRLEVBQUVob0IsSUFBSSxDQUFDZ29CLE9BQU87UUFDdEJsbkIsTUFBTSxFQUFFa25CLE9BQU8sQ0FBQ2xuQixLQUFLO1FBQ3JCZ29FLFdBQVcsRUFBRTlvRSxJQUFJLENBQUNrcEUsS0FBSyxDQUFDNXhELFNBQVM7UUFDakN5NEQsU0FBUyxFQUFFL3ZFLElBQUksQ0FBQ2twRSxLQUFLLENBQUM1OEQsT0FBTztRQUM3QkEsUUFBUSxFQUFFMGIsT0FBTyxDQUFDdEosSUFBSSxDQUFDcFMsT0FBTzs7O01BR2hDMGIsT0FBTyxDQUFDb2pELE1BQU0sQ0FBQy81RCxPQUFPLENBQUMsU0FBUyxDQUFDOzs7TUFHakMsR0FBRyxDQUFDL0UsUUFBUSxHQUFHQSxPQUFPLENBQUMvaEIsTUFBTSxFQUFFO1FBQzdCeVYsSUFBSSxDQUFDK3ZFLFNBQVMsRUFBRUEsUUFBUTs7UUFFeEJBO1VBQ0UsQ0FBQ3h2RSxRQUFRLENBQUM7VUFDVixDQUFDaFYsRUFBRSxDQUFDLENBQUM7VUFDTCxDQUFDa3FCLElBQUksQ0FBQ25KLE9BQU8sQ0FBQztNQUNsQixFQUFFLEtBQUs7UUFDTHRNLElBQUksQ0FBQyt2RSxTQUFTLEVBQUUsSUFBSTtNQUN0Qjs7TUFFQSxHQUFHLENBQUMsQ0FBQy92RSxJQUFJLENBQUN1eEUsa0JBQWtCLEdBQUcsQ0FBQ3Z4RSxJQUFJLENBQUN1cUUsTUFBTSxFQUFFO1FBQzNDdnFFLElBQUksQ0FBQ3dxRSxZQUFZLENBQUMsQ0FBQztNQUNyQjs7O01BR0ExQixVQUFVLENBQUNqeUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM0ZSxJQUFJLENBQUN6VixJQUFJLENBQUN1MEQsS0FBSyxDQUFDaHFFLE1BQU0sQ0FBQztNQUNoRXUrRSxVQUFVLENBQUNqeUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM0ZSxJQUFJLENBQUMzVSxNQUFNLEVBQUUsQ0FBQyxDQUFDOztNQUV4RGdvRSxVQUFVLENBQUNqeUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUNxUixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM4ZixPQUFPLENBQUN0SixJQUFJLENBQUMwakQsS0FBSyxHQUFHdGhFLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDMUZnb0UsVUFBVSxDQUFDanlFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDcVIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOGYsT0FBTyxDQUFDdEosSUFBSSxDQUFDMGpELEtBQUssR0FBR3RoRSxNQUFNLEdBQUdkLElBQUksQ0FBQ3UwRCxLQUFLLENBQUNocUUsT0FBTyxFQUFFLENBQUMsQ0FBQzs7TUFFOUcsR0FBRyxDQUFDeTlCLE9BQU8sQ0FBQ3YvQixLQUFLLElBQUksT0FBTyxFQUFFOztRQUU1QnFnRjtVQUNFLENBQUNqeUUsSUFBSSxDQUFDLHNCQUFzQjtVQUM1QixDQUFDdVUsSUFBSSxDQUFDO1VBQ04sQ0FBQ3pmLEdBQUcsQ0FBQztVQUNMLENBQUNrTCxJQUFJLENBQUMsMEJBQTBCO1VBQ2hDLENBQUN1QixJQUFJLENBQUMsTUFBTSxFQUFFNHZCLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzdpQixLQUFLLENBQUNuVCxJQUFJLEdBQUdzL0IsT0FBTyxDQUFDdC9CLEdBQUc7VUFDbkQsQ0FBQzBpQixJQUFJLENBQUMsQ0FBQztNQUNYLEVBQUUsS0FBSyxHQUFHLENBQUM0YyxPQUFPLENBQUN0SixJQUFJLENBQUNpa0QsT0FBTyxFQUFFO1FBQy9CbUcsVUFBVSxDQUFDanlFLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDeVUsSUFBSSxDQUFDLENBQUM7TUFDekU7OztNQUdBLEdBQUcsQ0FBQ2tsQixDQUFDLENBQUN6cEMsUUFBUSxDQUFDbVUsYUFBYSxDQUFDLENBQUNxRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRTtRQUN0RFMsSUFBSSxDQUFDa3BFLEtBQUssQ0FBQzV4RCxTQUFTLENBQUNqRyxPQUFPLENBQUMsT0FBTyxDQUFDO01BQ3ZDO0lBQ0YsQ0FBQzs7Ozs7SUFLRHM1RCxZQUFZLEVBQUUsU0FBUyxDQUFDNkcsVUFBVSxFQUFFO01BQ2xDLElBQUl4eEUsS0FBSyxFQUFFLElBQUk7UUFDYjVZLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDOztNQUVyQyxHQUFHLENBQUNvcUYsV0FBVyxHQUFHLENBQUN4eEUsSUFBSSxDQUFDZ29CLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzZqRCxxQkFBcUIsRUFBRTtRQUMxRG43RSxHQUFHLENBQUNNLElBQUksQ0FBQyxTQUFTLENBQUM7TUFDckI7O01BRUEsSUFBSSxDQUFDd2hGLEtBQUssQ0FBQzV4RCxTQUFTLENBQUNnTSxXQUFXO1FBQzlCbDhCO1FBQ0EsQ0FBQzhELEdBQUcsQ0FBQyxTQUFTLENBQUNqQyxDQUFDLEVBQUU7VUFDaEIsT0FBTyxpQkFBaUIsRUFBRUEsQ0FBQztRQUM3QixDQUFDO1FBQ0QsQ0FBQ2dMLElBQUksQ0FBQyxHQUFHO01BQ1gsQ0FBQzs7TUFFRCxJQUFJLENBQUNzOUUsa0JBQWtCLEVBQUUsSUFBSTtJQUMvQixDQUFDOztJQUVEL0csWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ3hCLElBQUl4cUUsS0FBSyxFQUFFLElBQUk7UUFDYjBlLEtBQUssRUFBRTFlLElBQUksQ0FBQ2dvQixRQUFRLEVBQUVob0IsSUFBSSxDQUFDZ29CLE9BQU8sQ0FBQ3RKLEtBQUssRUFBRTFlLElBQUksQ0FBQzBlLElBQUk7UUFDbkRvcUQsV0FBVyxFQUFFOW9FLElBQUksQ0FBQ2twRSxLQUFLLENBQUM1eEQsU0FBUzs7TUFFbkN0WCxJQUFJLENBQUN1eEUsa0JBQWtCLEVBQUUsS0FBSztNQUM5QnZ4RSxJQUFJLENBQUNzcUUsbUJBQW1CLEVBQUUsQ0FBQzs7TUFFM0J4QjtRQUNFLENBQUN2bEQsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDN0UsSUFBSSxDQUFDaWtELFFBQVEsR0FBR2prRCxJQUFJLENBQUN6TCxPQUFPLENBQUM7UUFDdEUsQ0FBQ3NRLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQzdFLElBQUksQ0FBQytqRCxRQUFRLEdBQUd6aUUsSUFBSSxDQUFDdTBELEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUNnNUIsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQ3ZqQixJQUFJLENBQUMrdkUsUUFBUTtRQUNyRCxDQUFDeHNELFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQzdFLElBQUksQ0FBQzhqRCxPQUFPLEdBQUd4aUUsSUFBSSxDQUFDdTBELEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUNnNUIsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQzdFLElBQUksQ0FBQ3NnQyxLQUFLLENBQUM7SUFDbkQsQ0FBQzs7Ozs7SUFLRHl5QixjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7TUFDMUIsR0FBRyxDQUFDLElBQUksQ0FBQ0YsaUJBQWlCLEVBQUU7UUFDMUIsSUFBSSxDQUFDL0csWUFBWSxDQUFDLENBQUM7TUFDckIsRUFBRSxLQUFLO1FBQ0wsSUFBSSxDQUFDRyxZQUFZLENBQUMsQ0FBQztNQUNyQjtJQUNGO0VBQ0YsQ0FBQyxDQUFDOztFQUVGbjZDLENBQUMsQ0FBQzB4QyxTQUFTLEVBQUU7SUFDWHI0RSxPQUFPLEVBQUUsT0FBTztJQUNoQnVuRSxRQUFRLEVBQUVBLFFBQVE7Ozs7Ozs7Ozs7Ozs7O0lBY2xCNFgsV0FBVyxFQUFFLFNBQVMsQ0FBQzNZLE9BQU8sRUFBRTtNQUM5QixJQUFJM0gsU0FBUyxFQUFFbDRCLENBQUMsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDdm9CLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdkZ6TixLQUFLLEVBQUVqTyxLQUFLLENBQUNuQyxTQUFTLENBQUM1QyxLQUFLLENBQUNVLElBQUksQ0FBQ21ELFNBQVMsRUFBRSxDQUFDLENBQUM7O01BRWpELEdBQUcsQ0FBQ3E5RCxTQUFTLFdBQVd5ZixRQUFRLEVBQUU7UUFDaEMsR0FBRyxDQUFDMzNDLENBQUMsQ0FBQy9uQyxJQUFJLENBQUM0bkUsT0FBTyxFQUFFLElBQUksUUFBUSxFQUFFO1VBQ2hDM0gsUUFBUSxDQUFDMkgsT0FBTyxDQUFDLENBQUNqbEUsS0FBSyxDQUFDczlELFFBQVEsRUFBRWx1RCxJQUFJLENBQUM7UUFDekMsRUFBRSxLQUFLLEdBQUcsQ0FBQ2cyQixDQUFDLENBQUMvbkMsSUFBSSxDQUFDNG5FLE9BQU8sRUFBRSxJQUFJLFVBQVUsRUFBRTtVQUN6Q0EsT0FBTyxDQUFDamxFLEtBQUssQ0FBQ3M5RCxRQUFRLEVBQUVsdUQsSUFBSSxDQUFDO1FBQy9COztRQUVBLE9BQU9rdUQsUUFBUTtNQUNqQjs7TUFFQSxPQUFPLEtBQUs7SUFDZCxDQUFDOzs7OztJQUtEdDhCLElBQUksRUFBRSxTQUFTLENBQUNnWixLQUFLLEVBQUUxbUIsSUFBSSxFQUFFNWQsS0FBSyxFQUFFO01BQ2xDLE9BQU8sSUFBSXFuRSxRQUFRLENBQUMvaUMsS0FBSyxFQUFFMW1CLElBQUksRUFBRTVkLEtBQUssQ0FBQztJQUN6QyxDQUFDOzs7OztJQUtEb21DLEtBQUssRUFBRSxTQUFTLENBQUM3L0IsR0FBRyxFQUFFO01BQ3BCLElBQUlxaEQsU0FBUyxFQUFFLElBQUksQ0FBQ3NnQixXQUFXLENBQUMsQ0FBQzs7TUFFakMsR0FBRyxDQUFDdGdCLFFBQVEsRUFBRTtRQUNaQSxRQUFRLENBQUN4aEIsS0FBSyxDQUFDLENBQUM7OztRQUdoQixHQUFHLENBQUM3L0IsSUFBSSxJQUFJLElBQUksRUFBRTtVQUNoQixJQUFJLENBQUM2L0IsS0FBSyxDQUFDNy9CLEdBQUcsQ0FBQztRQUNqQjtNQUNGO0lBQ0YsQ0FBQzs7Ozs7SUFLRDB2QixPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7TUFDbkIsSUFBSSxDQUFDbVEsS0FBSyxDQUFDLElBQUksQ0FBQzs7TUFFaEJ3L0IsRUFBRSxDQUFDMWxFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQ3VOLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUM7SUFDNUMsQ0FBQzs7Ozs7SUFLRDY1RCxRQUFRLEVBQUUsZ0VBQWdFLENBQUNyMEUsSUFBSSxDQUFDK2dELFNBQVMsQ0FBQ0MsU0FBUyxDQUFDOzs7OztJQUtwRzI4QixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUNsQixJQUFJcGtFLElBQUksRUFBRXZtQixRQUFRLENBQUNxQyxhQUFhLENBQUMsS0FBSyxDQUFDOztNQUV2QyxPQUFPO1FBQ0xsQyxNQUFNLENBQUNpd0IsaUJBQWlCO1FBQ3hCandCLE1BQU0sQ0FBQ2l3QixnQkFBZ0IsQ0FBQzdKLEdBQUcsRUFBRTtRQUM3QnBtQixNQUFNLENBQUNpd0IsZ0JBQWdCLENBQUM3SixHQUFHLENBQUMsQ0FBQzRMLGdCQUFnQixDQUFDLFdBQVcsRUFBRTtRQUMzRCxDQUFDLENBQUNueUIsUUFBUSxDQUFDbXZELGFBQWEsR0FBR252RCxRQUFRLENBQUNtdkQsYUFBYSxFQUFFLEVBQUU7TUFDdkQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7OztJQU1KbzFCLFlBQVksRUFBRSxTQUFTLENBQUMzRCxHQUFHLEVBQUU7TUFDM0IsSUFBSXdKLE9BQU87O01BRVgsR0FBRyxDQUFDLENBQUN4SixJQUFJLEdBQUcsQ0FBQ0EsR0FBRyxDQUFDcDlFLE1BQU0sRUFBRTtRQUN2QixPQUFPLEtBQUs7TUFDZDs7TUFFQTRtRixRQUFRLEVBQUV4SixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMvckQscUJBQXFCLENBQUMsQ0FBQzs7TUFFeEMsT0FBTztRQUNMeGxCLEdBQUcsRUFBRSs2RSxPQUFPLENBQUMvNkUsSUFBSSxHQUFHLENBQUM7UUFDckIwbEIsSUFBSSxFQUFFcTFELE9BQU8sQ0FBQ3IxRCxLQUFLLEdBQUcsQ0FBQztRQUN2QjlELEtBQUssRUFBRW01RCxPQUFPLENBQUNuNUQsS0FBSztRQUNwQm9HLE1BQU0sRUFBRSt5RCxPQUFPLENBQUMveUQsTUFBTTtRQUN0QjdDLE9BQU8sRUFBRWpELFVBQVUsQ0FBQ3F2RCxHQUFHLENBQUN6OUQsR0FBRyxDQUFDLFNBQVMsQ0FBQztNQUN4QyxDQUFDO0lBQ0gsQ0FBQzs7Ozs7O0lBTUR1aEUsWUFBWSxFQUFFLFNBQVMsQ0FBQzlELEdBQUcsRUFBRS8xRCxLQUFLLEVBQUU7TUFDbEMsSUFBSXkzRCxJQUFJLEVBQUUsRUFBRTtRQUNWbi9ELElBQUksRUFBRSxDQUFDLENBQUM7O01BRVYsR0FBRyxDQUFDLENBQUN5OUQsSUFBSSxHQUFHLENBQUMvMUQsS0FBSyxFQUFFO1FBQ2xCLE1BQU07TUFDUjs7TUFFQSxHQUFHLENBQUNBLEtBQUssQ0FBQ2tLLEtBQUssSUFBSXJ2QixVQUFVLEdBQUdtbEIsS0FBSyxDQUFDeGIsSUFBSSxJQUFJM0osU0FBUyxFQUFFO1FBQ3ZENDhFLElBQUk7VUFDRixDQUFDejNELEtBQUssQ0FBQ2tLLEtBQUssSUFBSXJ2QixVQUFVLEVBQUVrN0UsR0FBRyxDQUFDMXZELFFBQVEsQ0FBQyxDQUFDLENBQUM2RCxLQUFLLEVBQUVsSyxLQUFLLENBQUNrSyxJQUFJLEVBQUU7VUFDOUQsT0FBTztVQUNQLENBQUNsSyxLQUFLLENBQUN4YixJQUFJLElBQUkzSixVQUFVLEVBQUVrN0UsR0FBRyxDQUFDMXZELFFBQVEsQ0FBQyxDQUFDLENBQUM3aEIsSUFBSSxFQUFFd2IsS0FBSyxDQUFDeGIsR0FBRyxFQUFFO1VBQzNELElBQUk7O1FBRU4sR0FBRyxDQUFDLElBQUksQ0FBQ3M3RSxLQUFLLEVBQUU7VUFDZHJJLElBQUksRUFBRSxlQUFlLEVBQUVBLElBQUksRUFBRSxRQUFRO1FBQ3ZDLEVBQUUsS0FBSztVQUNMQSxJQUFJLEVBQUUsYUFBYSxFQUFFQSxJQUFJLEVBQUUsR0FBRztRQUNoQztNQUNGOztNQUVBLEdBQUcsQ0FBQ3ozRCxLQUFLLENBQUMyNkQsT0FBTyxJQUFJOS9FLFVBQVUsR0FBR21sQixLQUFLLENBQUM0NkQsT0FBTyxJQUFJLy9FLFNBQVMsRUFBRTtRQUM1RDQ4RSxJQUFJLEdBQUcsVUFBVSxFQUFFejNELEtBQUssQ0FBQzI2RCxPQUFPLEVBQUUsS0FBSyxFQUFFMzZELEtBQUssQ0FBQzQ2RCxPQUFPLEVBQUUsR0FBRztNQUM3RCxFQUFFLEtBQUssR0FBRyxDQUFDNTZELEtBQUssQ0FBQzI2RCxPQUFPLElBQUk5L0UsU0FBUyxFQUFFO1FBQ3JDNDhFLElBQUksR0FBRyxXQUFXLEVBQUV6M0QsS0FBSyxDQUFDMjZELE9BQU8sRUFBRSxHQUFHO01BQ3hDOztNQUVBLEdBQUcsQ0FBQ2xELEdBQUcsQ0FBQzkrRSxNQUFNLEVBQUU7UUFDZDJmLEdBQUcsQ0FBQ3doRSxVQUFVLEVBQUVyQyxHQUFHO01BQ3JCOztNQUVBLEdBQUcsQ0FBQ3ozRCxLQUFLLENBQUMySixRQUFRLElBQUk5dUIsU0FBUyxFQUFFO1FBQy9CeWQsR0FBRyxDQUFDcVIsUUFBUSxFQUFFM0osS0FBSyxDQUFDMkosT0FBTztNQUM3Qjs7TUFFQSxHQUFHLENBQUMzSixLQUFLLENBQUNvRyxNQUFNLElBQUl2ckIsU0FBUyxFQUFFO1FBQzdCeWQsR0FBRyxDQUFDOE4sTUFBTSxFQUFFcEcsS0FBSyxDQUFDb0csS0FBSztNQUN6Qjs7TUFFQSxHQUFHLENBQUNwRyxLQUFLLENBQUN3TSxPQUFPLElBQUkzeEIsU0FBUyxFQUFFO1FBQzlCeWQsR0FBRyxDQUFDa1UsT0FBTyxFQUFFeE0sS0FBSyxDQUFDd00sTUFBTTtNQUMzQjs7TUFFQSxPQUFPdXBELEdBQUcsQ0FBQ3o5RCxHQUFHLENBQUNBLEdBQUcsQ0FBQztJQUNyQixDQUFDOzs7OztJQUtEd1csT0FBTyxFQUFFLFNBQVMsQ0FBQ2luRCxHQUFHLEVBQUVsbkQsRUFBRSxFQUFFNUQsUUFBUSxFQUFFNXhCLFFBQVEsRUFBRTBtRixrQkFBa0IsRUFBRTtNQUNsRSxJQUFJM3hFLEtBQUssRUFBRSxJQUFJO1FBQ2JrOEIsSUFBSTs7TUFFTixHQUFHLENBQUMxTCxDQUFDLENBQUNwb0MsVUFBVSxDQUFDeTBCLFFBQVEsQ0FBQyxFQUFFO1FBQzFCNXhCLFNBQVMsRUFBRTR4QixRQUFRO1FBQ25CQSxTQUFTLEVBQUUsSUFBSTtNQUNqQjs7TUFFQTdjLElBQUksQ0FBQ21KLElBQUksQ0FBQ3crRCxHQUFHLENBQUM7O01BRWR6ckMsS0FBSyxFQUFFbDhCLElBQUksQ0FBQ3NyRSxZQUFZLENBQUMzRCxHQUFHLENBQUM7O01BRTdCQSxHQUFHLENBQUN6NUQsRUFBRSxDQUFDbTVELGFBQWEsRUFBRSxTQUFTLENBQUN0MEUsQ0FBQyxFQUFFOztRQUVqQyxHQUFHLENBQUNBLEVBQUUsR0FBR0EsQ0FBQyxDQUFDZ2UsY0FBYyxHQUFHLENBQUMsQ0FBQzQyRCxHQUFHLENBQUNwb0UsRUFBRSxDQUFDeE0sQ0FBQyxDQUFDZ2UsYUFBYSxDQUFDM2tCLE1BQU0sRUFBRSxHQUFHMkcsQ0FBQyxDQUFDZ2UsYUFBYSxDQUFDNmdFLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRTtVQUMxRyxNQUFNO1FBQ1I7O1FBRUE1eEUsSUFBSSxDQUFDbUosSUFBSSxDQUFDdytELEdBQUcsQ0FBQzs7UUFFZCxHQUFHLENBQUNuM0MsQ0FBQyxDQUFDTixTQUFTLENBQUNyVCxRQUFRLENBQUMsRUFBRTtVQUN6QjhxRCxHQUFHLENBQUN6OUQsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztRQUNwQzs7UUFFQSxHQUFHLENBQUNzbUIsQ0FBQyxDQUFDbGtDLGFBQWEsQ0FBQ20wQixFQUFFLENBQUMsRUFBRTtVQUN2QixHQUFHLENBQUNBLEVBQUUsQ0FBQzhyRCxPQUFPLElBQUk5L0UsVUFBVSxHQUFHZzBCLEVBQUUsQ0FBQytyRCxPQUFPLElBQUkvL0UsU0FBUyxFQUFFO1lBQ3REdVQsSUFBSSxDQUFDeXJFLFlBQVksQ0FBQzlELEdBQUcsRUFBRTtjQUNyQnZ4RSxHQUFHLEVBQUVxcUIsRUFBRSxDQUFDcnFCLEdBQUc7Y0FDWDBsQixJQUFJLEVBQUUyRSxFQUFFLENBQUMzRSxJQUFJO2NBQ2I5RCxLQUFLLEVBQUVra0IsSUFBSSxDQUFDbGtCLE1BQU0sRUFBRXlJLEVBQUUsQ0FBQzhyRCxNQUFNO2NBQzdCbnVELE1BQU0sRUFBRThkLElBQUksQ0FBQzlkLE9BQU8sRUFBRXFDLEVBQUUsQ0FBQytyRCxNQUFNO2NBQy9CRCxNQUFNLEVBQUUsQ0FBQztjQUNUQyxNQUFNLEVBQUU7WUFDVixDQUFDLENBQUM7VUFDSjtRQUNGLEVBQUUsS0FBSyxHQUFHLENBQUNtRixtQkFBbUIsSUFBSSxJQUFJLEVBQUU7VUFDdENoSyxHQUFHLENBQUNya0QsV0FBVyxDQUFDN0MsRUFBRSxDQUFDO1FBQ3JCOztRQUVBLEdBQUcsQ0FBQytQLENBQUMsQ0FBQ3BvQyxVQUFVLENBQUM2QyxRQUFRLENBQUMsRUFBRTtVQUMxQkEsUUFBUSxDQUFDOEgsQ0FBQyxDQUFDO1FBQ2I7TUFDRixDQUFDLENBQUM7O01BRUYsR0FBRyxDQUFDeTlCLENBQUMsQ0FBQ04sU0FBUyxDQUFDclQsUUFBUSxDQUFDLEVBQUU7UUFDekI4cUQsR0FBRyxDQUFDejlELEdBQUcsQ0FBQyxxQkFBcUIsRUFBRTJTLFNBQVMsRUFBRSxJQUFJLENBQUM7TUFDakQ7OztNQUdBLEdBQUcsQ0FBQzJULENBQUMsQ0FBQ2xrQyxhQUFhLENBQUNtMEIsRUFBRSxDQUFDLEVBQUU7UUFDdkIsR0FBRyxDQUFDQSxFQUFFLENBQUM4ckQsT0FBTyxJQUFJOS9FLFVBQVUsR0FBR2cwQixFQUFFLENBQUMrckQsT0FBTyxJQUFJLy9FLFNBQVMsRUFBRTtVQUN0RCxPQUFPZzBCLEVBQUUsQ0FBQ3pJLEtBQUs7VUFDZixPQUFPeUksRUFBRSxDQUFDckMsTUFBTTs7VUFFaEIsR0FBRyxDQUFDdXBELEdBQUcsQ0FBQ3h0RSxNQUFNLENBQUMsQ0FBQyxDQUFDd3BCLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1lBQ2xEZ2tELEdBQUcsQ0FBQ3h0RSxNQUFNLENBQUMsQ0FBQyxDQUFDOG9CLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztVQUM5QztRQUNGOztRQUVBdU4sQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ3VKLFlBQVksQ0FBQzlELEdBQUcsRUFBRWxuRCxFQUFFLENBQUM7TUFDbEMsRUFBRSxLQUFLO1FBQ0xrbkQsR0FBRyxDQUFDMWtELFFBQVEsQ0FBQ3hDLEVBQUUsQ0FBQztNQUNsQjs7O01BR0FrbkQsR0FBRyxDQUFDMS9ELElBQUk7UUFDTixPQUFPO1FBQ1AxQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDckJvaUUsR0FBRyxDQUFDdDJELE9BQU8sQ0FBQ2cyRCxhQUFhLENBQUM7UUFDNUIsQ0FBQyxFQUFFeHFELFNBQVMsRUFBRSxFQUFFO01BQ2xCLENBQUM7SUFDSCxDQUFDOztJQUVEMVQsSUFBSSxFQUFFLFNBQVMsQ0FBQ3crRCxHQUFHLEVBQUVrSyxZQUFZLEVBQUU7TUFDakMsR0FBRyxDQUFDbEssSUFBSSxHQUFHQSxHQUFHLENBQUNwOUUsTUFBTSxFQUFFO1FBQ3JCcTNCLFlBQVksQ0FBQytsRCxHQUFHLENBQUMxL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztRQUUvQixHQUFHLENBQUM0cEUsWUFBWSxFQUFFO1VBQ2hCbEssR0FBRyxDQUFDdDJELE9BQU8sQ0FBQ2cyRCxhQUFhLENBQUM7UUFDNUI7O1FBRUFNLEdBQUcsQ0FBQ3A1RCxHQUFHLENBQUM4NEQsYUFBYSxDQUFDLENBQUNuOUQsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQzs7UUFFckR5OUQsR0FBRyxDQUFDeHRFLE1BQU0sQ0FBQyxDQUFDLENBQUNtcEIsV0FBVyxDQUFDLHFCQUFxQixDQUFDO01BQ2pEO0lBQ0Y7RUFDRixDQUFDOzs7OztFQUtELFNBQVN3dUQsSUFBSSxDQUFDLytFLENBQUMsRUFBRTJyQixJQUFJLEVBQUU7SUFDckIsSUFBSTBtQixNQUFNLEVBQUUsQ0FBQyxDQUFDO01BQ1p0a0MsTUFBTSxFQUFFLENBQUM7TUFDVGl4RSxPQUFPO01BQ1A3akYsS0FBSztNQUNMdzZELFFBQVE7OztJQUdWLEdBQUcsQ0FBQzMxRCxFQUFFLEdBQUdBLENBQUMsQ0FBQzhlLGtCQUFrQixDQUFDLENBQUMsRUFBRTtNQUMvQixNQUFNO0lBQ1I7O0lBRUE5ZSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQzs7SUFFbEJxTyxLQUFLLEVBQUVBLEtBQUssR0FBRyxDQUFDLENBQUM7O0lBRWpCLEdBQUcsQ0FBQzNyQixFQUFFLEdBQUdBLENBQUMsQ0FBQ2tWLElBQUksRUFBRTtNQUNmeVcsS0FBSyxFQUFFa3BELFNBQVMsQ0FBQzcwRSxDQUFDLENBQUNrVixJQUFJLENBQUNsYyxPQUFPLEVBQUUyeUIsSUFBSSxDQUFDO0lBQ3hDOztJQUVBcXpELFFBQVEsRUFBRXJ6RCxJQUFJLENBQUNxekQsUUFBUSxHQUFHdmhELENBQUMsQ0FBQ3o5QixDQUFDLENBQUNtZCxhQUFhLENBQUMsQ0FBQ21CLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDNURxM0MsU0FBUyxFQUFFbDRCLENBQUMsQ0FBQzB4QyxRQUFRLENBQUM4RyxXQUFXLENBQUMsQ0FBQzs7SUFFbkMsR0FBRyxDQUFDdGdCLFNBQVMsR0FBR0EsUUFBUSxDQUFDaWhCLFNBQVMsR0FBR2poQixRQUFRLENBQUNpaEIsUUFBUSxDQUFDcHFFLEVBQUUsQ0FBQ3d5RSxPQUFPLENBQUMsRUFBRTtNQUNsRSxNQUFNO0lBQ1I7O0lBRUEsR0FBRyxDQUFDcnpELElBQUksQ0FBQzMwQixRQUFRLEVBQUU7TUFDakJxN0MsTUFBTSxFQUFFNVUsQ0FBQyxDQUFDOVIsSUFBSSxDQUFDMzBCLFFBQVEsQ0FBQztJQUMxQixFQUFFLEtBQUs7O01BRUxtRSxNQUFNLEVBQUU2akYsT0FBTyxDQUFDMzVFLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFOztNQUUzQyxHQUFHLENBQUNsSyxLQUFLLEVBQUU7UUFDVGszQyxNQUFNLEVBQUVyeUMsQ0FBQyxDQUFDa1YsS0FBSyxFQUFFbFYsQ0FBQyxDQUFDa1YsSUFBSSxDQUFDbTlCLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbENBLE1BQU0sRUFBRUEsS0FBSyxDQUFDNzZDLE9BQU8sRUFBRTY2QyxLQUFLLENBQUN6dUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFekksTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFc2lDLENBQUMsQ0FBQyxtQkFBbUIsRUFBRXRpQyxNQUFNLEVBQUUsSUFBSSxDQUFDO01BQy9HLEVBQUUsS0FBSztRQUNMazNDLE1BQU0sRUFBRSxDQUFDMnNDLE9BQU8sQ0FBQztNQUNuQjtJQUNGOztJQUVBanhFLE1BQU0sRUFBRTB2QixDQUFDLENBQUM0VSxLQUFLLENBQUMsQ0FBQ3RrQyxLQUFLLENBQUNpeEUsT0FBTyxDQUFDOzs7SUFHL0IsR0FBRyxDQUFDanhFLE1BQU0sRUFBRSxDQUFDLEVBQUU7TUFDYkEsTUFBTSxFQUFFLENBQUM7SUFDWDs7SUFFQTRuRCxTQUFTLEVBQUVsNEIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQzkxQyxJQUFJLENBQUNnWixLQUFLLEVBQUUxbUIsSUFBSSxFQUFFNWQsS0FBSyxDQUFDOzs7SUFHOUM0bkQsUUFBUSxDQUFDaWhCLFNBQVMsRUFBRW9JLE9BQU87RUFDN0I7Ozs7O0VBS0F2aEQsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQ2k0RSxTQUFTLEVBQUUsU0FBUyxDQUFDbjJFLE9BQU8sRUFBRTtJQUNqQyxJQUFJaEMsUUFBUTs7SUFFWmdDLFFBQVEsRUFBRUEsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN2QmhDLFNBQVMsRUFBRWdDLE9BQU8sQ0FBQ2hDLFNBQVMsR0FBRyxLQUFLOztJQUVwQyxHQUFHLENBQUNBLFFBQVEsRUFBRTs7TUFFWnltQyxDQUFDLENBQUMsTUFBTTtRQUNOLENBQUNqaUIsR0FBRyxDQUFDLGdCQUFnQixFQUFFeGtCLFFBQVE7UUFDL0IsQ0FBQ21rQixFQUFFLENBQUMsZ0JBQWdCLEVBQUVua0IsUUFBUSxFQUFFO1VBQzlCZ0MsT0FBTyxFQUFFQTtRQUNYLENBQUMsRUFBRStsRixJQUFJLENBQUM7SUFDWixFQUFFLEtBQUs7TUFDTCxJQUFJLENBQUN2akUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUNMLEVBQUU7UUFDM0IsZ0JBQWdCLEVBQUU7VUFDaEJrM0IsS0FBSyxFQUFFLElBQUk7VUFDWHI1QyxPQUFPLEVBQUVBO1FBQ1gsQ0FBQztRQUNEK2xGO01BQ0YsQ0FBQztJQUNIOztJQUVBLE9BQU8sSUFBSTtFQUNiLENBQUM7Ozs7O0VBS0RwTCxFQUFFLENBQUN4NEQsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFNGpFLElBQUksQ0FBQzs7Ozs7RUFLaERwTCxFQUFFLENBQUN4NEQsRUFBRSxDQUFDLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLFNBQVMsQ0FBQ25iLENBQUMsRUFBRTtJQUM5RHk5QixDQUFDLENBQUMsbUJBQW1CLEVBQUVBLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3A0QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJO01BQ2pFLENBQUM3TSxFQUFFLENBQUNpbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDcDRCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLENBQUM7TUFDNUMsQ0FBQ2laLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QnM0RCxRQUFRLEVBQUVuNUMsQ0FBQyxDQUFDLElBQUk7TUFDbEIsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDOzs7O0VBSUYsQ0FBQyxTQUFTLENBQUMsRUFBRTtJQUNYLElBQUl1NEMsVUFBVSxFQUFFLGtCQUFrQjtNQUNoQ2lKLFNBQVMsRUFBRSxnQkFBZ0I7TUFDM0JDLFNBQVMsRUFBRSxJQUFJOztJQUVqQnZMLEVBQUUsQ0FBQ3g0RCxFQUFFLENBQUMsOEJBQThCLEVBQUU2NkQsU0FBUyxFQUFFLFNBQVMsQ0FBQ2gyRSxDQUFDLEVBQUU7TUFDNUQsT0FBTyxDQUFDQSxDQUFDLENBQUN0SyxJQUFJLEVBQUU7UUFDZCxLQUFLLFdBQVc7VUFDZHdwRixTQUFTLEVBQUV6aEQsQ0FBQyxDQUFDLElBQUksQ0FBQztVQUNsQixLQUFLO1FBQ1AsS0FBSyxTQUFTO1VBQ1p5aEQsU0FBUyxFQUFFLElBQUk7VUFDZixLQUFLO1FBQ1AsS0FBSyxTQUFTO1VBQ1p6aEQsQ0FBQyxDQUFDdTRDLFNBQVMsQ0FBQyxDQUFDemxELFdBQVcsQ0FBQzB1RCxRQUFRLENBQUM7O1VBRWxDLEdBQUcsQ0FBQyxDQUFDeGhELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2p4QixFQUFFLENBQUMweUUsUUFBUSxFQUFFLEdBQUcsQ0FBQ3poRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNqeEIsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3REaXhCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3ZOLFFBQVEsQ0FBQyt1RCxRQUFRLENBQUM7VUFDNUI7VUFDQSxLQUFLO1FBQ1AsS0FBSyxVQUFVO1VBQ2J4aEQsQ0FBQyxDQUFDdTRDLFNBQVMsQ0FBQyxDQUFDemxELFdBQVcsQ0FBQzB1RCxRQUFRLENBQUM7VUFDbEMsS0FBSztNQUNUO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDOXFGLE1BQU0sRUFBRUgsUUFBUSxFQUFFK0MsTUFBTSxDQUFDOzs7Ozs7O0FBTzVCLENBQUMsU0FBUyxDQUFDMG1DLENBQUMsRUFBRTtFQUNaLFlBQVk7OztFQUdaLElBQUk0Z0MsU0FBUyxFQUFFO0lBQ2I4Z0IsT0FBTyxFQUFFO01BQ1B0M0UsT0FBTyxFQUFFLHVKQUF1SjtNQUNoS296QixNQUFNLEVBQUU7UUFDTm1rRCxRQUFRLEVBQUUsQ0FBQztRQUNYQyxRQUFRLEVBQUUsQ0FBQztRQUNYQyxFQUFFLEVBQUUsQ0FBQztRQUNMQyxHQUFHLEVBQUUsQ0FBQztRQUNOQyxFQUFFLEVBQUUsQ0FBQztRQUNMQyxLQUFLLEVBQUUsYUFBYTtRQUNwQkMsV0FBVyxFQUFFLENBQUM7UUFDZEMsS0FBSyxFQUFFO01BQ1QsQ0FBQztNQUNEQyxVQUFVLEVBQUUsQ0FBQztNQUNibHFGLElBQUksRUFBRSxRQUFRO01BQ2QrL0IsR0FBRyxFQUFFLDJDQUEyQztNQUNoRG9oRCxLQUFLLEVBQUU7SUFDVCxDQUFDOztJQUVEZ0osS0FBSyxFQUFFO01BQ0xoNEUsT0FBTyxFQUFFLG1DQUFtQztNQUM1Q296QixNQUFNLEVBQUU7UUFDTm1rRCxRQUFRLEVBQUUsQ0FBQztRQUNYSSxFQUFFLEVBQUUsQ0FBQztRQUNMTSxVQUFVLEVBQUUsQ0FBQztRQUNiQyxXQUFXLEVBQUUsQ0FBQztRQUNkQyxhQUFhLEVBQUUsQ0FBQztRQUNoQkMsVUFBVSxFQUFFO01BQ2QsQ0FBQztNQUNETCxVQUFVLEVBQUUsQ0FBQztNQUNibHFGLElBQUksRUFBRSxRQUFRO01BQ2QrL0IsR0FBRyxFQUFFO0lBQ1AsQ0FBQzs7SUFFRHlxRCxTQUFTLEVBQUU7TUFDVHI0RSxPQUFPLEVBQUUsd0RBQXdEO01BQ2pFblMsSUFBSSxFQUFFLE9BQU87TUFDYisvQixHQUFHLEVBQUU7SUFDUCxDQUFDOzs7Ozs7O0lBT0QwcUQsVUFBVSxFQUFFO01BQ1Z0NEUsT0FBTyxFQUFFLDJHQUEyRztNQUNwSG5TLElBQUksRUFBRSxRQUFRO01BQ2QrL0IsR0FBRyxFQUFFLFNBQVMsQ0FBQ3UvQyxHQUFHLEVBQUU7UUFDbEIsT0FBTztVQUNMLGlCQUFpQjtVQUNqQkEsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUNQLFFBQVE7VUFDUixDQUFDQSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUVBLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUVwN0UsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQytzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDQSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUVBLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQ2w3RSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFazdFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQ2w3RSxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtVQUNqSSxXQUFXO1VBQ1gsQ0FBQ2s3RSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUdBLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQ3BnRixPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPO1FBQ2xFLENBQUM7TUFDSDtJQUNGLENBQUM7Ozs7OztJQU1Ed3JGLFdBQVcsRUFBRTtNQUNYdjRFLE9BQU8sRUFBRSxtRUFBbUU7TUFDNUVuUyxJQUFJLEVBQUUsUUFBUTtNQUNkKy9CLEdBQUcsRUFBRSxTQUFTLENBQUN1L0MsR0FBRyxFQUFFO1FBQ2xCLE9BQU8saUJBQWlCLEVBQUVBLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUVBLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ2w3RSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDQSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWU7TUFDdkg7SUFDRjtFQUNGLENBQUM7OztFQUdELElBQUlrL0QsT0FBTyxFQUFFLFNBQVMsQ0FBQ3ZqQyxHQUFHLEVBQUV1L0MsR0FBRyxFQUFFLzVDLE1BQU0sRUFBRTtJQUN2QyxHQUFHLENBQUMsQ0FBQ3hGLEdBQUcsRUFBRTtNQUNSLE1BQU07SUFDUjs7SUFFQXdGLE9BQU8sRUFBRUEsT0FBTyxHQUFHLEVBQUU7O0lBRXJCLEdBQUcsQ0FBQ3dDLENBQUMsQ0FBQy9uQyxJQUFJLENBQUN1bEMsTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFO01BQy9CQSxPQUFPLEVBQUV3QyxDQUFDLENBQUNuTCxLQUFLLENBQUMySSxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQ2hDOztJQUVBd0MsQ0FBQyxDQUFDeGxDLElBQUksQ0FBQys4RSxHQUFHLEVBQUUsU0FBUyxDQUFDdnpFLEdBQUcsRUFBRXRHLEtBQUssRUFBRTtNQUNoQ3M2QixJQUFJLEVBQUVBLEdBQUcsQ0FBQzM3QixPQUFPLENBQUMsSUFBSSxFQUFFMkgsR0FBRyxFQUFFdEcsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUMzQyxDQUFDLENBQUM7O0lBRUYsR0FBRyxDQUFDOC9CLE1BQU0sQ0FBQ3pqQyxNQUFNLEVBQUU7TUFDakJpK0IsSUFBSSxHQUFHLENBQUNBLEdBQUcsQ0FBQzdnQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRXFtQyxNQUFNO0lBQ3BEOztJQUVBLE9BQU94RixHQUFHO0VBQ1osQ0FBQzs7RUFFRGdJLENBQUMsQ0FBQ3pwQyxRQUFRLENBQUMsQ0FBQ21uQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRWhpQixJQUFJLEVBQUU7SUFDaEUsSUFBSWxlLElBQUksRUFBRWtlLElBQUksQ0FBQ2grQyxJQUFJLEdBQUcsRUFBRTtNQUN0QkQsS0FBSyxFQUFFLEtBQUs7TUFDWmk4RSxLQUFLO01BQ0xrRixLQUFLO01BQ0w3QixHQUFHO01BQ0gvNUMsTUFBTTtNQUNOb2xELFNBQVM7TUFDVEMsUUFBUTtNQUNSQyxRQUFROztJQUVWNU8sTUFBTSxFQUFFbDBDLENBQUMsQ0FBQzFrQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFc2xFLFFBQVEsRUFBRTFxQixJQUFJLENBQUNob0IsSUFBSSxDQUFDZ21ELEtBQUssQ0FBQzs7O0lBR3JEbDBDLENBQUMsQ0FBQ3hsQyxJQUFJLENBQUMwNUUsS0FBSyxFQUFFLFNBQVMsQ0FBQzZPLFlBQVksRUFBRUMsWUFBWSxFQUFFO01BQ2xEekwsSUFBSSxFQUFFdi9DLEdBQUcsQ0FBQ3AxQixLQUFLLENBQUNvZ0YsWUFBWSxDQUFDNTRFLE9BQU8sQ0FBQzs7TUFFckMsR0FBRyxDQUFDLENBQUNtdEUsR0FBRyxFQUFFO1FBQ1IsTUFBTTtNQUNSOztNQUVBdC9FLEtBQUssRUFBRStxRixZQUFZLENBQUMvcUYsSUFBSTtNQUN4QjZxRixTQUFTLEVBQUVDLFlBQVk7TUFDdkJGLFNBQVMsRUFBRSxDQUFDLENBQUM7O01BRWIsR0FBRyxDQUFDRyxZQUFZLENBQUNiLFdBQVcsR0FBRzVLLEdBQUcsQ0FBQ3lMLFlBQVksQ0FBQ2IsVUFBVSxDQUFDLEVBQUU7UUFDM0RTLFVBQVUsRUFBRXJMLEdBQUcsQ0FBQ3lMLFlBQVksQ0FBQ2IsVUFBVSxDQUFDOztRQUV4QyxHQUFHLENBQUNTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUU7VUFDdkJBLFVBQVUsRUFBRUEsU0FBUyxDQUFDenhDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEM7O1FBRUF5eEMsVUFBVSxFQUFFQSxTQUFTLENBQUM5a0YsS0FBSyxDQUFDLEdBQUcsQ0FBQzs7UUFFaEMsSUFBSSxDQUFDLElBQUk0RSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUVrZ0YsU0FBUyxDQUFDN29GLE1BQU0sRUFBRSxFQUFFMkksQ0FBQyxFQUFFO1VBQ3pDLElBQUlrcUIsRUFBRSxFQUFFZzJELFNBQVMsQ0FBQ2xnRixDQUFDLENBQUMsQ0FBQzVFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztVQUVsQyxHQUFHLENBQUM4dUIsQ0FBQyxDQUFDN3lCLE9BQU8sR0FBRyxDQUFDLEVBQUU7WUFDakI4b0YsUUFBUSxDQUFDajJELENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFdXZDLGtCQUFrQixDQUFDdnZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3Z3QixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQy9EO1FBQ0Y7TUFDRjs7TUFFQW1oQyxPQUFPLEVBQUV3QyxDQUFDLENBQUMxa0MsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTBuRixZQUFZLENBQUN4bEQsTUFBTSxFQUFFMFksSUFBSSxDQUFDaG9CLElBQUksQ0FBQzYwRCxZQUFZLENBQUMsRUFBRUYsUUFBUSxDQUFDOztNQUVuRjdxRCxJQUFJO1FBQ0ZnSSxDQUFDLENBQUMvbkMsSUFBSSxDQUFDK3FGLFlBQVksQ0FBQ2hyRCxHQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUVnckQsWUFBWSxDQUFDaHJELEdBQUcsQ0FBQ3RnQyxJQUFJLENBQUMsSUFBSSxFQUFFNi9FLEdBQUcsRUFBRS81QyxNQUFNLEVBQUUwWSxJQUFJLEVBQUUsRUFBRXFsQixNQUFNLENBQUN5bkIsWUFBWSxDQUFDaHJELEdBQUcsRUFBRXUvQyxHQUFHLEVBQUUvNUMsTUFBTSxDQUFDOztNQUVsSTQ3QyxNQUFNO1FBQ0pwNUMsQ0FBQyxDQUFDL25DLElBQUksQ0FBQytxRixZQUFZLENBQUM1SixLQUFLLEVBQUUsSUFBSSxXQUFXLEVBQUU0SixZQUFZLENBQUM1SixLQUFLLENBQUMxaEYsSUFBSSxDQUFDLElBQUksRUFBRTYvRSxHQUFHLEVBQUUvNUMsTUFBTSxFQUFFMFksSUFBSSxFQUFFLEVBQUVxbEIsTUFBTSxDQUFDeW5CLFlBQVksQ0FBQzVKLEtBQUssRUFBRTdCLEdBQUcsQ0FBQzs7TUFFaEksR0FBRyxDQUFDd0wsYUFBYSxJQUFJLFNBQVMsRUFBRTtRQUM5Qi9xRCxJQUFJLEVBQUVBLEdBQUcsQ0FBQzM3QixPQUFPLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDdUcsS0FBSyxFQUFFcWdGLEVBQUUsRUFBRXZnRixDQUFDLEVBQUVveUIsQ0FBQyxFQUFFO1VBQ2pFLE9BQU8sVUFBVSxFQUFFLENBQUMsQ0FBQ3B5QixFQUFFLEVBQUUydkIsUUFBUSxDQUFDM3ZCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUydkIsUUFBUSxDQUFDeUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQztNQUNKLEVBQUUsS0FBSyxHQUFHLENBQUNpdUQsYUFBYSxJQUFJLE9BQU8sRUFBRTtRQUNuQy9xRCxJQUFJLEVBQUVBLEdBQUcsQ0FBQzM3QixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztNQUNoQzs7TUFFQSxPQUFPLEtBQUs7SUFDZCxDQUFDLENBQUM7Ozs7SUFJRixHQUFHLENBQUNwRSxJQUFJLEVBQUU7TUFDUixHQUFHLENBQUMsQ0FBQ2krQyxJQUFJLENBQUNob0IsSUFBSSxDQUFDa3JELE1BQU0sR0FBRyxDQUFDLENBQUNsakMsSUFBSSxDQUFDaG9CLElBQUksQ0FBQ2dyRCxPQUFPLEdBQUdoakMsSUFBSSxDQUFDaG9CLElBQUksQ0FBQ2dyRCxNQUFNLENBQUNuL0UsTUFBTSxDQUFDLEVBQUU7UUFDdEVtOEMsSUFBSSxDQUFDaG9CLElBQUksQ0FBQ2tyRCxNQUFNLEVBQUVBLEtBQUs7TUFDekI7O01BRUEsR0FBRyxDQUFDbmhGLEtBQUssSUFBSSxRQUFRLEVBQUU7UUFDckJpK0MsSUFBSSxDQUFDaG9CLEtBQUssRUFBRThSLENBQUMsQ0FBQzFrQyxNQUFNLENBQUMsSUFBSSxFQUFFNDZDLElBQUksQ0FBQ2hvQixJQUFJLEVBQUU7VUFDcENxa0QsTUFBTSxFQUFFO1lBQ05ELE9BQU8sRUFBRSxLQUFLO1lBQ2QxcUUsSUFBSSxFQUFFO2NBQ0o2cUUsU0FBUyxFQUFFO1lBQ2I7VUFDRjtRQUNGLENBQUMsQ0FBQztNQUNKOztNQUVBenlDLENBQUMsQ0FBQzFrQyxNQUFNLENBQUM0NkMsSUFBSSxFQUFFO1FBQ2JqK0MsSUFBSSxFQUFFQSxJQUFJO1FBQ1ZDLEdBQUcsRUFBRTgvQixHQUFHO1FBQ1JrckQsT0FBTyxFQUFFaHRDLElBQUksQ0FBQ2grQyxHQUFHO1FBQ2pCaXJGLGFBQWEsRUFBRUwsUUFBUTtRQUN2QnpxRCxXQUFXLEVBQUVwZ0MsS0FBSyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUU2cUYsU0FBUyxHQUFHLGFBQWEsR0FBR0EsU0FBUyxHQUFHLGNBQWMsRUFBRSxNQUFNLEVBQUU7TUFDNUcsQ0FBQyxDQUFDO0lBQ0osRUFBRSxLQUFLLEdBQUcsQ0FBQzlxRCxHQUFHLEVBQUU7TUFDZGtlLElBQUksQ0FBQ2orQyxLQUFLLEVBQUVpK0MsSUFBSSxDQUFDaG9CLElBQUksQ0FBQzBrRCxXQUFXO0lBQ25DO0VBQ0YsQ0FBQyxDQUFDOzs7RUFHRixJQUFJd1EsZUFBZSxFQUFFO0lBQ25CMUIsT0FBTyxFQUFFO01BQ1B4cEYsR0FBRyxFQUFFLG9DQUFvQztNQUN6QyxLQUFLLEVBQUUsSUFBSTtNQUNYbXJGLE9BQU8sRUFBRSxLQUFLO01BQ2RDLE1BQU0sRUFBRTtJQUNWLENBQUM7O0lBRURsQixLQUFLLEVBQUU7TUFDTGxxRixHQUFHLEVBQUUsd0NBQXdDO01BQzdDLEtBQUssRUFBRSxPQUFPO01BQ2RtckYsT0FBTyxFQUFFLEtBQUs7TUFDZEMsTUFBTSxFQUFFO0lBQ1YsQ0FBQzs7SUFFRDdpRSxJQUFJLEVBQUUsU0FBUyxDQUFDOGlFLE1BQU0sRUFBRTtNQUN0QixJQUFJQyxNQUFNLEVBQUUsSUFBSTtRQUNkN3FGLE1BQU07O01BRVIsR0FBRyxDQUFDLElBQUksQ0FBQzRxRixNQUFNLENBQUMsQ0FBQ0QsTUFBTSxFQUFFO1FBQ3ZCdnVFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUNyQnl1RSxLQUFLLENBQUNya0YsSUFBSSxDQUFDb2tGLE1BQU0sQ0FBQztRQUNwQixDQUFDLENBQUM7UUFDRixNQUFNO01BQ1I7O01BRUEsR0FBRyxDQUFDLElBQUksQ0FBQ0EsTUFBTSxDQUFDLENBQUNGLE9BQU8sRUFBRTtRQUN4QixNQUFNO01BQ1I7O01BRUEsSUFBSSxDQUFDRSxNQUFNLENBQUMsQ0FBQ0YsUUFBUSxFQUFFLElBQUk7O01BRTNCMXFGLE9BQU8sRUFBRXBDLFFBQVEsQ0FBQ3FDLGFBQWEsQ0FBQyxRQUFRLENBQUM7TUFDekNELE1BQU0sQ0FBQ1YsS0FBSyxFQUFFLGlCQUFpQjtNQUMvQlUsTUFBTSxDQUFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDcXJGLE1BQU0sQ0FBQyxDQUFDcnJGLEdBQUc7O01BRTdCLEdBQUcsQ0FBQ3FyRixPQUFPLElBQUksU0FBUyxFQUFFO1FBQ3hCN3NGLE1BQU0sQ0FBQytzRix3QkFBd0IsRUFBRSxTQUFTLENBQUMsRUFBRTtVQUMzQ0QsS0FBSyxDQUFDRCxNQUFNLENBQUMsQ0FBQ0QsT0FBTyxFQUFFLElBQUk7VUFDM0JFLEtBQUssQ0FBQ3JrRixJQUFJLENBQUNva0YsTUFBTSxDQUFDO1FBQ3BCLENBQUM7TUFDSCxFQUFFLEtBQUs7UUFDTDVxRixNQUFNLENBQUNvakMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1VBQzFCeW5ELEtBQUssQ0FBQ0QsTUFBTSxDQUFDLENBQUNELE9BQU8sRUFBRSxJQUFJO1VBQzNCRSxLQUFLLENBQUNya0YsSUFBSSxDQUFDb2tGLE1BQU0sQ0FBQztRQUNwQixDQUFDO01BQ0g7O01BRUFodEYsUUFBUSxDQUFDbWtCLElBQUksQ0FBQ3poQixXQUFXLENBQUNOLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBQ0R3RyxJQUFJLEVBQUUsU0FBUyxDQUFDb2tGLE1BQU0sRUFBRTtNQUN0QixJQUFJcnJCLFFBQVEsRUFBRWlmLEdBQUcsRUFBRXVNLE1BQU07O01BRXpCLEdBQUcsQ0FBQ0gsT0FBTyxJQUFJLFNBQVMsRUFBRTtRQUN4QixPQUFPN3NGLE1BQU0sQ0FBQytzRix1QkFBdUI7TUFDdkM7O01BRUF2ckIsU0FBUyxFQUFFbDRCLENBQUMsQ0FBQzB4QyxRQUFRLENBQUM4RyxXQUFXLENBQUMsQ0FBQzs7TUFFbkMsR0FBRyxDQUFDdGdCLFFBQVEsRUFBRTtRQUNaaWYsSUFBSSxFQUFFamYsUUFBUSxDQUFDMWdDLE9BQU8sQ0FBQytqRCxRQUFRLENBQUNsMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7UUFFOUMsR0FBRyxDQUFDazlFLE9BQU8sSUFBSSxVQUFVLEdBQUdJLEdBQUcsSUFBSTFuRixVQUFVLEdBQUcwbkYsRUFBRSxFQUFFO1VBQ2xERCxPQUFPLEVBQUUsSUFBSUMsRUFBRSxDQUFDQyxNQUFNLENBQUN6TSxHQUFHLENBQUN2dkUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JDc1csTUFBTSxFQUFFO2NBQ04ybEUsYUFBYSxFQUFFLFNBQVMsQ0FBQ3RoRixDQUFDLEVBQUU7Z0JBQzFCLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDa1YsS0FBSyxHQUFHLENBQUMsRUFBRTtrQkFDZnlnRCxRQUFRLENBQUM3MUQsSUFBSSxDQUFDLENBQUM7Z0JBQ2pCO2NBQ0Y7WUFDRjtVQUNGLENBQUMsQ0FBQztRQUNKLEVBQUUsS0FBSyxHQUFHLENBQUNraEYsT0FBTyxJQUFJLFFBQVEsR0FBR08sTUFBTSxJQUFJN25GLFVBQVUsR0FBRzZuRixLQUFLLEVBQUU7VUFDN0RKLE9BQU8sRUFBRSxJQUFJSSxLQUFLLENBQUNGLE1BQU0sQ0FBQ3pNLEdBQUcsQ0FBQzs7VUFFOUJ1TSxNQUFNLENBQUNobUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtZQUM3Qnc2QyxRQUFRLENBQUM3MUQsSUFBSSxDQUFDLENBQUM7VUFDakIsQ0FBQyxDQUFDO1FBQ0o7TUFDRjtJQUNGO0VBQ0YsQ0FBQzs7RUFFRDI5QixDQUFDLENBQUN6cEMsUUFBUSxDQUFDLENBQUNtbkIsRUFBRSxDQUFDO0lBQ2IsY0FBYyxFQUFFLFNBQVMsQ0FBQ25iLENBQUMsRUFBRTIxRCxRQUFRLEVBQUUxZ0MsT0FBTyxFQUFFO01BQzlDLEdBQUcsQ0FBQzBnQyxRQUFRLENBQUM2TCxLQUFLLENBQUNocUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDeTlCLE9BQU8sQ0FBQzJyRCxjQUFjLElBQUksVUFBVSxHQUFHM3JELE9BQU8sQ0FBQzJyRCxjQUFjLElBQUksT0FBTyxDQUFDLEVBQUU7UUFDM0dDLGNBQWMsQ0FBQzNpRSxJQUFJLENBQUMrVyxPQUFPLENBQUMyckQsYUFBYSxDQUFDO01BQzVDO0lBQ0Y7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQzdwRixNQUFNLENBQUM7Ozs7Ozs7QUFPVixDQUFDLFNBQVMsQ0FBQzVDLE1BQU0sRUFBRUgsUUFBUSxFQUFFeXBDLENBQUMsRUFBRTtFQUM5QixZQUFZOztFQUVaLElBQUlvMkMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDL0IsT0FBTztNQUNMMS9FLE1BQU0sQ0FBQzQyQixzQkFBc0I7TUFDN0I1MkIsTUFBTSxDQUFDMi9FLDRCQUE0QjtNQUNuQzMvRSxNQUFNLENBQUM0L0UseUJBQXlCO01BQ2hDNS9FLE1BQU0sQ0FBQzYvRSx1QkFBdUI7O01BRTlCLFNBQVMsQ0FBQzk3RSxRQUFRLEVBQUU7UUFDbEIsT0FBTy9ELE1BQU0sQ0FBQ3FlLFVBQVUsQ0FBQ3RhLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO01BQy9DO0lBQ0YsQ0FBQztFQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRUosSUFBSSs3RSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtJQUM5QixPQUFPO01BQ0w5L0UsTUFBTSxDQUFDKy9FLHFCQUFxQjtNQUM1Qi8vRSxNQUFNLENBQUNnZ0YsMkJBQTJCO01BQ2xDaGdGLE1BQU0sQ0FBQ2lnRix3QkFBd0I7TUFDL0JqZ0YsTUFBTSxDQUFDa2dGLHNCQUFzQjtNQUM3QixTQUFTLENBQUN6ekUsRUFBRSxFQUFFO1FBQ1p6TSxNQUFNLENBQUMwNkIsWUFBWSxDQUFDanVCLEVBQUUsQ0FBQztNQUN6QjtJQUNGLENBQUM7RUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVKLElBQUk0Z0YsYUFBYSxFQUFFLFNBQVMsQ0FBQ3hoRixDQUFDLEVBQUU7SUFDOUIsSUFBSTBHLE9BQU8sRUFBRSxDQUFDLENBQUM7O0lBRWYxRyxFQUFFLEVBQUVBLENBQUMsQ0FBQ2dlLGNBQWMsR0FBR2hlLEVBQUUsR0FBRzdMLE1BQU0sQ0FBQzZMLENBQUM7SUFDcENBLEVBQUUsRUFBRUEsQ0FBQyxDQUFDNmdCLFFBQVEsR0FBRzdnQixDQUFDLENBQUM2Z0IsT0FBTyxDQUFDcnBCLE9BQU8sRUFBRXdJLENBQUMsQ0FBQzZnQixRQUFRLEVBQUU3Z0IsQ0FBQyxDQUFDdWYsZUFBZSxHQUFHdmYsQ0FBQyxDQUFDdWYsY0FBYyxDQUFDL25CLE9BQU8sRUFBRXdJLENBQUMsQ0FBQ3VmLGVBQWUsRUFBRSxDQUFDdmYsQ0FBQyxDQUFDOztJQUVwSCxJQUFJLENBQUMsSUFBSXlCLElBQUksR0FBR3pCLENBQUMsRUFBRTtNQUNqQixHQUFHLENBQUNBLENBQUMsQ0FBQ3lCLEdBQUcsQ0FBQyxDQUFDbWUsS0FBSyxFQUFFO1FBQ2hCbFosTUFBTSxDQUFDL1IsSUFBSSxDQUFDO1VBQ1ZneUMsQ0FBQyxFQUFFM21DLENBQUMsQ0FBQ3lCLEdBQUcsQ0FBQyxDQUFDbWUsS0FBSztVQUNmMm1CLENBQUMsRUFBRXZtQyxDQUFDLENBQUN5QixHQUFHLENBQUMsQ0FBQ29lO1FBQ1osQ0FBQyxDQUFDO01BQ0osRUFBRSxLQUFLLEdBQUcsQ0FBQzdmLENBQUMsQ0FBQ3lCLEdBQUcsQ0FBQyxDQUFDMGUsT0FBTyxFQUFFO1FBQ3pCelosTUFBTSxDQUFDL1IsSUFBSSxDQUFDO1VBQ1ZneUMsQ0FBQyxFQUFFM21DLENBQUMsQ0FBQ3lCLEdBQUcsQ0FBQyxDQUFDMGUsT0FBTztVQUNqQm9tQixDQUFDLEVBQUV2bUMsQ0FBQyxDQUFDeUIsR0FBRyxDQUFDLENBQUMyZTtRQUNaLENBQUMsQ0FBQztNQUNKO0lBQ0Y7O0lBRUEsT0FBTzFaLE1BQU07RUFDZixDQUFDOztFQUVELElBQUltbkMsU0FBUyxFQUFFLFNBQVMsQ0FBQzR6QyxNQUFNLEVBQUVDLE1BQU0sRUFBRS82RSxJQUFJLEVBQUU7SUFDN0MsR0FBRyxDQUFDLENBQUMrNkUsT0FBTyxHQUFHLENBQUNELE1BQU0sRUFBRTtNQUN0QixPQUFPLENBQUM7SUFDVjs7SUFFQSxHQUFHLENBQUM5NkUsS0FBSyxJQUFJLEdBQUcsRUFBRTtNQUNoQixPQUFPODZFLE1BQU0sQ0FBQzk2QyxFQUFFLEVBQUUrNkMsTUFBTSxDQUFDLzZDLENBQUM7SUFDNUIsRUFBRSxLQUFLLEdBQUcsQ0FBQ2hnQyxLQUFLLElBQUksR0FBRyxFQUFFO01BQ3ZCLE9BQU84NkUsTUFBTSxDQUFDbDdDLEVBQUUsRUFBRW03QyxNQUFNLENBQUNuN0MsQ0FBQztJQUM1Qjs7SUFFQSxPQUFPM3NDLElBQUksQ0FBQ3l6QyxJQUFJLENBQUN6ekMsSUFBSSxDQUFDc3pDLEdBQUcsQ0FBQ3UwQyxNQUFNLENBQUM5NkMsRUFBRSxFQUFFKzZDLE1BQU0sQ0FBQy82QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUvc0MsSUFBSSxDQUFDc3pDLEdBQUcsQ0FBQ3UwQyxNQUFNLENBQUNsN0MsRUFBRSxFQUFFbTdDLE1BQU0sQ0FBQ243QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDdkYsQ0FBQzs7RUFFRCxJQUFJbzdDLFlBQVksRUFBRSxTQUFTLENBQUMvTSxHQUFHLEVBQUU7SUFDL0IsR0FBRztNQUNEQSxHQUFHLENBQUNwb0UsRUFBRSxDQUFDLHNGQUFzRixFQUFFO01BQy9GaXhCLENBQUMsQ0FBQ3BvQyxVQUFVLENBQUN1L0UsR0FBRyxDQUFDbDlFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tvRSxPQUFPLEVBQUU7TUFDakNnVixHQUFHLENBQUMxL0QsSUFBSSxDQUFDLFlBQVk7SUFDdkIsRUFBRTtNQUNBLE9BQU8sSUFBSTtJQUNiOzs7SUFHQSxJQUFJLENBQUMsSUFBSWhmLEVBQUUsRUFBRSxDQUFDLEVBQUUwckYsS0FBSyxFQUFFaE4sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDajNFLFVBQVUsRUFBRStPLEVBQUUsRUFBRWsxRSxJQUFJLENBQUNwcUYsTUFBTSxFQUFFdEIsRUFBRSxFQUFFd1csQ0FBQyxFQUFFeFcsQ0FBQyxFQUFFLEVBQUU7TUFDckUsR0FBRyxDQUFDMHJGLElBQUksQ0FBQzFyRixDQUFDLENBQUMsQ0FBQzBKLFFBQVEsQ0FBQ3crQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLGdCQUFnQixFQUFFO1FBQ3ZELE9BQU8sSUFBSTtNQUNiO0lBQ0Y7O0lBRUEsT0FBTyxLQUFLO0VBQ2QsQ0FBQzs7RUFFRCxJQUFJeWpDLGNBQWMsRUFBRSxTQUFTLENBQUMvL0UsRUFBRSxFQUFFO0lBQ2hDLElBQUl1cUIsVUFBVSxFQUFFbDRCLE1BQU0sQ0FBQ2l3QixnQkFBZ0IsQ0FBQ3RpQixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7TUFDdkRzcUIsVUFBVSxFQUFFajRCLE1BQU0sQ0FBQ2l3QixnQkFBZ0IsQ0FBQ3RpQixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7TUFDckQybEMsU0FBUyxFQUFFLENBQUNwYixVQUFVLElBQUksU0FBUyxHQUFHQSxVQUFVLElBQUksTUFBTSxFQUFFLEdBQUd2cUIsRUFBRSxDQUFDbWtDLGFBQWEsRUFBRW5rQyxFQUFFLENBQUN5NUMsWUFBWTtNQUNoRy9ULFdBQVcsRUFBRSxDQUFDcGIsVUFBVSxJQUFJLFNBQVMsR0FBR0EsVUFBVSxJQUFJLE1BQU0sRUFBRSxHQUFHdHFCLEVBQUUsQ0FBQ2trQyxZQUFZLEVBQUVsa0MsRUFBRSxDQUFDK2pDLFdBQVc7O0lBRWxHLE9BQU80QixTQUFTLEdBQUdELFVBQVU7RUFDL0IsQ0FBQzs7RUFFRCxJQUFJczZDLGFBQWEsRUFBRSxTQUFTLENBQUNsTixHQUFHLEVBQUU7SUFDaEMsSUFBSUksSUFBSSxFQUFFLEtBQUs7O0lBRWYsTUFBTSxDQUFDLElBQUksRUFBRTtNQUNYQSxJQUFJLEVBQUU2TSxhQUFhLENBQUNqTixHQUFHLENBQUNsOUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztNQUUvQixHQUFHLENBQUNzOUUsR0FBRyxFQUFFO1FBQ1AsS0FBSztNQUNQOztNQUVBSixJQUFJLEVBQUVBLEdBQUcsQ0FBQ3h0RSxNQUFNLENBQUMsQ0FBQzs7TUFFbEIsR0FBRyxDQUFDLENBQUN3dEUsR0FBRyxDQUFDcDlFLE9BQU8sR0FBR285RSxHQUFHLENBQUNoa0QsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUdna0QsR0FBRyxDQUFDcG9FLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNuRSxLQUFLO01BQ1A7SUFDRjs7SUFFQSxPQUFPd29FLEdBQUc7RUFDWixDQUFDOztFQUVELElBQUl5RixVQUFVLEVBQUUsU0FBUyxDQUFDOWtCLFFBQVEsRUFBRTtJQUNsQyxJQUFJMW9ELEtBQUssRUFBRSxJQUFJOztJQUVmQSxJQUFJLENBQUMwb0QsU0FBUyxFQUFFQSxRQUFROztJQUV4QjFvRCxJQUFJLENBQUM4MEUsSUFBSSxFQUFFcHNCLFFBQVEsQ0FBQ3dnQixLQUFLLENBQUM2TCxFQUFFO0lBQzVCLzBFLElBQUksQ0FBQ2cxRSxPQUFPLEVBQUV0c0IsUUFBUSxDQUFDd2dCLEtBQUssQ0FBQ2tCLEtBQUs7SUFDbENwcUUsSUFBSSxDQUFDOG9FLFdBQVcsRUFBRXBnQixRQUFRLENBQUN3Z0IsS0FBSyxDQUFDNXhELFNBQVM7O0lBRTFDdFgsSUFBSSxDQUFDKzJCLE9BQU8sQ0FBQyxDQUFDOztJQUVkLzJCLElBQUksQ0FBQzhvRSxVQUFVLENBQUM1NkQsRUFBRSxDQUFDLHdDQUF3QyxFQUFFc2lCLENBQUMsQ0FBQ1YsS0FBSyxDQUFDOXZCLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztFQUM3RixDQUFDOztFQUVEd3RFLFNBQVMsQ0FBQ3BqRixTQUFTLENBQUMyc0MsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQ3hDLElBQUkvMkIsS0FBSyxFQUFFLElBQUk7O0lBRWZBLElBQUksQ0FBQzhvRSxVQUFVLENBQUN2NkQsR0FBRyxDQUFDLFdBQVcsQ0FBQzs7SUFFaENpaUIsQ0FBQyxDQUFDenBDLFFBQVEsQ0FBQyxDQUFDd25CLEdBQUcsQ0FBQyxXQUFXLENBQUM7O0lBRTVCLEdBQUcsQ0FBQ3ZPLElBQUksQ0FBQ21xRSxTQUFTLEVBQUU7TUFDbEJuRCxZQUFZLENBQUNobkUsSUFBSSxDQUFDbXFFLFNBQVMsQ0FBQztNQUM1Qm5xRSxJQUFJLENBQUNtcUUsVUFBVSxFQUFFLElBQUk7SUFDdkI7O0lBRUEsR0FBRyxDQUFDbnFFLElBQUksQ0FBQ2kxRSxNQUFNLEVBQUU7TUFDZnJ6RCxZQUFZLENBQUM1aEIsSUFBSSxDQUFDaTFFLE1BQU0sQ0FBQztNQUN6QmoxRSxJQUFJLENBQUNpMUUsT0FBTyxFQUFFLElBQUk7SUFDcEI7RUFDRixDQUFDOztFQUVEekgsU0FBUyxDQUFDcGpGLFNBQVMsQ0FBQzhxRixhQUFhLEVBQUUsU0FBUyxDQUFDbmlGLENBQUMsRUFBRTtJQUM5QyxJQUFJaU4sS0FBSyxFQUFFLElBQUk7TUFDYit4RSxRQUFRLEVBQUV2aEQsQ0FBQyxDQUFDejlCLENBQUMsQ0FBQzNHLE1BQU0sQ0FBQztNQUNyQnM4RCxTQUFTLEVBQUUxb0QsSUFBSSxDQUFDMG9ELFFBQVE7TUFDeEIxZ0MsUUFBUSxFQUFFMGdDLFFBQVEsQ0FBQzFnQyxPQUFPO01BQzFCb2pELE9BQU8sRUFBRXBqRCxPQUFPLENBQUNvakQsTUFBTTtNQUN2QlcsU0FBUyxFQUFFL2pELE9BQU8sQ0FBQytqRCxRQUFRO01BQzNCb0osY0FBYyxFQUFFcGlGLENBQUMsQ0FBQ3RLLEtBQUssR0FBRyxZQUFZOzs7SUFHeEMsR0FBRyxDQUFDMHNGLGFBQWEsRUFBRTtNQUNqQm4xRSxJQUFJLENBQUM4b0UsVUFBVSxDQUFDdjZELEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztJQUMzQzs7O0lBR0EsR0FBRyxDQUFDeGIsQ0FBQyxDQUFDZ2UsY0FBYyxHQUFHaGUsQ0FBQyxDQUFDZ2UsYUFBYSxDQUFDTCxPQUFPLEdBQUcsQ0FBQyxFQUFFO01BQ2xELE1BQU07SUFDUjs7O0lBR0EsR0FBRyxDQUFDLENBQUMwNkQsTUFBTSxDQUFDN2dGLE9BQU8sR0FBRyxDQUFDd25GLE9BQU8sQ0FBQ3huRixPQUFPLEdBQUdtcUYsV0FBVyxDQUFDM0MsT0FBTyxFQUFFLEdBQUcyQyxXQUFXLENBQUMzQyxPQUFPLENBQUM1M0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQzlGLE1BQU07SUFDUjs7SUFFQSxHQUFHLENBQUMsQ0FBQzQzRSxPQUFPLENBQUN4eUUsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHeE0sQ0FBQyxDQUFDZ2UsYUFBYSxDQUFDbUMsUUFBUSxFQUFFNitELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ241QyxZQUFZLEVBQUVtNUMsT0FBTyxDQUFDN2pELE1BQU0sQ0FBQyxDQUFDLENBQUNwUyxJQUFJLEVBQUU7TUFDbEcsTUFBTTtJQUNSOzs7SUFHQSxHQUFHLENBQUMsQ0FBQ2tNLFFBQVEsR0FBRzBnQyxRQUFRLENBQUN1aUIsWUFBWSxHQUFHampELE9BQU8sQ0FBQ29qRCxNQUFNLENBQUN6bkQsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7TUFDcEY1d0IsQ0FBQyxDQUFDdWQsZUFBZSxDQUFDLENBQUM7TUFDbkJ2ZCxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQzs7TUFFbEIsTUFBTTtJQUNSOztJQUVBclEsSUFBSSxDQUFDbzFFLFdBQVcsRUFBRXAxRSxJQUFJLENBQUNxMUUsWUFBWSxFQUFFZCxZQUFZLENBQUN4aEYsQ0FBQyxDQUFDOztJQUVwRCxHQUFHLENBQUMsQ0FBQ2lOLElBQUksQ0FBQ3ExRSxXQUFXLENBQUM5cUYsTUFBTSxFQUFFO01BQzVCLE1BQU07SUFDUjs7O0lBR0EsR0FBRyxDQUFDeTlCLE9BQU8sQ0FBQ3c4QyxLQUFLLEVBQUU7TUFDakJ6eEUsQ0FBQyxDQUFDdWQsZUFBZSxDQUFDLENBQUM7SUFDckI7O0lBRUF0USxJQUFJLENBQUNzMUUsV0FBVyxFQUFFdmlGLENBQUM7O0lBRW5CaU4sSUFBSSxDQUFDdTFFLE9BQU8sRUFBRSxJQUFJO0lBQ2xCdjFFLElBQUksQ0FBQyt4RSxRQUFRLEVBQUVBLE9BQU87SUFDdEIveEUsSUFBSSxDQUFDK3JFLFNBQVMsRUFBRUEsUUFBUTtJQUN4Qi9yRSxJQUFJLENBQUMwZSxLQUFLLEVBQUVzSixPQUFPLENBQUN0SixJQUFJLENBQUM4bEQsS0FBSzs7SUFFOUJ4a0UsSUFBSSxDQUFDdzFFLFVBQVUsRUFBRSxLQUFLO0lBQ3RCeDFFLElBQUksQ0FBQ3kxRSxVQUFVLEVBQUUsS0FBSztJQUN0QnoxRSxJQUFJLENBQUMwMUUsVUFBVSxFQUFFLEtBQUs7SUFDdEIxMUUsSUFBSSxDQUFDMjFFLFlBQVksRUFBRSxLQUFLO0lBQ3hCMzFFLElBQUksQ0FBQ3N0RSxPQUFPLEVBQUU1a0IsUUFBUSxDQUFDNGtCLE1BQU0sQ0FBQyxDQUFDOztJQUUvQnR0RSxJQUFJLENBQUMyZixVQUFVLEVBQUUsSUFBSW53QixJQUFJLENBQUMsQ0FBQyxDQUFDMGhELE9BQU8sQ0FBQyxDQUFDO0lBQ3JDbHhDLElBQUksQ0FBQzQxRSxVQUFVLEVBQUU1MUUsSUFBSSxDQUFDNjFFLFVBQVUsRUFBRTcxRSxJQUFJLENBQUM0Z0MsU0FBUyxFQUFFLENBQUM7O0lBRW5ENWdDLElBQUksQ0FBQ2dzRSxZQUFZLEVBQUVyL0UsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQyt5RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN4eUMsV0FBVyxDQUFDO0lBQ3BENTRCLElBQUksQ0FBQ2lzRSxhQUFhLEVBQUV0L0UsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQyt5RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM5OEIsWUFBWSxDQUFDOztJQUV0RHR1QyxJQUFJLENBQUM4MUUsZUFBZSxFQUFFLElBQUk7SUFDMUI5MUUsSUFBSSxDQUFDKzFFLGdCQUFnQixFQUFFdmxELENBQUMsQ0FBQzB4QyxRQUFRLENBQUNvSixZQUFZLENBQUN0ckUsSUFBSSxDQUFDK3JFLFFBQVEsRUFBRSxHQUFHO01BQy9EMzFFLEdBQUcsRUFBRSxDQUFDO01BQ04wbEIsSUFBSSxFQUFFO0lBQ1IsQ0FBQztJQUNEOWIsSUFBSSxDQUFDZzJFLGVBQWUsRUFBRXhsRCxDQUFDLENBQUMweEMsUUFBUSxDQUFDb0osWUFBWSxDQUFDRixNQUFNLENBQUM7OztJQUdyRHByRSxJQUFJLENBQUMrcUUsU0FBUyxFQUFFdjZDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNvSixZQUFZLENBQUM1aUIsUUFBUSxDQUFDd2dCLEtBQUssQ0FBQ2tCLEtBQUssQ0FBQzs7SUFFN0RwcUUsSUFBSSxDQUFDZzJFLGNBQWMsQ0FBQzUvRSxJQUFJLEdBQUc0SixJQUFJLENBQUMrcUUsUUFBUSxDQUFDMzBFLEdBQUc7SUFDNUM0SixJQUFJLENBQUNnMkUsY0FBYyxDQUFDbDZELEtBQUssR0FBRzliLElBQUksQ0FBQytxRSxRQUFRLENBQUNqdkQsSUFBSTs7SUFFOUM5YixJQUFJLENBQUMrMUUsZUFBZSxDQUFDMy9FLElBQUksR0FBRzRKLElBQUksQ0FBQytxRSxRQUFRLENBQUMzMEUsR0FBRztJQUM3QzRKLElBQUksQ0FBQysxRSxlQUFlLENBQUNqNkQsS0FBSyxHQUFHOWIsSUFBSSxDQUFDK3FFLFFBQVEsQ0FBQ2p2RCxJQUFJOztJQUUvQzBVLENBQUMsQ0FBQ3pwQyxRQUFRO01BQ1IsQ0FBQ3duQixHQUFHLENBQUMsV0FBVztNQUNoQixDQUFDTCxFQUFFLENBQUNpbkUsY0FBYyxFQUFFLHlDQUF5QyxFQUFFLHNDQUFzQyxFQUFFM2tELENBQUMsQ0FBQ1YsS0FBSyxDQUFDOXZCLElBQUksRUFBRSxZQUFZLENBQUM7TUFDbEksQ0FBQ2tPLEVBQUUsQ0FBQ2luRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUza0QsQ0FBQyxDQUFDVixLQUFLLENBQUM5dkIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDOztJQUVoRyxHQUFHLENBQUN3d0IsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ2tHLFFBQVEsRUFBRTtNQUN2QnJoRixRQUFRLENBQUNzUCxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUySixJQUFJLENBQUNpMkUsUUFBUSxFQUFFLElBQUksQ0FBQztJQUMxRDs7O0lBR0EsR0FBRyxDQUFDLENBQUMsQ0FBQ2oyRSxJQUFJLENBQUMwZSxLQUFLLEdBQUcxZSxJQUFJLENBQUNzdEUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDeUUsT0FBTyxDQUFDeHlFLEVBQUUsQ0FBQ1MsSUFBSSxDQUFDZzFFLE1BQU0sRUFBRSxHQUFHaDFFLElBQUksQ0FBQ2cxRSxNQUFNLENBQUNuK0UsSUFBSSxDQUFDazdFLE9BQU8sQ0FBQyxDQUFDeG5GLE1BQU0sQ0FBQyxFQUFFO01BQ2pHLEdBQUcsQ0FBQ3duRixPQUFPLENBQUN4eUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDakN4TSxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQztNQUNwQjs7TUFFQSxHQUFHLENBQUMsQ0FBQyxDQUFDbWdCLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNrRyxTQUFTLEdBQUcySixPQUFPLENBQUM1d0UsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM1VyxNQUFNLENBQUMsRUFBRTtRQUN6RSxNQUFNO01BQ1I7SUFDRjs7SUFFQXlWLElBQUksQ0FBQzYwRSxhQUFhLEVBQUVBLFlBQVksQ0FBQzlDLE9BQU8sRUFBRSxHQUFHOEMsWUFBWSxDQUFDOUMsT0FBTyxDQUFDNTNFLE1BQU0sQ0FBQyxDQUFDLENBQUM7OztJQUczRSxHQUFHLENBQUMsQ0FBQyxDQUFDcTJCLENBQUMsQ0FBQzB4QyxRQUFRLENBQUNrRyxTQUFTLEdBQUdwb0UsSUFBSSxDQUFDNjBFLFlBQVksQ0FBQyxFQUFFO01BQy9DOWhGLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDO0lBQ3BCOzs7SUFHQSxHQUFHLENBQUNyUSxJQUFJLENBQUNxMUUsV0FBVyxDQUFDOXFGLE9BQU8sSUFBSSxFQUFFLEdBQUd5OUIsT0FBTyxDQUFDeWtELFFBQVEsRUFBRTtNQUNyRCxHQUFHLENBQUN6c0UsSUFBSSxDQUFDc3RFLE1BQU0sRUFBRTtRQUNmOThDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUMvNEQsSUFBSSxDQUFDbkosSUFBSSxDQUFDK3JFLFFBQVEsQ0FBQzs7UUFFOUIvckUsSUFBSSxDQUFDdzFFLFVBQVUsRUFBRSxJQUFJO01BQ3ZCLEVBQUUsS0FBSztRQUNMeDFFLElBQUksQ0FBQ3kxRSxVQUFVLEVBQUUsSUFBSTtNQUN2Qjs7TUFFQXoxRSxJQUFJLENBQUM4b0UsVUFBVSxDQUFDN2xELFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQztJQUNsRDs7O0lBR0EsR0FBRyxDQUFDampCLElBQUksQ0FBQ3ExRSxXQUFXLENBQUM5cUYsT0FBTyxJQUFJLEVBQUUsR0FBR3k5QixPQUFPLENBQUN2L0IsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDdS9CLE9BQU8sQ0FBQzJqRCxTQUFTLEdBQUczakQsT0FBTyxDQUFDc21ELE1BQU0sQ0FBQyxFQUFFO01BQ3JHdHVFLElBQUksQ0FBQ3UxRSxPQUFPLEVBQUUsS0FBSztNQUNuQnYxRSxJQUFJLENBQUN5MUUsVUFBVSxFQUFFLEtBQUs7TUFDdEJ6MUUsSUFBSSxDQUFDdzFFLFVBQVUsRUFBRSxLQUFLOztNQUV0QngxRSxJQUFJLENBQUMwMUUsVUFBVSxFQUFFLElBQUk7O01BRXJCbGxELENBQUMsQ0FBQzB4QyxRQUFRLENBQUMvNEQsSUFBSSxDQUFDbkosSUFBSSxDQUFDK3JFLFFBQVEsQ0FBQzs7TUFFOUIvckUsSUFBSSxDQUFDazJFLGtCQUFrQixFQUFFLENBQUNsMkUsSUFBSSxDQUFDcTFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzM3QyxFQUFFLEVBQUUxNUIsSUFBSSxDQUFDcTFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzM3QyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUVsSixDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUNnMkIsVUFBVSxDQUFDLENBQUM7TUFDdkdsZCxJQUFJLENBQUNtMkUsa0JBQWtCLEVBQUUsQ0FBQ24yRSxJQUFJLENBQUNxMUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLzdDLEVBQUUsRUFBRXQ1QixJQUFJLENBQUNxMUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLzdDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTlJLENBQUMsQ0FBQ3RwQyxNQUFNLENBQUMsQ0FBQysxQixTQUFTLENBQUMsQ0FBQzs7TUFFdEdqZCxJQUFJLENBQUNvMkUsK0JBQStCLEVBQUUsQ0FBQ3AyRSxJQUFJLENBQUNrMkUsa0JBQWtCLEVBQUVsMkUsSUFBSSxDQUFDKzFFLGVBQWUsQ0FBQ2o2RCxJQUFJLEVBQUUsRUFBRTliLElBQUksQ0FBQysxRSxlQUFlLENBQUMvOUQsS0FBSztNQUN2SGhZLElBQUksQ0FBQ3EyRSwrQkFBK0IsRUFBRSxDQUFDcjJFLElBQUksQ0FBQ20yRSxrQkFBa0IsRUFBRW4yRSxJQUFJLENBQUMrMUUsZUFBZSxDQUFDMy9FLEdBQUcsRUFBRSxFQUFFNEosSUFBSSxDQUFDKzFFLGVBQWUsQ0FBQzMzRCxNQUFNOztNQUV2SHBlLElBQUksQ0FBQ3MyRSw0QkFBNEIsRUFBRTExQyxRQUFRLENBQUM1Z0MsSUFBSSxDQUFDcTFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRXIxRSxJQUFJLENBQUNxMUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGO0VBQ0YsQ0FBQzs7RUFFRDdILFNBQVMsQ0FBQ3BqRixTQUFTLENBQUM2ckYsU0FBUyxFQUFFLFNBQVMsQ0FBQ2xqRixDQUFDLEVBQUU7SUFDMUMsSUFBSWlOLEtBQUssRUFBRSxJQUFJOztJQUVmQSxJQUFJLENBQUMyMUUsWUFBWSxFQUFFLElBQUk7O0lBRXZCNXVGLFFBQVEsQ0FBQzJmLG1CQUFtQixDQUFDLFFBQVEsRUFBRTFHLElBQUksQ0FBQ2kyRSxRQUFRLEVBQUUsSUFBSSxDQUFDO0VBQzdELENBQUM7O0VBRUR6SSxTQUFTLENBQUNwakYsU0FBUyxDQUFDbXNGLFlBQVksRUFBRSxTQUFTLENBQUN4akYsQ0FBQyxFQUFFO0lBQzdDLElBQUlpTixLQUFLLEVBQUUsSUFBSTs7O0lBR2YsR0FBRyxDQUFDak4sQ0FBQyxDQUFDZ2UsYUFBYSxDQUFDa0MsUUFBUSxJQUFJeG1CLFVBQVUsR0FBR3NHLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQ2tDLFFBQVEsSUFBSSxDQUFDLEVBQUU7TUFDMUVqVCxJQUFJLENBQUN3MkUsVUFBVSxDQUFDempGLENBQUMsQ0FBQztNQUNsQixNQUFNO0lBQ1I7O0lBRUEsR0FBRyxDQUFDaU4sSUFBSSxDQUFDMjFFLFdBQVcsRUFBRTtNQUNwQjMxRSxJQUFJLENBQUN1MUUsT0FBTyxFQUFFLEtBQUs7TUFDbkIsTUFBTTtJQUNSOztJQUVBdjFFLElBQUksQ0FBQ3kyRSxVQUFVLEVBQUVsQyxZQUFZLENBQUN4aEYsQ0FBQyxDQUFDOztJQUVoQyxHQUFHLENBQUMsQ0FBQyxDQUFDaU4sSUFBSSxDQUFDMGUsS0FBSyxHQUFHMWUsSUFBSSxDQUFDc3RFLE1BQU0sRUFBRSxHQUFHLENBQUN0dEUsSUFBSSxDQUFDeTJFLFNBQVMsQ0FBQ2xzRixPQUFPLEdBQUcsQ0FBQ3lWLElBQUksQ0FBQ3kyRSxTQUFTLENBQUNsc0YsTUFBTSxFQUFFO01BQ25GLE1BQU07SUFDUjs7SUFFQSxHQUFHLENBQUMsQ0FBQyxDQUFDeVYsSUFBSSxDQUFDeTFFLFVBQVUsR0FBR3oxRSxJQUFJLENBQUN5MUUsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFO01BQ2hEMWlGLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDO0lBQ3BCOztJQUVBclEsSUFBSSxDQUFDNDFFLFVBQVUsRUFBRWgxQyxRQUFRLENBQUM1Z0MsSUFBSSxDQUFDeTJFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRXoyRSxJQUFJLENBQUNxMUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUN0RXIxRSxJQUFJLENBQUM2MUUsVUFBVSxFQUFFajFDLFFBQVEsQ0FBQzVnQyxJQUFJLENBQUN5MkUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFejJFLElBQUksQ0FBQ3ExRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDOztJQUV0RXIxRSxJQUFJLENBQUM0Z0MsU0FBUyxFQUFFQSxRQUFRLENBQUM1Z0MsSUFBSSxDQUFDeTJFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRXoyRSxJQUFJLENBQUNxMUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHaEUsR0FBRyxDQUFDcjFFLElBQUksQ0FBQzRnQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO01BQ3JCLEdBQUcsQ0FBQzVnQyxJQUFJLENBQUN5MUUsU0FBUyxFQUFFO1FBQ2xCejFFLElBQUksQ0FBQzAyRSxPQUFPLENBQUMzakYsQ0FBQyxDQUFDO01BQ2pCLEVBQUUsS0FBSyxHQUFHLENBQUNpTixJQUFJLENBQUN3MUUsU0FBUyxFQUFFO1FBQ3pCeDFFLElBQUksQ0FBQzIyRSxLQUFLLENBQUMsQ0FBQztNQUNkLEVBQUUsS0FBSyxHQUFHLENBQUMzMkUsSUFBSSxDQUFDMDFFLFNBQVMsRUFBRTtRQUN6QjExRSxJQUFJLENBQUM0MkUsTUFBTSxDQUFDLENBQUM7TUFDZjtJQUNGO0VBQ0YsQ0FBQzs7RUFFRHBKLFNBQVMsQ0FBQ3BqRixTQUFTLENBQUNzc0YsUUFBUSxFQUFFLFNBQVMsQ0FBQzNqRixDQUFDLEVBQUU7SUFDekMsSUFBSWlOLEtBQUssRUFBRSxJQUFJO01BQ2Iwb0QsU0FBUyxFQUFFMW9ELElBQUksQ0FBQzBvRCxRQUFRO01BQ3hCbXVCLFFBQVEsRUFBRTcyRSxJQUFJLENBQUN5MUUsU0FBUztNQUN4QjM1RCxLQUFLLEVBQUU5YixJQUFJLENBQUNnMkUsY0FBYyxDQUFDbDZELEtBQUssR0FBRyxDQUFDO01BQ3BDZzdELEtBQUs7OztJQUdQLEdBQUcsQ0FBQ0QsUUFBUSxJQUFJLElBQUksRUFBRTs7TUFFcEIsR0FBRyxDQUFDbHFGLElBQUksQ0FBQzhyQyxHQUFHLENBQUN6NEIsSUFBSSxDQUFDNGdDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNoQzVnQyxJQUFJLENBQUN1MUUsT0FBTyxFQUFFLEtBQUs7O1FBRW5CLEdBQUcsQ0FBQzdzQixRQUFRLENBQUM2TCxLQUFLLENBQUNocUUsT0FBTyxFQUFFLEVBQUUsR0FBR3lWLElBQUksQ0FBQzBlLElBQUksQ0FBQzhiLFFBQVEsRUFBRTtVQUNuRHg2QixJQUFJLENBQUN5MUUsVUFBVSxFQUFFLEdBQUc7UUFDdEIsRUFBRSxLQUFLLEdBQUcsQ0FBQy9zQixRQUFRLENBQUNnaUIsV0FBVyxHQUFHMXFFLElBQUksQ0FBQzBlLElBQUksQ0FBQzhiLFNBQVMsSUFBSSxNQUFNLEdBQUcsQ0FBQ3g2QixJQUFJLENBQUMwZSxJQUFJLENBQUM4YixTQUFTLElBQUksT0FBTyxHQUFHaEssQ0FBQyxDQUFDdHBDLE1BQU0sQ0FBQyxDQUFDOHdCLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7VUFDNUhoWSxJQUFJLENBQUN5MUUsVUFBVSxFQUFFLEdBQUc7UUFDdEIsRUFBRSxLQUFLO1VBQ0xxQixNQUFNLEVBQUVucUYsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQyxDQUFDOXJDLElBQUksQ0FBQ29xRixLQUFLLENBQUMvMkUsSUFBSSxDQUFDNjFFLFNBQVMsRUFBRTcxRSxJQUFJLENBQUM0MUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUVqcEYsSUFBSSxDQUFDNHdCLEVBQUUsQ0FBQzs7VUFFOUV2ZCxJQUFJLENBQUN5MUUsVUFBVSxFQUFFcUIsTUFBTSxFQUFFLEdBQUcsR0FBR0EsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRztRQUN4RDs7UUFFQSxHQUFHLENBQUM5MkUsSUFBSSxDQUFDeTFFLFVBQVUsSUFBSSxJQUFJLEdBQUdqbEQsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ2tHLFNBQVMsR0FBR3BvRSxJQUFJLENBQUM2MEUsWUFBWSxFQUFFO1VBQ3RFNzBFLElBQUksQ0FBQzIxRSxZQUFZLEVBQUUsSUFBSTs7VUFFdkIsTUFBTTtRQUNSOztRQUVBanRCLFFBQVEsQ0FBQ2dpQixXQUFXLEVBQUUxcUUsSUFBSSxDQUFDeTFFLFNBQVM7OztRQUdwQ3oxRSxJQUFJLENBQUNxMUUsWUFBWSxFQUFFcjFFLElBQUksQ0FBQ3kyRSxTQUFTOztRQUVqQ2ptRCxDQUFDLENBQUN4bEMsSUFBSSxDQUFDMDlELFFBQVEsQ0FBQ2dnQixNQUFNLEVBQUUsU0FBUyxDQUFDNW5FLEtBQUssRUFBRXdsRCxLQUFLLEVBQUU7VUFDOUMsSUFBSXdrQixRQUFRLEVBQUVDLFFBQVE7O1VBRXRCdjZDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUMvNEQsSUFBSSxDQUFDbTlDLEtBQUssQ0FBQzhrQixNQUFNLENBQUM7O1VBRTdCTixTQUFTLEVBQUV0NkMsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQ2hsQixLQUFLLENBQUM4a0IsTUFBTSxDQUFDO1VBQ2hETCxTQUFTLEVBQUV2NkMsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ29KLFlBQVksQ0FBQzVpQixRQUFRLENBQUN3Z0IsS0FBSyxDQUFDa0IsS0FBSyxDQUFDOztVQUV4RDlqQixLQUFLLENBQUM4a0I7WUFDSixDQUFDbGhFLEdBQUcsQ0FBQztjQUNId2hFLFNBQVMsRUFBRSxFQUFFO2NBQ2Jud0QsT0FBTyxFQUFFLEVBQUU7Y0FDWCxxQkFBcUIsRUFBRTtZQUN6QixDQUFDO1lBQ0QsQ0FBQytILFdBQVcsQ0FBQyxtQkFBbUI7WUFDaEMsQ0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQ3hpQixLQUFLLEVBQUV2SyxTQUFTLEVBQUU7Y0FDdkMsT0FBTyxDQUFDQSxTQUFTLENBQUNuRCxLQUFLLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDYSxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3BFLENBQUMsQ0FBQzs7VUFFSixHQUFHLENBQUNxeUQsS0FBSyxDQUFDeHBDLElBQUksSUFBSTRyQyxRQUFRLENBQUMxZ0MsT0FBTyxDQUFDbEwsR0FBRyxFQUFFO1lBQ3RDOWMsSUFBSSxDQUFDZzJFLGNBQWMsQ0FBQzUvRSxJQUFJLEVBQUUwMEUsUUFBUSxDQUFDMTBFLElBQUksRUFBRTIwRSxRQUFRLENBQUMzMEUsR0FBRztZQUNyRDRKLElBQUksQ0FBQ2cyRSxjQUFjLENBQUNsNkQsS0FBSyxFQUFFZ3ZELFFBQVEsQ0FBQ2h2RCxLQUFLLEVBQUVpdkQsUUFBUSxDQUFDanZELElBQUk7VUFDMUQ7O1VBRUEwVSxDQUFDLENBQUMweEMsUUFBUSxDQUFDdUosWUFBWSxDQUFDbmxCLEtBQUssQ0FBQzhrQixNQUFNLEVBQUU7WUFDcENoMUUsR0FBRyxFQUFFMDBFLFFBQVEsQ0FBQzEwRSxJQUFJLEVBQUUyMEUsUUFBUSxDQUFDMzBFLEdBQUc7WUFDaEMwbEIsSUFBSSxFQUFFZ3ZELFFBQVEsQ0FBQ2h2RCxLQUFLLEVBQUVpdkQsUUFBUSxDQUFDanZEO1VBQ2pDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQzs7O1FBR0YsR0FBRyxDQUFDNHNDLFFBQVEsQ0FBQ2lrQixVQUFVLEdBQUdqa0IsUUFBUSxDQUFDaWtCLFNBQVMsQ0FBQzVDLFFBQVEsRUFBRTtVQUNyRHJoQixRQUFRLENBQUNpa0IsU0FBUyxDQUFDeGpFLElBQUksQ0FBQyxDQUFDO1FBQzNCO01BQ0Y7O01BRUEsTUFBTTtJQUNSOzs7SUFHQSxHQUFHLENBQUMwdEUsUUFBUSxHQUFHLEdBQUcsRUFBRTtNQUNsQixHQUFHO1FBQ0Q3MkUsSUFBSSxDQUFDNDFFLFVBQVUsRUFBRSxFQUFFO1FBQ25CLENBQUM1MUUsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQzZMLEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUN5VixJQUFJLENBQUMwb0QsUUFBUSxDQUFDMWdDLE9BQU8sQ0FBQ2xuQixNQUFNLElBQUksRUFBRSxHQUFHLENBQUNkLElBQUksQ0FBQzBvRCxRQUFRLENBQUMxZ0MsT0FBTyxDQUFDdEosSUFBSSxDQUFDMGpELElBQUksQ0FBQztNQUM1RyxFQUFFO1FBQ0F0bUQsS0FBSyxFQUFFQSxLQUFLLEVBQUVudkIsSUFBSSxDQUFDc3pDLEdBQUcsQ0FBQ2pnQyxJQUFJLENBQUM0MUUsU0FBUyxFQUFFLEdBQUcsQ0FBQztNQUM3QyxFQUFFLEtBQUssR0FBRztRQUNSNTFFLElBQUksQ0FBQzQxRSxVQUFVLEVBQUUsRUFBRTtRQUNuQixDQUFDNTFFLElBQUksQ0FBQzBvRCxRQUFRLENBQUM2TCxLQUFLLENBQUNocUUsT0FBTyxFQUFFLEVBQUU7VUFDOUIsQ0FBQ3lWLElBQUksQ0FBQzBvRCxRQUFRLENBQUMxZ0MsT0FBTyxDQUFDbG5CLE1BQU0sSUFBSWQsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQzZMLEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUN5VixJQUFJLENBQUMwb0QsUUFBUSxDQUFDMWdDLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzBqRCxJQUFJLENBQUM7TUFDeEcsRUFBRTtRQUNBdG1ELEtBQUssRUFBRUEsS0FBSyxFQUFFbnZCLElBQUksQ0FBQ3N6QyxHQUFHLENBQUMsQ0FBQ2pnQyxJQUFJLENBQUM0MUUsU0FBUyxFQUFFLEdBQUcsQ0FBQztNQUM5QyxFQUFFLEtBQUs7UUFDTDk1RCxLQUFLLEVBQUVBLEtBQUssRUFBRTliLElBQUksQ0FBQzQxRSxTQUFTO01BQzlCO0lBQ0Y7O0lBRUE1MUUsSUFBSSxDQUFDZzNFLGNBQWMsRUFBRTtNQUNuQjVnRixHQUFHLEVBQUV5Z0YsUUFBUSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUU3MkUsSUFBSSxDQUFDZzJFLGNBQWMsQ0FBQzUvRSxJQUFJLEVBQUU0SixJQUFJLENBQUM2MUUsU0FBUztNQUNsRS81RCxJQUFJLEVBQUVBO0lBQ1IsQ0FBQzs7SUFFRCxHQUFHLENBQUM5YixJQUFJLENBQUNtcUUsU0FBUyxFQUFFO01BQ2xCbkQsWUFBWSxDQUFDaG5FLElBQUksQ0FBQ21xRSxTQUFTLENBQUM7O01BRTVCbnFFLElBQUksQ0FBQ21xRSxVQUFVLEVBQUUsSUFBSTtJQUN2Qjs7SUFFQW5xRSxJQUFJLENBQUNtcUUsVUFBVSxFQUFFdkQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO01BQ3pDLEdBQUcsQ0FBQzVtRSxJQUFJLENBQUNnM0UsYUFBYSxFQUFFO1FBQ3RCeG1ELENBQUMsQ0FBQ3hsQyxJQUFJLENBQUNnVixJQUFJLENBQUMwb0QsUUFBUSxDQUFDZ2dCLE1BQU0sRUFBRSxTQUFTLENBQUM1bkUsS0FBSyxFQUFFd2xELEtBQUssRUFBRTtVQUNuRCxJQUFJeHBDLElBQUksRUFBRXdwQyxLQUFLLENBQUN4cEMsSUFBSSxFQUFFOWMsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQzhmLE9BQU87O1VBRTNDaDRDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUN1SixZQUFZLENBQUNubEIsS0FBSyxDQUFDOGtCLE1BQU0sRUFBRTtZQUNwQ2gxRSxHQUFHLEVBQUU0SixJQUFJLENBQUNnM0UsYUFBYSxDQUFDNWdGLEdBQUc7WUFDM0IwbEIsSUFBSSxFQUFFOWIsSUFBSSxDQUFDZzNFLGFBQWEsQ0FBQ2w3RCxLQUFLLEVBQUVnQixJQUFJLEVBQUU5YyxJQUFJLENBQUNnc0UsWUFBWSxFQUFFbHZELElBQUksRUFBRXdwQyxLQUFLLENBQUM1bkMsSUFBSSxDQUFDMmpEO1VBQzVFLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQzs7UUFFRnJpRSxJQUFJLENBQUM4b0UsVUFBVSxDQUFDN2xELFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztNQUNqRDtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUM7O0VBRUR1cUQsU0FBUyxDQUFDcGpGLFNBQVMsQ0FBQ3VzRixNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDdEMsSUFBSTMyRSxLQUFLLEVBQUUsSUFBSTs7O0lBR2YsR0FBRyxDQUFDNGdDLFFBQVEsQ0FBQzVnQyxJQUFJLENBQUN5MkUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFejJFLElBQUksQ0FBQ28xRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDNWtELENBQUMsQ0FBQzB4QyxRQUFRLENBQUNrRyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO01BQ3BGcG9FLElBQUksQ0FBQ3ExRSxZQUFZLEVBQUVyMUUsSUFBSSxDQUFDeTJFLFNBQVM7TUFDakMsTUFBTTtJQUNSOztJQUVBejJFLElBQUksQ0FBQ3UxRSxPQUFPLEVBQUUsS0FBSzs7SUFFbkJ2MUUsSUFBSSxDQUFDODFFLGVBQWUsRUFBRTkxRSxJQUFJLENBQUNpM0UsYUFBYSxDQUFDLENBQUM7O0lBRTFDLEdBQUcsQ0FBQ2ozRSxJQUFJLENBQUNtcUUsU0FBUyxFQUFFO01BQ2xCbkQsWUFBWSxDQUFDaG5FLElBQUksQ0FBQ21xRSxTQUFTLENBQUM7SUFDOUI7O0lBRUFucUUsSUFBSSxDQUFDbXFFLFVBQVUsRUFBRXZELGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUN6Q3AyQyxDQUFDLENBQUMweEMsUUFBUSxDQUFDdUosWUFBWSxDQUFDenJFLElBQUksQ0FBQytyRSxRQUFRLEVBQUUvckUsSUFBSSxDQUFDODFFLGNBQWMsQ0FBQztJQUM3RCxDQUFDLENBQUM7RUFDSixDQUFDOzs7RUFHRHRJLFNBQVMsQ0FBQ3BqRixTQUFTLENBQUM2c0YsY0FBYyxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQzlDLElBQUlqM0UsS0FBSyxFQUFFLElBQUk7O0lBRWYsSUFBSWdzRSxZQUFZLEVBQUVoc0UsSUFBSSxDQUFDZ3NFLFdBQVc7SUFDbEMsSUFBSUMsYUFBYSxFQUFFanNFLElBQUksQ0FBQ2lzRSxZQUFZOztJQUVwQyxJQUFJMkosVUFBVSxFQUFFNTFFLElBQUksQ0FBQzQxRSxTQUFTO0lBQzlCLElBQUlDLFVBQVUsRUFBRTcxRSxJQUFJLENBQUM2MUUsU0FBUzs7SUFFOUIsSUFBSUUsZ0JBQWdCLEVBQUUvMUUsSUFBSSxDQUFDKzFFLGVBQWU7O0lBRTFDLElBQUltQixlQUFlLEVBQUVuQixlQUFlLENBQUNqNkQsSUFBSTtJQUN6QyxJQUFJcTdELGVBQWUsRUFBRXBCLGVBQWUsQ0FBQzMvRSxHQUFHOztJQUV4QyxJQUFJZ2hGLGFBQWEsRUFBRXJCLGVBQWUsQ0FBQy85RCxLQUFLO0lBQ3hDLElBQUlxL0QsY0FBYyxFQUFFdEIsZUFBZSxDQUFDMzNELE1BQU07O0lBRTFDLElBQUlrNUQsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxVQUFVLEVBQUVDLFVBQVU7O0lBRXRGLEdBQUcsQ0FBQ1AsYUFBYSxFQUFFcEwsV0FBVyxFQUFFO01BQzlCMEwsV0FBVyxFQUFFUixlQUFlLEVBQUV0QixTQUFTO0lBQ3pDLEVBQUUsS0FBSztNQUNMOEIsV0FBVyxFQUFFUixjQUFjO0lBQzdCOztJQUVBUyxXQUFXLEVBQUVSLGVBQWUsRUFBRXRCLFNBQVM7OztJQUd2Q3lCLGNBQWMsRUFBRTNxRixJQUFJLENBQUM0dEIsR0FBRyxDQUFDLENBQUMsRUFBRXl4RCxZQUFZLEVBQUUsSUFBSSxFQUFFb0wsYUFBYSxFQUFFLEdBQUcsQ0FBQztJQUNuRUcsY0FBYyxFQUFFNXFGLElBQUksQ0FBQzR0QixHQUFHLENBQUMsQ0FBQyxFQUFFMHhELGFBQWEsRUFBRSxJQUFJLEVBQUVvTCxjQUFjLEVBQUUsR0FBRyxDQUFDOztJQUVyRUcsY0FBYyxFQUFFN3FGLElBQUksQ0FBQzh2QyxHQUFHLENBQUN1dkMsWUFBWSxFQUFFb0wsWUFBWSxFQUFFcEwsWUFBWSxFQUFFLElBQUksRUFBRW9MLGFBQWEsRUFBRSxHQUFHLENBQUM7SUFDNUZLLGNBQWMsRUFBRTlxRixJQUFJLENBQUM4dkMsR0FBRyxDQUFDd3ZDLGFBQWEsRUFBRW9MLGFBQWEsRUFBRXBMLGFBQWEsRUFBRSxJQUFJLEVBQUVvTCxjQUFjLEVBQUUsR0FBRyxDQUFDOzs7SUFHaEcsR0FBRyxDQUFDekIsVUFBVSxFQUFFLEVBQUUsR0FBRzhCLFdBQVcsRUFBRUosYUFBYSxFQUFFO01BQy9DSSxXQUFXLEVBQUVKLGNBQWMsRUFBRSxFQUFFLEVBQUUzcUYsSUFBSSxDQUFDc3pDLEdBQUcsQ0FBQyxDQUFDcTNDLGNBQWMsRUFBRUosZUFBZSxFQUFFdEIsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDbEc7OztJQUdBLEdBQUcsQ0FBQ0EsVUFBVSxFQUFFLEVBQUUsR0FBRzhCLFdBQVcsRUFBRUYsYUFBYSxFQUFFO01BQy9DRSxXQUFXLEVBQUVGLGNBQWMsRUFBRSxFQUFFLEVBQUU3cUYsSUFBSSxDQUFDc3pDLEdBQUcsQ0FBQ3UzQyxjQUFjLEVBQUVOLGVBQWUsRUFBRXRCLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2pHOzs7SUFHQSxHQUFHLENBQUNDLFVBQVUsRUFBRSxFQUFFLEdBQUc4QixXQUFXLEVBQUVKLGFBQWEsRUFBRTtNQUMvQ0ksV0FBVyxFQUFFSixjQUFjLEVBQUUsRUFBRSxFQUFFNXFGLElBQUksQ0FBQ3N6QyxHQUFHLENBQUMsQ0FBQ3MzQyxjQUFjLEVBQUVKLGVBQWUsRUFBRXRCLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2xHOzs7SUFHQSxHQUFHLENBQUNBLFVBQVUsRUFBRSxFQUFFLEdBQUc4QixXQUFXLEVBQUVGLGFBQWEsRUFBRTtNQUMvQ0UsV0FBVyxFQUFFRixjQUFjLEVBQUUsRUFBRSxFQUFFOXFGLElBQUksQ0FBQ3N6QyxHQUFHLENBQUN3M0MsY0FBYyxFQUFFTixlQUFlLEVBQUV0QixTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNqRzs7SUFFQSxPQUFPO01BQ0x6L0UsR0FBRyxFQUFFdWhGLFVBQVU7TUFDZjc3RCxJQUFJLEVBQUU0N0Q7SUFDUixDQUFDO0VBQ0gsQ0FBQzs7RUFFRGxLLFNBQVMsQ0FBQ3BqRixTQUFTLENBQUN3dEYsY0FBYyxFQUFFLFNBQVMsQ0FBQ0YsVUFBVSxFQUFFQyxVQUFVLEVBQUVFLFFBQVEsRUFBRUMsU0FBUyxFQUFFO0lBQ3pGLElBQUk5M0UsS0FBSyxFQUFFLElBQUk7O0lBRWYsSUFBSWdzRSxZQUFZLEVBQUVoc0UsSUFBSSxDQUFDZ3NFLFdBQVc7SUFDbEMsSUFBSUMsYUFBYSxFQUFFanNFLElBQUksQ0FBQ2lzRSxZQUFZOztJQUVwQyxHQUFHLENBQUM0TCxTQUFTLEVBQUU3TCxXQUFXLEVBQUU7TUFDMUIwTCxXQUFXLEVBQUVBLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFQSxVQUFVO01BQzVDQSxXQUFXLEVBQUVBLFdBQVcsRUFBRTFMLFlBQVksRUFBRTZMLFNBQVMsRUFBRTdMLFlBQVksRUFBRTZMLFNBQVMsRUFBRUgsVUFBVTtJQUN4RixFQUFFLEtBQUs7O01BRUxBLFdBQVcsRUFBRS9xRixJQUFJLENBQUM0dEIsR0FBRyxDQUFDLENBQUMsRUFBRXl4RCxZQUFZLEVBQUUsRUFBRSxFQUFFNkwsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRDs7SUFFQSxHQUFHLENBQUNDLFVBQVUsRUFBRTdMLFlBQVksRUFBRTtNQUM1QjBMLFdBQVcsRUFBRUEsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUVBLFVBQVU7TUFDNUNBLFdBQVcsRUFBRUEsV0FBVyxFQUFFMUwsYUFBYSxFQUFFNkwsVUFBVSxFQUFFN0wsYUFBYSxFQUFFNkwsVUFBVSxFQUFFSCxVQUFVO0lBQzVGLEVBQUUsS0FBSzs7TUFFTEEsV0FBVyxFQUFFaHJGLElBQUksQ0FBQzR0QixHQUFHLENBQUMsQ0FBQyxFQUFFMHhELGFBQWEsRUFBRSxFQUFFLEVBQUU2TCxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzVEOztJQUVBLE9BQU87TUFDTDFoRixHQUFHLEVBQUV1aEYsVUFBVTtNQUNmNzdELElBQUksRUFBRTQ3RDtJQUNSLENBQUM7RUFDSCxDQUFDOztFQUVEbEssU0FBUyxDQUFDcGpGLFNBQVMsQ0FBQ3dzRixPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDdkMsSUFBSTUyRSxLQUFLLEVBQUUsSUFBSTs7O0lBR2YsSUFBSSsxRSxnQkFBZ0IsRUFBRS8xRSxJQUFJLENBQUMrMUUsZUFBZTs7SUFFMUMsSUFBSXFCLGFBQWEsRUFBRXJCLGVBQWUsQ0FBQy85RCxLQUFLO0lBQ3hDLElBQUlxL0QsY0FBYyxFQUFFdEIsZUFBZSxDQUFDMzNELE1BQU07O0lBRTFDLElBQUk4NEQsZUFBZSxFQUFFbkIsZUFBZSxDQUFDajZELElBQUk7SUFDekMsSUFBSXE3RCxlQUFlLEVBQUVwQixlQUFlLENBQUMzL0UsR0FBRzs7SUFFeEMsSUFBSTJoRiwwQkFBMEIsRUFBRW4zQyxRQUFRLENBQUM1Z0MsSUFBSSxDQUFDeTJFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRXoyRSxJQUFJLENBQUN5MkUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUU5RSxJQUFJdUIsV0FBVyxFQUFFRCwwQkFBMEIsRUFBRS8zRSxJQUFJLENBQUNzMkUsMkJBQTJCOztJQUU3RSxJQUFJdUIsU0FBUyxFQUFFbHJGLElBQUksQ0FBQ3F1QyxLQUFLLENBQUNvOEMsYUFBYSxFQUFFWSxVQUFVLENBQUM7SUFDcEQsSUFBSUYsVUFBVSxFQUFFbnJGLElBQUksQ0FBQ3F1QyxLQUFLLENBQUNxOEMsY0FBYyxFQUFFVyxVQUFVLENBQUM7OztJQUd0RCxJQUFJQyxzQkFBc0IsRUFBRSxDQUFDYixhQUFhLEVBQUVTLFFBQVEsRUFBRSxFQUFFNzNFLElBQUksQ0FBQ28yRSw4QkFBOEI7SUFDM0YsSUFBSThCLHNCQUFzQixFQUFFLENBQUNiLGNBQWMsRUFBRVMsU0FBUyxFQUFFLEVBQUU5M0UsSUFBSSxDQUFDcTJFLDhCQUE4Qjs7O0lBRzdGLElBQUk4QixnQkFBZ0IsRUFBRSxDQUFDbjRFLElBQUksQ0FBQ3kyRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMvOEMsRUFBRSxFQUFFMTVCLElBQUksQ0FBQ3kyRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMvOEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFbEosQ0FBQyxDQUFDdHBDLE1BQU0sQ0FBQyxDQUFDZzJCLFVBQVUsQ0FBQyxDQUFDO0lBQzlGLElBQUlrN0QsZ0JBQWdCLEVBQUUsQ0FBQ3A0RSxJQUFJLENBQUN5MkUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDbjlDLEVBQUUsRUFBRXQ1QixJQUFJLENBQUN5MkUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDbjlDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTlJLENBQUMsQ0FBQ3RwQyxNQUFNLENBQUMsQ0FBQysxQixTQUFTLENBQUMsQ0FBQzs7OztJQUk3RixJQUFJbzdELDBCQUEwQixFQUFFRixnQkFBZ0IsRUFBRW40RSxJQUFJLENBQUNrMkUsaUJBQWlCO0lBQ3hFLElBQUlvQywwQkFBMEIsRUFBRUYsZ0JBQWdCLEVBQUVwNEUsSUFBSSxDQUFDbTJFLGlCQUFpQjs7O0lBR3hFLElBQUl1QixXQUFXLEVBQUVSLGVBQWUsRUFBRSxDQUFDZSxzQkFBc0IsRUFBRUkseUJBQXlCLENBQUM7SUFDckYsSUFBSVYsV0FBVyxFQUFFUixlQUFlLEVBQUUsQ0FBQ2Usc0JBQXNCLEVBQUVJLHlCQUF5QixDQUFDOztJQUVyRixJQUFJQyxPQUFPLEVBQUU7TUFDWG5pRixHQUFHLEVBQUV1aEYsVUFBVTtNQUNmNzdELElBQUksRUFBRTQ3RCxVQUFVO01BQ2hCbkwsTUFBTSxFQUFFeUwsVUFBVTtNQUNsQnhMLE1BQU0sRUFBRXdMO0lBQ1YsQ0FBQzs7SUFFRGg0RSxJQUFJLENBQUN1MUUsT0FBTyxFQUFFLEtBQUs7O0lBRW5CdjFFLElBQUksQ0FBQzYzRSxTQUFTLEVBQUVBLFFBQVE7SUFDeEI3M0UsSUFBSSxDQUFDODNFLFVBQVUsRUFBRUEsU0FBUzs7SUFFMUI5M0UsSUFBSSxDQUFDODFFLGVBQWUsRUFBRXlDLE1BQU07O0lBRTVCLEdBQUcsQ0FBQ3Y0RSxJQUFJLENBQUNtcUUsU0FBUyxFQUFFO01BQ2xCbkQsWUFBWSxDQUFDaG5FLElBQUksQ0FBQ21xRSxTQUFTLENBQUM7SUFDOUI7O0lBRUFucUUsSUFBSSxDQUFDbXFFLFVBQVUsRUFBRXZELGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUN6Q3AyQyxDQUFDLENBQUMweEMsUUFBUSxDQUFDdUosWUFBWSxDQUFDenJFLElBQUksQ0FBQytyRSxRQUFRLEVBQUUvckUsSUFBSSxDQUFDODFFLGNBQWMsQ0FBQztJQUM3RCxDQUFDLENBQUM7RUFDSixDQUFDOztFQUVEdEksU0FBUyxDQUFDcGpGLFNBQVMsQ0FBQ29zRixXQUFXLEVBQUUsU0FBUyxDQUFDempGLENBQUMsRUFBRTtJQUM1QyxJQUFJaU4sS0FBSyxFQUFFLElBQUk7O0lBRWYsSUFBSTYyRSxRQUFRLEVBQUU3MkUsSUFBSSxDQUFDeTFFLFNBQVM7SUFDNUIsSUFBSStDLFFBQVEsRUFBRXg0RSxJQUFJLENBQUN3MUUsU0FBUztJQUM1QixJQUFJaUQsUUFBUSxFQUFFejRFLElBQUksQ0FBQzAxRSxTQUFTO0lBQzVCLElBQUl6UyxVQUFVLEVBQUVqakUsSUFBSSxDQUFDMjFFLFdBQVc7O0lBRWhDMzFFLElBQUksQ0FBQzA0RSxVQUFVLEVBQUVuRSxZQUFZLENBQUN4aEYsQ0FBQyxDQUFDO0lBQ2hDaU4sSUFBSSxDQUFDMjRFLElBQUksRUFBRWhzRixJQUFJLENBQUM0dEIsR0FBRyxDQUFDLElBQUkvcUIsSUFBSSxDQUFDLENBQUMsQ0FBQzBoRCxPQUFPLENBQUMsRUFBRSxFQUFFbHhDLElBQUksQ0FBQzJmLFNBQVMsRUFBRSxDQUFDLENBQUM7O0lBRTdEM2YsSUFBSSxDQUFDOG9FLFVBQVUsQ0FBQ3hsRCxXQUFXLENBQUMsc0JBQXNCLENBQUM7O0lBRW5Ea04sQ0FBQyxDQUFDenBDLFFBQVEsQ0FBQyxDQUFDd25CLEdBQUcsQ0FBQyxXQUFXLENBQUM7O0lBRTVCeG5CLFFBQVEsQ0FBQzJmLG1CQUFtQixDQUFDLFFBQVEsRUFBRTFHLElBQUksQ0FBQ2kyRSxRQUFRLEVBQUUsSUFBSSxDQUFDOztJQUUzRCxHQUFHLENBQUNqMkUsSUFBSSxDQUFDbXFFLFNBQVMsRUFBRTtNQUNsQm5ELFlBQVksQ0FBQ2huRSxJQUFJLENBQUNtcUUsU0FBUyxDQUFDOztNQUU1Qm5xRSxJQUFJLENBQUNtcUUsVUFBVSxFQUFFLElBQUk7SUFDdkI7O0lBRUFucUUsSUFBSSxDQUFDeTFFLFVBQVUsRUFBRSxLQUFLO0lBQ3RCejFFLElBQUksQ0FBQ3cxRSxVQUFVLEVBQUUsS0FBSztJQUN0QngxRSxJQUFJLENBQUMwMUUsVUFBVSxFQUFFLEtBQUs7SUFDdEIxMUUsSUFBSSxDQUFDMjFFLFlBQVksRUFBRSxLQUFLOztJQUV4QjMxRSxJQUFJLENBQUMwb0QsUUFBUSxDQUFDZ2lCLFdBQVcsRUFBRSxLQUFLOztJQUVoQyxHQUFHLENBQUMxcUUsSUFBSSxDQUFDdTFFLE1BQU0sRUFBRTtNQUNmLE9BQU92MUUsSUFBSSxDQUFDNDRFLEtBQUssQ0FBQzdsRixDQUFDLENBQUM7SUFDdEI7O0lBRUFpTixJQUFJLENBQUNxZ0IsTUFBTSxFQUFFLEdBQUc7OztJQUdoQnJnQixJQUFJLENBQUM2NEUsVUFBVSxFQUFFLENBQUM3NEUsSUFBSSxDQUFDNDFFLFVBQVUsRUFBRTUxRSxJQUFJLENBQUMyNEUsR0FBRyxFQUFFLEVBQUUsR0FBRztJQUNsRDM0RSxJQUFJLENBQUM4NEUsVUFBVSxFQUFFLENBQUM5NEUsSUFBSSxDQUFDNjFFLFVBQVUsRUFBRTcxRSxJQUFJLENBQUMyNEUsR0FBRyxFQUFFLEVBQUUsR0FBRzs7SUFFbEQsR0FBRyxDQUFDSCxPQUFPLEVBQUU7TUFDWHg0RSxJQUFJLENBQUMrNEUsVUFBVSxDQUFDLENBQUM7SUFDbkIsRUFBRSxLQUFLLEdBQUcsQ0FBQ04sT0FBTyxFQUFFO01BQ2xCejRFLElBQUksQ0FBQ2c1RSxVQUFVLENBQUMsQ0FBQztJQUNuQixFQUFFLEtBQUs7TUFDTGg1RSxJQUFJLENBQUNpNUUsVUFBVSxDQUFDcEMsT0FBTyxFQUFFNVQsU0FBUyxDQUFDO0lBQ3JDOztJQUVBLE1BQU07RUFDUixDQUFDOztFQUVEdUssU0FBUyxDQUFDcGpGLFNBQVMsQ0FBQzZ1RixXQUFXLEVBQUUsU0FBUyxDQUFDcEMsT0FBTyxFQUFFNVQsU0FBUyxFQUFFO0lBQzdELElBQUlqakUsS0FBSyxFQUFFLElBQUk7TUFDYm5WLElBQUksRUFBRSxLQUFLO01BQ1hZLElBQUksRUFBRXVVLElBQUksQ0FBQzBvRCxRQUFRLENBQUM2TCxLQUFLLENBQUNocUUsTUFBTTtNQUNoQ3FyRixVQUFVLEVBQUVqcEYsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQ3o0QixJQUFJLENBQUM0MUUsU0FBUyxDQUFDO01BQ3BDc0QsV0FBVyxFQUFFckMsUUFBUSxHQUFHLElBQUksR0FBR3ByRixJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQ3VVLElBQUksQ0FBQzI0RSxJQUFJLEVBQUUsSUFBSSxHQUFHL0MsVUFBVSxFQUFFLEVBQUUsRUFBRSxHQUFHQSxVQUFVLEVBQUUsRUFBRSxDQUFDO01BQ2hHdUQsT0FBTyxFQUFFLEdBQUc7O0lBRWRuNUUsSUFBSSxDQUFDZzNFLGNBQWMsRUFBRSxJQUFJOzs7SUFHekIsR0FBRyxDQUFDSCxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUM1VCxVQUFVLEdBQUd0MkUsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQ3o0QixJQUFJLENBQUM2MUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFOztNQUVqRXJsRCxDQUFDLENBQUMweEMsUUFBUSxDQUFDeGhELE9BQU87UUFDaEIxZ0IsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQzFnQyxPQUFPLENBQUNvakQsTUFBTSxFQUFFO1VBQzVCaDFFLEdBQUcsRUFBRTRKLElBQUksQ0FBQ2cyRSxjQUFjLENBQUM1L0UsSUFBSSxFQUFFNEosSUFBSSxDQUFDNjFFLFVBQVUsRUFBRTcxRSxJQUFJLENBQUM4NEUsVUFBVSxFQUFFLEdBQUc7VUFDcEV2OUQsT0FBTyxFQUFFO1FBQ1gsQ0FBQztRQUNEO01BQ0YsQ0FBQztNQUNEMXdCLElBQUksRUFBRW1WLElBQUksQ0FBQzBvRCxRQUFRLENBQUN4aEIsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7SUFDdEMsRUFBRSxLQUFLLEdBQUcsQ0FBQ2d5QyxXQUFXLEdBQUdsNUUsSUFBSSxDQUFDNDFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7TUFDM0MvcUYsSUFBSSxFQUFFbVYsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQzNpQixRQUFRLENBQUNvekMsTUFBTSxDQUFDO0lBQ3RDLEVBQUUsS0FBSyxHQUFHLENBQUNELFdBQVcsR0FBR2w1RSxJQUFJLENBQUM0MUUsVUFBVSxFQUFFLENBQUMsRUFBRTtNQUMzQy9xRixJQUFJLEVBQUVtVixJQUFJLENBQUMwb0QsUUFBUSxDQUFDNzFELElBQUksQ0FBQ3NtRixNQUFNLENBQUM7SUFDbEM7O0lBRUEsR0FBRyxDQUFDdHVGLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQ2dzRixRQUFRLEdBQUcsSUFBSSxHQUFHQSxRQUFRLEdBQUcsR0FBRyxDQUFDLEVBQUU7TUFDdkQ3MkUsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQ3lrQixXQUFXLENBQUMsR0FBRyxDQUFDO0lBQ2hDOztJQUVBbnRFLElBQUksQ0FBQzhvRSxVQUFVLENBQUN4bEQsV0FBVyxDQUFDLHFCQUFxQixDQUFDO0VBQ3BELENBQUM7Ozs7RUFJRGtxRCxTQUFTLENBQUNwakYsU0FBUyxDQUFDMnVGLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtJQUMzQyxJQUFJLzRFLEtBQUssRUFBRSxJQUFJO01BQ2IwM0UsVUFBVTtNQUNWQyxVQUFVO01BQ1ZZLE1BQU07O0lBRVIsR0FBRyxDQUFDLENBQUN2NEUsSUFBSSxDQUFDODFFLGNBQWMsRUFBRTtNQUN4QixNQUFNO0lBQ1I7O0lBRUEsR0FBRyxDQUFDOTFFLElBQUksQ0FBQzBlLElBQUksQ0FBQytsRCxTQUFTLElBQUksTUFBTSxHQUFHemtFLElBQUksQ0FBQzI0RSxJQUFJLEVBQUUsR0FBRyxFQUFFO01BQ2xEakIsV0FBVyxFQUFFMTNFLElBQUksQ0FBQzgxRSxjQUFjLENBQUNoNkQsSUFBSTtNQUNyQzY3RCxXQUFXLEVBQUUzM0UsSUFBSSxDQUFDODFFLGNBQWMsQ0FBQzEvRSxHQUFHO0lBQ3RDLEVBQUUsS0FBSzs7TUFFTHNoRixXQUFXLEVBQUUxM0UsSUFBSSxDQUFDODFFLGNBQWMsQ0FBQ2g2RCxLQUFLLEVBQUU5YixJQUFJLENBQUM2NEUsVUFBVSxFQUFFLEdBQUc7TUFDNURsQixXQUFXLEVBQUUzM0UsSUFBSSxDQUFDODFFLGNBQWMsQ0FBQzEvRSxJQUFJLEVBQUU0SixJQUFJLENBQUM4NEUsVUFBVSxFQUFFLEdBQUc7SUFDN0Q7O0lBRUFQLE9BQU8sRUFBRXY0RSxJQUFJLENBQUM0M0UsYUFBYSxDQUFDRixVQUFVLEVBQUVDLFVBQVUsRUFBRTMzRSxJQUFJLENBQUMrMUUsZUFBZSxDQUFDLzlELEtBQUssRUFBRWhZLElBQUksQ0FBQysxRSxlQUFlLENBQUMzM0QsTUFBTSxDQUFDOztJQUU1R202RCxNQUFNLENBQUN2Z0UsTUFBTSxFQUFFaFksSUFBSSxDQUFDKzFFLGVBQWUsQ0FBQy85RCxLQUFLO0lBQ3pDdWdFLE1BQU0sQ0FBQ242RCxPQUFPLEVBQUVwZSxJQUFJLENBQUMrMUUsZUFBZSxDQUFDMzNELE1BQU07O0lBRTNDb1MsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQ3hoRCxPQUFPLENBQUMxZ0IsSUFBSSxDQUFDK3JFLFFBQVEsRUFBRXdNLE1BQU0sRUFBRSxHQUFHLENBQUM7RUFDaEQsQ0FBQzs7RUFFRC9LLFNBQVMsQ0FBQ3BqRixTQUFTLENBQUM0dUYsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQzNDLElBQUloNUUsS0FBSyxFQUFFLElBQUk7O0lBRWYsSUFBSWdvQixRQUFRLEVBQUVob0IsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQzFnQyxPQUFPOztJQUVuQyxJQUFJMHZELFVBQVUsRUFBRUMsVUFBVSxFQUFFWSxNQUFNLEVBQUV4OEUsS0FBSzs7SUFFekMsSUFBSTg3RSxTQUFTLEVBQUU3M0UsSUFBSSxDQUFDNjNFLFFBQVE7SUFDNUIsSUFBSUMsVUFBVSxFQUFFOTNFLElBQUksQ0FBQzgzRSxTQUFTOztJQUU5QixHQUFHLENBQUMsQ0FBQzkzRSxJQUFJLENBQUM4MUUsY0FBYyxFQUFFO01BQ3hCLE1BQU07SUFDUjs7SUFFQTRCLFdBQVcsRUFBRTEzRSxJQUFJLENBQUM4MUUsY0FBYyxDQUFDaDZELElBQUk7SUFDckM2N0QsV0FBVyxFQUFFMzNFLElBQUksQ0FBQzgxRSxjQUFjLENBQUMxL0UsR0FBRzs7SUFFcEMyRixNQUFNLEVBQUU7TUFDTjNGLEdBQUcsRUFBRXVoRixVQUFVO01BQ2Y3N0QsSUFBSSxFQUFFNDdELFVBQVU7TUFDaEIxL0QsS0FBSyxFQUFFNi9ELFFBQVE7TUFDZno1RCxNQUFNLEVBQUUwNUQsU0FBUztNQUNqQnZMLE1BQU0sRUFBRSxDQUFDO01BQ1RDLE1BQU0sRUFBRTtJQUNWLENBQUM7OztJQUdEaDhDLENBQUMsQ0FBQzB4QyxRQUFRLENBQUN1SixZQUFZLENBQUN6ckUsSUFBSSxDQUFDK3JFLFFBQVEsRUFBRWh3RSxLQUFLLENBQUM7O0lBRTdDLEdBQUcsQ0FBQzg3RSxTQUFTLEVBQUU3M0UsSUFBSSxDQUFDZ3NFLFlBQVksR0FBRzhMLFVBQVUsRUFBRTkzRSxJQUFJLENBQUNpc0UsWUFBWSxFQUFFO01BQ2hFanNFLElBQUksQ0FBQzBvRCxRQUFRLENBQUNra0IsVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUMvQixFQUFFLEtBQUssR0FBRyxDQUFDaUwsU0FBUyxFQUFFN3ZELE9BQU8sQ0FBQ2hRLE1BQU0sR0FBRzgvRCxVQUFVLEVBQUU5dkQsT0FBTyxDQUFDNUosTUFBTSxFQUFFO01BQ2pFcGUsSUFBSSxDQUFDMG9ELFFBQVEsQ0FBQ29qQixhQUFhLENBQUM5ckUsSUFBSSxDQUFDazJFLGlCQUFpQixFQUFFbDJFLElBQUksQ0FBQ20yRSxpQkFBaUIsRUFBRSxHQUFHLENBQUM7SUFDbEYsRUFBRSxLQUFLO01BQ0xvQyxPQUFPLEVBQUV2NEUsSUFBSSxDQUFDNDNFLGFBQWEsQ0FBQ0YsVUFBVSxFQUFFQyxVQUFVLEVBQUVFLFFBQVEsRUFBRUMsU0FBUyxDQUFDOztNQUV4RXRuRCxDQUFDLENBQUMweEMsUUFBUSxDQUFDeGhELE9BQU8sQ0FBQzFnQixJQUFJLENBQUMrckUsUUFBUSxFQUFFd00sTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUNoRDtFQUNGLENBQUM7O0VBRUQvSyxTQUFTLENBQUNwakYsU0FBUyxDQUFDd3VGLE1BQU0sRUFBRSxTQUFTLENBQUM3bEYsQ0FBQyxFQUFFO0lBQ3ZDLElBQUlpTixLQUFLLEVBQUUsSUFBSTtJQUNmLElBQUkreEUsUUFBUSxFQUFFdmhELENBQUMsQ0FBQ3o5QixDQUFDLENBQUMzRyxNQUFNLENBQUM7O0lBRXpCLElBQUlzOEQsU0FBUyxFQUFFMW9ELElBQUksQ0FBQzBvRCxRQUFRO0lBQzVCLElBQUkxZ0MsUUFBUSxFQUFFMGdDLFFBQVEsQ0FBQzFnQyxPQUFPOztJQUU5QixJQUFJMHdELFVBQVUsRUFBRSxDQUFDM2xGLEVBQUUsR0FBR3doRixZQUFZLENBQUN4aEYsQ0FBQyxDQUFDLEVBQUUsR0FBR2lOLElBQUksQ0FBQ3ExRSxXQUFXOztJQUUxRCxJQUFJK0QsS0FBSyxFQUFFVixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUVBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2gvQyxFQUFFLEVBQUVsSixDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUNnMkIsVUFBVSxDQUFDLEVBQUUsRUFBRWxkLElBQUksQ0FBQytxRSxRQUFRLENBQUNqdkQsS0FBSyxFQUFFLENBQUM7SUFDMUYsSUFBSXU5RCxLQUFLLEVBQUVYLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRUEsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDcC9DLEVBQUUsRUFBRTlJLENBQUMsQ0FBQ3RwQyxNQUFNLENBQUMsQ0FBQysxQixTQUFTLENBQUMsRUFBRSxFQUFFamQsSUFBSSxDQUFDK3FFLFFBQVEsQ0FBQzMwRSxJQUFJLEVBQUUsQ0FBQzs7SUFFeEYsSUFBSWtqRixLQUFLOztJQUVULElBQUlwMEUsUUFBUSxFQUFFLFNBQVMsQ0FBQ2dYLE1BQU0sRUFBRTtNQUM5QixJQUFJcTlELE9BQU8sRUFBRXZ4RCxPQUFPLENBQUN0SixJQUFJLENBQUN4QyxNQUFNLENBQUM7O01BRWpDLEdBQUcsQ0FBQ3NVLENBQUMsQ0FBQ3BvQyxVQUFVLENBQUNteEYsTUFBTSxDQUFDLEVBQUU7UUFDeEJBLE9BQU8sRUFBRUEsTUFBTSxDQUFDbnVGLEtBQUssQ0FBQ3M5RCxRQUFRLEVBQUUsQ0FBQzFnQyxPQUFPLEVBQUVqMUIsQ0FBQyxDQUFDLENBQUM7TUFDL0M7O01BRUEsR0FBRyxDQUFDLENBQUN3bUYsTUFBTSxFQUFFO1FBQ1gsTUFBTTtNQUNSOztNQUVBLE9BQU8sQ0FBQ0EsTUFBTSxFQUFFO1FBQ2QsS0FBSyxPQUFPO1VBQ1Y3d0IsUUFBUSxDQUFDeGhCLEtBQUssQ0FBQ2xuQyxJQUFJLENBQUNzMUUsVUFBVSxDQUFDOztVQUUvQixLQUFLOztRQUVQLEtBQUssZ0JBQWdCO1VBQ25CNXNCLFFBQVEsQ0FBQytvQixjQUFjLENBQUMsQ0FBQzs7VUFFekIsS0FBSzs7UUFFUCxLQUFLLE1BQU07VUFDVC9vQixRQUFRLENBQUM3MUQsSUFBSSxDQUFDLENBQUM7O1VBRWYsS0FBSzs7UUFFUCxLQUFLLGFBQWE7VUFDaEIsR0FBRyxDQUFDNjFELFFBQVEsQ0FBQzZMLEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQzdCbStELFFBQVEsQ0FBQzcxRCxJQUFJLENBQUMsQ0FBQztVQUNqQixFQUFFLEtBQUs7WUFDTDYxRCxRQUFRLENBQUN4aEIsS0FBSyxDQUFDbG5DLElBQUksQ0FBQ3MxRSxVQUFVLENBQUM7VUFDakM7O1VBRUEsS0FBSzs7UUFFUCxLQUFLLE1BQU07VUFDVCxHQUFHLENBQUN0dEQsT0FBTyxDQUFDdi9CLEtBQUssR0FBRyxRQUFRLEdBQUcsQ0FBQ3UvQixPQUFPLENBQUMyakQsU0FBUyxHQUFHM2pELE9BQU8sQ0FBQ3NtRCxNQUFNLENBQUMsRUFBRTtZQUNuRSxHQUFHLENBQUM1bEIsUUFBUSxDQUFDNGtCLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Y0FDckI1a0IsUUFBUSxDQUFDa2tCLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsS0FBSyxHQUFHLENBQUNsa0IsUUFBUSxDQUFDd2hCLFlBQVksQ0FBQyxDQUFDLEVBQUU7Y0FDbEN4aEIsUUFBUSxDQUFDb2pCLGFBQWEsQ0FBQ3NOLElBQUksRUFBRUMsSUFBSSxDQUFDO1lBQ3BDLEVBQUUsS0FBSyxHQUFHLENBQUMzd0IsUUFBUSxDQUFDNkwsS0FBSyxDQUFDaHFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7Y0FDcENtK0QsUUFBUSxDQUFDeGhCLEtBQUssQ0FBQ2xuQyxJQUFJLENBQUNzMUUsVUFBVSxDQUFDO1lBQ2pDO1VBQ0Y7O1VBRUEsS0FBSztNQUNUO0lBQ0YsQ0FBQzs7O0lBR0QsR0FBRyxDQUFDdmlGLENBQUMsQ0FBQ2dlLGNBQWMsR0FBR2hlLENBQUMsQ0FBQ2dlLGFBQWEsQ0FBQ0wsT0FBTyxHQUFHLENBQUMsRUFBRTtNQUNsRCxNQUFNO0lBQ1I7OztJQUdBLEdBQUcsQ0FBQyxDQUFDcWhFLE9BQU8sQ0FBQ3h5RSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUc2NUUsS0FBSyxFQUFFckgsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDbjVDLFlBQVksRUFBRW01QyxPQUFPLENBQUM3akQsTUFBTSxDQUFDLENBQUMsQ0FBQ3BTLElBQUksRUFBRTtNQUMvRSxNQUFNO0lBQ1I7OztJQUdBLEdBQUcsQ0FBQ2kyRCxPQUFPLENBQUN4eUUsRUFBRSxDQUFDLGtFQUFrRSxDQUFDLEVBQUU7TUFDbEYrNUUsTUFBTSxFQUFFLFNBQVM7SUFDbkIsRUFBRSxLQUFLLEdBQUcsQ0FBQ3ZILE9BQU8sQ0FBQ3h5RSxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRTtNQUN4Qys1RSxNQUFNLEVBQUUsT0FBTztJQUNqQixFQUFFLEtBQUssR0FBRztNQUNSNXdCLFFBQVEsQ0FBQzFnQyxPQUFPLENBQUMrakQsU0FBUztNQUMxQnJqQixRQUFRLENBQUMxZ0MsT0FBTyxDQUFDK2pEO01BQ2pCLENBQUNsMUUsSUFBSSxDQUFDazdFLE9BQU87TUFDYixDQUFDOXdFLE9BQU8sQ0FBQztNQUNULENBQUN0SyxNQUFNLENBQUNvN0UsT0FBTyxDQUFDLENBQUN4bkY7SUFDbkIsRUFBRTtNQUNBK3VGLE1BQU0sRUFBRSxTQUFTO0lBQ25CLEVBQUUsS0FBSztNQUNMLE1BQU07SUFDUjs7O0lBR0EsR0FBRyxDQUFDdDVFLElBQUksQ0FBQ2kxRSxNQUFNLEVBQUU7O01BRWZyekQsWUFBWSxDQUFDNWhCLElBQUksQ0FBQ2kxRSxNQUFNLENBQUM7TUFDekJqMUUsSUFBSSxDQUFDaTFFLE9BQU8sRUFBRSxJQUFJOzs7TUFHbEIsR0FBRyxDQUFDdG9GLElBQUksQ0FBQzhyQyxHQUFHLENBQUMyZ0QsS0FBSyxFQUFFcDVFLElBQUksQ0FBQ281RSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUd6c0YsSUFBSSxDQUFDOHJDLEdBQUcsQ0FBQzRnRCxLQUFLLEVBQUVyNUUsSUFBSSxDQUFDcTVFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUN0RSxPQUFPLElBQUk7TUFDYjs7O01BR0FuMEUsT0FBTyxDQUFDLFdBQVcsRUFBRW8wRSxLQUFLLENBQUM7SUFDN0IsRUFBRSxLQUFLOzs7TUFHTHQ1RSxJQUFJLENBQUNvNUUsS0FBSyxFQUFFQSxJQUFJO01BQ2hCcDVFLElBQUksQ0FBQ3E1RSxLQUFLLEVBQUVBLElBQUk7O01BRWhCLEdBQUcsQ0FBQ3J4RCxPQUFPLENBQUN0SixJQUFJLENBQUMsV0FBVyxFQUFFNDZELEtBQUssRUFBRSxHQUFHdHhELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQyxXQUFXLEVBQUU0NkQsS0FBSyxFQUFFLElBQUl0eEQsT0FBTyxDQUFDdEosSUFBSSxDQUFDLFFBQVEsRUFBRTQ2RCxLQUFLLENBQUMsRUFBRTtRQUMxR3Q1RSxJQUFJLENBQUNpMUUsT0FBTyxFQUFFMXZFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUNuQ3ZGLElBQUksQ0FBQ2kxRSxPQUFPLEVBQUUsSUFBSTs7VUFFbEIsR0FBRyxDQUFDLENBQUN2c0IsUUFBUSxDQUFDdWlCLFdBQVcsRUFBRTtZQUN6Qi9sRSxPQUFPLENBQUMsUUFBUSxFQUFFbzBFLEtBQUssQ0FBQztVQUMxQjtRQUNGLENBQUMsRUFBRSxHQUFHLENBQUM7TUFDVCxFQUFFLEtBQUs7UUFDTHAwRSxPQUFPLENBQUMsUUFBUSxFQUFFbzBFLEtBQUssQ0FBQztNQUMxQjtJQUNGOztJQUVBLE9BQU8sSUFBSTtFQUNiLENBQUM7O0VBRUQ5b0QsQ0FBQyxDQUFDenBDLFFBQVE7SUFDUixDQUFDbW5CLEVBQUUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTtNQUMxQyxHQUFHLENBQUNBLFNBQVMsR0FBRyxDQUFDQSxRQUFRLENBQUM4a0IsU0FBUyxFQUFFO1FBQ25DOWtCLFFBQVEsQ0FBQzhrQixVQUFVLEVBQUUsSUFBSUEsU0FBUyxDQUFDOWtCLFFBQVEsQ0FBQztNQUM5QztJQUNGLENBQUM7SUFDRCxDQUFDeDZDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUNuYixDQUFDLEVBQUUyMUQsUUFBUSxFQUFFO01BQzNDLEdBQUcsQ0FBQ0EsU0FBUyxHQUFHQSxRQUFRLENBQUM4a0IsU0FBUyxFQUFFO1FBQ2xDOWtCLFFBQVEsQ0FBQzhrQixTQUFTLENBQUN6MkMsT0FBTyxDQUFDLENBQUM7TUFDOUI7SUFDRixDQUFDLENBQUM7QUFDTixDQUFDLENBQUMsQ0FBQzd2QyxNQUFNLEVBQUVILFFBQVEsRUFBRStDLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQVU1QixDQUFDLFNBQVMsQ0FBQy9DLFFBQVEsRUFBRXlwQyxDQUFDLEVBQUU7RUFDdEIsWUFBWTs7RUFFWkEsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxJQUFJLEVBQUUwa0MsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQzlRLFFBQVEsRUFBRTtJQUNsQzJTLE1BQU0sRUFBRTtNQUNOWSxTQUFTLEVBQUUsbUdBQW1HO1FBQzVHLHNHQUFzRztRQUN0RywwSUFBMEk7UUFDMUk7SUFDSixDQUFDO0lBQ0RBLFNBQVMsRUFBRTtNQUNUeEIsU0FBUyxFQUFFLEtBQUs7TUFDaEI5aUQsS0FBSyxFQUFFLElBQUk7TUFDWGhjLFFBQVEsRUFBRTtJQUNaO0VBQ0YsQ0FBQyxDQUFDOztFQUVGLElBQUlzb0UsVUFBVSxFQUFFLFNBQVMsQ0FBQ2prQixRQUFRLEVBQUU7SUFDbEMsSUFBSSxDQUFDQSxTQUFTLEVBQUVBLFFBQVE7SUFDeEIsSUFBSSxDQUFDeCtELElBQUksQ0FBQyxDQUFDO0VBQ2IsQ0FBQzs7RUFFRHNtQyxDQUFDLENBQUMxa0MsTUFBTSxDQUFDNmdGLFNBQVMsQ0FBQ3ZpRixTQUFTLEVBQUU7SUFDNUI4MUIsS0FBSyxFQUFFLElBQUk7SUFDWDZwRCxRQUFRLEVBQUUsS0FBSztJQUNmeVAsT0FBTyxFQUFFLElBQUk7O0lBRWJ0dkYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ2hCLElBQUk4VixLQUFLLEVBQUUsSUFBSTtRQUNiMG9ELFNBQVMsRUFBRTFvRCxJQUFJLENBQUMwb0QsUUFBUTtRQUN4QmhxQyxLQUFLLEVBQUVncUMsUUFBUSxDQUFDNkwsS0FBSyxDQUFDN0wsUUFBUSxDQUFDMmYsU0FBUyxDQUFDLENBQUMzcEQsSUFBSSxDQUFDaW1ELFNBQVM7O01BRTFEM2tFLElBQUksQ0FBQ3c1RSxRQUFRLEVBQUU5d0IsUUFBUSxDQUFDd2dCLEtBQUssQ0FBQ3ZHLE9BQU8sQ0FBQzlyRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQ3FYLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDekZsTyxJQUFJLENBQUN1TCxNQUFNLENBQUMsQ0FBQztNQUNmLENBQUMsQ0FBQzs7TUFFRixHQUFHLENBQUNtOUMsUUFBUSxDQUFDNkwsS0FBSyxDQUFDaHFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQ20wQixJQUFJLEVBQUU7UUFDdEMxZSxJQUFJLENBQUN3NUUsT0FBTyxDQUFDbHVFLElBQUksQ0FBQyxDQUFDO01BQ3JCLEVBQUUsS0FBSyxHQUFHLENBQUNvVCxJQUFJLENBQUNyYSxRQUFRLEVBQUU7UUFDeEJyRSxJQUFJLENBQUN5NUUsVUFBVSxFQUFFanBELENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDOVosUUFBUSxDQUFDZ3lDLFFBQVEsQ0FBQ3dnQixLQUFLLENBQUN3USxLQUFLLENBQUM7TUFDNUY7SUFDRixDQUFDOztJQUVEMXhFLEdBQUcsRUFBRSxTQUFTLENBQUMyeEUsS0FBSyxFQUFFO01BQ3BCLElBQUkzNUUsS0FBSyxFQUFFLElBQUk7UUFDYjBvRCxTQUFTLEVBQUUxb0QsSUFBSSxDQUFDMG9ELFFBQVE7UUFDeEIxZ0MsUUFBUSxFQUFFMGdDLFFBQVEsQ0FBQzFnQyxPQUFPOzs7TUFHNUIsR0FBRyxDQUFDQSxRQUFRLEdBQUcsQ0FBQzJ4RCxNQUFNLElBQUksS0FBSyxHQUFHM3hELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQzBqRCxLQUFLLEdBQUcxWixRQUFRLENBQUMyZixVQUFVLEVBQUUzZixRQUFRLENBQUM2TCxLQUFLLENBQUNocUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQ3RHLEdBQUcsQ0FBQ3lWLElBQUksQ0FBQytwRSxTQUFTLEdBQUcvaEQsT0FBTyxDQUFDYSxZQUFZLElBQUksT0FBTyxFQUFFO1VBQ3BELEdBQUcsQ0FBQzdvQixJQUFJLENBQUN5NUUsU0FBUyxFQUFFO1lBQ2xCanBELENBQUMsQ0FBQzB4QyxRQUFRLENBQUN4aEQsT0FBTyxDQUFDMWdCLElBQUksQ0FBQ3k1RSxTQUFTLENBQUNydUUsSUFBSSxDQUFDLENBQUMsRUFBRTtjQUN4Q21oRSxNQUFNLEVBQUU7WUFDVixDQUFDLEVBQUV2a0QsT0FBTyxDQUFDdEosSUFBSSxDQUFDaW1ELFNBQVMsQ0FBQ3RrRCxLQUFLLENBQUM7VUFDbEM7O1VBRUFyZ0IsSUFBSSxDQUFDa2dCLE1BQU0sRUFBRTNhLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsQyxHQUFHLENBQUMsQ0FBQ21qRCxRQUFRLENBQUMxZ0MsT0FBTyxDQUFDdEosSUFBSSxDQUFDMGpELEtBQUssR0FBRzFaLFFBQVEsQ0FBQzFnQyxPQUFPLENBQUNsbkIsTUFBTSxHQUFHNG5ELFFBQVEsQ0FBQzZMLEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO2NBQ3RGbStELFFBQVEsQ0FBQzBnQixNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEVBQUUsS0FBSztjQUNMMWdCLFFBQVEsQ0FBQzcxRCxJQUFJLENBQUMsQ0FBQztZQUNqQjtVQUNGLENBQUMsRUFBRW0xQixPQUFPLENBQUN0SixJQUFJLENBQUNpbUQsU0FBUyxDQUFDdGtELEtBQUssQ0FBQztRQUNsQztNQUNGLEVBQUUsS0FBSztRQUNMcmdCLElBQUksQ0FBQ21KLElBQUksQ0FBQyxDQUFDO1FBQ1h1L0MsUUFBUSxDQUFDNGhCLG1CQUFtQixFQUFFLENBQUM7UUFDL0I1aEIsUUFBUSxDQUFDOGhCLFlBQVksQ0FBQyxDQUFDO01BQ3pCO0lBQ0YsQ0FBQzs7SUFFRG9QLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtNQUNqQixJQUFJNTVFLEtBQUssRUFBRSxJQUFJOztNQUVmNGhCLFlBQVksQ0FBQzVoQixJQUFJLENBQUNrZ0IsS0FBSyxDQUFDOztNQUV4QmxnQixJQUFJLENBQUNrZ0IsTUFBTSxFQUFFLElBQUk7O01BRWpCLEdBQUcsQ0FBQ2xnQixJQUFJLENBQUN5NUUsU0FBUyxFQUFFO1FBQ2xCejVFLElBQUksQ0FBQ3k1RSxTQUFTLENBQUN4M0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDM1csSUFBSSxDQUFDLENBQUM7TUFDM0M7SUFDRixDQUFDOztJQUVEcFIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ2pCLElBQUk4RixLQUFLLEVBQUUsSUFBSTtRQUNiZ29CLFFBQVEsRUFBRWhvQixJQUFJLENBQUMwb0QsUUFBUSxDQUFDMWdDLE9BQU87O01BRWpDLEdBQUcsQ0FBQ0EsT0FBTyxFQUFFO1FBQ1hob0IsSUFBSSxDQUFDdzVFO1VBQ0gsQ0FBQ3BoRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM0dkIsT0FBTyxDQUFDdEosSUFBSSxDQUFDa25ELElBQUksQ0FBQzU5QyxPQUFPLENBQUN0SixJQUFJLENBQUM1akIsSUFBSSxFQUFFLEdBQUdrdEIsT0FBTyxDQUFDdEosSUFBSSxDQUFDa25ELElBQUksQ0FBQy93QyxFQUFFLENBQUMsQ0FBQ3F4QyxTQUFTO1VBQ3ZGLENBQUM1aUQsV0FBVyxDQUFDLHVCQUF1QjtVQUNwQyxDQUFDTCxRQUFRLENBQUMsd0JBQXdCLENBQUM7O1FBRXJDampCLElBQUksQ0FBQytwRSxTQUFTLEVBQUUsSUFBSTs7UUFFcEIsR0FBRyxDQUFDL2hELE9BQU8sQ0FBQ3VqRCxVQUFVLEVBQUU7VUFDdEJ2ckUsSUFBSSxDQUFDZ0ksR0FBRyxDQUFDLElBQUksQ0FBQztRQUNoQjs7UUFFQWhJLElBQUksQ0FBQzBvRCxRQUFRLENBQUNyM0MsT0FBTyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQztNQUNsRDtJQUNGLENBQUM7O0lBRURsSSxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7TUFDaEIsSUFBSW5KLEtBQUssRUFBRSxJQUFJO1FBQ2Jnb0IsUUFBUSxFQUFFaG9CLElBQUksQ0FBQzBvRCxRQUFRLENBQUMxZ0MsT0FBTzs7TUFFakNob0IsSUFBSSxDQUFDNDVFLEtBQUssQ0FBQyxDQUFDOztNQUVaNTVFLElBQUksQ0FBQ3c1RTtRQUNILENBQUNwaEYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDNHZCLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ2tuRCxJQUFJLENBQUM1OUMsT0FBTyxDQUFDdEosSUFBSSxDQUFDNWpCLElBQUksRUFBRSxHQUFHa3RCLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ2tuRCxJQUFJLENBQUMvd0MsRUFBRSxDQUFDLENBQUNveEMsVUFBVTtRQUN4RixDQUFDM2lELFdBQVcsQ0FBQyx3QkFBd0I7UUFDckMsQ0FBQ0wsUUFBUSxDQUFDLHVCQUF1QixDQUFDOztNQUVwQ2pqQixJQUFJLENBQUMrcEUsU0FBUyxFQUFFLEtBQUs7O01BRXJCL3BFLElBQUksQ0FBQzBvRCxRQUFRLENBQUNyM0MsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQzs7TUFFakQsR0FBRyxDQUFDclIsSUFBSSxDQUFDeTVFLFNBQVMsRUFBRTtRQUNsQno1RSxJQUFJLENBQUN5NUUsU0FBUyxDQUFDeDNELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzNXLElBQUksQ0FBQyxDQUFDO01BQzNDO0lBQ0YsQ0FBQzs7SUFFREMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ2xCLElBQUl2TCxLQUFLLEVBQUUsSUFBSTs7TUFFZixHQUFHLENBQUNBLElBQUksQ0FBQytwRSxRQUFRLEVBQUU7UUFDakIvcEUsSUFBSSxDQUFDbUosSUFBSSxDQUFDLENBQUM7TUFDYixFQUFFLEtBQUs7UUFDTG5KLElBQUksQ0FBQzlGLEtBQUssQ0FBQyxDQUFDO01BQ2Q7SUFDRjtFQUNGLENBQUMsQ0FBQzs7RUFFRnMyQixDQUFDLENBQUN6cEMsUUFBUSxDQUFDLENBQUNtbkIsRUFBRSxDQUFDO0lBQ2IsV0FBVyxFQUFFLFNBQVMsQ0FBQ25iLENBQUMsRUFBRTIxRCxRQUFRLEVBQUU7TUFDbEMsR0FBRyxDQUFDQSxTQUFTLEdBQUcsQ0FBQ0EsUUFBUSxDQUFDaWtCLFNBQVMsRUFBRTtRQUNuQ2prQixRQUFRLENBQUNpa0IsVUFBVSxFQUFFLElBQUlBLFNBQVMsQ0FBQ2prQixRQUFRLENBQUM7TUFDOUM7SUFDRixDQUFDOztJQUVELGVBQWUsRUFBRSxTQUFTLENBQUMzMUQsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTFnQyxPQUFPLEVBQUV5Z0QsUUFBUSxFQUFFO01BQ3pELElBQUlrRSxVQUFVLEVBQUVqa0IsU0FBUyxHQUFHQSxRQUFRLENBQUNpa0IsU0FBUzs7TUFFOUMsR0FBRyxDQUFDbEUsUUFBUSxFQUFFO1FBQ1osR0FBRyxDQUFDa0UsVUFBVSxHQUFHM2tELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ2ltRCxTQUFTLENBQUN4QixTQUFTLEVBQUU7VUFDakR3SixTQUFTLENBQUN6eUUsS0FBSyxDQUFDLENBQUM7UUFDbkI7TUFDRixFQUFFLEtBQUssR0FBRyxDQUFDeXlFLFVBQVUsR0FBR0EsU0FBUyxDQUFDNUMsUUFBUSxFQUFFO1FBQzFDNEMsU0FBUyxDQUFDaU4sS0FBSyxDQUFDLENBQUM7TUFDbkI7SUFDRixDQUFDOztJQUVELGNBQWMsRUFBRSxTQUFTLENBQUM3bUYsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTFnQyxPQUFPLEVBQUU7TUFDOUMsSUFBSTJrRCxVQUFVLEVBQUVqa0IsU0FBUyxHQUFHQSxRQUFRLENBQUNpa0IsU0FBUzs7TUFFOUMsR0FBRyxDQUFDQSxVQUFVLEdBQUdBLFNBQVMsQ0FBQzVDLFFBQVEsRUFBRTtRQUNuQzRDLFNBQVMsQ0FBQzNrRSxHQUFHLENBQUMsQ0FBQztNQUNqQjtJQUNGLENBQUM7O0lBRUQsaUJBQWlCLEVBQUUsU0FBUyxDQUFDalYsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTFnQyxPQUFPLEVBQUU2ZixRQUFRLEVBQUV3aUMsT0FBTyxFQUFFO01BQ3BFLElBQUlzQyxVQUFVLEVBQUVqa0IsU0FBUyxHQUFHQSxRQUFRLENBQUNpa0IsU0FBUzs7O01BRzlDLEdBQUcsQ0FBQ0EsVUFBVSxHQUFHM2tELE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ2ltRCxVQUFVLEdBQUcsQ0FBQzBGLFFBQVEsSUFBSSxHQUFHLEdBQUdBLFFBQVEsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDNzVDLENBQUMsQ0FBQ3pwQyxRQUFRLENBQUNtVSxhQUFhLENBQUMsQ0FBQ3FFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2hJc29DLFFBQVEsQ0FBQ3gzQixjQUFjLENBQUMsQ0FBQzs7UUFFekJzOEQsU0FBUyxDQUFDcGhFLE1BQU0sQ0FBQyxDQUFDO01BQ3BCO0lBQ0YsQ0FBQzs7SUFFRCxnQ0FBZ0MsRUFBRSxTQUFTLENBQUN4WSxDQUFDLEVBQUUyMUQsUUFBUSxFQUFFO01BQ3ZELElBQUlpa0IsVUFBVSxFQUFFamtCLFNBQVMsR0FBR0EsUUFBUSxDQUFDaWtCLFNBQVM7O01BRTlDLEdBQUcsQ0FBQ0EsU0FBUyxFQUFFO1FBQ2JBLFNBQVMsQ0FBQ3hqRSxJQUFJLENBQUMsQ0FBQztNQUNsQjtJQUNGO0VBQ0YsQ0FBQyxDQUFDOzs7RUFHRnFuQixDQUFDLENBQUN6cEMsUUFBUSxDQUFDLENBQUNtbkIsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQzdDLElBQUl3NkMsU0FBUyxFQUFFbDRCLENBQUMsQ0FBQzB4QyxRQUFRLENBQUM4RyxXQUFXLENBQUMsQ0FBQztNQUNyQzJELFVBQVUsRUFBRWprQixTQUFTLEdBQUdBLFFBQVEsQ0FBQ2lrQixTQUFTOztJQUU1QyxHQUFHLENBQUNBLFVBQVUsR0FBR0EsU0FBUyxDQUFDNUMsUUFBUSxFQUFFO01BQ25DLEdBQUcsQ0FBQ2hqRixRQUFRLENBQUM4MkIsTUFBTSxFQUFFO1FBQ25COHVELFNBQVMsQ0FBQ2lOLEtBQUssQ0FBQyxDQUFDO01BQ25CLEVBQUUsS0FBSztRQUNMak4sU0FBUyxDQUFDM2tFLEdBQUcsQ0FBQyxDQUFDO01BQ2pCO0lBQ0Y7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQ2poQixRQUFRLEVBQUUrQyxNQUFNLENBQUM7Ozs7Ozs7QUFPcEIsQ0FBQyxTQUFTLENBQUMvQyxRQUFRLEVBQUV5cEMsQ0FBQyxFQUFFO0VBQ3RCLFlBQVk7OztFQUdaLElBQUl2bUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDcEIsSUFBSTR2RixNQUFNLEVBQUU7TUFDVixDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDOztNQUV4SDtRQUNFLHlCQUF5QjtRQUN6QixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6Qix3QkFBd0I7UUFDeEI7TUFDRixDQUFDOztNQUVEO1FBQ0UseUJBQXlCO1FBQ3pCLHdCQUF3QjtRQUN4QixnQ0FBZ0M7UUFDaEMsd0JBQXdCO1FBQ3hCLHdCQUF3QjtRQUN4QjtNQUNGLENBQUM7TUFDRDtRQUNFLHNCQUFzQjtRQUN0QixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUN0QixxQkFBcUI7UUFDckI7TUFDRixDQUFDO01BQ0QsQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUI7SUFDckksQ0FBQzs7SUFFRCxJQUFJaHZGLElBQUksRUFBRSxDQUFDLENBQUM7O0lBRVosSUFBSSxDQUFDLElBQUk1QixFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUU0d0YsS0FBSyxDQUFDdHZGLE1BQU0sRUFBRXRCLENBQUMsRUFBRSxFQUFFO01BQ3JDLElBQUlDLElBQUksRUFBRTJ3RixLQUFLLENBQUM1d0YsQ0FBQyxDQUFDOztNQUVsQixHQUFHLENBQUNDLElBQUksR0FBR0EsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHbkMsUUFBUSxFQUFFO1FBQzdCLElBQUksQ0FBQyxJQUFJMkUsRUFBRSxFQUFFLENBQUMsRUFBRUEsRUFBRSxFQUFFeEMsR0FBRyxDQUFDcUIsTUFBTSxFQUFFbUIsQ0FBQyxFQUFFLEVBQUU7VUFDbkNiLEdBQUcsQ0FBQ2d2RixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNudUYsQ0FBQyxDQUFDLEVBQUUsRUFBRXhDLEdBQUcsQ0FBQ3dDLENBQUMsQ0FBQztRQUMzQjs7UUFFQSxPQUFPYixHQUFHO01BQ1o7SUFDRjs7SUFFQSxPQUFPLEtBQUs7RUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVKLEdBQUcsQ0FBQ1osRUFBRSxFQUFFO0lBQ04sSUFBSTZ2RixXQUFXLEVBQUU7TUFDZkMsT0FBTyxFQUFFLFNBQVMsQ0FBQzV1RixJQUFJLEVBQUU7UUFDdkJBLEtBQUssRUFBRUEsS0FBSyxHQUFHcEUsUUFBUSxDQUFDaVAsZUFBZTs7UUFFdkM3SyxJQUFJLENBQUNsQixFQUFFLENBQUMrdkYsaUJBQWlCLENBQUMsQ0FBQzd1RixJQUFJLENBQUM4dUYsb0JBQW9CLENBQUM7TUFDdkQsQ0FBQztNQUNEQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDaEJuekYsUUFBUSxDQUFDa0QsRUFBRSxDQUFDNG1GLGNBQWMsQ0FBQyxDQUFDLENBQUM7TUFDL0IsQ0FBQztNQUNEdGxFLE1BQU0sRUFBRSxTQUFTLENBQUNwZ0IsSUFBSSxFQUFFO1FBQ3RCQSxLQUFLLEVBQUVBLEtBQUssR0FBR3BFLFFBQVEsQ0FBQ2lQLGVBQWU7O1FBRXZDLEdBQUcsQ0FBQyxJQUFJLENBQUNta0YsWUFBWSxDQUFDLENBQUMsRUFBRTtVQUN2QixJQUFJLENBQUNELElBQUksQ0FBQyxDQUFDO1FBQ2IsRUFBRSxLQUFLO1VBQ0wsSUFBSSxDQUFDSCxPQUFPLENBQUM1dUYsSUFBSSxDQUFDO1FBQ3BCO01BQ0YsQ0FBQztNQUNEZ3ZGLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixPQUFPQyxPQUFPLENBQUNyekYsUUFBUSxDQUFDa0QsRUFBRSxDQUFDb3dGLGlCQUFpQixDQUFDLENBQUM7TUFDaEQsQ0FBQztNQUNEQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsT0FBT0YsT0FBTyxDQUFDcnpGLFFBQVEsQ0FBQ2tELEVBQUUsQ0FBQ3N3RixpQkFBaUIsQ0FBQyxDQUFDO01BQ2hEO0lBQ0YsQ0FBQzs7SUFFRC9wRCxDQUFDLENBQUMxa0MsTUFBTSxDQUFDLElBQUksRUFBRTBrQyxDQUFDLENBQUMweEMsUUFBUSxDQUFDOVEsUUFBUSxFQUFFO01BQ2xDMlMsTUFBTSxFQUFFO1FBQ05RLFVBQVUsRUFBRSw2R0FBNkc7VUFDdkgsK0pBQStKO1VBQy9KLHFKQUFxSjtVQUNySjtNQUNKLENBQUM7TUFDREEsVUFBVSxFQUFFO1FBQ1ZwQixTQUFTLEVBQUU7TUFDYjtJQUNGLENBQUMsQ0FBQzs7SUFFRjN5QyxDQUFDLENBQUN6cEMsUUFBUSxDQUFDLENBQUNtbkIsRUFBRSxDQUFDamtCLEVBQUUsQ0FBQ3V3RixnQkFBZ0IsRUFBRSxTQUFTLENBQUMsRUFBRTtNQUM5QyxJQUFJTCxhQUFhLEVBQUVMLFVBQVUsQ0FBQ0ssWUFBWSxDQUFDLENBQUM7UUFDMUN6eEIsU0FBUyxFQUFFbDRCLENBQUMsQ0FBQzB4QyxRQUFRLENBQUM4RyxXQUFXLENBQUMsQ0FBQzs7TUFFckMsR0FBRyxDQUFDdGdCLFFBQVEsRUFBRTs7UUFFWixHQUFHLENBQUNBLFFBQVEsQ0FBQzFnQyxRQUFRLEdBQUcwZ0MsUUFBUSxDQUFDMWdDLE9BQU8sQ0FBQ3YvQixLQUFLLElBQUksUUFBUSxHQUFHaWdFLFFBQVEsQ0FBQ3VpQixXQUFXLEVBQUU7VUFDakZ2aUIsUUFBUSxDQUFDdWlCLFlBQVksRUFBRSxLQUFLOztVQUU1QnZpQixRQUFRLENBQUNILE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7VUFFOUIsR0FBRyxDQUFDLENBQUNHLFFBQVEsQ0FBQzZpQixVQUFVLEVBQUU7WUFDeEI3aUIsUUFBUSxDQUFDem9DLFFBQVEsQ0FBQyxDQUFDO1VBQ3JCO1FBQ0Y7O1FBRUF5b0MsUUFBUSxDQUFDcjNDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRThvRSxZQUFZLENBQUM7O1FBRXBEenhCLFFBQVEsQ0FBQ3dnQixLQUFLLENBQUM1eEQsU0FBUyxDQUFDaU0sV0FBVyxDQUFDLHdCQUF3QixFQUFFNDJELFlBQVksQ0FBQzs7UUFFNUV6eEIsUUFBUSxDQUFDd2dCLEtBQUssQ0FBQ3ZHO1VBQ2IsQ0FBQzlyRSxJQUFJLENBQUMsNEJBQTRCO1VBQ2xDLENBQUMwc0IsV0FBVyxDQUFDLDBCQUEwQixFQUFFLENBQUM0MkQsWUFBWTtVQUN0RCxDQUFDNTJELFdBQVcsQ0FBQyx5QkFBeUIsRUFBRTQyRCxZQUFZLENBQUM7TUFDekQ7SUFDRixDQUFDLENBQUM7RUFDSjs7RUFFQTNwRCxDQUFDLENBQUN6cEMsUUFBUSxDQUFDLENBQUNtbkIsRUFBRSxDQUFDO0lBQ2IsV0FBVyxFQUFFLFNBQVMsQ0FBQ25iLENBQUMsRUFBRTIxRCxRQUFRLEVBQUU7TUFDbEMsSUFBSW9nQixVQUFVOztNQUVkLEdBQUcsQ0FBQyxDQUFDNytFLEVBQUUsRUFBRTtRQUNQeStELFFBQVEsQ0FBQ3dnQixLQUFLLENBQUN2RyxPQUFPLENBQUM5ckUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM0TCxNQUFNLENBQUMsQ0FBQzs7UUFFbEUsTUFBTTtNQUNSOztNQUVBLEdBQUcsQ0FBQ2ltRCxTQUFTLEdBQUdBLFFBQVEsQ0FBQzZMLEtBQUssQ0FBQzdMLFFBQVEsQ0FBQzJmLFNBQVMsQ0FBQyxDQUFDM3BELElBQUksQ0FBQzZsRCxVQUFVLEVBQUU7UUFDbEV1RSxXQUFXLEVBQUVwZ0IsUUFBUSxDQUFDd2dCLEtBQUssQ0FBQzV4RCxTQUFTOztRQUVyQ3d4RCxVQUFVLENBQUM1NkQsRUFBRSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLFNBQVMsQ0FBQ25iLENBQUMsRUFBRTtVQUM5RUEsQ0FBQyxDQUFDdWQsZUFBZSxDQUFDLENBQUM7VUFDbkJ2ZCxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQzs7VUFFbEJ5cEUsVUFBVSxDQUFDdnVFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQzs7UUFFRixHQUFHLENBQUNtOUMsUUFBUSxDQUFDaHFDLElBQUksQ0FBQzZsRCxXQUFXLEdBQUc3YixRQUFRLENBQUNocUMsSUFBSSxDQUFDNmxELFVBQVUsQ0FBQ3BCLFVBQVUsSUFBSSxJQUFJLEVBQUU7VUFDM0UyVyxVQUFVLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCOzs7UUFHQXJ4QixRQUFRLENBQUNveEIsV0FBVyxFQUFFQSxVQUFVO01BQ2xDLEVBQUUsS0FBSyxHQUFHLENBQUNweEIsUUFBUSxFQUFFO1FBQ25CQSxRQUFRLENBQUN3Z0IsS0FBSyxDQUFDdkcsT0FBTyxDQUFDOXJFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDeVUsSUFBSSxDQUFDLENBQUM7TUFDbEU7SUFDRixDQUFDOztJQUVELGlCQUFpQixFQUFFLFNBQVMsQ0FBQ3ZZLENBQUMsRUFBRTIxRCxRQUFRLEVBQUUxZ0MsT0FBTyxFQUFFNmYsUUFBUSxFQUFFd2lDLE9BQU8sRUFBRTs7TUFFcEUsR0FBRyxDQUFDM2hCLFNBQVMsR0FBR0EsUUFBUSxDQUFDb3hCLFdBQVcsR0FBR3pQLFFBQVEsSUFBSSxFQUFFLEVBQUU7UUFDckR4aUMsUUFBUSxDQUFDeDNCLGNBQWMsQ0FBQyxDQUFDOztRQUV6QnE0QyxRQUFRLENBQUNveEIsVUFBVSxDQUFDdnVFLE1BQU0sQ0FBQyxDQUFDO01BQzlCO0lBQ0YsQ0FBQzs7SUFFRCxnQkFBZ0IsRUFBRSxTQUFTLENBQUN4WSxDQUFDLEVBQUUyMUQsUUFBUSxFQUFFO01BQ3ZDLEdBQUcsQ0FBQ0EsU0FBUyxHQUFHQSxRQUFRLENBQUNveEIsV0FBVyxHQUFHcHhCLFFBQVEsQ0FBQ3dnQixLQUFLLENBQUM1eEQsU0FBUyxDQUFDcU0sUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUU7UUFDbEdtMkQsVUFBVSxDQUFDSSxJQUFJLENBQUMsQ0FBQztNQUNuQjtJQUNGO0VBQ0YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUNuekYsUUFBUSxFQUFFK0MsTUFBTSxDQUFDOzs7Ozs7O0FBT3BCLENBQUMsU0FBUyxDQUFDL0MsUUFBUSxFQUFFeXBDLENBQUMsRUFBRTtFQUN0QixZQUFZOztFQUVaLElBQUlpcUQsTUFBTSxFQUFFLGlCQUFpQjtJQUMzQkMsYUFBYSxFQUFFRCxNQUFNLEVBQUUsU0FBUzs7O0VBR2xDanFELENBQUMsQ0FBQzB4QyxRQUFRLENBQUM5USxTQUFTLEVBQUU1Z0MsQ0FBQyxDQUFDMWtDLE1BQU07SUFDNUIsSUFBSSxFQUFFO01BQ0ppNEUsTUFBTSxFQUFFO1FBQ05hLE1BQU0sRUFBRSxtR0FBbUc7VUFDekcsMFdBQTBXO1VBQzFXO01BQ0osQ0FBQztNQUNEQSxNQUFNLEVBQUU7UUFDTnpCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCMEIsV0FBVyxFQUFFLElBQUk7UUFDakJWLFFBQVEsRUFBRSxxQkFBcUI7UUFDL0J4dEIsSUFBSSxFQUFFO01BQ1I7SUFDRixDQUFDO0lBQ0RubUIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQzlRO0VBQ2IsQ0FBQzs7RUFFRCxJQUFJdXBCLFlBQVksRUFBRSxTQUFTLENBQUNqeUIsUUFBUSxFQUFFO0lBQ3BDLElBQUksQ0FBQ3grRCxJQUFJLENBQUN3K0QsUUFBUSxDQUFDO0VBQ3JCLENBQUM7O0VBRURsNEIsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQzZ1RixXQUFXLENBQUN2d0YsU0FBUyxFQUFFO0lBQzlCb3ZGLE9BQU8sRUFBRSxJQUFJO0lBQ2JvQixLQUFLLEVBQUUsSUFBSTtJQUNYQyxLQUFLLEVBQUUsSUFBSTtJQUNYM0osU0FBUyxFQUFFLEtBQUs7SUFDaEJuSCxRQUFRLEVBQUUsS0FBSzs7SUFFZjcvRSxJQUFJLEVBQUUsU0FBUyxDQUFDdytELFFBQVEsRUFBRTtNQUN4QixJQUFJMW9ELEtBQUssRUFBRSxJQUFJO1FBQ2J1MEQsTUFBTSxFQUFFN0wsUUFBUSxDQUFDNkwsS0FBSztRQUN0QitsQixRQUFRLEVBQUUsQ0FBQzs7TUFFYnQ2RSxJQUFJLENBQUMwb0QsU0FBUyxFQUFFQSxRQUFRO01BQ3hCMW9ELElBQUksQ0FBQzBlLEtBQUssRUFBRTYxQyxLQUFLLENBQUM3TCxRQUFRLENBQUMyZixTQUFTLENBQUMsQ0FBQzNwRCxJQUFJLENBQUNrbUQsTUFBTTs7TUFFakRsYyxRQUFRLENBQUNvaEIsT0FBTyxFQUFFOXBFLElBQUk7O01BRXRCQSxJQUFJLENBQUN3NUUsUUFBUSxFQUFFOXdCLFFBQVEsQ0FBQ3dnQixLQUFLLENBQUN2RyxPQUFPLENBQUM5ckUsSUFBSSxDQUFDLHdCQUF3QixDQUFDOzs7TUFHcEUsSUFBSSxDQUFDLElBQUk1TixFQUFFLEVBQUUsQ0FBQyxFQUFFd0MsSUFBSSxFQUFFOG9FLEtBQUssQ0FBQ2hxRSxNQUFNLEVBQUV0QixFQUFFLEVBQUV3QyxHQUFHLEVBQUV4QyxDQUFDLEVBQUUsRUFBRTtRQUNoRCxHQUFHLENBQUNzckUsS0FBSyxDQUFDdHJFLENBQUMsQ0FBQyxDQUFDMmdGLEtBQUssRUFBRTtVQUNsQjBRLE9BQU8sRUFBRTtRQUNYOztRQUVBLEdBQUcsQ0FBQ0EsUUFBUSxFQUFFLENBQUMsRUFBRTtVQUNmLEtBQUs7UUFDUDtNQUNGOztNQUVBLEdBQUcsQ0FBQ0EsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUN0NkUsSUFBSSxDQUFDMGUsSUFBSSxFQUFFO1FBQzlCMWUsSUFBSSxDQUFDdzVFLE9BQU8sQ0FBQ3YzRCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMvVCxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1VBQ3ZEbE8sSUFBSSxDQUFDdUwsTUFBTSxDQUFDLENBQUM7UUFDZixDQUFDLENBQUM7O1FBRUZ2TCxJQUFJLENBQUMrcEUsU0FBUyxFQUFFLElBQUk7TUFDdEIsRUFBRSxLQUFLO1FBQ0wvcEUsSUFBSSxDQUFDdzVFLE9BQU8sQ0FBQ2x1RSxJQUFJLENBQUMsQ0FBQztNQUNyQjtJQUNGLENBQUM7O0lBRURpckIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ2xCLElBQUl2MkIsS0FBSyxFQUFFLElBQUk7UUFDYjBvRCxTQUFTLEVBQUUxb0QsSUFBSSxDQUFDMG9ELFFBQVE7UUFDeEJ5YixTQUFTLEVBQUVua0UsSUFBSSxDQUFDMGUsSUFBSSxDQUFDeWxELFFBQVE7UUFDN0I3ekUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNUNUgsR0FBRzs7TUFFTCxHQUFHLENBQUMsQ0FBQ3NYLElBQUksQ0FBQzQ2RSxLQUFLLEVBQUU7O1FBRWY1NkUsSUFBSSxDQUFDNDZFLE1BQU0sRUFBRXBxRCxDQUFDLENBQUMsZUFBZSxFQUFFaXFELE1BQU0sRUFBRSxJQUFJLEVBQUVBLE1BQU0sRUFBRSxJQUFJLEVBQUV6NkUsSUFBSSxDQUFDMGUsSUFBSSxDQUFDaTRCLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQ2pnQyxRQUFRO1VBQy9GZ3lDLFFBQVEsQ0FBQ3dnQixLQUFLLENBQUM1eEQ7VUFDZixDQUFDemdCLElBQUksQ0FBQ3N0RSxRQUFRO1VBQ2QsQ0FBQ2xqRSxPQUFPLENBQUM7VUFDVCxDQUFDdEssTUFBTSxDQUFDd3RFLFFBQVE7UUFDbEIsQ0FBQzs7O1FBR0Rua0UsSUFBSSxDQUFDNDZFLEtBQUssQ0FBQzFzRSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtVQUN0Q3c2QyxRQUFRLENBQUMwZ0IsTUFBTSxDQUFDNTRDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3A0QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO01BQ0o7OztNQUdBLEdBQUcsQ0FBQyxDQUFDNEgsSUFBSSxDQUFDNjZFLEtBQUssRUFBRTtRQUNmNzZFLElBQUksQ0FBQzY2RSxNQUFNLEVBQUVycUQsQ0FBQyxDQUFDLGVBQWUsRUFBRWlxRCxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMvakUsUUFBUSxDQUFDMVcsSUFBSSxDQUFDNDZFLEtBQUssQ0FBQztNQUMxRTs7TUFFQXBxRCxDQUFDLENBQUN4bEMsSUFBSSxDQUFDMDlELFFBQVEsQ0FBQzZMLEtBQUssRUFBRSxTQUFTLENBQUN0ckUsQ0FBQyxFQUFFeTlDLElBQUksRUFBRTtRQUN4Q2grQyxJQUFJLEVBQUVnK0MsSUFBSSxDQUFDa2pDLEtBQUs7O1FBRWhCLEdBQUcsQ0FBQyxDQUFDbGhGLElBQUksR0FBR2crQyxJQUFJLENBQUNqK0MsS0FBSyxJQUFJLE9BQU8sRUFBRTtVQUNqQ0MsSUFBSSxFQUFFZytDLElBQUksQ0FBQ2grQyxHQUFHO1FBQ2hCOztRQUVBNEgsSUFBSSxDQUFDNUksSUFBSTtVQUNQLG1EQUFtRDtVQUNuRHVCLEVBQUU7VUFDRixJQUFJO1VBQ0osQ0FBQ1AsSUFBSSxHQUFHQSxHQUFHLENBQUM2QixPQUFPLEVBQUUsZ0NBQWdDLEVBQUU3QixJQUFJLEVBQUUsS0FBSyxFQUFFLGlDQUFpQyxFQUFFO1VBQ3ZHO1FBQ0YsQ0FBQztNQUNILENBQUMsQ0FBQzs7TUFFRnNYLElBQUksQ0FBQzY2RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM1akYsVUFBVSxFQUFFM0csSUFBSSxDQUFDMkQsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7TUFFdkMsR0FBRyxDQUFDK0wsSUFBSSxDQUFDMGUsSUFBSSxDQUFDaTRCLEtBQUssSUFBSSxHQUFHLEVBQUU7O1FBRTFCMzJDLElBQUksQ0FBQzY2RSxLQUFLLENBQUM3aUUsS0FBSztVQUNkNkssUUFBUSxDQUFDN2lCLElBQUksQ0FBQzQ2RSxLQUFLLENBQUMxd0UsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtVQUM5Q3crQyxRQUFRLENBQUM2TCxLQUFLLENBQUNocUUsT0FBTztVQUN0QnlWLElBQUksQ0FBQzY2RTtVQUNMLENBQUN0NkUsUUFBUSxDQUFDO1VBQ1YsQ0FBQ2hWLEVBQUUsQ0FBQyxDQUFDO1VBQ0wsQ0FBQ2d0QyxVQUFVLENBQUMsSUFBSTtRQUNsQixDQUFDO01BQ0g7SUFDRixDQUFDOztJQUVEemtCLEtBQUssRUFBRSxTQUFTLENBQUMrSSxRQUFRLEVBQUU7TUFDekIsSUFBSTdjLEtBQUssRUFBRSxJQUFJO1FBQ2I2NkUsTUFBTSxFQUFFNzZFLElBQUksQ0FBQzY2RSxLQUFLO1FBQ2xCRCxNQUFNLEVBQUU1NkUsSUFBSSxDQUFDNDZFLEtBQUs7UUFDbEJoUixLQUFLO1FBQ0wyRyxRQUFROztNQUVWLEdBQUcsQ0FBQyxDQUFDdndFLElBQUksQ0FBQzBvRCxRQUFRLENBQUMxZ0MsT0FBTyxFQUFFO1FBQzFCLE1BQU07TUFDUjs7TUFFQTRoRCxNQUFNLEVBQUVpUjtRQUNOLENBQUN0NkUsUUFBUSxDQUFDO1FBQ1YsQ0FBQytpQixXQUFXLENBQUNvM0QsWUFBWTtRQUN6QixDQUFDL2pGLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRXFKLElBQUksQ0FBQzBvRCxRQUFRLENBQUMxZ0MsT0FBTyxDQUFDbG5CLE1BQU0sRUFBRSxJQUFJO1FBQzVELENBQUNtaUIsUUFBUSxDQUFDeTNELFlBQVksQ0FBQzs7TUFFekJuSyxTQUFTLEVBQUUzRyxLQUFLLENBQUMzeEQsUUFBUSxDQUFDLENBQUM7OztNQUczQixHQUFHLENBQUNqWSxJQUFJLENBQUMwZSxJQUFJLENBQUNpNEIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDNDVCLFFBQVEsQ0FBQ242RSxJQUFJLEVBQUUsRUFBRSxHQUFHbTZFLFFBQVEsQ0FBQ242RSxJQUFJLEVBQUV5a0YsS0FBSyxDQUFDejhELE1BQU0sQ0FBQyxFQUFFLEVBQUV3ckQsS0FBSyxDQUFDcHhDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN2R3FpRCxLQUFLLENBQUMxeEUsSUFBSSxDQUFDLENBQUMsQ0FBQ3VYLE9BQU8sQ0FBQztZQUNqQnpELFNBQVMsRUFBRTQ5RCxLQUFLLENBQUM1OUQsU0FBUyxDQUFDLEVBQUUsRUFBRXN6RCxRQUFRLENBQUNuNkU7VUFDMUMsQ0FBQztVQUNEeW1CO1FBQ0YsQ0FBQztNQUNILEVBQUUsS0FBSyxHQUFHO1FBQ1I3YyxJQUFJLENBQUMwZSxJQUFJLENBQUNpNEIsS0FBSyxJQUFJLElBQUk7UUFDdkIsQ0FBQzQ1QixRQUFRLENBQUN6MEQsS0FBSyxFQUFFOCtELEtBQUssQ0FBQzE5RCxVQUFVLENBQUMsRUFBRSxHQUFHcXpELFFBQVEsQ0FBQ3owRCxLQUFLLEVBQUU4K0QsS0FBSyxDQUFDMTlELFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzA5RCxLQUFLLENBQUM1aUUsS0FBSyxDQUFDLEVBQUUsRUFBRTR4RCxLQUFLLENBQUNyeEMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNsSCxFQUFFO1FBQ0FzaUQ7VUFDRSxDQUFDMWdGLE1BQU0sQ0FBQztVQUNSLENBQUNnUCxJQUFJLENBQUM7VUFDTixDQUFDdVgsT0FBTyxDQUFDO2NBQ0x4RCxVQUFVLEVBQUVxekQsUUFBUSxDQUFDejBEO1lBQ3ZCLENBQUM7WUFDRGU7VUFDRixDQUFDO01BQ0w7SUFDRixDQUFDOztJQUVEMHJDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtNQUNsQixJQUFJMWpELEtBQUssRUFBRSxJQUFJO01BQ2ZBLElBQUksQ0FBQzZqRCxRQUFRLENBQUN3Z0IsS0FBSyxDQUFDNXhELFNBQVMsQ0FBQ2lNLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMydEQsU0FBUyxDQUFDOztNQUVqRixHQUFHLENBQUNyc0UsSUFBSSxDQUFDcXNFLFNBQVMsRUFBRTtRQUNsQixHQUFHLENBQUMsQ0FBQ3JzRSxJQUFJLENBQUMrMUUsS0FBSyxFQUFFO1VBQ2YvMUUsSUFBSSxDQUFDMHhCLE1BQU0sQ0FBQyxDQUFDO1FBQ2Y7O1FBRUExeEIsSUFBSSxDQUFDNmpELFFBQVEsQ0FBQ3IzQyxPQUFPLENBQUMsY0FBYyxDQUFDOztRQUVyQ3hNLElBQUksQ0FBQ2lQLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDZixFQUFFLEtBQUssR0FBRyxDQUFDalAsSUFBSSxDQUFDKzFFLEtBQUssRUFBRTtRQUNyQi8xRSxJQUFJLENBQUM2akQsUUFBUSxDQUFDcjNDLE9BQU8sQ0FBQyxjQUFjLENBQUM7TUFDdkM7OztNQUdBeE0sSUFBSSxDQUFDNmpELFFBQVEsQ0FBQ0gsTUFBTSxDQUFDLENBQUM7SUFDeEIsQ0FBQzs7SUFFRGo5QyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7TUFDaEIsSUFBSSxDQUFDNGxFLFVBQVUsRUFBRSxLQUFLO01BQ3RCLElBQUksQ0FBQzNvQixNQUFNLENBQUMsQ0FBQztJQUNmLENBQUM7O0lBRURuOUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ2hCLElBQUksQ0FBQzhsRSxVQUFVLEVBQUUsSUFBSTtNQUNyQixJQUFJLENBQUMzb0IsTUFBTSxDQUFDLENBQUM7SUFDZixDQUFDOztJQUVEaDlDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtNQUNsQixJQUFJLENBQUMybEUsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDQSxTQUFTO01BQ2hDLElBQUksQ0FBQzNvQixNQUFNLENBQUMsQ0FBQztJQUNmO0VBQ0YsQ0FBQyxDQUFDOztFQUVGLzNCLENBQUMsQ0FBQ3pwQyxRQUFRLENBQUMsQ0FBQ21uQixFQUFFLENBQUM7SUFDYixXQUFXLEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTtNQUNsQyxJQUFJb2hCLE1BQU07O01BRVYsR0FBRyxDQUFDcGhCLFNBQVMsR0FBRyxDQUFDQSxRQUFRLENBQUNvaEIsTUFBTSxFQUFFO1FBQ2hDQSxPQUFPLEVBQUUsSUFBSTZRLFdBQVcsQ0FBQ2p5QixRQUFRLENBQUM7O1FBRWxDLEdBQUcsQ0FBQ29oQixNQUFNLENBQUNDLFNBQVMsR0FBR0QsTUFBTSxDQUFDcHJELElBQUksQ0FBQ3lrRCxVQUFVLElBQUksSUFBSSxFQUFFO1VBQ3JEMkcsTUFBTSxDQUFDMStELElBQUksQ0FBQyxDQUFDO1FBQ2Y7TUFDRjtJQUNGLENBQUM7O0lBRUQsZUFBZSxFQUFFLFNBQVMsQ0FBQ3JZLENBQUMsRUFBRTIxRCxRQUFRLEVBQUVoaUIsSUFBSSxFQUFFK2hDLFFBQVEsRUFBRTtNQUN0RCxJQUFJcUIsT0FBTyxFQUFFcGhCLFNBQVMsR0FBR0EsUUFBUSxDQUFDb2hCLE1BQU07O01BRXhDLEdBQUcsQ0FBQ0EsT0FBTyxHQUFHQSxNQUFNLENBQUNvSCxTQUFTLEVBQUU7UUFDOUJwSCxNQUFNLENBQUNoMkQsS0FBSyxDQUFDMjBELFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO01BQ2xDO0lBQ0YsQ0FBQzs7SUFFRCxpQkFBaUIsRUFBRSxTQUFTLENBQUMxMUUsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTFnQyxPQUFPLEVBQUU2ZixRQUFRLEVBQUV3aUMsT0FBTyxFQUFFO01BQ3BFLElBQUlQLE9BQU8sRUFBRXBoQixTQUFTLEdBQUdBLFFBQVEsQ0FBQ29oQixNQUFNOzs7TUFHeEMsR0FBRyxDQUFDQSxPQUFPLEdBQUdBLE1BQU0sQ0FBQ0MsU0FBUyxHQUFHTSxRQUFRLElBQUksRUFBRSxFQUFFO1FBQy9DeGlDLFFBQVEsQ0FBQ3gzQixjQUFjLENBQUMsQ0FBQzs7UUFFekJ5NUQsTUFBTSxDQUFDditELE1BQU0sQ0FBQyxDQUFDO01BQ2pCO0lBQ0YsQ0FBQzs7SUFFRCxnQkFBZ0IsRUFBRSxTQUFTLENBQUN4WSxDQUFDLEVBQUUyMUQsUUFBUSxFQUFFO01BQ3ZDLElBQUlvaEIsT0FBTyxFQUFFcGhCLFNBQVMsR0FBR0EsUUFBUSxDQUFDb2hCLE1BQU07O01BRXhDLEdBQUcsQ0FBQ0EsT0FBTyxHQUFHQSxNQUFNLENBQUNvSCxVQUFVLEdBQUdwSCxNQUFNLENBQUNwckQsSUFBSSxDQUFDbW1ELFlBQVksSUFBSSxLQUFLLEVBQUU7UUFDbkVpRixNQUFNLENBQUM4USxLQUFLLENBQUN0dkUsSUFBSSxDQUFDLENBQUM7TUFDckI7SUFDRjtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDdmtCLFFBQVEsRUFBRStDLE1BQU0sQ0FBQzs7Ozs7OztBQU9wQixDQUFDLFNBQVMsQ0FBQy9DLFFBQVEsRUFBRXlwQyxDQUFDLEVBQUU7RUFDdEIsWUFBWTs7RUFFWkEsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxJQUFJLEVBQUUwa0MsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQzlRLFFBQVEsRUFBRTtJQUNsQzJTLE1BQU0sRUFBRTtNQUNOK1csS0FBSyxFQUFFLGdHQUFnRztRQUNyRyw2SkFBNko7UUFDN0o7SUFDSixDQUFDO0lBQ0RBLEtBQUssRUFBRTtNQUNMdHlELEdBQUcsRUFBRSxTQUFTLENBQUNrZ0MsUUFBUSxFQUFFaGlCLElBQUksRUFBRTtRQUM3QixPQUFPO1VBQ0wsQ0FBQyxDQUFDZ2lCLFFBQVEsQ0FBQ3F5QixZQUFZLEdBQUcsQ0FBQyxDQUFDcjBDLElBQUksQ0FBQ2orQyxLQUFLLElBQUksU0FBUyxHQUFHaStDLElBQUksQ0FBQ2orQyxLQUFLLElBQUksTUFBTSxFQUFFLEVBQUVpK0MsSUFBSSxDQUFDZ3RDLFFBQVEsR0FBR2h0QyxJQUFJLENBQUNoK0MsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHeEIsTUFBTSxDQUFDK1Q7UUFDNUgsQ0FBQztNQUNILENBQUM7TUFDRCtuRSxHQUFHLEVBQUUsK0JBQStCO1FBQ2xDLHFCQUFxQjtRQUNyQixNQUFNO1FBQ04sNEhBQTRIO1FBQzVILGdMQUFnTDtRQUNoTCx3QkFBd0I7UUFDeEIsT0FBTztRQUNQLG1JQUFtSTtRQUNuSSx5VUFBeVU7UUFDelUsdUJBQXVCO1FBQ3ZCLE9BQU87UUFDUCxzS0FBc0s7UUFDdEssNmJBQTZiO1FBQzdiLHlCQUF5QjtRQUN6QixPQUFPO1FBQ1AsT0FBTztRQUNQLG9HQUFvRztRQUNwRztJQUNKO0VBQ0YsQ0FBQyxDQUFDOztFQUVGLFNBQVNnWSxVQUFVLENBQUN2ekUsTUFBTSxFQUFFO0lBQzFCLElBQUl3ekUsVUFBVSxFQUFFO01BQ2QsR0FBRyxFQUFFLE9BQU87TUFDWixHQUFHLEVBQUUsTUFBTTtNQUNYLEdBQUcsRUFBRSxNQUFNO01BQ1gsR0FBRyxFQUFFLFFBQVE7TUFDYixHQUFHLEVBQUUsT0FBTztNQUNaLEdBQUcsRUFBRSxRQUFRO01BQ2IsR0FBRyxFQUFFLFFBQVE7TUFDYixHQUFHLEVBQUU7SUFDUCxDQUFDOztJQUVELE9BQU9qcEYsTUFBTSxDQUFDeVYsTUFBTSxDQUFDLENBQUM1YSxPQUFPLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQ3k0QixDQUFDLEVBQUU7TUFDekQsT0FBTzIxRCxTQUFTLENBQUMzMUQsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztFQUNKOztFQUVBa0wsQ0FBQyxDQUFDenBDLFFBQVEsQ0FBQyxDQUFDbW5CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDM0QsSUFBSXc2QyxTQUFTLEVBQUVsNEIsQ0FBQyxDQUFDMHhDLFFBQVEsQ0FBQzhHLFdBQVcsQ0FBQyxDQUFDO01BQ3JDaGhELFFBQVEsRUFBRTBnQyxRQUFRLENBQUMxZ0MsUUFBUSxHQUFHLElBQUk7TUFDbENRLEdBQUc7TUFDSHc2QyxHQUFHOztJQUVMLEdBQUcsQ0FBQyxDQUFDaDdDLE9BQU8sRUFBRTtNQUNaLE1BQU07SUFDUjs7SUFFQSxHQUFHLENBQUN3SSxDQUFDLENBQUMvbkMsSUFBSSxDQUFDdS9CLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ284RCxLQUFLLENBQUN0eUQsR0FBRyxFQUFFLElBQUksVUFBVSxFQUFFO01BQ2pEQSxJQUFJLEVBQUVSLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ284RCxLQUFLLENBQUN0eUQsR0FBRyxDQUFDcDlCLEtBQUssQ0FBQzQ4QixPQUFPLEVBQUUsQ0FBQzBnQyxRQUFRLEVBQUUxZ0MsT0FBTyxDQUFDLENBQUM7SUFDbEU7O0lBRUFnN0MsSUFBSSxFQUFFaDdDLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ284RCxLQUFLLENBQUM5WDtNQUN2QixDQUFDbjJFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRW03QixPQUFPLENBQUN2L0IsS0FBSyxJQUFJLFFBQVEsRUFBRSs4QixrQkFBa0IsQ0FBQ3dDLE9BQU8sQ0FBQ3QvQixHQUFHLEVBQUUsRUFBRSxFQUFFO01BQzFGLENBQUNtRSxPQUFPLENBQUMsY0FBYyxFQUFFMjRCLGtCQUFrQixDQUFDZ0QsR0FBRyxDQUFDO01BQ2hELENBQUMzN0IsT0FBTyxDQUFDLGtCQUFrQixFQUFFbXVGLFVBQVUsQ0FBQ3h5RCxHQUFHLENBQUM7TUFDNUMsQ0FBQzM3QixPQUFPLENBQUMsZ0JBQWdCLEVBQUU2N0QsUUFBUSxDQUFDcW5CLFNBQVMsRUFBRXZxRCxrQkFBa0IsQ0FBQ2tqQyxRQUFRLENBQUNxbkIsUUFBUSxDQUFDMW1GLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7O0lBRW5HbW5DLENBQUMsQ0FBQzB4QyxRQUFRLENBQUM5MUMsSUFBSSxDQUFDO01BQ2QxakMsR0FBRyxFQUFFZ2dFLFFBQVEsQ0FBQ3VnQixTQUFTLENBQUN2Z0IsUUFBUSxFQUFFc2EsR0FBRyxDQUFDO01BQ3RDdjZFLElBQUksRUFBRSxNQUFNO01BQ1ppMkIsSUFBSSxFQUFFO1FBQ0o4bEQsS0FBSyxFQUFFLEtBQUs7UUFDWm5CLGVBQWUsRUFBRSxLQUFLO1FBQ3RCMkIsU0FBUyxFQUFFLFNBQVMsQ0FBQ2tXLGFBQWEsRUFBRUMsWUFBWSxFQUFFOztVQUVoRHp5QixRQUFRLENBQUN3Z0IsS0FBSyxDQUFDNXhELFNBQVMsQ0FBQ2xKLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUN6RDhzRSxhQUFhLENBQUNoMEMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7VUFDOUIsQ0FBQyxDQUFDOzs7VUFHRmkwQyxZQUFZLENBQUNwUCxRQUFRLENBQUNsMUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUNzYSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEVqcUIsTUFBTSxDQUFDa2xDLElBQUksQ0FBQyxJQUFJLENBQUNoeEIsSUFBSSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQztZQUN4RCxPQUFPLEtBQUs7VUFDZCxDQUFDLENBQUM7UUFDSixDQUFDO1FBQ0R1cUUsTUFBTSxFQUFFO1VBQ041K0IsU0FBUyxFQUFFO1FBQ2I7TUFDRjtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDaGdELFFBQVEsRUFBRStDLE1BQU0sQ0FBQzs7Ozs7OztBQU9wQixDQUFDLFNBQVMsQ0FBQzVDLE1BQU0sRUFBRUgsUUFBUSxFQUFFeXBDLENBQUMsRUFBRTtFQUM5QixZQUFZOzs7RUFHWixHQUFHLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDcHhCLGNBQWMsRUFBRTtJQUNyQm94QixDQUFDLENBQUNweEIsZUFBZSxFQUFFLFNBQVMsQ0FBQzdHLEdBQUcsRUFBRTtNQUNoQyxJQUFJckcsV0FBVyxFQUFFLDhDQUE4QztNQUMvRCxJQUFJQyxXQUFXLEVBQUUsU0FBUyxDQUFDQyxFQUFFLEVBQUVDLFdBQVcsRUFBRTtRQUMxQyxHQUFHLENBQUNBLFdBQVcsRUFBRTs7VUFFZixHQUFHLENBQUNELEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDZixPQUFPLFFBQVE7VUFDakI7OztVQUdBLE9BQU9BLEVBQUUsQ0FBQzVLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUU0SyxFQUFFLENBQUNFLFVBQVUsQ0FBQ0YsRUFBRSxDQUFDN0gsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDMUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUc7UUFDakY7OztRQUdBLE9BQU8sS0FBSyxFQUFFdUssRUFBRTtNQUNsQixDQUFDOztNQUVELE9BQU8sQ0FBQ21HLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzFMLE9BQU8sQ0FBQ3FGLFVBQVUsRUFBRUMsVUFBVSxDQUFDO0lBQ25ELENBQUM7RUFDSDs7O0VBR0EsU0FBU2lwRixRQUFRLENBQUMsRUFBRTtJQUNsQixJQUFJcGdGLEtBQUssRUFBRTlULE1BQU0sQ0FBQytULFFBQVEsQ0FBQ0QsSUFBSSxDQUFDbTJDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDdkM0MkIsSUFBSSxFQUFFL3NFLElBQUksQ0FBQzFNLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDckJ3UyxNQUFNLEVBQUVpbkUsR0FBRyxDQUFDeDlFLE9BQU8sRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDd0osSUFBSSxDQUFDZzBFLEdBQUcsQ0FBQ0EsR0FBRyxDQUFDeDlFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFczRCLFFBQVEsQ0FBQ2tsRCxHQUFHLENBQUMzM0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7TUFDbkdpckYsUUFBUSxFQUFFdFQsR0FBRyxDQUFDOXpFLElBQUksQ0FBQyxHQUFHLENBQUM7O0lBRXpCLE9BQU87TUFDTCtHLElBQUksRUFBRUEsSUFBSTs7TUFFVjhGLEtBQUssRUFBRUEsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUVBLEtBQUs7TUFDNUJ1NkUsT0FBTyxFQUFFQTtJQUNYLENBQUM7RUFDSDs7O0VBR0EsU0FBU0MsY0FBYyxDQUFDOXlELEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUNBLEdBQUcsQ0FBQzZ5RCxRQUFRLElBQUksRUFBRSxFQUFFOzs7TUFHdEI3cUQsQ0FBQyxDQUFDLG1CQUFtQixFQUFFQSxDQUFDLENBQUNweEIsY0FBYyxDQUFDb3BCLEdBQUcsQ0FBQzZ5RCxPQUFPLEVBQUUsRUFBRSxJQUFJO1FBQ3pELENBQUM5dkYsRUFBRSxDQUFDaTlCLEdBQUcsQ0FBQzFuQixNQUFNLEVBQUUsQ0FBQztRQUNqQixDQUFDZ1QsS0FBSyxDQUFDO1FBQ1AsQ0FBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUM5QjtFQUNGOzs7RUFHQSxTQUFTa3FFLFlBQVksQ0FBQzd5QixRQUFRLEVBQUU7SUFDOUIsSUFBSWhxQyxJQUFJLEVBQUU3ekIsR0FBRzs7SUFFYixHQUFHLENBQUMsQ0FBQzY5RCxRQUFRLEVBQUU7TUFDYixPQUFPLEtBQUs7SUFDZDs7SUFFQWhxQyxLQUFLLEVBQUVncUMsUUFBUSxDQUFDMWdDLFFBQVEsRUFBRTBnQyxRQUFRLENBQUMxZ0MsT0FBTyxDQUFDdEosS0FBSyxFQUFFZ3FDLFFBQVEsQ0FBQ2hxQyxJQUFJO0lBQy9EN3pCLElBQUksRUFBRTZ6QixJQUFJLENBQUMxakIsS0FBSyxHQUFHLENBQUMwakIsSUFBSSxDQUFDK3FELE1BQU0sRUFBRS9xRCxJQUFJLENBQUMrcUQsS0FBSyxDQUFDeGhFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBR3lXLElBQUksQ0FBQytxRCxLQUFLLENBQUN4aEUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxDQUFDOztJQUV6RyxPQUFPcGQsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUVBLEdBQUc7RUFDakM7OztFQUdBMmxDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRTs7SUFFWixHQUFHLENBQUNBLENBQUMsQ0FBQzB4QyxRQUFRLENBQUM5USxRQUFRLENBQUNwMkQsS0FBSyxJQUFJLEtBQUssRUFBRTtNQUN0QyxNQUFNO0lBQ1I7OztJQUdBdzFCLENBQUMsQ0FBQ3pwQyxRQUFRLENBQUMsQ0FBQ21uQixFQUFFLENBQUM7TUFDYixXQUFXLEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTtRQUNsQyxJQUFJbGdDLEdBQUcsRUFBRTZ5RCxPQUFPOztRQUVoQixHQUFHLENBQUMzeUIsUUFBUSxDQUFDNkwsS0FBSyxDQUFDN0wsUUFBUSxDQUFDMmYsU0FBUyxDQUFDLENBQUMzcEQsSUFBSSxDQUFDMWpCLEtBQUssSUFBSSxLQUFLLEVBQUU7VUFDMUQsTUFBTTtRQUNSOztRQUVBd3RCLElBQUksRUFBRTR5RCxRQUFRLENBQUMsQ0FBQztRQUNoQkMsUUFBUSxFQUFFRSxZQUFZLENBQUM3eUIsUUFBUSxDQUFDOzs7UUFHaEMsR0FBRyxDQUFDMnlCLFFBQVEsR0FBRzd5RCxHQUFHLENBQUM2eUQsUUFBUSxHQUFHQSxRQUFRLEdBQUc3eUQsR0FBRyxDQUFDNnlELE9BQU8sRUFBRTtVQUNwRDN5QixRQUFRLENBQUMyZixVQUFVLEVBQUU3L0MsR0FBRyxDQUFDMW5CLE1BQU0sRUFBRSxDQUFDO1FBQ3BDO01BQ0YsQ0FBQzs7TUFFRCxlQUFlLEVBQUUsU0FBUyxDQUFDL04sQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTFnQyxPQUFPLEVBQUV5Z0QsUUFBUSxFQUFFO1FBQ3pELElBQUk0UyxPQUFPOztRQUVYLEdBQUcsQ0FBQyxDQUFDcnpELFFBQVEsR0FBR0EsT0FBTyxDQUFDdEosSUFBSSxDQUFDMWpCLEtBQUssSUFBSSxLQUFLLEVBQUU7VUFDM0MsTUFBTTtRQUNSOzs7UUFHQXFnRixRQUFRLEVBQUVFLFlBQVksQ0FBQzd5QixRQUFRLENBQUM7O1FBRWhDLEdBQUcsQ0FBQyxDQUFDMnlCLE9BQU8sRUFBRTtVQUNaLE1BQU07UUFDUjs7OztRQUlBM3lCLFFBQVEsQ0FBQ3F5QixZQUFZLEVBQUVNLFFBQVEsRUFBRSxDQUFDM3lCLFFBQVEsQ0FBQzZMLEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDeTlCLE9BQU8sQ0FBQ2xuQixNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDOzs7UUFHN0YsR0FBRyxDQUFDNVosTUFBTSxDQUFDK1QsUUFBUSxDQUFDRCxLQUFLLElBQUksSUFBSSxFQUFFMHRELFFBQVEsQ0FBQ3F5QixXQUFXLEVBQUU7VUFDdkQsTUFBTTtRQUNSOztRQUVBLEdBQUcsQ0FBQ3RTLFNBQVMsR0FBRyxDQUFDL2YsUUFBUSxDQUFDOHlCLFFBQVEsRUFBRTtVQUNsQzl5QixRQUFRLENBQUM4eUIsU0FBUyxFQUFFdDBGLE1BQU0sQ0FBQytULFFBQVEsQ0FBQ0QsSUFBSTtRQUMxQzs7UUFFQSxHQUFHLENBQUMwdEQsUUFBUSxDQUFDK3lCLFNBQVMsRUFBRTtVQUN0Qjc1RCxZQUFZLENBQUM4bUMsUUFBUSxDQUFDK3lCLFNBQVMsQ0FBQztRQUNsQzs7O1FBR0EveUIsUUFBUSxDQUFDK3lCLFVBQVUsRUFBRWwyRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDMUMsR0FBRyxDQUFDLGVBQWUsR0FBR3JlLE1BQU0sQ0FBQ3cwRixPQUFPLEVBQUU7WUFDcEN4MEYsTUFBTSxDQUFDdzBGLE9BQU8sQ0FBQ2pULFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3hEMWhGLFFBQVEsQ0FBQzJrRCxLQUFLO2NBQ2R4a0QsTUFBTSxDQUFDK1QsUUFBUSxDQUFDMGdGLFNBQVMsRUFBRXowRixNQUFNLENBQUMrVCxRQUFRLENBQUNrc0MsT0FBTyxFQUFFLElBQUksRUFBRXVoQixRQUFRLENBQUNxeUI7WUFDckUsQ0FBQzs7WUFFRCxHQUFHLENBQUN0UyxRQUFRLEVBQUU7Y0FDWi9mLFFBQVEsQ0FBQ2t6QixrQkFBa0IsRUFBRSxJQUFJO1lBQ25DO1VBQ0YsRUFBRSxLQUFLO1lBQ0wxMEYsTUFBTSxDQUFDK1QsUUFBUSxDQUFDRCxLQUFLLEVBQUUwdEQsUUFBUSxDQUFDcXlCLFdBQVc7VUFDN0M7O1VBRUFyeUIsUUFBUSxDQUFDK3lCLFVBQVUsRUFBRSxJQUFJO1FBQzNCLENBQUMsRUFBRSxHQUFHLENBQUM7TUFDVCxDQUFDOztNQUVELGdCQUFnQixFQUFFLFNBQVMsQ0FBQzFvRixDQUFDLEVBQUUyMUQsUUFBUSxFQUFFMWdDLE9BQU8sRUFBRTtRQUNoRCxHQUFHLENBQUMsQ0FBQ0EsUUFBUSxHQUFHQSxPQUFPLENBQUN0SixJQUFJLENBQUMxakIsS0FBSyxJQUFJLEtBQUssRUFBRTtVQUMzQyxNQUFNO1FBQ1I7O1FBRUE0bUIsWUFBWSxDQUFDOG1DLFFBQVEsQ0FBQyt5QixTQUFTLENBQUM7OztRQUdoQyxHQUFHLENBQUMveUIsUUFBUSxDQUFDcXlCLFlBQVksR0FBR3J5QixRQUFRLENBQUNrekIsaUJBQWlCLEVBQUU7VUFDdEQxMEYsTUFBTSxDQUFDdzBGLE9BQU8sQ0FBQ0csSUFBSSxDQUFDLENBQUM7UUFDdkIsRUFBRSxLQUFLLEdBQUcsQ0FBQ256QixRQUFRLENBQUNxeUIsV0FBVyxFQUFFO1VBQy9CLEdBQUcsQ0FBQyxlQUFlLEdBQUc3ekYsTUFBTSxDQUFDdzBGLE9BQU8sRUFBRTtZQUNwQ3gwRixNQUFNLENBQUN3MEYsT0FBTyxDQUFDSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUvMEYsUUFBUSxDQUFDMmtELEtBQUssRUFBRXhrRCxNQUFNLENBQUMrVCxRQUFRLENBQUMwZ0YsU0FBUyxFQUFFejBGLE1BQU0sQ0FBQytULFFBQVEsQ0FBQ2tzQyxPQUFPLEVBQUUsQ0FBQ3VoQixRQUFRLENBQUM4eUIsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1VBQ2hJLEVBQUUsS0FBSztZQUNMdDBGLE1BQU0sQ0FBQytULFFBQVEsQ0FBQ0QsS0FBSyxFQUFFMHRELFFBQVEsQ0FBQzh5QixRQUFRO1VBQzFDO1FBQ0Y7O1FBRUE5eUIsUUFBUSxDQUFDcXlCLFlBQVksRUFBRSxJQUFJO01BQzdCO0lBQ0YsQ0FBQyxDQUFDOzs7SUFHRnZxRCxDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUNnbkIsRUFBRSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsRUFBRTtNQUN4QyxJQUFJc2EsSUFBSSxFQUFFNHlELFFBQVEsQ0FBQyxDQUFDO1FBQ2xCVyxHQUFHLEVBQUUsSUFBSTs7O01BR1h2ckQsQ0FBQyxDQUFDeGxDLElBQUk7UUFDSndsQyxDQUFDLENBQUMscUJBQXFCO1FBQ3ZCLENBQUMvbEMsR0FBRyxDQUFDO1FBQ0wsQ0FBQ2lYLE9BQU8sQ0FBQyxDQUFDO1FBQ1YsU0FBUyxDQUFDWixLQUFLLEVBQUU1UyxLQUFLLEVBQUU7VUFDdEIsSUFBSThJLElBQUksRUFBRXc1QixDQUFDLENBQUN0aUMsS0FBSyxDQUFDLENBQUMrWixJQUFJLENBQUMsVUFBVSxDQUFDOztVQUVuQyxHQUFHLENBQUNqUixJQUFJLEdBQUdBLEdBQUcsQ0FBQytqRixXQUFXLEVBQUU7WUFDMUJnQixHQUFHLEVBQUUva0YsR0FBRztZQUNSLE9BQU8sS0FBSztVQUNkO1FBQ0Y7TUFDRixDQUFDOztNQUVELEdBQUcsQ0FBQytrRixFQUFFLEVBQUU7O1FBRU4sR0FBRyxDQUFDQSxFQUFFLENBQUNoQixZQUFZLElBQUl2eUQsR0FBRyxDQUFDNnlELFFBQVEsRUFBRSxJQUFJLEVBQUU3eUQsR0FBRyxDQUFDMW5CLE1BQU0sR0FBRyxDQUFDLENBQUMwbkIsR0FBRyxDQUFDMW5CLE1BQU0sSUFBSSxFQUFFLEdBQUdpN0UsRUFBRSxDQUFDaEIsWUFBWSxHQUFHdnlELEdBQUcsQ0FBQzZ5RCxPQUFPLENBQUMsRUFBRTtVQUMzR1UsRUFBRSxDQUFDaEIsWUFBWSxFQUFFLElBQUk7O1VBRXJCZ0IsRUFBRSxDQUFDNzBDLEtBQUssQ0FBQyxDQUFDO1FBQ1o7TUFDRixFQUFFLEtBQUssR0FBRyxDQUFDMWUsR0FBRyxDQUFDNnlELFFBQVEsSUFBSSxFQUFFLEVBQUU7UUFDN0JDLGNBQWMsQ0FBQzl5RCxHQUFHLENBQUM7TUFDckI7SUFDRixDQUFDLENBQUM7OztJQUdGampCLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUNyQixHQUFHLENBQUMsQ0FBQ2lyQixDQUFDLENBQUMweEMsUUFBUSxDQUFDOEcsV0FBVyxDQUFDLENBQUMsRUFBRTtRQUM3QnNTLGNBQWMsQ0FBQ0YsUUFBUSxDQUFDLENBQUMsQ0FBQztNQUM1QjtJQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDUixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQ2wwRixNQUFNLEVBQUVILFFBQVEsRUFBRStDLE1BQU0sQ0FBQzs7Ozs7OztBQU81QixDQUFDLFNBQVMsQ0FBQy9DLFFBQVEsRUFBRXlwQyxDQUFDLEVBQUU7RUFDdEIsWUFBWTs7RUFFWixJQUFJd3JELFNBQVMsRUFBRSxJQUFJeHNGLElBQUksQ0FBQyxDQUFDLENBQUMwaEQsT0FBTyxDQUFDLENBQUM7O0VBRW5DMWdCLENBQUMsQ0FBQ3pwQyxRQUFRLENBQUMsQ0FBQ21uQixFQUFFLENBQUM7SUFDYixXQUFXLEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFMjFELFFBQVEsRUFBRTFnQyxPQUFPLEVBQUU7TUFDM0MwZ0MsUUFBUSxDQUFDd2dCLEtBQUssQ0FBQ2tCLEtBQUssQ0FBQ2w4RCxFQUFFLENBQUMscURBQXFELEVBQUUsU0FBUyxDQUFDbmIsQ0FBQyxFQUFFO1FBQzFGLElBQUlpMUIsUUFBUSxFQUFFMGdDLFFBQVEsQ0FBQzFnQyxPQUFPO1VBQzVCaTBELFNBQVMsRUFBRSxJQUFJenNGLElBQUksQ0FBQyxDQUFDLENBQUMwaEQsT0FBTyxDQUFDLENBQUM7O1FBRWpDLEdBQUcsQ0FBQ3dYLFFBQVEsQ0FBQzZMLEtBQUssQ0FBQ2hxRSxPQUFPLEVBQUUsRUFBRSxHQUFHeTlCLE9BQU8sQ0FBQ3RKLElBQUksQ0FBQ29tRCxNQUFNLElBQUksTUFBTSxHQUFHLENBQUM5OEMsT0FBTyxDQUFDdEosSUFBSSxDQUFDb21ELE1BQU0sSUFBSSxPQUFPLEdBQUc5OEMsT0FBTyxDQUFDdi9CLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRTtVQUM1SCxNQUFNO1FBQ1I7O1FBRUFzSyxDQUFDLENBQUNzZCxjQUFjLENBQUMsQ0FBQztRQUNsQnRkLENBQUMsQ0FBQ3VkLGVBQWUsQ0FBQyxDQUFDOztRQUVuQixHQUFHLENBQUMwWCxPQUFPLENBQUNvakQsTUFBTSxDQUFDem5ELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1VBQ2hELE1BQU07UUFDUjs7UUFFQTV3QixFQUFFLEVBQUVBLENBQUMsQ0FBQ2dlLGNBQWMsR0FBR2hlLENBQUM7O1FBRXhCLEdBQUcsQ0FBQ2twRixTQUFTLEVBQUVELFNBQVMsRUFBRSxHQUFHLEVBQUU7VUFDN0IsTUFBTTtRQUNSOztRQUVBQSxTQUFTLEVBQUVDLFFBQVE7O1FBRW5CdnpCLFFBQVEsQ0FBQyxDQUFDLENBQUMzMUQsQ0FBQyxDQUFDbXBGLE9BQU8sR0FBRyxDQUFDbnBGLENBQUMsQ0FBQ29wRixPQUFPLEdBQUdwcEYsQ0FBQyxDQUFDcXBGLFdBQVcsR0FBRyxDQUFDcnBGLENBQUMsQ0FBQ3lmLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUM3RixDQUFDLENBQUM7SUFDSjtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDenJCLFFBQVEsRUFBRStDLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUNsL0twQixDQUFDLFNBQVMsQ0FBQ2xELE9BQU8sRUFBRTtJQUNoQixHQUFHLENBQUMsT0FBT3dwQyxPQUFPLElBQUksV0FBVyxHQUFHQSxNQUFNLENBQUNDLEdBQUcsRUFBRTs7UUFFNUNELE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFeHBDLE9BQU8sQ0FBQztJQUMvQixFQUFFLEtBQUs7O1FBRUhBLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQ2tELE1BQU0sRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFQSxPQUFPLEVBQUU1QyxNQUFNLENBQUNtMUYsTUFBTSxDQUFDO0lBQ3RFO0FBQ0o7O0FBRUEsQ0FBQyxRQUFRLENBQUM3ckQsQ0FBQyxFQUFFO0FBQ2IsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMENaLElBQUk4ckQsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNoQkEsT0FBTyxDQUFDQyxRQUFRLEVBQUUvckQsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMvbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDMHVFLE1BQU0sSUFBSTFzRSxTQUFTO0FBQ3RFNnZGLE9BQU8sQ0FBQ0UsU0FBUyxFQUFFdDFGLE1BQU0sQ0FBQ3UxRixTQUFTLElBQUlod0YsU0FBUzs7QUFFaEQsSUFBSWl3RixRQUFRLEVBQUUsQ0FBQyxDQUFDbHNELENBQUMsQ0FBQ3ZtQyxFQUFFLENBQUNpZSxJQUFJOzs7Ozs7QUFNekJzb0IsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQzB5RixNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDcEIsR0FBRyxFQUFFLEVBQUVELFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQ3RrRixJQUFJLENBQUNoTixLQUFLLENBQUMsSUFBSSxFQUFFQyxTQUFTLENBQUM7SUFDM0MsSUFBSW5DLElBQUksRUFBRSxJQUFJLENBQUNnZixJQUFJLENBQUM5YyxLQUFLLENBQUMsSUFBSSxFQUFFQyxTQUFTLENBQUM7SUFDMUMsR0FBRyxFQUFFLEVBQUVuQyxJQUFJLEdBQUdBLEdBQUcsQ0FBQ21CLE9BQU8sRUFBRSxHQUFHLE9BQU9uQixJQUFJLElBQUksU0FBUztRQUNsRCxPQUFPQSxHQUFHO0lBQ2QsT0FBTyxJQUFJLENBQUNrUCxJQUFJLENBQUNoTixLQUFLLENBQUMsSUFBSSxFQUFFQyxTQUFTLENBQUM7QUFDM0MsQ0FBQzs7Ozs7O0FBTURtbEMsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQzJ5RixXQUFXLEVBQUUsUUFBUSxDQUFDN3dGLE9BQU8sRUFBRTs7OztJQUloQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUN4QixNQUFNLEVBQUU7UUFDZDJyRSxHQUFHLENBQUMsMkRBQTJELENBQUM7UUFDaEUsT0FBTyxJQUFJO0lBQ2Y7O0lBRUEsSUFBSTV5RCxNQUFNLEVBQUVpMkUsTUFBTSxFQUFFL3dELEdBQUcsRUFBRXEwRCxNQUFNLEVBQUUsSUFBSTs7SUFFckMsR0FBRyxDQUFDLE9BQU85d0YsUUFBUSxHQUFHLFVBQVUsRUFBRTtRQUM5QkEsUUFBUSxFQUFFLEVBQUVrL0IsT0FBTyxFQUFFbC9CLFFBQVEsQ0FBQztJQUNsQztJQUNBLEtBQUssR0FBRyxFQUFFQSxRQUFRLElBQUlVLFVBQVUsRUFBRTtRQUM5QlYsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNoQjs7SUFFQXVYLE9BQU8sRUFBRXZYLE9BQU8sQ0FBQ3RELEtBQUssR0FBRyxJQUFJLENBQUNrMEYsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM3Q3BELE9BQU8sRUFBRXh0RixPQUFPLENBQUN5OEIsS0FBSyxHQUFHLElBQUksQ0FBQ20wRCxLQUFLLENBQUMsUUFBUSxDQUFDOztJQUU3Q24wRCxJQUFJLEVBQUUsQ0FBQyxPQUFPK3dELE9BQU8sSUFBSSxRQUFRLEVBQUUsRUFBRS9vRCxDQUFDLENBQUNqakMsSUFBSSxDQUFDZ3NGLE1BQU0sRUFBRSxFQUFFLEVBQUU7SUFDeEQvd0QsSUFBSSxFQUFFQSxJQUFJLEdBQUd0aEMsTUFBTSxDQUFDK1QsUUFBUSxDQUFDRyxLQUFLLEdBQUcsRUFBRTtJQUN2QyxHQUFHLENBQUNvdEIsR0FBRyxFQUFFOztRQUVMQSxJQUFJLEVBQUUsQ0FBQ0EsR0FBRyxDQUFDcDFCLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4Qzs7SUFFQXJILFFBQVEsRUFBRXlrQyxDQUFDLENBQUMxa0MsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNyQjA4QixHQUFHLEdBQUdBLEdBQUc7UUFDVHlDLE9BQU8sRUFBRXVGLENBQUMsQ0FBQ3JKLFlBQVksQ0FBQzhELE9BQU87UUFDL0J4aUMsSUFBSSxFQUFFNmEsT0FBTyxHQUFHa3RCLENBQUMsQ0FBQ3JKLFlBQVksQ0FBQzErQixJQUFJO1FBQ25DcTBGLFNBQVMsRUFBRSxTQUFTLENBQUMvb0YsSUFBSSxDQUFDN00sTUFBTSxDQUFDK1QsUUFBUSxDQUFDRyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEVBQUU7SUFDakYsQ0FBQyxFQUFFclAsT0FBTyxDQUFDOzs7O0lBSVgsSUFBSWd4RixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxDQUFDMXJFLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksRUFBRXRsQixPQUFPLEVBQUVneEYsSUFBSSxDQUFDLENBQUM7SUFDekQsR0FBRyxDQUFDQSxJQUFJLENBQUNBLElBQUksRUFBRTtRQUNYN21CLEdBQUcsQ0FBQywwREFBMEQsQ0FBQztRQUMvRCxPQUFPLElBQUk7SUFDZjs7O0lBR0EsR0FBRyxDQUFDbnFFLE9BQU8sQ0FBQ2l4RixnQkFBZ0IsR0FBR2p4RixPQUFPLENBQUNpeEYsZUFBZSxDQUFDLElBQUksRUFBRWp4RixPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUU7UUFDN0VtcUUsR0FBRyxDQUFDLHlEQUF5RCxDQUFDO1FBQzlELE9BQU8sSUFBSTtJQUNmOztJQUVBLElBQUk5d0MsWUFBWSxFQUFFcjVCLE9BQU8sQ0FBQ3E1QixXQUFXO0lBQ3JDLEdBQUcsRUFBRUEsWUFBWSxJQUFJMzRCLFVBQVUsRUFBRTtRQUM3QjI0QixZQUFZLEVBQUVvTCxDQUFDLENBQUNySixZQUFZLENBQUMvQixXQUFXO0lBQzVDOztJQUVBLElBQUlqdEIsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNqQixJQUFJOGtGLEVBQUUsRUFBRS9zRixFQUFFLEVBQUUsSUFBSSxDQUFDZ3RGLFdBQVcsQ0FBQ254RixPQUFPLENBQUNveEYsUUFBUSxFQUFFaGxGLFFBQVEsQ0FBQztJQUN4RCxHQUFHLENBQUNwTSxPQUFPLENBQUNrYyxJQUFJLEVBQUU7UUFDZGxjLE9BQU8sQ0FBQ3F4RixVQUFVLEVBQUVyeEYsT0FBTyxDQUFDa2MsSUFBSTtRQUNoQ2cxRSxHQUFHLEVBQUV6c0QsQ0FBQyxDQUFDbkwsS0FBSyxDQUFDdDVCLE9BQU8sQ0FBQ2tjLElBQUksRUFBRW1kLFdBQVcsQ0FBQztJQUMzQzs7O0lBR0EsR0FBRyxDQUFDcjVCLE9BQU8sQ0FBQ3N4RixhQUFhLEdBQUd0eEYsT0FBTyxDQUFDc3hGLFlBQVksQ0FBQ250RixDQUFDLEVBQUUsSUFBSSxFQUFFbkUsT0FBTyxFQUFFLElBQUksS0FBSyxFQUFFO1FBQzFFbXFFLEdBQUcsQ0FBQyxzREFBc0QsQ0FBQztRQUMzRCxPQUFPLElBQUk7SUFDZjs7O0lBR0EsSUFBSSxDQUFDN2tELE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDbmhCLENBQUMsRUFBRSxJQUFJLEVBQUVuRSxPQUFPLEVBQUVneEYsSUFBSSxDQUFDLENBQUM7SUFDOUQsR0FBRyxDQUFDQSxJQUFJLENBQUNBLElBQUksRUFBRTtRQUNYN21CLEdBQUcsQ0FBQyw0REFBNEQsQ0FBQztRQUNqRSxPQUFPLElBQUk7SUFDZjs7SUFFQSxJQUFJcGlCLEVBQUUsRUFBRXRqQixDQUFDLENBQUNuTCxLQUFLLENBQUNuMUIsQ0FBQyxFQUFFazFCLFdBQVcsQ0FBQztJQUMvQixHQUFHLENBQUM2M0QsRUFBRSxFQUFFO1FBQ0pucEMsRUFBRSxFQUFFLEVBQUVBLEVBQUUsRUFBRSxDQUFDQSxFQUFFLEVBQUUsSUFBSSxFQUFFbXBDLEVBQUUsRUFBRSxFQUFFQSxHQUFHLENBQUM7SUFDbkM7SUFDQSxHQUFHLENBQUNseEYsT0FBTyxDQUFDdEQsSUFBSSxDQUFDOGUsV0FBVyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUU7UUFDckN4YixPQUFPLENBQUN5OEIsSUFBSSxHQUFHLENBQUN6OEIsT0FBTyxDQUFDeThCLEdBQUcsQ0FBQzdnQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRW1zRCxDQUFDO1FBQzlEL25ELE9BQU8sQ0FBQ2tjLEtBQUssRUFBRSxJQUFJO0lBQ3ZCO0lBQ0EsS0FBSztRQUNEbGMsT0FBTyxDQUFDa2MsS0FBSyxFQUFFNnJDLENBQUM7SUFDcEI7O0lBRUEsSUFBSXdwQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQ3Z4RixPQUFPLENBQUNncEUsU0FBUyxFQUFFO1FBQ25CdW9CLFNBQVMsQ0FBQzUxRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRW0xRixLQUFLLENBQUM5bkIsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQ7SUFDQSxHQUFHLENBQUNocEUsT0FBTyxDQUFDd3hGLFNBQVMsRUFBRTtRQUNuQkQsU0FBUyxDQUFDNTFGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFbTFGLEtBQUssQ0FBQ1UsU0FBUyxDQUFDeHhGLE9BQU8sQ0FBQ3l4RixhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUU7OztJQUdBLEdBQUcsQ0FBQyxDQUFDenhGLE9BQU8sQ0FBQ3k2QixTQUFTLEdBQUd6NkIsT0FBTyxDQUFDSyxNQUFNLEVBQUU7UUFDckMsSUFBSXF4RixXQUFXLEVBQUUxeEYsT0FBTyxDQUFDay9CLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaERxeUQsU0FBUyxDQUFDNTFGLElBQUksQ0FBQyxRQUFRLENBQUN1Z0IsSUFBSSxFQUFFO1lBQzFCLElBQUloZSxHQUFHLEVBQUU4QixPQUFPLENBQUMyeEYsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNO1lBQ3ZEbHRELENBQUMsQ0FBQ3prQyxPQUFPLENBQUNLLE1BQU0sQ0FBQyxDQUFDbkMsRUFBRSxDQUFDLENBQUNnZSxJQUFJLENBQUMsQ0FBQ2pkLElBQUksQ0FBQ3l5RixVQUFVLEVBQUVweUYsU0FBUyxDQUFDO1FBQzNELENBQUMsQ0FBQztJQUNOO0lBQ0EsS0FBSyxHQUFHLENBQUNVLE9BQU8sQ0FBQ2svQixPQUFPLEVBQUU7UUFDdEJxeUQsU0FBUyxDQUFDNTFGLElBQUksQ0FBQ3FFLE9BQU8sQ0FBQ2svQixPQUFPLENBQUM7SUFDbkM7O0lBRUFsL0IsT0FBTyxDQUFDay9CLFFBQVEsRUFBRSxRQUFRLENBQUNoakIsSUFBSSxFQUFFc2lCLE1BQU0sRUFBRXVCLEdBQUcsRUFBRTtRQUMxQyxJQUFJOWhDLFFBQVEsRUFBRStCLE9BQU8sQ0FBQy9CLFFBQVEsR0FBRyxLQUFLO1FBQ3RDLElBQUksQ0FBQyxJQUFJZixDQUFDLENBQUMsQ0FBQyxFQUFFc3hCLEdBQUcsQ0FBQytpRSxTQUFTLENBQUMveUYsTUFBTSxFQUFFdEIsRUFBRSxFQUFFc3hCLEdBQUcsRUFBRXR4QixDQUFDLEVBQUUsRUFBRTtZQUM5Q3EwRixTQUFTLENBQUNyMEYsQ0FBQyxDQUFDLENBQUNtQyxLQUFLLENBQUNwQixPQUFPLEVBQUUsQ0FBQ2llLElBQUksRUFBRXNpQixNQUFNLEVBQUV1QixJQUFJLEdBQUcrd0QsS0FBSyxFQUFFQSxLQUFLLENBQUMsQ0FBQztRQUNwRTtJQUNKLENBQUM7O0lBRUQsR0FBRyxDQUFDOXdGLE9BQU8sQ0FBQ2dCLEtBQUssRUFBRTtRQUNmLElBQUk0d0YsU0FBUyxFQUFFNXhGLE9BQU8sQ0FBQ2dCLEtBQUs7UUFDNUJoQixPQUFPLENBQUNnQixNQUFNLEVBQUUsUUFBUSxDQUFDKytCLEdBQUcsRUFBRXZCLE1BQU0sRUFBRXg5QixLQUFLLEVBQUU7WUFDekMsSUFBSS9DLFFBQVEsRUFBRStCLE9BQU8sQ0FBQy9CLFFBQVEsR0FBRyxJQUFJO1lBQ3JDMnpGLFFBQVEsQ0FBQ3Z5RixLQUFLLENBQUNwQixPQUFPLEVBQUUsQ0FBQzhoQyxHQUFHLEVBQUV2QixNQUFNLEVBQUV4OUIsS0FBSyxFQUFFOHZGLEtBQUssQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDTDs7S0FFQyxHQUFHLENBQUM5d0YsT0FBTyxDQUFDazBCLFFBQVEsRUFBRTtRQUNuQixJQUFJMjlELFlBQVksRUFBRTd4RixPQUFPLENBQUNrMEIsUUFBUTtRQUNsQ2wwQixPQUFPLENBQUNrMEIsU0FBUyxFQUFFLFFBQVEsQ0FBQzZMLEdBQUcsRUFBRXZCLE1BQU0sRUFBRTtZQUNyQyxJQUFJdmdDLFFBQVEsRUFBRStCLE9BQU8sQ0FBQy9CLFFBQVEsR0FBRyxJQUFJO1lBQ3JDNHpGLFdBQVcsQ0FBQ3h5RixLQUFLLENBQUNwQixPQUFPLEVBQUUsQ0FBQzhoQyxHQUFHLEVBQUV2QixNQUFNLEVBQUVzeUQsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNMOzs7Ozs7SUFNQSxJQUFJZ0IsV0FBVyxFQUFFcnRELENBQUMsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQzc1QixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPNjVCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3RuQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7O0lBRXhHLElBQUk0MEYsY0FBYyxFQUFFRCxVQUFVLENBQUN0ekYsT0FBTyxFQUFFLENBQUM7SUFDekMsSUFBSXd6RixHQUFHLEVBQUUscUJBQXFCO0lBQzlCLElBQUlDLFVBQVUsRUFBRSxDQUFDbkIsS0FBSyxDQUFDemtGLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRzJsRixHQUFHLEdBQUdsQixLQUFLLENBQUN6a0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHMmxGLEVBQUUsQ0FBQzs7SUFFN0UsSUFBSUUsUUFBUSxFQUFFM0IsT0FBTyxDQUFDQyxRQUFRLEdBQUdELE9BQU8sQ0FBQ0UsUUFBUTtJQUNqRHRtQixHQUFHLENBQUMsWUFBWSxFQUFFK25CLE9BQU8sQ0FBQztJQUMxQixJQUFJQyxlQUFlLEVBQUUsQ0FBQ0osY0FBYyxHQUFHRSxTQUFTLEVBQUUsR0FBRyxDQUFDQyxPQUFPOztJQUU3RCxJQUFJRSxLQUFLOzs7O0lBSVQsR0FBRyxDQUFDcHlGLE9BQU8sQ0FBQ2czRSxPQUFPLElBQUksTUFBTSxHQUFHLENBQUNoM0UsT0FBTyxDQUFDZzNFLE9BQU8sR0FBR21iLGNBQWMsQ0FBQyxFQUFFOzs7UUFHaEUsR0FBRyxDQUFDbnlGLE9BQU8sQ0FBQ3F5RixjQUFjLEVBQUU7WUFDeEI1dEQsQ0FBQyxDQUFDL2xDLEdBQUcsQ0FBQ3NCLE9BQU8sQ0FBQ3F5RixjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JDRCxNQUFNLEVBQUVFLGdCQUFnQixDQUFDbnVGLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUM7UUFDTjtRQUNBLEtBQUs7WUFDRGl1RixNQUFNLEVBQUVFLGdCQUFnQixDQUFDbnVGLENBQUMsQ0FBQztRQUMvQjtJQUNKO0lBQ0EsS0FBSyxHQUFHLENBQUMsQ0FBQzR0RixjQUFjLEdBQUdFLFNBQVMsRUFBRSxHQUFHQyxPQUFPLEVBQUU7UUFDOUNFLE1BQU0sRUFBRUcsYUFBYSxDQUFDcHVGLENBQUMsQ0FBQztJQUM1QjtJQUNBLEtBQUs7UUFDRGl1RixNQUFNLEVBQUUzdEQsQ0FBQyxDQUFDcEgsSUFBSSxDQUFDcjlCLE9BQU8sQ0FBQztJQUMzQjs7SUFFQTh3RixLQUFLLENBQUNqMEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFazJFLEtBQUssQ0FBQzs7O0lBRzlDLElBQUksQ0FBQyxJQUFJM2tELENBQUMsQ0FBQyxDQUFDLEVBQUVBLEVBQUUsRUFBRXJoQyxRQUFRLENBQUM1TixNQUFNLEVBQUVpdkMsQ0FBQyxFQUFFO1FBQ2xDcmhDLFFBQVEsQ0FBQ3FoQyxDQUFDLEVBQUUsRUFBRSxJQUFJOzs7SUFHdEIsSUFBSSxDQUFDbm9CLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksRUFBRXRsQixPQUFPLENBQUMsQ0FBQztJQUNuRCxPQUFPLElBQUk7OztJQUdYLFNBQVN3eUYsYUFBYSxDQUFDbkIsU0FBUyxDQUFDO1FBQzdCLElBQUlvQixXQUFXLEVBQUVodUQsQ0FBQyxDQUFDbkwsS0FBSyxDQUFDKzNELFNBQVMsRUFBRXJ4RixPQUFPLENBQUNxNUIsV0FBVyxDQUFDLENBQUM5MkIsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNuRSxJQUFJN0MsSUFBSSxFQUFFK3lGLFVBQVUsQ0FBQ2owRixNQUFNO1FBQzNCLElBQUlrUCxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsSUFBSXhRLENBQUMsRUFBRXcxRixJQUFJO1FBQ1gsSUFBSSxDQUFDeDFGLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEVBQUUsRUFBRXdDLEdBQUcsRUFBRXhDLENBQUMsRUFBRSxFQUFFOztZQUVwQnUxRixVQUFVLENBQUN2MUYsQ0FBQyxFQUFFLEVBQUV1MUYsVUFBVSxDQUFDdjFGLENBQUMsQ0FBQyxDQUFDNEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDaEQ0eEYsS0FBSyxFQUFFRCxVQUFVLENBQUN2MUYsQ0FBQyxDQUFDLENBQUNxRixLQUFLLENBQUMsR0FBRyxDQUFDOztZQUUvQm1MLE1BQU0sQ0FBQy9SLElBQUksQ0FBQyxDQUFDaWxFLGtCQUFrQixDQUFDOHhCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOXhCLGtCQUFrQixDQUFDOHhCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0U7UUFDQSxPQUFPaGxGLE1BQU07SUFDakI7OztJQUdBLFNBQVM2a0YsYUFBYSxDQUFDcHVGLENBQUMsRUFBRTtRQUN0QixJQUFJc3NGLFNBQVMsRUFBRSxJQUFJQyxRQUFRLENBQUMsQ0FBQzs7UUFFN0IsSUFBSSxDQUFDLElBQUl4ekYsQ0FBQyxDQUFDLENBQUMsRUFBRUEsRUFBRSxFQUFFaUgsQ0FBQyxDQUFDM0YsTUFBTSxFQUFFdEIsQ0FBQyxFQUFFLEVBQUU7WUFDN0J1ekYsUUFBUSxDQUFDcm1FLE1BQU0sQ0FBQ2ptQixDQUFDLENBQUNqSCxDQUFDLENBQUMsQ0FBQytDLElBQUksRUFBRWtFLENBQUMsQ0FBQ2pILENBQUMsQ0FBQyxDQUFDaUYsS0FBSyxDQUFDO1FBQzFDOztRQUVBLEdBQUcsQ0FBQ25DLE9BQU8sQ0FBQ3F4RixTQUFTLEVBQUU7WUFDbkIsSUFBSXNCLGVBQWUsRUFBRUgsYUFBYSxDQUFDeHlGLE9BQU8sQ0FBQ3F4RixTQUFTLENBQUM7WUFDckQsSUFBSSxDQUFDbjBGLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEVBQUUsRUFBRXkxRixjQUFjLENBQUNuMEYsTUFBTSxFQUFFdEIsQ0FBQyxFQUFFO2dCQUNwQyxHQUFHLENBQUN5MUYsY0FBYyxDQUFDejFGLENBQUMsQ0FBQztvQkFDakJ1ekYsUUFBUSxDQUFDcm1FLE1BQU0sQ0FBQ3VvRSxjQUFjLENBQUN6MUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUV5MUYsY0FBYyxDQUFDejFGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFOztRQUVBOEMsT0FBTyxDQUFDa2MsS0FBSyxFQUFFLElBQUk7O1FBRW5CLElBQUlxZCxFQUFFLEVBQUVrTCxDQUFDLENBQUMxa0MsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTBrQyxDQUFDLENBQUNySixZQUFZLEVBQUVwN0IsT0FBTyxFQUFFO1lBQ2hEODhCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCRixXQUFXLEVBQUUsS0FBSztZQUNsQnAwQixLQUFLLEVBQUUsS0FBSztZQUNaOUwsSUFBSSxFQUFFNmEsT0FBTyxHQUFHO1FBQ3BCLENBQUMsQ0FBQzs7UUFFRixHQUFHLENBQUN2WCxPQUFPLENBQUM0eUYsY0FBYyxFQUFFOztZQUV4QnI1RCxDQUFDLENBQUN3RyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ2YsSUFBSUEsSUFBSSxFQUFFMEUsQ0FBQyxDQUFDckosWUFBWSxDQUFDMkUsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLEdBQUcsQ0FBQ0EsR0FBRyxDQUFDOHlELE1BQU0sRUFBRTtvQkFDWjl5RCxHQUFHLENBQUM4eUQsTUFBTSxDQUFDdm9GLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUNpWSxLQUFLLEVBQUU7d0JBQ3BELElBQUlxTyxRQUFRLEVBQUUsQ0FBQzt3QkFDZixJQUFJMUUsU0FBUyxFQUFFM0osS0FBSyxDQUFDd2xFLE9BQU8sR0FBR3hsRSxLQUFLLENBQUMySixRQUFRO3dCQUM3QyxJQUFJNG1FLE1BQU0sRUFBRXZ3RSxLQUFLLENBQUN1d0UsS0FBSzt3QkFDdkIsR0FBRyxDQUFDdndFLEtBQUssQ0FBQ3d3RSxnQkFBZ0IsRUFBRTs0QkFDeEJuaUUsUUFBUSxFQUFFaHdCLElBQUksQ0FBQ3F1QixJQUFJLENBQUMvQyxTQUFTLEVBQUU0bUUsTUFBTSxFQUFFLEdBQUcsQ0FBQzt3QkFDL0M7d0JBQ0E5eUYsT0FBTyxDQUFDNHlGLGNBQWMsQ0FBQ3J3RSxLQUFLLEVBQUUySixRQUFRLEVBQUU0bUUsS0FBSyxFQUFFbGlFLE9BQU8sQ0FBQztvQkFDM0QsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDYjtnQkFDQSxPQUFPbVAsR0FBRztZQUNkLENBQUM7UUFDTDs7UUFFQXhHLENBQUMsQ0FBQ3JkLEtBQUssRUFBRSxJQUFJO1FBQ2IsSUFBSStpQixXQUFXLEVBQUUxRixDQUFDLENBQUMwRixVQUFVO1FBQzdCMUYsQ0FBQyxDQUFDMEYsV0FBVyxFQUFFLFFBQVEsQ0FBQ2MsR0FBRyxFQUFFaUosQ0FBQyxFQUFFOztZQUU1QixHQUFHLENBQUNocEMsT0FBTyxDQUFDZ3pGLFFBQVE7Z0JBQ2hCaHFELENBQUMsQ0FBQzlzQixLQUFLLEVBQUVsYyxPQUFPLENBQUNnekYsUUFBUTtZQUM3QjtnQkFDSWhxRCxDQUFDLENBQUM5c0IsS0FBSyxFQUFFdTBFLFFBQVE7WUFDckIsRUFBRSxDQUFDeHhELFVBQVU7Z0JBQ1RBLFVBQVUsQ0FBQzlpQyxJQUFJLENBQUMsSUFBSSxFQUFFNGpDLEdBQUcsRUFBRWlKLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBT3ZFLENBQUMsQ0FBQ3BILElBQUksQ0FBQzlELENBQUMsQ0FBQztJQUNwQjs7O0lBR0EsU0FBUys0RCxnQkFBZ0IsQ0FBQ251RixDQUFDLEVBQUU7UUFDekIsSUFBSW14QyxLQUFLLEVBQUV3N0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFaG9GLEVBQUUsRUFBRTVMLENBQUMsRUFBRXE4QixDQUFDLEVBQUU4VCxDQUFDLEVBQUV6bEMsRUFBRSxFQUFFcXJGLEdBQUcsRUFBRUMsRUFBRSxFQUFFbnpELEdBQUcsRUFBRW96RCxHQUFHLEVBQUV6L0UsQ0FBQyxFQUFFMC9FLFFBQVEsRUFBRUMsYUFBYTtRQUNuRixJQUFJcjdFLFNBQVMsRUFBRXlzQixDQUFDLENBQUM5c0IsUUFBUSxDQUFDLENBQUM7OztRQUczQkssUUFBUSxDQUFDeW1CLE1BQU0sRUFBRSxRQUFRLENBQUNELE1BQU0sRUFBRTtZQUM5QnVCLEdBQUcsQ0FBQ3RCLEtBQUssQ0FBQ0QsTUFBTSxDQUFDO1FBQ3JCLENBQUM7O1FBRUQsR0FBRyxDQUFDcjZCLENBQUMsRUFBRTs7WUFFSCxJQUFJLENBQUNqSCxDQUFDLENBQUMsQ0FBQyxFQUFFQSxFQUFFLEVBQUVrUCxRQUFRLENBQUM1TixNQUFNLEVBQUV0QixDQUFDLEVBQUUsRUFBRTtnQkFDaEM0TCxHQUFHLEVBQUUyN0IsQ0FBQyxDQUFDcjRCLFFBQVEsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixHQUFHLEVBQUV5ekYsUUFBUTtvQkFDVDduRixFQUFFLENBQUNxVCxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztnQkFDOUI7b0JBQ0lyVCxFQUFFLENBQUNvdEIsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUNqQztRQUNKOztRQUVBcUQsRUFBRSxFQUFFa0wsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUwa0MsQ0FBQyxDQUFDckosWUFBWSxFQUFFcDdCLE9BQU8sQ0FBQztRQUMvQ3U1QixDQUFDLENBQUN0N0IsUUFBUSxFQUFFczdCLENBQUMsQ0FBQ3Q3QixRQUFRLEdBQUdzN0IsQ0FBQztRQUMxQjN4QixHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSW5FLElBQUksQ0FBQyxDQUFDLENBQUMwaEQsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN4QyxHQUFHLENBQUM1ckIsQ0FBQyxDQUFDKzVELFlBQVksRUFBRTtZQUNoQkwsSUFBSSxFQUFFeHVELENBQUMsQ0FBQ2xMLENBQUMsQ0FBQys1RCxZQUFZLENBQUM7WUFDdkI1L0UsRUFBRSxFQUFFdS9FLEdBQUcsQ0FBQ3JDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDckIsR0FBRyxDQUFDLENBQUNsOUUsQ0FBQztpQkFDRHUvRSxHQUFHLENBQUNyQyxLQUFLLENBQUMsTUFBTSxFQUFFaHBGLEVBQUUsQ0FBQztZQUMxQjtnQkFDSUEsR0FBRyxFQUFFOEwsQ0FBQztRQUNkO1FBQ0EsS0FBSztZQUNEdS9FLElBQUksRUFBRXh1RCxDQUFDLENBQUMsaUJBQWlCLEVBQUU3OEIsR0FBRyxFQUFFLFNBQVMsRUFBRTJ4QixDQUFDLENBQUN3M0QsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMvRGtDLEdBQUcsQ0FBQzkwRSxHQUFHLENBQUMsRUFBRStOLFFBQVEsRUFBRSxVQUFVLEVBQUU3aEIsR0FBRyxFQUFFLFNBQVMsRUFBRTBsQixJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdEU7UUFDQW1qRSxHQUFHLEVBQUVELEdBQUcsQ0FBQyxDQUFDLENBQUM7OztRQUdYbHpELElBQUksRUFBRTtZQUNGd3pELE9BQU8sRUFBRSxDQUFDO1lBQ1Z6eUQsWUFBWSxFQUFFLElBQUk7WUFDbEIweUQsV0FBVyxFQUFFLElBQUk7WUFDakJoMUQsTUFBTSxFQUFFLENBQUM7WUFDVEUsVUFBVSxFQUFFLEtBQUs7WUFDakJMLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQzFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQzJDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQkcsS0FBSyxFQUFFLFFBQVEsQ0FBQ0QsTUFBTSxFQUFFO2dCQUNwQixJQUFJeDNCLEVBQUUsRUFBRSxDQUFDdzNCLE9BQU8sSUFBSSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztnQkFDdEQyckMsR0FBRyxDQUFDLHNCQUFzQixFQUFFbmpFLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDdXNGLFFBQVEsRUFBRSxDQUFDOztnQkFFaEIsSUFBSTtvQkFDQSxHQUFHLENBQUNMLEVBQUUsQ0FBQ08sYUFBYSxDQUFDejRGLFFBQVEsQ0FBQzA0RixXQUFXLEVBQUU7d0JBQ3ZDUixFQUFFLENBQUNPLGFBQWEsQ0FBQ3o0RixRQUFRLENBQUMwNEYsV0FBVyxDQUFDLE1BQU0sQ0FBQztvQkFDakQ7Z0JBQ0o7Z0JBQ0EsS0FBSyxDQUFDN3RCLE1BQU0sRUFBRSxDQUFDOztnQkFFZm90QixHQUFHLENBQUM1bUYsSUFBSSxDQUFDLEtBQUssRUFBRWt0QixDQUFDLENBQUN3M0QsU0FBUyxDQUFDO2dCQUM1Qmh4RCxHQUFHLENBQUMvK0IsTUFBTSxFQUFFZ0csQ0FBQztnQkFDYixHQUFHLENBQUN1eUIsQ0FBQyxDQUFDdjRCLEtBQUs7b0JBQ1B1NEIsQ0FBQyxDQUFDdjRCLEtBQUssQ0FBQzdFLElBQUksQ0FBQ285QixDQUFDLENBQUN0N0IsT0FBTyxFQUFFOGhDLEdBQUcsRUFBRS80QixDQUFDLEVBQUV3M0IsTUFBTSxDQUFDO2dCQUMzQyxHQUFHLENBQUM2TyxDQUFDO29CQUNENUksQ0FBQyxDQUFDbGlCLEtBQUssQ0FBQytDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQ3lhLEdBQUcsRUFBRXhHLENBQUMsRUFBRXZ5QixDQUFDLENBQUMsQ0FBQztnQkFDN0MsR0FBRyxDQUFDdXlCLENBQUMsQ0FBQ3JGLFFBQVE7b0JBQ1ZxRixDQUFDLENBQUNyRixRQUFRLENBQUMvM0IsSUFBSSxDQUFDbzlCLENBQUMsQ0FBQ3Q3QixPQUFPLEVBQUU4aEMsR0FBRyxFQUFFLzRCLENBQUMsQ0FBQztZQUMxQztRQUNKLENBQUM7O1FBRURxbUMsRUFBRSxFQUFFOVQsQ0FBQyxDQUFDMytCLE1BQU07O1FBRVosR0FBRyxDQUFDeXlDLEVBQUUsR0FBRyxFQUFFLElBQUk1SSxDQUFDLENBQUNuSSxNQUFNLEVBQUUsRUFBRTtZQUN2Qm1JLENBQUMsQ0FBQ2xpQixLQUFLLENBQUMrQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ2hDO1FBQ0EsR0FBRyxDQUFDK25CLENBQUMsRUFBRTtZQUNINUksQ0FBQyxDQUFDbGlCLEtBQUssQ0FBQytDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQ3lhLEdBQUcsRUFBRXhHLENBQUMsQ0FBQyxDQUFDO1FBQ3pDOztRQUVBLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDMEYsV0FBVyxHQUFHMUYsQ0FBQyxDQUFDMEYsVUFBVSxDQUFDOWlDLElBQUksQ0FBQ285QixDQUFDLENBQUN0N0IsT0FBTyxFQUFFOGhDLEdBQUcsRUFBRXhHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRTtZQUNoRSxHQUFHLENBQUNBLENBQUMsQ0FBQzMrQixNQUFNLEVBQUU7Z0JBQ1Y2cEMsQ0FBQyxDQUFDbkksTUFBTSxFQUFFO1lBQ2Q7WUFDQXRrQixRQUFRLENBQUNYLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLE9BQU9XLFFBQVE7UUFDbkI7UUFDQSxHQUFHLENBQUMrbkIsR0FBRyxDQUFDd3pELE9BQU8sRUFBRTtZQUNidjdFLFFBQVEsQ0FBQ1gsTUFBTSxDQUFDLENBQUM7WUFDakIsT0FBT1csUUFBUTtRQUNuQjs7O1FBR0FtN0UsSUFBSSxFQUFFNzlDLElBQUksQ0FBQ3ErQyxHQUFHO1FBQ2QsR0FBRyxDQUFDUixHQUFHLEVBQUU7WUFDTHovRSxFQUFFLEVBQUV5L0UsR0FBRyxDQUFDbHpGLElBQUk7WUFDWixHQUFHLENBQUN5VCxFQUFFLEdBQUcsQ0FBQ3kvRSxHQUFHLENBQUN4c0YsUUFBUSxFQUFFO2dCQUNwQjR5QixDQUFDLENBQUM4M0QsVUFBVSxFQUFFOTNELENBQUMsQ0FBQzgzRCxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQjkzRCxDQUFDLENBQUM4M0QsU0FBUyxDQUFDMzlFLENBQUMsRUFBRSxFQUFFeS9FLEdBQUcsQ0FBQ2h4RixLQUFLO2dCQUMxQixHQUFHLENBQUNneEYsR0FBRyxDQUFDejJGLEtBQUssR0FBRyxPQUFPLEVBQUU7b0JBQ3JCNjhCLENBQUMsQ0FBQzgzRCxTQUFTLENBQUMzOUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFNGhDLElBQUksQ0FBQ3MrQyxLQUFLO29CQUNoQ3I2RCxDQUFDLENBQUM4M0QsU0FBUyxDQUFDMzlFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTRoQyxJQUFJLENBQUN1K0MsS0FBSztnQkFDcEM7WUFDSjtRQUNKOztRQUVBLElBQUlDLHFCQUFxQixFQUFFLENBQUM7UUFDNUIsSUFBSUMsYUFBYSxFQUFFLENBQUM7O1FBRXBCLFNBQVNDLE1BQU0sQ0FBQ0MsS0FBSyxFQUFFOzs7Ozs7OztZQVFuQixJQUFJaDNGLElBQUksRUFBRSxJQUFJOzs7WUFHZCxJQUFJO2dCQUNBLEdBQUcsQ0FBQ2czRixLQUFLLENBQUNSLGFBQWEsRUFBRTtvQkFDckJ4MkYsSUFBSSxFQUFFZzNGLEtBQUssQ0FBQ1IsYUFBYSxDQUFDejRGLFFBQVE7Z0JBQ3RDO1lBQ0osRUFBRSxLQUFLLENBQUNrbkIsR0FBRyxFQUFFOztnQkFFVGlvRCxHQUFHLENBQUMsNkNBQTZDLEVBQUVqb0QsR0FBRyxDQUFDO1lBQzNEOztZQUVBLEdBQUcsQ0FBQ2psQixHQUFHLEVBQUU7Z0JBQ0wsT0FBT0EsR0FBRztZQUNkOztZQUVBLElBQUk7Z0JBQ0FBLElBQUksRUFBRWczRixLQUFLLENBQUN4K0UsZ0JBQWdCLEVBQUV3K0UsS0FBSyxDQUFDeCtFLGdCQUFnQixFQUFFdytFLEtBQUssQ0FBQ2o1RixRQUFRO1lBQ3hFLEVBQUUsS0FBSyxDQUFDa25CLEdBQUcsRUFBRTs7Z0JBRVRpb0QsR0FBRyxDQUFDLHNDQUFzQyxFQUFFam9ELEdBQUcsQ0FBQztnQkFDaERqbEIsSUFBSSxFQUFFZzNGLEtBQUssQ0FBQ2o1RixRQUFRO1lBQ3hCO1lBQ0EsT0FBT2lDLEdBQUc7UUFDZDs7O1FBR0EsSUFBSWkzRixXQUFXLEVBQUV6dkQsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUNwNEIsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMzRCxJQUFJOG5GLFdBQVcsRUFBRTF2RCxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQ3A0QixJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzNELEdBQUcsQ0FBQzhuRixXQUFXLEdBQUdELFVBQVUsRUFBRTtZQUMxQjM2RCxDQUFDLENBQUM4M0QsVUFBVSxFQUFFOTNELENBQUMsQ0FBQzgzRCxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQy9COTNELENBQUMsQ0FBQzgzRCxTQUFTLENBQUM4QyxVQUFVLEVBQUUsRUFBRUQsVUFBVTtRQUN4Qzs7O1FBR0EsU0FBU0UsUUFBUSxDQUFDLEVBQUU7O1lBRWhCLElBQUl4eEUsRUFBRSxFQUFFa3VFLEtBQUssQ0FBQ0YsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFenNGLEVBQUUsRUFBRTJzRixLQUFLLENBQUNGLEtBQUssQ0FBQyxRQUFRLENBQUM7OztZQUd4RHQ3QyxJQUFJLENBQUM5M0MsWUFBWSxDQUFDLFFBQVEsQ0FBQ29LLEVBQUUsQ0FBQztZQUM5QixHQUFHLENBQUMsQ0FBQzJQLE9BQU8sR0FBRyxPQUFPLENBQUN2UCxJQUFJLENBQUN1UCxNQUFNLEVBQUUsRUFBRTtnQkFDbEMrOUIsSUFBSSxDQUFDOTNDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3ZDO1lBQ0EsR0FBRyxDQUFDMkcsRUFBRSxHQUFHbzFCLENBQUMsQ0FBQ2tELEdBQUcsRUFBRTtnQkFDWjZZLElBQUksQ0FBQzkzQyxZQUFZLENBQUMsUUFBUSxFQUFFKzdCLENBQUMsQ0FBQ2tELEdBQUcsQ0FBQztZQUN0Qzs7O1lBR0EsR0FBRyxDQUFDLEVBQUVsRCxDQUFDLENBQUM4NkQscUJBQXFCLEdBQUcsQ0FBQyxDQUFDOThFLE9BQU8sR0FBRyxPQUFPLENBQUN2UCxJQUFJLENBQUN1UCxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUMvRHU1RSxLQUFLLENBQUN6a0YsSUFBSSxDQUFDO29CQUNQaW9GLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CQyxPQUFPLEdBQUc7Z0JBQ2QsQ0FBQyxDQUFDO1lBQ047OztZQUdBLEdBQUcsQ0FBQ2g3RCxDQUFDLENBQUMzRCxPQUFPLEVBQUU7Z0JBQ1h5OUQsY0FBYyxFQUFFNzVFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFNDVFLFNBQVMsRUFBRSxJQUFJLEVBQUVvQixFQUFFLENBQUNWLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxFQUFFdjZELENBQUMsQ0FBQzNELE9BQU8sQ0FBQztZQUNwRzs7O1lBR0EsU0FBUzYrRCxVQUFVLENBQUMsRUFBRTtnQkFDbEIsSUFBSTtvQkFDQSxJQUFJMzhFLE1BQU0sRUFBRWs4RSxNQUFNLENBQUNkLEVBQUUsQ0FBQyxDQUFDdDRFLFVBQVU7b0JBQ2pDdXZELEdBQUcsQ0FBQyxXQUFXLEVBQUVyeUQsS0FBSyxDQUFDO29CQUN2QixHQUFHLENBQUNBLE1BQU0sR0FBR0EsS0FBSyxDQUFDdFYsV0FBVyxDQUFDLEVBQUUsR0FBRyxlQUFlO3dCQUMvQ2dYLFVBQVUsQ0FBQ2k3RSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNqQztnQkFDQSxLQUFLLENBQUN6dEYsQ0FBQyxFQUFFO29CQUNMbWpFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRW5qRSxDQUFDLEVBQUUsSUFBSSxFQUFFQSxDQUFDLENBQUMvRyxJQUFJLEVBQUUsR0FBRyxDQUFDO29CQUM1Q3UwRixFQUFFLENBQUNULFlBQVksQ0FBQztvQkFDaEIsR0FBRyxDQUFDVixhQUFhO3dCQUNieDlELFlBQVksQ0FBQ3c5RCxhQUFhLENBQUM7b0JBQy9CQSxjQUFjLEVBQUUzeUYsU0FBUztnQkFDN0I7WUFDSjs7O1lBR0EsSUFBSWcwRixZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLElBQUk7Z0JBQ0EsR0FBRyxDQUFDbjdELENBQUMsQ0FBQzgzRCxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLElBQUkzOUUsRUFBRSxHQUFHNmxCLENBQUMsQ0FBQzgzRCxTQUFTLEVBQUU7d0JBQ3ZCLEdBQUcsQ0FBQzkzRCxDQUFDLENBQUM4M0QsU0FBUyxDQUFDcjFGLGNBQWMsQ0FBQzBYLENBQUMsQ0FBQyxFQUFFOzsyQkFFaEMsRUFBRSxDQUFDK3dCLENBQUMsQ0FBQ2xrQyxhQUFhLENBQUNnNUIsQ0FBQyxDQUFDODNELFNBQVMsQ0FBQzM5RSxDQUFDLENBQUMsRUFBRSxHQUFHNmxCLENBQUMsQ0FBQzgzRCxTQUFTLENBQUMzOUUsQ0FBQyxDQUFDLENBQUMxWCxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUd1OUIsQ0FBQyxDQUFDODNELFNBQVMsQ0FBQzM5RSxDQUFDLENBQUMsQ0FBQzFYLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTsrQkFDbkgwNEYsV0FBVyxDQUFDLzRGLElBQUk7K0JBQ2hCOG9DLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQ2xMLENBQUMsQ0FBQzgzRCxTQUFTLENBQUMzOUUsQ0FBQyxDQUFDLENBQUN6VCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM5QyxHQUFHLENBQUNvOEIsQ0FBQyxDQUFDODNELFNBQVMsQ0FBQzM5RSxDQUFDLENBQUMsQ0FBQ3ZSLEtBQUs7bUNBQzlFLENBQUN3b0IsUUFBUSxDQUFDMnFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzJCQUMzQixFQUFFLEtBQUs7K0JBQ0hvL0MsV0FBVyxDQUFDLzRGLElBQUk7K0JBQ2hCOG9DLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQy93QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN2VyxHQUFHLENBQUNvOEIsQ0FBQyxDQUFDODNELFNBQVMsQ0FBQzM5RSxDQUFDLENBQUM7bUNBQ3RELENBQUNpWCxRQUFRLENBQUMycUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7MkJBQzNCO3dCQUNIO29CQUNKO2dCQUNKOztnQkFFQSxHQUFHLENBQUMsQ0FBQy9iLENBQUMsQ0FBQys1RCxZQUFZLEVBQUU7O29CQUVqQkwsR0FBRyxDQUFDdG9FLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCO2dCQUNBLEdBQUcsQ0FBQ3VvRSxFQUFFLENBQUMzb0YsV0FBVztvQkFDZDJvRixFQUFFLENBQUMzb0YsV0FBVyxDQUFDLFFBQVEsRUFBRWlxRixFQUFFLENBQUM7Z0JBQ2hDO29CQUNJdEIsRUFBRSxDQUFDNW9GLGdCQUFnQixDQUFDLE1BQU0sRUFBRWtxRixFQUFFLEVBQUUsS0FBSyxDQUFDO2dCQUMxQ2g3RSxVQUFVLENBQUNpN0UsVUFBVSxDQUFDLEVBQUUsQ0FBQzs7Z0JBRXpCLElBQUk7b0JBQ0FuL0MsSUFBSSxDQUFDdmxDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqQixFQUFFLEtBQUssQ0FBQ21TLEdBQUcsRUFBRTs7b0JBRVQsSUFBSXl5RSxTQUFTLEVBQUUzNUYsUUFBUSxDQUFDcUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDMFMsTUFBTTtvQkFDcEQ0a0YsUUFBUSxDQUFDdDFGLEtBQUssQ0FBQ2kyQyxJQUFJLENBQUM7Z0JBQ3hCO1lBQ0o7WUFDQSxRQUFROztnQkFFSkEsSUFBSSxDQUFDOTNDLFlBQVksQ0FBQyxRQUFRLENBQUMyRyxDQUFDLENBQUM7Z0JBQzdCLEVBQUUsQ0FBQ3llLENBQUMsRUFBRTtvQkFDRjB5QixJQUFJLENBQUM5M0MsWUFBWSxDQUFDLFFBQVEsRUFBRW9sQixDQUFDLENBQUM7Z0JBQ2xDLEVBQUUsS0FBSztvQkFDSGt1RSxLQUFLLENBQUM1NkQsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDOUI7Z0JBQ0F1TyxDQUFDLENBQUNpd0QsV0FBVyxDQUFDLENBQUNoK0UsTUFBTSxDQUFDLENBQUM7WUFDM0I7UUFDSjs7UUFFQSxHQUFHLENBQUM2aUIsQ0FBQyxDQUFDcTdELFNBQVMsRUFBRTtZQUNiUixRQUFRLENBQUMsQ0FBQztRQUNkO1FBQ0EsS0FBSztZQUNENTZFLFVBQVUsQ0FBQzQ2RSxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQzVCOztRQUVBLElBQUlsNEUsSUFBSSxFQUFFamYsR0FBRyxFQUFFNDNGLGNBQWMsRUFBRSxFQUFFLEVBQUVDLGlCQUFpQjs7UUFFcEQsU0FBU04sRUFBRSxDQUFDeHRGLENBQUMsRUFBRTtZQUNYLEdBQUcsQ0FBQys0QixHQUFHLENBQUN3ekQsUUFBUSxHQUFHdUIsaUJBQWlCLEVBQUU7Z0JBQ2xDLE1BQU07WUFDVjs7WUFFQTczRixJQUFJLEVBQUUrMkYsTUFBTSxDQUFDZCxFQUFFLENBQUM7WUFDaEIsRUFBRSxDQUFDLENBQUNqMkYsR0FBRyxFQUFFO2dCQUNMa3RFLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDdENuakUsRUFBRSxFQUFFK3NGLFlBQVk7WUFDcEI7WUFDQSxHQUFHLENBQUMvc0YsRUFBRSxJQUFJOHNGLHFCQUFxQixHQUFHL3pELEdBQUcsRUFBRTtnQkFDbkNBLEdBQUcsQ0FBQ3RCLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ3BCem1CLFFBQVEsQ0FBQ1gsTUFBTSxDQUFDMG9CLEdBQUcsRUFBRSxTQUFTLENBQUM7Z0JBQy9CLE1BQU07WUFDVjtZQUNBLEtBQUssR0FBRyxDQUFDLzRCLEVBQUUsR0FBRytzRixhQUFhLEdBQUdoMEQsR0FBRyxFQUFFO2dCQUMvQkEsR0FBRyxDQUFDdEIsS0FBSyxDQUFDLGNBQWMsQ0FBQztnQkFDekJ6bUIsUUFBUSxDQUFDWCxNQUFNLENBQUMwb0IsR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUM7Z0JBQzdDLE1BQU07WUFDVjs7WUFFQSxHQUFHLENBQUMsQ0FBQzlpQyxJQUFJLEdBQUdBLEdBQUcsQ0FBQ2lTLFFBQVEsQ0FBQ0csS0FBSyxHQUFHa3FCLENBQUMsQ0FBQ3czRCxTQUFTLEVBQUU7O2dCQUUxQyxHQUFHLENBQUMsQ0FBQ3FDLFFBQVE7b0JBQ1QsTUFBTTtZQUNkO1lBQ0EsR0FBRyxDQUFDRixFQUFFLENBQUM2QixXQUFXO2dCQUNkN0IsRUFBRSxDQUFDNkIsV0FBVyxDQUFDLFFBQVEsRUFBRVAsRUFBRSxDQUFDO1lBQ2hDO2dCQUNJdEIsRUFBRSxDQUFDdjRFLG1CQUFtQixDQUFDLE1BQU0sRUFBRTY1RSxFQUFFLEVBQUUsS0FBSyxDQUFDOztZQUU3QyxJQUFJaDJELE9BQU8sRUFBRSxTQUFTLEVBQUV3MkQsTUFBTTtZQUM5QixJQUFJO2dCQUNBLEdBQUcsQ0FBQzVCLFFBQVEsRUFBRTtvQkFDVixNQUFNLFNBQVM7Z0JBQ25COztnQkFFQSxJQUFJNkIsTUFBTSxFQUFFMTdELENBQUMsQ0FBQ2tCLFNBQVMsR0FBRyxNQUFNLEdBQUd4OUIsR0FBRyxDQUFDaTRGLFlBQVksR0FBR3p3RCxDQUFDLENBQUNyeEIsUUFBUSxDQUFDblcsR0FBRyxDQUFDO2dCQUNyRWt0RSxHQUFHLENBQUMsUUFBUSxDQUFDOHFCLEtBQUssQ0FBQztnQkFDbkIsR0FBRyxDQUFDLENBQUNBLE1BQU0sR0FBRzk1RixNQUFNLENBQUNnNkYsTUFBTSxHQUFHLENBQUNsNEYsR0FBRyxDQUFDa2lCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQ2xpQixHQUFHLENBQUNraUIsSUFBSSxDQUFDalUsU0FBUyxDQUFDLEVBQUU7b0JBQ3RFLEdBQUcsQ0FBQyxFQUFFMnBGLGFBQWEsRUFBRTs7O3dCQUdqQjFxQixHQUFHLENBQUMsNkNBQTZDLENBQUM7d0JBQ2xEM3dELFVBQVUsQ0FBQ2c3RSxFQUFFLEVBQUUsR0FBRyxDQUFDO3dCQUNuQixNQUFNO29CQUNWOzs7O2dCQUlKOzs7Z0JBR0EsSUFBSVksUUFBUSxFQUFFbjRGLEdBQUcsQ0FBQ2tpQixLQUFLLEVBQUVsaUIsR0FBRyxDQUFDa2lCLEtBQUssRUFBRWxpQixHQUFHLENBQUNnTixlQUFlO2dCQUN2RDgxQixHQUFHLENBQUNlLGFBQWEsRUFBRXMwRCxRQUFRLEVBQUVBLE9BQU8sQ0FBQ2xxRixVQUFVLEVBQUUsSUFBSTtnQkFDckQ2MEIsR0FBRyxDQUFDeXpELFlBQVksRUFBRXYyRixHQUFHLENBQUNpNEYsWUFBWSxFQUFFajRGLEdBQUcsQ0FBQ2k0RixZQUFZLEVBQUVqNEYsR0FBRztnQkFDekQsR0FBRyxDQUFDZzRGLEtBQUs7b0JBQ0wxN0QsQ0FBQyxDQUFDa0IsU0FBUyxFQUFFLEtBQUs7Z0JBQ3RCc0YsR0FBRyxDQUFDcEUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDd2IsTUFBTSxDQUFDO29CQUNwQyxJQUFJblksUUFBUSxFQUFFLENBQUMsY0FBYyxFQUFFekYsQ0FBQyxDQUFDa0IsUUFBUSxDQUFDO29CQUMxQyxPQUFPdUUsT0FBTyxDQUFDbVksTUFBTSxDQUFDMzBDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7O2dCQUVELEdBQUcsQ0FBQzR5RixPQUFPLEVBQUU7b0JBQ1RyMUQsR0FBRyxDQUFDdkIsT0FBTyxFQUFFdXRDLE1BQU0sRUFBRXFwQixPQUFPLENBQUM3M0YsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUd3aUMsR0FBRyxDQUFDdkIsTUFBTTtvQkFDbkV1QixHQUFHLENBQUNyQixXQUFXLEVBQUUwMkQsT0FBTyxDQUFDNzNGLFlBQVksQ0FBQyxZQUFZLEVBQUUsR0FBR3dpQyxHQUFHLENBQUNyQixVQUFVO2dCQUN6RTs7Z0JBRUEsSUFBSTIyRCxHQUFHLEVBQUUsQ0FBQzk3RCxDQUFDLENBQUNrQixTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUNqNEIsV0FBVyxDQUFDLENBQUM7Z0JBQ3pDLElBQUk4eUYsSUFBSSxFQUFFLG9CQUFvQixDQUFDdHRGLElBQUksQ0FBQ3F0RixFQUFFLENBQUM7Z0JBQ3ZDLEdBQUcsQ0FBQ0MsSUFBSSxHQUFHLzdELENBQUMsQ0FBQ2c4RCxRQUFRLEVBQUU7O29CQUVuQixJQUFJQyxHQUFHLEVBQUV2NEYsR0FBRyxDQUFDNEssb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoRCxHQUFHLENBQUMydEYsRUFBRSxFQUFFO3dCQUNKejFELEdBQUcsQ0FBQ2UsYUFBYSxFQUFFMDBELEVBQUUsQ0FBQ3J6RixLQUFLOzt3QkFFM0I0OUIsR0FBRyxDQUFDdkIsT0FBTyxFQUFFdXRDLE1BQU0sRUFBRXlwQixFQUFFLENBQUNqNEYsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUd3aUMsR0FBRyxDQUFDdkIsTUFBTTt3QkFDOUR1QixHQUFHLENBQUNyQixXQUFXLEVBQUU4MkQsRUFBRSxDQUFDajRGLFlBQVksQ0FBQyxZQUFZLEVBQUUsR0FBR3dpQyxHQUFHLENBQUNyQixVQUFVO29CQUNwRTtvQkFDQSxLQUFLLEdBQUcsQ0FBQzQyRCxHQUFHLEVBQUU7O3dCQUVWLElBQUlHLElBQUksRUFBRXg0RixHQUFHLENBQUM0SyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLElBQUl6RCxFQUFFLEVBQUVuSCxHQUFHLENBQUM0SyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzNDLEdBQUcsQ0FBQzR0RixHQUFHLEVBQUU7NEJBQ0wxMUQsR0FBRyxDQUFDZSxhQUFhLEVBQUUyMEQsR0FBRyxDQUFDNW9GLFlBQVksRUFBRTRvRixHQUFHLENBQUM1b0YsWUFBWSxFQUFFNG9GLEdBQUcsQ0FBQ0MsU0FBUzt3QkFDeEU7d0JBQ0EsS0FBSyxHQUFHLENBQUN0eEYsQ0FBQyxFQUFFOzRCQUNSMjdCLEdBQUcsQ0FBQ2UsYUFBYSxFQUFFMThCLENBQUMsQ0FBQ3lJLFlBQVksRUFBRXpJLENBQUMsQ0FBQ3lJLFlBQVksRUFBRXpJLENBQUMsQ0FBQ3N4RixTQUFTO3dCQUNsRTtvQkFDSjtnQkFDSjtnQkFDQSxLQUFLLEdBQUcsQ0FBQ0wsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDdDFELEdBQUcsQ0FBQ3l6RCxZQUFZLEdBQUd6ekQsR0FBRyxDQUFDZSxZQUFZLEVBQUU7b0JBQzFEZixHQUFHLENBQUN5ekQsWUFBWSxFQUFFbUMsS0FBSyxDQUFDNTFELEdBQUcsQ0FBQ2UsWUFBWSxDQUFDO2dCQUM3Qzs7Z0JBRUEsSUFBSTtvQkFDQTVrQixLQUFLLEVBQUUwNUUsUUFBUSxDQUFDNzFELEdBQUcsRUFBRXMxRCxFQUFFLEVBQUU5N0QsQ0FBQyxDQUFDO2dCQUMvQjtnQkFDQSxNQUFNLENBQUNyWCxHQUFHLEVBQUU7b0JBQ1JzYyxPQUFPLEVBQUUsYUFBYTtvQkFDdEJ1QixHQUFHLENBQUMvK0IsTUFBTSxFQUFFZzBGLE9BQU8sRUFBRSxDQUFDOXlFLElBQUksR0FBR3NjLE1BQU0sQ0FBQztnQkFDeEM7WUFDSjtZQUNBLE1BQU0sQ0FBQ3RjLEdBQUcsRUFBRTtnQkFDUmlvRCxHQUFHLENBQUMsZ0JBQWdCLENBQUNqb0QsR0FBRyxDQUFDO2dCQUN6QnNjLE9BQU8sRUFBRSxPQUFPO2dCQUNoQnVCLEdBQUcsQ0FBQy8rQixNQUFNLEVBQUVnMEYsT0FBTyxFQUFFLENBQUM5eUUsSUFBSSxHQUFHc2MsTUFBTSxDQUFDO1lBQ3hDOztZQUVBLEdBQUcsQ0FBQ3VCLEdBQUcsQ0FBQ3d6RCxPQUFPLEVBQUU7Z0JBQ2JwcEIsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUNyQjNyQyxPQUFPLEVBQUUsSUFBSTtZQUNqQjs7WUFFQSxHQUFHLENBQUN1QixHQUFHLENBQUN2QixNQUFNLEVBQUU7Z0JBQ1pBLE9BQU8sRUFBRSxDQUFDdUIsR0FBRyxDQUFDdkIsT0FBTyxHQUFHLElBQUksR0FBR3VCLEdBQUcsQ0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEdBQUd1QixHQUFHLENBQUN2QixPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU87WUFDaEc7OztZQUdBLEdBQUcsQ0FBQ0EsT0FBTyxJQUFJLFNBQVMsRUFBRTtnQkFDdEIsR0FBRyxDQUFDakYsQ0FBQyxDQUFDMkYsT0FBTztvQkFDVDNGLENBQUMsQ0FBQzJGLE9BQU8sQ0FBQy9pQyxJQUFJLENBQUNvOUIsQ0FBQyxDQUFDdDdCLE9BQU8sRUFBRWllLElBQUksRUFBRSxTQUFTLEVBQUU2akIsR0FBRyxDQUFDO2dCQUNuRC9uQixRQUFRLENBQUNaLE9BQU8sQ0FBQzJvQixHQUFHLENBQUNlLFlBQVksRUFBRSxTQUFTLEVBQUVmLEdBQUcsQ0FBQztnQkFDbEQsR0FBRyxDQUFDc04sQ0FBQztvQkFDRDVJLENBQUMsQ0FBQ2xpQixLQUFLLENBQUMrQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUN5YSxHQUFHLEVBQUV4RyxDQUFDLENBQUMsQ0FBQztZQUNoRDtZQUNBLEtBQUssR0FBRyxDQUFDaUYsTUFBTSxFQUFFO2dCQUNiLEdBQUcsQ0FBQ3cyRCxPQUFPLElBQUl0MEYsU0FBUztvQkFDcEJzMEYsT0FBTyxFQUFFajFELEdBQUcsQ0FBQ3JCLFVBQVU7Z0JBQzNCLEdBQUcsQ0FBQ25GLENBQUMsQ0FBQ3Y0QixLQUFLO29CQUNQdTRCLENBQUMsQ0FBQ3Y0QixLQUFLLENBQUM3RSxJQUFJLENBQUNvOUIsQ0FBQyxDQUFDdDdCLE9BQU8sRUFBRThoQyxHQUFHLEVBQUV2QixNQUFNLEVBQUV3MkQsTUFBTSxDQUFDO2dCQUNoRGg5RSxRQUFRLENBQUNYLE1BQU0sQ0FBQzBvQixHQUFHLEVBQUUsT0FBTyxFQUFFaTFELE1BQU0sQ0FBQztnQkFDckMsR0FBRyxDQUFDM25ELENBQUM7b0JBQ0Q1SSxDQUFDLENBQUNsaUIsS0FBSyxDQUFDK0MsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDeWEsR0FBRyxFQUFFeEcsQ0FBQyxFQUFFeTdELE1BQU0sQ0FBQyxDQUFDO1lBQ3REOztZQUVBLEdBQUcsQ0FBQzNuRCxDQUFDO2dCQUNENUksQ0FBQyxDQUFDbGlCLEtBQUssQ0FBQytDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQ3lhLEdBQUcsRUFBRXhHLENBQUMsQ0FBQyxDQUFDOztZQUU3QyxHQUFHLENBQUM4VCxFQUFFLEdBQUcsRUFBRSxFQUFFNUksQ0FBQyxDQUFDbkksTUFBTSxFQUFFO2dCQUNuQm1JLENBQUMsQ0FBQ2xpQixLQUFLLENBQUMrQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQy9COztZQUVBLEdBQUcsQ0FBQ2lVLENBQUMsQ0FBQ3JGLFFBQVE7Z0JBQ1ZxRixDQUFDLENBQUNyRixRQUFRLENBQUMvM0IsSUFBSSxDQUFDbzlCLENBQUMsQ0FBQ3Q3QixPQUFPLEVBQUU4aEMsR0FBRyxFQUFFdkIsTUFBTSxDQUFDOztZQUUzQ3MyRCxrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLEdBQUcsQ0FBQ3Y3RCxDQUFDLENBQUMzRCxPQUFPO2dCQUNUQyxZQUFZLENBQUN3OUQsYUFBYSxDQUFDOzs7WUFHL0I3NUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNsQixHQUFHLENBQUMsQ0FBQytmLENBQUMsQ0FBQys1RCxZQUFZO29CQUNmTCxHQUFHLENBQUN2OEUsTUFBTSxDQUFDLENBQUM7Z0JBQ2hCO29CQUNJdThFLEdBQUcsQ0FBQzVtRixJQUFJLENBQUMsS0FBSyxFQUFFa3RCLENBQUMsQ0FBQ3czRCxTQUFTLENBQUM7Z0JBQ2hDaHhELEdBQUcsQ0FBQ3l6RCxZQUFZLEVBQUUsSUFBSTtZQUMxQixDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ1g7O1FBRUEsSUFBSW1DLE1BQU0sRUFBRWx4RCxDQUFDLENBQUM1TCxTQUFTLEdBQUcsUUFBUSxDQUFDVSxDQUFDLEVBQUV0OEIsR0FBRyxFQUFFO1lBQ3ZDLEdBQUcsQ0FBQzlCLE1BQU0sQ0FBQzA2RixhQUFhLEVBQUU7Z0JBQ3RCNTRGLElBQUksRUFBRSxJQUFJNDRGLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDM0M1NEYsR0FBRyxDQUFDNC9CLE1BQU0sRUFBRSxPQUFPO2dCQUNuQjUvQixHQUFHLENBQUM2NEYsT0FBTyxDQUFDdjhELENBQUMsQ0FBQztZQUNsQjtZQUNBLEtBQUs7Z0JBQ0R0OEIsSUFBSSxFQUFFLENBQUMsSUFBSTY3QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQ1EsQ0FBQyxFQUFFLFVBQVUsQ0FBQztZQUMxRDtZQUNBLE9BQU8sQ0FBQ3Q4QixJQUFJLEdBQUdBLEdBQUcsQ0FBQ2dOLGdCQUFnQixHQUFHaE4sR0FBRyxDQUFDZ04sZUFBZSxDQUFDckQsU0FBUyxHQUFHLGFBQWEsRUFBRSxFQUFFM0osSUFBSSxFQUFFLElBQUk7UUFDckcsQ0FBQztRQUNELElBQUlpbkMsVUFBVSxFQUFFTyxDQUFDLENBQUNQLFVBQVUsR0FBRyxRQUFRLENBQUMzSyxDQUFDLEVBQUU7O1lBRXZDLE9BQU9wK0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRW8rQixFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ3hDLENBQUM7O1FBRUQsSUFBSXE4RCxTQUFTLEVBQUUsUUFBUSxFQUFFNzFELEdBQUcsRUFBRXJqQyxJQUFJLEVBQUU2OEIsRUFBRSxFQUFFOztZQUVwQyxJQUFJZ0MsR0FBRyxFQUFFd0UsR0FBRyxDQUFDcEUsaUJBQWlCLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtnQkFDaEQ1dEIsSUFBSSxFQUFFclIsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDQSxLQUFLLEdBQUc2K0IsRUFBRSxDQUFDMy9CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2dCQUN2RHNnQixLQUFLLEVBQUVuTyxJQUFJLEVBQUVneUIsR0FBRyxDQUFDeXpELFlBQVksRUFBRXp6RCxHQUFHLENBQUNlLFlBQVk7O1lBRW5ELEdBQUcsQ0FBQy95QixJQUFJLEdBQUdtTyxJQUFJLENBQUNqUyxlQUFlLENBQUNyRCxTQUFTLElBQUksYUFBYSxFQUFFO2dCQUN4RCxHQUFHLENBQUM2OUIsQ0FBQyxDQUFDempDLEtBQUs7b0JBQ1B5akMsQ0FBQyxDQUFDempDLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDOUI7WUFDQSxHQUFHLENBQUN1NEIsRUFBRSxHQUFHQSxDQUFDLENBQUM2QyxVQUFVLEVBQUU7Z0JBQ25CbGdCLEtBQUssRUFBRXFkLENBQUMsQ0FBQzZDLFVBQVUsQ0FBQ2xnQixJQUFJLEVBQUV4ZixJQUFJLENBQUM7WUFDbkM7WUFDQSxHQUFHLENBQUMsT0FBT3dmLEtBQUssSUFBSSxRQUFRLEVBQUU7Z0JBQzFCLEdBQUcsQ0FBQ3hmLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQ0EsS0FBSyxHQUFHNitCLEVBQUUsQ0FBQzMvQixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNyRHNnQixLQUFLLEVBQUVnb0IsU0FBUyxDQUFDaG9CLElBQUksQ0FBQztnQkFDMUIsRUFBRSxLQUFLLEdBQUcsQ0FBQ3hmLEtBQUssSUFBSSxTQUFTLEdBQUcsQ0FBQ0EsS0FBSyxHQUFHNitCLEVBQUUsQ0FBQzMvQixPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNwRTZvQyxDQUFDLENBQUNuakMsVUFBVSxDQUFDNGEsSUFBSSxDQUFDO2dCQUN0QjtZQUNKO1lBQ0EsT0FBT0EsSUFBSTtRQUNmLENBQUM7O1FBRUQsT0FBT2xFLFFBQVE7SUFDbkI7QUFDSixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRHlzQixDQUFDLENBQUN2bUMsRUFBRSxDQUFDNjNGLFNBQVMsRUFBRSxRQUFRLENBQUMvMUYsT0FBTyxFQUFFO0lBQzlCQSxRQUFRLEVBQUVBLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDdkJBLE9BQU8sQ0FBQ2cyRixXQUFXLEVBQUVoMkYsT0FBTyxDQUFDZzJGLFdBQVcsR0FBR3Z4RCxDQUFDLENBQUNwb0MsVUFBVSxDQUFDb29DLENBQUMsQ0FBQ3ZtQyxFQUFFLENBQUNpa0IsRUFBRSxDQUFDOzs7SUFHaEUsR0FBRyxDQUFDLENBQUNuaUIsT0FBTyxDQUFDZzJGLFdBQVcsR0FBRyxJQUFJLENBQUN4M0YsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUMxQyxJQUFJd3FDLEVBQUUsRUFBRSxFQUFFelAsQ0FBQyxFQUFFLElBQUksQ0FBQ3Y3QixRQUFRLEVBQUUrdEMsQ0FBQyxFQUFFLElBQUksQ0FBQzl0QyxRQUFRLENBQUM7UUFDN0MsR0FBRyxDQUFDLENBQUN3bUMsQ0FBQyxDQUFDMWpDLFFBQVEsR0FBR2lvQyxDQUFDLENBQUN6UCxDQUFDLEVBQUU7WUFDbkI0d0MsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO1lBQ3RDMWxDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDVEEsQ0FBQyxDQUFDdUUsQ0FBQyxDQUFDelAsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDK0MsQ0FBQyxDQUFDLENBQUNncUQsUUFBUSxDQUFDLzFGLE9BQU8sQ0FBQztZQUNoQyxDQUFDLENBQUM7WUFDRixPQUFPLElBQUk7UUFDZjs7UUFFQW1xRSxHQUFHLENBQUMsK0NBQStDLEVBQUUsQ0FBQzFsQyxDQUFDLENBQUMxakMsUUFBUSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sSUFBSTtJQUNmOztJQUVBLEdBQUcsRUFBRWYsT0FBTyxDQUFDZzJGLFdBQVcsRUFBRTtRQUN0QnZ4RCxDQUFDLENBQUN6cEMsUUFBUTtZQUNOLENBQUN3bkIsR0FBRyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQ3hrQixRQUFRLEVBQUVpNEYsWUFBWTtZQUN0RCxDQUFDenpFLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUN4a0IsUUFBUSxFQUFFazRGLHdCQUF3QjtZQUNqRSxDQUFDL3pFLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUNua0IsUUFBUSxFQUFFZ0MsT0FBTyxFQUFFaTJGLFlBQVk7WUFDOUQsQ0FBQzl6RSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDbmtCLFFBQVEsRUFBRWdDLE9BQU8sRUFBRWsyRix3QkFBd0IsQ0FBQztRQUM5RSxPQUFPLElBQUk7SUFDZjs7SUFFQSxPQUFPLElBQUksQ0FBQ0MsY0FBYyxDQUFDO1FBQ3ZCLENBQUNsaUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFajBCLE9BQU8sRUFBRWkyRixZQUFZO1FBQ2pELENBQUNoaUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFajBCLE9BQU8sRUFBRWsyRix3QkFBd0IsQ0FBQztBQUNyRSxDQUFDOzs7QUFHRCxTQUFTRCxZQUFZLENBQUNqdkYsQ0FBQyxFQUFFOztJQUVyQixJQUFJaEgsUUFBUSxFQUFFZ0gsQ0FBQyxDQUFDa1YsSUFBSTtJQUNwQixHQUFHLENBQUMsQ0FBQ2xWLENBQUMsQ0FBQzhlLGtCQUFrQixDQUFDLENBQUMsRUFBRTtRQUN6QjllLENBQUMsQ0FBQ3NkLGNBQWMsQ0FBQyxDQUFDO1FBQ2xCbWdCLENBQUMsQ0FBQ3o5QixDQUFDLENBQUMzRyxNQUFNLENBQUMsQ0FBQ3d3RixVQUFVLENBQUM3d0YsT0FBTyxDQUFDO0lBQ25DO0FBQ0o7O0FBRUEsU0FBU2syRix3QkFBd0IsQ0FBQ2x2RixDQUFDLEVBQUU7O0lBRWpDLElBQUkzRyxPQUFPLEVBQUUyRyxDQUFDLENBQUMzRyxNQUFNO0lBQ3JCLElBQUl1N0UsSUFBSSxFQUFFbjNDLENBQUMsQ0FBQ3BrQyxNQUFNLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQ3U3RSxHQUFHLENBQUNwb0UsRUFBRSxDQUFDLDRCQUE0QixDQUFDLENBQUMsRUFBRTs7UUFFekMsSUFBSW9QLEVBQUUsRUFBRWc1RCxHQUFHLENBQUM5bUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNwQyxHQUFHLENBQUM4TixDQUFDLENBQUNwa0IsT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNoQixNQUFNO1FBQ1Y7UUFDQTZCLE9BQU8sRUFBRXVpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCO0lBQ0EsSUFBSTB5QixLQUFLLEVBQUUsSUFBSTtJQUNmQSxJQUFJLENBQUNxK0MsSUFBSSxFQUFFdHpGLE1BQU07SUFDakIsR0FBRyxDQUFDQSxNQUFNLENBQUMzRCxLQUFLLEdBQUcsT0FBTyxFQUFFO1FBQ3hCLEdBQUcsQ0FBQ3NLLENBQUMsQ0FBQ3FnQixRQUFRLElBQUkzbUIsU0FBUyxFQUFFO1lBQ3pCNDBDLElBQUksQ0FBQ3MrQyxNQUFNLEVBQUU1c0YsQ0FBQyxDQUFDcWdCLE9BQU87WUFDdEJpdUIsSUFBSSxDQUFDdStDLE1BQU0sRUFBRTdzRixDQUFDLENBQUNzZ0IsT0FBTztRQUMxQixFQUFFLEtBQUssR0FBRyxDQUFDLE9BQU9tZCxDQUFDLENBQUN2bUMsRUFBRSxDQUFDaWtDLE9BQU8sR0FBRyxVQUFVLEVBQUU7WUFDekMsSUFBSUEsT0FBTyxFQUFFeTVDLEdBQUcsQ0FBQ3o1QyxNQUFNLENBQUMsQ0FBQztZQUN6Qm1ULElBQUksQ0FBQ3MrQyxNQUFNLEVBQUU1c0YsQ0FBQyxDQUFDNGYsTUFBTSxFQUFFdWIsTUFBTSxDQUFDcFMsSUFBSTtZQUNsQ3VsQixJQUFJLENBQUN1K0MsTUFBTSxFQUFFN3NGLENBQUMsQ0FBQzZmLE1BQU0sRUFBRXNiLE1BQU0sQ0FBQzkzQixHQUFHO1FBQ3JDLEVBQUUsS0FBSztZQUNIaXJDLElBQUksQ0FBQ3MrQyxNQUFNLEVBQUU1c0YsQ0FBQyxDQUFDNGYsTUFBTSxFQUFFdm1CLE1BQU0sQ0FBQysxRixVQUFVO1lBQ3hDOWdELElBQUksQ0FBQ3UrQyxNQUFNLEVBQUU3c0YsQ0FBQyxDQUFDNmYsTUFBTSxFQUFFeG1CLE1BQU0sQ0FBQ2cyRixTQUFTO1FBQzNDO0lBQ0o7O0lBRUE3OEUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU4N0IsSUFBSSxDQUFDcStDLElBQUksRUFBRXIrQyxJQUFJLENBQUNzK0MsTUFBTSxFQUFFdCtDLElBQUksQ0FBQ3UrQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDOUU7Ozs7QUFJQXB2RCxDQUFDLENBQUN2bUMsRUFBRSxDQUFDaTRGLGVBQWUsRUFBRSxRQUFRLENBQUMsRUFBRTtJQUM3QixPQUFPLElBQUksQ0FBQ3Z5RCxNQUFNLENBQUMsc0NBQXNDLENBQUM7QUFDOUQsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWFEYSxDQUFDLENBQUN2bUMsRUFBRSxDQUFDaXpGLFlBQVksRUFBRSxRQUFRLENBQUNDLFFBQVEsRUFBRWhsRixRQUFRLEVBQUU7SUFDNUMsSUFBSWpJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVixHQUFHLENBQUMsSUFBSSxDQUFDM0YsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNuQixPQUFPMkYsQ0FBQztJQUNaOztJQUVBLElBQUlteEMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEIsSUFBSXJ1QyxJQUFJLEVBQUVtcUYsU0FBUyxFQUFFOTdDLElBQUksQ0FBQ3p0QyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsRUFBRXl0QyxJQUFJLENBQUNscEMsUUFBUTtJQUNuRSxHQUFHLENBQUMsQ0FBQ25GLEdBQUcsRUFBRTtRQUNOLE9BQU85QyxDQUFDO0lBQ1o7O0lBRUEsSUFBSWpILENBQUMsQ0FBQ3lDLENBQUMsQ0FBQytULENBQUMsQ0FBQ3NELENBQUMsQ0FBQ2xPLEVBQUUsQ0FBQzBsQixHQUFHLENBQUM4bkUsSUFBSTtJQUN2QixHQUFHLENBQUNwNUYsQ0FBQyxDQUFDLENBQUMsRUFBRXN4QixHQUFHLENBQUN2bkIsR0FBRyxDQUFDekksTUFBTSxFQUFFdEIsRUFBRSxFQUFFc3hCLEdBQUcsRUFBRXR4QixDQUFDLEVBQUUsRUFBRTtRQUNuQzRMLEdBQUcsRUFBRTdCLEdBQUcsQ0FBQy9KLENBQUMsQ0FBQztRQUNYd1csRUFBRSxFQUFFNUssRUFBRSxDQUFDN0ksSUFBSTtRQUNYLEdBQUcsQ0FBQyxDQUFDeVQsRUFBRSxHQUFHNUssRUFBRSxDQUFDbkMsUUFBUSxFQUFFO1lBQ25CLFFBQVE7UUFDWjs7UUFFQSxHQUFHLENBQUN5cUYsU0FBUyxHQUFHOTdDLElBQUksQ0FBQ3ErQyxJQUFJLEdBQUc3cUYsRUFBRSxDQUFDcE0sS0FBSyxHQUFHLE9BQU8sRUFBRTs7WUFFNUMsRUFBRSxDQUFDNDRDLElBQUksQ0FBQ3ErQyxJQUFJLEdBQUc3cUYsRUFBRSxFQUFFO2dCQUNmM0UsQ0FBQyxDQUFDeEksSUFBSSxDQUFDLENBQUNzRSxJQUFJLEVBQUV5VCxDQUFDLEVBQUV2UixLQUFLLEVBQUVzaUMsQ0FBQyxDQUFDMzdCLEVBQUUsQ0FBQyxDQUFDM0wsR0FBRyxDQUFDLENBQUMsRUFBRVQsSUFBSSxFQUFFb00sRUFBRSxDQUFDcE0sS0FBSyxDQUFDLENBQUM7Z0JBQ3JEeUgsQ0FBQyxDQUFDeEksSUFBSSxDQUFDLENBQUNzRSxJQUFJLEVBQUV5VCxDQUFDLENBQUMsSUFBSSxFQUFFdlIsS0FBSyxFQUFFbXpDLElBQUksQ0FBQ3MrQyxLQUFLLENBQUMsRUFBRSxDQUFDM3pGLElBQUksRUFBRXlULENBQUMsQ0FBQyxJQUFJLEVBQUV2UixLQUFLLEVBQUVtekMsSUFBSSxDQUFDdStDLEtBQUssQ0FBQyxDQUFDO1lBQ2hGO1lBQ0EsUUFBUTtRQUNaOztRQUVBNzhFLEVBQUUsRUFBRXl0QixDQUFDLENBQUM4eEQsVUFBVSxDQUFDenRGLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDMUIsR0FBRyxDQUFDa08sRUFBRSxHQUFHQSxDQUFDLENBQUN6WSxZQUFZLEdBQUdpQyxLQUFLLEVBQUU7WUFDN0IsR0FBRyxDQUFDNEwsUUFBUTtnQkFDUkEsUUFBUSxDQUFDelEsSUFBSSxDQUFDbU4sRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQ25KLENBQUMsQ0FBQyxDQUFDLEVBQUUyMkYsSUFBSSxDQUFDdC9FLENBQUMsQ0FBQ3hZLE1BQU0sRUFBRW1CLEVBQUUsRUFBRTIyRixJQUFJLEVBQUUzMkYsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25Dd0UsQ0FBQyxDQUFDeEksSUFBSSxDQUFDLENBQUNzRSxJQUFJLEVBQUV5VCxDQUFDLEVBQUV2UixLQUFLLEVBQUU2VSxDQUFDLENBQUNyWCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDO1FBQ0o7UUFDQSxLQUFLLEdBQUcsQ0FBQzR3RixPQUFPLENBQUNDLFFBQVEsR0FBRzFuRixFQUFFLENBQUNwTSxLQUFLLEdBQUcsTUFBTSxFQUFFO1lBQzNDLEdBQUcsQ0FBQzBQLFFBQVE7Z0JBQ1JBLFFBQVEsQ0FBQ3pRLElBQUksQ0FBQ21OLEVBQUUsQ0FBQztZQUNyQixJQUFJc2tFLE1BQU0sRUFBRXRrRSxFQUFFLENBQUNza0UsS0FBSztZQUNwQixHQUFHLENBQUNBLEtBQUssQ0FBQzV1RSxNQUFNLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDbUIsQ0FBQyxDQUFDLENBQUMsRUFBRUEsRUFBRSxFQUFFeXRFLEtBQUssQ0FBQzV1RSxNQUFNLEVBQUVtQixDQUFDLEVBQUUsRUFBRTtvQkFDN0J3RSxDQUFDLENBQUN4SSxJQUFJLENBQUMsQ0FBQ3NFLElBQUksRUFBRXlULENBQUMsRUFBRXZSLEtBQUssRUFBRWlyRSxLQUFLLENBQUN6dEUsQ0FBQyxDQUFDLEVBQUVqRCxJQUFJLEVBQUVvTSxFQUFFLENBQUNwTSxJQUFJLENBQUMsQ0FBQztnQkFDckQ7WUFDSjtZQUNBLEtBQUs7O2dCQUVEeUgsQ0FBQyxDQUFDeEksSUFBSSxDQUFDLEVBQUVzRSxJQUFJLEVBQUV5VCxDQUFDLEVBQUV2UixLQUFLLEVBQUUsRUFBRSxFQUFFekYsSUFBSSxFQUFFb00sRUFBRSxDQUFDcE0sS0FBSyxDQUFDLENBQUM7WUFDakQ7UUFDSjtRQUNBLEtBQUssR0FBRyxDQUFDc2EsRUFBRSxJQUFJLEtBQUssR0FBRyxPQUFPQSxFQUFFLEdBQUcsV0FBVyxFQUFFO1lBQzVDLEdBQUcsQ0FBQzVLLFFBQVE7Z0JBQ1JBLFFBQVEsQ0FBQ3pRLElBQUksQ0FBQ21OLEVBQUUsQ0FBQztZQUNyQjNFLENBQUMsQ0FBQ3hJLElBQUksQ0FBQyxDQUFDc0UsSUFBSSxFQUFFeVQsQ0FBQyxFQUFFdlIsS0FBSyxFQUFFNlUsQ0FBQyxFQUFFdGEsSUFBSSxFQUFFb00sRUFBRSxDQUFDcE0sSUFBSSxFQUFFc29FLFFBQVEsRUFBRWw4RCxFQUFFLENBQUNrOEQsUUFBUSxDQUFDLENBQUM7UUFDckU7SUFDSjs7SUFFQSxHQUFHLENBQUMsQ0FBQ29zQixTQUFTLEdBQUc5N0MsSUFBSSxDQUFDcStDLEdBQUcsRUFBRTs7UUFFdkIsSUFBSTZDLE9BQU8sRUFBRS94RCxDQUFDLENBQUM2USxJQUFJLENBQUNxK0MsR0FBRyxDQUFDLEVBQUV4b0YsTUFBTSxFQUFFcXJGLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0M5aUYsRUFBRSxFQUFFdkksS0FBSyxDQUFDbEwsSUFBSTtRQUNkLEdBQUcsQ0FBQ3lULEVBQUUsR0FBRyxDQUFDdkksS0FBSyxDQUFDeEUsU0FBUyxHQUFHd0UsS0FBSyxDQUFDek8sS0FBSyxHQUFHLE9BQU8sRUFBRTtZQUMvQ3lILENBQUMsQ0FBQ3hJLElBQUksQ0FBQyxDQUFDc0UsSUFBSSxFQUFFeVQsQ0FBQyxFQUFFdlIsS0FBSyxFQUFFcTBGLE1BQU0sQ0FBQ3I1RixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdENnSCxDQUFDLENBQUN4SSxJQUFJLENBQUMsQ0FBQ3NFLElBQUksRUFBRXlULENBQUMsQ0FBQyxJQUFJLEVBQUV2UixLQUFLLEVBQUVtekMsSUFBSSxDQUFDcytDLEtBQUssQ0FBQyxFQUFFLENBQUMzekYsSUFBSSxFQUFFeVQsQ0FBQyxDQUFDLElBQUksRUFBRXZSLEtBQUssRUFBRW16QyxJQUFJLENBQUN1K0MsS0FBSyxDQUFDLENBQUM7UUFDaEY7SUFDSjtJQUNBLE9BQU8xdkYsQ0FBQztBQUNaLENBQUM7Ozs7OztBQU1Ec2dDLENBQUMsQ0FBQ3ZtQyxFQUFFLENBQUN1NEYsY0FBYyxFQUFFLFFBQVEsQ0FBQ3JGLFFBQVEsRUFBRTs7SUFFcEMsT0FBTzNzRCxDQUFDLENBQUNuTCxLQUFLLENBQUMsSUFBSSxDQUFDNjNELFdBQVcsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7QUFDOUMsQ0FBQzs7Ozs7O0FBTUQzc0QsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQ3c0RixlQUFlLEVBQUUsUUFBUSxDQUFDQyxVQUFVLEVBQUU7SUFDdkMsSUFBSXh5RixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxDQUFDbEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2pCLElBQUl5VSxFQUFFLEVBQUUsSUFBSSxDQUFDelQsSUFBSTtRQUNqQixHQUFHLENBQUMsQ0FBQ3lULENBQUMsRUFBRTtZQUNKLE1BQU07UUFDVjtRQUNBLElBQUlzRCxFQUFFLEVBQUV5dEIsQ0FBQyxDQUFDOHhELFVBQVUsQ0FBQyxJQUFJLEVBQUVJLFVBQVUsQ0FBQztRQUN0QyxHQUFHLENBQUMzL0UsRUFBRSxHQUFHQSxDQUFDLENBQUN6WSxZQUFZLEdBQUdpQyxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUl0RCxDQUFDLENBQUMsQ0FBQyxDQUFDc3hCLEdBQUcsQ0FBQ3hYLENBQUMsQ0FBQ3hZLE1BQU0sRUFBRXRCLEVBQUUsRUFBRXN4QixHQUFHLEVBQUV0eEIsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDaUgsQ0FBQyxDQUFDeEksSUFBSSxDQUFDLENBQUNzRSxJQUFJLEVBQUV5VCxDQUFDLEVBQUV2UixLQUFLLEVBQUU2VSxDQUFDLENBQUM5WixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDO1FBQ0o7UUFDQSxLQUFLLEdBQUcsQ0FBQzhaLEVBQUUsSUFBSSxLQUFLLEdBQUcsT0FBT0EsRUFBRSxHQUFHLFdBQVcsRUFBRTtZQUM1QzdTLENBQUMsQ0FBQ3hJLElBQUksQ0FBQyxDQUFDc0UsSUFBSSxFQUFFLElBQUksQ0FBQ0EsSUFBSSxFQUFFa0MsS0FBSyxFQUFFNlUsQ0FBQyxDQUFDLENBQUM7UUFDdkM7SUFDSixDQUFDLENBQUM7O0lBRUYsT0FBT3l0QixDQUFDLENBQUNuTCxLQUFLLENBQUNuMUIsQ0FBQyxDQUFDO0FBQ3JCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3Q0RzZ0MsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQ3E0RixXQUFXLEVBQUUsUUFBUSxDQUFDSSxVQUFVLEVBQUU7SUFDbkMsSUFBSSxDQUFDLElBQUl4NUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFRCxDQUFDLENBQUMsQ0FBQyxFQUFFc3hCLEdBQUcsQ0FBQyxJQUFJLENBQUNod0IsTUFBTSxFQUFFdEIsRUFBRSxFQUFFc3hCLEdBQUcsRUFBRXR4QixDQUFDLEVBQUUsRUFBRTtRQUNqRCxJQUFJNEwsR0FBRyxFQUFFLElBQUksQ0FBQzVMLENBQUMsQ0FBQztRQUNoQixJQUFJOFosRUFBRSxFQUFFeXRCLENBQUMsQ0FBQzh4RCxVQUFVLENBQUN6dEYsRUFBRSxFQUFFNnRGLFVBQVUsQ0FBQztRQUNwQyxHQUFHLENBQUMzL0UsRUFBRSxJQUFJLEtBQUssR0FBRyxPQUFPQSxFQUFFLEdBQUcsWUFBWSxHQUFHLENBQUNBLENBQUMsQ0FBQ3pZLFlBQVksR0FBR2lDLE1BQU0sR0FBRyxDQUFDd1csQ0FBQyxDQUFDeFksTUFBTSxDQUFDLEVBQUU7WUFDaEYsUUFBUTtRQUNaO1FBQ0EsR0FBRyxDQUFDd1ksQ0FBQyxDQUFDelksWUFBWSxHQUFHaUMsS0FBSztZQUN0QmlrQyxDQUFDLENBQUMxbEMsS0FBSyxDQUFDNUIsR0FBRyxFQUFFNlosQ0FBQyxDQUFDO1FBQ25CO1lBQ0k3WixHQUFHLENBQUN4QixJQUFJLENBQUNxYixDQUFDLENBQUM7SUFDbkI7SUFDQSxPQUFPN1osR0FBRztBQUNkLENBQUM7Ozs7O0FBS0RzbkMsQ0FBQyxDQUFDOHhELFdBQVcsRUFBRSxRQUFRLENBQUN6dEYsRUFBRSxFQUFFNnRGLFVBQVUsRUFBRTtJQUNwQyxJQUFJampGLEVBQUUsRUFBRTVLLEVBQUUsQ0FBQzdJLElBQUksRUFBRTJpQixFQUFFLEVBQUU5WixFQUFFLENBQUNwTSxJQUFJLEVBQUVzTyxJQUFJLEVBQUVsQyxFQUFFLENBQUNrM0MsT0FBTyxDQUFDeDlDLFdBQVcsQ0FBQyxDQUFDO0lBQzVELEdBQUcsQ0FBQ20wRixXQUFXLElBQUlqMkYsU0FBUyxFQUFFO1FBQzFCaTJGLFdBQVcsRUFBRSxJQUFJO0lBQ3JCOztJQUVBLEdBQUcsQ0FBQ0EsV0FBVyxHQUFHLENBQUMsQ0FBQ2pqRixFQUFFLEdBQUc1SyxFQUFFLENBQUNuQyxTQUFTLEdBQUdpYyxFQUFFLEdBQUcsUUFBUSxHQUFHQSxFQUFFLEdBQUcsU0FBUztRQUNsRSxDQUFDQSxFQUFFLEdBQUcsV0FBVyxHQUFHQSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQzlaLEVBQUUsQ0FBQ3lHLFFBQVE7UUFDakQsQ0FBQ3FULEVBQUUsR0FBRyxTQUFTLEdBQUdBLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRzlaLEVBQUUsQ0FBQ3dzQyxLQUFLLEdBQUd4c0MsRUFBRSxDQUFDd3NDLElBQUksQ0FBQ3ErQyxJQUFJLEdBQUc3cUYsR0FBRztRQUNoRWtDLElBQUksR0FBRyxTQUFTLEdBQUdsQyxFQUFFLENBQUMyRyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QyxPQUFPLElBQUk7SUFDbkI7O0lBRUEsR0FBRyxDQUFDekUsSUFBSSxHQUFHLFFBQVEsRUFBRTtRQUNqQixJQUFJK0osTUFBTSxFQUFFak0sRUFBRSxDQUFDMkcsYUFBYTtRQUM1QixHQUFHLENBQUNzRixNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJO1FBQ2Y7UUFDQSxJQUFJNVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFeXlGLElBQUksRUFBRTl0RixFQUFFLENBQUM5SSxPQUFPO1FBQzVCLElBQUlxaUIsSUFBSSxFQUFFLENBQUNPLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDN0IsSUFBSTRMLElBQUksRUFBRSxDQUFDbk0sSUFBSSxFQUFFdE4sS0FBSyxDQUFDLEVBQUUsRUFBRTZoRixHQUFHLENBQUNwNEYsTUFBTSxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxJQUFJdEIsQ0FBQyxDQUFDLENBQUNtbEIsSUFBSSxFQUFFdE4sTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFN1gsRUFBRSxFQUFFc3hCLEdBQUcsRUFBRXR4QixDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJMjVGLEdBQUcsRUFBRUQsR0FBRyxDQUFDMTVGLENBQUMsQ0FBQztZQUNmLEdBQUcsQ0FBQzI1RixFQUFFLENBQUNybkYsUUFBUSxFQUFFO2dCQUNiLElBQUl3SCxFQUFFLEVBQUU2L0UsRUFBRSxDQUFDMTBGLEtBQUs7Z0JBQ2hCLEdBQUcsQ0FBQyxDQUFDNlUsQ0FBQyxFQUFFO29CQUNKQSxFQUFFLEVBQUUsQ0FBQzYvRSxFQUFFLENBQUNseUYsV0FBVyxHQUFHa3lGLEVBQUUsQ0FBQ2x5RixVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDa3lGLEVBQUUsQ0FBQ2x5RixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMySCxTQUFTLENBQUMsRUFBRSxFQUFFdXFGLEVBQUUsQ0FBQ3Y1RixLQUFLLEVBQUV1NUYsRUFBRSxDQUFDMTBGLEtBQUs7Z0JBQzdHO2dCQUNBLEdBQUcsQ0FBQ2tnQixHQUFHLEVBQUU7b0JBQ0wsT0FBT3JMLENBQUM7Z0JBQ1o7Z0JBQ0E3UyxDQUFDLENBQUN4SSxJQUFJLENBQUNxYixDQUFDLENBQUM7WUFDYjtRQUNKO1FBQ0EsT0FBTzdTLENBQUM7SUFDWjtJQUNBLE9BQU9zZ0MsQ0FBQyxDQUFDMzdCLEVBQUUsQ0FBQyxDQUFDM0wsR0FBRyxDQUFDLENBQUM7QUFDdEIsQ0FBQzs7Ozs7Ozs7OztBQVVEc25DLENBQUMsQ0FBQ3ZtQyxFQUFFLENBQUNzekYsVUFBVSxFQUFFLFFBQVEsQ0FBQ0MsYUFBYSxFQUFFO0lBQ3JDLE9BQU8sSUFBSSxDQUFDeHlGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN4QndsQyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUNxeUQsV0FBVyxDQUFDckYsYUFBYSxDQUFDO0lBQy9ELENBQUMsQ0FBQztBQUNOLENBQUM7Ozs7O0FBS0RodEQsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQzQ0RixZQUFZLEVBQUVyeUQsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQzY0RixZQUFZLEVBQUUsUUFBUSxDQUFDdEYsYUFBYSxFQUFFO0lBQzFELElBQUlyaUQsR0FBRyxFQUFFLDRGQUE0RjtJQUNyRyxPQUFPLElBQUksQ0FBQ253QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDeEIsSUFBSTJqQixFQUFFLEVBQUUsSUFBSSxDQUFDbG1CLElBQUksRUFBRXNPLElBQUksRUFBRSxJQUFJLENBQUNnMUMsT0FBTyxDQUFDeDlDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELEdBQUcsQ0FBQzRzQyxFQUFFLENBQUNwbkMsSUFBSSxDQUFDNGEsQ0FBQyxFQUFFLEdBQUc1WCxJQUFJLEdBQUcsVUFBVSxFQUFFO1lBQ2pDLElBQUksQ0FBQzdJLE1BQU0sRUFBRSxFQUFFO1FBQ25CO1FBQ0EsS0FBSyxHQUFHLENBQUN5Z0IsRUFBRSxHQUFHLFdBQVcsR0FBR0EsRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUN0QyxJQUFJLENBQUNyVCxRQUFRLEVBQUUsS0FBSztRQUN4QjtRQUNBLEtBQUssR0FBRyxDQUFDdkUsSUFBSSxHQUFHLFFBQVEsRUFBRTtZQUN0QixJQUFJLENBQUN5RSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNCO0VBQ04sS0FBSyxHQUFHLENBQUNtVCxFQUFFLEdBQUcsTUFBTSxFQUFFO0dBQ3JCLEdBQUcsQ0FBQyxNQUFNLENBQUM1YSxJQUFJLENBQUMrZ0QsU0FBUyxDQUFDQyxTQUFTLENBQUMsRUFBRTtJQUNyQ3ZrQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNoYSxXQUFXLENBQUNnYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNya0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQ3pDLEVBQUUsS0FBSztJQUNOcWtDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3RuQyxHQUFHLENBQUMsRUFBRSxDQUFDO0dBQ2hCO0VBQ0Q7UUFDTSxLQUFLLEdBQUcsQ0FBQ3MwRixhQUFhLEVBQUU7Ozs7O1lBS3BCLEdBQUcsRUFBRSxDQUFDQSxjQUFjLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQ3pwRixJQUFJLENBQUM0YSxDQUFDLENBQUMsRUFBRTtpQkFDN0MsQ0FBQyxPQUFPNnVFLGNBQWMsR0FBRyxTQUFTLEdBQUdodEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDanhCLEVBQUUsQ0FBQ2krRSxhQUFhLENBQUMsRUFBRTtnQkFDakUsSUFBSSxDQUFDdHZGLE1BQU0sRUFBRSxFQUFFO1FBQ3ZCO0lBQ0osQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7Ozs7QUFLRHNpQyxDQUFDLENBQUN2bUMsRUFBRSxDQUFDOHFFLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtJQUN4QixPQUFPLElBQUksQ0FBQy9wRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7OztRQUd4QixHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMrUSxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUNBLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUNBLEtBQUssQ0FBQ3pULFFBQVEsQ0FBQyxFQUFFO1lBQzVGLElBQUksQ0FBQ3lULEtBQUssQ0FBQyxDQUFDO1FBQ2hCO0lBQ0osQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7Ozs7QUFLRHkwQixDQUFDLENBQUN2bUMsRUFBRSxDQUFDMHRDLE9BQU8sRUFBRSxRQUFRLENBQUN4bkMsQ0FBQyxFQUFFO0lBQ3RCLEdBQUcsQ0FBQ0EsRUFBRSxJQUFJMUQsU0FBUyxFQUFFO1FBQ2pCMEQsRUFBRSxFQUFFLElBQUk7SUFDWjtJQUNBLE9BQU8sSUFBSSxDQUFDbkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQzBILFNBQVMsRUFBRSxDQUFDdkMsQ0FBQztJQUN0QixDQUFDLENBQUM7QUFDTixDQUFDOzs7Ozs7QUFNRHFnQyxDQUFDLENBQUN2bUMsRUFBRSxDQUFDc1IsU0FBUyxFQUFFLFFBQVEsQ0FBQ3pNLE1BQU0sRUFBRTtJQUM3QixHQUFHLENBQUNBLE9BQU8sSUFBSXJDLFNBQVMsRUFBRTtRQUN0QnFDLE9BQU8sRUFBRSxJQUFJO0lBQ2pCO0lBQ0EsT0FBTyxJQUFJLENBQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDeEIsSUFBSTJqQixFQUFFLEVBQUUsSUFBSSxDQUFDbG1CLElBQUk7UUFDakIsR0FBRyxDQUFDa21CLEVBQUUsR0FBRyxXQUFXLEdBQUdBLEVBQUUsR0FBRyxPQUFPLEVBQUU7WUFDakMsSUFBSSxDQUFDclQsUUFBUSxFQUFFeE0sTUFBTTtRQUN6QjtRQUNBLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQ2k5QyxPQUFPLENBQUN4OUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUU7WUFDN0MsSUFBSXcwRixLQUFLLEVBQUV2eUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDcjJCLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDbkMsR0FBRyxDQUFDckwsT0FBTyxHQUFHaTBGLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBR0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDdDZGLEtBQUssR0FBRyxZQUFZLEVBQUU7O2dCQUVuRHM2RixJQUFJLENBQUNsc0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDMEUsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN2QztZQUNBLElBQUksQ0FBQ0EsU0FBUyxFQUFFek0sTUFBTTtRQUMxQjtJQUNKLENBQUMsQ0FBQztBQUNOLENBQUM7OztBQUdEMGhDLENBQUMsQ0FBQ3ZtQyxFQUFFLENBQUMyeUYsVUFBVSxDQUFDcHRCLE1BQU0sRUFBRSxLQUFLOzs7QUFHN0IsU0FBUzBHLEdBQUcsQ0FBQyxFQUFFO0lBQ1gsR0FBRyxDQUFDLENBQUMxbEMsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQzJ5RixVQUFVLENBQUNwdEIsS0FBSztRQUN0QixNQUFNO0lBQ1YsSUFBSXhpRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUVULEtBQUssQ0FBQ25DLFNBQVMsQ0FBQzZKLElBQUksQ0FBQy9MLElBQUksQ0FBQ21ELFNBQVMsQ0FBQyxFQUFFLENBQUM7SUFDcEUsR0FBRyxDQUFDbkUsTUFBTSxDQUFDZ2YsUUFBUSxHQUFHaGYsTUFBTSxDQUFDZ2YsT0FBTyxDQUFDZ3dELEdBQUcsRUFBRTtRQUN0Q2h2RSxNQUFNLENBQUNnZixPQUFPLENBQUNnd0QsR0FBRyxDQUFDbHBFLEdBQUcsQ0FBQztJQUMzQjtJQUNBLEtBQUssR0FBRyxDQUFDOUYsTUFBTSxDQUFDZzZGLE1BQU0sR0FBR2g2RixNQUFNLENBQUNnNkYsS0FBSyxDQUFDOEIsU0FBUyxFQUFFO1FBQzdDOTdGLE1BQU0sQ0FBQ2c2RixLQUFLLENBQUM4QixTQUFTLENBQUNoMkYsR0FBRyxDQUFDO0lBQy9CO0FBQ0o7O0FBRUEsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OztBQ3RyQ0gsQ0FBQyxRQUFRLENBQUMrRixDQUFDLENBQUM0YixDQUFDLENBQUNsUCxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSTAxQixDQUFDLENBQUN4bUIsQ0FBQyxDQUFDTCxLQUFLLENBQUNybEIsQ0FBQyxDQUFDa3NDLENBQUMsQ0FBQ3Z3QixPQUFPLENBQUNxK0UsV0FBVyxDQUFDLENBQUMxekUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNaLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3FSLElBQUksQ0FBQyxRQUFRLENBQUNtVixDQUFDLENBQUN2d0IsT0FBTyxDQUFDcStFLFdBQVcsQ0FBQ2p1RixPQUFPLENBQUMsQ0FBQyxDQUFDMGEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2doQixNQUFNLENBQUMsUUFBUSxDQUFDd0YsQ0FBQyxDQUFDdndCLE9BQU8sQ0FBQ3ErRSxXQUFXLENBQUNqdUYsT0FBTyxDQUFDLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLFFBQVEsQ0FBQ2pDLENBQUMsQ0FBQzRiLENBQUMsQ0FBQyxDQUFDLElBQUlsUCxDQUFDLENBQUMsSUFBSSxDQUFDNmxCLENBQUMsQ0FBQ2o2QixTQUFTLENBQUMwSCxDQUFDLENBQUN0SyxJQUFJLENBQUMsYUFBYSxDQUFDUSxDQUFDLEVBQUUyNEIsWUFBWSxDQUFDMzRCLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNzYyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzR2QixDQUFDLENBQUNobUIsUUFBUSxDQUFDL2pCLEtBQUssQ0FBQ3FVLENBQUMsQ0FBQzZsQixDQUFDLENBQUMsQ0FBQyxDQUFDM1csQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMxa0IsRUFBRSxDQUFDZzVGLFdBQVcsQ0FBQyxRQUFRLENBQUNsd0YsQ0FBQyxDQUFDLENBQUMsT0FBT0EsQ0FBQyxDQUFDLElBQUksQ0FBQ2l0QixJQUFJLENBQUMsYUFBYSxDQUFDanRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3NlLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMxQyxDQUFDLENBQUN1MEUsS0FBSyxDQUFDLFFBQVEsQ0FBQ253RixDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDem1CLENBQUMsQ0FBQ2xQLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ3czQixPQUFPLENBQUNsa0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc2pDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzFuQixDQUFDLENBQUN1MEUsS0FBSyxDQUFDajZELFFBQVEsQ0FBQyxDQUFDazZELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDamhGLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3lhLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQ3ltRSxXQUFXLENBQUMsQ0FBQyxDQUFDanhELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ2t4RCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLGNBQWMsQ0FBQyxDQUFDdnJFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDdEosQ0FBQyxDQUFDdTBFLEtBQUssQ0FBQzk0RixTQUFTLENBQUMsQ0FBQ3E1RixpQkFBaUIsQ0FBQyxRQUFRLENBQUMxd0YsQ0FBQyxDQUFDLENBQUMsSUFBSTRiLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDMjNGLFlBQVksQ0FBQyxPQUFPLzBFLENBQUMsQ0FBQzViLENBQUMsQ0FBQzRELE1BQU0sQ0FBQ2dZLENBQUMsQ0FBQyxDQUFDM04sR0FBRyxDQUFDak8sQ0FBQyxDQUFDOEQsSUFBSSxDQUFDOFgsQ0FBQyxDQUFDLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDNHdGLFVBQVUsQ0FBQyxRQUFRLENBQUM1d0YsQ0FBQyxDQUFDLENBQUMsSUFBSTRiLENBQUMsQ0FBQyxJQUFJLENBQUM4MEUsaUJBQWlCLENBQUMxd0YsQ0FBQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsQ0FBQytOLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDZ0wsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU90VSxDQUFDLENBQUMsQ0FBQ3NvQixPQUFPLENBQUMsUUFBUSxDQUFDeDNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzFULE9BQU8sQ0FBQzRpQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDNmlCLENBQUMsQ0FBQ3UwRSxLQUFLLENBQUNqNkQsUUFBUSxDQUFDeHBCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ21rRixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSXp1RCxDQUFDLENBQUMsSUFBSSxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNwckIsS0FBSyxDQUFDLElBQUksQ0FBQzY1RSxhQUFhLENBQUMsQ0FBQ3psRSxNQUFNLENBQUMrVyxDQUFDLENBQUMvVyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSW4xQixDQUFDLENBQUMsSUFBSSxDQUFDOEMsT0FBTyxDQUFDeTNGLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSWwrRCxFQUFFLEdBQUdyOEIsQ0FBQyxDQUFDLElBQUksQ0FBQzQ2RixhQUFhLENBQUN2K0QsQ0FBQyxDQUFDLENBQUM2UCxDQUFDLENBQUM3UCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDOFAsT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQ2poQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2NkYsbUJBQW1CLENBQUMsSUFBSSxDQUFDLzNGLE9BQU8sQ0FBQ3NtQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJMEMsQ0FBQyxDQUFDLElBQUksQ0FBQ0ssT0FBTyxDQUFDbHJCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDNDVFLG1CQUFtQixDQUFDLENBQUN4ckQsQ0FBQyxDQUFDLElBQUksQ0FBQ2xELE9BQU8sQ0FBQ2xyQixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDZ2tCLE1BQU0sQ0FBQyxDQUFDd0wsQ0FBQyxDQUFDM0UsQ0FBQyxDQUFDbFMsUUFBUSxDQUFDa1MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VFLENBQUMsQ0FBQ2hCLENBQUMsQ0FBQ3pWLFFBQVEsQ0FBQ3lWLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5ckQsT0FBTyxDQUFDLElBQUksQ0FBQ2g0RixPQUFPLENBQUNpNEYsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDajRGLE9BQU8sQ0FBQ2k0RixXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUk5ekYsQ0FBQyxDQUFDLElBQUksQ0FBQ3FWLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDclYsQ0FBQyxDQUFDa2xDLE9BQU8sQ0FBQ25TLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2wzQixPQUFPLENBQUNvM0YsV0FBVyxFQUFFeDBFLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDaXRCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOXZCLENBQUMsQ0FBQ2tzRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM2bkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDNXRELEtBQUssQ0FBQyxRQUFRLENBQUN0akMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDbXhGLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUNweEYsQ0FBQyxDQUFDLENBQUMsQ0FBQzZZLE1BQU0sQ0FBQyxRQUFRLENBQUM3WSxDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQ3JpQixhQUFhLENBQUN5RyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQzRpQixDQUFDLENBQUM3aUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDZ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDcXhGLE1BQU0sQ0FBQyxRQUFRLENBQUNyeEYsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUlsUCxDQUFDLENBQUMsQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQ3BpQyxDQUFDLENBQUN4SSxNQUFNLENBQUNrVixDQUFDLENBQUMwMUIsQ0FBQyxDQUFDMTFCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzRrRixXQUFXLENBQUN0eEYsQ0FBQyxDQUFDME0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJeFcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUNtMUIsTUFBTSxDQUFDenhCLElBQUksQ0FBQzR0QixHQUFHLENBQUNudkIsS0FBSyxDQUFDdUIsSUFBSSxDQUFDLElBQUksQ0FBQzIzRixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDdjRGLE9BQU8sQ0FBQ3czRixVQUFVLENBQUMsQ0FBQyxJQUFJaitELENBQUMsQ0FBQyxDQUFDLENBQUM3bEIsQ0FBQyxDQUFDLElBQUksQ0FBQzhrRixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU5a0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzZrRixLQUFLLENBQUM3a0YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzZsQixDQUFDLEVBQUUsQ0FBQ3I4QixDQUFDLENBQUMrdUIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDdXNFLElBQUksQ0FBQ2ovRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwK0QsV0FBVyxDQUFDLElBQUksQ0FBQ2o0RixPQUFPLENBQUN1M0YsV0FBVyxDQUFDLElBQUksQ0FBQ00sVUFBVSxDQUFDbDhGLElBQUksQ0FBQyxDQUFDaWdGLEdBQUcsQ0FBQyxJQUFJLENBQUN2eUMsT0FBTyxDQUFDcHJCLEtBQUssQ0FBQy9nQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk4ckMsQ0FBQyxDQUFDLElBQUksQ0FBQ3l2RCxTQUFTLENBQUMsSUFBSSxDQUFDejRGLE9BQU8sQ0FBQ3EzRixVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM5cUQsQ0FBQyxDQUFDLElBQUksQ0FBQ3ZzQyxPQUFPLENBQUNzM0YsZ0JBQWdCLENBQUNuekYsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3VQLENBQUMsQ0FBQyxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDLElBQUksQ0FBQ3l1RCxVQUFVLENBQUNyNUYsTUFBTSxDQUFDa1YsQ0FBQyxDQUFDMDFCLENBQUMsQ0FBQzExQixDQUFDLEVBQUUsQ0FBQ3ZQLENBQUMsQ0FBQyxJQUFJLENBQUMwekYsVUFBVSxDQUFDbmtGLENBQUMsQ0FBQyxDQUFDdlAsQ0FBQyxDQUFDeTNFLEdBQUcsQ0FBQzV5QyxDQUFDLENBQUMsQ0FBQzdrQyxDQUFDLENBQUM4WixLQUFLLENBQUNzdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc3JELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ2oxRSxDQUFDLEVBQUVBLENBQUMsQ0FBQ3ptQixJQUFJLENBQUM2SyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5eEYsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNOLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUlueEYsQ0FBQyxDQUFDLElBQUksQ0FBQ2hILE9BQU8sQ0FBQ3czRixVQUFVLENBQUMsSUFBSSxDQUFDbnVELE9BQU8sQ0FBQ2o3QixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ2k3QixPQUFPLENBQUN6bUIsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDaWxCLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDZ3NFLFdBQVcsQ0FBQyxJQUFJLENBQUNELE9BQU8sQ0FBQyxJQUFJLENBQUNoNEYsT0FBTyxDQUFDaTRGLFdBQVcsQ0FBQ3IxRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDaTRGLFdBQVcsRUFBRSxJQUFJLENBQUNTLE9BQU8sQ0FBQ2xzRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTVwQixDQUFDLENBQUMsSUFBSSxDQUFDcTFFLFdBQVcsRUFBRSxJQUFJLENBQUNqNEYsT0FBTyxDQUFDdTNGLFdBQVcsQ0FBQyxJQUFJLENBQUNpQixJQUFJLENBQUM1M0YsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQyxDQUFDcnNCLENBQUMsQ0FBQyxJQUFJLENBQUM1aUIsT0FBTyxDQUFDdTNGLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQ1UsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDTyxJQUFJLENBQUM1M0YsSUFBSSxDQUFDNHRCLEdBQUcsQ0FBQyxJQUFJLENBQUNncUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNGLFdBQVcsQ0FBQyxRQUFRLENBQUN0eEYsQ0FBQyxDQUFDLENBQUMsSUFBSTBNLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDb2lDLENBQUMsQ0FBQ2xzQyxDQUFDLENBQUNxOEIsQ0FBQyxDQUFDeVAsQ0FBQyxDQUFDdUQsQ0FBQyxDQUFDbkQsQ0FBQyxDQUFDeG9DLElBQUksQ0FBQ3F1QixJQUFJLENBQUN2YixDQUFDLENBQUM4NEIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDeXJELFdBQVcsQ0FBQyxDQUFDN3VELENBQUMsQ0FBQ3hvQyxJQUFJLENBQUM4dkMsR0FBRyxDQUFDdEgsQ0FBQyxDQUFDLElBQUksQ0FBQ292RCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUNwdkQsQ0FBQyxHQUFHLENBQUMsQ0FBQzdQLENBQUMsQ0FBQyxJQUFJLENBQUNnL0QsS0FBSyxDQUFDLElBQUksQ0FBQ3I3RixDQUFDLENBQUMsSUFBSSxDQUFDczdGLElBQUksQ0FBQyxDQUFDLENBQUNwdkQsQ0FBQyxDQUFDN1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQ2dULENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQ3J2QyxDQUFDLENBQUNxdkMsQ0FBQyxFQUFFLENBQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDdXZELEtBQUssQ0FBQzk4RixLQUFLLENBQUM4d0MsQ0FBQyxDQUFDQSxDQUFDLENBQUNuRCxDQUFDLENBQUMsQ0FBQzdQLENBQUMsQ0FBQ2dULENBQUMsQ0FBQyxDQUFDM3JDLElBQUksQ0FBQzR0QixHQUFHLENBQUNudkIsS0FBSyxDQUFDdUIsSUFBSSxDQUFDb29DLENBQUMsQ0FBQyxDQUFDLElBQUk3a0MsQ0FBQyxDQUFDdkQsSUFBSSxDQUFDOHZDLEdBQUcsQ0FBQ3J4QyxLQUFLLENBQUN1QixJQUFJLENBQUMyNEIsQ0FBQyxDQUFDLENBQUM2VCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJdjRCLENBQUMsQ0FBQyxDQUFDLENBQUNrM0IsQ0FBQyxDQUFDeFMsQ0FBQyxDQUFDLzZCLE1BQU0sQ0FBQ3FXLENBQUMsQ0FBQ2szQixDQUFDLENBQUNsM0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDMGtCLENBQUMsQ0FBQzFrQixDQUFDLENBQUMsR0FBRzFRLENBQUMsQ0FBQyxDQUFDaXBDLENBQUMsQ0FBQ3Y0QixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUk0MEIsQ0FBQyxDQUFDLENBQUNwL0IsR0FBRyxDQUFDbEcsQ0FBQyxDQUFDLElBQUksQ0FBQ2crQixNQUFNLENBQUNvTCxDQUFDLENBQUMsQ0FBQzlELENBQUMsQ0FBQyxJQUFJLENBQUNzdUQsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQUNFLFdBQVcsQ0FBQzdxRCxDQUFDLENBQUMsSUFBSSxDQUFDakwsTUFBTSxDQUFDd0wsQ0FBQyxDQUFDLElBQUksQ0FBQ2txRCxVQUFVLENBQUNsOEYsSUFBSSxDQUFDLENBQUNpZ0YsR0FBRyxDQUFDbG9FLENBQUMsQ0FBQ3VLLEtBQUssQ0FBQ3dyQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUlwWSxDQUFDLENBQUNsdEIsQ0FBQyxDQUFDdVAsQ0FBQyxDQUFDKzRCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxDQUFDLENBQUMsSUFBSSxDQUFDNnJELElBQUksQ0FBQyxDQUFDLENBQUN6c0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQ2wzQixDQUFDLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUM4M0IsQ0FBQyxDQUFDOTNCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzBqRixLQUFLLENBQUNuckQsQ0FBQyxDQUFDdjRCLENBQUMsQ0FBQyxDQUFDd2MsQ0FBQyxDQUFDLENBQUNnL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXJwRCxDQUFDLENBQUMsSUFBSSxDQUFDd3hGLElBQUksQ0FBQyxJQUFJLENBQUNMLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNILE9BQU8sRUFBRSxJQUFJLENBQUNRLElBQUksR0FBR3h4RixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNveEYsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxTQUFTLENBQUMsUUFBUSxDQUFDcHhGLENBQUMsQ0FBQyxDQUFDLElBQUk0YixDQUFDLENBQUMsSUFBSSxDQUFDNDFFLElBQUksQ0FBQyxJQUFJLENBQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMzMUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDMjFFLEtBQUssQ0FBQzU4RixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMDhGLE1BQU0sQ0FBQyxJQUFJLENBQUNLLE9BQU8sQ0FBQzF4RixDQUFDLENBQUMsQ0FBQyxDQUFDa3hGLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ1EsT0FBTyxDQUFDLElBQUksQ0FBQ2QsVUFBVSxDQUFDLElBQUksQ0FBQ3Z1RCxPQUFPLENBQUM3MEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNta0YsTUFBTSxDQUFDLFFBQVEsQ0FBQzN4RixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNreEYsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1dEQsS0FBSyxDQUFDdGpDLENBQUMsQ0FBQyxDQUFDLENBQUM0eEYsUUFBUSxDQUFDLFFBQVEsQ0FBQzV4RixDQUFDLENBQUM0YixDQUFDLENBQUNsUCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNrUCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM4MEUsaUJBQWlCLENBQUMxd0YsQ0FBQyxDQUFDLENBQUNtWCxHQUFHLENBQUMsQ0FBQzlULEdBQUcsQ0FBQyxJQUFJLENBQUNnL0IsT0FBTyxDQUFDaFgsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSStXLENBQUMsQ0FBQyxJQUFJLENBQUM1dkIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM0dkIsQ0FBQyxDQUFDeXZELFNBQVMsQ0FBQzd4RixDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDbWxGLFNBQVMsQ0FBQzd4RixDQUFDLENBQUMwTSxDQUFDLENBQUMsQ0FBQyxDQUFDbWxGLFNBQVMsQ0FBQyxRQUFRLENBQUM3eEYsQ0FBQyxDQUFDNGIsQ0FBQyxDQUFDLENBQUMsSUFBSWxQLENBQUMsQ0FBQyxJQUFJLENBQUNra0YsVUFBVSxDQUFDNXdGLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzB4RixPQUFPLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUN6akYsR0FBRyxDQUFDdkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMmtGLE1BQU0sQ0FBQzNrRixDQUFDLENBQUNrUCxDQUFDLENBQUMsQ0FBQyxDQUFDbE0sTUFBTSxDQUFDLFFBQVEsQ0FBQzFQLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzB4RixPQUFPLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUMxa0YsR0FBRyxDQUFDaE4sQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzBQLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3MwQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMwdEQsT0FBTyxDQUFDbmhFLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQ3Q0QixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNnZixLQUFLLENBQUNpTyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ2pPLEtBQUssQ0FBQzVULEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDNFQsS0FBSyxDQUFDOFIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSXJjLENBQUMsQ0FBQyxJQUFJLENBQUMyMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcHJCLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSW1yQixFQUFFLEdBQUcsSUFBSSxDQUFDMHVELGFBQWEsQ0FBQ3BrRixDQUFDLENBQUMwMUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDMHVELGFBQWEsQ0FBQzF1RCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQ3pGLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQ3JNLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQzFhLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQytGLENBQUMsQ0FBQzViLENBQUMsQ0FBQyxDQUFDNDhCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNoaEIsQ0FBQyxDQUFDMWtCLEVBQUUsQ0FBQzQ2RixZQUFZLENBQUMsUUFBUSxDQUFDOXhGLENBQUMsQ0FBQyxDQUFDLFNBQVN1bEMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZsQyxDQUFDLENBQUM3SyxJQUFJLENBQUN1WCxDQUFDLENBQUMwMUIsQ0FBQyxDQUFDLENBQUMsU0FBU2psQyxDQUFDLENBQUM2QyxDQUFDLENBQUMsQ0FBQyxJQUFJME0sQ0FBQyxDQUFDMU0sQ0FBQyxDQUFDM0csTUFBTSxDQUFDcVQsQ0FBQyxDQUFDL1csR0FBRyxHQUFHNDhCLENBQUMsRUFBRTNXLENBQUMsQ0FBQ2poQixPQUFPLENBQUMrUixDQUFDLENBQUNzMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsQ0FBQyxDQUFDcnRDLElBQUksQ0FBQytYLENBQUMsQ0FBQyxDQUFDLEVBQUV4VyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUNzYyxVQUFVLENBQUMreUIsQ0FBQyxDQUFDLENBQUNuRCxDQUFDLENBQUN4RixNQUFNLENBQUMsZUFBZSxDQUFDei9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJdVAsQ0FBQyxDQUFDLElBQUksQ0FBQzAxQixDQUFDLENBQUMxMUIsQ0FBQyxDQUFDNUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDbUssR0FBRyxDQUFDdkIsQ0FBQyxDQUFDOUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMxTixDQUFDLENBQUNrc0MsQ0FBQyxDQUFDNXFDLE1BQU0sQ0FBQys2QixDQUFDLENBQUMsd0VBQXdFLENBQUN5UCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzlyQyxDQUFDLEVBQUVxdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQ25ELENBQUMsQ0FBQ25WLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQzl2QixDQUFDLENBQUMsQ0FBQ2xGLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUkrSCxDQUFDLENBQUMsSUFBSSxDQUFDckssR0FBRyxDQUFDLElBQUksQ0FBQ0EsR0FBRyxDQUFDNDhCLENBQUMsQ0FBQyxJQUFJLENBQUM1OEIsR0FBRyxDQUFDcUssQ0FBQyxDQUFDLENBQUMsQ0FBQzBNLENBQUMsQ0FBQyxDQUFDLElBQUk2bEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQzNXLENBQUMsQ0FBQyxDQUFDNWIsQ0FBQyxDQUFDbVQsT0FBTyxFQUFFblQsQ0FBQyxDQUFDbVQsT0FBTyxDQUFDblosS0FBSyxDQUFDNGhCLENBQUMsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQzFrQixFQUFFLENBQUM2NkYsT0FBTyxDQUFDLFFBQVEsQ0FBQy94RixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBT0EsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUkwTSxDQUFDLENBQUNsVCxLQUFLLENBQUNuQyxTQUFTLENBQUM1QyxLQUFLLENBQUNVLElBQUksQ0FBQ21ELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUltcUMsQ0FBQyxDQUFDeG1CLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUNrdEIsQ0FBQyxDQUFDLENBQUM3UCxDQUFDLENBQUMsb0ZBQW9GLENBQUN2eUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzRiLENBQUMsQ0FBQ3ZtQixVQUFVLENBQUMrc0MsQ0FBQyxDQUFDcGlDLENBQUMsQ0FBQyxDQUFDLEVBQUVBLENBQUMsQ0FBQ3FqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM5USxDQUFDLENBQUMsa0JBQWtCLENBQUN2eUIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDb2lDLENBQUMsQ0FBQ3BpQyxDQUFDLENBQUMsQ0FBQzNILEtBQUssQ0FBQytwQyxDQUFDLENBQUMxMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDelUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSXlVLENBQUMsQ0FBQ2tQLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUN4SSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDbU0sTUFBTSxDQUFDN1ksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMwTSxDQUFDLENBQUM0MkIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDMW5CLENBQUMsQ0FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUkwRyxDQUFDLENBQUN1MEUsS0FBSyxDQUFDbndGLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzdMLE1BQU0sQ0FBQzRDLE1BQU0sQ0FBQzs7Ozs7Ozs7QUNGN3BLLENBQUMsQ0FBQyxTQUFTLENBQUNsRCxPQUFPLEVBQUU7Q0FDcEIsSUFBSW0rRix3QkFBd0I7Q0FDNUIsR0FBRyxDQUFDLE9BQU8zMEQsT0FBTyxJQUFJLFdBQVcsR0FBR0EsTUFBTSxDQUFDQyxHQUFHLEVBQUU7RUFDL0NELE1BQU0sQ0FBQ3hwQyxPQUFPLENBQUM7RUFDZm0rRix5QkFBeUIsRUFBRSxJQUFJO0NBQ2hDO0NBQ0EsR0FBRyxDQUFDLE9BQU9qK0YsUUFBUSxJQUFJLFFBQVEsRUFBRTtFQUNoQ0QsTUFBTSxDQUFDQyxRQUFRLEVBQUVGLE9BQU8sQ0FBQyxDQUFDO0VBQzFCbStGLHlCQUF5QixFQUFFLElBQUk7Q0FDaEM7Q0FDQSxHQUFHLENBQUMsQ0FBQ0Esd0JBQXdCLEVBQUU7RUFDOUIsSUFBSUMsV0FBVyxFQUFFOTlGLE1BQU0sQ0FBQys5RixPQUFPO0VBQy9CLElBQUlDLElBQUksRUFBRWgrRixNQUFNLENBQUMrOUYsUUFBUSxFQUFFcitGLE9BQU8sQ0FBQyxDQUFDO0VBQ3BDcytGLEdBQUcsQ0FBQ3owRCxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7R0FDNUJ2cEMsTUFBTSxDQUFDKzlGLFFBQVEsRUFBRUQsVUFBVTtHQUMzQixPQUFPRSxHQUFHO0VBQ1gsQ0FBQztDQUNGO0FBQ0QsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0NBQ2IsU0FBU3A1RixPQUFPLENBQUMsRUFBRTtFQUNsQixJQUFJN0MsRUFBRSxFQUFFLENBQUM7RUFDVCxJQUFJd1EsT0FBTyxFQUFFLENBQUMsQ0FBQztFQUNmLElBQUksQ0FBQyxFQUFFeFEsRUFBRSxFQUFFb0MsU0FBUyxDQUFDZCxNQUFNLEVBQUV0QixDQUFDLEVBQUUsRUFBRTtHQUNqQyxJQUFJeUgsV0FBVyxFQUFFckYsU0FBUyxFQUFFcEMsRUFBRSxDQUFDO0dBQy9CLElBQUksQ0FBQyxJQUFJdUwsSUFBSSxHQUFHOUQsVUFBVSxFQUFFO0lBQzNCK0ksTUFBTSxDQUFDakYsR0FBRyxFQUFFLEVBQUU5RCxVQUFVLENBQUM4RCxHQUFHLENBQUM7R0FDOUI7RUFDRDtFQUNBLE9BQU9pRixNQUFNO0NBQ2Q7O0NBRUEsU0FBUzByRixPQUFPLENBQUM3L0QsQ0FBQyxFQUFFO0VBQ25CLE9BQU9BLENBQUMsQ0FBQ3o0QixPQUFPLENBQUMsa0JBQWtCLEVBQUU4L0Qsa0JBQWtCLENBQUM7Q0FDekQ7O0NBRUEsU0FBU3ppRSxLQUFLLENBQUNrN0YsU0FBUyxFQUFFO0VBQ3pCLFNBQVNGLEdBQUcsQ0FBQyxFQUFFLENBQUM7O0VBRWhCLFNBQVNsOUUsSUFBSSxDQUFDeFQsR0FBRyxFQUFFdEcsS0FBSyxFQUFFd0MsVUFBVSxFQUFFO0dBQ3JDLEdBQUcsQ0FBQyxPQUFPM0osU0FBUyxJQUFJLFdBQVcsRUFBRTtJQUNwQyxNQUFNO0dBQ1A7O0dBRUEySixXQUFXLEVBQUU1RSxNQUFNLENBQUM7SUFDbkJ1NUYsSUFBSSxFQUFFO0dBQ1AsQ0FBQyxFQUFFSCxHQUFHLENBQUM5ekIsUUFBUSxFQUFFMWdFLFVBQVUsQ0FBQzs7R0FFNUIsR0FBRyxDQUFDLE9BQU9BLFVBQVUsQ0FBQzQwRixRQUFRLElBQUksUUFBUSxFQUFFO0lBQzNDNTBGLFVBQVUsQ0FBQzQwRixRQUFRLEVBQUUsSUFBSTkxRixJQUFJLENBQUMsSUFBSUEsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUVrQixVQUFVLENBQUM0MEYsUUFBUSxFQUFFLE1BQU0sQ0FBQztHQUM1RTs7O0dBR0E1MEYsVUFBVSxDQUFDNDBGLFFBQVEsRUFBRTUwRixVQUFVLENBQUM0MEYsUUFBUSxFQUFFNTBGLFVBQVUsQ0FBQzQwRixPQUFPLENBQUNDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRTs7R0FFL0UsSUFBSTtJQUNILElBQUk5ckYsT0FBTyxFQUFFZ1AsSUFBSSxDQUFDKzhFLFNBQVMsQ0FBQ3QzRixLQUFLLENBQUM7SUFDbEMsR0FBRyxDQUFDLFNBQVMsQ0FBQzZGLElBQUksQ0FBQzBGLE1BQU0sQ0FBQyxFQUFFO0tBQzNCdkwsTUFBTSxFQUFFdUwsTUFBTTtJQUNmO0dBQ0QsRUFBRSxNQUFNLENBQUMxRyxDQUFDLEVBQUUsQ0FBQzs7R0FFYjdFLE1BQU0sRUFBRWszRixTQUFTLENBQUNLLE1BQU07SUFDdkJMLFNBQVMsQ0FBQ0ssS0FBSyxDQUFDdjNGLEtBQUssRUFBRXNHLEdBQUcsRUFBRTtJQUM1Qmd4QixrQkFBa0IsQ0FBQ3h6QixNQUFNLENBQUM5RCxLQUFLLENBQUM7S0FDL0IsQ0FBQ3JCLE9BQU8sQ0FBQywyREFBMkQsRUFBRTgvRCxrQkFBa0IsQ0FBQzs7R0FFM0ZuNEQsSUFBSSxFQUFFZ3hCLGtCQUFrQixDQUFDeHpCLE1BQU0sQ0FBQ3dDLEdBQUcsQ0FBQztJQUNuQyxDQUFDM0gsT0FBTyxDQUFDLDBCQUEwQixFQUFFOC9ELGtCQUFrQjtJQUN2RCxDQUFDOS9ELE9BQU8sQ0FBQyxTQUFTLEVBQUV5TCxNQUFNLENBQUM7O0dBRTVCLElBQUlvdEYsc0JBQXNCLEVBQUUsRUFBRTtHQUM5QixJQUFJLENBQUMsSUFBSUMsY0FBYyxHQUFHajFGLFVBQVUsRUFBRTtJQUNyQyxHQUFHLENBQUMsQ0FBQ0EsVUFBVSxDQUFDaTFGLGFBQWEsQ0FBQyxFQUFFO0tBQy9CLFFBQVE7SUFDVDtJQUNBRCxzQkFBc0IsR0FBRyxLQUFLLEVBQUVDLGFBQWE7SUFDN0MsR0FBRyxDQUFDajFGLFVBQVUsQ0FBQ2kxRixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUU7S0FDdkMsUUFBUTtJQUNUOzs7Ozs7Ozs7SUFTQUQsc0JBQXNCLEdBQUcsSUFBSSxFQUFFaDFGLFVBQVUsQ0FBQ2kxRixhQUFhLENBQUMsQ0FBQ3IzRixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ3ZFOztHQUVBLE9BQU8sQ0FBQ3ZILFFBQVEsQ0FBQzYrRixPQUFPLEVBQUVweEYsSUFBSSxFQUFFLElBQUksRUFBRXRHLE1BQU0sRUFBRXczRixxQkFBcUIsQ0FBQztFQUNyRTs7RUFFQSxTQUFTajdGLElBQUksQ0FBQytKLEdBQUcsRUFBRXUwQixJQUFJLEVBQUU7R0FDeEIsR0FBRyxDQUFDLE9BQU9oaUMsU0FBUyxJQUFJLFdBQVcsRUFBRTtJQUNwQyxNQUFNO0dBQ1A7O0dBRUEsSUFBSTgrRixJQUFJLEVBQUUsQ0FBQyxDQUFDOzs7R0FHWixJQUFJQyxRQUFRLEVBQUUvK0YsUUFBUSxDQUFDNitGLE9BQU8sRUFBRTcrRixRQUFRLENBQUM2K0YsTUFBTSxDQUFDdDNGLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDaEUsSUFBSXJGLEVBQUUsRUFBRSxDQUFDOztHQUVULElBQUksQ0FBQyxFQUFFQSxFQUFFLEVBQUU2OEYsT0FBTyxDQUFDdjdGLE1BQU0sRUFBRXRCLENBQUMsRUFBRSxFQUFFO0lBQy9CLElBQUlxekIsTUFBTSxFQUFFd3BFLE9BQU8sQ0FBQzc4RixDQUFDLENBQUMsQ0FBQ3FGLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDakMsSUFBSXMzRixPQUFPLEVBQUV0cEUsS0FBSyxDQUFDOTBCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3lNLElBQUksQ0FBQyxHQUFHLENBQUM7O0lBRXJDLEdBQUcsQ0FBQyxDQUFDODBCLEtBQUssR0FBRzY4RCxNQUFNLENBQUN4dkQsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtLQUN0Q3d2RCxPQUFPLEVBQUVBLE1BQU0sQ0FBQ3ArRixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCOztJQUVBLElBQUk7S0FDSCxJQUFJd0UsS0FBSyxFQUFFbTVGLE1BQU0sQ0FBQzdvRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0JzcEUsT0FBTyxFQUFFLENBQUNSLFNBQVMsQ0FBQ1csS0FBSyxHQUFHWCxTQUFTLENBQUMsQ0FBQ1EsTUFBTSxFQUFFNTVGLElBQUksRUFBRTtNQUNwRG01RixNQUFNLENBQUNTLE1BQU0sQ0FBQzs7S0FFZixHQUFHLENBQUM3OEQsSUFBSSxFQUFFO01BQ1QsSUFBSTtPQUNINjhELE9BQU8sRUFBRW45RSxJQUFJLENBQUNDLEtBQUssQ0FBQ2s5RSxNQUFNLENBQUM7TUFDNUIsRUFBRSxNQUFNLENBQUM3eUYsQ0FBQyxFQUFFLENBQUM7S0FDZDs7S0FFQTh5RixHQUFHLENBQUM3NUYsSUFBSSxFQUFFLEVBQUU0NUYsTUFBTTs7S0FFbEIsR0FBRyxDQUFDcHhGLElBQUksSUFBSXhJLElBQUksRUFBRTtNQUNqQixLQUFLO0tBQ047SUFDRCxFQUFFLE1BQU0sQ0FBQytHLENBQUMsRUFBRSxDQUFDO0dBQ2Q7O0dBRUEsT0FBT3lCLElBQUksRUFBRXF4RixHQUFHLENBQUNyeEYsR0FBRyxFQUFFLEVBQUVxeEYsR0FBRztFQUM1Qjs7RUFFQVgsR0FBRyxDQUFDbDlFLElBQUksRUFBRUEsR0FBRztFQUNiazlFLEdBQUcsQ0FBQ3o2RixJQUFJLEVBQUUsU0FBUyxDQUFDK0osR0FBRyxFQUFFO0dBQ3hCLE9BQU8vSixHQUFHLENBQUMrSixHQUFHLEVBQUUsdUJBQXVCLENBQUM7RUFDekMsQ0FBQztFQUNEMHdGLEdBQUcsQ0FBQzc1RCxRQUFRLEVBQUUsU0FBUyxDQUFDNzJCLEdBQUcsRUFBRTtHQUM1QixPQUFPL0osR0FBRyxDQUFDK0osR0FBRyxFQUFFLHVCQUF1QixDQUFDO0VBQ3pDLENBQUM7RUFDRDB3RixHQUFHLENBQUN6aUYsT0FBTyxFQUFFLFNBQVMsQ0FBQ2pPLEdBQUcsRUFBRTlELFVBQVUsRUFBRTtHQUN2Q3NYLEdBQUcsQ0FBQ3hULEdBQUcsRUFBRSxFQUFFLEVBQUUxSSxNQUFNLENBQUM0RSxVQUFVLEVBQUU7SUFDL0I0MEYsT0FBTyxFQUFFLENBQUM7R0FDWCxDQUFDLENBQUMsQ0FBQztFQUNKLENBQUM7O0VBRURKLEdBQUcsQ0FBQzl6QixTQUFTLEVBQUUsQ0FBQyxDQUFDOztFQUVqQjh6QixHQUFHLENBQUNjLGNBQWMsRUFBRTk3RixJQUFJOztFQUV4QixPQUFPZzdGLEdBQUc7Q0FDWDs7Q0FFQSxPQUFPaDdGLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7QUM1SkgsQ0FBQyxTQUFTLENBQUNnVyxJQUFJLEVBQUUrbEYsVUFBVSxFQUFFO0lBQ3pCLFlBQVk7SUFDWixHQUFHLENBQUMsT0FBTzcxRCxPQUFPLElBQUksV0FBVyxHQUFHQSxNQUFNLENBQUNDLEdBQUcsRUFBRTtRQUM1Q0QsTUFBTSxDQUFDNjFELFVBQVUsQ0FBQztJQUN0QixFQUFFLEtBQUssR0FBRyxDQUFDLE9BQU9wL0YsT0FBTyxJQUFJLFNBQVMsR0FBR0EsTUFBTSxDQUFDQyxPQUFPLEVBQUU7UUFDckRELE1BQU0sQ0FBQ0MsUUFBUSxFQUFFbS9GLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLEVBQUUsS0FBSztRQUNIL2xGLElBQUksQ0FBQ2cyRCxJQUFJLEVBQUUrdkIsVUFBVSxDQUFDLENBQUM7SUFDM0I7QUFDSixDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQ2hCLFlBQVk7OztJQUdaLElBQUloNUYsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixJQUFJaTVGLGNBQWMsRUFBRSxXQUFXOztJQUUvQixJQUFJQyxXQUFXLEVBQUU7UUFDYixPQUFPO1FBQ1AsT0FBTztRQUNQLE1BQU07UUFDTixNQUFNO1FBQ047SUFDSixDQUFDOzs7SUFHRCxTQUFTQyxVQUFVLENBQUMvOUYsR0FBRyxFQUFFZytGLFVBQVUsRUFBRTtRQUNqQyxJQUFJL2lGLE9BQU8sRUFBRWpiLEdBQUcsQ0FBQ2crRixVQUFVLENBQUM7UUFDNUIsR0FBRyxDQUFDLE9BQU8vaUYsTUFBTSxDQUFDMGMsS0FBSyxJQUFJLFVBQVUsRUFBRTtZQUNuQyxPQUFPMWMsTUFBTSxDQUFDMGMsSUFBSSxDQUFDMzNCLEdBQUcsQ0FBQztRQUMzQixFQUFFLEtBQUs7WUFDSCxJQUFJO2dCQUNBLE9BQU9pK0YsUUFBUSxDQUFDbDhGLFNBQVMsQ0FBQzQxQixJQUFJLENBQUM5M0IsSUFBSSxDQUFDb2IsTUFBTSxFQUFFamIsR0FBRyxDQUFDO1lBQ3BELEVBQUUsTUFBTSxDQUFDMEssQ0FBQyxFQUFFOztnQkFFUixPQUFPLFFBQVEsQ0FBQyxFQUFFO29CQUNkLE9BQU91ekYsUUFBUSxDQUFDbDhGLFNBQVMsQ0FBQ2dCLEtBQUssQ0FBQ0EsS0FBSyxDQUFDa1ksTUFBTSxFQUFFLENBQUNqYixHQUFHLEVBQUVnRCxTQUFTLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztZQUNMO1FBQ0o7SUFDSjs7OztJQUlBLFNBQVNrN0YsVUFBVSxDQUFDRixVQUFVLEVBQUU7UUFDNUIsR0FBRyxDQUFDQSxXQUFXLElBQUksT0FBTyxFQUFFO1lBQ3hCQSxXQUFXLEVBQUUsS0FBSztRQUN0Qjs7UUFFQSxHQUFHLENBQUMsT0FBT25nRixRQUFRLElBQUlnZ0YsYUFBYSxFQUFFO1lBQ2xDLE9BQU8sS0FBSztRQUNoQixFQUFFLEtBQUssR0FBRyxDQUFDaGdGLE9BQU8sQ0FBQ21nRixVQUFVLEVBQUUsSUFBSTU1RixTQUFTLEVBQUU7WUFDMUMsT0FBTzI1RixVQUFVLENBQUNsZ0YsT0FBTyxFQUFFbWdGLFVBQVUsQ0FBQztRQUMxQyxFQUFFLEtBQUssR0FBRyxDQUFDbmdGLE9BQU8sQ0FBQ2d3RCxJQUFJLElBQUl6cEUsU0FBUyxFQUFFO1lBQ2xDLE9BQU8yNUYsVUFBVSxDQUFDbGdGLE9BQU8sRUFBRSxLQUFLLENBQUM7UUFDckMsRUFBRSxLQUFLO1lBQ0gsT0FBT2paLElBQUk7UUFDZjtJQUNKOzs7O0lBSUEsU0FBU3U1RixxQkFBcUIsQ0FBQ0MsS0FBSyxFQUFFQyxVQUFVLEVBQUU7O1FBRTlDLElBQUksQ0FBQyxJQUFJejlGLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRWs5RixVQUFVLENBQUM1N0YsTUFBTSxFQUFFdEIsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSW85RixXQUFXLEVBQUVGLFVBQVUsQ0FBQ2w5RixDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDbzlGLFVBQVUsRUFBRSxFQUFFLENBQUNwOUYsRUFBRSxFQUFFdzlGLEtBQUssRUFBRTtnQkFDM0J4NUYsS0FBSztnQkFDTCxJQUFJLENBQUMwNUYsYUFBYSxDQUFDTixVQUFVLEVBQUVJLEtBQUssRUFBRUMsVUFBVSxDQUFDO1FBQ3pEOzs7UUFHQSxJQUFJLENBQUN4d0IsSUFBSSxFQUFFLElBQUksQ0FBQzFHLEtBQUs7SUFDekI7Ozs7SUFJQSxTQUFTbzNCLCtCQUErQixDQUFDUCxVQUFVLEVBQUVJLEtBQUssRUFBRUMsVUFBVSxFQUFFO1FBQ3BFLE9BQU8sU0FBUyxDQUFDLEVBQUU7WUFDZixHQUFHLENBQUMsT0FBT3hnRixRQUFRLElBQUlnZ0YsYUFBYSxFQUFFO2dCQUNsQ00scUJBQXFCLENBQUN0K0YsSUFBSSxDQUFDLElBQUksRUFBRXUrRixLQUFLLEVBQUVDLFVBQVUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDTCxVQUFVLENBQUMsQ0FBQ2o3RixLQUFLLENBQUMsSUFBSSxFQUFFQyxTQUFTLENBQUM7WUFDM0M7UUFDSixDQUFDO0lBQ0w7Ozs7SUFJQSxTQUFTdzdGLG9CQUFvQixDQUFDUixVQUFVLEVBQUVJLEtBQUssRUFBRUMsVUFBVSxFQUFFOztRQUV6RCxPQUFPSCxVQUFVLENBQUNGLFVBQVUsRUFBRTtlQUN2Qk8sK0JBQStCLENBQUN4N0YsS0FBSyxDQUFDLElBQUksRUFBRUMsU0FBUyxDQUFDO0lBQ2pFOztJQUVBLFNBQVN5N0YsTUFBTSxDQUFDOTZGLElBQUksRUFBRSs2RixZQUFZLEVBQUVuZ0csT0FBTyxFQUFFO01BQzNDLElBQUlvWixLQUFLLEVBQUUsSUFBSTtNQUNmLElBQUlnbkYsWUFBWTtNQUNoQixJQUFJQyxXQUFXLEVBQUUsVUFBVTtNQUMzQixHQUFHLENBQUNqN0YsSUFBSSxFQUFFO1FBQ1JpN0YsV0FBVyxHQUFHLElBQUksRUFBRWo3RixJQUFJO01BQzFCOztNQUVBLFNBQVNrN0Ysc0JBQXNCLENBQUNDLFFBQVEsRUFBRTtVQUN0QyxJQUFJQyxVQUFVLEVBQUUsQ0FBQ2pCLFVBQVUsQ0FBQ2dCLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDNS9FLFdBQVcsQ0FBQyxDQUFDOztVQUVoRSxHQUFHLENBQUMsT0FBT3JnQixPQUFPLElBQUlnL0YsYUFBYSxFQUFFLE1BQU07OztVQUczQyxJQUFJO2NBQ0FoL0YsTUFBTSxDQUFDbWdHLFlBQVksQ0FBQ0osVUFBVSxFQUFFLEVBQUVHLFNBQVM7Y0FDM0MsTUFBTTtVQUNWLEVBQUUsTUFBTSxDQUFDeDFCLE1BQU0sRUFBRSxDQUFDOzs7VUFHbEIsSUFBSTtjQUNBMXFFLE1BQU0sQ0FBQ0gsUUFBUSxDQUFDNitGLE9BQU87Z0JBQ3JCcGdFLGtCQUFrQixDQUFDeWhFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRUcsVUFBVSxFQUFFLEdBQUc7VUFDNUQsRUFBRSxNQUFNLENBQUN4MUIsTUFBTSxFQUFFLENBQUM7TUFDdEI7O01BRUEsU0FBUzAxQixpQkFBaUIsQ0FBQyxFQUFFO1VBQ3pCLElBQUlDLFdBQVc7O1VBRWYsR0FBRyxDQUFDLE9BQU9yZ0csT0FBTyxJQUFJZy9GLGFBQWEsRUFBRSxNQUFNOztVQUUzQyxJQUFJO2NBQ0FxQixZQUFZLEVBQUVyZ0csTUFBTSxDQUFDbWdHLFlBQVksQ0FBQ0osVUFBVSxDQUFDO1VBQ2pELEVBQUUsTUFBTSxDQUFDcjFCLE1BQU0sRUFBRSxDQUFDOzs7VUFHbEIsR0FBRyxDQUFDLE9BQU8yMUIsWUFBWSxJQUFJckIsYUFBYSxFQUFFO2NBQ3RDLElBQUk7a0JBQ0EsSUFBSU4sT0FBTyxFQUFFMStGLE1BQU0sQ0FBQ0gsUUFBUSxDQUFDNitGLE1BQU07a0JBQ25DLElBQUkzcUYsU0FBUyxFQUFFMnFGLE1BQU0sQ0FBQ2orRixPQUFPO3NCQUN6QjY5QixrQkFBa0IsQ0FBQ3loRSxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUM7a0JBQ3pDLEdBQUcsQ0FBQ2hzRixTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUU7c0JBQ2pCc3NGLFlBQVksRUFBRSxVQUFVLENBQUM5ekYsSUFBSSxDQUFDbXlGLE1BQU0sQ0FBQ3ArRixLQUFLLENBQUN5VCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztrQkFDNUQ7Y0FDSixFQUFFLE1BQU0sQ0FBQzIyRCxNQUFNLEVBQUUsQ0FBQztVQUN0Qjs7O1VBR0EsR0FBRyxDQUFDNXhELElBQUksQ0FBQ3duRixNQUFNLENBQUNELFdBQVcsRUFBRSxJQUFJOTZGLFNBQVMsRUFBRTtjQUN4Qzg2RixZQUFZLEVBQUU5NkYsU0FBUztVQUMzQjs7VUFFQSxPQUFPODZGLFdBQVc7TUFDdEI7Ozs7Ozs7O01BUUF2bkYsSUFBSSxDQUFDaFUsS0FBSyxFQUFFQSxJQUFJOztNQUVoQmdVLElBQUksQ0FBQ3duRixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztVQUN4RCxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7O01BRTVCeG5GLElBQUksQ0FBQzJtRixjQUFjLEVBQUUvL0YsUUFBUSxHQUFHaWdHLG9CQUFvQjs7TUFFcEQ3bUYsSUFBSSxDQUFDeW5GLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtVQUN4QixPQUFPVCxZQUFZO01BQ3ZCLENBQUM7O01BRURobkYsSUFBSSxDQUFDMG5GLFNBQVMsRUFBRSxTQUFTLENBQUNqQixLQUFLLEVBQUVrQixPQUFPLEVBQUU7VUFDdEMsR0FBRyxDQUFDLE9BQU9sQixNQUFNLElBQUksU0FBUyxHQUFHem1GLElBQUksQ0FBQ3duRixNQUFNLENBQUNmLEtBQUssQ0FBQ2wvRSxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUk5YSxTQUFTLEVBQUU7Y0FDN0VnNkYsTUFBTSxFQUFFem1GLElBQUksQ0FBQ3duRixNQUFNLENBQUNmLEtBQUssQ0FBQ2wvRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1VBQzVDO1VBQ0EsR0FBRyxDQUFDLE9BQU9rL0UsTUFBTSxJQUFJLFNBQVMsR0FBR0EsTUFBTSxHQUFHLEVBQUUsR0FBR0EsTUFBTSxHQUFHem1GLElBQUksQ0FBQ3duRixNQUFNLENBQUNJLE1BQU0sRUFBRTtjQUN4RVosYUFBYSxFQUFFUCxLQUFLO2NBQ3BCLEdBQUcsQ0FBQ2tCLFFBQVEsSUFBSSxLQUFLLEVBQUU7a0JBQ25CVCxzQkFBc0IsQ0FBQ1QsS0FBSyxDQUFDO2NBQ2pDO2NBQ0FELHFCQUFxQixDQUFDdCtGLElBQUksQ0FBQzhYLElBQUksRUFBRXltRixLQUFLLEVBQUV6NkYsSUFBSSxDQUFDO2NBQzdDLEdBQUcsQ0FBQyxPQUFPa2EsUUFBUSxJQUFJZ2dGLGNBQWMsR0FBR08sTUFBTSxFQUFFem1GLElBQUksQ0FBQ3duRixNQUFNLENBQUNJLE1BQU0sRUFBRTtrQkFDaEUsT0FBTyxrQ0FBa0M7Y0FDN0M7VUFDSixFQUFFLEtBQUs7Y0FDSCxNQUFNLDZDQUE2QyxFQUFFbkIsS0FBSztVQUM5RDtNQUNKLENBQUM7O01BRUR6bUYsSUFBSSxDQUFDNm5GLGdCQUFnQixFQUFFLFNBQVMsQ0FBQ3BCLEtBQUssRUFBRTtVQUNwQyxHQUFHLENBQUMsQ0FBQ2EsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO2NBQ3RCdG5GLElBQUksQ0FBQzBuRixRQUFRLENBQUNqQixLQUFLLEVBQUUsS0FBSyxDQUFDO1VBQy9CO01BQ0osQ0FBQzs7TUFFRHptRixJQUFJLENBQUM4bkYsVUFBVSxFQUFFLFFBQVEsQ0FBQ0gsT0FBTyxFQUFFO1VBQy9CM25GLElBQUksQ0FBQzBuRixRQUFRLENBQUMxbkYsSUFBSSxDQUFDd25GLE1BQU0sQ0FBQ08sS0FBSyxFQUFFSixPQUFPLENBQUM7TUFDN0MsQ0FBQzs7TUFFRDNuRixJQUFJLENBQUNnb0YsV0FBVyxFQUFFLFFBQVEsQ0FBQ0wsT0FBTyxFQUFFO1VBQ2hDM25GLElBQUksQ0FBQzBuRixRQUFRLENBQUMxbkYsSUFBSSxDQUFDd25GLE1BQU0sQ0FBQ0ksTUFBTSxFQUFFRCxPQUFPLENBQUM7TUFDOUMsQ0FBQzs7O01BR0QsSUFBSU0sYUFBYSxFQUFFWCxpQkFBaUIsQ0FBQyxDQUFDO01BQ3RDLEdBQUcsQ0FBQ1csYUFBYSxHQUFHLElBQUksRUFBRTtVQUN0QkEsYUFBYSxFQUFFbEIsYUFBYSxHQUFHLEtBQUssRUFBRSxPQUFPLEVBQUVBLFlBQVk7TUFDL0Q7TUFDQS9tRixJQUFJLENBQUMwbkYsUUFBUSxDQUFDTyxZQUFZLEVBQUUsS0FBSyxDQUFDO0lBQ3BDOzs7Ozs7OztJQVFBLElBQUlDLGNBQWMsRUFBRSxJQUFJcEIsTUFBTSxDQUFDLENBQUM7O0lBRWhDLElBQUlxQixlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCRCxhQUFhLENBQUNFLFVBQVUsRUFBRSxTQUFTQSxTQUFTLENBQUNwOEYsSUFBSSxFQUFFO1FBQy9DLEdBQUcsQ0FBQyxPQUFPQSxLQUFLLElBQUksU0FBUyxHQUFHQSxLQUFLLElBQUksRUFBRSxFQUFFO1VBQzNDLE1BQU0sSUFBSStZLFNBQVMsQ0FBQyxnREFBZ0QsQ0FBQztRQUN2RTs7UUFFQSxJQUFJc2pGLE9BQU8sRUFBRUYsY0FBYyxDQUFDbjhGLElBQUksQ0FBQztRQUNqQyxHQUFHLENBQUMsQ0FBQ3E4RixNQUFNLEVBQUU7VUFDWEEsT0FBTyxFQUFFRixjQUFjLENBQUNuOEYsSUFBSSxFQUFFLEVBQUUsSUFBSTg2RixNQUFNO1lBQ3hDOTZGLElBQUksRUFBRWs4RixhQUFhLENBQUNULFFBQVEsQ0FBQyxDQUFDLEVBQUVTLGFBQWEsQ0FBQ3ZCLGFBQWEsQ0FBQztRQUNoRTtRQUNBLE9BQU8wQixNQUFNO0lBQ2pCLENBQUM7OztJQUdELElBQUlDLEtBQUssRUFBRSxDQUFDLE9BQU9waEcsT0FBTyxJQUFJZy9GLGFBQWEsRUFBRSxFQUFFaC9GLE1BQU0sQ0FBQ2d2RSxJQUFJLEVBQUV6cEUsU0FBUztJQUNyRXk3RixhQUFhLENBQUN6M0QsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ2xDLEdBQUcsQ0FBQyxPQUFPdnBDLE9BQU8sSUFBSWcvRixjQUFjO2VBQzdCaC9GLE1BQU0sQ0FBQ2d2RSxJQUFJLElBQUlneUIsYUFBYSxFQUFFO1lBQ2pDaGhHLE1BQU0sQ0FBQ2d2RSxJQUFJLEVBQUVveUIsSUFBSTtRQUNyQjs7UUFFQSxPQUFPSixhQUFhO0lBQ3hCLENBQUM7O0lBRURBLGFBQWEsQ0FBQ0ssV0FBVyxFQUFFLFNBQVNBLFVBQVUsQ0FBQyxFQUFFO1FBQzdDLE9BQU9KLGNBQWM7SUFDekIsQ0FBQzs7SUFFRCxPQUFPRCxhQUFhO0FBQ3hCLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeE9ILENBQUMsQ0FBQyxRQUFRLENBQUN0aEcsT0FBTyxFQUFFO0lBQ2hCLFlBQVk7SUFDWixHQUFHLENBQUMsT0FBT3dwQyxPQUFPLElBQUksV0FBVyxHQUFHQSxNQUFNLENBQUNDLEdBQUcsRUFBRTtRQUM1Q0QsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUV4cEMsT0FBTyxDQUFDO0lBQy9CLEVBQUUsS0FBSyxHQUFHLENBQUMsT0FBT0UsUUFBUSxJQUFJLFdBQVcsRUFBRTtRQUN2Q0QsTUFBTSxDQUFDQyxRQUFRLEVBQUVGLE9BQU8sQ0FBQzRoRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsRUFBRSxLQUFLO1FBQ0g1aEcsT0FBTyxDQUFDa0QsTUFBTSxDQUFDO0lBQ25COztBQUVKLENBQUMsQ0FBQyxRQUFRLENBQUMwbUMsQ0FBQyxFQUFFO0lBQ1YsWUFBWTtJQUNaLElBQUlpNEQsTUFBTSxFQUFFdmhHLE1BQU0sQ0FBQ3VoRyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztJQUU5QkEsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7O1FBRWhCLElBQUlDLFlBQVksRUFBRSxDQUFDOztRQUVuQixTQUFTRCxLQUFLLENBQUNyekQsT0FBTyxFQUFFbk0sUUFBUSxFQUFFOztZQUU5QixJQUFJcjNCLEVBQUUsRUFBRSxJQUFJLEVBQUUrMkYsWUFBWTs7WUFFMUIvMkYsQ0FBQyxDQUFDdy9ELFNBQVMsRUFBRTtnQkFDVHczQixhQUFhLEVBQUUsSUFBSTtnQkFDbkJDLGNBQWMsRUFBRSxLQUFLO2dCQUNyQkMsWUFBWSxFQUFFdDRELENBQUMsQ0FBQzRFLE9BQU8sQ0FBQztnQkFDeEIyekQsVUFBVSxFQUFFdjRELENBQUMsQ0FBQzRFLE9BQU8sQ0FBQztnQkFDdEJvdEMsTUFBTSxFQUFFLElBQUk7Z0JBQ1p3bUIsUUFBUSxFQUFFLElBQUk7Z0JBQ2RDLFNBQVMsRUFBRSxrRkFBa0Y7Z0JBQzdGQyxTQUFTLEVBQUUsMEVBQTBFO2dCQUNyRi9XLFFBQVEsRUFBRSxLQUFLO2dCQUNmZ1gsYUFBYSxFQUFFLElBQUk7Z0JBQ25CQyxVQUFVLEVBQUUsS0FBSztnQkFDakJDLGFBQWEsRUFBRSxNQUFNO2dCQUNyQkMsT0FBTyxFQUFFLE1BQU07Z0JBQ2ZDLFlBQVksRUFBRSxRQUFRLENBQUNDLE1BQU0sRUFBRXZnRyxDQUFDLEVBQUU7b0JBQzlCLE9BQU91bkMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUNubkMsSUFBSSxDQUFDSixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO2dCQUNEd2dHLElBQUksRUFBRSxLQUFLO2dCQUNYQyxTQUFTLEVBQUUsWUFBWTtnQkFDdkJodUMsU0FBUyxFQUFFLElBQUk7Z0JBQ2ZsL0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCbXRFLFlBQVksRUFBRSxJQUFJO2dCQUNsQnZvRCxJQUFJLEVBQUUsS0FBSztnQkFDWHdvRCxhQUFhLEVBQUUsS0FBSztnQkFDcEJDLGFBQWEsRUFBRSxLQUFLO2dCQUNwQkMsUUFBUSxFQUFFLElBQUk7Z0JBQ2RDLFlBQVksRUFBRSxDQUFDO2dCQUNmQyxRQUFRLEVBQUUsVUFBVTtnQkFDcEJDLFdBQVcsRUFBRSxLQUFLO2dCQUNsQkMsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCQyxZQUFZLEVBQUUsSUFBSTtnQkFDbEJDLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCQyxTQUFTLEVBQUUsUUFBUTtnQkFDbkJDLFVBQVUsRUFBRSxJQUFJO2dCQUNoQkMsSUFBSSxFQUFFLENBQUM7Z0JBQ1BDLEdBQUcsRUFBRSxLQUFLO2dCQUNWbGtDLEtBQUssRUFBRSxFQUFFO2dCQUNUbWtDLFlBQVksRUFBRSxDQUFDO2dCQUNmQyxZQUFZLEVBQUUsQ0FBQztnQkFDZkMsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCdHFFLEtBQUssRUFBRSxHQUFHO2dCQUNWdXFFLEtBQUssRUFBRSxJQUFJO2dCQUNYQyxZQUFZLEVBQUUsS0FBSztnQkFDbkJDLFNBQVMsRUFBRSxJQUFJO2dCQUNmQyxjQUFjLEVBQUUsQ0FBQztnQkFDakJDLE1BQU0sRUFBRSxJQUFJO2dCQUNaQyxZQUFZLEVBQUUsSUFBSTtnQkFDbEJDLGFBQWEsRUFBRSxLQUFLO2dCQUNwQjF3RCxRQUFRLEVBQUUsS0FBSztnQkFDZjJ3RCxlQUFlLEVBQUUsS0FBSztnQkFDdEJDLGNBQWMsRUFBRSxJQUFJO2dCQUNwQnhzRCxNQUFNLEVBQUU7WUFDWixDQUFDOztZQUVEaHRDLENBQUMsQ0FBQ3k1RixTQUFTLEVBQUU7Z0JBQ1RDLFNBQVMsRUFBRSxLQUFLO2dCQUNoQi9oQyxRQUFRLEVBQUUsS0FBSztnQkFDZmdpQyxhQUFhLEVBQUUsSUFBSTtnQkFDbkJDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CQyxXQUFXLEVBQUUsSUFBSTtnQkFDakJDLFlBQVksRUFBRSxDQUFDO2dCQUNmL3FELFNBQVMsRUFBRSxDQUFDO2dCQUNaZ3JELEtBQUssRUFBRSxJQUFJO2dCQUNYQyxTQUFTLEVBQUUsSUFBSTtnQkFDZkMsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCQyxTQUFTLEVBQUUsQ0FBQztnQkFDWkMsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCQyxVQUFVLEVBQUUsSUFBSTtnQkFDaEIvb0IsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCZ3BCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQkMsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCQyxXQUFXLEVBQUUsSUFBSTtnQkFDakJDLE9BQU8sRUFBRSxJQUFJO2dCQUNiQyxPQUFPLEVBQUUsS0FBSztnQkFDZEMsV0FBVyxFQUFFLENBQUM7Z0JBQ2RDLFNBQVMsRUFBRSxJQUFJO2dCQUNmMVYsT0FBTyxFQUFFLEtBQUs7Z0JBQ2RnRSxLQUFLLEVBQUUsSUFBSTtnQkFDWDJSLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ2ZDLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCQyxTQUFTLEVBQUU7WUFDZixDQUFDOztZQUVEbDhELENBQUMsQ0FBQzFrQyxNQUFNLENBQUM4RixDQUFDLEVBQUVBLENBQUMsQ0FBQ3k1RixRQUFRLENBQUM7O1lBRXZCejVGLENBQUMsQ0FBQys2RixpQkFBaUIsRUFBRSxJQUFJO1lBQ3pCLzZGLENBQUMsQ0FBQ2c3RixTQUFTLEVBQUUsSUFBSTtZQUNqQmg3RixDQUFDLENBQUNpN0YsU0FBUyxFQUFFLElBQUk7WUFDakJqN0YsQ0FBQyxDQUFDazdGLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDbEJsN0YsQ0FBQyxDQUFDbTdGLG1CQUFtQixFQUFFLENBQUMsQ0FBQztZQUN6Qm43RixDQUFDLENBQUNvN0YsZUFBZSxFQUFFLEtBQUs7WUFDeEJwN0YsQ0FBQyxDQUFDcTdGLFNBQVMsRUFBRSxLQUFLO1lBQ2xCcjdGLENBQUMsQ0FBQ3M3RixZQUFZLEVBQUUsS0FBSztZQUNyQnQ3RixDQUFDLENBQUNpc0IsT0FBTyxFQUFFLFFBQVE7WUFDbkJqc0IsQ0FBQyxDQUFDdTdGLE9BQU8sRUFBRSxJQUFJO1lBQ2Z2N0YsQ0FBQyxDQUFDdzdGLGFBQWEsRUFBRSxJQUFJO1lBQ3JCeDdGLENBQUMsQ0FBQ3k0RixVQUFVLEVBQUUsSUFBSTtZQUNsQno0RixDQUFDLENBQUN5N0YsU0FBUyxFQUFFLENBQUM7WUFDZHo3RixDQUFDLENBQUMwN0YsWUFBWSxFQUFFLElBQUk7WUFDcEIxN0YsQ0FBQyxDQUFDMjdGLFFBQVEsRUFBRS84RCxDQUFDLENBQUM0RSxPQUFPLENBQUM7WUFDdEJ4akMsQ0FBQyxDQUFDNDdGLGFBQWEsRUFBRSxJQUFJO1lBQ3JCNTdGLENBQUMsQ0FBQzY3RixjQUFjLEVBQUUsSUFBSTtZQUN0Qjc3RixDQUFDLENBQUM4N0YsZUFBZSxFQUFFLElBQUk7WUFDdkI5N0YsQ0FBQyxDQUFDKzdGLGlCQUFpQixFQUFFLGtCQUFrQjtZQUN2Qy83RixDQUFDLENBQUM4OEUsWUFBWSxFQUFFLENBQUM7WUFDakI5OEUsQ0FBQyxDQUFDZzhGLFlBQVksRUFBRSxJQUFJOztZQUVwQmpGLGFBQWEsRUFBRW40RCxDQUFDLENBQUM0RSxPQUFPLENBQUMsQ0FBQ250QixJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztZQUU3Q3JXLENBQUMsQ0FBQzdGLFFBQVEsRUFBRXlrQyxDQUFDLENBQUMxa0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFOEYsQ0FBQyxDQUFDdy9ELFFBQVEsRUFBRW5vQyxRQUFRLEVBQUUwL0QsWUFBWSxDQUFDOztZQUU1RC8yRixDQUFDLENBQUM4NUYsYUFBYSxFQUFFOTVGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ2crRixZQUFZOztZQUV2Q240RixDQUFDLENBQUMyN0IsaUJBQWlCLEVBQUUzN0IsQ0FBQyxDQUFDN0YsT0FBTzs7WUFFOUIsR0FBRyxDQUFDLE9BQU9oRixRQUFRLENBQUM4bUcsVUFBVSxJQUFJLFdBQVcsRUFBRTtnQkFDM0NqOEYsQ0FBQyxDQUFDaXNCLE9BQU8sRUFBRSxXQUFXO2dCQUN0QmpzQixDQUFDLENBQUMrN0YsaUJBQWlCLEVBQUUscUJBQXFCO1lBQzlDLEVBQUUsS0FBSyxHQUFHLENBQUMsT0FBTzVtRyxRQUFRLENBQUMrbUcsYUFBYSxJQUFJLFdBQVcsRUFBRTtnQkFDckRsOEYsQ0FBQyxDQUFDaXNCLE9BQU8sRUFBRSxjQUFjO2dCQUN6QmpzQixDQUFDLENBQUMrN0YsaUJBQWlCLEVBQUUsd0JBQXdCO1lBQ2pEOztZQUVBLzdGLENBQUMsQ0FBQ204RixTQUFTLEVBQUV2OUQsQ0FBQyxDQUFDVixLQUFLLENBQUNsK0IsQ0FBQyxDQUFDbThGLFFBQVEsRUFBRW44RixDQUFDLENBQUM7WUFDbkNBLENBQUMsQ0FBQ284RixjQUFjLEVBQUV4OUQsQ0FBQyxDQUFDVixLQUFLLENBQUNsK0IsQ0FBQyxDQUFDbzhGLGFBQWEsRUFBRXA4RixDQUFDLENBQUM7WUFDN0NBLENBQUMsQ0FBQ3E4RixpQkFBaUIsRUFBRXo5RCxDQUFDLENBQUNWLEtBQUssQ0FBQ2wrQixDQUFDLENBQUNxOEYsZ0JBQWdCLEVBQUVyOEYsQ0FBQyxDQUFDO1lBQ25EQSxDQUFDLENBQUNzOEYsWUFBWSxFQUFFMTlELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQ3M4RixXQUFXLEVBQUV0OEYsQ0FBQyxDQUFDO1lBQ3pDQSxDQUFDLENBQUN1OEYsYUFBYSxFQUFFMzlELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQ3U4RixZQUFZLEVBQUV2OEYsQ0FBQyxDQUFDO1lBQzNDQSxDQUFDLENBQUN3OEYsY0FBYyxFQUFFNTlELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQ3c4RixhQUFhLEVBQUV4OEYsQ0FBQyxDQUFDO1lBQzdDQSxDQUFDLENBQUN5OEYsWUFBWSxFQUFFNzlELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQ3k4RixXQUFXLEVBQUV6OEYsQ0FBQyxDQUFDO1lBQ3pDQSxDQUFDLENBQUMwOEYsYUFBYSxFQUFFOTlELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQzA4RixZQUFZLEVBQUUxOEYsQ0FBQyxDQUFDO1lBQzNDQSxDQUFDLENBQUMyOEYsWUFBWSxFQUFFLzlELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQzI4RixXQUFXLEVBQUUzOEYsQ0FBQyxDQUFDO1lBQ3pDQSxDQUFDLENBQUM0OEYsV0FBVyxFQUFFaCtELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQzQ4RixVQUFVLEVBQUU1OEYsQ0FBQyxDQUFDOztZQUV2Q0EsQ0FBQyxDQUFDODJGLFlBQVksRUFBRUEsV0FBVyxFQUFFOzs7OztZQUs3QjkyRixDQUFDLENBQUM2OEYsU0FBUyxFQUFFLDJCQUEyQjs7O1lBR3hDNzhGLENBQUMsQ0FBQzg4RixtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZCOThGLENBQUMsQ0FBQzFILElBQUksQ0FBQyxJQUFJLENBQUM7O1FBRWhCOztRQUVBLE9BQU91K0YsS0FBSzs7SUFFaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFSkEsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3VrRyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDckMsSUFBSS84RixFQUFFLEVBQUUsSUFBSTs7UUFFWkEsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ3QxRixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUN1QixJQUFJLENBQUM7WUFDckMsYUFBYSxFQUFFO1FBQ25CLENBQUMsQ0FBQyxDQUFDdkIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUN1QixJQUFJLENBQUM7WUFDckMsVUFBVSxFQUFFO1FBQ2hCLENBQUMsQ0FBQzs7SUFFTixDQUFDOztJQUVEcXdGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUN3a0csU0FBUyxFQUFFbkcsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3lrRyxTQUFTLEVBQUUsUUFBUSxDQUFDQyxNQUFNLEVBQUVodUYsS0FBSyxFQUFFaXVGLFNBQVMsRUFBRTs7UUFFckYsSUFBSW45RixFQUFFLEVBQUUsSUFBSTs7UUFFWixHQUFHLENBQUMsTUFBTSxDQUFDa1AsS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFO1lBQzdCaXVGLFVBQVUsRUFBRWp1RixLQUFLO1lBQ2pCQSxNQUFNLEVBQUUsSUFBSTtRQUNoQixFQUFFLEtBQUssR0FBRyxDQUFDQSxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUNBLE1BQU0sR0FBR2xQLENBQUMsQ0FBQ3E2RixVQUFVLENBQUMsRUFBRTtZQUM3QyxPQUFPLEtBQUs7UUFDaEI7O1FBRUFyNkYsQ0FBQyxDQUFDbzlGLE1BQU0sQ0FBQyxDQUFDOztRQUVWLEdBQUcsQ0FBQyxNQUFNLENBQUNsdUYsS0FBSyxFQUFFLElBQUksUUFBUSxFQUFFO1lBQzVCLEdBQUcsQ0FBQ0EsTUFBTSxJQUFJLEVBQUUsR0FBR2xQLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM3aEcsT0FBTyxJQUFJLENBQUMsRUFBRTtnQkFDdkNpbUMsQ0FBQyxDQUFDcytELE1BQU0sQ0FBQyxDQUFDcDRFLFFBQVEsQ0FBQzlrQixDQUFDLENBQUN1NkYsV0FBVyxDQUFDO1lBQ3JDLEVBQUUsS0FBSyxHQUFHLENBQUM0QyxTQUFTLEVBQUU7Z0JBQ2xCditELENBQUMsQ0FBQ3MrRCxNQUFNLENBQUMsQ0FBQ3o0RSxZQUFZLENBQUN6a0IsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdnRyxFQUFFLENBQUN1VixLQUFLLENBQUMsQ0FBQztZQUMvQyxFQUFFLEtBQUs7Z0JBQ0gwdkIsQ0FBQyxDQUFDcytELE1BQU0sQ0FBQyxDQUFDbDRFLFdBQVcsQ0FBQ2hsQixDQUFDLENBQUN3NkYsT0FBTyxDQUFDN2dHLEVBQUUsQ0FBQ3VWLEtBQUssQ0FBQyxDQUFDO1lBQzlDO1FBQ0osRUFBRSxLQUFLO1lBQ0gsR0FBRyxDQUFDaXVGLFVBQVUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCditELENBQUMsQ0FBQ3MrRCxNQUFNLENBQUMsQ0FBQ240RSxTQUFTLENBQUMva0IsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQztZQUN0QyxFQUFFLEtBQUs7Z0JBQ0gzN0QsQ0FBQyxDQUFDcytELE1BQU0sQ0FBQyxDQUFDcDRFLFFBQVEsQ0FBQzlrQixDQUFDLENBQUN1NkYsV0FBVyxDQUFDO1lBQ3JDO1FBQ0o7O1FBRUF2NkYsQ0FBQyxDQUFDdzZGLFFBQVEsRUFBRXg2RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDNXJGLFFBQVEsQ0FBQyxJQUFJLENBQUN4VSxPQUFPLENBQUN1NkQsS0FBSyxDQUFDOztRQUV0RDEwRCxDQUFDLENBQUN1NkYsV0FBVyxDQUFDNXJGLFFBQVEsQ0FBQyxJQUFJLENBQUN4VSxPQUFPLENBQUN1NkQsS0FBSyxDQUFDLENBQUNwd0MsTUFBTSxDQUFDLENBQUM7O1FBRW5EdGtCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUNoMkUsTUFBTSxDQUFDdmtCLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM7O1FBRS9CeDZGLENBQUMsQ0FBQ3c2RixPQUFPLENBQUNwaEcsSUFBSSxDQUFDLFFBQVEsQ0FBQzhWLEtBQUssRUFBRXMwQixPQUFPLEVBQUU7WUFDcEM1RSxDQUFDLENBQUM0RSxPQUFPLENBQUMsQ0FBQ2g5QixJQUFJLENBQUMsa0JBQWtCLEVBQUUwSSxLQUFLLENBQUM7UUFDOUMsQ0FBQyxDQUFDOztRQUVGbFAsQ0FBQyxDQUFDNDdGLGFBQWEsRUFBRTU3RixDQUFDLENBQUN3NkYsT0FBTzs7UUFFMUJ4NkYsQ0FBQyxDQUFDcTlGLE1BQU0sQ0FBQyxDQUFDOztJQUVkLENBQUM7O0lBRUR4RyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDOGtHLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUN2QyxJQUFJdDlGLEVBQUUsRUFBRSxJQUFJO1FBQ1osR0FBRyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxJQUFJLEVBQUUsR0FBRzk0RixDQUFDLENBQUM3RixPQUFPLENBQUM4OEYsZUFBZSxJQUFJLEtBQUssR0FBR2ozRixDQUFDLENBQUM3RixPQUFPLENBQUN5dUMsU0FBUyxJQUFJLEtBQUssRUFBRTtZQUNuRyxJQUFJUCxhQUFhLEVBQUVyb0MsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdnRyxFQUFFLENBQUNxRyxDQUFDLENBQUM4NUYsWUFBWSxDQUFDLENBQUNsekQsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNqRTVtQyxDQUFDLENBQUNpcEYsS0FBSyxDQUFDbjZELE9BQU8sQ0FBQztnQkFDWnRDLE1BQU0sRUFBRTZiO1lBQ1osQ0FBQyxFQUFFcm9DLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3MwQixLQUFLLENBQUM7UUFDdkI7SUFDSixDQUFDOztJQUVEb29FLEtBQUssQ0FBQ3IrRixTQUFTLENBQUMra0csYUFBYSxFQUFFLFFBQVEsQ0FBQ0MsVUFBVSxFQUFFbmtHLFFBQVEsRUFBRTs7UUFFMUQsSUFBSW9rRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2R6OUYsRUFBRSxFQUFFLElBQUk7O1FBRVpBLENBQUMsQ0FBQ3M5RixhQUFhLENBQUMsQ0FBQzs7UUFFakIsR0FBRyxDQUFDdDlGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3krRixJQUFJLElBQUksS0FBSyxHQUFHNTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3l1QyxTQUFTLElBQUksS0FBSyxFQUFFO1lBQ3hENDBELFdBQVcsRUFBRSxDQUFDQSxVQUFVO1FBQzVCO1FBQ0EsR0FBRyxDQUFDeDlGLENBQUMsQ0FBQzY2RixrQkFBa0IsSUFBSSxLQUFLLEVBQUU7WUFDL0IsR0FBRyxDQUFDNzZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3l1QyxTQUFTLElBQUksS0FBSyxFQUFFO2dCQUM5QjVvQyxDQUFDLENBQUN1NkYsV0FBVyxDQUFDenJFLE9BQU8sQ0FBQztvQkFDbEI1RSxJQUFJLEVBQUVzekU7Z0JBQ1YsQ0FBQyxFQUFFeDlGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3MwQixLQUFLLEVBQUV6dUIsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeXdCLE1BQU0sRUFBRXZ4QixRQUFRLENBQUM7WUFDbkQsRUFBRSxLQUFLO2dCQUNIMkcsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ3pyRSxPQUFPLENBQUM7b0JBQ2xCdHFCLEdBQUcsRUFBRWc1RjtnQkFDVCxDQUFDLEVBQUV4OUYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDczBCLEtBQUssRUFBRXp1QixDQUFDLENBQUM3RixPQUFPLENBQUN5d0IsTUFBTSxFQUFFdnhCLFFBQVEsQ0FBQztZQUNuRDs7UUFFSixFQUFFLEtBQUs7O1lBRUgsR0FBRyxDQUFDMkcsQ0FBQyxDQUFDbzdGLGVBQWUsSUFBSSxLQUFLLEVBQUU7Z0JBQzVCLEdBQUcsQ0FBQ3A3RixDQUFDLENBQUM3RixPQUFPLENBQUN5K0YsSUFBSSxJQUFJLElBQUksRUFBRTtvQkFDeEI1NEYsQ0FBQyxDQUFDNjVGLFlBQVksRUFBRSxDQUFDLENBQUM3NUYsQ0FBQyxDQUFDNjVGLFdBQVcsQ0FBQztnQkFDcEM7Z0JBQ0FqN0QsQ0FBQyxDQUFDO29CQUNFOCtELFNBQVMsRUFBRTE5RixDQUFDLENBQUM2NUY7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDL3FFLE9BQU8sQ0FBQztvQkFDUDR1RSxTQUFTLEVBQUVGO2dCQUNmLENBQUMsRUFBRTtvQkFDQ3Z5RSxRQUFRLEVBQUVqckIsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDczBCLEtBQUs7b0JBQ3pCN0QsTUFBTSxFQUFFNXFCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3l3QixNQUFNO29CQUN4Qk8sSUFBSSxFQUFFLFFBQVEsQ0FBQzlLLEdBQUcsRUFBRTt3QkFDaEJBLElBQUksRUFBRXRsQixJQUFJLENBQUNxdUIsSUFBSSxDQUFDL0ksR0FBRyxDQUFDO3dCQUNwQixHQUFHLENBQUNyZ0IsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeXVDLFNBQVMsSUFBSSxLQUFLLEVBQUU7NEJBQzlCNjBELFNBQVMsQ0FBQ3o5RixDQUFDLENBQUNnN0YsUUFBUSxFQUFFLEVBQUUsYUFBYTtnQ0FDakMzNkUsSUFBSSxFQUFFLFVBQVU7NEJBQ3BCcmdCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUNqaUYsR0FBRyxDQUFDbWxGLFNBQVMsQ0FBQzt3QkFDaEMsRUFBRSxLQUFLOzRCQUNIQSxTQUFTLENBQUN6OUYsQ0FBQyxDQUFDZzdGLFFBQVEsRUFBRSxFQUFFLGlCQUFpQjtnQ0FDckMzNkUsSUFBSSxFQUFFLEtBQUs7NEJBQ2ZyZ0IsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ2ppRixHQUFHLENBQUNtbEYsU0FBUyxDQUFDO3dCQUNoQztvQkFDSixDQUFDO29CQUNEcHZFLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTt3QkFDakIsR0FBRyxDQUFDaDFCLFFBQVEsRUFBRTs0QkFDVkEsUUFBUSxDQUFDL0MsSUFBSSxDQUFDLENBQUM7d0JBQ25CO29CQUNKO2dCQUNKLENBQUMsQ0FBQzs7WUFFTixFQUFFLEtBQUs7O2dCQUVIMEosQ0FBQyxDQUFDMjlGLGVBQWUsQ0FBQyxDQUFDO2dCQUNuQkgsV0FBVyxFQUFFemlHLElBQUksQ0FBQ3F1QixJQUFJLENBQUNvMEUsVUFBVSxDQUFDOztnQkFFbEMsR0FBRyxDQUFDeDlGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3l1QyxTQUFTLElBQUksS0FBSyxFQUFFO29CQUM5QjYwRCxTQUFTLENBQUN6OUYsQ0FBQyxDQUFDZzdGLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRXdDLFdBQVcsRUFBRSxlQUFlO2dCQUN6RSxFQUFFLEtBQUs7b0JBQ0hDLFNBQVMsQ0FBQ3o5RixDQUFDLENBQUNnN0YsUUFBUSxFQUFFLEVBQUUsbUJBQW1CLEVBQUV3QyxXQUFXLEVBQUUsVUFBVTtnQkFDeEU7Z0JBQ0F4OUYsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ2ppRixHQUFHLENBQUNtbEYsU0FBUyxDQUFDOztnQkFFNUIsR0FBRyxDQUFDcGtHLFFBQVEsRUFBRTtvQkFDVnNhLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTs7d0JBRWxCM1QsQ0FBQyxDQUFDNDlGLGlCQUFpQixDQUFDLENBQUM7O3dCQUVyQnZrRyxRQUFRLENBQUMvQyxJQUFJLENBQUMsQ0FBQztvQkFDbkIsQ0FBQyxFQUFFMEosQ0FBQyxDQUFDN0YsT0FBTyxDQUFDczBCLEtBQUssQ0FBQztnQkFDdkI7O1lBRUo7O1FBRUo7O0lBRUosQ0FBQzs7SUFFRG9vRSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDcWxHLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFdEMsSUFBSTc5RixFQUFFLEVBQUUsSUFBSTtZQUNSbzNGLFNBQVMsRUFBRXAzRixDQUFDLENBQUM3RixPQUFPLENBQUNpOUYsUUFBUTs7UUFFakMsR0FBRyxFQUFFQSxTQUFTLEdBQUdBLFNBQVMsSUFBSSxLQUFLLEVBQUU7WUFDakNBLFNBQVMsRUFBRXg0RCxDQUFDLENBQUN3NEQsUUFBUSxDQUFDLENBQUNqcEYsR0FBRyxDQUFDbk8sQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQztRQUN6Qzs7UUFFQSxPQUFPdkUsUUFBUTs7SUFFbkIsQ0FBQzs7SUFFRFAsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzQrRixTQUFTLEVBQUUsUUFBUSxDQUFDbG9GLEtBQUssRUFBRTs7UUFFdkMsSUFBSWxQLEVBQUUsRUFBRSxJQUFJO1lBQ1JvM0YsU0FBUyxFQUFFcDNGLENBQUMsQ0FBQzY5RixZQUFZLENBQUMsQ0FBQzs7UUFFL0IsR0FBRyxFQUFFekcsU0FBUyxJQUFJLEtBQUssR0FBRyxPQUFPQSxTQUFTLElBQUksU0FBUyxFQUFFO1lBQ3JEQSxRQUFRLENBQUNoK0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNyQixJQUFJb0IsT0FBTyxFQUFFb2tDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2svRCxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxFQUFFLENBQUMsQ0FBQ3RqRyxNQUFNLENBQUNzZ0csU0FBUyxFQUFFO29CQUNsQnRnRyxNQUFNLENBQUN1akcsWUFBWSxDQUFDN3VGLEtBQUssRUFBRSxJQUFJLENBQUM7Z0JBQ3BDO1lBQ0osQ0FBQyxDQUFDO1FBQ047O0lBRUosQ0FBQzs7SUFFRDJuRixLQUFLLENBQUNyK0YsU0FBUyxDQUFDbWxHLGdCQUFnQixFQUFFLFFBQVEsQ0FBQ2pwQyxLQUFLLEVBQUU7O1FBRTlDLElBQUkxMEQsRUFBRSxFQUFFLElBQUk7WUFDUndxQyxXQUFXLEVBQUUsQ0FBQyxDQUFDOztRQUVuQixHQUFHLENBQUN4cUMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTFDLEtBQUssSUFBSSxLQUFLLEVBQUU7WUFDMUJoRixVQUFVLENBQUN4cUMsQ0FBQyxDQUFDODdGLGNBQWMsRUFBRSxFQUFFOTdGLENBQUMsQ0FBQzY3RixjQUFjLEVBQUUsSUFBSSxFQUFFNzdGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3MwQixNQUFNLEVBQUUsTUFBTSxFQUFFenVCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3U5RixPQUFPO1FBQ3RHLEVBQUUsS0FBSztZQUNIbHRELFVBQVUsQ0FBQ3hxQyxDQUFDLENBQUM4N0YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFOTdGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3MwQixNQUFNLEVBQUUsTUFBTSxFQUFFenVCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3U5RixPQUFPO1FBQzNGOztRQUVBLEdBQUcsQ0FBQzEzRixDQUFDLENBQUM3RixPQUFPLENBQUNxMUMsS0FBSyxJQUFJLEtBQUssRUFBRTtZQUMxQnh2QyxDQUFDLENBQUN1NkYsV0FBVyxDQUFDamlGLEdBQUcsQ0FBQ2t5QixVQUFVLENBQUM7UUFDakMsRUFBRSxLQUFLO1lBQ0h4cUMsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdnRyxFQUFFLENBQUMrNkQsS0FBSyxDQUFDLENBQUNwOEMsR0FBRyxDQUFDa3lCLFVBQVUsQ0FBQztRQUN2Qzs7SUFFSixDQUFDOztJQUVEcXNELEtBQUssQ0FBQ3IrRixTQUFTLENBQUMyakcsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVsQyxJQUFJbjhGLEVBQUUsRUFBRSxJQUFJOztRQUVaQSxDQUFDLENBQUNvOEYsYUFBYSxDQUFDLENBQUM7O1FBRWpCLEdBQUcsRUFBRXA4RixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUU7WUFDekM5NEYsQ0FBQyxDQUFDMjVGLGNBQWMsRUFBRXQ4QixXQUFXLEVBQUVyOUQsQ0FBQyxDQUFDcThGLGdCQUFnQixFQUFFcjhGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ285RixjQUFjLENBQUM7UUFDaEY7O0lBRUosQ0FBQzs7SUFFRFYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzRqRyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXZDLElBQUlwOEYsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUMyNUYsYUFBYSxFQUFFO1lBQ2pCcjhCLGFBQWEsQ0FBQ3Q5RCxDQUFDLENBQUMyNUYsYUFBYSxDQUFDO1FBQ2xDOztJQUVKLENBQUM7O0lBRUQ5QyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDNmpHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUUxQyxJQUFJcjhGLEVBQUUsRUFBRSxJQUFJO1lBQ1JnK0YsUUFBUSxFQUFFaCtGLENBQUMsQ0FBQzg1RixhQUFhLEVBQUU5NUYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGNBQWM7O1FBRXZELEdBQUcsRUFBRSxDQUFDLzRGLENBQUMsQ0FBQ3U3RixPQUFPLEdBQUcsQ0FBQ3Y3RixDQUFDLENBQUNzN0YsWUFBWSxHQUFHLENBQUN0N0YsQ0FBQyxDQUFDcTdGLFNBQVMsRUFBRTs7WUFFOUMsR0FBRyxFQUFFcjdGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQys5RixTQUFTLElBQUksTUFBTSxFQUFFOztnQkFFaEMsR0FBRyxFQUFFbDRGLENBQUMsQ0FBQyt1QyxVQUFVLElBQUksRUFBRSxHQUFHLEVBQUUvdUMsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFOTVGLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUU7b0JBQ3ZFcjZGLENBQUMsQ0FBQyt1QyxVQUFVLEVBQUUsQ0FBQztnQkFDbkI7O2dCQUVBLEtBQUssR0FBRyxFQUFFL3VDLENBQUMsQ0FBQyt1QyxVQUFVLElBQUksRUFBRSxFQUFFOztvQkFFMUJpdkQsUUFBUSxFQUFFaCtGLENBQUMsQ0FBQzg1RixhQUFhLEVBQUU5NUYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGNBQWM7O29CQUVuRCxHQUFHLEVBQUUvNEYsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO3dCQUM1Qjk1RixDQUFDLENBQUMrdUMsVUFBVSxFQUFFLENBQUM7b0JBQ25COztnQkFFSjs7WUFFSjs7WUFFQS91QyxDQUFDLENBQUMrOUYsWUFBWSxFQUFFQyxRQUFRLENBQUM7O1FBRTdCOztJQUVKLENBQUM7O0lBRURuSCxLQUFLLENBQUNyK0YsU0FBUyxDQUFDeWxHLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFckMsSUFBSWorRixFQUFFLEVBQUUsSUFBSTs7UUFFWixHQUFHLENBQUNBLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3kyRSxPQUFPLElBQUksS0FBSyxFQUFFOztZQUU1QjV3RSxDQUFDLENBQUNvNkYsV0FBVyxFQUFFeDdELENBQUMsQ0FBQzUrQixDQUFDLENBQUM3RixPQUFPLENBQUNrOUYsU0FBUyxDQUFDLENBQUNobUUsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUM3RHJ4QixDQUFDLENBQUNtNkYsV0FBVyxFQUFFdjdELENBQUMsQ0FBQzUrQixDQUFDLENBQUM3RixPQUFPLENBQUNtOUYsU0FBUyxDQUFDLENBQUNqbUUsUUFBUSxDQUFDLGFBQWEsQ0FBQzs7WUFFN0QsRUFBRSxFQUFFcnhCLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRTs7Z0JBRXhDOTRGLENBQUMsQ0FBQ282RixVQUFVLENBQUMxb0UsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDckIsVUFBVSxDQUFDLHNCQUFzQixDQUFDO2dCQUMzRXJ3QixDQUFDLENBQUNtNkYsVUFBVSxDQUFDem9FLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQ3JCLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQzs7Z0JBRTNFLEdBQUcsQ0FBQ3J3QixDQUFDLENBQUM2OEYsUUFBUSxDQUFDMTZGLElBQUksQ0FBQ25DLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ2s5RixTQUFTLENBQUMsRUFBRTtvQkFDdENyM0YsQ0FBQyxDQUFDbzZGLFVBQVUsQ0FBQ3IxRSxTQUFTLENBQUMva0IsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzhGLFlBQVksQ0FBQztnQkFDbEQ7O2dCQUVBLEdBQUcsQ0FBQ2wzRixDQUFDLENBQUM2OEYsUUFBUSxDQUFDMTZGLElBQUksQ0FBQ25DLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ205RixTQUFTLENBQUMsRUFBRTtvQkFDdEN0M0YsQ0FBQyxDQUFDbTZGLFVBQVUsQ0FBQ3IxRSxRQUFRLENBQUM5a0IsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzhGLFlBQVksQ0FBQztnQkFDakQ7O2dCQUVBLEdBQUcsQ0FBQ2wzRixDQUFDLENBQUM3RixPQUFPLENBQUMrOUYsU0FBUyxJQUFJLElBQUksRUFBRTtvQkFDN0JsNEYsQ0FBQyxDQUFDbzZGO3dCQUNFLENBQUMvb0UsUUFBUSxDQUFDLGdCQUFnQjt3QkFDMUIsQ0FBQzdxQixJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQztnQkFDdEM7O1lBRUosRUFBRSxLQUFLOztnQkFFSHhHLENBQUMsQ0FBQ282RixVQUFVLENBQUNockYsR0FBRyxFQUFFcFAsQ0FBQyxDQUFDbTZGLFdBQVc7O29CQUUzQixDQUFDOW9FLFFBQVEsQ0FBQyxjQUFjO29CQUN4QixDQUFDN3FCLElBQUksQ0FBQzt3QkFDRixlQUFlLEVBQUUsTUFBTTt3QkFDdkIsVUFBVSxFQUFFO29CQUNoQixDQUFDLENBQUM7O1lBRVY7O1FBRUo7O0lBRUosQ0FBQzs7SUFFRHF3RixLQUFLLENBQUNyK0YsU0FBUyxDQUFDMGxHLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFbkMsSUFBSWwrRixFQUFFLEVBQUUsSUFBSTtZQUNSM0ksQ0FBQyxFQUFFOG1HLEdBQUc7O1FBRVYsR0FBRyxDQUFDbitGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzA5RixLQUFLLElBQUksS0FBSyxHQUFHNzNGLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTs7WUFFbEU5NEYsQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ3RxRSxRQUFRLENBQUMsY0FBYyxDQUFDOztZQUVsQzhzRSxJQUFJLEVBQUV2L0QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDdk4sUUFBUSxDQUFDcnhCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzI5RixTQUFTLENBQUM7O1lBRS9DLElBQUksQ0FBQ3pnRyxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEdBQUcySSxDQUFDLENBQUNvK0YsV0FBVyxDQUFDLENBQUMsRUFBRS9tRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QzhtRyxHQUFHLENBQUM1NUUsTUFBTSxDQUFDcWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDcmEsTUFBTSxDQUFDdmtCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3c5RixZQUFZLENBQUNyaEcsSUFBSSxDQUFDLElBQUksRUFBRTBKLENBQUMsRUFBRTNJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0U7O1lBRUEySSxDQUFDLENBQUMrNUYsTUFBTSxFQUFFb0UsR0FBRyxDQUFDcjVFLFFBQVEsQ0FBQzlrQixDQUFDLENBQUM3RixPQUFPLENBQUNnOUYsVUFBVSxDQUFDOztZQUU1Q24zRixDQUFDLENBQUMrNUYsS0FBSyxDQUFDOTBGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQ3ZMLEtBQUssQ0FBQyxDQUFDLENBQUMyM0IsUUFBUSxDQUFDLGNBQWMsQ0FBQzs7UUFFdkQ7O0lBRUosQ0FBQzs7SUFFRHdsRSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDNmxHLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFbEMsSUFBSXIrRixFQUFFLEVBQUUsSUFBSTs7UUFFWkEsQ0FBQyxDQUFDdzZGLFFBQVE7WUFDTng2RixDQUFDLENBQUMyN0Y7Z0JBQ0UsQ0FBQ2h0RixRQUFRLEVBQUUzTyxDQUFDLENBQUM3RixPQUFPLENBQUN1NkQsTUFBTSxFQUFFLHFCQUFxQjtnQkFDbEQsQ0FBQ3JqQyxRQUFRLENBQUMsYUFBYSxDQUFDOztRQUVoQ3J4QixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM3aEcsTUFBTTs7UUFFL0JxSCxDQUFDLENBQUN3NkYsT0FBTyxDQUFDcGhHLElBQUksQ0FBQyxRQUFRLENBQUM4VixLQUFLLEVBQUVzMEIsT0FBTyxFQUFFO1lBQ3BDNUUsQ0FBQyxDQUFDNEUsT0FBTztnQkFDTCxDQUFDaDlCLElBQUksQ0FBQyxrQkFBa0IsRUFBRTBJLEtBQUs7Z0JBQy9CLENBQUNtSCxJQUFJLENBQUMsaUJBQWlCLEVBQUV1b0IsQ0FBQyxDQUFDNEUsT0FBTyxDQUFDLENBQUNoOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNoRSxDQUFDLENBQUM7O1FBRUZ4RyxDQUFDLENBQUMyN0YsT0FBTyxDQUFDdHFFLFFBQVEsQ0FBQyxjQUFjLENBQUM7O1FBRWxDcnhCLENBQUMsQ0FBQ3U2RixZQUFZLEVBQUUsQ0FBQ3Y2RixDQUFDLENBQUNxNkYsV0FBVyxJQUFJLENBQUMsRUFBRTtZQUNqQ3o3RCxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQzlaLFFBQVEsQ0FBQzlrQixDQUFDLENBQUMyN0YsT0FBTyxFQUFFO1lBQ3BEMzdGLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM3Z0UsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUNweEIsTUFBTSxDQUFDLENBQUM7O1FBRTVEdkksQ0FBQyxDQUFDaXBGLE1BQU0sRUFBRWpwRixDQUFDLENBQUN1NkYsV0FBVyxDQUFDcC9FLElBQUk7WUFDeEIsMkJBQTJCLENBQUMsQ0FBQzVTLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDdkksQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ2ppRixHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzs7UUFFL0IsR0FBRyxDQUFDdFksQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxLQUFLLEdBQUd4M0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDOCtGLGFBQWEsSUFBSSxJQUFJLEVBQUU7WUFDbEVqNUYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGVBQWUsRUFBRSxDQUFDO1FBQ2hDOztRQUVBbjZELENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTUrQixDQUFDLENBQUMyN0YsT0FBTyxDQUFDLENBQUN4dEYsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDa2pCLFFBQVEsQ0FBQyxlQUFlLENBQUM7O1FBRXJFcnhCLENBQUMsQ0FBQ3MrRixhQUFhLENBQUMsQ0FBQzs7UUFFakJ0K0YsQ0FBQyxDQUFDaStGLFdBQVcsQ0FBQyxDQUFDOztRQUVmaitGLENBQUMsQ0FBQ2srRixTQUFTLENBQUMsQ0FBQzs7UUFFYmwrRixDQUFDLENBQUN1K0YsVUFBVSxDQUFDLENBQUM7OztRQUdkditGLENBQUMsQ0FBQ3crRixlQUFlLENBQUMsT0FBT3grRixDQUFDLENBQUM4NUYsYUFBYSxJQUFJLFNBQVMsRUFBRTk1RixDQUFDLENBQUM4NUYsYUFBYSxFQUFFLENBQUMsQ0FBQzs7UUFFMUUsR0FBRyxDQUFDOTVGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzJ2RCxVQUFVLElBQUksSUFBSSxFQUFFO1lBQzlCOXBELENBQUMsQ0FBQ2lwRixLQUFLLENBQUM1M0QsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUNqQzs7SUFFSixDQUFDOztJQUVEd2xFLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNpbUcsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVuQyxJQUFJeitGLEVBQUUsRUFBRSxJQUFJLEVBQUUxQixDQUFDLEVBQUVDLENBQUMsRUFBRTJuQyxDQUFDLEVBQUV3NEQsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLGNBQWMsQ0FBQ0MsZ0JBQWdCOztRQUU5RUgsVUFBVSxFQUFFdnBHLFFBQVEsQ0FBQ21tQixzQkFBc0IsQ0FBQyxDQUFDO1FBQzdDc2pGLGVBQWUsRUFBRTUrRixDQUFDLENBQUMyN0YsT0FBTyxDQUFDaHRGLFFBQVEsQ0FBQyxDQUFDOztRQUVyQyxFQUFFLENBQUMzTyxDQUFDLENBQUM3RixPQUFPLENBQUN3K0YsS0FBSyxFQUFFLENBQUMsRUFBRTs7WUFFbkJrRyxpQkFBaUIsRUFBRTcrRixDQUFDLENBQUM3RixPQUFPLENBQUMwK0YsYUFBYSxFQUFFNzRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3crRixJQUFJO1lBQzFEZ0csWUFBWSxFQUFFNWpHLElBQUksQ0FBQ3F1QixJQUFJO2dCQUNuQncxRSxjQUFjLENBQUNqbUcsT0FBTyxFQUFFa21HO1lBQzVCLENBQUM7O1lBRUQsR0FBRyxDQUFDdmdHLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRXFnRyxXQUFXLEVBQUVyZ0csQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUlvMkQsTUFBTSxFQUFFdi9ELFFBQVEsQ0FBQ3FDLGFBQWEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pDLEdBQUcsQ0FBQytHLEVBQUUsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRXlCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3crRixJQUFJLEVBQUVwNkYsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hDLElBQUl1Z0csSUFBSSxFQUFFM3BHLFFBQVEsQ0FBQ3FDLGFBQWEsQ0FBQyxLQUFLLENBQUM7b0JBQ3ZDLEdBQUcsQ0FBQzB1QyxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUVsbUMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMCtGLFlBQVksRUFBRTN5RCxDQUFDLEVBQUUsRUFBRTt3QkFDeEMsSUFBSTFyQyxPQUFPLEVBQUUsQ0FBQzhELEVBQUUsRUFBRXVnRyxpQkFBaUIsRUFBRSxDQUFDLENBQUN0Z0csRUFBRSxFQUFFeUIsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMCtGLFlBQVksRUFBRSxFQUFFM3lELENBQUMsQ0FBQyxDQUFDO3dCQUN4RSxHQUFHLENBQUMwNEQsY0FBYyxDQUFDL2xHLEdBQUcsQ0FBQzJCLE1BQU0sQ0FBQyxFQUFFOzRCQUM1QnNrRyxHQUFHLENBQUNqbkcsV0FBVyxDQUFDK21HLGNBQWMsQ0FBQy9sRyxHQUFHLENBQUMyQixNQUFNLENBQUMsQ0FBQzt3QkFDL0M7b0JBQ0o7b0JBQ0FrNkQsS0FBSyxDQUFDNzhELFdBQVcsQ0FBQ2luRyxHQUFHLENBQUM7Z0JBQzFCO2dCQUNBSixTQUFTLENBQUM3bUcsV0FBVyxDQUFDNjhELEtBQUssQ0FBQztZQUNoQzs7WUFFQTEwRCxDQUFDLENBQUMyN0YsT0FBTyxDQUFDN3FGLEtBQUssQ0FBQyxDQUFDLENBQUN5VCxNQUFNLENBQUNtNkUsU0FBUyxDQUFDO1lBQ25DMStGLENBQUMsQ0FBQzI3RixPQUFPLENBQUNodEYsUUFBUSxDQUFDLENBQUMsQ0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQ0EsUUFBUSxDQUFDO2dCQUNyQyxDQUFDMkosR0FBRyxDQUFDO29CQUNELE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRXRZLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzArRixZQUFZLEVBQUUsRUFBRSxHQUFHO29CQUM1QyxTQUFTLEVBQUU7Z0JBQ2YsQ0FBQyxDQUFDOztRQUVWOztJQUVKLENBQUM7O0lBRURoQyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDdW1HLGdCQUFnQixFQUFFLFFBQVEsQ0FBQy9sRixPQUFPLEVBQUVnbUYsV0FBVyxFQUFFOztRQUU3RCxJQUFJaC9GLEVBQUUsRUFBRSxJQUFJO1lBQ1JpL0YsVUFBVSxFQUFFQyxnQkFBZ0IsRUFBRUMsY0FBYyxFQUFFQyxrQkFBa0IsRUFBRSxLQUFLO1FBQzNFLElBQUlDLFlBQVksRUFBRXIvRixDQUFDLENBQUMyN0YsT0FBTyxDQUFDdjFFLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUkwMkQsWUFBWSxFQUFFeG5GLE1BQU0sQ0FBQzY0QyxXQUFXLEdBQUd2UCxDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUM4d0IsS0FBSyxDQUFDLENBQUM7O1FBRXhELEdBQUcsQ0FBQ3BtQixDQUFDLENBQUN5NEYsVUFBVSxJQUFJLFFBQVEsRUFBRTtZQUMxQjBHLGVBQWUsRUFBRXJpQixXQUFXO1FBQ2hDLEVBQUUsS0FBSyxHQUFHLENBQUM5OEUsQ0FBQyxDQUFDeTRGLFVBQVUsSUFBSSxRQUFRLEVBQUU7WUFDakMwRyxlQUFlLEVBQUVFLFdBQVc7UUFDaEMsRUFBRSxLQUFLLEdBQUcsQ0FBQ3IvRixDQUFDLENBQUN5NEYsVUFBVSxJQUFJLEtBQUssRUFBRTtZQUM5QjBHLGVBQWUsRUFBRXBrRyxJQUFJLENBQUM4dkMsR0FBRyxDQUFDaXlDLFdBQVcsRUFBRXVpQixXQUFXLENBQUM7UUFDdkQ7O1FBRUEsR0FBRyxFQUFFci9GLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3UrRixXQUFXO1lBQ3RCMTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3UrRixVQUFVLENBQUMvL0YsT0FBTztZQUM1QnFILENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3UrRixXQUFXLElBQUksSUFBSSxFQUFFOztZQUUvQndHLGlCQUFpQixFQUFFLElBQUk7O1lBRXZCLElBQUksQ0FBQ0QsV0FBVyxHQUFHai9GLENBQUMsQ0FBQ2s3RixXQUFXLEVBQUU7Z0JBQzlCLEdBQUcsQ0FBQ2w3RixDQUFDLENBQUNrN0YsV0FBVyxDQUFDL2tHLGNBQWMsQ0FBQzhvRyxVQUFVLENBQUMsRUFBRTtvQkFDMUMsR0FBRyxDQUFDai9GLENBQUMsQ0FBQzI3QixnQkFBZ0IsQ0FBQzA4RCxZQUFZLElBQUksS0FBSyxFQUFFO3dCQUMxQyxHQUFHLENBQUM4RyxlQUFlLEVBQUVuL0YsQ0FBQyxDQUFDazdGLFdBQVcsQ0FBQytELFVBQVUsQ0FBQyxFQUFFOzRCQUM1Q0MsaUJBQWlCLEVBQUVsL0YsQ0FBQyxDQUFDazdGLFdBQVcsQ0FBQytELFVBQVUsQ0FBQzt3QkFDaEQ7b0JBQ0osRUFBRSxLQUFLO3dCQUNILEdBQUcsQ0FBQ0UsZUFBZSxFQUFFbi9GLENBQUMsQ0FBQ2s3RixXQUFXLENBQUMrRCxVQUFVLENBQUMsRUFBRTs0QkFDNUNDLGlCQUFpQixFQUFFbC9GLENBQUMsQ0FBQ2s3RixXQUFXLENBQUMrRCxVQUFVLENBQUM7d0JBQ2hEO29CQUNKO2dCQUNKO1lBQ0o7O1lBRUEsR0FBRyxDQUFDQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUU7Z0JBQzNCLEdBQUcsQ0FBQ2wvRixDQUFDLENBQUMrNkYsaUJBQWlCLElBQUksSUFBSSxFQUFFO29CQUM3QixHQUFHLENBQUNtRSxpQkFBaUIsSUFBSWwvRixDQUFDLENBQUMrNkYsaUJBQWlCLEdBQUdpRSxXQUFXLEVBQUU7d0JBQ3hEaC9GLENBQUMsQ0FBQys2RixpQkFBaUI7NEJBQ2ZtRSxnQkFBZ0I7d0JBQ3BCLEdBQUcsQ0FBQ2wvRixDQUFDLENBQUNtN0Ysa0JBQWtCLENBQUMrRCxnQkFBZ0IsRUFBRSxJQUFJLFNBQVMsRUFBRTs0QkFDdERsL0YsQ0FBQyxDQUFDcy9GLE9BQU8sQ0FBQ0osZ0JBQWdCLENBQUM7d0JBQy9CLEVBQUUsS0FBSzs0QkFDSGwvRixDQUFDLENBQUM3RixRQUFRLEVBQUV5a0MsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRThGLENBQUMsQ0FBQzI3QixnQkFBZ0I7Z0NBQ3ZDMzdCLENBQUMsQ0FBQ203RixrQkFBa0I7b0NBQ2hCK0QsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDMUIsR0FBRyxDQUFDbG1GLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0NBQ2xCaFosQ0FBQyxDQUFDODVGLGFBQWEsRUFBRTk1RixDQUFDLENBQUM3RixPQUFPLENBQUNnK0YsWUFBWTs0QkFDM0M7NEJBQ0FuNEYsQ0FBQyxDQUFDNHZDLE9BQU8sQ0FBQzUyQixPQUFPLENBQUM7d0JBQ3RCO3dCQUNBb21GLGtCQUFrQixFQUFFRixnQkFBZ0I7b0JBQ3hDO2dCQUNKLEVBQUUsS0FBSztvQkFDSGwvRixDQUFDLENBQUMrNkYsaUJBQWlCLEVBQUVtRSxnQkFBZ0I7b0JBQ3JDLEdBQUcsQ0FBQ2wvRixDQUFDLENBQUNtN0Ysa0JBQWtCLENBQUMrRCxnQkFBZ0IsRUFBRSxJQUFJLFNBQVMsRUFBRTt3QkFDdERsL0YsQ0FBQyxDQUFDcy9GLE9BQU8sQ0FBQ0osZ0JBQWdCLENBQUM7b0JBQy9CLEVBQUUsS0FBSzt3QkFDSGwvRixDQUFDLENBQUM3RixRQUFRLEVBQUV5a0MsQ0FBQyxDQUFDMWtDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRThGLENBQUMsQ0FBQzI3QixnQkFBZ0I7NEJBQ3ZDMzdCLENBQUMsQ0FBQ203RixrQkFBa0I7Z0NBQ2hCK0QsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDMUIsR0FBRyxDQUFDbG1GLFFBQVEsSUFBSSxJQUFJLEVBQUU7NEJBQ2xCaFosQ0FBQyxDQUFDODVGLGFBQWEsRUFBRTk1RixDQUFDLENBQUM3RixPQUFPLENBQUNnK0YsWUFBWTt3QkFDM0M7d0JBQ0FuNEYsQ0FBQyxDQUFDNHZDLE9BQU8sQ0FBQzUyQixPQUFPLENBQUM7b0JBQ3RCO29CQUNBb21GLGtCQUFrQixFQUFFRixnQkFBZ0I7Z0JBQ3hDO1lBQ0osRUFBRSxLQUFLO2dCQUNILEdBQUcsQ0FBQ2wvRixDQUFDLENBQUMrNkYsaUJBQWlCLElBQUksSUFBSSxFQUFFO29CQUM3Qi82RixDQUFDLENBQUMrNkYsaUJBQWlCLEVBQUUsSUFBSTtvQkFDekIvNkYsQ0FBQyxDQUFDN0YsUUFBUSxFQUFFNkYsQ0FBQyxDQUFDMjdCLGdCQUFnQjtvQkFDOUIsR0FBRyxDQUFDM2lCLFFBQVEsSUFBSSxJQUFJLEVBQUU7d0JBQ2xCaFosQ0FBQyxDQUFDODVGLGFBQWEsRUFBRTk1RixDQUFDLENBQUM3RixPQUFPLENBQUNnK0YsWUFBWTtvQkFDM0M7b0JBQ0FuNEYsQ0FBQyxDQUFDNHZDLE9BQU8sQ0FBQzUyQixPQUFPLENBQUM7b0JBQ2xCb21GLGtCQUFrQixFQUFFRixnQkFBZ0I7Z0JBQ3hDO1lBQ0o7OztZQUdBLEVBQUUsRUFBRSxDQUFDbG1GLFFBQVEsR0FBR29tRixrQkFBa0IsSUFBSSxNQUFNLEVBQUU7Z0JBQzFDcC9GLENBQUMsQ0FBQzI3RixPQUFPLENBQUNsOEUsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDemYsQ0FBQyxFQUFFby9GLGlCQUFpQixDQUFDLENBQUM7WUFDM0Q7UUFDSjs7SUFFSixDQUFDOztJQUVEdkksS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzhqRyxZQUFZLEVBQUUsUUFBUSxDQUFDNS9FLEtBQUssRUFBRTZpRixXQUFXLEVBQUU7O1FBRXZELElBQUl2L0YsRUFBRSxFQUFFLElBQUk7WUFDUm1nRixRQUFRLEVBQUV2aEQsQ0FBQyxDQUFDbGlCLEtBQUssQ0FBQzRCLGFBQWEsQ0FBQztZQUNoQ2toRixXQUFXLEVBQUU5RSxXQUFXLEVBQUUrRSxZQUFZOzs7UUFHMUMsRUFBRSxDQUFDdGYsT0FBTyxDQUFDeHlFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQitPLEtBQUssQ0FBQytCLGNBQWMsQ0FBQyxDQUFDO1FBQzFCOzs7UUFHQSxFQUFFLENBQUMsQ0FBQzBoRSxPQUFPLENBQUN4eUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xCd3lFLFFBQVEsRUFBRUEsT0FBTyxDQUFDbHhFLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkM7O1FBRUF3d0YsYUFBYSxFQUFFLENBQUN6L0YsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsZUFBZSxJQUFJLENBQUMsQ0FBQztRQUM5RHlHLFlBQVksRUFBRUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDei9GLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDODVGLFlBQVksRUFBRSxFQUFFOTVGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixjQUFjOztRQUUzRixPQUFPLENBQUNyOEUsS0FBSyxDQUFDckcsSUFBSSxDQUFDN0IsT0FBTyxFQUFFOztZQUV4QixLQUFLLFVBQVU7Z0JBQ1hrbUYsWUFBWSxFQUFFOEUsWUFBWSxJQUFJLEVBQUUsRUFBRXgvRixDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsZUFBZSxFQUFFLzRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUUwRyxXQUFXO2dCQUNqRyxHQUFHLENBQUN4L0YsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxFQUFFO29CQUN2Qzk0RixDQUFDLENBQUMrOUYsWUFBWSxDQUFDLzlGLENBQUMsQ0FBQzg1RixhQUFhLEVBQUVZLFdBQVcsRUFBRSxLQUFLLEVBQUU2RSxXQUFXLENBQUM7Z0JBQ3BFO2dCQUNBLEtBQUs7O1lBRVQsS0FBSyxNQUFNO2dCQUNQN0UsWUFBWSxFQUFFOEUsWUFBWSxJQUFJLEVBQUUsRUFBRXgvRixDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsZUFBZSxFQUFFeUcsV0FBVztnQkFDeEUsR0FBRyxDQUFDeC9GLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtvQkFDdkM5NEYsQ0FBQyxDQUFDKzlGLFlBQVksQ0FBQy85RixDQUFDLENBQUM4NUYsYUFBYSxFQUFFWSxXQUFXLEVBQUUsS0FBSyxFQUFFNkUsV0FBVyxDQUFDO2dCQUNwRTtnQkFDQSxLQUFLOztZQUVULEtBQUssT0FBTztnQkFDUixJQUFJcndGLE1BQU0sRUFBRXdOLEtBQUssQ0FBQ3JHLElBQUksQ0FBQ25ILE1BQU0sSUFBSSxFQUFFLEVBQUUsRUFBRTtvQkFDbkN3TixLQUFLLENBQUNyRyxJQUFJLENBQUNuSCxNQUFNLEdBQUdpeEUsT0FBTyxDQUFDanhFLEtBQUssQ0FBQyxFQUFFLEVBQUVsUCxDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsY0FBYzs7Z0JBRWxFLzRGLENBQUMsQ0FBQys5RixZQUFZLENBQUMvOUYsQ0FBQyxDQUFDMC9GLGNBQWMsQ0FBQ3h3RixLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUVxd0YsV0FBVyxDQUFDO2dCQUMzRHBmLE9BQU8sQ0FBQ3h4RSxRQUFRLENBQUMsQ0FBQyxDQUFDOFEsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDbkMsS0FBSzs7WUFFVCxPQUFPO2dCQUNILE1BQU07UUFDZDs7SUFFSixDQUFDOztJQUVEbzNFLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNrbkcsZUFBZSxFQUFFLFFBQVEsQ0FBQ3h3RixLQUFLLEVBQUU7O1FBRTdDLElBQUlsUCxFQUFFLEVBQUUsSUFBSTtZQUNSMi9GLFVBQVUsRUFBRUMsYUFBYTs7UUFFN0JELFdBQVcsRUFBRTMvRixDQUFDLENBQUM2L0YsbUJBQW1CLENBQUMsQ0FBQztRQUNwQ0QsY0FBYyxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDMXdGLE1BQU0sRUFBRXl3RixVQUFVLENBQUNBLFVBQVUsQ0FBQ2huRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDM0N1VyxNQUFNLEVBQUV5d0YsVUFBVSxDQUFDQSxVQUFVLENBQUNobkcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3QyxFQUFFLEtBQUs7WUFDSCxJQUFJLENBQUMsSUFBSWtWLEVBQUUsR0FBRzh4RixVQUFVLEVBQUU7Z0JBQ3RCLEdBQUcsQ0FBQ3p3RixNQUFNLEVBQUV5d0YsVUFBVSxDQUFDOXhGLENBQUMsQ0FBQyxFQUFFO29CQUN2QnFCLE1BQU0sRUFBRTB3RixhQUFhO29CQUNyQixLQUFLO2dCQUNUO2dCQUNBQSxjQUFjLEVBQUVELFVBQVUsQ0FBQzl4RixDQUFDLENBQUM7WUFDakM7UUFDSjs7UUFFQSxPQUFPcUIsS0FBSztJQUNoQixDQUFDOztJQUVEMm5GLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNzbkcsY0FBYyxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUV2QyxJQUFJOS9GLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMDlGLEtBQUssR0FBRzczRixDQUFDLENBQUMrNUYsTUFBTSxJQUFJLElBQUksRUFBRTs7WUFFcENuN0QsQ0FBQyxDQUFDLElBQUksRUFBRTUrQixDQUFDLENBQUMrNUYsS0FBSztnQkFDWCxDQUFDcDlFLEdBQUcsQ0FBQyxhQUFhLEVBQUUzYyxDQUFDLENBQUNzOEYsV0FBVztnQkFDakMsQ0FBQzMvRSxHQUFHLENBQUMsa0JBQWtCLEVBQUVpaUIsQ0FBQyxDQUFDVixLQUFLLENBQUNsK0IsQ0FBQyxDQUFDKy9GLFNBQVMsRUFBRS8vRixDQUFDLEVBQUUsSUFBSSxDQUFDO2dCQUN0RCxDQUFDMmMsR0FBRyxDQUFDLGtCQUFrQixFQUFFaWlCLENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQysvRixTQUFTLEVBQUUvL0YsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDOztZQUU1RCxHQUFHLENBQUNBLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzY4RixjQUFjLElBQUksSUFBSSxFQUFFO2dCQUNsQ2gzRixDQUFDLENBQUMrNUYsS0FBSyxDQUFDcDlFLEdBQUcsQ0FBQyxlQUFlLEVBQUUzYyxDQUFDLENBQUM0OEYsVUFBVSxDQUFDO1lBQzlDO1FBQ0o7O1FBRUE1OEYsQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ2gvRSxHQUFHLENBQUMsd0JBQXdCLENBQUM7O1FBRXZDLEdBQUcsQ0FBQzNjLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3kyRSxPQUFPLElBQUksS0FBSyxHQUFHNXdFLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtZQUNwRTk0RixDQUFDLENBQUNvNkYsV0FBVyxHQUFHcDZGLENBQUMsQ0FBQ282RixVQUFVLENBQUN6OUUsR0FBRyxDQUFDLGFBQWEsRUFBRTNjLENBQUMsQ0FBQ3M4RixXQUFXLENBQUM7WUFDOUR0OEYsQ0FBQyxDQUFDbTZGLFdBQVcsR0FBR242RixDQUFDLENBQUNtNkYsVUFBVSxDQUFDeDlFLEdBQUcsQ0FBQyxhQUFhLEVBQUUzYyxDQUFDLENBQUNzOEYsV0FBVyxDQUFDOztZQUU5RCxHQUFHLENBQUN0OEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNjhGLGNBQWMsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xDaDNGLENBQUMsQ0FBQ282RixXQUFXLEdBQUdwNkYsQ0FBQyxDQUFDbzZGLFVBQVUsQ0FBQ3o5RSxHQUFHLENBQUMsZUFBZSxFQUFFM2MsQ0FBQyxDQUFDNDhGLFVBQVUsQ0FBQztnQkFDL0Q1OEYsQ0FBQyxDQUFDbTZGLFdBQVcsR0FBR242RixDQUFDLENBQUNtNkYsVUFBVSxDQUFDeDlFLEdBQUcsQ0FBQyxlQUFlLEVBQUUzYyxDQUFDLENBQUM0OEYsVUFBVSxDQUFDO1lBQ25FO1FBQ0o7O1FBRUE1OEYsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQ3RzRSxHQUFHLENBQUMsa0NBQWtDLEVBQUUzYyxDQUFDLENBQUMwOEYsWUFBWSxDQUFDO1FBQy9EMThGLENBQUMsQ0FBQ2lwRixLQUFLLENBQUN0c0UsR0FBRyxDQUFDLGlDQUFpQyxFQUFFM2MsQ0FBQyxDQUFDMDhGLFlBQVksQ0FBQztRQUM5RDE4RixDQUFDLENBQUNpcEYsS0FBSyxDQUFDdHNFLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRTNjLENBQUMsQ0FBQzA4RixZQUFZLENBQUM7UUFDM0QxOEYsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQ3RzRSxHQUFHLENBQUMsb0NBQW9DLEVBQUUzYyxDQUFDLENBQUMwOEYsWUFBWSxDQUFDOztRQUVqRTE4RixDQUFDLENBQUNpcEYsS0FBSyxDQUFDdHNFLEdBQUcsQ0FBQyxhQUFhLEVBQUUzYyxDQUFDLENBQUN1OEYsWUFBWSxDQUFDOztRQUUxQzM5RCxDQUFDLENBQUN6cEMsUUFBUSxDQUFDLENBQUN3bkIsR0FBRyxDQUFDM2MsQ0FBQyxDQUFDKzdGLGdCQUFnQixFQUFFLzdGLENBQUMsQ0FBQ3FvQixVQUFVLENBQUM7O1FBRWpEcm9CLENBQUMsQ0FBQ2dnRyxrQkFBa0IsQ0FBQyxDQUFDOztRQUV0QixHQUFHLENBQUNoZ0csQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNjhGLGNBQWMsSUFBSSxJQUFJLEVBQUU7WUFDbENoM0YsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQ3RzRSxHQUFHLENBQUMsZUFBZSxFQUFFM2MsQ0FBQyxDQUFDNDhGLFVBQVUsQ0FBQztRQUM5Qzs7UUFFQSxHQUFHLENBQUM1OEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNjlGLGNBQWMsSUFBSSxJQUFJLEVBQUU7WUFDbENwNUQsQ0FBQyxDQUFDNStCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUMsQ0FBQzVyRixRQUFRLENBQUMsQ0FBQyxDQUFDZ08sR0FBRyxDQUFDLGFBQWEsRUFBRTNjLENBQUMsQ0FBQ3c4RixhQUFhLENBQUM7UUFDbkU7O1FBRUE1OUQsQ0FBQyxDQUFDdHBDLE1BQU0sQ0FBQyxDQUFDcW5CLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRTNjLENBQUMsQ0FBQzgyRixXQUFXLEVBQUU5MkYsQ0FBQyxDQUFDaWdHLGlCQUFpQixDQUFDOztRQUVwRnJoRSxDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUNxbkIsR0FBRyxDQUFDLHNCQUFzQixFQUFFM2MsQ0FBQyxDQUFDODJGLFdBQVcsRUFBRTkyRixDQUFDLENBQUN3cUQsTUFBTSxDQUFDOztRQUU5RDVyQixDQUFDLENBQUMsbUJBQW1CLEVBQUU1K0IsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQyxDQUFDNTlFLEdBQUcsQ0FBQyxXQUFXLEVBQUUzYyxDQUFDLENBQUN5ZSxjQUFjLENBQUM7O1FBRXhFbWdCLENBQUMsQ0FBQ3RwQyxNQUFNLENBQUMsQ0FBQ3FuQixHQUFHLENBQUMsb0JBQW9CLEVBQUUzYyxDQUFDLENBQUM4MkYsV0FBVyxFQUFFOTJGLENBQUMsQ0FBQ3k4RixXQUFXLENBQUM7O0lBRXJFLENBQUM7O0lBRUQ1RixLQUFLLENBQUNyK0YsU0FBUyxDQUFDd25HLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUU1QyxJQUFJaGdHLEVBQUUsRUFBRSxJQUFJOztRQUVaQSxDQUFDLENBQUNpcEYsS0FBSyxDQUFDdHNFLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRWlpQixDQUFDLENBQUNWLEtBQUssQ0FBQ2wrQixDQUFDLENBQUMrL0YsU0FBUyxFQUFFLy9GLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5REEsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQ3RzRSxHQUFHLENBQUMsa0JBQWtCLEVBQUVpaUIsQ0FBQyxDQUFDVixLQUFLLENBQUNsK0IsQ0FBQyxDQUFDKy9GLFNBQVMsRUFBRS8vRixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7O0lBRW5FLENBQUM7O0lBRUQ2MkYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzBuRyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXJDLElBQUlsZ0csRUFBRSxFQUFFLElBQUksRUFBRTQrRixjQUFjOztRQUU1QixFQUFFLENBQUM1K0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDdytGLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDbkJpRyxlQUFlLEVBQUU1K0YsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdyRixRQUFRLENBQUMsQ0FBQyxDQUFDQSxRQUFRLENBQUMsQ0FBQztZQUNoRGl3RixjQUFjLENBQUN2dUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUNsQ3J3QixDQUFDLENBQUMyN0YsT0FBTyxDQUFDN3FGLEtBQUssQ0FBQyxDQUFDLENBQUN5VCxNQUFNLENBQUNxNkUsY0FBYyxDQUFDO1FBQzVDOztJQUVKLENBQUM7O0lBRUQvSCxLQUFLLENBQUNyK0YsU0FBUyxDQUFDK2pHLGFBQWEsRUFBRSxRQUFRLENBQUM3L0UsS0FBSyxFQUFFOztRQUUzQyxJQUFJMWMsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUMwN0YsWUFBWSxJQUFJLEtBQUssRUFBRTtZQUN6QmgvRSxLQUFLLENBQUNxRCx3QkFBd0IsQ0FBQyxDQUFDO1lBQ2hDckQsS0FBSyxDQUFDZ0MsZUFBZSxDQUFDLENBQUM7WUFDdkJoQyxLQUFLLENBQUMrQixjQUFjLENBQUMsQ0FBQztRQUMxQjs7SUFFSixDQUFDOztJQUVEbzRFLEtBQUssQ0FBQ3IrRixTQUFTLENBQUMyc0MsUUFBUSxFQUFFLFFBQVEsQ0FBQ3lLLE9BQU8sRUFBRTs7UUFFeEMsSUFBSTV2QyxFQUFFLEVBQUUsSUFBSTs7UUFFWkEsQ0FBQyxDQUFDbzhGLGFBQWEsQ0FBQyxDQUFDOztRQUVqQnA4RixDQUFDLENBQUM0NkYsWUFBWSxFQUFFLENBQUMsQ0FBQzs7UUFFbEI1NkYsQ0FBQyxDQUFDOC9GLGFBQWEsQ0FBQyxDQUFDOztRQUVqQmxoRSxDQUFDLENBQUMsZUFBZSxFQUFFNStCLENBQUMsQ0FBQzI3RixPQUFPLENBQUMsQ0FBQ3IzRSxNQUFNLENBQUMsQ0FBQzs7UUFFdEMsR0FBRyxDQUFDdGtCLENBQUMsQ0FBQys1RixLQUFLLEVBQUU7WUFDVC81RixDQUFDLENBQUMrNUYsS0FBSyxDQUFDbHBGLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCOztRQUVBLEdBQUcsRUFBRTdRLENBQUMsQ0FBQ282RixXQUFXLEdBQUdwNkYsQ0FBQyxDQUFDbzZGLFVBQVUsQ0FBQ3poRyxPQUFPLEVBQUU7O1lBRXZDcUgsQ0FBQyxDQUFDbzZGO2dCQUNFLENBQUMxb0UsV0FBVyxDQUFDLHlDQUF5QztnQkFDdEQsQ0FBQ3JCLFVBQVUsQ0FBQyxvQ0FBb0M7Z0JBQ2hELENBQUMvWCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzs7WUFFdEIsR0FBRyxFQUFFdFksQ0FBQyxDQUFDNjhGLFFBQVEsQ0FBQzE2RixJQUFJLEVBQUVuQyxDQUFDLENBQUM3RixPQUFPLENBQUNrOUYsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pDcjNGLENBQUMsQ0FBQ282RixVQUFVLENBQUN2cEYsTUFBTSxDQUFDLENBQUM7WUFDekI7UUFDSjs7UUFFQSxHQUFHLEVBQUU3USxDQUFDLENBQUNtNkYsV0FBVyxHQUFHbjZGLENBQUMsQ0FBQ202RixVQUFVLENBQUN4aEcsT0FBTyxFQUFFOztZQUV2Q3FILENBQUMsQ0FBQ202RjtnQkFDRSxDQUFDem9FLFdBQVcsQ0FBQyx5Q0FBeUM7Z0JBQ3RELENBQUNyQixVQUFVLENBQUMsb0NBQW9DO2dCQUNoRCxDQUFDL1gsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7O1lBRXRCLEdBQUcsRUFBRXRZLENBQUMsQ0FBQzY4RixRQUFRLENBQUMxNkYsSUFBSSxFQUFFbkMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDbTlGLFVBQVUsQ0FBQyxFQUFFO2dCQUN6Q3QzRixDQUFDLENBQUNtNkYsVUFBVSxDQUFDdHBGLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCO1FBQ0o7OztRQUdBLEdBQUcsQ0FBQzdRLENBQUMsQ0FBQ3c2RixPQUFPLEVBQUU7O1lBRVh4NkYsQ0FBQyxDQUFDdzZGO2dCQUNFLENBQUM5b0UsV0FBVyxDQUFDLG1FQUFtRTtnQkFDaEYsQ0FBQ3JCLFVBQVUsQ0FBQyxhQUFhO2dCQUN6QixDQUFDQSxVQUFVLENBQUMsa0JBQWtCO2dCQUM5QixDQUFDajNCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDWndsQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNwNEIsSUFBSSxDQUFDLE9BQU8sRUFBRW80QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN2b0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzFELENBQUMsQ0FBQzs7WUFFTnJXLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLElBQUksQ0FBQ3hVLE9BQU8sQ0FBQ3U2RCxLQUFLLENBQUMsQ0FBQ3B3QyxNQUFNLENBQUMsQ0FBQzs7WUFFbkR0a0IsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ2oyRSxNQUFNLENBQUMsQ0FBQzs7WUFFdEJ0a0IsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQzNrRSxNQUFNLENBQUMsQ0FBQzs7WUFFaEJ0a0IsQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ3AzRSxNQUFNLENBQUN2a0IsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQztRQUMvQjs7UUFFQXg2RixDQUFDLENBQUNrZ0csV0FBVyxDQUFDLENBQUM7O1FBRWZsZ0csQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ2pxRSxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQ3JDMXhCLENBQUMsQ0FBQzI3RixPQUFPLENBQUNqcUUsV0FBVyxDQUFDLG1CQUFtQixDQUFDO1FBQzFDMXhCLENBQUMsQ0FBQzI3RixPQUFPLENBQUNqcUUsV0FBVyxDQUFDLGNBQWMsQ0FBQzs7UUFFckMxeEIsQ0FBQyxDQUFDODZGLFVBQVUsRUFBRSxJQUFJOztRQUVsQixFQUFFLENBQUMsQ0FBQ2xyRCxPQUFPLEVBQUU7WUFDVDV2QyxDQUFDLENBQUMyN0YsT0FBTyxDQUFDbDhFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQ3pmLENBQUMsQ0FBQyxDQUFDO1FBQ3JDOztJQUVKLENBQUM7O0lBRUQ2MkYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ29sRyxrQkFBa0IsRUFBRSxRQUFRLENBQUNscEMsS0FBSyxFQUFFOztRQUVoRCxJQUFJMTBELEVBQUUsRUFBRSxJQUFJO1lBQ1J3cUMsV0FBVyxFQUFFLENBQUMsQ0FBQzs7UUFFbkJBLFVBQVUsQ0FBQ3hxQyxDQUFDLENBQUM4N0YsY0FBYyxFQUFFLEVBQUUsRUFBRTs7UUFFakMsR0FBRyxDQUFDOTdGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3ExQyxLQUFLLElBQUksS0FBSyxFQUFFO1lBQzFCeHZDLENBQUMsQ0FBQ3U2RixXQUFXLENBQUNqaUYsR0FBRyxDQUFDa3lCLFVBQVUsQ0FBQztRQUNqQyxFQUFFLEtBQUs7WUFDSHhxQyxDQUFDLENBQUN3NkYsT0FBTyxDQUFDN2dHLEVBQUUsQ0FBQys2RCxLQUFLLENBQUMsQ0FBQ3A4QyxHQUFHLENBQUNreUIsVUFBVSxDQUFDO1FBQ3ZDOztJQUVKLENBQUM7O0lBRURxc0QsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzJuRyxVQUFVLEVBQUUsUUFBUSxDQUFDQyxVQUFVLEVBQUUvbUcsUUFBUSxFQUFFOztRQUV2RCxJQUFJMkcsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUNvN0YsZUFBZSxJQUFJLEtBQUssRUFBRTs7WUFFNUJwN0YsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdnRyxFQUFFLENBQUN5bUcsVUFBVSxDQUFDLENBQUM5bkYsR0FBRyxDQUFDO2dCQUN6QjAwQixNQUFNLEVBQUVodEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNnlDO1lBQ3RCLENBQUMsQ0FBQzs7WUFFRmh0QyxDQUFDLENBQUN3NkYsT0FBTyxDQUFDN2dHLEVBQUUsQ0FBQ3ltRyxVQUFVLENBQUMsQ0FBQ3R4RSxPQUFPLENBQUM7Z0JBQzdCbkYsT0FBTyxFQUFFO1lBQ2IsQ0FBQyxFQUFFM3BCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3MwQixLQUFLLEVBQUV6dUIsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeXdCLE1BQU0sRUFBRXZ4QixRQUFRLENBQUM7O1FBRW5ELEVBQUUsS0FBSzs7WUFFSDJHLENBQUMsQ0FBQzI5RixlQUFlLENBQUN5QyxVQUFVLENBQUM7O1lBRTdCcGdHLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM3Z0csRUFBRSxDQUFDeW1HLFVBQVUsQ0FBQyxDQUFDOW5GLEdBQUcsQ0FBQztnQkFDekJxUixPQUFPLEVBQUUsQ0FBQztnQkFDVnFqQixNQUFNLEVBQUVodEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNnlDO1lBQ3RCLENBQUMsQ0FBQzs7WUFFRixHQUFHLENBQUMzekMsUUFBUSxFQUFFO2dCQUNWc2EsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFOztvQkFFbEIzVCxDQUFDLENBQUM0OUYsaUJBQWlCLENBQUN3QyxVQUFVLENBQUM7O29CQUUvQi9tRyxRQUFRLENBQUMvQyxJQUFJLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxFQUFFMEosQ0FBQyxDQUFDN0YsT0FBTyxDQUFDczBCLEtBQUssQ0FBQztZQUN2Qjs7UUFFSjs7SUFFSixDQUFDOztJQUVEb29FLEtBQUssQ0FBQ3IrRixTQUFTLENBQUM2bkcsYUFBYSxFQUFFLFFBQVEsQ0FBQ0QsVUFBVSxFQUFFOztRQUVoRCxJQUFJcGdHLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDbzdGLGVBQWUsSUFBSSxLQUFLLEVBQUU7O1lBRTVCcDdGLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM3Z0csRUFBRSxDQUFDeW1HLFVBQVUsQ0FBQyxDQUFDdHhFLE9BQU8sQ0FBQztnQkFDN0JuRixPQUFPLEVBQUUsQ0FBQztnQkFDVnFqQixNQUFNLEVBQUVodEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNnlDLE9BQU8sRUFBRTtZQUMvQixDQUFDLEVBQUVodEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDczBCLEtBQUssRUFBRXp1QixDQUFDLENBQUM3RixPQUFPLENBQUN5d0IsTUFBTSxDQUFDOztRQUV6QyxFQUFFLEtBQUs7O1lBRUg1cUIsQ0FBQyxDQUFDMjlGLGVBQWUsQ0FBQ3lDLFVBQVUsQ0FBQzs7WUFFN0JwZ0csQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdnRyxFQUFFLENBQUN5bUcsVUFBVSxDQUFDLENBQUM5bkYsR0FBRyxDQUFDO2dCQUN6QnFSLE9BQU8sRUFBRSxDQUFDO2dCQUNWcWpCLE1BQU0sRUFBRWh0QyxDQUFDLENBQUM3RixPQUFPLENBQUM2eUMsT0FBTyxFQUFFO1lBQy9CLENBQUMsQ0FBQzs7UUFFTjs7SUFFSixDQUFDOztJQUVENnBELEtBQUssQ0FBQ3IrRixTQUFTLENBQUM4bkcsYUFBYSxFQUFFekosS0FBSyxDQUFDcitGLFNBQVMsQ0FBQytuRyxZQUFZLEVBQUUsUUFBUSxDQUFDeDdGLE1BQU0sRUFBRTs7UUFFMUUsSUFBSS9FLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQytFLE9BQU8sSUFBSSxJQUFJLEVBQUU7O1lBRWpCL0UsQ0FBQyxDQUFDNDdGLGFBQWEsRUFBRTU3RixDQUFDLENBQUN3NkYsT0FBTzs7WUFFMUJ4NkYsQ0FBQyxDQUFDbzlGLE1BQU0sQ0FBQyxDQUFDOztZQUVWcDlGLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLElBQUksQ0FBQ3hVLE9BQU8sQ0FBQ3U2RCxLQUFLLENBQUMsQ0FBQ3B3QyxNQUFNLENBQUMsQ0FBQzs7WUFFbkR0a0IsQ0FBQyxDQUFDNDdGLFlBQVksQ0FBQzcyRixNQUFNLENBQUNBLE1BQU0sQ0FBQyxDQUFDK2YsUUFBUSxDQUFDOWtCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM7O1lBRXJEdjZGLENBQUMsQ0FBQ3E5RixNQUFNLENBQUMsQ0FBQzs7UUFFZDs7SUFFSixDQUFDOztJQUVEeEcsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ2dvRyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXRDLElBQUl4Z0csRUFBRSxFQUFFLElBQUk7O1FBRVpBLENBQUMsQ0FBQzI3RjtZQUNFLENBQUNoL0UsR0FBRyxDQUFDLHdCQUF3QjtZQUM3QixDQUFDTCxFQUFFLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQ0ksS0FBSyxFQUFFOztZQUVuREEsS0FBSyxDQUFDcUQsd0JBQXdCLENBQUMsQ0FBQztZQUNoQyxJQUFJMGdGLElBQUksRUFBRTdoRSxDQUFDLENBQUMsSUFBSSxDQUFDOztZQUVqQmpyQixVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7O2dCQUVsQixFQUFFLEVBQUUzVCxDQUFDLENBQUM3RixPQUFPLENBQUNvK0YsYUFBYSxFQUFFO29CQUN6QnY0RixDQUFDLENBQUNxN0YsU0FBUyxFQUFFb0YsR0FBRyxDQUFDOXlGLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQzdCM04sQ0FBQyxDQUFDbThGLFFBQVEsQ0FBQyxDQUFDO2dCQUNoQjs7WUFFSixDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVULENBQUMsQ0FBQztJQUNOLENBQUM7O0lBRUR0RixLQUFLLENBQUNyK0YsU0FBUyxDQUFDa29HLFdBQVcsRUFBRTdKLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNtb0csa0JBQWtCLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXhFLElBQUkzZ0csRUFBRSxFQUFFLElBQUk7UUFDWixPQUFPQSxDQUFDLENBQUM4NUYsWUFBWTs7SUFFekIsQ0FBQzs7SUFFRGpELEtBQUssQ0FBQ3IrRixTQUFTLENBQUM0bEcsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVyQyxJQUFJcCtGLEVBQUUsRUFBRSxJQUFJOztRQUVaLElBQUk0Z0csV0FBVyxFQUFFLENBQUM7UUFDbEIsSUFBSTduQyxRQUFRLEVBQUUsQ0FBQztRQUNmLElBQUk4bkMsU0FBUyxFQUFFLENBQUM7O1FBRWhCLEdBQUcsQ0FBQzdnRyxDQUFDLENBQUM3RixPQUFPLENBQUMrOUYsU0FBUyxJQUFJLElBQUksRUFBRTtZQUM3QixHQUFHLENBQUNsNEYsQ0FBQyxDQUFDcTZGLFdBQVcsR0FBR3I2RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxFQUFFO2lCQUN2QyxFQUFFK0gsUUFBUTtZQUNmLEVBQUUsS0FBSztnQkFDSCxNQUFNLENBQUNELFdBQVcsRUFBRTVnRyxDQUFDLENBQUNxNkYsVUFBVSxFQUFFO29CQUM5QixFQUFFd0csUUFBUTtvQkFDVkQsV0FBVyxFQUFFN25DLFFBQVEsRUFBRS80RCxDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsY0FBYztvQkFDL0NoZ0MsUUFBUSxHQUFHLzRELENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixlQUFlLEdBQUcvNEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRTk0RixDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsZUFBZSxFQUFFLzRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZO2dCQUNySDtZQUNKO1FBQ0osRUFBRSxLQUFLLEdBQUcsQ0FBQzk0RixDQUFDLENBQUM3RixPQUFPLENBQUNxOUYsV0FBVyxJQUFJLElBQUksRUFBRTtZQUN0Q3FKLFNBQVMsRUFBRTdnRyxDQUFDLENBQUNxNkYsVUFBVTtRQUMzQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUNyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDaTlGLFFBQVEsRUFBRTtZQUMzQnlKLFNBQVMsRUFBRSxFQUFFLEVBQUU5bEcsSUFBSSxDQUFDcXVCLElBQUksQ0FBQyxDQUFDcHBCLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRSxFQUFFOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixjQUFjLENBQUM7UUFDaEcsQ0FBQyxLQUFLO1lBQ0YsTUFBTSxDQUFDNkgsV0FBVyxFQUFFNWdHLENBQUMsQ0FBQ3E2RixVQUFVLEVBQUU7Z0JBQzlCLEVBQUV3RyxRQUFRO2dCQUNWRCxXQUFXLEVBQUU3bkMsUUFBUSxFQUFFLzRELENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixjQUFjO2dCQUMvQ2hnQyxRQUFRLEdBQUcvNEQsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGVBQWUsR0FBRy80RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixlQUFlLEVBQUUvNEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVk7WUFDckg7UUFDSjs7UUFFQSxPQUFPK0gsU0FBUyxFQUFFLENBQUM7O0lBRXZCLENBQUM7O0lBRURoSyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDc29HLFFBQVEsRUFBRSxRQUFRLENBQUNWLFVBQVUsRUFBRTs7UUFFM0MsSUFBSXBnRyxFQUFFLEVBQUUsSUFBSTtZQUNSdzlGLFVBQVU7WUFDVnVELGNBQWM7WUFDZEMsZUFBZSxFQUFFLENBQUM7WUFDbEJDLFdBQVc7WUFDWEMsSUFBSTs7UUFFUmxoRyxDQUFDLENBQUMwNkYsWUFBWSxFQUFFLENBQUM7UUFDakJxRyxlQUFlLEVBQUUvZ0csQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzlnRyxLQUFLLENBQUMsQ0FBQyxDQUFDa3RDLFdBQVcsQ0FBQyxJQUFJLENBQUM7O1FBRXBELEdBQUcsQ0FBQzVtQyxDQUFDLENBQUM3RixPQUFPLENBQUMrOUYsU0FBUyxJQUFJLElBQUksRUFBRTtZQUM3QixHQUFHLENBQUNsNEYsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxFQUFFO2dCQUN2Qzk0RixDQUFDLENBQUMwNkYsWUFBWSxFQUFFLENBQUMxNkYsQ0FBQyxDQUFDczZGLFdBQVcsRUFBRXQ2RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RG9JLEtBQUssRUFBRSxDQUFDOztnQkFFUixHQUFHLENBQUNsaEcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeXVDLFNBQVMsSUFBSSxLQUFLLEdBQUc1b0MsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxJQUFJLEVBQUU7b0JBQzlELEdBQUcsQ0FBQ3gzRixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxJQUFJLENBQUMsRUFBRTt3QkFDOUJvSSxLQUFLLEVBQUUsQ0FBQyxHQUFHO29CQUNmLEVBQUUsS0FBSyxHQUFHLENBQUNsaEcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsSUFBSSxDQUFDLEVBQUU7d0JBQ3JDb0ksS0FBSyxFQUFFLENBQUM7b0JBQ1o7Z0JBQ0o7Z0JBQ0FGLGVBQWUsRUFBRSxDQUFDRCxlQUFlLEVBQUUvZ0csQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRSxFQUFFb0ksSUFBSTtZQUNyRTtZQUNBLEdBQUcsQ0FBQ2xoRyxDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixlQUFlLElBQUksQ0FBQyxFQUFFO2dCQUMvQyxHQUFHLENBQUNxSCxXQUFXLEVBQUVwZ0csQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGVBQWUsRUFBRS80RixDQUFDLENBQUNxNkYsV0FBVyxHQUFHcjZGLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtvQkFDL0YsR0FBRyxDQUFDc0gsV0FBVyxFQUFFcGdHLENBQUMsQ0FBQ3E2RixVQUFVLEVBQUU7d0JBQzNCcjZGLENBQUMsQ0FBQzA2RixZQUFZLEVBQUUsQ0FBQyxDQUFDMTZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUUsQ0FBQ3NILFdBQVcsRUFBRXBnRyxDQUFDLENBQUNxNkYsVUFBVSxDQUFDLEVBQUUsRUFBRXI2RixDQUFDLENBQUNzNkYsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUM1RjBHLGVBQWUsRUFBRSxDQUFDLENBQUNoaEcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRSxDQUFDc0gsV0FBVyxFQUFFcGdHLENBQUMsQ0FBQ3E2RixVQUFVLENBQUMsRUFBRSxFQUFFMEcsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuRyxFQUFFLEtBQUs7d0JBQ0gvZ0csQ0FBQyxDQUFDMDZGLFlBQVksRUFBRSxDQUFDLENBQUMxNkYsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsY0FBYyxFQUFFLEVBQUUvNEYsQ0FBQyxDQUFDczZGLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDL0UwRyxlQUFlLEVBQUUsQ0FBQyxDQUFDaGhHLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGNBQWMsRUFBRSxFQUFFZ0ksY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUN0RjtnQkFDSjtZQUNKO1FBQ0osRUFBRSxLQUFLO1lBQ0gsR0FBRyxDQUFDWCxXQUFXLEVBQUVwZ0csQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRTk0RixDQUFDLENBQUNxNkYsVUFBVSxFQUFFO2dCQUNwRHI2RixDQUFDLENBQUMwNkYsWUFBWSxFQUFFLENBQUMsQ0FBQzBGLFdBQVcsRUFBRXBnRyxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxFQUFFLEVBQUU5NEYsQ0FBQyxDQUFDcTZGLFVBQVUsRUFBRSxFQUFFcjZGLENBQUMsQ0FBQ3M2RixVQUFVO2dCQUNyRjBHLGVBQWUsRUFBRSxDQUFDLENBQUNaLFdBQVcsRUFBRXBnRyxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxFQUFFLEVBQUU5NEYsQ0FBQyxDQUFDcTZGLFVBQVUsRUFBRSxFQUFFMEcsY0FBYztZQUM1RjtRQUNKOztRQUVBLEdBQUcsQ0FBQy9nRyxDQUFDLENBQUNxNkYsV0FBVyxHQUFHcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7WUFDeEM5NEYsQ0FBQyxDQUFDMDZGLFlBQVksRUFBRSxDQUFDO1lBQ2pCc0csZUFBZSxFQUFFLENBQUM7UUFDdEI7O1FBRUEsR0FBRyxDQUFDaGhHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3E5RixXQUFXLElBQUksS0FBSyxHQUFHeDNGLENBQUMsQ0FBQ3E2RixXQUFXLEdBQUdyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtZQUN6RTk0RixDQUFDLENBQUMwNkYsWUFBWSxFQUFFLENBQUMsQ0FBQzE2RixDQUFDLENBQUNzNkYsV0FBVyxFQUFFdi9GLElBQUksQ0FBQ3F1QyxLQUFLLENBQUNwcEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOTRGLENBQUMsQ0FBQ3M2RixXQUFXLEVBQUV0NkYsQ0FBQyxDQUFDcTZGLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuSCxFQUFFLEtBQUssR0FBRyxDQUFDcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3E5RixXQUFXLElBQUksS0FBSyxHQUFHeDNGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQys5RixTQUFTLElBQUksSUFBSSxFQUFFO1lBQ3JFbDRGLENBQUMsQ0FBQzA2RixZQUFZLEdBQUcxNkYsQ0FBQyxDQUFDczZGLFdBQVcsRUFBRXYvRixJQUFJLENBQUNxdUMsS0FBSyxDQUFDcHBDLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU5NEYsQ0FBQyxDQUFDczZGLFVBQVU7UUFDekYsRUFBRSxLQUFLLEdBQUcsQ0FBQ3Q2RixDQUFDLENBQUM3RixPQUFPLENBQUNxOUYsV0FBVyxJQUFJLElBQUksRUFBRTtZQUN0Q3gzRixDQUFDLENBQUMwNkYsWUFBWSxFQUFFLENBQUM7WUFDakIxNkYsQ0FBQyxDQUFDMDZGLFlBQVksR0FBRzE2RixDQUFDLENBQUNzNkYsV0FBVyxFQUFFdi9GLElBQUksQ0FBQ3F1QyxLQUFLLENBQUNwcEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDMUU7O1FBRUEsR0FBRyxDQUFDOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3l1QyxTQUFTLElBQUksS0FBSyxFQUFFO1lBQzlCNDBELFdBQVcsRUFBRSxDQUFDLENBQUM0QyxXQUFXLEVBQUVwZ0csQ0FBQyxDQUFDczZGLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUV0NkYsQ0FBQyxDQUFDMDZGLFdBQVc7UUFDbkUsRUFBRSxLQUFLO1lBQ0g4QyxXQUFXLEVBQUUsQ0FBQyxDQUFDNEMsV0FBVyxFQUFFVyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFQyxjQUFjO1FBQ3RFOztRQUVBLEdBQUcsQ0FBQ2hoRyxDQUFDLENBQUM3RixPQUFPLENBQUNtL0YsY0FBYyxJQUFJLElBQUksRUFBRTs7WUFFbEMsR0FBRyxDQUFDdDVGLENBQUMsQ0FBQ3E2RixXQUFXLEdBQUdyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsR0FBRzk0RixDQUFDLENBQUM3RixPQUFPLENBQUMrOUYsU0FBUyxJQUFJLEtBQUssRUFBRTtnQkFDeEUrSSxZQUFZLEVBQUVqaEcsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQzVyRixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUNoVixFQUFFLENBQUN5bUcsVUFBVSxDQUFDO1lBQ3ZFLEVBQUUsS0FBSztnQkFDSGEsWUFBWSxFQUFFamhHLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDaFYsRUFBRSxDQUFDeW1HLFdBQVcsRUFBRXBnRyxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxDQUFDO1lBQ2hHOztZQUVBLEdBQUcsQ0FBQzk0RixDQUFDLENBQUM3RixPQUFPLENBQUN5K0YsSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDeEIsR0FBRyxDQUFDcUksV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNoQnpELFdBQVcsRUFBRSxDQUFDeDlGLENBQUMsQ0FBQ3U2RixXQUFXLENBQUNuMEUsS0FBSyxDQUFDLEVBQUUsRUFBRTY2RSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMxUSxXQUFXLEVBQUUwUSxXQUFXLENBQUM3NkUsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0YsRUFBRSxLQUFLO29CQUNIbzNFLFdBQVcsR0FBRyxDQUFDO2dCQUNuQjtZQUNKLEVBQUUsS0FBSztnQkFDSEEsV0FBVyxFQUFFeUQsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMxUSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRTs7WUFFQSxHQUFHLENBQUN2d0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxJQUFJLEVBQUU7Z0JBQy9CLEdBQUcsQ0FBQ3gzRixDQUFDLENBQUNxNkYsV0FBVyxHQUFHcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEdBQUc5NEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsSUFBSSxLQUFLLEVBQUU7b0JBQ3hFK0ksWUFBWSxFQUFFamhHLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDaFYsRUFBRSxDQUFDeW1HLFVBQVUsQ0FBQztnQkFDdkUsRUFBRSxLQUFLO29CQUNIYSxZQUFZLEVBQUVqaEcsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQzVyRixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUNoVixFQUFFLENBQUN5bUcsV0FBVyxFQUFFcGdHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRzs7Z0JBRUEsR0FBRyxDQUFDOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3krRixJQUFJLElBQUksSUFBSSxFQUFFO29CQUN4QixHQUFHLENBQUNxSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ2hCekQsV0FBVyxFQUFFLENBQUN4OUYsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ24wRSxLQUFLLENBQUMsRUFBRSxFQUFFNjZFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzFRLFdBQVcsRUFBRTBRLFdBQVcsQ0FBQzc2RSxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUMvRixFQUFFLEtBQUs7d0JBQ0hvM0UsV0FBVyxHQUFHLENBQUM7b0JBQ25CO2dCQUNKLEVBQUUsS0FBSztvQkFDSEEsV0FBVyxFQUFFeUQsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMxUSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEU7O2dCQUVBaU4sV0FBVyxHQUFHLENBQUN4OUYsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQzdpRSxLQUFLLENBQUMsRUFBRSxFQUFFNjZFLFdBQVcsQ0FBQ3Q2RCxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsRTtRQUNKOztRQUVBLE9BQU82MkQsVUFBVTs7SUFFckIsQ0FBQzs7SUFFRDNHLEtBQUssQ0FBQ3IrRixTQUFTLENBQUMyb0csVUFBVSxFQUFFdEssS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzRvRyxlQUFlLEVBQUUsUUFBUSxDQUFDcG5GLE1BQU0sRUFBRTs7UUFFMUUsSUFBSWhhLEVBQUUsRUFBRSxJQUFJOztRQUVaLE9BQU9BLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzZmLE1BQU0sQ0FBQzs7SUFFNUIsQ0FBQzs7SUFFRDY4RSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDcW5HLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUU3QyxJQUFJNy9GLEVBQUUsRUFBRSxJQUFJO1lBQ1I0Z0csV0FBVyxFQUFFLENBQUM7WUFDZDduQyxRQUFRLEVBQUUsQ0FBQztZQUNYc29DLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDWjE0RSxHQUFHOztRQUVQLEdBQUcsQ0FBQzNvQixDQUFDLENBQUM3RixPQUFPLENBQUMrOUYsU0FBUyxJQUFJLEtBQUssRUFBRTtZQUM5QnZ2RSxJQUFJLEVBQUUzb0IsQ0FBQyxDQUFDcTZGLFVBQVU7UUFDdEIsRUFBRSxLQUFLO1lBQ0h1RyxXQUFXLEVBQUU1Z0csQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDMUNoZ0MsUUFBUSxFQUFFLzRELENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDcHdFLElBQUksRUFBRTNvQixDQUFDLENBQUNxNkYsV0FBVyxFQUFFLENBQUM7UUFDMUI7O1FBRUEsTUFBTSxDQUFDdUcsV0FBVyxFQUFFajRFLEdBQUcsRUFBRTtZQUNyQjA0RSxPQUFPLENBQUN2ckcsSUFBSSxDQUFDOHFHLFVBQVUsQ0FBQztZQUN4QkEsV0FBVyxFQUFFN25DLFFBQVEsRUFBRS80RCxDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsY0FBYztZQUMvQ2hnQyxRQUFRLEdBQUcvNEQsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGVBQWUsR0FBRy80RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixlQUFlLEVBQUUvNEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVk7UUFDckg7O1FBRUEsT0FBT3VJLE9BQU87O0lBRWxCLENBQUM7O0lBRUR4SyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDOG9HLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFbEMsT0FBTyxJQUFJOztJQUVmLENBQUM7O0lBRUR6SyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDK29HLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFdkMsSUFBSXZoRyxFQUFFLEVBQUUsSUFBSTtZQUNSd2hHLGVBQWUsRUFBRUMsV0FBVyxFQUFFQyxZQUFZOztRQUU5Q0EsYUFBYSxFQUFFMWhHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3E5RixXQUFXLElBQUksS0FBSyxFQUFFeDNGLENBQUMsQ0FBQ3M2RixXQUFXLEVBQUV2L0YsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQ3BwQyxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7O1FBRXhHLEdBQUcsQ0FBQzk0RixDQUFDLENBQUM3RixPQUFPLENBQUM4K0YsYUFBYSxJQUFJLElBQUksRUFBRTtZQUNqQ2o1RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDdDFGLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzdMLElBQUksQ0FBQyxRQUFRLENBQUM4VixLQUFLLEVBQUV3bEQsS0FBSyxFQUFFO2dCQUMzRCxHQUFHLENBQUNBLEtBQUssQ0FBQzY3QixXQUFXLEVBQUVtUixhQUFhLEVBQUUsQ0FBQzlpRSxDQUFDLENBQUM4MUIsS0FBSyxDQUFDLENBQUMvdEIsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDM21DLENBQUMsQ0FBQzI2RixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDcEY4RyxZQUFZLEVBQUUvc0MsS0FBSztvQkFDbkIsT0FBTyxLQUFLO2dCQUNoQjtZQUNKLENBQUMsQ0FBQzs7WUFFRjhzQyxnQkFBZ0IsRUFBRXptRyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDakksQ0FBQyxDQUFDNmlFLFdBQVcsQ0FBQyxDQUFDajdGLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFeEcsQ0FBQyxDQUFDODVGLFlBQVksRUFBRSxHQUFHLENBQUM7O1lBRXpGLE9BQU8wSCxlQUFlOztRQUUxQixFQUFFLEtBQUs7WUFDSCxPQUFPeGhHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixjQUFjO1FBQ25DOztJQUVKLENBQUM7O0lBRURsQyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDbXBHLEtBQUssRUFBRTlLLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNvcEcsVUFBVSxFQUFFLFFBQVEsQ0FBQ2x0QyxLQUFLLEVBQUU2cUMsV0FBVyxFQUFFOztRQUU1RSxJQUFJdi9GLEVBQUUsRUFBRSxJQUFJOztRQUVaQSxDQUFDLENBQUNzOEYsV0FBVyxDQUFDO1lBQ1ZqbUYsSUFBSSxFQUFFO2dCQUNGN0IsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCdEYsS0FBSyxFQUFFK2hCLFFBQVEsQ0FBQ3lqQyxLQUFLO1lBQ3pCO1FBQ0osQ0FBQyxFQUFFNnFDLFdBQVcsQ0FBQzs7SUFFbkIsQ0FBQzs7SUFFRDFJLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNGLEtBQUssRUFBRSxRQUFRLENBQUN1cEcsUUFBUSxFQUFFOztRQUV0QyxJQUFJN2hHLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQyxDQUFDNCtCLENBQUMsQ0FBQzUrQixDQUFDLENBQUMyN0YsT0FBTyxDQUFDLENBQUM1cEUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7O1lBRTdDNk0sQ0FBQyxDQUFDNStCLENBQUMsQ0FBQzI3RixPQUFPLENBQUMsQ0FBQ3RxRSxRQUFRLENBQUMsbUJBQW1CLENBQUM7O1lBRTFDcnhCLENBQUMsQ0FBQ3krRixTQUFTLENBQUMsQ0FBQztZQUNieitGLENBQUMsQ0FBQ3ErRixRQUFRLENBQUMsQ0FBQztZQUNacitGLENBQUMsQ0FBQzhoRyxRQUFRLENBQUMsQ0FBQztZQUNaOWhHLENBQUMsQ0FBQytoRyxTQUFTLENBQUMsQ0FBQztZQUNiL2hHLENBQUMsQ0FBQ2dpRyxVQUFVLENBQUMsQ0FBQztZQUNkaGlHLENBQUMsQ0FBQ2lpRyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3BCamlHLENBQUMsQ0FBQ2tpRyxZQUFZLENBQUMsQ0FBQztZQUNoQmxpRyxDQUFDLENBQUN1K0YsVUFBVSxDQUFDLENBQUM7WUFDZHYrRixDQUFDLENBQUMrK0YsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN2Qi8rRixDQUFDLENBQUN3Z0csWUFBWSxDQUFDLENBQUM7O1FBRXBCOztRQUVBLEdBQUcsQ0FBQ3FCLFFBQVEsRUFBRTtZQUNWN2hHLENBQUMsQ0FBQzI3RixPQUFPLENBQUNsOEUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDemYsQ0FBQyxDQUFDLENBQUM7UUFDbEM7O1FBRUEsR0FBRyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUM2OEYsY0FBYyxJQUFJLElBQUksRUFBRTtZQUNsQ2gzRixDQUFDLENBQUNtaUcsT0FBTyxDQUFDLENBQUM7UUFDZjs7UUFFQSxHQUFHLEVBQUVuaUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDb21GLFNBQVMsRUFBRTs7WUFFdEJ2Z0YsQ0FBQyxDQUFDdTdGLE9BQU8sRUFBRSxLQUFLO1lBQ2hCdjdGLENBQUMsQ0FBQ204RixRQUFRLENBQUMsQ0FBQzs7UUFFaEI7O0lBRUosQ0FBQzs7SUFFRHRGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUMycEcsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ2pDLElBQUluaUcsRUFBRSxFQUFFLElBQUk7Z0JBQ0pvaUcsYUFBYSxFQUFFcm5HLElBQUksQ0FBQ3F1QixJQUFJLENBQUNwcEIsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxDQUFDO2dCQUMvRHVKLGtCQUFrQixFQUFFcmlHLENBQUMsQ0FBQzYvRixtQkFBbUIsQ0FBQyxDQUFDLENBQUM5NkYsTUFBTSxDQUFDLFFBQVEsQ0FBQ3pOLEdBQUcsRUFBRTtvQkFDN0QsT0FBTyxDQUFDQSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQ0EsSUFBSSxFQUFFMEksQ0FBQyxDQUFDcTZGLFVBQVUsQ0FBQztnQkFDN0MsQ0FBQyxDQUFDOztRQUVWcjZGLENBQUMsQ0FBQ3c2RixPQUFPLENBQUNwckYsR0FBRyxDQUFDcFAsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ3QxRixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQ3VCLElBQUksQ0FBQztZQUNwRCxhQUFhLEVBQUUsTUFBTTtZQUNyQixVQUFVLEVBQUU7UUFDaEIsQ0FBQyxDQUFDLENBQUN2QixJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQ3VCLElBQUksQ0FBQztZQUNyQyxVQUFVLEVBQUU7UUFDaEIsQ0FBQyxDQUFDOztRQUVGLEdBQUcsQ0FBQ3hHLENBQUMsQ0FBQys1RixNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2xCLzVGLENBQUMsQ0FBQ3c2RixPQUFPLENBQUNyc0YsR0FBRyxDQUFDbk8sQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ3QxRixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzdMLElBQUksQ0FBQyxRQUFRLENBQUMvQixDQUFDLEVBQUU7Z0JBQ2hFLElBQUlpckcsa0JBQWtCLEVBQUVELGlCQUFpQixDQUFDdHNHLE9BQU8sQ0FBQ3NCLENBQUMsQ0FBQzs7Z0JBRXBEdW5DLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3A0QixJQUFJLENBQUM7b0JBQ1QsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLElBQUksRUFBRSxjQUFjLEVBQUV4RyxDQUFDLENBQUM4MkYsWUFBWSxFQUFFei9GLENBQUM7b0JBQ3ZDLFVBQVUsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUM7O2dCQUVGLEdBQUcsQ0FBQ2lyRyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsRUFBRTttQkFDM0IsSUFBSUMsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUV2aUcsQ0FBQyxDQUFDODJGLFlBQVksRUFBRXdMO21CQUNoRSxHQUFHLENBQUMxakUsQ0FBQyxDQUFDLElBQUksRUFBRTJqRSxpQkFBaUIsQ0FBQyxDQUFDNXBHLE1BQU0sRUFBRTtxQkFDckNpbUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDcDRCLElBQUksQ0FBQzt5QkFDVCxrQkFBa0IsRUFBRSs3RjtxQkFDeEIsQ0FBQyxDQUFDO21CQUNKO2dCQUNIO1lBQ0osQ0FBQyxDQUFDOztZQUVGdmlHLENBQUMsQ0FBQys1RixLQUFLLENBQUN2ekYsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzdMLElBQUksQ0FBQyxRQUFRLENBQUMvQixDQUFDLEVBQUU7Z0JBQ3hELElBQUltckcsaUJBQWlCLEVBQUVILGlCQUFpQixDQUFDaHJHLENBQUMsQ0FBQzs7Z0JBRTNDdW5DLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3A0QixJQUFJLENBQUM7b0JBQ1QsTUFBTSxFQUFFO2dCQUNaLENBQUMsQ0FBQzs7Z0JBRUZvNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDMzVCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQ3ZMLEtBQUssQ0FBQyxDQUFDLENBQUM4TSxJQUFJLENBQUM7b0JBQ2hDLE1BQU0sRUFBRSxLQUFLO29CQUNiLElBQUksRUFBRSxzQkFBc0IsRUFBRXhHLENBQUMsQ0FBQzgyRixZQUFZLEVBQUV6L0YsQ0FBQztvQkFDL0MsZUFBZSxFQUFFLGNBQWMsRUFBRTJJLENBQUMsQ0FBQzgyRixZQUFZLEVBQUUwTCxnQkFBZ0I7b0JBQ2pFLFlBQVksRUFBRSxDQUFDbnJHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUrcUcsWUFBWTtvQkFDN0MsZUFBZSxFQUFFLElBQUk7b0JBQ3JCLFVBQVUsRUFBRTtnQkFDaEIsQ0FBQyxDQUFDOztZQUVOLENBQUMsQ0FBQyxDQUFDem9HLEVBQUUsQ0FBQ3FHLENBQUMsQ0FBQzg1RixZQUFZLENBQUMsQ0FBQzcwRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUN1QixJQUFJLENBQUM7Z0JBQ3RDLGVBQWUsRUFBRSxNQUFNO2dCQUN2QixVQUFVLEVBQUU7WUFDaEIsQ0FBQyxDQUFDLENBQUN6TSxHQUFHLENBQUMsQ0FBQztRQUNaOztRQUVBLElBQUksQ0FBQyxJQUFJMUMsQ0FBQyxDQUFDMkksQ0FBQyxDQUFDODVGLFlBQVksRUFBRW54RSxHQUFHLENBQUN0eEIsQ0FBQyxDQUFDMkksQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRXpoRyxFQUFFLEVBQUVzeEIsR0FBRyxFQUFFdHhCLENBQUMsRUFBRSxFQUFFO1VBQ3JFLEdBQUcsQ0FBQzJJLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzg5RixhQUFhLEVBQUU7WUFDM0JqNEYsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdnRyxFQUFFLENBQUN0QyxDQUFDLENBQUMsQ0FBQ21QLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUN6QyxFQUFFLEtBQUs7WUFDTHhHLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM3Z0csRUFBRSxDQUFDdEMsQ0FBQyxDQUFDLENBQUNnNUIsVUFBVSxDQUFDLFVBQVUsQ0FBQztVQUN4QztRQUNGOztRQUVBcndCLENBQUMsQ0FBQys4RixXQUFXLENBQUMsQ0FBQzs7SUFFbkIsQ0FBQzs7SUFFRGxHLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNpcUcsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXpDLElBQUl6aUcsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUN5MkUsT0FBTyxJQUFJLEtBQUssR0FBRzV3RSxDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7WUFDcEU5NEYsQ0FBQyxDQUFDbzZGO2VBQ0MsQ0FBQ3o5RSxHQUFHLENBQUMsYUFBYTtlQUNsQixDQUFDTCxFQUFFLENBQUMsYUFBYSxFQUFFO29CQUNkOUgsT0FBTyxFQUFFO2VBQ2QsQ0FBQyxFQUFFeFUsQ0FBQyxDQUFDczhGLFdBQVcsQ0FBQztZQUNwQnQ4RixDQUFDLENBQUNtNkY7ZUFDQyxDQUFDeDlFLEdBQUcsQ0FBQyxhQUFhO2VBQ2xCLENBQUNMLEVBQUUsQ0FBQyxhQUFhLEVBQUU7b0JBQ2Q5SCxPQUFPLEVBQUU7ZUFDZCxDQUFDLEVBQUV4VSxDQUFDLENBQUNzOEYsV0FBVyxDQUFDOztZQUVwQixHQUFHLENBQUN0OEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNjhGLGNBQWMsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xDaDNGLENBQUMsQ0FBQ282RixVQUFVLENBQUM5OUUsRUFBRSxDQUFDLGVBQWUsRUFBRXRjLENBQUMsQ0FBQzQ4RixVQUFVLENBQUM7Z0JBQzlDNThGLENBQUMsQ0FBQ202RixVQUFVLENBQUM3OUUsRUFBRSxDQUFDLGVBQWUsRUFBRXRjLENBQUMsQ0FBQzQ4RixVQUFVLENBQUM7WUFDbEQ7UUFDSjs7SUFFSixDQUFDOztJQUVEL0YsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ2txRyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXZDLElBQUkxaUcsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUMwOUYsS0FBSyxJQUFJLEtBQUssR0FBRzczRixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7WUFDbEVsNkQsQ0FBQyxDQUFDLElBQUksRUFBRTUrQixDQUFDLENBQUMrNUYsS0FBSyxDQUFDLENBQUN6OUUsRUFBRSxDQUFDLGFBQWEsRUFBRTtnQkFDL0I5SCxPQUFPLEVBQUU7WUFDYixDQUFDLEVBQUV4VSxDQUFDLENBQUNzOEYsV0FBVyxDQUFDOztZQUVqQixHQUFHLENBQUN0OEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNjhGLGNBQWMsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xDaDNGLENBQUMsQ0FBQys1RixLQUFLLENBQUN6OUUsRUFBRSxDQUFDLGVBQWUsRUFBRXRjLENBQUMsQ0FBQzQ4RixVQUFVLENBQUM7WUFDN0M7UUFDSjs7UUFFQSxHQUFHLENBQUM1OEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMDlGLEtBQUssSUFBSSxLQUFLLEdBQUc3M0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcStGLGlCQUFpQixJQUFJLEtBQUssR0FBR3g0RixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7O1lBRXpHbDZELENBQUMsQ0FBQyxJQUFJLEVBQUU1K0IsQ0FBQyxDQUFDKzVGLEtBQUs7Z0JBQ1gsQ0FBQ3o5RSxFQUFFLENBQUMsa0JBQWtCLEVBQUVzaUIsQ0FBQyxDQUFDVixLQUFLLENBQUNsK0IsQ0FBQyxDQUFDKy9GLFNBQVMsRUFBRS8vRixDQUFDLEVBQUUsSUFBSSxDQUFDO2dCQUNyRCxDQUFDc2MsRUFBRSxDQUFDLGtCQUFrQixFQUFFc2lCLENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQysvRixTQUFTLEVBQUUvL0YsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDOztRQUUvRDs7SUFFSixDQUFDOztJQUVENjJGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNtcUcsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXpDLElBQUkzaUcsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxFQUFFQSxDQUFDLENBQUM3RixPQUFPLENBQUNtK0YsYUFBYSxFQUFFOztZQUUxQnQ0RixDQUFDLENBQUNpcEYsS0FBSyxDQUFDM3NFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRXNpQixDQUFDLENBQUNWLEtBQUssQ0FBQ2wrQixDQUFDLENBQUMrL0YsU0FBUyxFQUFFLy9GLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3REEsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQzNzRSxFQUFFLENBQUMsa0JBQWtCLEVBQUVzaUIsQ0FBQyxDQUFDVixLQUFLLENBQUNsK0IsQ0FBQyxDQUFDKy9GLFNBQVMsRUFBRS8vRixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7O1FBRWxFOztJQUVKLENBQUM7O0lBRUQ2MkYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3lwRyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFMUMsSUFBSWppRyxFQUFFLEVBQUUsSUFBSTs7UUFFWkEsQ0FBQyxDQUFDeWlHLGVBQWUsQ0FBQyxDQUFDOztRQUVuQnppRyxDQUFDLENBQUMwaUcsYUFBYSxDQUFDLENBQUM7UUFDakIxaUcsQ0FBQyxDQUFDMmlHLGVBQWUsQ0FBQyxDQUFDOztRQUVuQjNpRyxDQUFDLENBQUNpcEYsS0FBSyxDQUFDM3NFLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtZQUMzQ3FyRSxNQUFNLEVBQUU7UUFDWixDQUFDLEVBQUUzbkYsQ0FBQyxDQUFDMDhGLFlBQVksQ0FBQztRQUNsQjE4RixDQUFDLENBQUNpcEYsS0FBSyxDQUFDM3NFLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtZQUMxQ3FyRSxNQUFNLEVBQUU7UUFDWixDQUFDLEVBQUUzbkYsQ0FBQyxDQUFDMDhGLFlBQVksQ0FBQztRQUNsQjE4RixDQUFDLENBQUNpcEYsS0FBSyxDQUFDM3NFLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtZQUN2Q3FyRSxNQUFNLEVBQUU7UUFDWixDQUFDLEVBQUUzbkYsQ0FBQyxDQUFDMDhGLFlBQVksQ0FBQztRQUNsQjE4RixDQUFDLENBQUNpcEYsS0FBSyxDQUFDM3NFLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUM3Q3FyRSxNQUFNLEVBQUU7UUFDWixDQUFDLEVBQUUzbkYsQ0FBQyxDQUFDMDhGLFlBQVksQ0FBQzs7UUFFbEIxOEYsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQzNzRSxFQUFFLENBQUMsYUFBYSxFQUFFdGMsQ0FBQyxDQUFDdThGLFlBQVksQ0FBQzs7UUFFekMzOUQsQ0FBQyxDQUFDenBDLFFBQVEsQ0FBQyxDQUFDbW5CLEVBQUUsQ0FBQ3RjLENBQUMsQ0FBQys3RixnQkFBZ0IsRUFBRW45RCxDQUFDLENBQUNWLEtBQUssQ0FBQ2wrQixDQUFDLENBQUNxb0IsVUFBVSxFQUFFcm9CLENBQUMsQ0FBQyxDQUFDOztRQUU1RCxHQUFHLENBQUNBLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzY4RixjQUFjLElBQUksSUFBSSxFQUFFO1lBQ2xDaDNGLENBQUMsQ0FBQ2lwRixLQUFLLENBQUMzc0UsRUFBRSxDQUFDLGVBQWUsRUFBRXRjLENBQUMsQ0FBQzQ4RixVQUFVLENBQUM7UUFDN0M7O1FBRUEsR0FBRyxDQUFDNThGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzY5RixjQUFjLElBQUksSUFBSSxFQUFFO1lBQ2xDcDVELENBQUMsQ0FBQzUrQixDQUFDLENBQUN1NkYsV0FBVyxDQUFDLENBQUM1ckYsUUFBUSxDQUFDLENBQUMsQ0FBQzJOLEVBQUUsQ0FBQyxhQUFhLEVBQUV0YyxDQUFDLENBQUN3OEYsYUFBYSxDQUFDO1FBQ2xFOztRQUVBNTlELENBQUMsQ0FBQ3RwQyxNQUFNLENBQUMsQ0FBQ2duQixFQUFFLENBQUMsaUNBQWlDLEVBQUV0YyxDQUFDLENBQUM4MkYsV0FBVyxFQUFFbDRELENBQUMsQ0FBQ1YsS0FBSyxDQUFDbCtCLENBQUMsQ0FBQ2lnRyxpQkFBaUIsRUFBRWpnRyxDQUFDLENBQUMsQ0FBQzs7UUFFL0Y0K0IsQ0FBQyxDQUFDdHBDLE1BQU0sQ0FBQyxDQUFDZ25CLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRXRjLENBQUMsQ0FBQzgyRixXQUFXLEVBQUVsNEQsQ0FBQyxDQUFDVixLQUFLLENBQUNsK0IsQ0FBQyxDQUFDd3FELE1BQU0sRUFBRXhxRCxDQUFDLENBQUMsQ0FBQzs7UUFFekU0K0IsQ0FBQyxDQUFDLG1CQUFtQixFQUFFNStCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUMsQ0FBQ2orRSxFQUFFLENBQUMsV0FBVyxFQUFFdGMsQ0FBQyxDQUFDeWUsY0FBYyxDQUFDOztRQUV2RW1nQixDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUNnbkIsRUFBRSxDQUFDLG9CQUFvQixFQUFFdGMsQ0FBQyxDQUFDODJGLFdBQVcsRUFBRTkyRixDQUFDLENBQUN5OEYsV0FBVyxDQUFDO1FBQ2hFNzlELENBQUMsQ0FBQzUrQixDQUFDLENBQUN5OEYsV0FBVyxDQUFDOztJQUVwQixDQUFDOztJQUVENUYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ29xRyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRWhDLElBQUk1aUcsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUN5MkUsT0FBTyxJQUFJLEtBQUssR0FBRzV3RSxDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7O1lBRXBFOTRGLENBQUMsQ0FBQ282RixVQUFVLENBQUM1Z0YsSUFBSSxDQUFDLENBQUM7WUFDbkJ4WixDQUFDLENBQUNtNkYsVUFBVSxDQUFDM2dGLElBQUksQ0FBQyxDQUFDOztRQUV2Qjs7UUFFQSxHQUFHLENBQUN4WixDQUFDLENBQUM3RixPQUFPLENBQUMwOUYsS0FBSyxJQUFJLEtBQUssR0FBRzczRixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7O1lBRWxFOTRGLENBQUMsQ0FBQys1RixLQUFLLENBQUN2Z0YsSUFBSSxDQUFDLENBQUM7O1FBRWxCOztJQUVKLENBQUM7O0lBRURxOUUsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ29rRyxXQUFXLEVBQUUsUUFBUSxDQUFDbGdGLEtBQUssRUFBRTs7UUFFekMsSUFBSTFjLEVBQUUsRUFBRSxJQUFJOztRQUVaLEVBQUUsQ0FBQyxDQUFDMGMsS0FBSyxDQUFDbGlCLE1BQU0sQ0FBQzIvQyxPQUFPLENBQUMzNEMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDckQsR0FBRyxDQUFDa2IsS0FBSyxDQUFDMEUsUUFBUSxJQUFJLEdBQUcsR0FBR3BoQixDQUFDLENBQUM3RixPQUFPLENBQUM2OEYsY0FBYyxJQUFJLElBQUksRUFBRTtnQkFDMURoM0YsQ0FBQyxDQUFDczhGLFdBQVcsQ0FBQztvQkFDVmptRixJQUFJLEVBQUU7d0JBQ0Y3QixPQUFPLEVBQUV4VSxDQUFDLENBQUM3RixPQUFPLENBQUN5K0YsSUFBSSxJQUFJLEtBQUssRUFBRSxPQUFPLEdBQUc7b0JBQ2hEO2dCQUNKLENBQUMsQ0FBQztZQUNOLEVBQUUsS0FBSyxHQUFHLENBQUNsOEUsS0FBSyxDQUFDMEUsUUFBUSxJQUFJLEdBQUcsR0FBR3BoQixDQUFDLENBQUM3RixPQUFPLENBQUM2OEYsY0FBYyxJQUFJLElBQUksRUFBRTtnQkFDakVoM0YsQ0FBQyxDQUFDczhGLFdBQVcsQ0FBQztvQkFDVmptRixJQUFJLEVBQUU7d0JBQ0Y3QixPQUFPLEVBQUV4VSxDQUFDLENBQUM3RixPQUFPLENBQUN5K0YsSUFBSSxJQUFJLEtBQUssRUFBRSxXQUFXLEVBQUU7b0JBQ25EO2dCQUNKLENBQUMsQ0FBQztZQUNOO1FBQ0o7O0lBRUosQ0FBQzs7SUFFRC9CLEtBQUssQ0FBQ3IrRixTQUFTLENBQUM0L0YsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVsQyxJQUFJcDRGLEVBQUUsRUFBRSxJQUFJO1lBQ1I2aUcsU0FBUyxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsUUFBUTs7UUFFL0MsU0FBU0MsVUFBVSxDQUFDQyxXQUFXLEVBQUU7O1lBRTdCdGtFLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRXNrRSxXQUFXLENBQUMsQ0FBQzlwRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7O2dCQUU3QyxJQUFJNlEsTUFBTSxFQUFFMjBCLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2Z1a0UsWUFBWSxFQUFFdmtFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3A0QixJQUFJLENBQUMsV0FBVyxDQUFDO29CQUN2QzQ4RixZQUFZLEVBQUV4a0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDcDRCLElBQUksQ0FBQyxhQUFhLENBQUM7b0JBQ3pDNjhGLFlBQVksRUFBRXprRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNwNEIsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHeEcsQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ24xRixJQUFJLENBQUMsWUFBWSxDQUFDO29CQUN4RTg4RixZQUFZLEVBQUVudUcsUUFBUSxDQUFDcUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7Z0JBRS9DOHJHLFdBQVcsQ0FBQzNvRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7O29CQUU1QjF3Qjt3QkFDSSxDQUFDNmtCLE9BQU8sQ0FBQyxFQUFFbkYsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRTs7NEJBRXJDLEdBQUcsQ0FBQ3k1RSxXQUFXLEVBQUU7Z0NBQ2JuNUY7b0NBQ0ksQ0FBQ3pELElBQUksQ0FBQyxRQUFRLEVBQUU0OEYsWUFBWSxDQUFDOztnQ0FFakMsR0FBRyxDQUFDQyxVQUFVLEVBQUU7b0NBQ1pwNUY7d0NBQ0ksQ0FBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUU2OEYsV0FBVyxDQUFDO2dDQUNuQzs0QkFDSjs7NEJBRUFwNUY7Z0NBQ0ksQ0FBQ3pELElBQUksQ0FBQyxLQUFLLEVBQUUyOEYsV0FBVztnQ0FDeEIsQ0FBQ3IwRSxPQUFPLENBQUMsRUFBRW5GLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0NBQ3JDMWY7d0NBQ0ksQ0FBQ29tQixVQUFVLENBQUMsa0NBQWtDO3dDQUM5QyxDQUFDcUIsV0FBVyxDQUFDLGVBQWUsQ0FBQztnQ0FDckMsQ0FBQyxDQUFDOzRCQUNOMXhCLENBQUMsQ0FBQzI3RixPQUFPLENBQUNsOEUsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDemYsQ0FBQyxFQUFFaUssS0FBSyxFQUFFazVGLFdBQVcsQ0FBQyxDQUFDO3dCQUM1RCxDQUFDLENBQUM7O2dCQUVWLENBQUM7O2dCQUVERyxXQUFXLENBQUMxb0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFOztvQkFFN0Izd0I7d0JBQ0ksQ0FBQ29tQixVQUFVLEVBQUUsWUFBWTt3QkFDekIsQ0FBQ3FCLFdBQVcsRUFBRSxnQkFBZ0I7d0JBQzlCLENBQUNMLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQzs7b0JBRXZDcnhCLENBQUMsQ0FBQzI3RixPQUFPLENBQUNsOEUsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFemYsQ0FBQyxFQUFFaUssS0FBSyxFQUFFazVGLFlBQVksQ0FBQyxDQUFDOztnQkFFakUsQ0FBQzs7Z0JBRURHLFdBQVcsQ0FBQ3hzRyxJQUFJLEVBQUVxc0csV0FBVzs7WUFFakMsQ0FBQyxDQUFDOztRQUVOOztRQUVBLEdBQUcsQ0FBQ25qRyxDQUFDLENBQUM3RixPQUFPLENBQUNxOUYsV0FBVyxJQUFJLElBQUksRUFBRTtZQUMvQixHQUFHLENBQUN4M0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsSUFBSSxJQUFJLEVBQUU7Z0JBQzdCNkssV0FBVyxFQUFFL2lHLENBQUMsQ0FBQzg1RixhQUFhLEVBQUUsQ0FBQzk1RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlEa0ssU0FBUyxFQUFFRCxXQUFXLEVBQUUvaUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRSxDQUFDO1lBQ3RELEVBQUUsS0FBSztnQkFDSGlLLFdBQVcsRUFBRWhvRyxJQUFJLENBQUM0dEIsR0FBRyxDQUFDLENBQUMsRUFBRTNvQixDQUFDLENBQUM4NUYsYUFBYSxFQUFFLENBQUM5NUYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFa0ssU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDaGpHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFOTRGLENBQUMsQ0FBQzg1RixZQUFZO1lBQ3BFO1FBQ0osRUFBRSxLQUFLO1lBQ0hpSixXQUFXLEVBQUUvaUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsRUFBRWw0RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFOTRGLENBQUMsQ0FBQzg1RixhQUFhLEVBQUU5NUYsQ0FBQyxDQUFDODVGLFlBQVk7WUFDMUZrSixTQUFTLEVBQUVqb0csSUFBSSxDQUFDcXVCLElBQUksQ0FBQzI1RSxXQUFXLEVBQUUvaUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksQ0FBQztZQUN6RCxHQUFHLENBQUM5NEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTFDLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ3pCLEdBQUcsQ0FBQ3V6RCxXQUFXLEVBQUUsQ0FBQyxFQUFFQSxVQUFVLEVBQUU7Z0JBQ2hDLEdBQUcsQ0FBQ0MsU0FBUyxHQUFHaGpHLENBQUMsQ0FBQ3E2RixVQUFVLEVBQUUySSxRQUFRLEVBQUU7WUFDNUM7UUFDSjs7UUFFQUgsVUFBVSxFQUFFN2lHLENBQUMsQ0FBQzI3RixPQUFPLENBQUMxMkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDclAsS0FBSyxDQUFDbXRHLFVBQVUsRUFBRUMsUUFBUSxDQUFDOztRQUV0RSxHQUFHLENBQUNoakcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDaStGLFNBQVMsSUFBSSxhQUFhLEVBQUU7WUFDdEMsSUFBSW1MLFVBQVUsRUFBRVIsV0FBVyxFQUFFLENBQUM7Z0JBQzFCUyxVQUFVLEVBQUVSLFFBQVE7Z0JBQ3BCeEksUUFBUSxFQUFFeDZGLENBQUMsQ0FBQzI3RixPQUFPLENBQUMxMkYsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7WUFFNUMsSUFBSSxDQUFDLElBQUk1TixFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUUySSxDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsY0FBYyxFQUFFMWhHLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxHQUFHLENBQUNrc0csVUFBVSxFQUFFLENBQUMsRUFBRUEsVUFBVSxFQUFFdmpHLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUUsQ0FBQztnQkFDL0N3SSxVQUFVLEVBQUVBLFNBQVMsQ0FBQ3p6RixHQUFHLENBQUNvckYsT0FBTyxDQUFDN2dHLEVBQUUsQ0FBQzRwRyxTQUFTLENBQUMsQ0FBQztnQkFDaERWLFVBQVUsRUFBRUEsU0FBUyxDQUFDenpGLEdBQUcsQ0FBQ29yRixPQUFPLENBQUM3Z0csRUFBRSxDQUFDNnBHLFNBQVMsQ0FBQyxDQUFDO2dCQUNoREQsU0FBUyxFQUFFO2dCQUNYQyxTQUFTLEVBQUU7WUFDZjtRQUNKOztRQUVBUCxVQUFVLENBQUNKLFNBQVMsQ0FBQzs7UUFFckIsR0FBRyxDQUFDN2lHLENBQUMsQ0FBQ3E2RixXQUFXLEdBQUdyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtZQUN4Q2dLLFdBQVcsRUFBRTlpRyxDQUFDLENBQUMyN0YsT0FBTyxDQUFDMTJGLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDM0NnK0YsVUFBVSxDQUFDSCxVQUFVLENBQUM7UUFDMUIsRUFBRTtRQUNGLEdBQUcsQ0FBQzlpRyxDQUFDLENBQUM4NUYsYUFBYSxHQUFHOTVGLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtZQUN6RGdLLFdBQVcsRUFBRTlpRyxDQUFDLENBQUMyN0YsT0FBTyxDQUFDMTJGLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ3JQLEtBQUssQ0FBQyxDQUFDLEVBQUVvSyxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxDQUFDO1lBQzdFbUssVUFBVSxDQUFDSCxVQUFVLENBQUM7UUFDMUIsRUFBRSxLQUFLLEdBQUcsQ0FBQzlpRyxDQUFDLENBQUM4NUYsYUFBYSxJQUFJLENBQUMsRUFBRTtZQUM3QmdKLFdBQVcsRUFBRTlpRyxDQUFDLENBQUMyN0YsT0FBTyxDQUFDMTJGLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ3JQLEtBQUssQ0FBQ29LLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0VtSyxVQUFVLENBQUNILFVBQVUsQ0FBQztRQUMxQjs7SUFFSixDQUFDOztJQUVEak0sS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3dwRyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXBDLElBQUloaUcsRUFBRSxFQUFFLElBQUk7O1FBRVpBLENBQUMsQ0FBQ3k4RixXQUFXLENBQUMsQ0FBQzs7UUFFZno4RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDamlGLEdBQUcsQ0FBQztZQUNkcVIsT0FBTyxFQUFFO1FBQ2IsQ0FBQyxDQUFDOztRQUVGM3BCLENBQUMsQ0FBQzI3RixPQUFPLENBQUNqcUUsV0FBVyxDQUFDLGVBQWUsQ0FBQzs7UUFFdEMxeEIsQ0FBQyxDQUFDNGlHLE1BQU0sQ0FBQyxDQUFDOztRQUVWLEdBQUcsQ0FBQzVpRyxDQUFDLENBQUM3RixPQUFPLENBQUNpK0YsU0FBUyxJQUFJLGFBQWEsRUFBRTtZQUN0Q3A0RixDQUFDLENBQUN5akcsbUJBQW1CLENBQUMsQ0FBQztRQUMzQjs7SUFFSixDQUFDOztJQUVENU0sS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3lJLEtBQUssRUFBRTQxRixLQUFLLENBQUNyK0YsU0FBUyxDQUFDa3JHLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFMUQsSUFBSTFqRyxFQUFFLEVBQUUsSUFBSTs7UUFFWkEsQ0FBQyxDQUFDczhGLFdBQVcsQ0FBQztZQUNWam1GLElBQUksRUFBRTtnQkFDRjdCLE9BQU8sRUFBRTtZQUNiO1FBQ0osQ0FBQyxDQUFDOztJQUVOLENBQUM7O0lBRURxaUYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3luRyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFM0MsSUFBSWpnRyxFQUFFLEVBQUUsSUFBSTs7UUFFWkEsQ0FBQyxDQUFDKytGLGVBQWUsQ0FBQyxDQUFDO1FBQ25CLytGLENBQUMsQ0FBQ3k4RixXQUFXLENBQUMsQ0FBQzs7SUFFbkIsQ0FBQzs7SUFFRDVGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNtckcsTUFBTSxFQUFFOU0sS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ29yRyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRTVELElBQUk1akcsRUFBRSxFQUFFLElBQUk7O1FBRVpBLENBQUMsQ0FBQ284RixhQUFhLENBQUMsQ0FBQztRQUNqQnA4RixDQUFDLENBQUN1N0YsT0FBTyxFQUFFLElBQUk7O0lBRW5CLENBQUM7O0lBRUQxRSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDcXJHLEtBQUssRUFBRWhOLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNzckcsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUUxRCxJQUFJOWpHLEVBQUUsRUFBRSxJQUFJOztRQUVaQSxDQUFDLENBQUNtOEYsUUFBUSxDQUFDLENBQUM7UUFDWm44RixDQUFDLENBQUM3RixPQUFPLENBQUNvbUYsU0FBUyxFQUFFLElBQUk7UUFDekJ2Z0YsQ0FBQyxDQUFDdTdGLE9BQU8sRUFBRSxLQUFLO1FBQ2hCdjdGLENBQUMsQ0FBQ3E3RixTQUFTLEVBQUUsS0FBSztRQUNsQnI3RixDQUFDLENBQUNzN0YsWUFBWSxFQUFFLEtBQUs7O0lBRXpCLENBQUM7O0lBRUR6RSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDdXJHLFVBQVUsRUFBRSxRQUFRLENBQUM3MEYsS0FBSyxFQUFFOztRQUV4QyxJQUFJbFAsRUFBRSxFQUFFLElBQUk7O1FBRVosRUFBRSxFQUFFLENBQUNBLENBQUMsQ0FBQzg2RixVQUFVLEVBQUU7O1lBRWY5NkYsQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ2w4RSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUN6ZixDQUFDLEVBQUVrUCxLQUFLLENBQUMsQ0FBQzs7WUFFNUNsUCxDQUFDLENBQUMwNUYsVUFBVSxFQUFFLEtBQUs7O1lBRW5CLEdBQUcsQ0FBQzE1RixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7Z0JBQ3ZDOTRGLENBQUMsQ0FBQ3k4RixXQUFXLENBQUMsQ0FBQztZQUNuQjs7WUFFQXo4RixDQUFDLENBQUMyNkYsVUFBVSxFQUFFLElBQUk7O1lBRWxCLEdBQUcsRUFBRTM2RixDQUFDLENBQUM3RixPQUFPLENBQUNvbUYsU0FBUyxFQUFFO2dCQUN0QnZnRixDQUFDLENBQUNtOEYsUUFBUSxDQUFDLENBQUM7WUFDaEI7O1lBRUEsR0FBRyxDQUFDbjhGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzY4RixjQUFjLElBQUksSUFBSSxFQUFFO2dCQUNsQ2gzRixDQUFDLENBQUNtaUcsT0FBTyxDQUFDLENBQUM7O2dCQUVYLEdBQUcsQ0FBQ25pRyxDQUFDLENBQUM3RixPQUFPLENBQUM4OUYsYUFBYSxFQUFFO29CQUN6QixJQUFJK0wsY0FBYyxFQUFFcGxFLENBQUMsQ0FBQzUrQixDQUFDLENBQUN3NkYsT0FBTyxDQUFDM2hHLEdBQUcsQ0FBQ21ILENBQUMsQ0FBQzg1RixZQUFZLENBQUMsQ0FBQztvQkFDcERrSyxhQUFhLENBQUN4OUYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzBiLEtBQUssQ0FBQyxDQUFDO2dCQUM3QztZQUNKOztRQUVKOztJQUVKLENBQUM7O0lBRUQyMEUsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3FXLEtBQUssRUFBRWdvRixLQUFLLENBQUNyK0YsU0FBUyxDQUFDeXJHLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFMUQsSUFBSWprRyxFQUFFLEVBQUUsSUFBSTs7UUFFWkEsQ0FBQyxDQUFDczhGLFdBQVcsQ0FBQztZQUNWam1GLElBQUksRUFBRTtnQkFDRjdCLE9BQU8sRUFBRTtZQUNiO1FBQ0osQ0FBQyxDQUFDOztJQUVOLENBQUM7O0lBRURxaUYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ2ltQixlQUFlLEVBQUUsUUFBUSxDQUFDL0IsS0FBSyxFQUFFOztRQUU3Q0EsS0FBSyxDQUFDK0IsY0FBYyxDQUFDLENBQUM7O0lBRTFCLENBQUM7O0lBRURvNEUsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ2lyRyxvQkFBb0IsRUFBRSxRQUFRLEVBQUVTLFNBQVMsRUFBRTs7UUFFdkRBLFNBQVMsRUFBRUEsU0FBUyxHQUFHLENBQUM7O1FBRXhCLElBQUlsa0csRUFBRSxFQUFFLElBQUk7WUFDUm1rRyxZQUFZLEVBQUV2bEUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFNStCLENBQUMsQ0FBQzI3RixRQUFRLENBQUM7WUFDOUMxeEYsS0FBSztZQUNMazVGLFdBQVc7WUFDWEMsV0FBVztZQUNYQyxVQUFVO1lBQ1ZDLFdBQVc7O1FBRWYsR0FBRyxFQUFFYSxXQUFXLENBQUN4ckcsT0FBTyxFQUFFOztZQUV0QnNSLE1BQU0sRUFBRWs2RixXQUFXLENBQUN6cUcsS0FBSyxDQUFDLENBQUM7WUFDM0J5cEcsWUFBWSxFQUFFbDVGLEtBQUssQ0FBQ3pELElBQUksQ0FBQyxXQUFXLENBQUM7WUFDckM0OEYsWUFBWSxFQUFFbjVGLEtBQUssQ0FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUM7WUFDdkM2OEYsWUFBWSxFQUFFcDVGLEtBQUssQ0FBQ3pELElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBR3hHLENBQUMsQ0FBQzI3RixPQUFPLENBQUNuMUYsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN0RTg4RixZQUFZLEVBQUVudUcsUUFBUSxDQUFDcUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7WUFFM0M4ckcsV0FBVyxDQUFDM29FLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTs7Z0JBRTVCLEdBQUcsQ0FBQ3lvRSxXQUFXLEVBQUU7b0JBQ2JuNUY7d0JBQ0ksQ0FBQ3pELElBQUksQ0FBQyxRQUFRLEVBQUU0OEYsWUFBWSxDQUFDOztvQkFFakMsR0FBRyxDQUFDQyxVQUFVLEVBQUU7d0JBQ1pwNUY7NEJBQ0ksQ0FBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUU2OEYsV0FBVyxDQUFDO29CQUNuQztnQkFDSjs7Z0JBRUFwNUY7b0JBQ0ksQ0FBQ3pELElBQUksRUFBRSxLQUFLLEVBQUUyOEYsWUFBWTtvQkFDMUIsQ0FBQzl5RSxVQUFVLENBQUMsa0NBQWtDO29CQUM5QyxDQUFDcUIsV0FBVyxDQUFDLGVBQWUsQ0FBQzs7Z0JBRWpDLEdBQUcsRUFBRTF4QixDQUFDLENBQUM3RixPQUFPLENBQUM4OEYsZUFBZSxJQUFJLEtBQUssRUFBRTtvQkFDckNqM0YsQ0FBQyxDQUFDeThGLFdBQVcsQ0FBQyxDQUFDO2dCQUNuQjs7Z0JBRUF6OEYsQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ2w4RSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUV6ZixDQUFDLEVBQUVpSyxLQUFLLEVBQUVrNUYsWUFBWSxDQUFDLENBQUM7Z0JBQzFEbmpHLENBQUMsQ0FBQ3lqRyxtQkFBbUIsQ0FBQyxDQUFDOztZQUUzQixDQUFDOztZQUVESCxXQUFXLENBQUMxb0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFOztnQkFFN0IsR0FBRyxFQUFFc3BFLFNBQVMsRUFBRSxFQUFFLEVBQUU7Ozs7Ozs7b0JBT2hCdndGLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTt3QkFDbkIzVCxDQUFDLENBQUN5akcsbUJBQW1CLEVBQUVTLFNBQVMsRUFBRSxFQUFFLENBQUM7b0JBQ3pDLENBQUMsRUFBRSxJQUFJLENBQUM7O2dCQUVaLEVBQUUsS0FBSzs7b0JBRUhqNkY7d0JBQ0ksQ0FBQ29tQixVQUFVLEVBQUUsWUFBWTt3QkFDekIsQ0FBQ3FCLFdBQVcsRUFBRSxnQkFBZ0I7d0JBQzlCLENBQUNMLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQzs7b0JBRXZDcnhCLENBQUMsQ0FBQzI3RixPQUFPLENBQUNsOEUsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFemYsQ0FBQyxFQUFFaUssS0FBSyxFQUFFazVGLFlBQVksQ0FBQyxDQUFDOztvQkFFN0RuakcsQ0FBQyxDQUFDeWpHLG1CQUFtQixDQUFDLENBQUM7O2dCQUUzQjs7WUFFSixDQUFDOztZQUVESCxXQUFXLENBQUN4c0csSUFBSSxFQUFFcXNHLFdBQVc7O1FBRWpDLEVBQUUsS0FBSzs7WUFFSG5qRyxDQUFDLENBQUMyN0YsT0FBTyxDQUFDbDhFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFemYsRUFBRSxDQUFDLENBQUM7O1FBRS9DOztJQUVKLENBQUM7O0lBRUQ2MkYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ28zQyxRQUFRLEVBQUUsUUFBUSxFQUFFdzBELGFBQWEsRUFBRTs7UUFFL0MsSUFBSXBrRyxFQUFFLEVBQUUsSUFBSSxFQUFFODVGLFlBQVksRUFBRXVLLGdCQUFnQjs7UUFFNUNBLGlCQUFpQixFQUFFcmtHLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVk7Ozs7UUFJeEQsRUFBRSxFQUFFLENBQUM5NEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsR0FBRyxFQUFFbDRGLENBQUMsQ0FBQzg1RixhQUFhLEVBQUV1SyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzlEcmtHLENBQUMsQ0FBQzg1RixhQUFhLEVBQUV1SyxnQkFBZ0I7UUFDckM7OztRQUdBLEdBQUcsRUFBRXJrRyxDQUFDLENBQUNxNkYsV0FBVyxHQUFHcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUU7WUFDMUM5NEYsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRSxDQUFDOztRQUV0Qjs7UUFFQUEsYUFBYSxFQUFFOTVGLENBQUMsQ0FBQzg1RixZQUFZOztRQUU3Qjk1RixDQUFDLENBQUNtbEMsT0FBTyxDQUFDLElBQUksQ0FBQzs7UUFFZnZHLENBQUMsQ0FBQzFrQyxNQUFNLENBQUM4RixDQUFDLEVBQUVBLENBQUMsQ0FBQ3k1RixRQUFRLEVBQUUsRUFBRUssWUFBWSxFQUFFQSxhQUFhLENBQUMsQ0FBQzs7UUFFdkQ5NUYsQ0FBQyxDQUFDMUgsSUFBSSxDQUFDLENBQUM7O1FBRVIsRUFBRSxFQUFFLENBQUM4ckcsYUFBYSxFQUFFOztZQUVoQnBrRyxDQUFDLENBQUNzOEYsV0FBVyxDQUFDO2dCQUNWam1GLElBQUksRUFBRTtvQkFDRjdCLE9BQU8sRUFBRSxPQUFPO29CQUNoQnRGLEtBQUssRUFBRTRxRjtnQkFDWDtZQUNKLENBQUMsRUFBRSxLQUFLLENBQUM7O1FBRWI7O0lBRUosQ0FBQzs7SUFFRGpELEtBQUssQ0FBQ3IrRixTQUFTLENBQUNza0csb0JBQW9CLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRTdDLElBQUk5OEYsRUFBRSxFQUFFLElBQUksRUFBRWkvRixVQUFVLEVBQUVxRixpQkFBaUIsRUFBRXQxRixDQUFDO1lBQzFDdTFGLG1CQUFtQixFQUFFdmtHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3UrRixXQUFXLEdBQUcsSUFBSTs7UUFFckQsR0FBRyxFQUFFOTVELENBQUMsQ0FBQy9uQyxJQUFJLENBQUMwdEcsa0JBQWtCLEVBQUUsSUFBSSxRQUFRLEdBQUdBLGtCQUFrQixDQUFDNXJHLE9BQU8sRUFBRTs7WUFFdkVxSCxDQUFDLENBQUN5NEYsVUFBVSxFQUFFejRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3MrRixVQUFVLEdBQUcsUUFBUTs7WUFFN0MsSUFBSSxFQUFFd0csV0FBVyxHQUFHc0YsbUJBQW1CLEVBQUU7O2dCQUVyQ3YxRixFQUFFLEVBQUVoUCxDQUFDLENBQUNrN0YsV0FBVyxDQUFDdmlHLE1BQU0sQ0FBQyxDQUFDOztnQkFFMUIsR0FBRyxDQUFDNHJHLGtCQUFrQixDQUFDcHVHLGNBQWMsQ0FBQzhvRyxVQUFVLENBQUMsRUFBRTtvQkFDL0NxRixrQkFBa0IsRUFBRUMsa0JBQWtCLENBQUN0RixVQUFVLENBQUMsQ0FBQ0EsVUFBVTs7OztvQkFJN0QsS0FBSyxFQUFFandGLEVBQUUsR0FBRyxFQUFFLEVBQUU7d0JBQ1osRUFBRSxFQUFFaFAsQ0FBQyxDQUFDazdGLFdBQVcsQ0FBQ2xzRixDQUFDLEVBQUUsR0FBR2hQLENBQUMsQ0FBQ2s3RixXQUFXLENBQUNsc0YsQ0FBQyxFQUFFLElBQUlzMUYsa0JBQWtCLEVBQUU7NEJBQzdEdGtHLENBQUMsQ0FBQ2s3RixXQUFXLENBQUNqaEcsTUFBTSxDQUFDK1UsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0I7d0JBQ0FBLENBQUMsRUFBRTtvQkFDUDs7b0JBRUFoUCxDQUFDLENBQUNrN0YsV0FBVyxDQUFDcGxHLElBQUksQ0FBQ3d1RyxpQkFBaUIsQ0FBQztvQkFDckN0a0csQ0FBQyxDQUFDbTdGLGtCQUFrQixDQUFDbUosaUJBQWlCLEVBQUUsRUFBRUMsa0JBQWtCLENBQUN0RixVQUFVLENBQUMsQ0FBQzVuRSxRQUFROztnQkFFckY7O1lBRUo7O1lBRUFyM0IsQ0FBQyxDQUFDazdGLFdBQVcsQ0FBQ2xoRyxJQUFJLENBQUMsUUFBUSxDQUFDc0UsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sRUFBRXlCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ2srRixZQUFZLEVBQUUsRUFBRS81RixDQUFDLENBQUNDLEVBQUUsRUFBRUEsQ0FBQyxDQUFDRCxDQUFDO1lBQ2hELENBQUMsQ0FBQzs7UUFFTjs7SUFFSixDQUFDOztJQUVEdTRGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUM2a0csT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVoQyxJQUFJcjlGLEVBQUUsRUFBRSxJQUFJOztRQUVaQSxDQUFDLENBQUN3NkYsUUFBUTtZQUNOeDZGLENBQUMsQ0FBQ3U2RjtnQkFDRSxDQUFDNXJGLFFBQVEsQ0FBQzNPLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3U2RCxLQUFLO2dCQUN6QixDQUFDcmpDLFFBQVEsQ0FBQyxhQUFhLENBQUM7O1FBRWhDcnhCLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzdoRyxNQUFNOztRQUUvQixHQUFHLENBQUNxSCxDQUFDLENBQUM4NUYsYUFBYSxHQUFHOTVGLENBQUMsQ0FBQ3E2RixXQUFXLEdBQUdyNkYsQ0FBQyxDQUFDODVGLGFBQWEsSUFBSSxDQUFDLEVBQUU7WUFDeEQ5NUYsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRTk1RixDQUFDLENBQUM4NUYsYUFBYSxFQUFFOTVGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixjQUFjO1FBQzlEOztRQUVBLEdBQUcsQ0FBQy80RixDQUFDLENBQUNxNkYsV0FBVyxHQUFHcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7WUFDeEM5NEYsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRSxDQUFDO1FBQ3RCOztRQUVBOTVGLENBQUMsQ0FBQzg4RixtQkFBbUIsQ0FBQyxDQUFDOztRQUV2Qjk4RixDQUFDLENBQUM4aEcsUUFBUSxDQUFDLENBQUM7UUFDWjloRyxDQUFDLENBQUNzK0YsYUFBYSxDQUFDLENBQUM7UUFDakJ0K0YsQ0FBQyxDQUFDaStGLFdBQVcsQ0FBQyxDQUFDO1FBQ2ZqK0YsQ0FBQyxDQUFDa2lHLFlBQVksQ0FBQyxDQUFDO1FBQ2hCbGlHLENBQUMsQ0FBQ3lpRyxlQUFlLENBQUMsQ0FBQztRQUNuQnppRyxDQUFDLENBQUNrK0YsU0FBUyxDQUFDLENBQUM7UUFDYmwrRixDQUFDLENBQUN1K0YsVUFBVSxDQUFDLENBQUM7UUFDZHYrRixDQUFDLENBQUMwaUcsYUFBYSxDQUFDLENBQUM7UUFDakIxaUcsQ0FBQyxDQUFDZ2dHLGtCQUFrQixDQUFDLENBQUM7UUFDdEJoZ0csQ0FBQyxDQUFDMmlHLGVBQWUsQ0FBQyxDQUFDOztRQUVuQjNpRyxDQUFDLENBQUMrK0YsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7O1FBRTlCLEdBQUcsQ0FBQy8rRixDQUFDLENBQUM3RixPQUFPLENBQUM2OUYsY0FBYyxJQUFJLElBQUksRUFBRTtZQUNsQ3A1RCxDQUFDLENBQUM1K0IsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQyxDQUFDNXJGLFFBQVEsQ0FBQyxDQUFDLENBQUMyTixFQUFFLENBQUMsYUFBYSxFQUFFdGMsQ0FBQyxDQUFDdzhGLGFBQWEsQ0FBQztRQUNsRTs7UUFFQXg4RixDQUFDLENBQUN3K0YsZUFBZSxDQUFDLE9BQU94K0YsQ0FBQyxDQUFDODVGLGFBQWEsSUFBSSxTQUFTLEVBQUU5NUYsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRSxDQUFDLENBQUM7O1FBRTFFOTVGLENBQUMsQ0FBQ3k4RixXQUFXLENBQUMsQ0FBQztRQUNmejhGLENBQUMsQ0FBQ3dnRyxZQUFZLENBQUMsQ0FBQzs7UUFFaEJ4Z0csQ0FBQyxDQUFDdTdGLE9BQU8sRUFBRSxDQUFDdjdGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ29tRixRQUFRO1FBQzlCdmdGLENBQUMsQ0FBQ204RixRQUFRLENBQUMsQ0FBQzs7UUFFWm44RixDQUFDLENBQUMyN0YsT0FBTyxDQUFDbDhFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQ3pmLENBQUMsQ0FBQyxDQUFDOztJQUVwQyxDQUFDOztJQUVENjJGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNneUQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVoQyxJQUFJeHFELEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQzQrQixDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUM4d0IsS0FBSyxDQUFDLEVBQUUsSUFBSXBtQixDQUFDLENBQUM4OEUsV0FBVyxFQUFFO1lBQ3JDOXNELFlBQVksQ0FBQ2h3QixDQUFDLENBQUN3a0csV0FBVyxDQUFDO1lBQzNCeGtHLENBQUMsQ0FBQ3drRyxZQUFZLEVBQUVsdkcsTUFBTSxDQUFDcWUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN6QzNULENBQUMsQ0FBQzg4RSxZQUFZLEVBQUVsK0MsQ0FBQyxDQUFDdHBDLE1BQU0sQ0FBQyxDQUFDOHdCLEtBQUssQ0FBQyxDQUFDO2dCQUNqQ3BtQixDQUFDLENBQUMrK0YsZUFBZSxDQUFDLENBQUM7Z0JBQ25CLEVBQUUsRUFBRSxDQUFDLytGLENBQUMsQ0FBQzg2RixVQUFVLEVBQUUsRUFBRTk2RixDQUFDLENBQUN5OEYsV0FBVyxDQUFDLENBQUMsRUFBRTtZQUMxQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1Y7SUFDSixDQUFDOztJQUVENUYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ2lzRyxZQUFZLEVBQUU1TixLQUFLLENBQUNyK0YsU0FBUyxDQUFDa3NHLFlBQVksRUFBRSxRQUFRLENBQUN4MUYsS0FBSyxFQUFFeTFGLFlBQVksRUFBRUMsU0FBUyxFQUFFOztRQUVqRyxJQUFJNWtHLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQyxNQUFNLENBQUNrUCxLQUFLLEVBQUUsSUFBSSxTQUFTLEVBQUU7WUFDN0J5MUYsYUFBYSxFQUFFejFGLEtBQUs7WUFDcEJBLE1BQU0sRUFBRXkxRixhQUFhLElBQUksS0FBSyxFQUFFLEVBQUUsRUFBRTNrRyxDQUFDLENBQUNxNkYsV0FBVyxFQUFFLENBQUM7UUFDeEQsRUFBRSxLQUFLO1lBQ0huckYsTUFBTSxFQUFFeTFGLGFBQWEsSUFBSSxLQUFLLEVBQUUsRUFBRXoxRixNQUFNLEVBQUVBLEtBQUs7UUFDbkQ7O1FBRUEsR0FBRyxDQUFDbFAsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRSxFQUFFLEdBQUduckYsTUFBTSxFQUFFLEVBQUUsR0FBR0EsTUFBTSxFQUFFbFAsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRSxDQUFDLEVBQUU7WUFDM0QsT0FBTyxLQUFLO1FBQ2hCOztRQUVBcjZGLENBQUMsQ0FBQ285RixNQUFNLENBQUMsQ0FBQzs7UUFFVixHQUFHLENBQUN3SCxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3BCNWtHLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLENBQUMsQ0FBQ2tDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLEVBQUUsS0FBSztZQUNIN1EsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQzVyRixRQUFRLENBQUMsSUFBSSxDQUFDeFUsT0FBTyxDQUFDdTZELEtBQUssQ0FBQyxDQUFDLzZELEVBQUUsQ0FBQ3VWLEtBQUssQ0FBQyxDQUFDMkIsTUFBTSxDQUFDLENBQUM7UUFDakU7O1FBRUE3USxDQUFDLENBQUN3NkYsUUFBUSxFQUFFeDZGLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLElBQUksQ0FBQ3hVLE9BQU8sQ0FBQ3U2RCxLQUFLLENBQUM7O1FBRXREMTBELENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLElBQUksQ0FBQ3hVLE9BQU8sQ0FBQ3U2RCxLQUFLLENBQUMsQ0FBQ3B3QyxNQUFNLENBQUMsQ0FBQzs7UUFFbkR0a0IsQ0FBQyxDQUFDdTZGLFdBQVcsQ0FBQ2gyRSxNQUFNLENBQUN2a0IsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzs7UUFFL0J4NkYsQ0FBQyxDQUFDNDdGLGFBQWEsRUFBRTU3RixDQUFDLENBQUN3NkYsT0FBTzs7UUFFMUJ4NkYsQ0FBQyxDQUFDcTlGLE1BQU0sQ0FBQyxDQUFDOztJQUVkLENBQUM7O0lBRUR4RyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDcXNHLE9BQU8sRUFBRSxRQUFRLENBQUN4K0UsUUFBUSxFQUFFOztRQUV4QyxJQUFJcm1CLEVBQUUsRUFBRSxJQUFJO1lBQ1I4a0csY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNsQmg5RCxDQUFDLEVBQUVKLENBQUM7O1FBRVIsR0FBRyxDQUFDMW5DLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3krRixJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3hCdnlFLFNBQVMsRUFBRSxDQUFDQSxRQUFRO1FBQ3hCO1FBQ0F5aEIsRUFBRSxFQUFFOW5DLENBQUMsQ0FBQ3c3RixhQUFhLEdBQUcsT0FBTyxFQUFFemdHLElBQUksQ0FBQ3F1QixJQUFJLENBQUMvQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSztRQUNqRXFoQixFQUFFLEVBQUUxbkMsQ0FBQyxDQUFDdzdGLGFBQWEsR0FBRyxNQUFNLEVBQUV6Z0csSUFBSSxDQUFDcXVCLElBQUksQ0FBQy9DLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLOztRQUVoRXkrRSxhQUFhLENBQUM5a0csQ0FBQyxDQUFDdzdGLFlBQVksRUFBRSxFQUFFbjFFLFFBQVE7O1FBRXhDLEdBQUcsQ0FBQ3JtQixDQUFDLENBQUM2NkYsa0JBQWtCLElBQUksS0FBSyxFQUFFO1lBQy9CNzZGLENBQUMsQ0FBQ3U2RixXQUFXLENBQUNqaUYsR0FBRyxDQUFDd3NGLGFBQWEsQ0FBQztRQUNwQyxFQUFFLEtBQUs7WUFDSEEsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNsQixHQUFHLENBQUM5a0csQ0FBQyxDQUFDbzdGLGVBQWUsSUFBSSxLQUFLLEVBQUU7Z0JBQzVCMEosYUFBYSxDQUFDOWtHLENBQUMsQ0FBQ2c3RixRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUVsekQsRUFBRSxFQUFFLEtBQUssRUFBRUosRUFBRSxFQUFFLEdBQUc7Z0JBQzdEMW5DLENBQUMsQ0FBQ3U2RixXQUFXLENBQUNqaUYsR0FBRyxDQUFDd3NGLGFBQWEsQ0FBQztZQUNwQyxFQUFFLEtBQUs7Z0JBQ0hBLGFBQWEsQ0FBQzlrRyxDQUFDLENBQUNnN0YsUUFBUSxFQUFFLEVBQUUsZUFBZSxFQUFFbHpELEVBQUUsRUFBRSxLQUFLLEVBQUVKLEVBQUUsRUFBRSxRQUFRO2dCQUNwRTFuQyxDQUFDLENBQUN1NkYsV0FBVyxDQUFDamlGLEdBQUcsQ0FBQ3dzRixhQUFhLENBQUM7WUFDcEM7UUFDSjs7SUFFSixDQUFDOztJQUVEak8sS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3VzRyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXZDLElBQUkva0csRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUN5dUMsU0FBUyxJQUFJLEtBQUssRUFBRTtZQUM5QixHQUFHLENBQUM1b0MsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxJQUFJLEVBQUU7Z0JBQy9CeDNGLENBQUMsQ0FBQ2lwRixLQUFLLENBQUMzd0UsR0FBRyxDQUFDO29CQUNSOFIsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFcHFCLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3M5RixhQUFhO2dCQUM5QyxDQUFDLENBQUM7WUFDTjtRQUNKLEVBQUUsS0FBSztZQUNIejNGLENBQUMsQ0FBQ2lwRixLQUFLLENBQUN6OEQsTUFBTSxDQUFDeHNCLENBQUMsQ0FBQ3c2RixPQUFPLENBQUM5Z0csS0FBSyxDQUFDLENBQUMsQ0FBQ2t0QyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUU1bUMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksQ0FBQztZQUM1RSxHQUFHLENBQUM5NEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxJQUFJLEVBQUU7Z0JBQy9CeDNGLENBQUMsQ0FBQ2lwRixLQUFLLENBQUMzd0UsR0FBRyxDQUFDO29CQUNSOFIsT0FBTyxFQUFFLENBQUNwcUIsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDczlGLGNBQWMsRUFBRSxNQUFNO2dCQUM5QyxDQUFDLENBQUM7WUFDTjtRQUNKOztRQUVBejNGLENBQUMsQ0FBQ2c2RixVQUFVLEVBQUVoNkYsQ0FBQyxDQUFDaXBGLEtBQUssQ0FBQzdpRSxLQUFLLENBQUMsQ0FBQztRQUM3QnBtQixDQUFDLENBQUNpNkYsV0FBVyxFQUFFajZGLENBQUMsQ0FBQ2lwRixLQUFLLENBQUN6OEQsTUFBTSxDQUFDLENBQUM7OztRQUcvQixHQUFHLENBQUN4c0IsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeXVDLFNBQVMsSUFBSSxNQUFNLEdBQUc1b0MsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDbS9GLGNBQWMsSUFBSSxLQUFLLEVBQUU7WUFDbkV0NUYsQ0FBQyxDQUFDczZGLFdBQVcsRUFBRXYvRixJQUFJLENBQUNxdUIsSUFBSSxDQUFDcHBCLENBQUMsQ0FBQ2c2RixVQUFVLEVBQUVoNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksQ0FBQztZQUM5RDk0RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDbjBFLEtBQUssQ0FBQ3JyQixJQUFJLENBQUNxdUIsSUFBSSxDQUFDLENBQUNwcEIsQ0FBQyxDQUFDczZGLFdBQVcsRUFBRXQ2RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDNXJGLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQ2hXLE1BQU0sQ0FBQyxDQUFDLENBQUM7O1FBRWxHLEVBQUUsS0FBSyxHQUFHLENBQUNxSCxDQUFDLENBQUM3RixPQUFPLENBQUNtL0YsY0FBYyxJQUFJLElBQUksRUFBRTtZQUN6Q3Q1RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDbjBFLEtBQUssQ0FBQyxLQUFLLEVBQUVwbUIsQ0FBQyxDQUFDcTZGLFVBQVUsQ0FBQztRQUM1QyxFQUFFLEtBQUs7WUFDSHI2RixDQUFDLENBQUNzNkYsV0FBVyxFQUFFdi9GLElBQUksQ0FBQ3F1QixJQUFJLENBQUNwcEIsQ0FBQyxDQUFDZzZGLFNBQVMsQ0FBQztZQUNyQ2g2RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDL3RFLE1BQU0sQ0FBQ3p4QixJQUFJLENBQUNxdUIsSUFBSSxDQUFDLENBQUNwcEIsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzlnRyxLQUFLLENBQUMsQ0FBQyxDQUFDa3RDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRTVtQyxDQUFDLENBQUN1NkYsV0FBVyxDQUFDNXJGLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQ2hXLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUg7O1FBRUEsSUFBSTJqQyxPQUFPLEVBQUV0OEIsQ0FBQyxDQUFDdzZGLE9BQU8sQ0FBQzlnRyxLQUFLLENBQUMsQ0FBQyxDQUFDaXRDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRTNtQyxDQUFDLENBQUN3NkYsT0FBTyxDQUFDOWdHLEtBQUssQ0FBQyxDQUFDLENBQUMwc0IsS0FBSyxDQUFDLENBQUM7UUFDM0UsR0FBRyxDQUFDcG1CLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ20vRixjQUFjLElBQUksS0FBSyxFQUFFdDVGLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM1ckYsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDeVgsS0FBSyxDQUFDcG1CLENBQUMsQ0FBQ3M2RixXQUFXLEVBQUVoK0QsTUFBTSxDQUFDOztJQUU5RyxDQUFDOztJQUVEdTZELEtBQUssQ0FBQ3IrRixTQUFTLENBQUN3c0csUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVqQyxJQUFJaGxHLEVBQUUsRUFBRSxJQUFJO1lBQ1J3OUYsVUFBVTs7UUFFZHg5RixDQUFDLENBQUN3NkYsT0FBTyxDQUFDcGhHLElBQUksQ0FBQyxRQUFRLENBQUM4VixLQUFLLEVBQUVzMEIsT0FBTyxFQUFFO1lBQ3BDZzZELFdBQVcsRUFBRSxDQUFDeDlGLENBQUMsQ0FBQ3M2RixXQUFXLEVBQUVwckYsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLEdBQUcsQ0FBQ2xQLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3krRixJQUFJLElBQUksSUFBSSxFQUFFO2dCQUN4Qmg2RCxDQUFDLENBQUM0RSxPQUFPLENBQUMsQ0FBQ2xyQixHQUFHLENBQUM7b0JBQ1grTixRQUFRLEVBQUUsVUFBVTtvQkFDcEJKLEtBQUssRUFBRXUzRSxVQUFVO29CQUNqQmg1RixHQUFHLEVBQUUsQ0FBQztvQkFDTndvQyxNQUFNLEVBQUVodEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNnlDLE9BQU8sRUFBRSxDQUFDO29CQUM1QnJqQixPQUFPLEVBQUU7Z0JBQ2IsQ0FBQyxDQUFDO1lBQ04sRUFBRSxLQUFLO2dCQUNIaVYsQ0FBQyxDQUFDNEUsT0FBTyxDQUFDLENBQUNsckIsR0FBRyxDQUFDO29CQUNYK04sUUFBUSxFQUFFLFVBQVU7b0JBQ3BCNkQsSUFBSSxFQUFFc3pFLFVBQVU7b0JBQ2hCaDVGLEdBQUcsRUFBRSxDQUFDO29CQUNOd29DLE1BQU0sRUFBRWh0QyxDQUFDLENBQUM3RixPQUFPLENBQUM2eUMsT0FBTyxFQUFFLENBQUM7b0JBQzVCcmpCLE9BQU8sRUFBRTtnQkFDYixDQUFDLENBQUM7WUFDTjtRQUNKLENBQUMsQ0FBQzs7UUFFRjNwQixDQUFDLENBQUN3NkYsT0FBTyxDQUFDN2dHLEVBQUUsQ0FBQ3FHLENBQUMsQ0FBQzg1RixZQUFZLENBQUMsQ0FBQ3hoRixHQUFHLENBQUM7WUFDN0IwMEIsTUFBTSxFQUFFaHRDLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzZ5QyxPQUFPLEVBQUUsQ0FBQztZQUM1QnJqQixPQUFPLEVBQUU7UUFDYixDQUFDLENBQUM7O0lBRU4sQ0FBQzs7SUFFRGt0RSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDeXNHLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFbkMsSUFBSWpsRyxFQUFFLEVBQUUsSUFBSTs7UUFFWixHQUFHLENBQUNBLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLElBQUksRUFBRSxHQUFHOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzg4RixlQUFlLElBQUksS0FBSyxHQUFHajNGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3l1QyxTQUFTLElBQUksS0FBSyxFQUFFO1lBQ25HLElBQUlQLGFBQWEsRUFBRXJvQyxDQUFDLENBQUN3NkYsT0FBTyxDQUFDN2dHLEVBQUUsQ0FBQ3FHLENBQUMsQ0FBQzg1RixZQUFZLENBQUMsQ0FBQ2x6RCxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2pFNW1DLENBQUMsQ0FBQ2lwRixLQUFLLENBQUMzd0UsR0FBRyxDQUFDLFFBQVEsRUFBRSt2QixZQUFZLENBQUM7UUFDdkM7O0lBRUosQ0FBQzs7SUFFRHd1RCxLQUFLLENBQUNyK0YsU0FBUyxDQUFDMHNHLFVBQVU7SUFDMUJyTyxLQUFLLENBQUNyK0YsU0FBUyxDQUFDMnNHLGVBQWUsRUFBRSxRQUFRLENBQUMsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O1FBZXhDLElBQUlubEcsRUFBRSxFQUFFLElBQUksRUFBRWdQLENBQUMsRUFBRThsQyxJQUFJLEVBQUU5NkIsTUFBTSxFQUFFMWQsS0FBSyxFQUFFc3pDLFFBQVEsRUFBRSxLQUFLLEVBQUUvNEMsSUFBSTs7UUFFM0QsRUFBRSxFQUFFK25DLENBQUMsQ0FBQy9uQyxJQUFJLEVBQUU0QyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxTQUFTLEVBQUU7O1lBRXRDdWdCLE9BQU8sR0FBR3ZnQixTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3RCbTJDLFFBQVEsRUFBRW4yQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3RCNUMsS0FBSyxFQUFFLFVBQVU7O1FBRXJCLEVBQUUsS0FBSyxHQUFHLEVBQUUrbkMsQ0FBQyxDQUFDL25DLElBQUksRUFBRTRDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLFNBQVMsRUFBRTs7WUFFOUN1Z0IsT0FBTyxHQUFHdmdCLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdEI2QyxNQUFNLEVBQUU3QyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3BCbTJDLFFBQVEsRUFBRW4yQyxTQUFTLENBQUMsQ0FBQyxDQUFDOztZQUV0QixHQUFHLEVBQUVBLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxhQUFhLEdBQUdtbEMsQ0FBQyxDQUFDL25DLElBQUksRUFBRTRDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRTs7Z0JBRXZFNUMsS0FBSyxFQUFFLFlBQVk7O1lBRXZCLEVBQUUsS0FBSyxHQUFHLEVBQUUsT0FBTzRDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxZQUFZLEVBQUU7O2dCQUU5QzVDLEtBQUssRUFBRSxRQUFROztZQUVuQjs7UUFFSjs7UUFFQSxHQUFHLEVBQUVBLEtBQUssSUFBSSxTQUFTLEVBQUU7O1lBRXJCbUosQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNmYsTUFBTSxFQUFFLEVBQUUxZCxLQUFLOzs7UUFHN0IsRUFBRSxLQUFLLEdBQUcsRUFBRXpGLEtBQUssSUFBSSxXQUFXLEVBQUU7O1lBRTlCK25DLENBQUMsQ0FBQ3hsQyxJQUFJLEVBQUU0Z0IsT0FBTyxFQUFFLFFBQVEsRUFBRTBVLEdBQUcsRUFBRXAzQixJQUFJLEVBQUU7O2dCQUVsQzBJLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3UwQixHQUFHLEVBQUUsRUFBRXAzQixHQUFHOztZQUV4QixDQUFDLENBQUM7OztRQUdOLEVBQUUsS0FBSyxHQUFHLEVBQUVULEtBQUssSUFBSSxhQUFhLEVBQUU7O1lBRWhDLElBQUksRUFBRWkrQyxLQUFLLEdBQUd4NEMsTUFBTSxFQUFFOztnQkFFbEIsRUFBRSxFQUFFc2lDLENBQUMsQ0FBQy9uQyxJQUFJLEVBQUVtSixDQUFDLENBQUM3RixPQUFPLENBQUN1K0YsV0FBVyxFQUFFLElBQUksUUFBUSxFQUFFOztvQkFFN0MxNEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDdStGLFdBQVcsRUFBRSxFQUFFcDhGLEtBQUssQ0FBQ3c0QyxJQUFJLEVBQUUsQ0FBQzs7Z0JBRTFDLEVBQUUsS0FBSzs7b0JBRUg5bEMsRUFBRSxFQUFFaFAsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDdStGLFVBQVUsQ0FBQy8vRixNQUFNLENBQUMsQ0FBQzs7O29CQUdqQyxLQUFLLEVBQUVxVyxFQUFFLEdBQUcsRUFBRSxFQUFFOzt3QkFFWixFQUFFLEVBQUVoUCxDQUFDLENBQUM3RixPQUFPLENBQUN1K0YsVUFBVSxDQUFDMXBGLENBQUMsQ0FBQyxDQUFDaXdGLFdBQVcsSUFBSTNpRyxLQUFLLENBQUN3NEMsSUFBSSxDQUFDLENBQUNtcUQsV0FBVyxFQUFFOzs0QkFFaEVqL0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDdStGLFVBQVUsQ0FBQ3orRixNQUFNLENBQUMrVSxDQUFDLENBQUMsQ0FBQyxDQUFDOzt3QkFFcEM7O3dCQUVBQSxDQUFDLEVBQUU7O29CQUVQOztvQkFFQWhQLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3UrRixVQUFVLENBQUM1aUcsSUFBSSxFQUFFd0csS0FBSyxDQUFDdzRDLElBQUksRUFBRSxDQUFDOztnQkFFNUM7O1lBRUo7O1FBRUo7O1FBRUEsR0FBRyxFQUFFbEYsUUFBUSxFQUFFOztZQUVYNXZDLENBQUMsQ0FBQ285RixNQUFNLENBQUMsQ0FBQztZQUNWcDlGLENBQUMsQ0FBQ3E5RixNQUFNLENBQUMsQ0FBQzs7UUFFZDs7SUFFSixDQUFDOztJQUVEeEcsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ2lrRyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXJDLElBQUl6OEYsRUFBRSxFQUFFLElBQUk7O1FBRVpBLENBQUMsQ0FBQytrRyxhQUFhLENBQUMsQ0FBQzs7UUFFakIva0csQ0FBQyxDQUFDaWxHLFNBQVMsQ0FBQyxDQUFDOztRQUViLEdBQUcsQ0FBQ2psRyxDQUFDLENBQUM3RixPQUFPLENBQUNxMUMsS0FBSyxJQUFJLEtBQUssRUFBRTtZQUMxQnh2QyxDQUFDLENBQUM2a0csTUFBTSxDQUFDN2tHLENBQUMsQ0FBQzhnRyxPQUFPLENBQUM5Z0csQ0FBQyxDQUFDODVGLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLEVBQUUsS0FBSztZQUNIOTVGLENBQUMsQ0FBQ2dsRyxPQUFPLENBQUMsQ0FBQztRQUNmOztRQUVBaGxHLENBQUMsQ0FBQzI3RixPQUFPLENBQUNsOEUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDemYsQ0FBQyxDQUFDLENBQUM7O0lBRXpDLENBQUM7O0lBRUQ2MkYsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3NwRyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRWxDLElBQUk5aEcsRUFBRSxFQUFFLElBQUk7WUFDUm9sRyxVQUFVLEVBQUVqd0csUUFBUSxDQUFDbWtCLElBQUksQ0FBQ2xCLEtBQUs7O1FBRW5DcFksQ0FBQyxDQUFDdzdGLGFBQWEsRUFBRXg3RixDQUFDLENBQUM3RixPQUFPLENBQUN5dUMsU0FBUyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTTs7UUFFN0QsR0FBRyxDQUFDNW9DLENBQUMsQ0FBQ3c3RixhQUFhLElBQUksS0FBSyxFQUFFO1lBQzFCeDdGLENBQUMsQ0FBQzI3RixPQUFPLENBQUN0cUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hDLEVBQUUsS0FBSztZQUNIcnhCLENBQUMsQ0FBQzI3RixPQUFPLENBQUNqcUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDO1FBQzNDOztRQUVBLEdBQUcsQ0FBQzB6RSxTQUFTLENBQUN2dkIsaUJBQWlCLElBQUloN0UsVUFBVTtZQUN6Q3VxRyxTQUFTLENBQUN4dkIsY0FBYyxJQUFJLzZFLFVBQVU7WUFDdEN1cUcsU0FBUyxDQUFDQyxhQUFhLElBQUl4cUcsU0FBUyxFQUFFO1lBQ3RDLEdBQUcsQ0FBQ21GLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ2kvRixPQUFPLElBQUksSUFBSSxFQUFFO2dCQUMzQnA1RixDQUFDLENBQUNvN0YsZUFBZSxFQUFFLElBQUk7WUFDM0I7UUFDSjs7UUFFQSxHQUFHLEVBQUVwN0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTFDLEtBQUssRUFBRTtZQUNsQixHQUFHLEVBQUUsT0FBT3h2QyxDQUFDLENBQUM3RixPQUFPLENBQUM2eUMsT0FBTyxJQUFJLFNBQVMsRUFBRTtnQkFDeEMsRUFBRSxFQUFFaHRDLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzZ5QyxPQUFPLEVBQUUsRUFBRSxFQUFFO29CQUN2Qmh0QyxDQUFDLENBQUM3RixPQUFPLENBQUM2eUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCO1lBQ0osRUFBRSxLQUFLO2dCQUNIaHRDLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzZ5QyxPQUFPLEVBQUVodEMsQ0FBQyxDQUFDdy9ELFFBQVEsQ0FBQ3h5QixNQUFNO1lBQ3hDO1FBQ0o7O1FBRUEsR0FBRyxDQUFDbzRELFNBQVMsQ0FBQ0UsV0FBVyxJQUFJenFHLFNBQVMsRUFBRTtZQUNwQ21GLENBQUMsQ0FBQ2c3RixTQUFTLEVBQUUsWUFBWTtZQUN6Qmg3RixDQUFDLENBQUM2N0YsY0FBYyxFQUFFLGNBQWM7WUFDaEM3N0YsQ0FBQyxDQUFDODdGLGVBQWUsRUFBRSxhQUFhO1lBQ2hDLEdBQUcsQ0FBQ3NKLFNBQVMsQ0FBQ0csb0JBQW9CLElBQUkxcUcsVUFBVSxHQUFHdXFHLFNBQVMsQ0FBQ0ksa0JBQWtCLElBQUkzcUcsU0FBUyxFQUFFbUYsQ0FBQyxDQUFDZzdGLFNBQVMsRUFBRSxLQUFLO1FBQ3BIO1FBQ0EsR0FBRyxDQUFDb0ssU0FBUyxDQUFDSyxhQUFhLElBQUk1cUcsU0FBUyxFQUFFO1lBQ3RDbUYsQ0FBQyxDQUFDZzdGLFNBQVMsRUFBRSxjQUFjO1lBQzNCaDdGLENBQUMsQ0FBQzY3RixjQUFjLEVBQUUsZ0JBQWdCO1lBQ2xDNzdGLENBQUMsQ0FBQzg3RixlQUFlLEVBQUUsZUFBZTtZQUNsQyxHQUFHLENBQUNzSixTQUFTLENBQUNHLG9CQUFvQixJQUFJMXFHLFVBQVUsR0FBR3VxRyxTQUFTLENBQUNNLGVBQWUsSUFBSTdxRyxTQUFTLEVBQUVtRixDQUFDLENBQUNnN0YsU0FBUyxFQUFFLEtBQUs7UUFDakg7UUFDQSxHQUFHLENBQUNvSyxTQUFTLENBQUNPLGdCQUFnQixJQUFJOXFHLFNBQVMsRUFBRTtZQUN6Q21GLENBQUMsQ0FBQ2c3RixTQUFTLEVBQUUsaUJBQWlCO1lBQzlCaDdGLENBQUMsQ0FBQzY3RixjQUFjLEVBQUUsbUJBQW1CO1lBQ3JDNzdGLENBQUMsQ0FBQzg3RixlQUFlLEVBQUUsa0JBQWtCO1lBQ3JDLEdBQUcsQ0FBQ3NKLFNBQVMsQ0FBQ0csb0JBQW9CLElBQUkxcUcsVUFBVSxHQUFHdXFHLFNBQVMsQ0FBQ0ksa0JBQWtCLElBQUkzcUcsU0FBUyxFQUFFbUYsQ0FBQyxDQUFDZzdGLFNBQVMsRUFBRSxLQUFLO1FBQ3BIO1FBQ0EsR0FBRyxDQUFDb0ssU0FBUyxDQUFDUSxZQUFZLElBQUkvcUcsU0FBUyxFQUFFO1lBQ3JDbUYsQ0FBQyxDQUFDZzdGLFNBQVMsRUFBRSxhQUFhO1lBQzFCaDdGLENBQUMsQ0FBQzY3RixjQUFjLEVBQUUsZUFBZTtZQUNqQzc3RixDQUFDLENBQUM4N0YsZUFBZSxFQUFFLGNBQWM7WUFDakMsR0FBRyxDQUFDc0osU0FBUyxDQUFDUSxZQUFZLElBQUkvcUcsU0FBUyxFQUFFbUYsQ0FBQyxDQUFDZzdGLFNBQVMsRUFBRSxLQUFLO1FBQy9EO1FBQ0EsR0FBRyxDQUFDb0ssU0FBUyxDQUFDdHJCLFVBQVUsSUFBSWovRSxVQUFVLEdBQUdtRixDQUFDLENBQUNnN0YsU0FBUyxJQUFJLEtBQUssRUFBRTtZQUMzRGg3RixDQUFDLENBQUNnN0YsU0FBUyxFQUFFLFdBQVc7WUFDeEJoN0YsQ0FBQyxDQUFDNjdGLGNBQWMsRUFBRSxXQUFXO1lBQzdCNzdGLENBQUMsQ0FBQzg3RixlQUFlLEVBQUUsWUFBWTtRQUNuQztRQUNBOTdGLENBQUMsQ0FBQzY2RixrQkFBa0IsRUFBRTc2RixDQUFDLENBQUM3RixPQUFPLENBQUNrL0YsYUFBYSxHQUFHLENBQUNyNUYsQ0FBQyxDQUFDZzdGLFNBQVMsSUFBSSxLQUFLLEdBQUdoN0YsQ0FBQyxDQUFDZzdGLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDakcsQ0FBQzs7O0lBR0RuRSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDZ21HLGdCQUFnQixFQUFFLFFBQVEsQ0FBQ3R2RixLQUFLLEVBQUU7O1FBRTlDLElBQUlsUCxFQUFFLEVBQUUsSUFBSTtZQUNSMGhHLFlBQVksRUFBRW1FLFNBQVMsRUFBRXJHLFdBQVcsRUFBRXNHLFNBQVM7O1FBRW5ERCxVQUFVLEVBQUU3bEcsQ0FBQyxDQUFDMjdGO1lBQ1YsQ0FBQzEyRixJQUFJLENBQUMsY0FBYztZQUNwQixDQUFDeXNCLFdBQVcsQ0FBQyx5Q0FBeUM7WUFDdEQsQ0FBQ2xyQixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQzs7UUFFaEN4RyxDQUFDLENBQUN3NkY7WUFDRSxDQUFDN2dHLEVBQUUsQ0FBQ3VWLEtBQUs7WUFDVCxDQUFDbWlCLFFBQVEsQ0FBQyxlQUFlLENBQUM7O1FBRTlCLEdBQUcsQ0FBQ3J4QixDQUFDLENBQUM3RixPQUFPLENBQUNxOUYsV0FBVyxJQUFJLElBQUksRUFBRTs7WUFFL0IsSUFBSXVPLFNBQVMsRUFBRS9sRyxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7O1lBRXZENEksYUFBYSxFQUFFM21HLElBQUksQ0FBQ3F1QyxLQUFLLENBQUNwcEMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRSxDQUFDLENBQUM7O1lBRXJELEdBQUcsQ0FBQzk0RixDQUFDLENBQUM3RixPQUFPLENBQUMrOUYsU0FBUyxJQUFJLElBQUksRUFBRTs7Z0JBRTdCLEdBQUcsQ0FBQ2hwRixNQUFNLEdBQUd3eUYsYUFBYSxHQUFHeHlGLE1BQU0sR0FBRyxDQUFDbFAsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRXFILFlBQVksRUFBRTtvQkFDckUxaEcsQ0FBQyxDQUFDdzZGO3dCQUNFLENBQUM1a0csS0FBSyxDQUFDc1osTUFBTSxFQUFFd3lGLGFBQWEsRUFBRXFFLFFBQVEsRUFBRTcyRixNQUFNLEVBQUV3eUYsYUFBYSxFQUFFLENBQUM7d0JBQ2hFLENBQUNyd0UsUUFBUSxDQUFDLGNBQWM7d0JBQ3hCLENBQUM3cUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7O2dCQUVyQyxFQUFFLEtBQUs7O29CQUVIZzVGLFlBQVksRUFBRXgvRixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFNXBGLEtBQUs7b0JBQzVDMjJGO3dCQUNJLENBQUNqd0csS0FBSyxDQUFDNHBHLFlBQVksRUFBRWtDLGFBQWEsRUFBRSxFQUFFLEVBQUVxRSxRQUFRLEVBQUV2RyxZQUFZLEVBQUVrQyxhQUFhLEVBQUUsQ0FBQzt3QkFDaEYsQ0FBQ3J3RSxRQUFRLENBQUMsY0FBYzt3QkFDeEIsQ0FBQzdxQixJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQzs7Z0JBRXJDOztnQkFFQSxHQUFHLENBQUMwSSxNQUFNLElBQUksQ0FBQyxFQUFFOztvQkFFYjIyRjt3QkFDSSxDQUFDbHNHLEVBQUUsQ0FBQ2tzRyxTQUFTLENBQUNsdEcsT0FBTyxFQUFFLEVBQUUsRUFBRXFILENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZO3dCQUNqRCxDQUFDem5FLFFBQVEsQ0FBQyxjQUFjLENBQUM7O2dCQUVqQyxFQUFFLEtBQUssR0FBRyxDQUFDbmlCLE1BQU0sSUFBSWxQLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUUsQ0FBQyxFQUFFOztvQkFFbkN3TDt3QkFDSSxDQUFDbHNHLEVBQUUsQ0FBQ3FHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZO3dCQUMxQixDQUFDem5FLFFBQVEsQ0FBQyxjQUFjLENBQUM7O2dCQUVqQzs7WUFFSjs7WUFFQXJ4QixDQUFDLENBQUN3NkY7Z0JBQ0UsQ0FBQzdnRyxFQUFFLENBQUN1VixLQUFLO2dCQUNULENBQUNtaUIsUUFBUSxDQUFDLGNBQWMsQ0FBQzs7UUFFakMsRUFBRSxLQUFLOztZQUVILEdBQUcsQ0FBQ25pQixNQUFNLEdBQUcsRUFBRSxHQUFHQSxNQUFNLEdBQUcsQ0FBQ2xQLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksQ0FBQyxFQUFFOztnQkFFaEU5NEYsQ0FBQyxDQUFDdzZGO29CQUNFLENBQUM1a0csS0FBSyxDQUFDc1osS0FBSyxFQUFFQSxNQUFNLEVBQUVsUCxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWTtvQkFDNUMsQ0FBQ3puRSxRQUFRLENBQUMsY0FBYztvQkFDeEIsQ0FBQzdxQixJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQzs7WUFFckMsRUFBRSxLQUFLLEdBQUcsQ0FBQ3EvRixTQUFTLENBQUNsdEcsT0FBTyxHQUFHcUgsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTs7Z0JBRW5EK007b0JBQ0ksQ0FBQ3gwRSxRQUFRLENBQUMsY0FBYztvQkFDeEIsQ0FBQzdxQixJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQzs7WUFFckMsRUFBRSxLQUFLOztnQkFFSHMvRixVQUFVLEVBQUU5bEcsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWTtnQkFDakQwRyxZQUFZLEVBQUV4L0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsSUFBSSxLQUFLLEVBQUVsNEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRTVwRixNQUFNLEVBQUVBLEtBQUs7O2dCQUVsRixHQUFHLENBQUNsUCxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxHQUFHOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixlQUFlLEdBQUcsQ0FBQy80RixDQUFDLENBQUNxNkYsV0FBVyxFQUFFbnJGLEtBQUssRUFBRSxFQUFFbFAsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTs7b0JBRXZHK007d0JBQ0ksQ0FBQ2p3RyxLQUFLLENBQUM0cEcsWUFBWSxFQUFFLENBQUN4L0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLGFBQWEsRUFBRWdOLFNBQVMsQ0FBQyxFQUFFdEcsWUFBWSxFQUFFc0csU0FBUzt3QkFDbEYsQ0FBQ3owRSxRQUFRLENBQUMsY0FBYzt3QkFDeEIsQ0FBQzdxQixJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQzs7Z0JBRXJDLEVBQUUsS0FBSzs7b0JBRUhxL0Y7d0JBQ0ksQ0FBQ2p3RyxLQUFLLENBQUM0cEcsV0FBVyxFQUFFQSxZQUFZLEVBQUV4L0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVk7d0JBQ3hELENBQUN6bkUsUUFBUSxDQUFDLGNBQWM7d0JBQ3hCLENBQUM3cUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7O2dCQUVyQzs7WUFFSjs7UUFFSjs7UUFFQSxHQUFHLENBQUN4RyxDQUFDLENBQUM3RixPQUFPLENBQUNpK0YsU0FBUyxJQUFJLFdBQVcsR0FBR3A0RixDQUFDLENBQUM3RixPQUFPLENBQUNpK0YsU0FBUyxJQUFJLGFBQWEsRUFBRTtZQUMzRXA0RixDQUFDLENBQUNvNEYsUUFBUSxDQUFDLENBQUM7UUFDaEI7SUFDSixDQUFDOztJQUVEdkIsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzhsRyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRXZDLElBQUl0K0YsRUFBRSxFQUFFLElBQUk7WUFDUjNJLENBQUMsRUFBRStvRyxVQUFVLEVBQUU0RixhQUFhOztRQUVoQyxHQUFHLENBQUNobUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTFDLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDekJ4dkMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsRUFBRSxLQUFLO1FBQ2hDOztRQUVBLEdBQUcsQ0FBQ3gzRixDQUFDLENBQUM3RixPQUFPLENBQUMrOUYsU0FBUyxJQUFJLEtBQUssR0FBR2w0RixDQUFDLENBQUM3RixPQUFPLENBQUNxMUMsS0FBSyxJQUFJLEtBQUssRUFBRTs7WUFFekQ0d0QsV0FBVyxFQUFFLElBQUk7O1lBRWpCLEdBQUcsQ0FBQ3BnRyxDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7O2dCQUV2QyxHQUFHLENBQUM5NEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxJQUFJLEVBQUU7b0JBQy9Cd08sY0FBYyxFQUFFaG1HLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUUsQ0FBQztnQkFDOUMsRUFBRSxLQUFLO29CQUNIa04sY0FBYyxFQUFFaG1HLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZO2dCQUMxQzs7Z0JBRUEsSUFBSSxDQUFDemhHLEVBQUUsRUFBRTJJLENBQUMsQ0FBQ3E2RixVQUFVLEVBQUVoakcsRUFBRSxFQUFFLENBQUMySSxDQUFDLENBQUNxNkYsV0FBVzt3QkFDakMyTCxhQUFhLENBQUMsRUFBRTN1RyxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUM1QitvRyxXQUFXLEVBQUUvb0csRUFBRSxFQUFFLENBQUM7b0JBQ2xCdW5DLENBQUMsQ0FBQzUrQixDQUFDLENBQUN3NkYsT0FBTyxDQUFDNEYsVUFBVSxDQUFDLENBQUMsQ0FBQzdsRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUNpTSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQzlDLENBQUNBLElBQUksQ0FBQyxrQkFBa0IsRUFBRTQ1RixXQUFXLEVBQUVwZ0csQ0FBQyxDQUFDcTZGLFVBQVU7d0JBQ25ELENBQUN0MUUsU0FBUyxDQUFDL2tCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUMsQ0FBQ2xwRSxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUMxRDtnQkFDQSxJQUFJLENBQUNoNkIsRUFBRSxFQUFFLENBQUMsRUFBRUEsRUFBRSxFQUFFMnVHLGVBQWUsRUFBRWhtRyxDQUFDLENBQUNxNkYsVUFBVSxFQUFFaGpHLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ25EK29HLFdBQVcsRUFBRS9vRyxDQUFDO29CQUNkdW5DLENBQUMsQ0FBQzUrQixDQUFDLENBQUN3NkYsT0FBTyxDQUFDNEYsVUFBVSxDQUFDLENBQUMsQ0FBQzdsRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUNpTSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQzlDLENBQUNBLElBQUksQ0FBQyxrQkFBa0IsRUFBRTQ1RixXQUFXLEVBQUVwZ0csQ0FBQyxDQUFDcTZGLFVBQVU7d0JBQ25ELENBQUN2MUUsUUFBUSxDQUFDOWtCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUMsQ0FBQ2xwRSxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUN6RDtnQkFDQXJ4QixDQUFDLENBQUN1NkYsV0FBVyxDQUFDdDFGLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDN0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM3RHdsQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNwNEIsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzFCLENBQUMsQ0FBQzs7WUFFTjs7UUFFSjs7SUFFSixDQUFDOztJQUVEcXdGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUN1bkcsVUFBVSxFQUFFLFFBQVEsRUFBRXBtRixPQUFPLEVBQUU7O1FBRTNDLElBQUkzWixFQUFFLEVBQUUsSUFBSTs7UUFFWixFQUFFLEVBQUUsQ0FBQzJaLE9BQU8sRUFBRTtZQUNWM1osQ0FBQyxDQUFDbThGLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCO1FBQ0FuOEYsQ0FBQyxDQUFDczdGLFlBQVksRUFBRTNoRixNQUFNOztJQUUxQixDQUFDOztJQUVEazlFLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNna0csY0FBYyxFQUFFLFFBQVEsQ0FBQzkvRSxLQUFLLEVBQUU7O1FBRTVDLElBQUkxYyxFQUFFLEVBQUUsSUFBSTs7UUFFWixJQUFJaW1HLGNBQWM7WUFDZHJuRSxDQUFDLENBQUNsaUIsS0FBSyxDQUFDbGlCLE1BQU0sQ0FBQyxDQUFDbVQsRUFBRSxDQUFDLGNBQWMsRUFBRTtnQkFDL0JpeEIsQ0FBQyxDQUFDbGlCLEtBQUssQ0FBQ2xpQixNQUFNLEVBQUU7Z0JBQ2hCb2tDLENBQUMsQ0FBQ2xpQixLQUFLLENBQUNsaUIsTUFBTSxDQUFDLENBQUMrVSxPQUFPLENBQUMsY0FBYyxDQUFDOztRQUUvQyxJQUFJTCxNQUFNLEVBQUUraEIsUUFBUSxDQUFDZzFFLGFBQWEsQ0FBQ3ovRixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7UUFFNUQsR0FBRyxDQUFDLENBQUMwSSxLQUFLLEVBQUVBLE1BQU0sRUFBRSxDQUFDOztRQUVyQixHQUFHLENBQUNsUCxDQUFDLENBQUNxNkYsV0FBVyxHQUFHcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7O1lBRXhDOTRGLENBQUMsQ0FBQys5RixZQUFZLENBQUM3dUYsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7WUFDbEMsTUFBTTs7UUFFVjs7UUFFQWxQLENBQUMsQ0FBQys5RixZQUFZLENBQUM3dUYsS0FBSyxDQUFDOztJQUV6QixDQUFDOztJQUVEMm5GLEtBQUssQ0FBQ3IrRixTQUFTLENBQUN1bEcsYUFBYSxFQUFFLFFBQVEsQ0FBQzd1RixLQUFLLEVBQUVnM0YsSUFBSSxFQUFFM0csV0FBVyxFQUFFOztRQUU5RCxJQUFJMEIsV0FBVyxFQUFFa0YsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRTdJLFdBQVcsRUFBRSxJQUFJO1lBQzlEeDlGLEVBQUUsRUFBRSxJQUFJLEVBQUVzbUcsU0FBUzs7UUFFdkJKLEtBQUssRUFBRUEsS0FBSyxHQUFHLEtBQUs7O1FBRXBCLEdBQUcsQ0FBQ2xtRyxDQUFDLENBQUMwNUYsVUFBVSxJQUFJLEtBQUssR0FBRzE1RixDQUFDLENBQUM3RixPQUFPLENBQUNxL0YsZUFBZSxJQUFJLElBQUksRUFBRTtZQUMzRCxNQUFNO1FBQ1Y7O1FBRUEsR0FBRyxDQUFDeDVGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3ExQyxLQUFLLElBQUksS0FBSyxHQUFHeHZDLENBQUMsQ0FBQzg1RixhQUFhLElBQUk1cUYsS0FBSyxFQUFFO1lBQ3JELE1BQU07UUFDVjs7UUFFQSxHQUFHLENBQUNnM0YsS0FBSyxJQUFJLEtBQUssRUFBRTtZQUNoQmxtRyxDQUFDLENBQUNvM0YsUUFBUSxDQUFDbG9GLEtBQUssQ0FBQztRQUNyQjs7UUFFQSt4RixZQUFZLEVBQUUveEYsS0FBSztRQUNuQnN1RixXQUFXLEVBQUV4OUYsQ0FBQyxDQUFDOGdHLE9BQU8sQ0FBQ0csV0FBVyxDQUFDO1FBQ25Db0YsVUFBVSxFQUFFcm1HLENBQUMsQ0FBQzhnRyxPQUFPLENBQUM5Z0csQ0FBQyxDQUFDODVGLFlBQVksQ0FBQzs7UUFFckM5NUYsQ0FBQyxDQUFDNjVGLFlBQVksRUFBRTc1RixDQUFDLENBQUMyNkYsVUFBVSxJQUFJLEtBQUssRUFBRTBMLFVBQVUsRUFBRXJtRyxDQUFDLENBQUMyNkYsU0FBUzs7UUFFOUQsR0FBRyxDQUFDMzZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQys5RixTQUFTLElBQUksTUFBTSxHQUFHbDRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3E5RixXQUFXLElBQUksTUFBTSxHQUFHLENBQUN0b0YsTUFBTSxFQUFFLEVBQUUsR0FBR0EsTUFBTSxFQUFFbFAsQ0FBQyxDQUFDbytGLFdBQVcsQ0FBQyxFQUFFLEVBQUVwK0YsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGNBQWMsQ0FBQyxFQUFFO1lBQ3JJLEdBQUcsQ0FBQy80RixDQUFDLENBQUM3RixPQUFPLENBQUNxMUMsS0FBSyxJQUFJLEtBQUssRUFBRTtnQkFDMUJ5eEQsWUFBWSxFQUFFamhHLENBQUMsQ0FBQzg1RixZQUFZO2dCQUM1QixHQUFHLENBQUN5RixZQUFZLElBQUksS0FBSyxHQUFHdi9GLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtvQkFDL0Q5NEYsQ0FBQyxDQUFDdTlGLFlBQVksQ0FBQzhJLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTt3QkFDakNybUcsQ0FBQyxDQUFDK2pHLFNBQVMsQ0FBQzlDLFdBQVcsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDO2dCQUNOLEVBQUUsS0FBSztvQkFDSGpoRyxDQUFDLENBQUMrakcsU0FBUyxDQUFDOUMsV0FBVyxDQUFDO2dCQUM1QjtZQUNKO1lBQ0EsTUFBTTtRQUNWLEVBQUUsS0FBSyxHQUFHLENBQUNqaEcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsSUFBSSxNQUFNLEdBQUdsNEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxLQUFLLEdBQUcsQ0FBQ3RvRixNQUFNLEVBQUUsRUFBRSxHQUFHQSxNQUFNLEVBQUUsQ0FBQ2xQLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGNBQWMsQ0FBQyxDQUFDLEVBQUU7WUFDMUksR0FBRyxDQUFDLzRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3ExQyxLQUFLLElBQUksS0FBSyxFQUFFO2dCQUMxQnl4RCxZQUFZLEVBQUVqaEcsQ0FBQyxDQUFDODVGLFlBQVk7Z0JBQzVCLEdBQUcsQ0FBQ3lGLFlBQVksSUFBSSxLQUFLLEdBQUd2L0YsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsWUFBWSxFQUFFO29CQUMvRDk0RixDQUFDLENBQUN1OUYsWUFBWSxDQUFDOEksU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFO3dCQUNqQ3JtRyxDQUFDLENBQUMrakcsU0FBUyxDQUFDOUMsV0FBVyxDQUFDO29CQUM1QixDQUFDLENBQUM7Z0JBQ04sRUFBRSxLQUFLO29CQUNIamhHLENBQUMsQ0FBQytqRyxTQUFTLENBQUM5QyxXQUFXLENBQUM7Z0JBQzVCO1lBQ0o7WUFDQSxNQUFNO1FBQ1Y7O1FBRUEsR0FBRyxFQUFFamhHLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ29tRixTQUFTLEVBQUU7WUFDdEJqakIsYUFBYSxDQUFDdDlELENBQUMsQ0FBQzI1RixhQUFhLENBQUM7UUFDbEM7O1FBRUEsR0FBRyxDQUFDc0gsWUFBWSxFQUFFLENBQUMsRUFBRTtZQUNqQixHQUFHLENBQUNqaEcsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsZUFBZSxJQUFJLENBQUMsRUFBRTtnQkFDL0NvTixVQUFVLEVBQUVubUcsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRSxDQUFDcjZGLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNCtGLGNBQWMsQ0FBQztZQUN4RSxFQUFFLEtBQUs7Z0JBQ0hvTixVQUFVLEVBQUVubUcsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRTRHLFdBQVc7WUFDMUM7UUFDSixFQUFFLEtBQUssR0FBRyxDQUFDQSxZQUFZLEdBQUdqaEcsQ0FBQyxDQUFDcTZGLFVBQVUsRUFBRTtZQUNwQyxHQUFHLENBQUNyNkYsQ0FBQyxDQUFDcTZGLFdBQVcsRUFBRXI2RixDQUFDLENBQUM3RixPQUFPLENBQUM0K0YsZUFBZSxJQUFJLENBQUMsRUFBRTtnQkFDL0NvTixVQUFVLEVBQUUsQ0FBQztZQUNqQixFQUFFLEtBQUs7Z0JBQ0hBLFVBQVUsRUFBRWxGLFlBQVksRUFBRWpoRyxDQUFDLENBQUNxNkYsVUFBVTtZQUMxQztRQUNKLEVBQUUsS0FBSztZQUNIOEwsVUFBVSxFQUFFbEYsV0FBVztRQUMzQjs7UUFFQWpoRyxDQUFDLENBQUMwNUYsVUFBVSxFQUFFLElBQUk7O1FBRWxCMTVGLENBQUMsQ0FBQzI3RixPQUFPLENBQUNsOEUsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDemYsQ0FBQyxFQUFFQSxDQUFDLENBQUM4NUYsWUFBWSxFQUFFcU0sU0FBUyxDQUFDLENBQUM7O1FBRWpFQyxTQUFTLEVBQUVwbUcsQ0FBQyxDQUFDODVGLFlBQVk7UUFDekI5NUYsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRXFNLFNBQVM7O1FBRTFCbm1HLENBQUMsQ0FBQ3crRixlQUFlLENBQUN4K0YsQ0FBQyxDQUFDODVGLFlBQVksQ0FBQzs7UUFFakMsR0FBRyxFQUFFOTVGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ2k5RixTQUFTLEVBQUU7O1lBRXRCa1AsVUFBVSxFQUFFdG1HLENBQUMsQ0FBQzY5RixZQUFZLENBQUMsQ0FBQztZQUM1QnlJLFVBQVUsRUFBRUEsU0FBUyxDQUFDeEksS0FBSyxDQUFDLFVBQVUsQ0FBQzs7WUFFdkMsR0FBRyxFQUFFd0ksU0FBUyxDQUFDak0sV0FBVyxHQUFHaU0sU0FBUyxDQUFDbnNHLE9BQU8sQ0FBQzIrRixhQUFhLEVBQUU7Z0JBQzFEd04sU0FBUyxDQUFDOUgsZUFBZSxDQUFDeCtGLENBQUMsQ0FBQzg1RixZQUFZLENBQUM7WUFDN0M7O1FBRUo7O1FBRUE5NUYsQ0FBQyxDQUFDdStGLFVBQVUsQ0FBQyxDQUFDO1FBQ2R2K0YsQ0FBQyxDQUFDa2lHLFlBQVksQ0FBQyxDQUFDOztRQUVoQixHQUFHLENBQUNsaUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTFDLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDekIsR0FBRyxDQUFDK3ZELFlBQVksSUFBSSxJQUFJLEVBQUU7O2dCQUV0QnYvRixDQUFDLENBQUNxZ0csWUFBWSxDQUFDK0YsUUFBUSxDQUFDOztnQkFFeEJwbUcsQ0FBQyxDQUFDbWdHLFNBQVMsQ0FBQ2dHLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDOUJubUcsQ0FBQyxDQUFDK2pHLFNBQVMsQ0FBQ29DLFNBQVMsQ0FBQztnQkFDMUIsQ0FBQyxDQUFDOztZQUVOLEVBQUUsS0FBSztnQkFDSG5tRyxDQUFDLENBQUMrakcsU0FBUyxDQUFDb0MsU0FBUyxDQUFDO1lBQzFCO1lBQ0FubUcsQ0FBQyxDQUFDczlGLGFBQWEsQ0FBQyxDQUFDO1lBQ2pCLE1BQU07UUFDVjs7UUFFQSxHQUFHLENBQUNpQyxZQUFZLElBQUksS0FBSyxHQUFHdi9GLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUVyNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMitGLFlBQVksRUFBRTtZQUMvRDk0RixDQUFDLENBQUN1OUYsWUFBWSxDQUFDQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ2xDeDlGLENBQUMsQ0FBQytqRyxTQUFTLENBQUNvQyxTQUFTLENBQUM7WUFDMUIsQ0FBQyxDQUFDO1FBQ04sRUFBRSxLQUFLO1lBQ0hubUcsQ0FBQyxDQUFDK2pHLFNBQVMsQ0FBQ29DLFNBQVMsQ0FBQztRQUMxQjs7SUFFSixDQUFDOztJQUVEdFAsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ3VwRyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRW5DLElBQUkvaEcsRUFBRSxFQUFFLElBQUk7O1FBRVosR0FBRyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUN5MkUsT0FBTyxJQUFJLEtBQUssR0FBRzV3RSxDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7O1lBRXBFOTRGLENBQUMsQ0FBQ282RixVQUFVLENBQUMxZ0YsSUFBSSxDQUFDLENBQUM7WUFDbkIxWixDQUFDLENBQUNtNkYsVUFBVSxDQUFDemdGLElBQUksQ0FBQyxDQUFDOztRQUV2Qjs7UUFFQSxHQUFHLENBQUMxWixDQUFDLENBQUM3RixPQUFPLENBQUMwOUYsS0FBSyxJQUFJLEtBQUssR0FBRzczRixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7O1lBRWxFOTRGLENBQUMsQ0FBQys1RixLQUFLLENBQUNyZ0YsSUFBSSxDQUFDLENBQUM7O1FBRWxCOztRQUVBMVosQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ3RxRSxRQUFRLENBQUMsZUFBZSxDQUFDOztJQUV2QyxDQUFDOztJQUVEd2xFLEtBQUssQ0FBQ3IrRixTQUFTLENBQUMrdEcsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUV4QyxJQUFJQyxLQUFLLEVBQUVDLEtBQUssRUFBRWxqRSxDQUFDLEVBQUVtakUsVUFBVSxFQUFFMW1HLEVBQUUsRUFBRSxJQUFJOztRQUV6Q3dtRyxNQUFNLEVBQUV4bUcsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQytMLE9BQU8sRUFBRTNtRyxDQUFDLENBQUM0NkYsV0FBVyxDQUFDZ00sSUFBSTtRQUNqREgsTUFBTSxFQUFFem1HLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNpTSxPQUFPLEVBQUU3bUcsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ2tNLElBQUk7UUFDakR2akUsRUFBRSxFQUFFeG9DLElBQUksQ0FBQ29xRixLQUFLLENBQUNzaEIsS0FBSyxFQUFFRCxLQUFLLENBQUM7O1FBRTVCRSxXQUFXLEVBQUUzckcsSUFBSSxDQUFDMHJCLEtBQUssQ0FBQzhjLEVBQUUsRUFBRSxJQUFJLEVBQUV4b0MsSUFBSSxDQUFDNHdCLEVBQUUsQ0FBQztRQUMxQyxHQUFHLENBQUMrNkUsV0FBVyxFQUFFLENBQUMsRUFBRTtZQUNoQkEsV0FBVyxFQUFFLElBQUksRUFBRTNyRyxJQUFJLENBQUM4ckMsR0FBRyxDQUFDNi9ELFVBQVUsQ0FBQztRQUMzQzs7UUFFQSxHQUFHLENBQUMsQ0FBQ0EsV0FBVyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUNBLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN6QyxPQUFPLENBQUMxbUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeStGLElBQUksSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUN2RDtRQUNBLEdBQUcsQ0FBQyxDQUFDOE4sV0FBVyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUNBLFdBQVcsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUM1QyxPQUFPLENBQUMxbUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeStGLElBQUksSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUN2RDtRQUNBLEdBQUcsQ0FBQyxDQUFDOE4sV0FBVyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUNBLFdBQVcsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUM1QyxPQUFPLENBQUMxbUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDeStGLElBQUksSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUN2RDtRQUNBLEdBQUcsQ0FBQzU0RixDQUFDLENBQUM3RixPQUFPLENBQUNvL0YsZ0JBQWdCLElBQUksSUFBSSxFQUFFO1lBQ3BDLEdBQUcsQ0FBQyxDQUFDbU4sV0FBVyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUNBLFdBQVcsR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDM0MsT0FBTyxNQUFNO1lBQ2pCLEVBQUUsS0FBSztnQkFDSCxPQUFPLElBQUk7WUFDZjtRQUNKOztRQUVBLE9BQU8sVUFBVTs7SUFFckIsQ0FBQzs7SUFFRDdQLEtBQUssQ0FBQ3IrRixTQUFTLENBQUN1dUcsU0FBUyxFQUFFLFFBQVEsQ0FBQ3JxRixLQUFLLEVBQUU7O1FBRXZDLElBQUkxYyxFQUFFLEVBQUUsSUFBSTtZQUNScTZGLFVBQVU7WUFDVnRyRCxTQUFTOztRQUViL3VDLENBQUMsQ0FBQzIzRCxTQUFTLEVBQUUsS0FBSztRQUNsQjMzRCxDQUFDLENBQUNpbEYsUUFBUSxFQUFFLEtBQUs7O1FBRWpCLEdBQUcsQ0FBQ2psRixDQUFDLENBQUNxeEUsU0FBUyxFQUFFO1lBQ2JyeEUsQ0FBQyxDQUFDcXhFLFVBQVUsRUFBRSxLQUFLO1lBQ25CLE9BQU8sS0FBSztRQUNoQjs7UUFFQXJ4RSxDQUFDLENBQUNzN0YsWUFBWSxFQUFFLEtBQUs7UUFDckJ0N0YsQ0FBQyxDQUFDMDdGLFlBQVksRUFBRSxFQUFFMTdGLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNvTSxZQUFZLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUk7O1FBRWpFLEdBQUcsRUFBRWhuRyxDQUFDLENBQUM0NkYsV0FBVyxDQUFDZ00sS0FBSyxJQUFJL3JHLFVBQVUsRUFBRTtZQUNwQyxPQUFPLEtBQUs7UUFDaEI7O1FBRUEsR0FBRyxFQUFFbUYsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ3FNLFFBQVEsSUFBSSxLQUFLLEVBQUU7WUFDbENqbkcsQ0FBQyxDQUFDMjdGLE9BQU8sQ0FBQ2w4RSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUN6ZixDQUFDLEVBQUVBLENBQUMsQ0FBQ3VtRyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQ7O1FBRUEsR0FBRyxFQUFFdm1HLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNvTSxZQUFZLEdBQUdobkcsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ3NNLFNBQVMsRUFBRTs7WUFFdkRuNEQsVUFBVSxFQUFFL3VDLENBQUMsQ0FBQ3VtRyxjQUFjLENBQUMsQ0FBQzs7WUFFOUIsT0FBTyxFQUFFeDNELFVBQVUsRUFBRTs7Z0JBRWpCLEtBQUssTUFBTTtnQkFDWCxLQUFLLE1BQU07O29CQUVQc3JELFdBQVc7d0JBQ1ByNkYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDOCtGLGFBQWE7NEJBQ25CajVGLENBQUMsQ0FBQzAvRixjQUFjLEVBQUUxL0YsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRTk1RixDQUFDLENBQUN1aEcsYUFBYSxDQUFDLEVBQUUsRUFBRTs0QkFDdkR2aEcsQ0FBQyxDQUFDODVGLGFBQWEsRUFBRTk1RixDQUFDLENBQUN1aEcsYUFBYSxDQUFDLENBQUM7O29CQUUxQ3ZoRyxDQUFDLENBQUM0NUYsaUJBQWlCLEVBQUUsQ0FBQzs7b0JBRXRCLEtBQUs7O2dCQUVULEtBQUssT0FBTztnQkFDWixLQUFLLElBQUk7O29CQUVMUyxXQUFXO3dCQUNQcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzgrRixhQUFhOzRCQUNuQmo1RixDQUFDLENBQUMwL0YsY0FBYyxFQUFFMS9GLENBQUMsQ0FBQzg1RixhQUFhLEVBQUU5NUYsQ0FBQyxDQUFDdWhHLGFBQWEsQ0FBQyxFQUFFLEVBQUU7NEJBQ3ZEdmhHLENBQUMsQ0FBQzg1RixhQUFhLEVBQUU5NUYsQ0FBQyxDQUFDdWhHLGFBQWEsQ0FBQyxDQUFDOztvQkFFMUN2aEcsQ0FBQyxDQUFDNDVGLGlCQUFpQixFQUFFLENBQUM7O29CQUV0QixLQUFLOztnQkFFVCxPQUFPOzs7WUFHWDs7WUFFQSxFQUFFLEVBQUU3cUQsVUFBVSxHQUFHLFdBQVcsRUFBRTs7Z0JBRTFCL3VDLENBQUMsQ0FBQys5RixZQUFZLEVBQUUxRCxXQUFXLENBQUM7Z0JBQzVCcjZGLENBQUMsQ0FBQzQ2RixZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQjU2RixDQUFDLENBQUMyN0YsT0FBTyxDQUFDbDhFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQ3pmLENBQUMsRUFBRSt1QyxVQUFVLENBQUMsQ0FBQzs7WUFFL0M7O1FBRUosRUFBRSxLQUFLOztZQUVILEdBQUcsRUFBRS91QyxDQUFDLENBQUM0NkYsV0FBVyxDQUFDK0wsT0FBTyxJQUFJM21HLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNnTSxLQUFLLEVBQUU7O2dCQUUvQzVtRyxDQUFDLENBQUMrOUYsWUFBWSxFQUFFLzlGLENBQUMsQ0FBQzg1RixhQUFhLENBQUM7Z0JBQ2hDOTVGLENBQUMsQ0FBQzQ2RixZQUFZLEVBQUUsQ0FBQyxDQUFDOztZQUV0Qjs7UUFFSjs7SUFFSixDQUFDOztJQUVEL0QsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQ2trRyxhQUFhLEVBQUUsUUFBUSxDQUFDaGdGLEtBQUssRUFBRTs7UUFFM0MsSUFBSTFjLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQyxDQUFDQSxDQUFDLENBQUM3RixPQUFPLENBQUM2K0YsTUFBTSxJQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxHQUFHN2pHLFNBQVMsR0FBRzZLLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzYrRixNQUFNLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDeEYsTUFBTTtRQUNWLEVBQUUsS0FBSyxHQUFHLENBQUNoNUYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDMnZELFVBQVUsSUFBSSxNQUFNLEdBQUdwdEMsS0FBSyxDQUFDN2xCLElBQUksQ0FBQ2QsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzVFLE1BQU07UUFDVjs7UUFFQWlLLENBQUMsQ0FBQzQ2RixXQUFXLENBQUN1TSxZQUFZLEVBQUV6cUYsS0FBSyxDQUFDeUMsY0FBYyxHQUFHekMsS0FBSyxDQUFDeUMsYUFBYSxDQUFDNkMsUUFBUSxJQUFJbm5CLFVBQVU7WUFDekY2aEIsS0FBSyxDQUFDeUMsYUFBYSxDQUFDNkMsT0FBTyxDQUFDcnBCLE9BQU8sRUFBRSxDQUFDOztRQUUxQ3FILENBQUMsQ0FBQzQ2RixXQUFXLENBQUNzTSxTQUFTLEVBQUVsbkcsQ0FBQyxDQUFDZzZGLFVBQVUsRUFBRWg2RixDQUFDLENBQUM3RjtZQUNyQyxDQUFDZy9GLGNBQWM7O1FBRW5CLEdBQUcsQ0FBQ241RixDQUFDLENBQUM3RixPQUFPLENBQUNvL0YsZ0JBQWdCLElBQUksSUFBSSxFQUFFO1lBQ3BDdjVGLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNzTSxTQUFTLEVBQUVsbkcsQ0FBQyxDQUFDaTZGLFdBQVcsRUFBRWo2RixDQUFDLENBQUM3RjtnQkFDdEMsQ0FBQ2cvRixjQUFjO1FBQ3ZCOztRQUVBLE9BQU8sQ0FBQ3o4RSxLQUFLLENBQUNyRyxJQUFJLENBQUNzeEUsTUFBTSxFQUFFOztZQUV2QixLQUFLLE9BQU87Z0JBQ1IzbkYsQ0FBQyxDQUFDb25HLFVBQVUsQ0FBQzFxRixLQUFLLENBQUM7Z0JBQ25CLEtBQUs7O1lBRVQsS0FBSyxNQUFNO2dCQUNQMWMsQ0FBQyxDQUFDcW5HLFNBQVMsQ0FBQzNxRixLQUFLLENBQUM7Z0JBQ2xCLEtBQUs7O1lBRVQsS0FBSyxLQUFLO2dCQUNOMWMsQ0FBQyxDQUFDK21HLFFBQVEsQ0FBQ3JxRixLQUFLLENBQUM7Z0JBQ2pCLEtBQUs7O1FBRWI7O0lBRUosQ0FBQzs7SUFFRG02RSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDNnVHLFVBQVUsRUFBRSxRQUFRLENBQUMzcUYsS0FBSyxFQUFFOztRQUV4QyxJQUFJMWMsRUFBRSxFQUFFLElBQUk7WUFDUnNuRyxXQUFXLEVBQUUsS0FBSztZQUNsQjdxRSxPQUFPLEVBQUU4cEUsY0FBYyxFQUFFUyxXQUFXLEVBQUVPLGNBQWMsRUFBRXZsRixPQUFPLEVBQUV3bEYsbUJBQW1COztRQUV0RnhsRixRQUFRLEVBQUV0RixLQUFLLENBQUN5QyxjQUFjLElBQUl0a0IsVUFBVSxFQUFFNmhCLEtBQUssQ0FBQ3lDLGFBQWEsQ0FBQzZDLFFBQVEsRUFBRSxJQUFJOztRQUVoRixHQUFHLENBQUMsQ0FBQ2hpQixDQUFDLENBQUMyM0QsU0FBUyxHQUFHMzNELENBQUMsQ0FBQ3F4RSxVQUFVLEdBQUdydkQsUUFBUSxHQUFHQSxPQUFPLENBQUNycEIsT0FBTyxJQUFJLENBQUMsRUFBRTtZQUMvRCxPQUFPLEtBQUs7UUFDaEI7O1FBRUE4akMsUUFBUSxFQUFFejhCLENBQUMsQ0FBQzhnRyxPQUFPLENBQUM5Z0csQ0FBQyxDQUFDODVGLFlBQVksQ0FBQzs7UUFFbkM5NUYsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ2dNLEtBQUssRUFBRTVrRixRQUFRLElBQUlubkIsVUFBVSxFQUFFbW5CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ2pCLE1BQU0sRUFBRXJFLEtBQUssQ0FBQzRFLE9BQU87UUFDN0V0aEIsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ2tNLEtBQUssRUFBRTlrRixRQUFRLElBQUlubkIsVUFBVSxFQUFFbW5CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ2hCLE1BQU0sRUFBRXRFLEtBQUssQ0FBQzZFLE9BQU87O1FBRTdFdmhCLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNvTSxZQUFZLEVBQUVqc0csSUFBSSxDQUFDMHJCLEtBQUssQ0FBQzFyQixJQUFJLENBQUN5ekMsSUFBSTtZQUM1Q3p6QyxJQUFJLENBQUNzekMsR0FBRyxDQUFDcnVDLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNnTSxLQUFLLEVBQUU1bUcsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQytMLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU1RGEsb0JBQW9CLEVBQUV6c0csSUFBSSxDQUFDMHJCLEtBQUssQ0FBQzFyQixJQUFJLENBQUN5ekMsSUFBSTtZQUN0Q3p6QyxJQUFJLENBQUNzekMsR0FBRyxDQUFDcnVDLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNrTSxLQUFLLEVBQUU5bUcsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ2lNLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU1RCxHQUFHLENBQUMsQ0FBQzdtRyxDQUFDLENBQUM3RixPQUFPLENBQUNvL0YsZ0JBQWdCLEdBQUcsQ0FBQ3Y1RixDQUFDLENBQUNpbEYsUUFBUSxHQUFHdWlCLG9CQUFvQixFQUFFLENBQUMsRUFBRTtZQUNyRXhuRyxDQUFDLENBQUNxeEUsVUFBVSxFQUFFLElBQUk7WUFDbEIsT0FBTyxLQUFLO1FBQ2hCOztRQUVBLEdBQUcsQ0FBQ3J4RSxDQUFDLENBQUM3RixPQUFPLENBQUNvL0YsZ0JBQWdCLElBQUksSUFBSSxFQUFFO1lBQ3BDdjVGLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNvTSxZQUFZLEVBQUVRLG1CQUFtQjtRQUNuRDs7UUFFQWpCLGVBQWUsRUFBRXZtRyxDQUFDLENBQUN1bUcsY0FBYyxDQUFDLENBQUM7O1FBRW5DLEdBQUcsQ0FBQzdwRixLQUFLLENBQUN5QyxjQUFjLElBQUl0a0IsVUFBVSxHQUFHbUYsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ29NLFlBQVksRUFBRSxDQUFDLEVBQUU7WUFDcEVobkcsQ0FBQyxDQUFDaWxGLFFBQVEsRUFBRSxJQUFJO1lBQ2hCdm9FLEtBQUssQ0FBQytCLGNBQWMsQ0FBQyxDQUFDO1FBQzFCOztRQUVBOG9GLGVBQWUsRUFBRSxDQUFDdm5HLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3krRixJQUFJLElBQUksTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM1NEYsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ2dNLEtBQUssRUFBRTVtRyxDQUFDLENBQUM0NkYsV0FBVyxDQUFDK0wsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRyxHQUFHLENBQUMzbUcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDby9GLGdCQUFnQixJQUFJLElBQUksRUFBRTtZQUNwQ2dPLGVBQWUsRUFBRXZuRyxDQUFDLENBQUM0NkYsV0FBVyxDQUFDa00sS0FBSyxFQUFFOW1HLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNpTSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RTs7O1FBR0FHLFlBQVksRUFBRWhuRyxDQUFDLENBQUM0NkYsV0FBVyxDQUFDb00sV0FBVzs7UUFFdkNobkcsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ3FNLFFBQVEsRUFBRSxLQUFLOztRQUU3QixHQUFHLENBQUNqbkcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsSUFBSSxLQUFLLEVBQUU7WUFDOUIsR0FBRyxDQUFDLENBQUNsNEYsQ0FBQyxDQUFDODVGLGFBQWEsSUFBSSxFQUFFLEdBQUd5TSxlQUFlLElBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQ3ZtRyxDQUFDLENBQUM4NUYsYUFBYSxHQUFHOTVGLENBQUMsQ0FBQ28rRixXQUFXLENBQUMsRUFBRSxHQUFHbUksZUFBZSxJQUFJLE1BQU0sQ0FBQyxFQUFFO2dCQUMxSFMsWUFBWSxFQUFFaG5HLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNvTSxZQUFZLEVBQUVobkcsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDNDlGLFlBQVk7Z0JBQ2hFLzNGLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNxTSxRQUFRLEVBQUUsSUFBSTtZQUNoQztRQUNKOztRQUVBLEdBQUcsQ0FBQ2puRyxDQUFDLENBQUM3RixPQUFPLENBQUN5dUMsU0FBUyxJQUFJLEtBQUssRUFBRTtZQUM5QjVvQyxDQUFDLENBQUMyNkYsVUFBVSxFQUFFbCtELFFBQVEsRUFBRXVxRSxZQUFZLEVBQUVPLGNBQWM7UUFDeEQsRUFBRSxLQUFLO1lBQ0h2bkcsQ0FBQyxDQUFDMjZGLFVBQVUsRUFBRWwrRCxRQUFRLEVBQUUsQ0FBQ3VxRSxZQUFZLEVBQUUsQ0FBQ2huRyxDQUFDLENBQUNpcEYsS0FBSyxDQUFDejhELE1BQU0sQ0FBQyxFQUFFLEVBQUV4c0IsQ0FBQyxDQUFDZzZGLFNBQVMsQ0FBQyxFQUFFLEVBQUV1TixjQUFjO1FBQzdGO1FBQ0EsR0FBRyxDQUFDdm5HLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ28vRixnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7WUFDcEN2NUYsQ0FBQyxDQUFDMjZGLFVBQVUsRUFBRWwrRCxRQUFRLEVBQUV1cUUsWUFBWSxFQUFFTyxjQUFjO1FBQ3hEOztRQUVBLEdBQUcsQ0FBQ3ZuRyxDQUFDLENBQUM3RixPQUFPLENBQUNxMUMsS0FBSyxJQUFJLEtBQUssR0FBR3h2QyxDQUFDLENBQUM3RixPQUFPLENBQUMrK0YsVUFBVSxJQUFJLEtBQUssRUFBRTtZQUMxRCxPQUFPLEtBQUs7UUFDaEI7O1FBRUEsR0FBRyxDQUFDbDVGLENBQUMsQ0FBQzA1RixVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3RCMTVGLENBQUMsQ0FBQzI2RixVQUFVLEVBQUUsSUFBSTtZQUNsQixPQUFPLEtBQUs7UUFDaEI7O1FBRUEzNkYsQ0FBQyxDQUFDNmtHLE1BQU0sQ0FBQzdrRyxDQUFDLENBQUMyNkYsU0FBUyxDQUFDOztJQUV6QixDQUFDOztJQUVEOUQsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzR1RyxXQUFXLEVBQUUsUUFBUSxDQUFDMXFGLEtBQUssRUFBRTs7UUFFekMsSUFBSTFjLEVBQUUsRUFBRSxJQUFJO1lBQ1JnaUIsT0FBTzs7UUFFWGhpQixDQUFDLENBQUNzN0YsWUFBWSxFQUFFLElBQUk7O1FBRXBCLEdBQUcsQ0FBQ3Q3RixDQUFDLENBQUM0NkYsV0FBVyxDQUFDdU0sWUFBWSxJQUFJLEVBQUUsR0FBR25uRyxDQUFDLENBQUNxNkYsV0FBVyxHQUFHcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixZQUFZLEVBQUU7WUFDM0U5NEYsQ0FBQyxDQUFDNDZGLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDbEIsT0FBTyxLQUFLO1FBQ2hCOztRQUVBLEdBQUcsQ0FBQ2wrRSxLQUFLLENBQUN5QyxjQUFjLElBQUl0a0IsVUFBVSxHQUFHNmhCLEtBQUssQ0FBQ3lDLGFBQWEsQ0FBQzZDLFFBQVEsSUFBSW5uQixTQUFTLEVBQUU7WUFDaEZtbkIsUUFBUSxFQUFFdEYsS0FBSyxDQUFDeUMsYUFBYSxDQUFDNkMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM1Qzs7UUFFQWhpQixDQUFDLENBQUM0NkYsV0FBVyxDQUFDK0wsT0FBTyxFQUFFM21HLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNnTSxLQUFLLEVBQUU1a0YsUUFBUSxJQUFJbm5CLFVBQVUsRUFBRW1uQixPQUFPLENBQUNqQixNQUFNLEVBQUVyRSxLQUFLLENBQUM0RSxPQUFPO1FBQ2pHdGhCLENBQUMsQ0FBQzQ2RixXQUFXLENBQUNpTSxPQUFPLEVBQUU3bUcsQ0FBQyxDQUFDNDZGLFdBQVcsQ0FBQ2tNLEtBQUssRUFBRTlrRixRQUFRLElBQUlubkIsVUFBVSxFQUFFbW5CLE9BQU8sQ0FBQ2hCLE1BQU0sRUFBRXRFLEtBQUssQ0FBQzZFLE9BQU87O1FBRWpHdmhCLENBQUMsQ0FBQzIzRCxTQUFTLEVBQUUsSUFBSTs7SUFFckIsQ0FBQzs7SUFFRGsvQixLQUFLLENBQUNyK0YsU0FBUyxDQUFDaXZHLGVBQWUsRUFBRTVRLEtBQUssQ0FBQ3IrRixTQUFTLENBQUNrdkcsY0FBYyxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUV4RSxJQUFJMW5HLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDNDdGLGFBQWEsSUFBSSxJQUFJLEVBQUU7O1lBRXpCNTdGLENBQUMsQ0FBQ285RixNQUFNLENBQUMsQ0FBQzs7WUFFVnA5RixDQUFDLENBQUN1NkYsV0FBVyxDQUFDNXJGLFFBQVEsQ0FBQyxJQUFJLENBQUN4VSxPQUFPLENBQUN1NkQsS0FBSyxDQUFDLENBQUNwd0MsTUFBTSxDQUFDLENBQUM7O1lBRW5EdGtCLENBQUMsQ0FBQzQ3RixZQUFZLENBQUM5MkUsUUFBUSxDQUFDOWtCLENBQUMsQ0FBQ3U2RixXQUFXLENBQUM7O1lBRXRDdjZGLENBQUMsQ0FBQ3E5RixNQUFNLENBQUMsQ0FBQzs7UUFFZDs7SUFFSixDQUFDOztJQUVEeEcsS0FBSyxDQUFDcitGLFNBQVMsQ0FBQzRrRyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7O1FBRWhDLElBQUlwOUYsRUFBRSxFQUFFLElBQUk7O1FBRVo0K0IsQ0FBQyxDQUFDLGVBQWUsRUFBRTUrQixDQUFDLENBQUMyN0YsT0FBTyxDQUFDLENBQUM5cUYsTUFBTSxDQUFDLENBQUM7O1FBRXRDLEdBQUcsQ0FBQzdRLENBQUMsQ0FBQys1RixLQUFLLEVBQUU7WUFDVC81RixDQUFDLENBQUMrNUYsS0FBSyxDQUFDbHBGLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCOztRQUVBLEdBQUcsQ0FBQzdRLENBQUMsQ0FBQ282RixXQUFXLEdBQUdwNkYsQ0FBQyxDQUFDNjhGLFFBQVEsQ0FBQzE2RixJQUFJLENBQUNuQyxDQUFDLENBQUM3RixPQUFPLENBQUNrOUYsU0FBUyxDQUFDLEVBQUU7WUFDdERyM0YsQ0FBQyxDQUFDbzZGLFVBQVUsQ0FBQ3ZwRixNQUFNLENBQUMsQ0FBQztRQUN6Qjs7UUFFQSxHQUFHLENBQUM3USxDQUFDLENBQUNtNkYsV0FBVyxHQUFHbjZGLENBQUMsQ0FBQzY4RixRQUFRLENBQUMxNkYsSUFBSSxDQUFDbkMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDbTlGLFNBQVMsQ0FBQyxFQUFFO1lBQ3REdDNGLENBQUMsQ0FBQ202RixVQUFVLENBQUN0cEYsTUFBTSxDQUFDLENBQUM7UUFDekI7O1FBRUE3USxDQUFDLENBQUN3NkY7WUFDRSxDQUFDOW9FLFdBQVcsQ0FBQyxzREFBc0Q7WUFDbkUsQ0FBQ2xyQixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU07WUFDM0IsQ0FBQzhSLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDOztJQUV6QixDQUFDOztJQUVEdStFLEtBQUssQ0FBQ3IrRixTQUFTLENBQUM4bUcsUUFBUSxFQUFFLFFBQVEsQ0FBQ3FJLGNBQWMsRUFBRTs7UUFFL0MsSUFBSTNuRyxFQUFFLEVBQUUsSUFBSTtRQUNaQSxDQUFDLENBQUMyN0YsT0FBTyxDQUFDbDhFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQ3pmLENBQUMsRUFBRTJuRyxjQUFjLENBQUMsQ0FBQztRQUNqRDNuRyxDQUFDLENBQUNtbEMsT0FBTyxDQUFDLENBQUM7O0lBRWYsQ0FBQzs7SUFFRDB4RCxLQUFLLENBQUNyK0YsU0FBUyxDQUFDMHBHLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFdEMsSUFBSWxpRyxFQUFFLEVBQUUsSUFBSTtZQUNSMGhHLFlBQVk7O1FBRWhCQSxhQUFhLEVBQUUzbUcsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQ3BwQyxDQUFDLENBQUM3RixPQUFPLENBQUMyK0YsYUFBYSxFQUFFLENBQUMsQ0FBQzs7UUFFckQsR0FBRyxFQUFFOTRGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3kyRSxPQUFPLElBQUksS0FBSztZQUMzQjV3RSxDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhO1lBQ3RDLENBQUM5NEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDKzlGLFNBQVMsRUFBRTs7WUFFdEJsNEYsQ0FBQyxDQUFDbzZGLFVBQVUsQ0FBQzFvRSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ2xyQixJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztZQUN6RXhHLENBQUMsQ0FBQ202RixVQUFVLENBQUN6b0UsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUNsckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7O1lBRXpFLEdBQUcsQ0FBQ3hHLENBQUMsQ0FBQzg1RixhQUFhLElBQUksQ0FBQyxFQUFFOztnQkFFdEI5NUYsQ0FBQyxDQUFDbzZGLFVBQVUsQ0FBQy9vRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzdxQixJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQztnQkFDckV4RyxDQUFDLENBQUNtNkYsVUFBVSxDQUFDem9FLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDbHJCLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDOztZQUU3RSxFQUFFLEtBQUssR0FBRyxDQUFDeEcsQ0FBQyxDQUFDODVGLGFBQWEsR0FBRzk1RixDQUFDLENBQUNxNkYsV0FBVyxFQUFFcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzIrRixhQUFhLEdBQUc5NEYsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDcTlGLFdBQVcsSUFBSSxLQUFLLEVBQUU7O2dCQUVsR3gzRixDQUFDLENBQUNtNkYsVUFBVSxDQUFDOW9FLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDN3FCLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDO2dCQUNyRXhHLENBQUMsQ0FBQ282RixVQUFVLENBQUMxb0UsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUNsckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7O1lBRTdFLEVBQUUsS0FBSyxHQUFHLENBQUN4RyxDQUFDLENBQUM4NUYsYUFBYSxHQUFHOTVGLENBQUMsQ0FBQ3E2RixXQUFXLEVBQUUsRUFBRSxHQUFHcjZGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ3E5RixXQUFXLElBQUksSUFBSSxFQUFFOztnQkFFNUV4M0YsQ0FBQyxDQUFDbTZGLFVBQVUsQ0FBQzlvRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzdxQixJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQztnQkFDckV4RyxDQUFDLENBQUNvNkYsVUFBVSxDQUFDMW9FLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDbHJCLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDOztZQUU3RTs7UUFFSjs7SUFFSixDQUFDOztJQUVEcXdGLEtBQUssQ0FBQ3IrRixTQUFTLENBQUMrbEcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFOztRQUVwQyxJQUFJditGLEVBQUUsRUFBRSxJQUFJOztRQUVaLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDKzVGLE1BQU0sSUFBSSxJQUFJLEVBQUU7O1lBRWxCLzVGLENBQUMsQ0FBQys1RjtnQkFDRSxDQUFDOTBGLElBQUksQ0FBQyxJQUFJO29CQUNOLENBQUN5c0IsV0FBVyxDQUFDLGNBQWM7b0JBQzNCLENBQUMzM0IsR0FBRyxDQUFDLENBQUM7O1lBRWRpRyxDQUFDLENBQUMrNUY7Z0JBQ0UsQ0FBQzkwRixJQUFJLENBQUMsSUFBSTtnQkFDVixDQUFDdEwsRUFBRSxDQUFDb0IsSUFBSSxDQUFDcXVDLEtBQUssQ0FBQ3BwQyxDQUFDLENBQUM4NUYsYUFBYSxFQUFFOTVGLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQzQrRixjQUFjLENBQUM7Z0JBQ3pELENBQUMxbkUsUUFBUSxDQUFDLGNBQWMsQ0FBQzs7UUFFakM7O0lBRUosQ0FBQzs7SUFFRHdsRSxLQUFLLENBQUNyK0YsU0FBUyxDQUFDNnZCLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRTs7UUFFcEMsSUFBSXJvQixFQUFFLEVBQUUsSUFBSTs7UUFFWixHQUFHLEVBQUVBLENBQUMsQ0FBQzdGLE9BQU8sQ0FBQ29tRixTQUFTLEVBQUU7O1lBRXRCLEdBQUcsRUFBRXByRixRQUFRLENBQUM2SyxDQUFDLENBQUNpc0IsTUFBTSxFQUFFLEVBQUU7O2dCQUV0QmpzQixDQUFDLENBQUNzN0YsWUFBWSxFQUFFLElBQUk7O1lBRXhCLEVBQUUsS0FBSzs7Z0JBRUh0N0YsQ0FBQyxDQUFDczdGLFlBQVksRUFBRSxLQUFLOztZQUV6Qjs7UUFFSjs7SUFFSixDQUFDOztJQUVEMThELENBQUMsQ0FBQ3ZtQyxFQUFFLENBQUN5bEcsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ3BCLElBQUk5OUYsRUFBRSxFQUFFLElBQUk7WUFDUjB1QixJQUFJLEVBQUVqMUIsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNsQm1QLEtBQUssRUFBRWpPLEtBQUssQ0FBQ25DLFNBQVMsQ0FBQzVDLEtBQUssQ0FBQ1UsSUFBSSxDQUFDbUQsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMvQ3VWLEVBQUUsRUFBRWhQLENBQUMsQ0FBQ3JILE1BQU07WUFDWnRCLENBQUM7WUFDRDRCLEdBQUc7UUFDUCxJQUFJLENBQUM1QixFQUFFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEVBQUUyWCxDQUFDLEVBQUUzWCxDQUFDLEVBQUUsRUFBRTtZQUNwQixHQUFHLENBQUMsT0FBT3EzQixJQUFJLEdBQUcsU0FBUyxHQUFHLE9BQU9BLElBQUksR0FBRyxXQUFXO2dCQUNuRDF1QixDQUFDLENBQUMzSSxDQUFDLENBQUMsQ0FBQ3ltRyxNQUFNLEVBQUUsSUFBSWpILEtBQUssQ0FBQzcyRixDQUFDLENBQUMzSSxDQUFDLENBQUMsRUFBRXEzQixHQUFHLENBQUM7WUFDckM7Z0JBQ0l6MUIsSUFBSSxFQUFFK0csQ0FBQyxDQUFDM0ksQ0FBQyxDQUFDLENBQUN5bUcsS0FBSyxDQUFDcHZFLEdBQUcsQ0FBQyxDQUFDbDFCLEtBQUssQ0FBQ3dHLENBQUMsQ0FBQzNJLENBQUMsQ0FBQyxDQUFDeW1HLEtBQUssRUFBRWwxRixJQUFJLENBQUM7WUFDakQsR0FBRyxDQUFDLE9BQU8zUCxJQUFJLEdBQUcsV0FBVyxFQUFFLE9BQU9BLEdBQUc7UUFDN0M7UUFDQSxPQUFPK0csQ0FBQztJQUNaLENBQUM7O0FBRUwsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7O0FDejdGSCxJQUFJNG5HLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ3JCLElBQUlDLGlCQUFpQixFQUFFLENBQUMsQ0FBQzs7OztJQUl6QixTQUFTdi9GLEtBQUssQ0FBQyxFQUFFO1FBQ2J3L0YsY0FBYyxDQUFDLENBQUM7SUFDcEI7Ozs7SUFJQSxJQUFJQSxlQUFlLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDNUJELGdCQUFnQixDQUFDN3RHLElBQUksQ0FBQyt0RyxXQUFXLENBQUM7UUFDbENucEUsQ0FBQyxDQUFDenBDLFFBQVEsQ0FBQyxDQUFDcVosS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJblgsRUFBRSxHQUFHd3dHLGdCQUFnQixFQUFFO2dCQUM1QkEsZ0JBQWdCLENBQUN4d0csQ0FBQyxDQUFDLENBQUNzd0YsTUFBTSxDQUFDLENBQUM7WUFDaEM7UUFDSixDQUFDLENBQUM7SUFDTixDQUFDOzs7Ozs7O0lBT0QsSUFBSW9nQixZQUFZLEVBQUUsUUFBUSxDQUFDenBHLENBQUMsRUFBRUMsQ0FBQyxFQUFFO1FBQzdCLEdBQUcsQ0FBQ0QsQ0FBQyxDQUFDMHBHLFNBQVMsRUFBRXpwRyxDQUFDLENBQUN5cEcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLEtBQUssR0FBRyxDQUFDMXBHLENBQUMsQ0FBQzJwRyxTQUFTLEVBQUUxcEcsQ0FBQyxDQUFDMHBHLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFDMUMsS0FBSyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7Ozs7OztJQU9ELFNBQVNDLE9BQU8sQ0FBQ3ZnQixNQUFNLEVBQUVxZ0IsUUFBUSxFQUFFO1FBQy9CLEdBQUcsQ0FBQyxPQUFPQSxTQUFTLEdBQUcsV0FBVyxFQUFFQSxTQUFTLEVBQUUsQ0FBQztRQUNoREgsZ0JBQWdCLENBQUMveEcsSUFBSSxDQUFDO1lBQ2xCNnhGLE1BQU0sRUFBRUEsTUFBTTtZQUNkcWdCLFFBQVEsRUFBRUE7UUFDZCxDQUFDLENBQUM7SUFDTjtJQUNBLE9BQU87UUFDSEUsT0FBTyxDQUFDQSxPQUFPO1FBQ2Y1L0YsS0FBSyxDQUFDQTtJQUNWLENBQUM7O0FBRUwsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKcy9GLE1BQU0sQ0FBQ3QvRixLQUFLLENBQUMsQ0FBQzs7QUFFZHMvRixNQUFNLENBQUNNLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUN0QkMsWUFBWSxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDOzs7OztBQUtGdnBFLENBQUMsQ0FBQ3RwQyxNQUFNLENBQUMsQ0FBQ293RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkJ5aUQsWUFBWSxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDOztBQUVGLFNBQVNBLFlBQVksQ0FBQyxDQUFDO0lBQ25CdnBFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQ3hsQyxJQUFJLENBQUMsUUFBUSxFQUFFOFYsTUFBTSxFQUFFO1FBQ2hDLEdBQUcsQ0FBQzB2QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN3cEUsWUFBWSxDQUFDLENBQUMsRUFBRTtZQUN4QnhwRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN2TixRQUFRLENBQUMsU0FBUyxDQUFDO1FBQy9CLEVBQUUsS0FBSztZQUNIdU4sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbE4sV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNsQztJQUNKLENBQUMsQ0FBQztBQUNOOzs7QUFHQWtOLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDay9ELEtBQUssQ0FBQztJQUN2QjVGLFFBQVEsRUFBRSxJQUFJO0lBQ2QzWCxRQUFRLEVBQUUsSUFBSTtJQUNkZ1gsYUFBYSxFQUFFLElBQUk7SUFDbkJlLFlBQVksRUFBRSxLQUFLO0lBQ25CWSxTQUFTLEVBQUUsSUFBSTtJQUNmdG9CLE1BQU0sRUFBRSxLQUFLO0VBQ2YsQ0FBQyxDQUFDOztFQUVGaHlDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDeGxDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtJQUNwQ3dsQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUNrL0QsS0FBSyxDQUFDO1FBQ1o1RixRQUFRLEVBQUUsSUFBSTtRQUNkM1gsUUFBUSxFQUFFLElBQUk7UUFDZGdYLGFBQWEsRUFBRSxJQUFJO1FBQ25CZSxZQUFZLEVBQUUsS0FBSztRQUNuQlksU0FBUyxFQUFFLElBQUk7UUFDZnRvQixNQUFNLEVBQUUsS0FBSzs7OztNQUlmLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQzs7O0VBR0poeUMsQ0FBQyxDQUFDdm1DLEVBQUUsQ0FBQyt2RyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDN0IsSUFBSUMsV0FBVyxFQUFFenBFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3RDLE1BQU0sQ0FBQyxDQUFDLENBQUM5M0IsR0FBRztJQUNyQyxJQUFJOGpHLGNBQWMsRUFBRUQsV0FBVyxFQUFFenBFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2dJLFdBQVcsQ0FBQyxDQUFDOztJQUV0RCxJQUFJMmhFLFlBQVksRUFBRTNwRSxDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUMrMUIsU0FBUyxDQUFDLENBQUM7SUFDdkMsSUFBSW05RSxlQUFlLEVBQUVELFlBQVksRUFBRTNwRSxDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUNrM0IsTUFBTSxDQUFDLENBQUM7O0lBRXJELE9BQU84N0UsY0FBYyxFQUFFQyxZQUFZLEdBQUdGLFdBQVcsRUFBRUcsY0FBYztBQUNyRSxDQUFDIiwiZmlsZSI6Im1haW4tbmF0aXZlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXHJcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xXHJcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cclxuICpcclxuICogSW5jbHVkZXMgU2l6emxlLmpzXHJcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xyXG4gKlxyXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXHJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxyXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxyXG4gKlxyXG4gKiBEYXRlOiAyMDE5LTA1LTAxVDIxOjA0WlxyXG4gKi9cclxuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xyXG5cclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHJcblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcclxuXHJcblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXHJcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxyXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcclxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxyXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cclxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcclxuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXHJcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XHJcblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcclxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XHJcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcclxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcclxuXHRcdFx0fTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XHJcblx0fVxyXG5cclxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcclxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XHJcblxyXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcclxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXHJcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXHJcbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxyXG5cInVzZSBzdHJpY3RcIjtcclxuXHJcbnZhciBhcnIgPSBbXTtcclxuXHJcbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcclxuXHJcbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcclxuXHJcbnZhciBzbGljZSA9IGFyci5zbGljZTtcclxuXHJcbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xyXG5cclxudmFyIHB1c2ggPSBhcnIucHVzaDtcclxuXHJcbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XHJcblxyXG52YXIgY2xhc3MydHlwZSA9IHt9O1xyXG5cclxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcclxuXHJcbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xyXG5cclxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XHJcblxyXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xyXG5cclxudmFyIHN1cHBvcnQgPSB7fTtcclxuXHJcbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xyXG5cclxuICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxyXG4gICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcclxuICAgICAgLy8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cclxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxyXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCI7XHJcbiAgfTtcclxuXHJcblxyXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xyXG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcclxuXHR9O1xyXG5cclxuXHJcblxyXG5cclxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcclxuXHRcdHR5cGU6IHRydWUsXHJcblx0XHRzcmM6IHRydWUsXHJcblx0XHRub25jZTogdHJ1ZSxcclxuXHRcdG5vTW9kdWxlOiB0cnVlXHJcblx0fTtcclxuXHJcblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xyXG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xyXG5cclxuXHRcdHZhciBpLCB2YWwsXHJcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XHJcblxyXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xyXG5cdFx0aWYgKCBub2RlICkge1xyXG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xyXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXHJcblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xyXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcclxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxyXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcclxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xyXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2ZcclxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcclxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxyXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xyXG5cdFx0XHRcdGlmICggdmFsICkge1xyXG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XHJcblx0fVxyXG5cclxuXHJcbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xyXG5cdGlmICggb2JqID09IG51bGwgKSB7XHJcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcclxuXHR9XHJcblxyXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxyXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XHJcblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxyXG5cdFx0dHlwZW9mIG9iajtcclxufVxyXG4vKiBnbG9iYWwgU3ltYm9sICovXHJcbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXHJcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXHJcblxyXG5cclxuXHJcbnZhclxyXG5cdHZlcnNpb24gPSBcIjMuNC4xXCIsXHJcblxyXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XHJcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xyXG5cclxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xyXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcclxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XHJcblx0fSxcclxuXHJcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XHJcblx0Ly8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXHJcblx0cnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7XHJcblxyXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xyXG5cclxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXHJcblx0anF1ZXJ5OiB2ZXJzaW9uLFxyXG5cclxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxyXG5cclxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcclxuXHRsZW5ndGg6IDAsXHJcblxyXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXHJcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcclxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XHJcblxyXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxyXG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcclxuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XHJcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcclxuXHR9LFxyXG5cclxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXHJcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXHJcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XHJcblxyXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcclxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcclxuXHJcblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxyXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xyXG5cclxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XHJcblx0XHRyZXR1cm4gcmV0O1xyXG5cdH0sXHJcblxyXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXHJcblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xyXG5cdH0sXHJcblxyXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcclxuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcclxuXHRcdH0gKSApO1xyXG5cdH0sXHJcblxyXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XHJcblx0fSxcclxuXHJcblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcclxuXHR9LFxyXG5cclxuXHRsYXN0OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xyXG5cdH0sXHJcblxyXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcclxuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcclxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcclxuXHR9LFxyXG5cclxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XHJcblx0fSxcclxuXHJcblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxyXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxyXG5cdHB1c2g6IHB1c2gsXHJcblx0c29ydDogYXJyLnNvcnQsXHJcblx0c3BsaWNlOiBhcnIuc3BsaWNlXHJcbn07XHJcblxyXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcclxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxyXG5cdFx0aSA9IDEsXHJcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxyXG5cdFx0ZGVlcCA9IGZhbHNlO1xyXG5cclxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXHJcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcclxuXHRcdGRlZXAgPSB0YXJnZXQ7XHJcblxyXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxyXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XHJcblx0XHRpKys7XHJcblx0fVxyXG5cclxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcclxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xyXG5cdFx0dGFyZ2V0ID0ge307XHJcblx0fVxyXG5cclxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcclxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcclxuXHRcdHRhcmdldCA9IHRoaXM7XHJcblx0XHRpLS07XHJcblx0fVxyXG5cclxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcclxuXHJcblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXHJcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcclxuXHJcblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3RcclxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xyXG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XHJcblxyXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cclxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXHJcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXHJcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XHJcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcclxuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xyXG5cclxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxyXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XHJcblx0XHRcdFx0XHRcdGNsb25lID0gW107XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcclxuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cclxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcclxuXHJcblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XHJcblx0cmV0dXJuIHRhcmdldDtcclxufTtcclxuXHJcbmpRdWVyeS5leHRlbmQoIHtcclxuXHJcblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXHJcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcclxuXHJcblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcclxuXHRpc1JlYWR5OiB0cnVlLFxyXG5cclxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcclxuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XHJcblx0fSxcclxuXHJcblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcclxuXHJcblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcclxuXHRcdHZhciBwcm90bywgQ3RvcjtcclxuXHJcblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcclxuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xyXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XHJcblxyXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxyXG5cdFx0aWYgKCAhcHJvdG8gKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXHJcblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcclxuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcclxuXHR9LFxyXG5cclxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xyXG5cdFx0dmFyIG5hbWU7XHJcblxyXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH0sXHJcblxyXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XHJcblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMgKSB7XHJcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSApO1xyXG5cdH0sXHJcblxyXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xyXG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XHJcblxyXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XHJcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XHJcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcclxuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBvYmo7XHJcblx0fSxcclxuXHJcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XHJcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XHJcblx0XHRyZXR1cm4gdGV4dCA9PSBudWxsID9cclxuXHRcdFx0XCJcIiA6XHJcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xyXG5cdH0sXHJcblxyXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcclxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XHJcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcclxuXHJcblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xyXG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXHJcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cclxuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXQ7XHJcblx0fSxcclxuXHJcblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcclxuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcclxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XHJcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xyXG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxyXG5cdFx0XHRqID0gMCxcclxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcclxuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XHJcblx0XHR9XHJcblxyXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcclxuXHJcblx0XHRyZXR1cm4gZmlyc3Q7XHJcblx0fSxcclxuXHJcblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xyXG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcclxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxyXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XHJcblxyXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xyXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cclxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcclxuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xyXG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG1hdGNoZXM7XHJcblx0fSxcclxuXHJcblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XHJcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XHJcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdHJldCA9IFtdO1xyXG5cclxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXHJcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xyXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XHJcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xyXG5cclxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XHJcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcclxuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcclxuXHJcblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xyXG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xyXG5cdFx0cmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApO1xyXG5cdH0sXHJcblxyXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xyXG5cdGd1aWQ6IDEsXHJcblxyXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXHJcblx0c3VwcG9ydDogc3VwcG9ydFxyXG59ICk7XHJcblxyXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcclxuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcclxufVxyXG5cclxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXHJcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXHJcbmZ1bmN0aW9uKCBpLCBuYW1lICkge1xyXG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG59ICk7XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xyXG5cclxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXHJcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxyXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xyXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcclxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcclxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xyXG5cclxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XHJcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xyXG59XHJcbnZhciBTaXp6bGUgPVxyXG4vKiFcclxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy40XHJcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xyXG4gKlxyXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXHJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxyXG4gKiBodHRwczovL2pzLmZvdW5kYXRpb24vXHJcbiAqXHJcbiAqIERhdGU6IDIwMTktMDQtMDhcclxuICovXHJcbihmdW5jdGlvbiggd2luZG93ICkge1xyXG5cclxudmFyIGksXHJcblx0c3VwcG9ydCxcclxuXHRFeHByLFxyXG5cdGdldFRleHQsXHJcblx0aXNYTUwsXHJcblx0dG9rZW5pemUsXHJcblx0Y29tcGlsZSxcclxuXHRzZWxlY3QsXHJcblx0b3V0ZXJtb3N0Q29udGV4dCxcclxuXHRzb3J0SW5wdXQsXHJcblx0aGFzRHVwbGljYXRlLFxyXG5cclxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXHJcblx0c2V0RG9jdW1lbnQsXHJcblx0ZG9jdW1lbnQsXHJcblx0ZG9jRWxlbSxcclxuXHRkb2N1bWVudElzSFRNTCxcclxuXHRyYnVnZ3lRU0EsXHJcblx0cmJ1Z2d5TWF0Y2hlcyxcclxuXHRtYXRjaGVzLFxyXG5cdGNvbnRhaW5zLFxyXG5cclxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXHJcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcclxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXHJcblx0ZGlycnVucyA9IDAsXHJcblx0ZG9uZSA9IDAsXHJcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXHJcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXHJcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXHJcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXHJcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XHJcblx0XHRpZiAoIGEgPT09IGIgKSB7XHJcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9LFxyXG5cclxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXHJcblx0aGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSxcclxuXHRhcnIgPSBbXSxcclxuXHRwb3AgPSBhcnIucG9wLFxyXG5cdHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsXHJcblx0cHVzaCA9IGFyci5wdXNoLFxyXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxyXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxyXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcclxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XHJcblx0XHR2YXIgaSA9IDAsXHJcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xyXG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRcdGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH0sXHJcblxyXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxyXG5cclxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXHJcblxyXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXHJcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcclxuXHJcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXHJcblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFwwLVxcXFx4YTBdKStcIixcclxuXHJcblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXHJcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcclxuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXHJcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xyXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcclxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcclxuXHRcdFwiKlxcXFxdXCIsXHJcblxyXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xyXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcclxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxyXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXHJcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcclxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcclxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcclxuXHRcdFwiLipcIiArXHJcblx0XHRcIilcXFxcKXwpXCIsXHJcblxyXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcclxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXHJcblxyXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxyXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxyXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxyXG5cclxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxyXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcclxuXHJcblx0bWF0Y2hFeHByID0ge1xyXG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXHJcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXHJcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXHJcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXHJcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcclxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXHJcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXHJcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxyXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXHJcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcclxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcclxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArXHJcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxyXG5cdH0sXHJcblxyXG5cdHJodG1sID0gL0hUTUwkL2ksXHJcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXHJcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcclxuXHJcblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXHJcblxyXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xyXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcclxuXHJcblx0cnNpYmxpbmcgPSAvWyt+XS8sXHJcblxyXG5cdC8vIENTUyBlc2NhcGVzXHJcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xyXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fChcIiArIHdoaXRlc3BhY2UgKyBcIil8LilcIiwgXCJpZ1wiICksXHJcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkge1xyXG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcclxuXHRcdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XHJcblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI0XHJcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcclxuXHRcdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cclxuXHRcdFx0ZXNjYXBlZCA6XHJcblx0XHRcdGhpZ2ggPCAwID9cclxuXHRcdFx0XHQvLyBCTVAgY29kZXBvaW50XHJcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XHJcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXHJcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XHJcblx0fSxcclxuXHJcblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cclxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcclxuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXHJcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XHJcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xyXG5cclxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXHJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XHJcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xyXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcclxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xyXG5cdH0sXHJcblxyXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcclxuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxyXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxyXG5cdC8vIGVycm9yIGluIElFXHJcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0c2V0RG9jdW1lbnQoKTtcclxuXHR9LFxyXG5cclxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxyXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xyXG5cdFx0fSxcclxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XHJcblx0KTtcclxuXHJcbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXHJcbnRyeSB7XHJcblx0cHVzaC5hcHBseShcclxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcclxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXHJcblx0KTtcclxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxyXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcclxuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xyXG59IGNhdGNoICggZSApIHtcclxuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XHJcblxyXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcclxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcclxuXHRcdFx0cHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7XHJcblx0XHR9IDpcclxuXHJcblx0XHQvLyBTdXBwb3J0OiBJRTw5XHJcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XHJcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XHJcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcclxuXHRcdFx0XHRpID0gMDtcclxuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXHJcblx0XHRcdHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge31cclxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XHJcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXHJcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXHJcblxyXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxyXG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XHJcblxyXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xyXG5cclxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxyXG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxyXG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xyXG5cclxuXHRcdHJldHVybiByZXN1bHRzO1xyXG5cdH1cclxuXHJcblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xyXG5cdGlmICggIXNlZWQgKSB7XHJcblxyXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcclxuXHRcdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcclxuXHRcdH1cclxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xyXG5cclxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XHJcblxyXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxyXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXHJcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXHJcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XHJcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcclxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xyXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XHJcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXHJcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcclxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJlxyXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcclxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXHJcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XHJcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHJcblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3JcclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcclxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcclxuXHJcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXHJcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcclxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXHJcblx0XHRcdFx0KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSAmJlxyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcclxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xyXG5cdFx0XHRcdChub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIpICkge1xyXG5cclxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xyXG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xyXG5cclxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXHJcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cclxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxyXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cclxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXHJcblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJiByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XHJcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xyXG5cdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XHJcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcclxuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IFwiI1wiICsgbmlkICsgXCIgXCIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXHJcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcclxuXHRcdFx0XHRcdFx0Y29udGV4dDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxyXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XHJcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xyXG5cdFx0XHRcdH0gZmluYWxseSB7XHJcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQWxsIG90aGVyc1xyXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXHJcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcclxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXHJcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcclxuXHR2YXIga2V5cyA9IFtdO1xyXG5cclxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcclxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXHJcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XHJcblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xyXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIChjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlKTtcclxuXHR9XHJcblx0cmV0dXJuIGNhY2hlO1xyXG59XHJcblxyXG4vKipcclxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcclxuICovXHJcbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XHJcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XHJcblx0cmV0dXJuIGZuO1xyXG59XHJcblxyXG4vKipcclxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxyXG4gKi9cclxuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcclxuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fSBmaW5hbGx5IHtcclxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxyXG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xyXG5cdFx0fVxyXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcclxuXHRcdGVsID0gbnVsbDtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xyXG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXHJcblx0XHRpID0gYXJyLmxlbmd0aDtcclxuXHJcblx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcclxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXHJcbiAqL1xyXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XHJcblx0dmFyIGN1ciA9IGIgJiYgYSxcclxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXHJcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xyXG5cclxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcclxuXHRpZiAoIGRpZmYgKSB7XHJcblx0XHRyZXR1cm4gZGlmZjtcclxuXHR9XHJcblxyXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXHJcblx0aWYgKCBjdXIgKSB7XHJcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xyXG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcclxuXHRcdFx0XHRyZXR1cm4gLTE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBhID8gMSA6IC0xO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XHJcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XHJcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRyZXR1cm4gKG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XHJcblx0fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcclxuXHJcblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXHJcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cclxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXHJcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXHJcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxyXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxyXG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxyXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXHJcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXHJcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcclxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXHJcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cclxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XHJcblxyXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XHJcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcclxuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcclxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xyXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XHJcblxyXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcclxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xyXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcclxuXHRcdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XHJcblxyXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxyXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XHJcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cclxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XHJcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XHJcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcclxuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XHJcblx0XHRcdHZhciBqLFxyXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXHJcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XHJcblxyXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcclxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcclxuXHRcdFx0XHRcdHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxyXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxyXG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcclxuICovXHJcbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xyXG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XHJcbn1cclxuXHJcbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXHJcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIERldGVjdHMgWE1MIG5vZGVzXHJcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcclxuICovXHJcbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0dmFyIG5hbWVzcGFjZSA9IGVsZW0ubmFtZXNwYWNlVVJJLFxyXG5cdFx0ZG9jRWxlbSA9IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRSA8PThcclxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXHJcblx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzQ4MzNcclxuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcclxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcclxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxyXG4gKi9cclxuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcclxuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxyXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xyXG5cclxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxyXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XHJcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XHJcblx0fVxyXG5cclxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xyXG5cdGRvY3VtZW50ID0gZG9jO1xyXG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2VcclxuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXHJcblx0aWYgKCBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmXHJcblx0XHQoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcclxuXHJcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxyXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcclxuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcclxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcclxuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qIEF0dHJpYnV0ZXNcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFPDhcclxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcclxuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcclxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xyXG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XHJcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcclxuXHR9KTtcclxuXHJcblx0LyogZ2V0RWxlbWVudChzKUJ5KlxyXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xyXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xyXG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcclxuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcclxuXHR9KTtcclxuXHJcblx0Ly8gU3VwcG9ydDogSUU8OVxyXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRTwxMFxyXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxyXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxyXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxyXG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XHJcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcclxuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcclxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcclxuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSBmdW5jdGlvbiggaWQgKSB7XHJcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGF0dHJJZDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcclxuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcclxuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcclxuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcclxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xyXG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxyXG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxyXG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XHJcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XHJcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxyXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XHJcblxyXG5cdFx0XHRcdGlmICggZWxlbSApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxyXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xyXG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXHJcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XHJcblx0XHRcdFx0XHRpID0gMDtcclxuXHRcdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHtcclxuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xyXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gW107XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvLyBUYWdcclxuXHRFeHByLmZpbmRbXCJUQUdcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cclxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XHJcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xyXG5cclxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXHJcblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xyXG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xyXG5cdFx0XHR9XHJcblx0XHR9IDpcclxuXHJcblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xyXG5cdFx0XHR2YXIgZWxlbSxcclxuXHRcdFx0XHR0bXAgPSBbXSxcclxuXHRcdFx0XHRpID0gMCxcclxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXHJcblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xyXG5cclxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xyXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XHJcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdG1wO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cdFx0fTtcclxuXHJcblx0Ly8gQ2xhc3NcclxuXHRFeHByLmZpbmRbXCJDTEFTU1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xyXG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xyXG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XHJcblxyXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXHJcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xyXG5cclxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxyXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxyXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcclxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxyXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcclxuXHRyYnVnZ3lRU0EgPSBbXTtcclxuXHJcblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XHJcblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcclxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcclxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XHJcblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2VcclxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XHJcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxyXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxyXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcclxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcclxuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcclxuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XHJcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cclxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXHJcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxyXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XHJcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcclxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xyXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXHJcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXHJcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXHJcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCI6Y2hlY2tlZFwiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcclxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxyXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXHJcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIuIy4rWyt+XVwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcclxuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcclxuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xyXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcclxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XHJcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcclxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXHJcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXHJcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXHJcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcclxuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcclxuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXHJcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3NcclxuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XHJcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XHJcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxyXG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcclxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxyXG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XHJcblxyXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcclxuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXHJcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXHJcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xyXG5cclxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxyXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXHJcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcclxuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbihcInxcIikgKTtcclxuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xyXG5cclxuXHQvKiBDb250YWluc1xyXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XHJcblxyXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxyXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXHJcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cclxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xyXG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxyXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xyXG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcclxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XHJcblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxyXG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XHJcblx0XHRcdCkpO1xyXG5cdFx0fSA6XHJcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcclxuXHRcdFx0aWYgKCBiICkge1xyXG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xyXG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fTtcclxuXHJcblx0LyogU29ydGluZ1xyXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xyXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xyXG5cdGZ1bmN0aW9uKCBhLCBiICkge1xyXG5cclxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXHJcblx0XHRpZiAoIGEgPT09IGIgKSB7XHJcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cclxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcclxuXHRcdGlmICggY29tcGFyZSApIHtcclxuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxyXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cclxuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcclxuXHJcblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxyXG5cdFx0XHQxO1xyXG5cclxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xyXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxyXG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XHJcblxyXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcclxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xyXG5cdFx0XHRcdHJldHVybiAtMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXHJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xyXG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcclxuXHRcdFx0XHQwO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcclxuXHR9IDpcclxuXHRmdW5jdGlvbiggYSwgYiApIHtcclxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcclxuXHRcdGlmICggYSA9PT0gYiApIHtcclxuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGN1cixcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcclxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxyXG5cdFx0XHRhcCA9IFsgYSBdLFxyXG5cdFx0XHRicCA9IFsgYiBdO1xyXG5cclxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXHJcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcclxuXHRcdFx0cmV0dXJuIGEgPT09IGRvY3VtZW50ID8gLTEgOlxyXG5cdFx0XHRcdGIgPT09IGRvY3VtZW50ID8gMSA6XHJcblx0XHRcdFx0YXVwID8gLTEgOlxyXG5cdFx0XHRcdGJ1cCA/IDEgOlxyXG5cdFx0XHRcdHNvcnRJbnB1dCA/XHJcblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxyXG5cdFx0XHRcdDA7XHJcblxyXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcclxuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xyXG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cclxuXHRcdGN1ciA9IGE7XHJcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XHJcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xyXG5cdFx0fVxyXG5cdFx0Y3VyID0gYjtcclxuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcclxuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcclxuXHRcdHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkge1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGkgP1xyXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3JcclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6XHJcblxyXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3RcclxuXHRcdFx0YXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDpcclxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxyXG5cdFx0XHQwO1xyXG5cdH07XHJcblxyXG5cdHJldHVybiBkb2N1bWVudDtcclxufTtcclxuXHJcblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xyXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XHJcbn07XHJcblxyXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XHJcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXHJcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xyXG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcclxuXHR9XHJcblxyXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcclxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxyXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxyXG5cdFx0KCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcclxuXHJcblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcclxuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxyXG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcclxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcclxuXHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHJldDtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xyXG59O1xyXG5cclxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XHJcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXHJcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xyXG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcclxuXHR9XHJcblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XHJcbn07XHJcblxyXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xyXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxyXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcclxuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XHJcblx0fVxyXG5cclxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxyXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXHJcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XHJcblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XHJcblx0XHRcdHVuZGVmaW5lZDtcclxuXHJcblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cclxuXHRcdHZhbCA6XHJcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cclxuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XHJcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xyXG5cdFx0XHRcdHZhbC52YWx1ZSA6XHJcblx0XHRcdFx0bnVsbDtcclxufTtcclxuXHJcblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xyXG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xyXG59O1xyXG5cclxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcclxuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXHJcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXHJcbiAqL1xyXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xyXG5cdHZhciBlbGVtLFxyXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxyXG5cdFx0aiA9IDAsXHJcblx0XHRpID0gMDtcclxuXHJcblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxyXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XHJcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XHJcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcclxuXHJcblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XHJcblx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcclxuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XHJcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR3aGlsZSAoIGotLSApIHtcclxuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcclxuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcclxuXHRzb3J0SW5wdXQgPSBudWxsO1xyXG5cclxuXHRyZXR1cm4gcmVzdWx0cztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xyXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cclxuICovXHJcbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdHZhciBub2RlLFxyXG5cdFx0cmV0ID0gXCJcIixcclxuXHRcdGkgPSAwLFxyXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xyXG5cclxuXHRpZiAoICFub2RlVHlwZSApIHtcclxuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XHJcblx0XHR3aGlsZSAoIChub2RlID0gZWxlbVtpKytdKSApIHtcclxuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcclxuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XHJcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXHJcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxyXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cclxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XHJcblx0XHRcdFx0cmV0ICs9IGdldFRleHQoIGVsZW0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xyXG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xyXG5cdH1cclxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcclxuXHJcblx0cmV0dXJuIHJldDtcclxufTtcclxuXHJcbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xyXG5cclxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcclxuXHRjYWNoZUxlbmd0aDogNTAsXHJcblxyXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxyXG5cclxuXHRtYXRjaDogbWF0Y2hFeHByLFxyXG5cclxuXHRhdHRySGFuZGxlOiB7fSxcclxuXHJcblx0ZmluZDoge30sXHJcblxyXG5cdHJlbGF0aXZlOiB7XHJcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxyXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxyXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxyXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cclxuXHR9LFxyXG5cclxuXHRwcmVGaWx0ZXI6IHtcclxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XHJcblx0XHRcdG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcclxuXHJcblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXHJcblx0XHRcdG1hdGNoWzNdID0gKCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcclxuXHJcblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcclxuXHRcdFx0XHRtYXRjaFszXSA9IFwiIFwiICsgbWF0Y2hbM10gKyBcIiBcIjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xyXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cclxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcclxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXHJcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcclxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcclxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XHJcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxyXG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxyXG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxyXG5cdFx0XHQqL1xyXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdFx0XHRpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XHJcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcclxuXHRcdFx0XHRpZiAoICFtYXRjaFszXSApIHtcclxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxyXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcclxuXHRcdFx0XHRtYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAobWF0Y2hbNl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKSApO1xyXG5cdFx0XHRcdG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKTtcclxuXHJcblx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xyXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFszXSApIHtcclxuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBtYXRjaDtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xyXG5cdFx0XHR2YXIgZXhjZXNzLFxyXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdO1xyXG5cclxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbXCJDSElMRFwiXS50ZXN0KCBtYXRjaFswXSApICkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xyXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xyXG5cdFx0XHRcdG1hdGNoWzJdID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIjtcclxuXHJcblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXHJcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxyXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXHJcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxyXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xyXG5cdFx0XHRcdChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkge1xyXG5cclxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxyXG5cdFx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xyXG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcclxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0ZmlsdGVyOiB7XHJcblxyXG5cdFx0XCJUQUdcIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XHJcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xyXG5cdFx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6XHJcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xyXG5cdFx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcclxuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xyXG5cclxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcclxuXHRcdFx0XHQocGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkpICYmXHJcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiICk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XHJcblxyXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XHJcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XHJcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxyXG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxyXG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XHJcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcclxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcclxuXHRcdFx0XHRcdGZhbHNlO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XHJcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXHJcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxyXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xyXG5cclxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXHJcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XHJcblx0XHRcdFx0fSA6XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxyXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXHJcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcclxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxyXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcclxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcclxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xyXG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxyXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XHJcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcclxuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcclxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcclxuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xyXG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcclxuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XHJcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcclxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxyXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XHJcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcclxuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcclxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcclxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XHJcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxyXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XHJcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xyXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcclxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xyXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xyXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXHJcblx0XHRcdHZhciBhcmdzLFxyXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcclxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XHJcblxyXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XHJcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXHJcblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcclxuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xyXG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXHJcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcclxuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcclxuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cclxuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcclxuXHRcdFx0XHRcdFx0dmFyIGlkeCxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXHJcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XHJcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkgOlxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGZuO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHBzZXVkb3M6IHtcclxuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xyXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcclxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcclxuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXHJcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxyXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcclxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cclxuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcclxuXHRcdFx0XHRcdHZhciBlbGVtLFxyXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXHJcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcclxuXHJcblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXHJcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XHJcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkgOlxyXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdFx0XHRpbnB1dFswXSA9IGVsZW07XHJcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XHJcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxyXG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBudWxsO1xyXG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xyXG5cdFx0XHRcdH07XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSksXHJcblxyXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXHJcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxyXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcclxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXHJcblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cclxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcclxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cclxuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xyXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXHJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QobGFuZyB8fCBcIlwiKSApIHtcclxuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XHJcblx0XHRcdH1cclxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xyXG5cdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xyXG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxyXG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSkgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH07XHJcblx0XHR9KSxcclxuXHJcblx0XHQvLyBNaXNjZWxsYW5lb3VzXHJcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XHJcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSAmJiAhIShlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXHJcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXHJcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXHJcblxyXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcclxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcclxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XHJcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcclxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBDb250ZW50c1xyXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cclxuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxyXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxyXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXHJcblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xyXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbXCJlbXB0eVwiXSggZWxlbSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXHJcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHR2YXIgYXR0cjtcclxuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXHJcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XHJcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcclxuXHRcdFx0XHQoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxyXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gWyAwIF07XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XHJcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcclxuXHRcdH0pLFxyXG5cclxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xyXG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XHJcblx0XHRcdHZhciBpID0gMDtcclxuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XHJcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XHJcblx0XHRcdHZhciBpID0gMTtcclxuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XHJcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XHJcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cclxuXHRcdFx0XHRhcmd1bWVudCArIGxlbmd0aCA6XHJcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xyXG5cdFx0XHRcdFx0bGVuZ3RoIDpcclxuXHRcdFx0XHRcdGFyZ3VtZW50O1xyXG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcclxuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcclxuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xyXG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XHJcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xyXG5cdFx0fSlcclxuXHR9XHJcbn07XHJcblxyXG5FeHByLnBzZXVkb3NbXCJudGhcIl0gPSBFeHByLnBzZXVkb3NbXCJlcVwiXTtcclxuXHJcbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXHJcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xyXG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcclxufVxyXG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xyXG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XHJcbn1cclxuXHJcbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xyXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cclxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XHJcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XHJcblxyXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xyXG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxyXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcclxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcclxuXHJcblx0aWYgKCBjYWNoZWQgKSB7XHJcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xyXG5cdH1cclxuXHJcblx0c29GYXIgPSBzZWxlY3RvcjtcclxuXHRncm91cHMgPSBbXTtcclxuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XHJcblxyXG5cdHdoaWxlICggc29GYXIgKSB7XHJcblxyXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxyXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XHJcblx0XHRcdGlmICggbWF0Y2ggKSB7XHJcblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcclxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjtcclxuXHRcdFx0fVxyXG5cdFx0XHRncm91cHMucHVzaCggKHRva2VucyA9IFtdKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcclxuXHJcblx0XHQvLyBDb21iaW5hdG9yc1xyXG5cdFx0aWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7XHJcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xyXG5cdFx0XHR0b2tlbnMucHVzaCh7XHJcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXHJcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXHJcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcclxuXHRcdFx0fSk7XHJcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlsdGVyc1xyXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcclxuXHRcdFx0aWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxyXG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xyXG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xyXG5cdFx0XHRcdHRva2Vucy5wdXNoKHtcclxuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxyXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcclxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggIW1hdGNoZWQgKSB7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXHJcblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXHJcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXHJcblx0cmV0dXJuIHBhcnNlT25seSA/XHJcblx0XHRzb0Zhci5sZW5ndGggOlxyXG5cdFx0c29GYXIgP1xyXG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxyXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXHJcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xyXG5cdHZhciBpID0gMCxcclxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXHJcblx0XHRzZWxlY3RvciA9IFwiXCI7XHJcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7XHJcblx0fVxyXG5cdHJldHVybiBzZWxlY3RvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcclxuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXHJcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxyXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXHJcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxyXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XHJcblxyXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cclxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxyXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcclxuXHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcclxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcclxuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fSA6XHJcblxyXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXHJcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xyXG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxyXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xyXG5cclxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXHJcblx0XHRcdGlmICggeG1sICkge1xyXG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xyXG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XHJcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcclxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXHJcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xyXG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0pICYmXHJcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXHJcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xyXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fTtcclxufVxyXG5cclxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xyXG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cclxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xyXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSA6XHJcblx0XHRtYXRjaGVyc1swXTtcclxufVxyXG5cclxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xyXG5cdHZhciBpID0gMCxcclxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcclxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7XHJcblx0fVxyXG5cdHJldHVybiByZXN1bHRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xyXG5cdHZhciBlbGVtLFxyXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXHJcblx0XHRpID0gMCxcclxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXHJcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcclxuXHJcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcclxuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XHJcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcclxuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XHJcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XHJcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xyXG5cdH1cclxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcclxuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcclxuXHR9XHJcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xyXG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXHJcblx0XHRcdHByZU1hcCA9IFtdLFxyXG5cdFx0XHRwb3N0TWFwID0gW10sXHJcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXHJcblxyXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxyXG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXHJcblxyXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cclxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XHJcblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxyXG5cdFx0XHRcdGVsZW1zLFxyXG5cclxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xyXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXHJcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xyXG5cclxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxyXG5cdFx0XHRcdFx0W10gOlxyXG5cclxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxyXG5cdFx0XHRcdFx0cmVzdWx0cyA6XHJcblx0XHRcdFx0bWF0Y2hlckluO1xyXG5cclxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXHJcblx0XHRpZiAoIG1hdGNoZXIgKSB7XHJcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xyXG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcclxuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xyXG5cclxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxyXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XHJcblx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcclxuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHNlZWQgKSB7XHJcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XHJcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xyXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXHJcblx0XHRcdFx0XHR0ZW1wID0gW107XHJcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XHJcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXHJcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcclxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XHJcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcclxuXHRcdFx0XHRcdFx0KHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkge1xyXG5cclxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxyXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xyXG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcclxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xyXG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xyXG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXHJcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxyXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcclxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVtcIiBcIl0sXHJcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXHJcblxyXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcclxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xyXG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxyXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xyXG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxyXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxyXG5cdFx0XHRcdChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/XHJcblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcclxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcclxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXHJcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XHJcblx0XHRcdHJldHVybiByZXQ7XHJcblx0XHR9IF07XHJcblxyXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0aWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkge1xyXG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTtcclxuXHJcblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXHJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xyXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xyXG5cdFx0XHRcdGogPSArK2k7XHJcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XHJcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcclxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxyXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcclxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcclxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSlcclxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxyXG5cdFx0XHRcdFx0bWF0Y2hlcixcclxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxyXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxyXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XHJcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcclxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxyXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xyXG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcclxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxyXG5cdFx0XHRcdGkgPSBcIjBcIixcclxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxyXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcclxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcclxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XHJcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcclxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxyXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcclxuXHJcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xyXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcclxuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXHJcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxyXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcclxuXHRcdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xyXG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xyXG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2orK10pICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xyXG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcclxuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xyXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xyXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xyXG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XHJcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XHJcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXHJcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXHJcblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xyXG5cclxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXHJcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcclxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXHJcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXHJcblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcclxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXHJcblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXHJcblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xyXG5cdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcclxuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XHJcblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXHJcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XHJcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xyXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXHJcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xyXG5cclxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcclxuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcclxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xyXG5cclxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcclxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XHJcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XHJcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XHJcblx0XHR9O1xyXG5cclxuXHRyZXR1cm4gYnlTZXQgP1xyXG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XHJcblx0XHRzdXBlck1hdGNoZXI7XHJcbn1cclxuXHJcbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XHJcblx0dmFyIGksXHJcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxyXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXHJcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XHJcblxyXG5cdGlmICggIWNhY2hlZCApIHtcclxuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxyXG5cdFx0aWYgKCAhbWF0Y2ggKSB7XHJcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XHJcblx0XHR9XHJcblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xyXG5cdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApO1xyXG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xyXG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxyXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XHJcblxyXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXHJcblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3RvcjtcclxuXHR9XHJcblx0cmV0dXJuIGNhY2hlZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXHJcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcclxuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcclxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcclxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxyXG4gKi9cclxuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcclxuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcclxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXHJcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTtcclxuXHJcblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XHJcblxyXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXHJcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxyXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xyXG5cclxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXHJcblx0XHR0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7XHJcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gXCJJRFwiICYmXHJcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xyXG5cclxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kW1wiSURcIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdO1xyXG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xyXG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cclxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxyXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcclxuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXHJcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcclxuXHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHR0b2tlbiA9IHRva2Vuc1tpXTtcclxuXHJcblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3JcclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHtcclxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcclxuXHRcdFx0XHRpZiAoIChzZWVkID0gZmluZChcclxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcclxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcclxuXHRcdFx0XHQpKSApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcclxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcclxuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XHJcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcclxuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxyXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcclxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXHJcblx0XHRzZWVkLFxyXG5cdFx0Y29udGV4dCxcclxuXHRcdCFkb2N1bWVudElzSFRNTCxcclxuXHRcdHJlc3VsdHMsXHJcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XHJcblx0KTtcclxuXHRyZXR1cm4gcmVzdWx0cztcclxufTtcclxuXHJcbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXHJcblxyXG4vLyBTb3J0IHN0YWJpbGl0eVxyXG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KFwiXCIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oXCJcIikgPT09IGV4cGFuZG87XHJcblxyXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXHJcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cclxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XHJcblxyXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcclxuc2V0RG9jdW1lbnQoKTtcclxuXHJcbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXHJcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxyXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XHJcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXHJcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XHJcbn0pO1xyXG5cclxuLy8gU3VwcG9ydDogSUU8OFxyXG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxyXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxyXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xyXG5cdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xyXG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcclxufSkgKSB7XHJcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xyXG5cdFx0aWYgKCAhaXNYTUwgKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIFN1cHBvcnQ6IElFPDlcclxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxyXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XHJcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xyXG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcclxuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xyXG59KSApIHtcclxuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xyXG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcclxuXHRcdH1cclxuXHR9KTtcclxufVxyXG5cclxuLy8gU3VwcG9ydDogSUU8OVxyXG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXHJcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XHJcblx0cmV0dXJuIGVsLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpID09IG51bGw7XHJcbn0pICkge1xyXG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcclxuXHRcdHZhciB2YWw7XHJcblx0XHRpZiAoICFpc1hNTCApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XHJcblx0XHRcdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgP1xyXG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcclxuXHRcdFx0XHRudWxsO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG5yZXR1cm4gU2l6emxlO1xyXG5cclxufSkoIHdpbmRvdyApO1xyXG5cclxuXHJcblxyXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcclxualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xyXG5cclxuLy8gRGVwcmVjYXRlZFxyXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XHJcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xyXG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xyXG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XHJcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcclxualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcclxuXHJcblxyXG5cclxuXHJcbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcclxuXHR2YXIgbWF0Y2hlZCA9IFtdLFxyXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xyXG5cclxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcclxuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIG1hdGNoZWQ7XHJcbn07XHJcblxyXG5cclxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XHJcblx0dmFyIG1hdGNoZWQgPSBbXTtcclxuXHJcblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcclxuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xyXG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBtYXRjaGVkO1xyXG59O1xyXG5cclxuXHJcbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcclxuXHJcbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG59O1xyXG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcclxuXHJcblxyXG5cclxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcclxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XHJcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xyXG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHQvLyBTaW5nbGUgZWxlbWVudFxyXG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcclxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcclxuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XHJcbn1cclxuXHJcbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcclxuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XHJcblxyXG5cdGlmICggbm90ICkge1xyXG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcclxuXHR9XHJcblxyXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcclxuXHR9ICkgKTtcclxufTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoIHtcclxuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHR2YXIgaSwgcmV0LFxyXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcclxuXHRcdFx0c2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcclxuXHJcblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XHJcblx0fSxcclxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xyXG5cdH0sXHJcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xyXG5cdH0sXHJcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHJldHVybiAhIXdpbm5vdyhcclxuXHRcdFx0dGhpcyxcclxuXHJcblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcclxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxyXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cclxuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxyXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KS5sZW5ndGg7XHJcblx0fVxyXG59ICk7XHJcblxyXG5cclxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcclxuXHJcblxyXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcclxudmFyIHJvb3RqUXVlcnksXHJcblxyXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXHJcblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxyXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxyXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcclxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXHJcblxyXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcclxuXHRcdHZhciBtYXRjaCwgZWxlbTtcclxuXHJcblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcclxuXHRcdGlmICggIXNlbGVjdG9yICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcclxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcclxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XHJcblxyXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xyXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcclxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxyXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xyXG5cclxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xyXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxyXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xyXG5cclxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcclxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XHJcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XHJcblxyXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XHJcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxyXG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxyXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxyXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxyXG5cdFx0XHRcdFx0XHR0cnVlXHJcblx0XHRcdFx0XHQpICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxyXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xyXG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxyXG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxyXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcclxuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xyXG5cclxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXHJcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxyXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XHJcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xyXG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcclxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxyXG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcclxuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XHJcblxyXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcclxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XHJcblx0fTtcclxuXHJcbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cclxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XHJcblxyXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXHJcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XHJcblxyXG5cclxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxyXG5cclxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxyXG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XHJcblx0XHRjaGlsZHJlbjogdHJ1ZSxcclxuXHRcdGNvbnRlbnRzOiB0cnVlLFxyXG5cdFx0bmV4dDogdHJ1ZSxcclxuXHRcdHByZXY6IHRydWVcclxuXHR9O1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCgge1xyXG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcclxuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcclxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBpID0gMDtcclxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cdH0sXHJcblxyXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XHJcblx0XHR2YXIgY3VyLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxyXG5cdFx0XHRtYXRjaGVkID0gW10sXHJcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XHJcblxyXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxyXG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcclxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXHJcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XHJcblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXHJcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxyXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xyXG5cclxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xyXG5cdH0sXHJcblxyXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxyXG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHJcblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxyXG5cdFx0aWYgKCAhZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXHJcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XHJcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxyXG5cclxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXHJcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxyXG5cdFx0KTtcclxuXHR9LFxyXG5cclxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcclxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXHJcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cdH0sXHJcblxyXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XHJcblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcclxuXHRcdCk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcclxuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XHJcblx0cmV0dXJuIGN1cjtcclxufVxyXG5cclxualF1ZXJ5LmVhY2goIHtcclxuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcclxuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XHJcblx0fSxcclxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XHJcblx0fSxcclxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcclxuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xyXG5cdH0sXHJcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XHJcblx0fSxcclxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XHJcblx0fSxcclxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xyXG5cdH0sXHJcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XHJcblx0fSxcclxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcclxuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcclxuXHR9LFxyXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xyXG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcclxuXHR9LFxyXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XHJcblx0fSxcclxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xyXG5cdH0sXHJcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5jb250ZW50RG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcclxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxyXG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cclxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xyXG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xyXG5cdH1cclxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xyXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcclxuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XHJcblxyXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XHJcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xyXG5cclxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcclxuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xyXG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXHJcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcclxuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xyXG5cdH07XHJcbn0gKTtcclxudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xyXG5cclxuXHJcblxyXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xyXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xyXG5cdHZhciBvYmplY3QgPSB7fTtcclxuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcclxuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcclxuXHR9ICk7XHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuLypcclxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XHJcbiAqXHJcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XHJcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxyXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXHJcbiAqXHJcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XHJcbiAqXHJcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcclxuICpcclxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXHJcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcclxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXHJcbiAqXHJcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXHJcbiAqXHJcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxyXG4gKlxyXG4gKi9cclxualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xyXG5cclxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXHJcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxyXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XHJcblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxyXG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcclxuXHJcblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcclxuXHRcdGZpcmluZyxcclxuXHJcblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xyXG5cdFx0bWVtb3J5LFxyXG5cclxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXHJcblx0XHRmaXJlZCxcclxuXHJcblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXHJcblx0XHRsb2NrZWQsXHJcblxyXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3RcclxuXHRcdGxpc3QgPSBbXSxcclxuXHJcblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xyXG5cdFx0cXVldWUgPSBbXSxcclxuXHJcblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcclxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXHJcblxyXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3NcclxuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xyXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xyXG5cclxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXHJcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcclxuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xyXG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcclxuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xyXG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXHJcblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxyXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcclxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XHJcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZpcmluZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2RcclxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XHJcblxyXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcclxuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcclxuXHRcdFx0XHRcdGxpc3QgPSBbXTtcclxuXHJcblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3RcclxuXHRcdHNlbGYgPSB7XHJcblxyXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XHJcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXHJcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xyXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcclxuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XHJcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxyXG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcclxuXHRcdFx0XHRcdFx0ZmlyZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3RcclxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xyXG5cdFx0XHRcdFx0dmFyIGluZGV4O1xyXG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XHJcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXHJcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XHJcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXHJcblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxyXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcclxuXHRcdFx0XHRyZXR1cm4gZm4gP1xyXG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XHJcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XHJcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XHJcblx0XHRcdFx0XHRsaXN0ID0gW107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxyXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcclxuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXHJcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XHJcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXHJcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXHJcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcclxuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcclxuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcclxuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXHJcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcclxuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XHJcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcclxuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XHJcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XHJcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XHJcblx0XHRcdFx0XHRcdGZpcmUoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xyXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxyXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdHJldHVybiBzZWxmO1xyXG59O1xyXG5cclxuXHJcbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xyXG5cdHJldHVybiB2O1xyXG59XHJcbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xyXG5cdHRocm93IGV4O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xyXG5cdHZhciBtZXRob2Q7XHJcblxyXG5cdHRyeSB7XHJcblxyXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxyXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xyXG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XHJcblxyXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXHJcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xyXG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xyXG5cclxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XHJcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcclxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcclxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xyXG5cdFx0fVxyXG5cclxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcclxuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXHJcblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cclxuXHR9IGNhdGNoICggdmFsdWUgKSB7XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxyXG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxyXG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xyXG5cdH1cclxufVxyXG5cclxualF1ZXJ5LmV4dGVuZCgge1xyXG5cclxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XHJcblx0XHR2YXIgdHVwbGVzID0gW1xyXG5cclxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxyXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cclxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxyXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXHJcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxyXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxyXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxyXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXHJcblx0XHRcdF0sXHJcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXHJcblx0XHRcdHByb21pc2UgPSB7XHJcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxyXG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcclxuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxyXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxyXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxyXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXHJcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xyXG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcclxuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XHJcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXHJcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XHJcblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxyXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XHJcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxyXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcclxuXHJcblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcclxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcclxuXHRcdFx0XHRcdFx0XHRcdDAsXHJcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcclxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XHJcblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcclxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxyXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxyXG5cdFx0XHRcdFx0XHRcdFx0MCxcclxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XHJcblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXHJcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXHJcblx0XHRcdFx0XHRcdFx0XHQwLFxyXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxyXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3RcclxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcclxuXHJcblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXHJcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XHJcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcclxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XHJcblxyXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcclxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcclxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcclxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XHJcblxyXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcclxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcclxuXHRcdFx0XHRsaXN0LmFkZChcclxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcclxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcclxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcclxuXHRcdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcclxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxyXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcclxuXHJcblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXHJcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxyXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcclxuXHJcblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xyXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxyXG5cclxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcclxuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcclxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcclxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxyXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XHJcblxyXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cclxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cclxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XHJcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxyXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcclxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcclxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcclxuXHRcdH0gKTtcclxuXHJcblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2VcclxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcclxuXHJcblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XHJcblx0XHRpZiAoIGZ1bmMgKSB7XHJcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWxsIGRvbmUhXHJcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XHJcblx0fSxcclxuXHJcblx0Ly8gRGVmZXJyZWQgaGVscGVyXHJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xyXG5cdFx0dmFyXHJcblxyXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcclxuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcclxuXHJcblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xyXG5cdFx0XHRpID0gcmVtYWluaW5nLFxyXG5cclxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxyXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxyXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXHJcblxyXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkXHJcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxyXG5cclxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxyXG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcclxuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcclxuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcclxuXHRcdFx0XHRcdFx0bWFzdGVyLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxyXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcclxuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxyXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcclxuXHJcblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcclxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcclxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcclxuXHJcblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50c1xyXG5cdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5cclxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXHJcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxyXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcclxuXHJcbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcclxuXHJcblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxyXG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXHJcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcclxuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcclxuXHR9XHJcbn07XHJcblxyXG5cclxuXHJcblxyXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XHJcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xyXG5cdFx0dGhyb3cgZXJyb3I7XHJcblx0fSApO1xyXG59O1xyXG5cclxuXHJcblxyXG5cclxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XHJcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcclxuXHJcbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcclxuXHJcblx0cmVhZHlMaXN0XHJcblx0XHQudGhlbiggZm4gKVxyXG5cclxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXHJcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcclxuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cclxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xyXG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxualF1ZXJ5LmV4dGVuZCgge1xyXG5cclxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxyXG5cdGlzUmVhZHk6IGZhbHNlLFxyXG5cclxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXHJcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcclxuXHRyZWFkeVdhaXQ6IDEsXHJcblxyXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcclxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XHJcblxyXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxyXG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcclxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcclxuXHJcblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxyXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXHJcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xyXG5cclxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcclxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xyXG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcclxuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xyXG5cdGpRdWVyeS5yZWFkeSgpO1xyXG59XHJcblxyXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxyXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cclxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxyXG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cclxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcclxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcclxuXHJcblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XHJcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xyXG5cclxufSBlbHNlIHtcclxuXHJcblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xyXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcclxuXHJcblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcclxuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cclxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXHJcbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XHJcblx0dmFyIGkgPSAwLFxyXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxyXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xyXG5cclxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXHJcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcclxuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xyXG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcclxuXHRcdH1cclxuXHJcblx0Ly8gU2V0cyBvbmUgdmFsdWVcclxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xyXG5cdFx0XHRyYXcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggYnVsayApIHtcclxuXHJcblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxyXG5cdFx0XHRpZiAoIHJhdyApIHtcclxuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcclxuXHRcdFx0XHRmbiA9IG51bGw7XHJcblxyXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YnVsayA9IGZuO1xyXG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBmbiApIHtcclxuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRcdFx0Zm4oXHJcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XHJcblx0XHRcdFx0XHR2YWx1ZSA6XHJcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICggY2hhaW5hYmxlICkge1xyXG5cdFx0cmV0dXJuIGVsZW1zO1xyXG5cdH1cclxuXHJcblx0Ly8gR2V0c1xyXG5cdGlmICggYnVsayApIHtcclxuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xyXG59O1xyXG5cclxuXHJcbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xyXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcclxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XHJcblxyXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcclxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggYWxsLCBsZXR0ZXIgKSB7XHJcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xyXG59XHJcblxyXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXHJcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcclxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxyXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcclxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcclxufVxyXG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcclxuXHJcblx0Ly8gQWNjZXB0cyBvbmx5OlxyXG5cdC8vICAtIE5vZGVcclxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXHJcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcclxuXHQvLyAgLSBPYmplY3RcclxuXHQvLyAgICAtIEFueVxyXG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcclxufTtcclxuXHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIERhdGEoKSB7XHJcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xyXG59XHJcblxyXG5EYXRhLnVpZCA9IDE7XHJcblxyXG5EYXRhLnByb3RvdHlwZSA9IHtcclxuXHJcblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcclxuXHJcblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcclxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcclxuXHJcblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcclxuXHRcdGlmICggIXZhbHVlICkge1xyXG5cdFx0XHR2YWx1ZSA9IHt9O1xyXG5cclxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXHJcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXHJcblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxyXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxyXG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XHJcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcclxuXHJcblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XHJcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcclxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXHJcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG5cdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9LFxyXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcclxuXHRcdHZhciBwcm9wLFxyXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XHJcblxyXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xyXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxyXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcclxuXHJcblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XHJcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcclxuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNhY2hlO1xyXG5cdH0sXHJcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcclxuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxyXG5cclxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxyXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XHJcblx0fSxcclxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcclxuXHJcblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XHJcblx0XHQvL1xyXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxyXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXHJcblx0XHQvL1xyXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXHJcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XHJcblx0XHQvL1xyXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxyXG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxyXG5cdFx0Ly9cclxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcclxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxyXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XHJcblx0XHQvL1xyXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xyXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcclxuXHRcdC8vXHJcblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcclxuXHJcblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcclxuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxyXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcclxuXHR9LFxyXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XHJcblx0XHR2YXIgaSxcclxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XHJcblxyXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcclxuXHJcblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXHJcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXHJcblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXHJcblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcclxuXHJcblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxyXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXHJcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cclxuXHRcdFx0XHRcdFsga2V5IF0gOlxyXG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcclxuXHJcblx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxyXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcclxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcclxuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxyXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxyXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xyXG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSxcclxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XHJcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XHJcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XHJcblx0fVxyXG59O1xyXG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xyXG5cclxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcclxuXHJcblxyXG5cclxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcclxuLy9cclxuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcclxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxyXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXHJcbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxyXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxyXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXHJcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcclxuXHJcbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXHJcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xyXG5cclxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcclxuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXHJcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XHJcblx0XHRyZXR1cm4gK2RhdGE7XHJcblx0fVxyXG5cclxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XHJcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGRhdGE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XHJcblx0dmFyIG5hbWU7XHJcblxyXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcclxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcclxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xyXG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xyXG5cclxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxyXG5cclxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXHJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZGF0YTtcclxufVxyXG5cclxualF1ZXJ5LmV4dGVuZCgge1xyXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XHJcblx0fSxcclxuXHJcblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XHJcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XHJcblx0fSxcclxuXHJcblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XHJcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxyXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxyXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcclxuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcclxuXHR9LFxyXG5cclxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XHJcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcclxuXHR9XHJcbn0gKTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoIHtcclxuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcclxuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxyXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxyXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xyXG5cclxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xyXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XHJcblxyXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XHJcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XHJcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxyXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcclxuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0dmFyIGRhdGE7XHJcblxyXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxyXG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxyXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxyXG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXHJcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXHJcblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xyXG5cclxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXHJcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcclxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcclxuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cclxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXHJcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcclxuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXHJcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XHJcblxyXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcclxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XHJcblx0fSxcclxuXHJcblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcclxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xyXG5cdFx0fSApO1xyXG5cdH1cclxufSApO1xyXG5cclxuXHJcbmpRdWVyeS5leHRlbmQoIHtcclxuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XHJcblx0XHR2YXIgcXVldWU7XHJcblxyXG5cdFx0aWYgKCBlbGVtICkge1xyXG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xyXG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xyXG5cclxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxyXG5cdFx0XHRpZiAoIGRhdGEgKSB7XHJcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xyXG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcclxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcclxuXHJcblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcclxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXHJcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcclxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcclxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxyXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XHJcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcclxuXHRcdFx0c3RhcnRMZW5ndGgtLTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGZuICkge1xyXG5cclxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xyXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXHJcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xyXG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cclxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XHJcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XHJcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxyXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcclxuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XHJcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xyXG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcclxuXHRcdFx0fSApXHJcblx0XHR9ICk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xyXG5cdFx0dmFyIHNldHRlciA9IDI7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0ZGF0YSA9IHR5cGU7XHJcblx0XHRcdHR5cGUgPSBcImZ4XCI7XHJcblx0XHRcdHNldHRlci0tO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcclxuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdHRoaXMgOlxyXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xyXG5cclxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxyXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xyXG5cclxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcclxuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0fSxcclxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcclxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xyXG5cdFx0fSApO1xyXG5cdH0sXHJcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XHJcblx0fSxcclxuXHJcblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxyXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxyXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XHJcblx0XHR2YXIgdG1wLFxyXG5cdFx0XHRjb3VudCA9IDEsXHJcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXHJcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcclxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxyXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XHJcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRvYmogPSB0eXBlO1xyXG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xyXG5cclxuXHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xyXG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XHJcblx0XHRcdFx0Y291bnQrKztcclxuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJlc29sdmUoKTtcclxuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcclxuXHR9XHJcbn0gKTtcclxudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xyXG5cclxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xyXG5cclxuXHJcbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcclxuXHJcbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG5cclxuXHJcblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XHJcblx0XHR9LFxyXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XHJcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXHJcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XHJcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxyXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxyXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xyXG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxyXG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcclxuXHRcdH07XHJcblx0fVxyXG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xyXG5cclxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xyXG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XHJcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcclxuXHJcblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxyXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcclxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXHJcblxyXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXHJcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XHJcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xyXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXHJcblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxyXG5cclxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XHJcblx0fTtcclxuXHJcbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkge1xyXG5cdHZhciByZXQsIG5hbWUsXHJcblx0XHRvbGQgPSB7fTtcclxuXHJcblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXHJcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xyXG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XHJcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XHJcblx0fVxyXG5cclxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xyXG5cclxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcclxuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XHJcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiByZXQ7XHJcbn07XHJcblxyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xyXG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXHJcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXHJcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XHJcblx0XHRcdGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcclxuXHRcdFx0fSA6XHJcblx0XHRcdGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XHJcblx0XHRcdH0sXHJcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXHJcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXHJcblxyXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcclxuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXHJcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXHJcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XHJcblxyXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XHJcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXHJcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XHJcblxyXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xyXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xyXG5cclxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XHJcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcclxuXHJcblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcclxuXHJcblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXHJcblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cclxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xyXG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcclxuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xyXG5cclxuXHRcdH1cclxuXHJcblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XHJcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XHJcblxyXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxyXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XHJcblx0fVxyXG5cclxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XHJcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcclxuXHJcblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcclxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cclxuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcclxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcclxuXHRcdGlmICggdHdlZW4gKSB7XHJcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xyXG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XHJcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gYWRqdXN0ZWQ7XHJcbn1cclxuXHJcblxyXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xyXG5cdHZhciB0ZW1wLFxyXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxyXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxyXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xyXG5cclxuXHRpZiAoIGRpc3BsYXkgKSB7XHJcblx0XHRyZXR1cm4gZGlzcGxheTtcclxuXHR9XHJcblxyXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcclxuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcclxuXHJcblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XHJcblxyXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XHJcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xyXG5cdH1cclxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XHJcblxyXG5cdHJldHVybiBkaXNwbGF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XHJcblx0dmFyIGRpc3BsYXksIGVsZW0sXHJcblx0XHR2YWx1ZXMgPSBbXSxcclxuXHRcdGluZGV4ID0gMCxcclxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcclxuXHJcblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXHJcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcclxuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcclxuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XHJcblx0XHRpZiAoIHNob3cgKSB7XHJcblxyXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXHJcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXHJcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XHJcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XHJcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xyXG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XHJcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcclxuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcclxuXHJcblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xyXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xyXG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XHJcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xyXG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGVsZW1lbnRzO1xyXG59XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblx0c2hvdzogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcclxuXHR9LFxyXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XHJcblx0fSxcclxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcclxuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblx0fVxyXG59ICk7XHJcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcclxuXHJcbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XHJcblxyXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcclxuXHJcblxyXG5cclxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcclxudmFyIHdyYXBNYXAgPSB7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XHJcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXHJcblxyXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXHJcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxyXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cclxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXHJcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcclxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXHJcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxyXG5cclxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cclxufTtcclxuXHJcbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XHJcbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcclxuXHJcbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XHJcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XHJcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxyXG5cdHZhciByZXQ7XHJcblxyXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XHJcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcclxuXHJcblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcclxuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XHJcblxyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXQgPSBbXTtcclxuXHR9XHJcblxyXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiByZXQ7XHJcbn1cclxuXHJcblxyXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcclxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xyXG5cdHZhciBpID0gMCxcclxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XHJcblxyXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdGRhdGFQcml2LnNldChcclxuXHRcdFx0ZWxlbXNbIGkgXSxcclxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXHJcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xyXG5cclxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcclxuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxyXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHRcdG5vZGVzID0gW10sXHJcblx0XHRpID0gMCxcclxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XHJcblxyXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xyXG5cclxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xyXG5cclxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XHJcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxyXG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcclxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XHJcblxyXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcclxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcclxuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcclxuXHJcblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcclxuXHJcblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxyXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xyXG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xyXG5cclxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcclxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xyXG5cdFx0XHRcdHdoaWxlICggai0tICkge1xyXG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxyXG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcclxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xyXG5cclxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XHJcblxyXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5MilcclxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XHJcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xyXG5cclxuXHRpID0gMDtcclxuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xyXG5cclxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXHJcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcclxuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xyXG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xyXG5cclxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxyXG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XHJcblxyXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxyXG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcclxuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xyXG5cdFx0aWYgKCBzY3JpcHRzICkge1xyXG5cdFx0XHRqID0gMDtcclxuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XHJcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xyXG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZnJhZ21lbnQ7XHJcbn1cclxuXHJcblxyXG4oIGZ1bmN0aW9uKCkge1xyXG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcclxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcclxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxyXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcclxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcclxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcclxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xyXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XHJcblxyXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcclxuXHJcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XHJcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXHJcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcclxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxyXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcclxuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcclxufSApKCk7XHJcblxyXG5cclxudmFyXHJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxyXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxyXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcclxuXHJcbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXHJcbi8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzLCBleGNlcHQgd2hlbiB0aGV5IGFyZSBuby1vcC5cclxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXHJcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxyXG4vLyAoZm9jdXMgYW5kIGJsdXIgYXJlIGFsd2F5cyBzeW5jaHJvbm91cyBpbiBvdGhlciBzdXBwb3J0ZWQgYnJvd3NlcnMsXHJcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cclxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcclxuXHRyZXR1cm4gKCBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICkgPT09ICggdHlwZSA9PT0gXCJmb2N1c1wiICk7XHJcbn1cclxuXHJcbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XHJcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcclxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXHJcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xyXG5cdHRyeSB7XHJcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHR9IGNhdGNoICggZXJyICkgeyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XHJcblx0dmFyIG9yaWdGbiwgdHlwZTtcclxuXHJcblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXHJcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XHJcblxyXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcclxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xyXG5cclxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxyXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3RvcjtcclxuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xyXG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGVsZW07XHJcblx0fVxyXG5cclxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xyXG5cclxuXHRcdC8vICggdHlwZXMsIGZuIClcclxuXHRcdGZuID0gc2VsZWN0b3I7XHJcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XHJcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcclxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xyXG5cclxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcclxuXHRcdFx0Zm4gPSBkYXRhO1xyXG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcclxuXHRcdFx0Zm4gPSBkYXRhO1xyXG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XHJcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcclxuXHRcdGZuID0gcmV0dXJuRmFsc2U7XHJcblx0fSBlbHNlIGlmICggIWZuICkge1xyXG5cdFx0cmV0dXJuIGVsZW07XHJcblx0fVxyXG5cclxuXHRpZiAoIG9uZSA9PT0gMSApIHtcclxuXHRcdG9yaWdGbiA9IGZuO1xyXG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblxyXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cclxuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xyXG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cclxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xyXG5cdH1cclxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcclxuXHR9ICk7XHJcbn1cclxuXHJcbi8qXHJcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cclxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cclxuICovXHJcbmpRdWVyeS5ldmVudCA9IHtcclxuXHJcblx0Z2xvYmFsOiB7fSxcclxuXHJcblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xyXG5cclxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcclxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXHJcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcclxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcclxuXHJcblx0XHQvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKVxyXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xyXG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XHJcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xyXG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcclxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxyXG5cdFx0aWYgKCBzZWxlY3RvciApIHtcclxuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXHJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XHJcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxyXG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcclxuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XHJcblx0XHR9XHJcblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XHJcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XHJcblxyXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXHJcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxyXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2VcclxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcclxuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XHJcblx0XHR3aGlsZSAoIHQtLSApIHtcclxuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xyXG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcclxuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcclxuXHJcblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xyXG5cdFx0XHRpZiAoICF0eXBlICkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcclxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XHJcblxyXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcclxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxyXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcclxuXHJcblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXHJcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcclxuXHRcdFx0XHR0eXBlOiB0eXBlLFxyXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcclxuXHRcdFx0XHRkYXRhOiBkYXRhLFxyXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXHJcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxyXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3RvcixcclxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxyXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXHJcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XHJcblxyXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxyXG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcclxuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XHJcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XHJcblxyXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxyXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcclxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XHJcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XHJcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XHJcblxyXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XHJcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcclxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcclxuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cclxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0fSxcclxuXHJcblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XHJcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcclxuXHJcblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXHJcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxyXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXHJcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xyXG5cclxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxyXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xyXG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcclxuXHRcdHdoaWxlICggdC0tICkge1xyXG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XHJcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xyXG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xyXG5cclxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XHJcblx0XHRcdGlmICggIXR5cGUgKSB7XHJcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xyXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XHJcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XHJcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXHJcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXHJcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XHJcblx0XHRcdHdoaWxlICggai0tICkge1xyXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XHJcblxyXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcclxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXHJcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXHJcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XHJcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XHJcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcclxuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcclxuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XHJcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxyXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcclxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xyXG5cclxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxyXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XHJcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xyXG5cclxuXHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxyXG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcclxuXHJcblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcclxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxyXG5cdFx0XHRoYW5kbGVycyA9ICggZGF0YVByaXYuZ2V0KCB0aGlzLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLFxyXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcclxuXHJcblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxyXG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XHJcblxyXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcclxuXHJcblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXHJcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xyXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xyXG5cclxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXHJcblx0XHRpID0gMDtcclxuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xyXG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xyXG5cclxuXHRcdFx0aiA9IDA7XHJcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXHJcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcclxuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxyXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcclxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xyXG5cclxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcclxuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcclxuXHJcblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XHJcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xyXG5cclxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcclxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XHJcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcclxuXHR9LFxyXG5cclxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcclxuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxyXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcclxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXHJcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcclxuXHJcblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXHJcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxyXG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcclxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcclxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxyXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXHJcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcclxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxyXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcclxuXHJcblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xyXG5cclxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcclxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcclxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XHJcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcclxuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcclxuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xyXG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcclxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cclxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxyXG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcclxuXHRcdGN1ciA9IHRoaXM7XHJcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XHJcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XHJcblx0fSxcclxuXHJcblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxyXG5cclxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xyXG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gOlxyXG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcclxuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXHJcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcclxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cdH0sXHJcblxyXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XHJcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XHJcblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxyXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XHJcblx0fSxcclxuXHJcblx0c3BlY2lhbDoge1xyXG5cdFx0bG9hZDoge1xyXG5cclxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxyXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxyXG5cdFx0fSxcclxuXHRcdGNsaWNrOiB7XHJcblxyXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xyXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XHJcblxyXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxyXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXHJcblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xyXG5cclxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXHJcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcclxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCByZXR1cm5UcnVlICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XHJcblxyXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxyXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXHJcblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xyXG5cclxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXHJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcclxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XHJcblxyXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3NcclxuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXHJcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxyXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXHJcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcclxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0YmVmb3JldW5sb2FkOiB7XHJcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xyXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cclxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XHJcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxyXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cclxuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXHJcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cclxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBleHBlY3RTeW5jICkge1xyXG5cclxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxyXG5cdGlmICggIWV4cGVjdFN5bmMgKSB7XHJcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xyXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XHJcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcclxuXHRcdG5hbWVzcGFjZTogZmFsc2UsXHJcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblx0XHRcdHZhciBub3RBc3luYywgcmVzdWx0LFxyXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XHJcblxyXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcclxuXHJcblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcclxuXHRcdFx0XHQvLyBTYXZlZCBkYXRhIHNob3VsZCBiZSBmYWxzZSBpbiBzdWNoIGNhc2VzLCBidXQgbWlnaHQgYmUgYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdFxyXG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXHJcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxyXG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XHJcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXHJcblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xyXG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xyXG5cclxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XHJcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcclxuXHRcdFx0XHRcdC8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzXHJcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcclxuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xyXG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XHJcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcclxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQudmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXHJcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmcgdGhlXHJcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cclxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxyXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcclxuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcclxuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcclxuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xyXG5cclxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XHJcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XHJcblx0XHRcdFx0XHR2YWx1ZTogalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXHJcblxyXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcclxuXHRcdFx0XHRcdFx0Ly8gRXh0ZW5kIHdpdGggdGhlIHByb3RvdHlwZSB0byByZXNldCB0aGUgYWJvdmUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcclxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxyXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxyXG5cdFx0XHRcdFx0XHR0aGlzXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0fSApO1xyXG5cclxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XHJcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9ICk7XHJcbn1cclxuXHJcbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XHJcblxyXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xyXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xyXG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcclxuXHR9XHJcbn07XHJcblxyXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcclxuXHJcblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXHJcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XHJcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xyXG5cdH1cclxuXHJcblx0Ly8gRXZlbnQgb2JqZWN0XHJcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XHJcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XHJcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcclxuXHJcblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxyXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXHJcblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XHJcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcclxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cclxuXHRcdFx0cmV0dXJuVHJ1ZSA6XHJcblx0XHRcdHJldHVybkZhbHNlO1xyXG5cclxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xyXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxyXG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0MylcclxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XHJcblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XHJcblx0XHRcdHNyYy50YXJnZXQ7XHJcblxyXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XHJcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcclxuXHJcblx0Ly8gRXZlbnQgdHlwZVxyXG5cdH0gZWxzZSB7XHJcblx0XHR0aGlzLnR5cGUgPSBzcmM7XHJcblx0fVxyXG5cclxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxyXG5cdGlmICggcHJvcHMgKSB7XHJcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcclxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XHJcblxyXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcclxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcclxufTtcclxuXHJcbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xyXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXHJcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XHJcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcclxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxyXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcclxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXHJcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxyXG5cclxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcclxuXHJcblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XHJcblxyXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xyXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XHJcblxyXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XHJcblxyXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xyXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xyXG5cclxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xyXG5cclxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcclxuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdH1cclxufTtcclxuXHJcbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXHJcbmpRdWVyeS5lYWNoKCB7XHJcblx0YWx0S2V5OiB0cnVlLFxyXG5cdGJ1YmJsZXM6IHRydWUsXHJcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcclxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcclxuXHRjdHJsS2V5OiB0cnVlLFxyXG5cdGRldGFpbDogdHJ1ZSxcclxuXHRldmVudFBoYXNlOiB0cnVlLFxyXG5cdG1ldGFLZXk6IHRydWUsXHJcblx0cGFnZVg6IHRydWUsXHJcblx0cGFnZVk6IHRydWUsXHJcblx0c2hpZnRLZXk6IHRydWUsXHJcblx0dmlldzogdHJ1ZSxcclxuXHRcImNoYXJcIjogdHJ1ZSxcclxuXHRjb2RlOiB0cnVlLFxyXG5cdGNoYXJDb2RlOiB0cnVlLFxyXG5cdGtleTogdHJ1ZSxcclxuXHRrZXlDb2RlOiB0cnVlLFxyXG5cdGJ1dHRvbjogdHJ1ZSxcclxuXHRidXR0b25zOiB0cnVlLFxyXG5cdGNsaWVudFg6IHRydWUsXHJcblx0Y2xpZW50WTogdHJ1ZSxcclxuXHRvZmZzZXRYOiB0cnVlLFxyXG5cdG9mZnNldFk6IHRydWUsXHJcblx0cG9pbnRlcklkOiB0cnVlLFxyXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxyXG5cdHNjcmVlblg6IHRydWUsXHJcblx0c2NyZWVuWTogdHJ1ZSxcclxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxyXG5cdHRvRWxlbWVudDogdHJ1ZSxcclxuXHR0b3VjaGVzOiB0cnVlLFxyXG5cclxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xyXG5cdFx0dmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcclxuXHJcblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcclxuXHRcdGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAmJiBya2V5RXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xyXG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XHJcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XHJcblx0XHRcdGlmICggYnV0dG9uICYgMSApIHtcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xyXG5cdFx0XHRcdHJldHVybiAzO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBldmVudC53aGljaDtcclxuXHR9XHJcbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XHJcblxyXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xyXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XHJcblxyXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XHJcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XHJcblxyXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcclxuXHJcblx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH0sXHJcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXHJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XHJcblxyXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxyXG5cdH07XHJcbn0gKTtcclxuXHJcbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xyXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxyXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxyXG4vL1xyXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XHJcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxyXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcclxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cclxualF1ZXJ5LmVhY2goIHtcclxuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxyXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcclxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcclxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXHJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XHJcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcclxuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxyXG5cdFx0YmluZFR5cGU6IGZpeCxcclxuXHJcblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcclxuXHRcdFx0dmFyIHJldCxcclxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxyXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxyXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcclxuXHJcblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXHJcblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XHJcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcclxuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xyXG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiByZXQ7XHJcblx0XHR9XHJcblx0fTtcclxufSApO1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCgge1xyXG5cclxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XHJcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcclxuXHR9LFxyXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XHJcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcclxuXHR9LFxyXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XHJcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xyXG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XHJcblxyXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XHJcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcclxuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcclxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cclxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XHJcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXHJcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxyXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXHJcblx0XHRcdCk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XHJcblxyXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxyXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xyXG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XHJcblxyXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXHJcblx0XHRcdGZuID0gc2VsZWN0b3I7XHJcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xyXG5cdFx0fSApO1xyXG5cdH1cclxufSApO1xyXG5cclxuXHJcbnZhclxyXG5cclxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXHJcblxyXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMzIyOVxyXG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLFxyXG5cclxuXHQvKiBlc2xpbnQtZW5hYmxlICovXHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcclxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxyXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXHJcblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXHJcblxyXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxyXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcclxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XHJcblxyXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcclxuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xyXG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXHJcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcclxuXHJcblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBlbGVtO1xyXG59XHJcblxyXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXHJcbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XHJcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XHJcblx0cmV0dXJuIGVsZW07XHJcbn1cclxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcclxuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XHJcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZWxlbTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcclxuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcclxuXHJcblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cclxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xyXG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xyXG5cdFx0cGRhdGFDdXIgPSBkYXRhUHJpdi5zZXQoIGRlc3QsIHBkYXRhT2xkICk7XHJcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XHJcblxyXG5cdFx0aWYgKCBldmVudHMgKSB7XHJcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XHJcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XHJcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxyXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XHJcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XHJcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xyXG5cclxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xyXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xyXG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXHJcblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XHJcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcclxuXHJcblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcclxuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XHJcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XHJcblxyXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcclxuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xyXG5cclxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXHJcblx0XHRpID0gMCxcclxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcclxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXHJcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcclxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XHJcblxyXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxyXG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XHJcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXHJcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XHJcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcclxuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XHJcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRpZiAoIGwgKSB7XHJcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xyXG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xyXG5cclxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XHJcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXHJcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XHJcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcclxuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xyXG5cclxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxyXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcclxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cclxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcclxuXHJcblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcclxuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcclxuXHJcblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXHJcblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcclxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxyXG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xyXG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XHJcblxyXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcclxuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XHJcblxyXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cclxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcclxuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XHJcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcclxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxyXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxyXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGNvbGxlY3Rpb247XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xyXG5cdHZhciBub2RlLFxyXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxyXG5cdFx0aSA9IDA7XHJcblxyXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcclxuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xyXG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XHJcblx0XHRcdH1cclxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZWxlbTtcclxufVxyXG5cclxualF1ZXJ5LmV4dGVuZCgge1xyXG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xyXG5cdFx0cmV0dXJuIGh0bWwucmVwbGFjZSggcnhodG1sVGFnLCBcIjwkMT48LyQyPlwiICk7XHJcblx0fSxcclxuXHJcblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcclxuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxyXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXHJcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcclxuXHJcblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcclxuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcclxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XHJcblxyXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcclxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xyXG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xyXG5cclxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXHJcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XHJcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XHJcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcclxuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xyXG5cclxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnlcclxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcclxuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XHJcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxyXG5cdFx0cmV0dXJuIGNsb25lO1xyXG5cdH0sXHJcblxyXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xyXG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXHJcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcclxuXHRcdFx0aSA9IDA7XHJcblxyXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xyXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcclxuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xyXG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcclxuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcclxuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxyXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xyXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXHJcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59ICk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xyXG5cdH0sXHJcblxyXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcclxuXHR9LFxyXG5cclxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcclxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XHJcblx0fSxcclxuXHJcblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XHJcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xyXG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblx0fSxcclxuXHJcblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xyXG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcclxuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblx0fSxcclxuXHJcblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblx0fSxcclxuXHJcblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9LFxyXG5cclxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgZWxlbSxcclxuXHRcdFx0aSA9IDA7XHJcblxyXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XHJcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHJcblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3NcclxuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcclxuXHJcblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcclxuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XHJcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xyXG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XHJcblx0XHR9ICk7XHJcblx0fSxcclxuXHJcblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcclxuXHRcdFx0XHRpID0gMCxcclxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcclxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXHJcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xyXG5cclxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xyXG5cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXHJcblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcclxuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XHJcblxyXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBlbGVtICkge1xyXG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XHJcblx0XHRcdH1cclxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XHJcblx0fSxcclxuXHJcblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcclxuXHJcblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcclxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcclxuXHJcblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcclxuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcclxuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXHJcblx0XHR9LCBpZ25vcmVkICk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5qUXVlcnkuZWFjaCgge1xyXG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxyXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXHJcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxyXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXHJcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXHJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcclxuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHZhciBlbGVtcyxcclxuXHRcdFx0cmV0ID0gW10sXHJcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcclxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxyXG5cdFx0XHRpID0gMDtcclxuXHJcblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xyXG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xyXG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcclxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxyXG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcclxuXHR9O1xyXG59ICk7XHJcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcclxuXHJcbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHJcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXHJcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcclxuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxyXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XHJcblxyXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XHJcblx0XHRcdHZpZXcgPSB3aW5kb3c7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xyXG5cdH07XHJcblxyXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XHJcblxyXG5cclxuXHJcbiggZnVuY3Rpb24oKSB7XHJcblxyXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxyXG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXHJcblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XHJcblxyXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxyXG5cdFx0aWYgKCAhZGl2ICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXHJcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XHJcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XHJcblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcclxuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcclxuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XHJcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcclxuXHJcblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XHJcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxyXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xyXG5cclxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xyXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XHJcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xyXG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xyXG5cclxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XHJcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXHJcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XHJcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXHJcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxyXG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXHJcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xyXG5cclxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XHJcblxyXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxyXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxyXG5cdFx0ZGl2ID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcclxuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcclxuXHR9XHJcblxyXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXHJcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwsXHJcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXHJcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XHJcblxyXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXHJcblx0aWYgKCAhZGl2LnN0eWxlICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxyXG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcclxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XHJcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcclxuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xyXG5cclxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XHJcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XHJcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcclxuXHRcdH0sXHJcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XHJcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcclxuXHRcdH0sXHJcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcclxuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XHJcblx0XHR9LFxyXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcclxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcclxuXHRcdH0sXHJcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcclxuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XHJcblx0XHR9XHJcblx0fSApO1xyXG59ICkoKTtcclxuXHJcblxyXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xyXG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcclxuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcclxuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcclxuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXHJcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XHJcblxyXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XHJcblxyXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcclxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcclxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NClcclxuXHRpZiAoIGNvbXB1dGVkICkge1xyXG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XHJcblxyXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcclxuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxyXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXHJcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxyXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxyXG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcclxuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcclxuXHJcblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcclxuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcclxuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcclxuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcclxuXHJcblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcclxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xyXG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcclxuXHJcblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcclxuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcclxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcclxuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxyXG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cclxuXHRcdHJldCArIFwiXCIgOlxyXG5cdFx0cmV0O1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xyXG5cclxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxyXG5cdHJldHVybiB7XHJcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxyXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cclxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cclxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XHJcblx0XHR9XHJcblx0fTtcclxufVxyXG5cclxuXHJcbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXHJcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcclxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xyXG5cclxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxyXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcclxuXHJcblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xyXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXHJcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xyXG5cclxuXHR3aGlsZSAoIGktLSApIHtcclxuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcclxuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xyXG5cdFx0XHRyZXR1cm4gbmFtZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XHJcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XHJcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcclxuXHJcblx0aWYgKCBmaW5hbCApIHtcclxuXHRcdHJldHVybiBmaW5hbDtcclxuXHR9XHJcblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XHJcblx0XHRyZXR1cm4gbmFtZTtcclxuXHR9XHJcblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XHJcbn1cclxuXHJcblxyXG52YXJcclxuXHJcblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxyXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxyXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxyXG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcclxuXHRyY3VzdG9tUHJvcCA9IC9eLS0vLFxyXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxyXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcclxuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxyXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxyXG5cdH07XHJcblxyXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xyXG5cclxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXHJcblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XHJcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XHJcblx0cmV0dXJuIG1hdGNoZXMgP1xyXG5cclxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXHJcblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcclxuXHRcdHZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcclxuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXHJcblx0XHRleHRyYSA9IDAsXHJcblx0XHRkZWx0YSA9IDA7XHJcblxyXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3NhcnlcclxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cclxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XHJcblxyXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXHJcblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcclxuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcclxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xyXG5cclxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcclxuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XHJcblxyXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXHJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcclxuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xyXG5cclxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3JcclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcclxuXHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcclxuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xyXG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcclxuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxyXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XHJcblxyXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxyXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcclxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cclxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxyXG5cdFx0XHRkZWx0YSAtXHJcblx0XHRcdGV4dHJhIC1cclxuXHRcdFx0MC41XHJcblxyXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcclxuXHRcdCkgKSB8fCAwO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGRlbHRhO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xyXG5cclxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXHJcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxyXG5cclxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxyXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXHJcblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxyXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcclxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcclxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcclxuXHJcblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXHJcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcclxuXHJcblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XHJcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXHJcblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XHJcblx0XHRpZiAoICFleHRyYSApIHtcclxuXHRcdFx0cmV0dXJuIHZhbDtcclxuXHRcdH1cclxuXHRcdHZhbCA9IFwiYXV0b1wiO1xyXG5cdH1cclxuXHJcblxyXG5cdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxyXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcclxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcclxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxyXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEgb25seVxyXG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGVcclxuXHQvLyBXZSB1c2UgZ2V0Q2xpZW50UmVjdHMoKSB0byBjaGVjayBmb3IgaGlkZGVuL2Rpc2Nvbm5lY3RlZC5cclxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3hcclxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxyXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxyXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxyXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcclxuXHJcblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XHJcblxyXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxyXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxyXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxyXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcclxuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcclxuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cclxuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xyXG5cclxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXHJcblx0cmV0dXJuICggdmFsICtcclxuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcclxuXHRcdFx0ZWxlbSxcclxuXHRcdFx0ZGltZW5zaW9uLFxyXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXHJcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXHJcblx0XHRcdHN0eWxlcyxcclxuXHJcblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXHJcblx0XHRcdHZhbFxyXG5cdFx0KVxyXG5cdCkgKyBcInB4XCI7XHJcbn1cclxuXHJcbmpRdWVyeS5leHRlbmQoIHtcclxuXHJcblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XHJcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XHJcblx0Y3NzSG9va3M6IHtcclxuXHRcdG9wYWNpdHk6IHtcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XHJcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxyXG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcclxuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xyXG5cdGNzc051bWJlcjoge1xyXG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxyXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxyXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxyXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxyXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXHJcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcclxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcclxuXHRcdFwiZ3JpZENvbHVtblwiOiB0cnVlLFxyXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXHJcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxyXG5cdFx0XCJncmlkUm93XCI6IHRydWUsXHJcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcclxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXHJcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcclxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxyXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxyXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXHJcblx0XHRcIndpZG93c1wiOiB0cnVlLFxyXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcclxuXHRcdFwiem9vbVwiOiB0cnVlXHJcblx0fSxcclxuXHJcblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxyXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcclxuXHRjc3NQcm9wczoge30sXHJcblxyXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXHJcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XHJcblxyXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXHJcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxyXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXHJcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXHJcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcclxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xyXG5cclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3RcclxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxyXG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxyXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xyXG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxyXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XHJcblxyXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXHJcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcblxyXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXHJcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xyXG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcclxuXHJcblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XHJcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXHJcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcclxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxyXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cclxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XHJcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xyXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XHJcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcclxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XHJcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xyXG5cclxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcclxuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxyXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcclxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxyXG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xyXG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcclxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcclxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xyXG5cclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3RcclxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcclxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cclxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcclxuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxyXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XHJcblxyXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcclxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcclxuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XHJcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxyXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XHJcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xyXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcclxuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XHJcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH1cclxufSApO1xyXG5cclxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBkaW1lbnNpb24gKSB7XHJcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcclxuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcclxuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcclxuXHJcblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXHJcblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcclxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxyXG5cclxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xyXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cclxuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXHJcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcclxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcclxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cclxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XHJcblx0XHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XHJcblx0XHRcdFx0XHRcdH0gKSA6XHJcblx0XHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XHJcblx0XHRcdHZhciBtYXRjaGVzLFxyXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxyXG5cclxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXHJcblx0XHRcdFx0Ly8gdG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdy5cclxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcclxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxyXG5cclxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxyXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcclxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxyXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcclxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cclxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudChcclxuXHRcdFx0XHRcdFx0ZWxlbSxcclxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxyXG5cdFx0XHRcdFx0XHRleHRyYSxcclxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXHJcblx0XHRcdFx0XHRcdHN0eWxlc1xyXG5cdFx0XHRcdFx0KSA6XHJcblx0XHRcdFx0XHQwO1xyXG5cclxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdW5yZWxpYWJsZSBib3JkZXItYm94IGRpbWVuc2lvbnMgYnkgY29tcGFyaW5nIG9mZnNldCogdG8gY29tcHV0ZWQgYW5kXHJcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXHJcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xyXG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcclxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXHJcblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxyXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXHJcblx0XHRcdFx0XHQwLjVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxyXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXHJcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcclxuXHJcblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcclxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xyXG5cdFx0fVxyXG5cdH07XHJcbn0gKTtcclxuXHJcbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcclxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XHJcblx0XHRpZiAoIGNvbXB1dGVkICkge1xyXG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxyXG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXHJcblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XHJcblx0XHRcdFx0XHR9IClcclxuXHRcdFx0XHQpICsgXCJweFwiO1xyXG5cdFx0fVxyXG5cdH1cclxuKTtcclxuXHJcbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcclxualF1ZXJ5LmVhY2goIHtcclxuXHRtYXJnaW46IFwiXCIsXHJcblx0cGFkZGluZzogXCJcIixcclxuXHRib3JkZXI6IFwiV2lkdGhcIlxyXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XHJcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcclxuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgaSA9IDAsXHJcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcclxuXHJcblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXHJcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcclxuXHJcblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcclxuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XHJcblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBleHBhbmRlZDtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcclxuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XHJcblx0fVxyXG59ICk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XHJcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcclxuXHRcdFx0XHRtYXAgPSB7fSxcclxuXHRcdFx0XHRpID0gMDtcclxuXHJcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xyXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xyXG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBtYXA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxyXG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcclxuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xyXG5cdH1cclxufSApO1xyXG5cclxuXHJcbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcclxuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xyXG59XHJcbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xyXG5cclxuVHdlZW4ucHJvdG90eXBlID0ge1xyXG5cdGNvbnN0cnVjdG9yOiBUd2VlbixcclxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XHJcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xyXG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcclxuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XHJcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcclxuXHRcdHRoaXMuZW5kID0gZW5kO1xyXG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcclxuXHR9LFxyXG5cdGN1cjogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xyXG5cclxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xyXG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XHJcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcclxuXHR9LFxyXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XHJcblx0XHR2YXIgZWFzZWQsXHJcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcclxuXHJcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcclxuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXHJcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcclxuXHRcdH1cclxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcclxuXHJcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xyXG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XHJcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59O1xyXG5cclxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xyXG5cclxuVHdlZW4ucHJvcEhvb2tzID0ge1xyXG5cdF9kZWZhdWx0OiB7XHJcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcclxuXHRcdFx0dmFyIHJlc3VsdDtcclxuXHJcblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXHJcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXHJcblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxyXG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xyXG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxyXG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxyXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcclxuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cclxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xyXG5cclxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXHJcblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xyXG5cdFx0fSxcclxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xyXG5cclxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXHJcblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cclxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cclxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xyXG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxyXG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcclxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcclxuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxyXG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcclxuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xyXG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xyXG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5lYXNpbmcgPSB7XHJcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcclxuXHRcdHJldHVybiBwO1xyXG5cdH0sXHJcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xyXG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcclxuXHR9LFxyXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcclxufTtcclxuXHJcbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xyXG5cclxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcclxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcclxuXHJcblxyXG5cclxuXHJcbnZhclxyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxyXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxyXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xyXG5cclxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XHJcblx0aWYgKCBpblByb2dyZXNzICkge1xyXG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XHJcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGpRdWVyeS5meC50aWNrKCk7XHJcblx0fVxyXG59XHJcblxyXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XHJcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xyXG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcclxuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xyXG5cdH0gKTtcclxuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcclxufVxyXG5cclxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cclxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcclxuXHR2YXIgd2hpY2gsXHJcblx0XHRpID0gMCxcclxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcclxuXHJcblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxyXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XHJcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XHJcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xyXG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcclxuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xyXG5cdH1cclxuXHJcblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XHJcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGF0dHJzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcclxuXHR2YXIgdHdlZW4sXHJcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXHJcblx0XHRpbmRleCA9IDAsXHJcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcclxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xyXG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcclxuXHJcblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XHJcblx0XHRcdHJldHVybiB0d2VlbjtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xyXG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcclxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXHJcblx0XHRhbmltID0gdGhpcyxcclxuXHRcdG9yaWcgPSB7fSxcclxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcclxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXHJcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xyXG5cclxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3NcclxuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xyXG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xyXG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xyXG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XHJcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xyXG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XHJcblx0XHRcdFx0XHRvbGRmaXJlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0aG9va3MudW5xdWV1ZWQrKztcclxuXHJcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XHJcblxyXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xyXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcclxuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcclxuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xyXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XHJcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XHJcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XHJcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xyXG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XHJcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xyXG5cclxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXHJcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcclxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xyXG5cclxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcclxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XHJcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcclxuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxyXG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXHJcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcclxuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXHJcblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcclxuXHJcblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcclxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcclxuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcclxuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XHJcblx0XHR9XHJcblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcclxuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XHJcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XHJcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XHJcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XHJcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XHJcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XHJcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcclxuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XHJcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xyXG5cclxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xyXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcclxuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcclxuXHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XHJcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcclxuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcclxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XHJcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcclxuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xyXG5cdFx0fSApO1xyXG5cdH1cclxuXHJcblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXHJcblx0cHJvcFR3ZWVuID0gZmFsc2U7XHJcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xyXG5cclxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXHJcblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XHJcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XHJcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xyXG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxyXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcclxuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxyXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcclxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXHJcblxyXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cclxuXHJcblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XHJcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xyXG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xyXG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcclxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXHJcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcclxuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xyXG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xyXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcclxuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xyXG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xyXG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XHJcblxyXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xyXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xyXG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcclxuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcclxuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XHJcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XHJcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XHJcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XHJcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcclxuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XHJcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XHJcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xyXG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcclxuXHJcblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cclxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxyXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcclxuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XHJcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xyXG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcclxuXHR2YXIgcmVzdWx0LFxyXG5cdFx0c3RvcHBlZCxcclxuXHRcdGluZGV4ID0gMCxcclxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcclxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxyXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xyXG5cdFx0fSApLFxyXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXHJcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XHJcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxyXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcclxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXHJcblx0XHRcdFx0aW5kZXggPSAwLFxyXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xyXG5cclxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcclxuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcclxuXHJcblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcclxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XHJcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXHJcblx0XHRcdGlmICggIWxlbmd0aCApIHtcclxuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXHJcblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH0sXHJcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XHJcblx0XHRcdGVsZW06IGVsZW0sXHJcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxyXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XHJcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXHJcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XHJcblx0XHRcdH0sIG9wdGlvbnMgKSxcclxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxyXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXHJcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcclxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXHJcblx0XHRcdHR3ZWVuczogW10sXHJcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xyXG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcclxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xyXG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcclxuXHRcdFx0XHRyZXR1cm4gdHdlZW47XHJcblx0XHRcdH0sXHJcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xyXG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXHJcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcclxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XHJcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XHJcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3RcclxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XHJcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XHJcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9XHJcblx0XHR9ICksXHJcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcclxuXHJcblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcclxuXHJcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcclxuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XHJcblx0XHRpZiAoIHJlc3VsdCApIHtcclxuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xyXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XHJcblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcclxuXHJcblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xyXG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XHJcblx0fVxyXG5cclxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xyXG5cdGFuaW1hdGlvblxyXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXHJcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxyXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxyXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XHJcblxyXG5cdGpRdWVyeS5meC50aW1lcihcclxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcclxuXHRcdFx0ZWxlbTogZWxlbSxcclxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxyXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcclxuXHRcdH0gKVxyXG5cdCk7XHJcblxyXG5cdHJldHVybiBhbmltYXRpb247XHJcbn1cclxuXHJcbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcclxuXHJcblx0dHdlZW5lcnM6IHtcclxuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcclxuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcclxuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XHJcblx0XHRcdHJldHVybiB0d2VlbjtcclxuXHRcdH0gXVxyXG5cdH0sXHJcblxyXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XHJcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XHJcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XHJcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBwcm9wLFxyXG5cdFx0XHRpbmRleCA9IDAsXHJcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xyXG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XHJcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XHJcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXHJcblxyXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xyXG5cdFx0aWYgKCBwcmVwZW5kICkge1xyXG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcclxuXHRcdH1cclxuXHR9XHJcbn0gKTtcclxuXHJcbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcclxuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XHJcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxyXG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxyXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxyXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcclxuXHR9O1xyXG5cclxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcclxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XHJcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xyXG5cclxuXHR9IGVsc2Uge1xyXG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xyXG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xyXG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcclxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcclxuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcclxuXHR9XHJcblxyXG5cdC8vIFF1ZXVlaW5nXHJcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcclxuXHJcblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcclxuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XHJcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRyZXR1cm4gb3B0O1xyXG59O1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCgge1xyXG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcclxuXHJcblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcclxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxyXG5cclxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXHJcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XHJcblx0fSxcclxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XHJcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxyXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXHJcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XHJcblxyXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XHJcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xyXG5cclxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcclxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xyXG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcclxuXHJcblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XHJcblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XHJcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcclxuXHR9LFxyXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xyXG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcclxuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xyXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcclxuXHRcdFx0c3RvcCggZ290b0VuZCApO1xyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcclxuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XHJcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XHJcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXHJcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxyXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXHJcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xyXG5cclxuXHRcdFx0aWYgKCBpbmRleCApIHtcclxuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xyXG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcclxuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xyXG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcclxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xyXG5cclxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcclxuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxyXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXHJcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cclxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xyXG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9LFxyXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xyXG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGluZGV4LFxyXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcclxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcclxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxyXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXHJcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xyXG5cclxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxyXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XHJcblxyXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3RcclxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xyXG5cclxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xyXG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxyXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xyXG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xyXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xyXG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXHJcblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XHJcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XHJcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcclxuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xyXG5cdFx0fSApO1xyXG5cdH1cclxufSApO1xyXG5cclxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xyXG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xyXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XHJcblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XHJcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcclxuXHR9O1xyXG59ICk7XHJcblxyXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXHJcbmpRdWVyeS5lYWNoKCB7XHJcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcclxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcclxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcclxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcclxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXHJcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cclxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xyXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XHJcblx0fTtcclxufSApO1xyXG5cclxualF1ZXJ5LnRpbWVycyA9IFtdO1xyXG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciB0aW1lcixcclxuXHRcdGkgPSAwLFxyXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcclxuXHJcblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xyXG5cclxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xyXG5cclxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcclxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xyXG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XHJcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xyXG5cdH1cclxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcclxufTtcclxuXHJcbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcclxuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XHJcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XHJcbn07XHJcblxyXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcclxualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XHJcblx0aWYgKCBpblByb2dyZXNzICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0aW5Qcm9ncmVzcyA9IHRydWU7XHJcblx0c2NoZWR1bGUoKTtcclxufTtcclxuXHJcbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XHJcblx0aW5Qcm9ncmVzcyA9IG51bGw7XHJcbn07XHJcblxyXG5qUXVlcnkuZnguc3BlZWRzID0ge1xyXG5cdHNsb3c6IDYwMCxcclxuXHRmYXN0OiAyMDAsXHJcblxyXG5cdC8vIERlZmF1bHQgc3BlZWRcclxuXHRfZGVmYXVsdDogNDAwXHJcbn07XHJcblxyXG5cclxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxyXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xyXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcclxuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xyXG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcclxuXHJcblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcclxuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcclxuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xyXG5cdFx0fTtcclxuXHR9ICk7XHJcbn07XHJcblxyXG5cclxuKCBmdW5jdGlvbigpIHtcclxuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcclxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcclxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XHJcblxyXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxyXG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxyXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcclxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxyXG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxyXG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXHJcblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcclxuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xyXG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XHJcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xyXG59ICkoKTtcclxuXHJcblxyXG52YXIgYm9vbEhvb2ssXHJcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xyXG5cdH0sXHJcblxyXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5qUXVlcnkuZXh0ZW5kKCB7XHJcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0dmFyIHJldCwgaG9va3MsXHJcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcclxuXHJcblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXHJcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcclxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxyXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxyXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XHJcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcclxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxyXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xyXG5cdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcclxuXHJcblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxyXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xyXG5cdH0sXHJcblxyXG5cdGF0dHJIb29rczoge1xyXG5cdFx0dHlwZToge1xyXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcclxuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxyXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xyXG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XHJcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XHJcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XHJcblx0XHR2YXIgbmFtZSxcclxuXHRcdFx0aSA9IDAsXHJcblxyXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXHJcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxyXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xyXG5cclxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xyXG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn0gKTtcclxuXHJcbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcclxuYm9vbEhvb2sgPSB7XHJcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XHJcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcclxuXHJcblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2VcclxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmFtZTtcclxuXHR9XHJcbn07XHJcblxyXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XHJcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xyXG5cclxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XHJcblx0XHR2YXIgcmV0LCBoYW5kbGUsXHJcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdFx0aWYgKCAhaXNYTUwgKSB7XHJcblxyXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXHJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcclxuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xyXG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XHJcblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XHJcblx0XHRcdFx0bnVsbDtcclxuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJldDtcclxuXHR9O1xyXG59ICk7XHJcblxyXG5cclxuXHJcblxyXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXHJcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoIHtcclxuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XHJcblx0fSxcclxuXHJcblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xyXG5cdFx0fSApO1xyXG5cdH1cclxufSApO1xyXG5cclxualF1ZXJ5LmV4dGVuZCgge1xyXG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdHZhciByZXQsIGhvb2tzLFxyXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XHJcblxyXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xyXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xyXG5cclxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xyXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xyXG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxyXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XHJcblx0XHRcdHJldHVybiByZXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcclxuXHR9LFxyXG5cclxuXHRwcm9wSG9va3M6IHtcclxuXHRcdHRhYkluZGV4OiB7XHJcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcclxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcclxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcclxuXHRcdFx0XHQvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcvaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cclxuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxyXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xyXG5cclxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XHJcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxyXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiAtMTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHByb3BGaXg6IHtcclxuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxyXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXHJcblx0fVxyXG59ICk7XHJcblxyXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcclxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XHJcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcclxuLy8gb24gdGhlIG9wdGlvblxyXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxyXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXHJcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxyXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcclxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcclxuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xyXG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHJcblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cclxuXHJcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XHJcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9LFxyXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHJcblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cclxuXHJcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XHJcblx0XHRcdGlmICggcGFyZW50ICkge1xyXG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xyXG5cclxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG59XHJcblxyXG5qUXVlcnkuZWFjaCggW1xyXG5cdFwidGFiSW5kZXhcIixcclxuXHRcInJlYWRPbmx5XCIsXHJcblx0XCJtYXhMZW5ndGhcIixcclxuXHRcImNlbGxTcGFjaW5nXCIsXHJcblx0XCJjZWxsUGFkZGluZ1wiLFxyXG5cdFwicm93U3BhblwiLFxyXG5cdFwiY29sU3BhblwiLFxyXG5cdFwidXNlTWFwXCIsXHJcblx0XCJmcmFtZUJvcmRlclwiLFxyXG5cdFwiY29udGVudEVkaXRhYmxlXCJcclxuXSwgZnVuY3Rpb24oKSB7XHJcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcclxufSApO1xyXG5cclxuXHJcblxyXG5cclxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXHJcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXHJcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XHJcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcclxuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcclxuXHR9XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XHJcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XHJcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xyXG5cdH1cclxuXHRyZXR1cm4gW107XHJcbn1cclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoIHtcclxuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxyXG5cdFx0XHRpID0gMDtcclxuXHJcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xyXG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcclxuXHJcblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xyXG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XHJcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xyXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xyXG5cclxuXHRcdFx0XHRpZiAoIGN1ciApIHtcclxuXHRcdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xyXG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cclxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcclxuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XHJcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxyXG5cdFx0XHRpID0gMDtcclxuXHJcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xyXG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcclxuXHJcblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xyXG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XHJcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xyXG5cclxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxyXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xyXG5cclxuXHRcdFx0XHRpZiAoIGN1ciApIHtcclxuXHRcdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcclxuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcclxuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cclxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcclxuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XHJcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcclxuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxyXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcclxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXHJcblx0XHRcdFx0XHRzdGF0ZVZhbFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcclxuXHJcblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xyXG5cclxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xyXG5cdFx0XHRcdGkgPSAwO1xyXG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcclxuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XHJcblxyXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxyXG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcclxuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxyXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xyXG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XHJcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxyXG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxyXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXHJcblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcclxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXHJcblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXHJcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xyXG5cdFx0XHRcdFx0XHRcIlwiIDpcclxuXHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblx0fSxcclxuXHJcblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXHJcblx0XHRcdGkgPSAwO1xyXG5cclxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcclxuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcclxuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXHJcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufSApO1xyXG5cclxuXHJcblxyXG5cclxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHR2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLFxyXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xyXG5cclxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XHJcblx0XHRcdGlmICggZWxlbSApIHtcclxuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcclxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XHJcblxyXG5cdFx0XHRcdGlmICggaG9va3MgJiZcclxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcclxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdHJldHVybiByZXQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xyXG5cclxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcclxuXHRcdFx0dmFyIHZhbDtcclxuXHJcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xyXG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dmFsID0gdmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcclxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcclxuXHRcdFx0XHR2YWwgPSBcIlwiO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcclxuXHRcdFx0XHR2YWwgKz0gXCJcIjtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xyXG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XHJcblxyXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xyXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cdH1cclxufSApO1xyXG5cclxualF1ZXJ5LmV4dGVuZCgge1xyXG5cdHZhbEhvb2tzOiB7XHJcblx0XHRvcHRpb246IHtcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHJcblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xyXG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XHJcblx0XHRcdFx0XHR2YWwgOlxyXG5cclxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XHJcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXHJcblx0XHRcdFx0XHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZVxyXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2VcclxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdHNlbGVjdDoge1xyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxyXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcclxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxyXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcclxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcclxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcclxuXHRcdFx0XHRcdGkgPSBtYXg7XHJcblxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpID0gb25lID8gaW5kZXggOiAwO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xyXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xyXG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xyXG5cclxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XHJcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcclxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXHJcblx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCAmJlxyXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XHJcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xyXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xyXG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcclxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXHJcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxyXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcclxuXHJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xyXG5cclxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cclxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcclxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XHJcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufSApO1xyXG5cclxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XHJcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XHJcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcclxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xyXG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcclxuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcclxuXHRcdH07XHJcblx0fVxyXG59ICk7XHJcblxyXG5cclxuXHJcblxyXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXHJcblxyXG5cclxuc3VwcG9ydC5mb2N1c2luID0gXCJvbmZvY3VzaW5cIiBpbiB3aW5kb3c7XHJcblxyXG5cclxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxyXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XHJcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdH07XHJcblxyXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcclxuXHJcblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XHJcblxyXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwgbGFzdEVsZW1lbnQsXHJcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxyXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxyXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcclxuXHJcblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xyXG5cclxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXHJcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xyXG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcclxuXHJcblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcclxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XHJcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XHJcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xyXG5cdFx0fVxyXG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xyXG5cclxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xyXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XHJcblx0XHRcdGV2ZW50IDpcclxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XHJcblxyXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxyXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XHJcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XHJcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cclxuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxyXG5cdFx0XHRudWxsO1xyXG5cclxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxyXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xyXG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xyXG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3RcclxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xyXG5cdFx0XHRbIGV2ZW50IF0gOlxyXG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcclxuXHJcblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXHJcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcclxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXHJcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxyXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFpc1dpbmRvdyggZWxlbSApICkge1xyXG5cclxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XHJcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XHJcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcclxuXHRcdFx0XHR0bXAgPSBjdXI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxyXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcclxuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXHJcblx0XHRpID0gMDtcclxuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XHJcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xyXG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xyXG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxyXG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcclxuXHJcblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXHJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcclxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xyXG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcclxuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcclxuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xyXG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XHJcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xyXG5cclxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcclxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XHJcblxyXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcclxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxyXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcclxuXHJcblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cclxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXHJcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxyXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XHJcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxyXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xyXG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xyXG5cclxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcclxuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0XHRcdGlmICggdG1wICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xyXG5cdH0sXHJcblxyXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxyXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXHJcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcclxuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcclxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxyXG5cdFx0XHRldmVudCxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHR5cGU6IHR5cGUsXHJcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xyXG5cdH1cclxuXHJcbn0gKTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoIHtcclxuXHJcblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcclxuXHRcdH0gKTtcclxuXHR9LFxyXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcclxuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xyXG5cdFx0aWYgKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcclxuXHRcdH1cclxuXHR9XHJcbn0gKTtcclxuXHJcblxyXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcclxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xyXG4vL1xyXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcclxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXHJcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xyXG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XHJcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcclxuXHJcblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxyXG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcclxuXHRcdH07XHJcblxyXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xyXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxyXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XHJcblxyXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xyXG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXHJcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XHJcblxyXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xyXG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcclxuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcclxuXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH0gKTtcclxufVxyXG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XHJcblxyXG52YXIgbm9uY2UgPSBEYXRlLm5vdygpO1xyXG5cclxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcclxuXHJcblxyXG5cclxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xyXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcclxuXHR2YXIgeG1sO1xyXG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XHJcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXHJcblx0dHJ5IHtcclxuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XHJcblx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHR4bWwgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRpZiAoICF4bWwgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKS5sZW5ndGggKSB7XHJcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xyXG5cdH1cclxuXHRyZXR1cm4geG1sO1xyXG59O1xyXG5cclxuXHJcbnZhclxyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxyXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcclxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXHJcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xyXG5cclxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xyXG5cdHZhciBuYW1lO1xyXG5cclxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xyXG5cclxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxyXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XHJcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cclxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXHJcblx0XHRcdFx0YnVpbGRQYXJhbXMoXHJcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxyXG5cdFx0XHRcdFx0dixcclxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxyXG5cdFx0XHRcdFx0YWRkXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cclxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcclxuXHJcblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXHJcblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcclxuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xyXG5cdFx0fVxyXG5cclxuXHR9IGVsc2Uge1xyXG5cclxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cclxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXHJcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xyXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XHJcblx0dmFyIHByZWZpeCxcclxuXHRcdHMgPSBbXSxcclxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcclxuXHJcblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcclxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xyXG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcclxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XHJcblxyXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcclxuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcclxuXHRcdH07XHJcblxyXG5cdGlmICggYSA9PSBudWxsICkge1xyXG5cdFx0cmV0dXJuIFwiXCI7XHJcblx0fVxyXG5cclxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxyXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcclxuXHJcblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcclxuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcclxuXHRcdH0gKTtcclxuXHJcblx0fSBlbHNlIHtcclxuXHJcblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXHJcblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcclxuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cclxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xyXG59O1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCgge1xyXG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcclxuXHR9LFxyXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XHJcblxyXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXHJcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcclxuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XHJcblx0XHR9IClcclxuXHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcclxuXHJcblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXHJcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxyXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcclxuXHRcdH0gKVxyXG5cdFx0Lm1hcCggZnVuY3Rpb24oIGksIGVsZW0gKSB7XHJcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcclxuXHJcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcclxuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xyXG5cdFx0fSApLmdldCgpO1xyXG5cdH1cclxufSApO1xyXG5cclxuXHJcbnZhclxyXG5cdHIyMCA9IC8lMjAvZyxcclxuXHRyaGFzaCA9IC8jLiokLyxcclxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxyXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcclxuXHJcblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXHJcblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcclxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcclxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXHJcblxyXG5cdC8qIFByZWZpbHRlcnNcclxuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxyXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XHJcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxyXG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcclxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXHJcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxyXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXHJcblx0ICovXHJcblx0cHJlZmlsdGVycyA9IHt9LFxyXG5cclxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXHJcblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxyXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcclxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcclxuXHQgKi9cclxuXHR0cmFuc3BvcnRzID0ge30sXHJcblxyXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxyXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcclxuXHJcblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXHJcblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcclxuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XHJcblxyXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XHJcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xyXG5cclxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXHJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xyXG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZGF0YVR5cGUsXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xyXG5cclxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xyXG5cclxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxyXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXHJcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcclxuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcclxuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xyXG5cclxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xyXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xyXG5cclxuXHR2YXIgaW5zcGVjdGVkID0ge30sXHJcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcclxuXHJcblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XHJcblx0XHR2YXIgc2VsZWN0ZWQ7XHJcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xyXG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcclxuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxyXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcclxuXHJcblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xyXG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XHJcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcclxufVxyXG5cclxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXHJcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXHJcbi8vIEZpeGVzICM5ODg3XHJcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xyXG5cdHZhciBrZXksIGRlZXAsXHJcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XHJcblxyXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XHJcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKCBkZWVwICkge1xyXG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XHJcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXHJcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxyXG4gKi9cclxuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcclxuXHJcblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxyXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxyXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XHJcblxyXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXHJcblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XHJcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcclxuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcclxuXHRpZiAoIGN0ICkge1xyXG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcclxuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcclxuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcclxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcclxuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcclxuXHR9IGVsc2Uge1xyXG5cclxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcclxuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xyXG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XHJcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcclxuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxyXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcclxuXHR9XHJcblxyXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcclxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxyXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcclxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XHJcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xyXG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xyXG5cdH1cclxufVxyXG5cclxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxyXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcclxuICovXHJcbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcclxuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcclxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcclxuXHJcblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXHJcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xyXG5cclxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcclxuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xyXG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XHJcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XHJcblxyXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXHJcblx0d2hpbGUgKCBjdXJyZW50ICkge1xyXG5cclxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xyXG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxyXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xyXG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2ID0gY3VycmVudDtcclxuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcclxuXHJcblx0XHRpZiAoIGN1cnJlbnQgKSB7XHJcblxyXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXHJcblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XHJcblxyXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xyXG5cclxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxyXG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xyXG5cclxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xyXG5cclxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XHJcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XHJcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcclxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcclxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxyXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xyXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XHJcbn1cclxuXHJcbmpRdWVyeS5leHRlbmQoIHtcclxuXHJcblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXHJcblx0YWN0aXZlOiAwLFxyXG5cclxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XHJcblx0bGFzdE1vZGlmaWVkOiB7fSxcclxuXHRldGFnOiB7fSxcclxuXHJcblx0YWpheFNldHRpbmdzOiB7XHJcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXHJcblx0XHR0eXBlOiBcIkdFVFwiLFxyXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcclxuXHRcdGdsb2JhbDogdHJ1ZSxcclxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxyXG5cdFx0YXN5bmM6IHRydWUsXHJcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcclxuXHJcblx0XHQvKlxyXG5cdFx0dGltZW91dDogMCxcclxuXHRcdGRhdGE6IG51bGwsXHJcblx0XHRkYXRhVHlwZTogbnVsbCxcclxuXHRcdHVzZXJuYW1lOiBudWxsLFxyXG5cdFx0cGFzc3dvcmQ6IG51bGwsXHJcblx0XHRjYWNoZTogbnVsbCxcclxuXHRcdHRocm93czogZmFsc2UsXHJcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXHJcblx0XHRoZWFkZXJzOiB7fSxcclxuXHRcdCovXHJcblxyXG5cdFx0YWNjZXB0czoge1xyXG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXHJcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxyXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxyXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxyXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXHJcblx0XHR9LFxyXG5cclxuXHRcdGNvbnRlbnRzOiB7XHJcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXHJcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcclxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXHJcblx0XHR9LFxyXG5cclxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XHJcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxyXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxyXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIERhdGEgY29udmVydGVyc1xyXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxyXG5cdFx0Y29udmVydGVyczoge1xyXG5cclxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XHJcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcclxuXHJcblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxyXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxyXG5cclxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxyXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxyXG5cclxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcclxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcclxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcclxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXHJcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcclxuXHRcdGZsYXRPcHRpb25zOiB7XHJcblx0XHRcdHVybDogdHJ1ZSxcclxuXHRcdFx0Y29udGV4dDogdHJ1ZVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XHJcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxyXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXHJcblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcclxuXHRcdHJldHVybiBzZXR0aW5ncyA/XHJcblxyXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxyXG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XHJcblxyXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXHJcblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xyXG5cdH0sXHJcblxyXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxyXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxyXG5cclxuXHQvLyBNYWluIG1ldGhvZFxyXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XHJcblxyXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcclxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdFx0b3B0aW9ucyA9IHVybDtcclxuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XHJcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcblx0XHR2YXIgdHJhbnNwb3J0LFxyXG5cclxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxyXG5cdFx0XHRjYWNoZVVSTCxcclxuXHJcblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcclxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxyXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXHJcblxyXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxyXG5cdFx0XHR0aW1lb3V0VGltZXIsXHJcblxyXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcclxuXHRcdFx0dXJsQW5jaG9yLFxyXG5cclxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxyXG5cdFx0XHRjb21wbGV0ZWQsXHJcblxyXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcclxuXHRcdFx0ZmlyZUdsb2JhbHMsXHJcblxyXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXHJcblx0XHRcdGksXHJcblxyXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcclxuXHRcdFx0dW5jYWNoZWQsXHJcblxyXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XHJcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxyXG5cclxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcclxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXHJcblxyXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXHJcblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxyXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XHJcblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcclxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudCxcclxuXHJcblx0XHRcdC8vIERlZmVycmVkc1xyXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxyXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXHJcblxyXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xyXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxyXG5cclxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcclxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcclxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxyXG5cclxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXHJcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxyXG5cclxuXHRcdFx0Ly8gRmFrZSB4aHJcclxuXHRcdFx0anFYSFIgPSB7XHJcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcclxuXHJcblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxyXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xyXG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xyXG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcclxuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxyXG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XHJcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXHJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXHJcblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcclxuXHRcdFx0XHRcdHZhciBjb2RlO1xyXG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3NcclxuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcclxuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XHJcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xyXG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XHJcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcclxuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcclxuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XHJcblxyXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXHJcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxyXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXHJcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXHJcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XHJcblxyXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XHJcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xyXG5cclxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3RcclxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xyXG5cclxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxyXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XHJcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XHJcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXHJcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XHJcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcclxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xyXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cclxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHJcblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXHJcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxyXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXHJcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xyXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XHJcblxyXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcclxuXHRcdGlmICggY29tcGxldGVkICkge1xyXG5cdFx0XHRyZXR1cm4ganFYSFI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cclxuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXHJcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcclxuXHJcblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXHJcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcclxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XHJcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcclxuXHJcblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2VcclxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxyXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxyXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xyXG5cclxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XHJcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XHJcblxyXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcclxuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XHJcblxyXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXHJcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XHJcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcclxuXHJcblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxyXG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcclxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xyXG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UrKyApICsgdW5jYWNoZWQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcclxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xyXG5cclxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxyXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcclxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XHJcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cclxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xyXG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XHJcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcclxuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxyXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XHJcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXHJcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxyXG5cdFx0XHRcIkFjY2VwdFwiLFxyXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cclxuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXHJcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxyXG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cclxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xyXG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcclxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXHJcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XHJcblxyXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cclxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXHJcblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcclxuXHJcblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcclxuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XHJcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcclxuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcclxuXHJcblx0XHQvLyBHZXQgdHJhbnNwb3J0XHJcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcclxuXHJcblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcclxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcclxuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xyXG5cclxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcclxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcclxuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcclxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBUaW1lb3V0XHJcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xyXG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xyXG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHJcblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xyXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xyXG5cdFx0XHRcdFx0dGhyb3cgZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xyXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcclxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xyXG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxyXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xyXG5cclxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xyXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XHJcblxyXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xyXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcclxuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cclxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcclxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xyXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XHJcblxyXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxyXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xyXG5cclxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcclxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XHJcblxyXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxyXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcclxuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxyXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xyXG5cclxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXHJcblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XHJcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xyXG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcclxuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcclxuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XHJcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XHJcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xyXG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XHJcblxyXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xyXG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcclxuXHJcblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcclxuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xyXG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcclxuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcclxuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XHJcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XHJcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xyXG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xyXG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3RcclxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xyXG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XHJcblxyXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXHJcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xyXG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xyXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XHJcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XHJcblxyXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xyXG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxyXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ29tcGxldGVcclxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcclxuXHJcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XHJcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xyXG5cclxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xyXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBqcVhIUjtcclxuXHR9LFxyXG5cclxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xyXG5cdH0sXHJcblxyXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xyXG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcclxuXHJcblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxyXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XHJcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xyXG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XHJcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXHJcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcclxuXHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdHR5cGU6IG1ldGhvZCxcclxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXHJcblx0XHRcdGRhdGE6IGRhdGEsXHJcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXHJcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcclxuXHR9O1xyXG59ICk7XHJcblxyXG5cclxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcclxuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcclxuXHRcdHVybDogdXJsLFxyXG5cclxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KVxyXG5cdFx0dHlwZTogXCJHRVRcIixcclxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxyXG5cdFx0Y2FjaGU6IHRydWUsXHJcblx0XHRhc3luYzogZmFsc2UsXHJcblx0XHRnbG9iYWw6IGZhbHNlLFxyXG5cclxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXHJcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxyXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXHJcblx0XHRjb252ZXJ0ZXJzOiB7XHJcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxyXG5cdFx0fSxcclxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcclxuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zICk7XHJcblx0XHR9XHJcblx0fSApO1xyXG59O1xyXG5cclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoIHtcclxuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcclxuXHRcdHZhciB3cmFwO1xyXG5cclxuXHRcdGlmICggdGhpc1sgMCBdICkge1xyXG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcclxuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcclxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XHJcblxyXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcclxuXHJcblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xyXG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcclxuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XHJcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXHJcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XHJcblxyXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHR9LFxyXG5cclxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcclxuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcclxuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcclxuXHRcdH0gKTtcclxuXHR9LFxyXG5cclxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xyXG5cdFx0fSApO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59ICk7XHJcblxyXG5cclxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xyXG59O1xyXG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xyXG59O1xyXG5cclxuXHJcblxyXG5cclxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcclxuXHR0cnkge1xyXG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcclxuXHR9IGNhdGNoICggZSApIHt9XHJcbn07XHJcblxyXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcclxuXHJcblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxyXG5cdFx0MDogMjAwLFxyXG5cclxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XHJcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcclxuXHRcdDEyMjM6IDIwNFxyXG5cdH0sXHJcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcclxuXHJcbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcclxuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XHJcblxyXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XHJcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xyXG5cclxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XHJcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xyXG5cdFx0XHRcdHZhciBpLFxyXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcclxuXHJcblx0XHRcdFx0eGhyLm9wZW4oXHJcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXHJcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcclxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXHJcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxyXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcclxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xyXG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcclxuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxyXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcclxuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcclxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxyXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxyXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxyXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XHJcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcclxuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XHJcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBDYWxsYmFja1xyXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XHJcblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xyXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xyXG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XHJcblxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxyXG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XHJcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xyXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXHJcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxyXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxyXG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXHJcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXHJcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcclxuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcclxuXHJcblx0XHRcdFx0dHJ5IHtcclxuXHJcblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXHJcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcclxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRcdHRocm93IGU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcbn0gKTtcclxuXHJcblxyXG5cclxuXHJcbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXHJcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcclxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XHJcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xyXG5cdH1cclxufSApO1xyXG5cclxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcclxualF1ZXJ5LmFqYXhTZXR1cCgge1xyXG5cdGFjY2VwdHM6IHtcclxuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcclxuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxyXG5cdH0sXHJcblx0Y29udGVudHM6IHtcclxuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXHJcblx0fSxcclxuXHRjb252ZXJ0ZXJzOiB7XHJcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xyXG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xyXG5cdFx0XHRyZXR1cm4gdGV4dDtcclxuXHRcdH1cclxuXHR9XHJcbn0gKTtcclxuXHJcbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cclxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xyXG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xyXG5cdH1cclxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XHJcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xyXG5cdH1cclxufSApO1xyXG5cclxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XHJcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcclxuXHJcblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcclxuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcclxuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xyXG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcclxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcclxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcclxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcclxuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xyXG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XHJcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxyXG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xyXG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG59ICk7XHJcblxyXG5cclxuXHJcblxyXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXHJcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcclxuXHJcbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcclxualF1ZXJ5LmFqYXhTZXR1cCgge1xyXG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXHJcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcclxuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xyXG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xyXG5cdH1cclxufSApO1xyXG5cclxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXHJcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xyXG5cclxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXHJcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xyXG5cdFx0XHRcInVybFwiIDpcclxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxyXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcclxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcclxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcclxuXHRcdCk7XHJcblxyXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcclxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcclxuXHJcblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XHJcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XHJcblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcclxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xyXG5cclxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcclxuXHRcdGlmICgganNvblByb3AgKSB7XHJcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XHJcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcclxuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXHJcblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xyXG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXHJcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XHJcblxyXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xyXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xyXG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXHJcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XHJcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xyXG5cclxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXHJcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XHJcblxyXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxyXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcclxuXHJcblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxyXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXHJcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcclxuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xyXG5cdFx0fSApO1xyXG5cclxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxyXG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XHJcblx0fVxyXG59ICk7XHJcblxyXG5cclxuXHJcblxyXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XHJcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcclxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXHJcbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cclxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xyXG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XHJcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xyXG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xyXG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xyXG59ICkoKTtcclxuXHJcblxyXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcclxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxyXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxyXG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXHJcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XHJcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdHJldHVybiBbXTtcclxuXHR9XHJcblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XHJcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XHJcblx0XHRjb250ZXh0ID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xyXG5cclxuXHRpZiAoICFjb250ZXh0ICkge1xyXG5cclxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxyXG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cclxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XHJcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcclxuXHJcblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxyXG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xyXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxyXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xyXG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xyXG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xyXG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XHJcblxyXG5cdC8vIFNpbmdsZSB0YWdcclxuXHRpZiAoIHBhcnNlZCApIHtcclxuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xyXG5cdH1cclxuXHJcblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcclxuXHJcblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xyXG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxyXG4gKi9cclxualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xyXG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXHJcblx0XHRzZWxmID0gdGhpcyxcclxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xyXG5cclxuXHRpZiAoIG9mZiA+IC0xICkge1xyXG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XHJcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xyXG5cdH1cclxuXHJcblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXHJcblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcclxuXHJcblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xyXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XHJcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcclxuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdHR5cGUgPSBcIlBPU1RcIjtcclxuXHR9XHJcblxyXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XHJcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XHJcblx0XHRqUXVlcnkuYWpheCgge1xyXG5cdFx0XHR1cmw6IHVybCxcclxuXHJcblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXHJcblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxyXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2RcclxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxyXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXHJcblx0XHRcdGRhdGE6IHBhcmFtc1xyXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XHJcblxyXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcclxuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XHJcblxyXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cclxuXHJcblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XHJcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXHJcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XHJcblxyXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XHJcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XHJcblxyXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXHJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXHJcblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXHJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcclxuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdGhpcztcclxufTtcclxuXHJcblxyXG5cclxuXHJcbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXHJcbmpRdWVyeS5lYWNoKCBbXHJcblx0XCJhamF4U3RhcnRcIixcclxuXHRcImFqYXhTdG9wXCIsXHJcblx0XCJhamF4Q29tcGxldGVcIixcclxuXHRcImFqYXhFcnJvclwiLFxyXG5cdFwiYWpheFN1Y2Nlc3NcIixcclxuXHRcImFqYXhTZW5kXCJcclxuXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7XHJcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcclxuXHR9O1xyXG59ICk7XHJcblxyXG5cclxuXHJcblxyXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XHJcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcclxuXHR9ICkubGVuZ3RoO1xyXG59O1xyXG5cclxuXHJcblxyXG5cclxualF1ZXJ5Lm9mZnNldCA9IHtcclxuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xyXG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcclxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcclxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxyXG5cdFx0XHRwcm9wcyA9IHt9O1xyXG5cclxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cclxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XHJcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcclxuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcclxuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xyXG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXHJcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcclxuXHJcblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXHJcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xyXG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcclxuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xyXG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xyXG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XHJcblxyXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcclxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xyXG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcclxuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcclxuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoIHtcclxuXHJcblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXHJcblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcclxuXHJcblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXHJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdHRoaXMgOlxyXG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgcmVjdCwgd2luLFxyXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xyXG5cclxuXHRcdGlmICggIWVsZW0gKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcclxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxyXG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxyXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXHJcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXHJcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXHJcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxyXG5cdFx0fTtcclxuXHR9LFxyXG5cclxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxyXG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xyXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxyXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxyXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xyXG5cclxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XHJcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XHJcblxyXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XHJcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcclxuXHJcblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XHJcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXHJcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcclxuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcclxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcclxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcclxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xyXG5cclxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xyXG5cclxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cclxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xyXG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcclxuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXHJcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXHJcblx0XHR9O1xyXG5cdH0sXHJcblxyXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxyXG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cclxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcclxuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XHJcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxyXG5cdC8vXHJcblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXHJcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXHJcblx0Ly9cclxuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxyXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XHJcblxyXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xyXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xyXG5cdFx0fSApO1xyXG5cdH1cclxufSApO1xyXG5cclxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXHJcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcclxuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xyXG5cclxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcclxuXHJcblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xyXG5cdFx0XHR2YXIgd2luO1xyXG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XHJcblx0XHRcdFx0d2luID0gZWxlbTtcclxuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcclxuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHdpbiApIHtcclxuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXHJcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxyXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XHJcblx0XHRcdH1cclxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XHJcblx0fTtcclxufSApO1xyXG5cclxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxyXG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxyXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcclxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcclxuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcclxuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcclxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7XHJcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcclxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcclxuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcclxuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xyXG5cclxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcclxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xyXG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcclxuXHRcdFx0XHRcdGNvbXB1dGVkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0KTtcclxufSApO1xyXG5cclxuXHJcbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xyXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XHJcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LFxyXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XHJcblxyXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXHJcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcclxuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcclxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XHJcblx0XHRcdFx0dmFyIGRvYztcclxuXHJcblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xyXG5cclxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xyXG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxyXG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcclxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XHJcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcclxuXHJcblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXHJcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3RcclxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcclxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXHJcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxyXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XHJcblxyXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxyXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XHJcblxyXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxyXG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcclxuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcclxuXHRcdH07XHJcblx0fSApO1xyXG59ICk7XHJcblxyXG5cclxualF1ZXJ5LmVhY2goICggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXHJcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXHJcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcclxuXHRmdW5jdGlvbiggaSwgbmFtZSApIHtcclxuXHJcblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcclxuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcclxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XHJcblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxyXG5cdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcclxuXHR9O1xyXG59ICk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xyXG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XHJcblx0fVxyXG59ICk7XHJcblxyXG5cclxuXHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XHJcblxyXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XHJcblx0fSxcclxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xyXG5cdH0sXHJcblxyXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcclxuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XHJcblx0fSxcclxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcclxuXHJcblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXHJcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XHJcblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxyXG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcclxuXHR9XHJcbn0gKTtcclxuXHJcbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxyXG4vLyBhcmd1bWVudHMuXHJcbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcclxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXHJcbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcclxuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcclxuXHJcblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XHJcblx0XHRjb250ZXh0ID0gZm47XHJcblx0XHRmbiA9IHRtcDtcclxuXHR9XHJcblxyXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXHJcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cclxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdC8vIFNpbXVsYXRlZCBiaW5kXHJcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xyXG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcclxuXHR9O1xyXG5cclxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcclxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcclxuXHJcblx0cmV0dXJuIHByb3h5O1xyXG59O1xyXG5cclxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xyXG5cdGlmICggaG9sZCApIHtcclxuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcclxuXHR9IGVsc2Uge1xyXG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XHJcblx0fVxyXG59O1xyXG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XHJcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xyXG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcclxualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xyXG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcclxualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcclxualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XHJcblxyXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XHJcblxyXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcclxuXHJcblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cclxuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXHJcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2MilcclxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcclxuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxyXG5cclxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxyXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxyXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXHJcblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XHJcbn07XHJcblxyXG5cclxuXHJcblxyXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxyXG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3RcclxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxyXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2VcclxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXHJcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cclxuXHJcbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXHJcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cclxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxyXG5cclxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcclxuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBqUXVlcnk7XHJcblx0fSApO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG52YXJcclxuXHJcblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXHJcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXHJcblxyXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXHJcblx0XyQgPSB3aW5kb3cuJDtcclxuXHJcbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XHJcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xyXG5cdFx0d2luZG93LiQgPSBfJDtcclxuXHR9XHJcblxyXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XHJcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBqUXVlcnk7XHJcbn07XHJcblxyXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxyXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXHJcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcclxuaWYgKCAhbm9HbG9iYWwgKSB7XHJcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5yZXR1cm4galF1ZXJ5O1xyXG59ICk7XHJcbiIsIi8qISBqUXVlcnkgVUkgLSB2MS4xMi4xIC0gMjAxNi0wOS0xNFxyXG4qIGh0dHA6Ly9qcXVlcnl1aS5jb21cclxuKiBJbmNsdWRlczogd2lkZ2V0LmpzLCBwb3NpdGlvbi5qcywgZGF0YS5qcywgZGlzYWJsZS1zZWxlY3Rpb24uanMsIGVmZmVjdC5qcywgZWZmZWN0cy9lZmZlY3QtYmxpbmQuanMsIGVmZmVjdHMvZWZmZWN0LWJvdW5jZS5qcywgZWZmZWN0cy9lZmZlY3QtY2xpcC5qcywgZWZmZWN0cy9lZmZlY3QtZHJvcC5qcywgZWZmZWN0cy9lZmZlY3QtZXhwbG9kZS5qcywgZWZmZWN0cy9lZmZlY3QtZmFkZS5qcywgZWZmZWN0cy9lZmZlY3QtZm9sZC5qcywgZWZmZWN0cy9lZmZlY3QtaGlnaGxpZ2h0LmpzLCBlZmZlY3RzL2VmZmVjdC1wdWZmLmpzLCBlZmZlY3RzL2VmZmVjdC1wdWxzYXRlLmpzLCBlZmZlY3RzL2VmZmVjdC1zY2FsZS5qcywgZWZmZWN0cy9lZmZlY3Qtc2hha2UuanMsIGVmZmVjdHMvZWZmZWN0LXNpemUuanMsIGVmZmVjdHMvZWZmZWN0LXNsaWRlLmpzLCBlZmZlY3RzL2VmZmVjdC10cmFuc2Zlci5qcywgZm9jdXNhYmxlLmpzLCBmb3JtLXJlc2V0LW1peGluLmpzLCBqcXVlcnktMS03LmpzLCBrZXljb2RlLmpzLCBsYWJlbHMuanMsIHNjcm9sbC1wYXJlbnQuanMsIHRhYmJhYmxlLmpzLCB1bmlxdWUtaWQuanMsIHdpZGdldHMvYWNjb3JkaW9uLmpzLCB3aWRnZXRzL2F1dG9jb21wbGV0ZS5qcywgd2lkZ2V0cy9idXR0b24uanMsIHdpZGdldHMvY2hlY2tib3hyYWRpby5qcywgd2lkZ2V0cy9jb250cm9sZ3JvdXAuanMsIHdpZGdldHMvZGF0ZXBpY2tlci5qcywgd2lkZ2V0cy9kaWFsb2cuanMsIHdpZGdldHMvZHJhZ2dhYmxlLmpzLCB3aWRnZXRzL2Ryb3BwYWJsZS5qcywgd2lkZ2V0cy9tZW51LmpzLCB3aWRnZXRzL21vdXNlLmpzLCB3aWRnZXRzL3Byb2dyZXNzYmFyLmpzLCB3aWRnZXRzL3Jlc2l6YWJsZS5qcywgd2lkZ2V0cy9zZWxlY3RhYmxlLmpzLCB3aWRnZXRzL3NlbGVjdG1lbnUuanMsIHdpZGdldHMvc2xpZGVyLmpzLCB3aWRnZXRzL3NvcnRhYmxlLmpzLCB3aWRnZXRzL3NwaW5uZXIuanMsIHdpZGdldHMvdGFicy5qcywgd2lkZ2V0cy90b29sdGlwLmpzXHJcbiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqL1xyXG5cclxuKGZ1bmN0aW9uKHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLHQpOnQoalF1ZXJ5KX0pKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPXQuY3NzKFwidmlzaWJpbGl0eVwiKTtcImluaGVyaXRcIj09PWU7KXQ9dC5wYXJlbnQoKSxlPXQuY3NzKFwidmlzaWJpbGl0eVwiKTtyZXR1cm5cImhpZGRlblwiIT09ZX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZSxpO3QubGVuZ3RoJiZ0WzBdIT09ZG9jdW1lbnQ7KXtpZihlPXQuY3NzKFwicG9zaXRpb25cIiksKFwiYWJzb2x1dGVcIj09PWV8fFwicmVsYXRpdmVcIj09PWV8fFwiZml4ZWRcIj09PWUpJiYoaT1wYXJzZUludCh0LmNzcyhcInpJbmRleFwiKSwxMCksIWlzTmFOKGkpJiYwIT09aSkpcmV0dXJuIGk7dD10LnBhcmVudCgpfXJldHVybiAwfWZ1bmN0aW9uIHMoKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPVwidWktZGF0ZXBpY2tlci1kaXZcIix0aGlzLl9pbmxpbmVDbGFzcz1cInVpLWRhdGVwaWNrZXItaW5saW5lXCIsdGhpcy5fYXBwZW5kQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWFwcGVuZFwiLHRoaXMuX3RyaWdnZXJDbGFzcz1cInVpLWRhdGVwaWNrZXItdHJpZ2dlclwiLHRoaXMuX2RpYWxvZ0NsYXNzPVwidWktZGF0ZXBpY2tlci1kaWFsb2dcIix0aGlzLl9kaXNhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRpc2FibGVkXCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZVwiLHRoaXMuX2N1cnJlbnRDbGFzcz1cInVpLWRhdGVwaWNrZXItY3VycmVudC1kYXlcIix0aGlzLl9kYXlPdmVyQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyXCIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsW1wiXCJdPXtjbG9zZVRleHQ6XCJEb25lXCIscHJldlRleHQ6XCJQcmV2XCIsbmV4dFRleHQ6XCJOZXh0XCIsY3VycmVudFRleHQ6XCJUb2RheVwiLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLHdlZWtIZWFkZXI6XCJXa1wiLGRhdGVGb3JtYXQ6XCJtbS9kZC95eVwiLGZpcnN0RGF5OjAsaXNSVEw6ITEsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHllYXJTdWZmaXg6XCJcIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjpcImZvY3VzXCIsc2hvd0FuaW06XCJmYWRlSW5cIixzaG93T3B0aW9uczp7fSxkZWZhdWx0RGF0ZTpudWxsLGFwcGVuZFRleHQ6XCJcIixidXR0b25UZXh0OlwiLi4uXCIsYnV0dG9uSW1hZ2U6XCJcIixidXR0b25JbWFnZU9ubHk6ITEsaGlkZUlmTm9QcmV2TmV4dDohMSxuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0OiExLGdvdG9DdXJyZW50OiExLGNoYW5nZU1vbnRoOiExLGNoYW5nZVllYXI6ITEseWVhclJhbmdlOlwiYy0xMDpjKzEwXCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6XCIrMTBcIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOlwiZmFzdFwiLGJlZm9yZVNob3dEYXk6bnVsbCxiZWZvcmVTaG93Om51bGwsb25TZWxlY3Q6bnVsbCxvbkNoYW5nZU1vbnRoWWVhcjpudWxsLG9uQ2xvc2U6bnVsbCxudW1iZXJPZk1vbnRoczoxLHNob3dDdXJyZW50QXRQb3M6MCxzdGVwTW9udGhzOjEsc3RlcEJpZ01vbnRoczoxMixhbHRGaWVsZDpcIlwiLGFsdEZvcm1hdDpcIlwiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sdC5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFtcIlwiXSksdGhpcy5yZWdpb25hbC5lbj10LmV4dGVuZCghMCx7fSx0aGlzLnJlZ2lvbmFsW1wiXCJdKSx0aGlzLnJlZ2lvbmFsW1wiZW4tVVNcIl09dC5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1uKHQoXCI8ZGl2IGlkPSdcIit0aGlzLl9tYWluRGl2SWQrXCInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKX1mdW5jdGlvbiBuKGUpe3ZhciBpPVwiYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhXCI7cmV0dXJuIGUub24oXCJtb3VzZW91dFwiLGksZnVuY3Rpb24oKXt0KHRoaXMpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1wcmV2XCIpJiZ0KHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItbmV4dFwiKSYmdCh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlclwiKX0pLm9uKFwibW91c2VvdmVyXCIsaSxvKX1mdW5jdGlvbiBvKCl7dC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihtLmlubGluZT9tLmRwRGl2LnBhcmVudCgpWzBdOm0uaW5wdXRbMF0pfHwodCh0aGlzKS5wYXJlbnRzKFwiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXJcIikuZmluZChcImFcIikucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSx0KHRoaXMpLmFkZENsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1wcmV2XCIpJiZ0KHRoaXMpLmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItbmV4dFwiKSYmdCh0aGlzKS5hZGRDbGFzcyhcInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlclwiKSl9ZnVuY3Rpb24gYShlLGkpe3QuZXh0ZW5kKGUsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKGVbc109aVtzXSk7cmV0dXJuIGV9ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQudmFsKCk7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLGUhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIil9fXQudWk9dC51aXx8e30sdC51aS52ZXJzaW9uPVwiMS4xMi4xXCI7dmFyIGg9MCxsPUFycmF5LnByb3RvdHlwZS5zbGljZTt0LmNsZWFuRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHMsbixvO2ZvcihvPTA7bnVsbCE9KG49aVtvXSk7bysrKXRyeXtzPXQuX2RhdGEobixcImV2ZW50c1wiKSxzJiZzLnJlbW92ZSYmdChuKS50cmlnZ2VySGFuZGxlcihcInJlbW92ZVwiKX1jYXRjaChhKXt9ZShpKX19KHQuY2xlYW5EYXRhKSx0LndpZGdldD1mdW5jdGlvbihlLGkscyl7dmFyIG4sbyxhLHI9e30saD1lLnNwbGl0KFwiLlwiKVswXTtlPWUuc3BsaXQoXCIuXCIpWzFdO3ZhciBsPWgrXCItXCIrZTtyZXR1cm4gc3x8KHM9aSxpPXQuV2lkZ2V0KSx0LmlzQXJyYXkocykmJihzPXQuZXh0ZW5kLmFwcGx5KG51bGwsW3t9XS5jb25jYXQocykpKSx0LmV4cHJbXCI6XCJdW2wudG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24oZSl7cmV0dXJuISF0LmRhdGEoZSxsKX0sdFtoXT10W2hdfHx7fSxuPXRbaF1bZV0sbz10W2hdW2VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NyZWF0ZVdpZGdldD8oYXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KHQsZSksdm9pZCAwKTpuZXcgbyh0LGUpfSx0LmV4dGVuZChvLG4se3ZlcnNpb246cy52ZXJzaW9uLF9wcm90bzp0LmV4dGVuZCh7fSxzKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSxhPW5ldyBpLGEub3B0aW9ucz10LndpZGdldC5leHRlbmQoe30sYS5vcHRpb25zKSx0LmVhY2gocyxmdW5jdGlvbihlLHMpe3JldHVybiB0LmlzRnVuY3Rpb24ocyk/KHJbZV09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGkucHJvdG90eXBlW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBuKHQpe3JldHVybiBpLnByb3RvdHlwZVtlXS5hcHBseSh0aGlzLHQpfXJldHVybiBmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5fc3VwZXIsbz10aGlzLl9zdXBlckFwcGx5O3JldHVybiB0aGlzLl9zdXBlcj10LHRoaXMuX3N1cGVyQXBwbHk9bixlPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPWksdGhpcy5fc3VwZXJBcHBseT1vLGV9fSgpLHZvaWQgMCk6KHJbZV09cyx2b2lkIDApfSksby5wcm90b3R5cGU9dC53aWRnZXQuZXh0ZW5kKGEse3dpZGdldEV2ZW50UHJlZml4Om4/YS53aWRnZXRFdmVudFByZWZpeHx8ZTplfSxyLHtjb25zdHJ1Y3RvcjpvLG5hbWVzcGFjZTpoLHdpZGdldE5hbWU6ZSx3aWRnZXRGdWxsTmFtZTpsfSksbj8odC5lYWNoKG4uX2NoaWxkQ29uc3RydWN0b3JzLGZ1bmN0aW9uKGUsaSl7dmFyIHM9aS5wcm90b3R5cGU7dC53aWRnZXQocy5uYW1lc3BhY2UrXCIuXCIrcy53aWRnZXROYW1lLG8saS5fcHJvdG8pfSksZGVsZXRlIG4uX2NoaWxkQ29uc3RydWN0b3JzKTppLl9jaGlsZENvbnN0cnVjdG9ycy5wdXNoKG8pLHQud2lkZ2V0LmJyaWRnZShlLG8pLG99LHQud2lkZ2V0LmV4dGVuZD1mdW5jdGlvbihlKXtmb3IodmFyIGkscyxuPWwuY2FsbChhcmd1bWVudHMsMSksbz0wLGE9bi5sZW5ndGg7YT5vO28rKylmb3IoaSBpbiBuW29dKXM9bltvXVtpXSxuW29dLmhhc093blByb3BlcnR5KGkpJiZ2b2lkIDAhPT1zJiYoZVtpXT10LmlzUGxhaW5PYmplY3Qocyk/dC5pc1BsYWluT2JqZWN0KGVbaV0pP3Qud2lkZ2V0LmV4dGVuZCh7fSxlW2ldLHMpOnQud2lkZ2V0LmV4dGVuZCh7fSxzKTpzKTtyZXR1cm4gZX0sdC53aWRnZXQuYnJpZGdlPWZ1bmN0aW9uKGUsaSl7dmFyIHM9aS5wcm90b3R5cGUud2lkZ2V0RnVsbE5hbWV8fGU7dC5mbltlXT1mdW5jdGlvbihuKXt2YXIgbz1cInN0cmluZ1wiPT10eXBlb2YgbixhPWwuY2FsbChhcmd1bWVudHMsMSkscj10aGlzO3JldHVybiBvP3RoaXMubGVuZ3RofHxcImluc3RhbmNlXCIhPT1uP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpLG89dC5kYXRhKHRoaXMscyk7cmV0dXJuXCJpbnN0YW5jZVwiPT09bj8ocj1vLCExKTpvP3QuaXNGdW5jdGlvbihvW25dKSYmXCJfXCIhPT1uLmNoYXJBdCgwKT8oaT1vW25dLmFwcGx5KG8sYSksaSE9PW8mJnZvaWQgMCE9PWk/KHI9aSYmaS5qcXVlcnk/ci5wdXNoU3RhY2soaS5nZXQoKSk6aSwhMSk6dm9pZCAwKTp0LmVycm9yKFwibm8gc3VjaCBtZXRob2QgJ1wiK24rXCInIGZvciBcIitlK1wiIHdpZGdldCBpbnN0YW5jZVwiKTp0LmVycm9yKFwiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiBcIitlK1wiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyBcIitcImF0dGVtcHRlZCB0byBjYWxsIG1ldGhvZCAnXCIrbitcIidcIil9KTpyPXZvaWQgMDooYS5sZW5ndGgmJihuPXQud2lkZ2V0LmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQoYSkpKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10LmRhdGEodGhpcyxzKTtlPyhlLm9wdGlvbihufHx7fSksZS5faW5pdCYmZS5faW5pdCgpKTp0LmRhdGEodGhpcyxzLG5ldyBpKG4sdGhpcykpfSkpLHJ9fSx0LldpZGdldD1mdW5jdGlvbigpe30sdC5XaWRnZXQuX2NoaWxkQ29uc3RydWN0b3JzPVtdLHQuV2lkZ2V0LnByb3RvdHlwZT17d2lkZ2V0TmFtZTpcIndpZGdldFwiLHdpZGdldEV2ZW50UHJlZml4OlwiXCIsZGVmYXVsdEVsZW1lbnQ6XCI8ZGl2PlwiLG9wdGlvbnM6e2NsYXNzZXM6e30sZGlzYWJsZWQ6ITEsY3JlYXRlOm51bGx9LF9jcmVhdGVXaWRnZXQ6ZnVuY3Rpb24oZSxpKXtpPXQoaXx8dGhpcy5kZWZhdWx0RWxlbWVudHx8dGhpcylbMF0sdGhpcy5lbGVtZW50PXQoaSksdGhpcy51dWlkPWgrKyx0aGlzLmV2ZW50TmFtZXNwYWNlPVwiLlwiK3RoaXMud2lkZ2V0TmFtZSt0aGlzLnV1aWQsdGhpcy5iaW5kaW5ncz10KCksdGhpcy5ob3ZlcmFibGU9dCgpLHRoaXMuZm9jdXNhYmxlPXQoKSx0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwPXt9LGkhPT10aGlzJiYodC5kYXRhKGksdGhpcy53aWRnZXRGdWxsTmFtZSx0aGlzKSx0aGlzLl9vbighMCx0aGlzLmVsZW1lbnQse3JlbW92ZTpmdW5jdGlvbih0KXt0LnRhcmdldD09PWkmJnRoaXMuZGVzdHJveSgpfX0pLHRoaXMuZG9jdW1lbnQ9dChpLnN0eWxlP2kub3duZXJEb2N1bWVudDppLmRvY3VtZW50fHxpKSx0aGlzLndpbmRvdz10KHRoaXMuZG9jdW1lbnRbMF0uZGVmYXVsdFZpZXd8fHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksdGhpcy5vcHRpb25zPXQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLGUpLHRoaXMuX2NyZWF0ZSgpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl90cmlnZ2VyKFwiY3JlYXRlXCIsbnVsbCx0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3JldHVybnt9fSxfZ2V0Q3JlYXRlRXZlbnREYXRhOnQubm9vcCxfY3JlYXRlOnQubm9vcCxfaW5pdDp0Lm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fZGVzdHJveSgpLHQuZWFjaCh0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwLGZ1bmN0aW9uKHQsaSl7ZS5fcmVtb3ZlQ2xhc3MoaSx0KX0pLHRoaXMuZWxlbWVudC5vZmYodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlRGF0YSh0aGlzLndpZGdldEZ1bGxOYW1lKSx0aGlzLndpZGdldCgpLm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVBdHRyKFwiYXJpYS1kaXNhYmxlZFwiKSx0aGlzLmJpbmRpbmdzLm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKX0sX2Rlc3Ryb3k6dC5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPWU7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWlmKGE9e30scz1lLnNwbGl0KFwiLlwiKSxlPXMuc2hpZnQoKSxzLmxlbmd0aCl7Zm9yKG49YVtlXT10LndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zW2VdKSxvPTA7cy5sZW5ndGgtMT5vO28rKyluW3Nbb11dPW5bc1tvXV18fHt9LG49bltzW29dXTtpZihlPXMucG9wKCksMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PW5bZV0/bnVsbDpuW2VdO25bZV09aX1lbHNle2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnNbZV0/bnVsbDp0aGlzLm9wdGlvbnNbZV07YVtlXT1pfXJldHVybiB0aGlzLl9zZXRPcHRpb25zKGEpLHRoaXN9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlIGluIHQpdGhpcy5fc2V0T3B0aW9uKGUsdFtlXSk7cmV0dXJuIHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm5cImNsYXNzZXNcIj09PXQmJnRoaXMuX3NldE9wdGlvbkNsYXNzZXMoZSksdGhpcy5vcHRpb25zW3RdPWUsXCJkaXNhYmxlZFwiPT09dCYmdGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoZSksdGhpc30sX3NldE9wdGlvbkNsYXNzZXM6ZnVuY3Rpb24oZSl7dmFyIGkscyxuO2ZvcihpIGluIGUpbj10aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwW2ldLGVbaV0hPT10aGlzLm9wdGlvbnMuY2xhc3Nlc1tpXSYmbiYmbi5sZW5ndGgmJihzPXQobi5nZXQoKSksdGhpcy5fcmVtb3ZlQ2xhc3MobixpKSxzLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMoe2VsZW1lbnQ6cyxrZXlzOmksY2xhc3NlczplLGFkZDohMH0pKSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl90b2dnbGVDbGFzcyh0aGlzLndpZGdldCgpLHRoaXMud2lkZ2V0RnVsbE5hbWUrXCItZGlzYWJsZWRcIixudWxsLCEhdCksdCYmKHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaG92ZXJhYmxlLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmZvY3VzYWJsZSxudWxsLFwidWktc3RhdGUtZm9jdXNcIikpfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ITF9KX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMH0pfSxfY2xhc3NlczpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKGksbyl7dmFyIGEscjtmb3Iocj0wO2kubGVuZ3RoPnI7cisrKWE9bi5jbGFzc2VzRWxlbWVudExvb2t1cFtpW3JdXXx8dCgpLGE9ZS5hZGQ/dCh0LnVuaXF1ZShhLmdldCgpLmNvbmNhdChlLmVsZW1lbnQuZ2V0KCkpKSk6dChhLm5vdChlLmVsZW1lbnQpLmdldCgpKSxuLmNsYXNzZXNFbGVtZW50TG9va3VwW2lbcl1dPWEscy5wdXNoKGlbcl0pLG8mJmUuY2xhc3Nlc1tpW3JdXSYmcy5wdXNoKGUuY2xhc3Nlc1tpW3JdXSl9dmFyIHM9W10sbj10aGlzO3JldHVybiBlPXQuZXh0ZW5kKHtlbGVtZW50OnRoaXMuZWxlbWVudCxjbGFzc2VzOnRoaXMub3B0aW9ucy5jbGFzc2VzfHx7fX0sZSksdGhpcy5fb24oZS5lbGVtZW50LHtyZW1vdmU6XCJfdW50cmFja0NsYXNzZXNFbGVtZW50XCJ9KSxlLmtleXMmJmkoZS5rZXlzLm1hdGNoKC9cXFMrL2cpfHxbXSwhMCksZS5leHRyYSYmaShlLmV4dHJhLm1hdGNoKC9cXFMrL2cpfHxbXSkscy5qb2luKFwiIFwiKX0sX3VudHJhY2tDbGFzc2VzRWxlbWVudDpmdW5jdGlvbihlKXt2YXIgaT10aGlzO3QuZWFjaChpLmNsYXNzZXNFbGVtZW50TG9va3VwLGZ1bmN0aW9uKHMsbil7LTEhPT10LmluQXJyYXkoZS50YXJnZXQsbikmJihpLmNsYXNzZXNFbGVtZW50TG9va3VwW3NdPXQobi5ub3QoZS50YXJnZXQpLmdldCgpKSl9KX0sX3JlbW92ZUNsYXNzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fdG9nZ2xlQ2xhc3ModCxlLGksITEpfSxfYWRkQ2xhc3M6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLl90b2dnbGVDbGFzcyh0LGUsaSwhMCl9LF90b2dnbGVDbGFzczpmdW5jdGlvbih0LGUsaSxzKXtzPVwiYm9vbGVhblwiPT10eXBlb2Ygcz9zOmk7dmFyIG49XCJzdHJpbmdcIj09dHlwZW9mIHR8fG51bGw9PT10LG89e2V4dHJhOm4/ZTppLGtleXM6bj90OmUsZWxlbWVudDpuP3RoaXMuZWxlbWVudDp0LGFkZDpzfTtyZXR1cm4gby5lbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMuX2NsYXNzZXMobykscyksdGhpc30sX29uOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvPXRoaXM7XCJib29sZWFuXCIhPXR5cGVvZiBlJiYocz1pLGk9ZSxlPSExKSxzPyhpPW49dChpKSx0aGlzLmJpbmRpbmdzPXRoaXMuYmluZGluZ3MuYWRkKGkpKToocz1pLGk9dGhpcy5lbGVtZW50LG49dGhpcy53aWRnZXQoKSksdC5lYWNoKHMsZnVuY3Rpb24ocyxhKXtmdW5jdGlvbiByKCl7cmV0dXJuIGV8fG8ub3B0aW9ucy5kaXNhYmxlZCE9PSEwJiYhdCh0aGlzKS5oYXNDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpPyhcInN0cmluZ1wiPT10eXBlb2YgYT9vW2FdOmEpLmFwcGx5KG8sYXJndW1lbnRzKTp2b2lkIDB9XCJzdHJpbmdcIiE9dHlwZW9mIGEmJihyLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8ci5ndWlkfHx0Lmd1aWQrKyk7dmFyIGg9cy5tYXRjaCgvXihbXFx3Oi1dKilcXHMqKC4qKSQvKSxsPWhbMV0rby5ldmVudE5hbWVzcGFjZSxjPWhbMl07Yz9uLm9uKGwsYyxyKTppLm9uKGwscil9KX0sX29mZjpmdW5jdGlvbihlLGkpe2k9KGl8fFwiXCIpLnNwbGl0KFwiIFwiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrXCIgXCIpK3RoaXMuZXZlbnROYW1lc3BhY2UsZS5vZmYoaSkub2ZmKGkpLHRoaXMuYmluZGluZ3M9dCh0aGlzLmJpbmRpbmdzLm5vdChlKS5nZXQoKSksdGhpcy5mb2N1c2FibGU9dCh0aGlzLmZvY3VzYWJsZS5ub3QoZSkuZ2V0KCkpLHRoaXMuaG92ZXJhYmxlPXQodGhpcy5ob3ZlcmFibGUubm90KGUpLmdldCgpKX0sX2RlbGF5OmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSgpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgdD9zW3RdOnQpLmFwcGx5KHMsYXJndW1lbnRzKX12YXIgcz10aGlzO3JldHVybiBzZXRUaW1lb3V0KGksZXx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24oZSl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKGUpLHRoaXMuX29uKGUse21vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7dGhpcy5fYWRkQ2xhc3ModChlLmN1cnJlbnRUYXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXt0aGlzLl9yZW1vdmVDbGFzcyh0KGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpfX0pfSxfZm9jdXNhYmxlOmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNhYmxlPXRoaXMuZm9jdXNhYmxlLmFkZChlKSx0aGlzLl9vbihlLHtmb2N1c2luOmZ1bmN0aW9uKGUpe3RoaXMuX2FkZENsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtZm9jdXNcIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlbW92ZUNsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtZm9jdXNcIil9fSl9LF90cmlnZ2VyOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLGE9dGhpcy5vcHRpb25zW2VdO2lmKHM9c3x8e30saT10LkV2ZW50KGkpLGkudHlwZT0oZT09PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/ZTp0aGlzLndpZGdldEV2ZW50UHJlZml4K2UpLnRvTG93ZXJDYXNlKCksaS50YXJnZXQ9dGhpcy5lbGVtZW50WzBdLG89aS5vcmlnaW5hbEV2ZW50KWZvcihuIGluIG8pbiBpbiBpfHwoaVtuXT1vW25dKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIoaSxzKSwhKHQuaXNGdW5jdGlvbihhKSYmYS5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2ldLmNvbmNhdChzKSk9PT0hMXx8aS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSx0LmVhY2goe3Nob3c6XCJmYWRlSW5cIixoaWRlOlwiZmFkZU91dFwifSxmdW5jdGlvbihlLGkpe3QuV2lkZ2V0LnByb3RvdHlwZVtcIl9cIitlXT1mdW5jdGlvbihzLG4sbyl7XCJzdHJpbmdcIj09dHlwZW9mIG4mJihuPXtlZmZlY3Q6bn0pO3ZhciBhLHI9bj9uPT09ITB8fFwibnVtYmVyXCI9PXR5cGVvZiBuP2k6bi5lZmZlY3R8fGk6ZTtuPW58fHt9LFwibnVtYmVyXCI9PXR5cGVvZiBuJiYobj17ZHVyYXRpb246bn0pLGE9IXQuaXNFbXB0eU9iamVjdChuKSxuLmNvbXBsZXRlPW8sbi5kZWxheSYmcy5kZWxheShuLmRlbGF5KSxhJiZ0LmVmZmVjdHMmJnQuZWZmZWN0cy5lZmZlY3Rbcl0/c1tlXShuKTpyIT09ZSYmc1tyXT9zW3JdKG4uZHVyYXRpb24sbi5lYXNpbmcsbyk6cy5xdWV1ZShmdW5jdGlvbihpKXt0KHRoaXMpW2VdKCksbyYmby5jYWxsKHNbMF0pLGkoKX0pfX0pLHQud2lkZ2V0LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGUsaSl7cmV0dXJuW3BhcnNlRmxvYXQodFswXSkqKHUudGVzdCh0WzBdKT9lLzEwMDoxKSxwYXJzZUZsb2F0KHRbMV0pKih1LnRlc3QodFsxXSk/aS8xMDA6MSldfWZ1bmN0aW9uIGkoZSxpKXtyZXR1cm4gcGFyc2VJbnQodC5jc3MoZSxpKSwxMCl8fDB9ZnVuY3Rpb24gcyhlKXt2YXIgaT1lWzBdO3JldHVybiA5PT09aS5ub2RlVHlwZT97d2lkdGg6ZS53aWR0aCgpLGhlaWdodDplLmhlaWdodCgpLG9mZnNldDp7dG9wOjAsbGVmdDowfX06dC5pc1dpbmRvdyhpKT97d2lkdGg6ZS53aWR0aCgpLGhlaWdodDplLmhlaWdodCgpLG9mZnNldDp7dG9wOmUuc2Nyb2xsVG9wKCksbGVmdDplLnNjcm9sbExlZnQoKX19OmkucHJldmVudERlZmF1bHQ/e3dpZHRoOjAsaGVpZ2h0OjAsb2Zmc2V0Ont0b3A6aS5wYWdlWSxsZWZ0OmkucGFnZVh9fTp7d2lkdGg6ZS5vdXRlcldpZHRoKCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoKSxvZmZzZXQ6ZS5vZmZzZXQoKX19dmFyIG4sbz1NYXRoLm1heCxhPU1hdGguYWJzLHI9L2xlZnR8Y2VudGVyfHJpZ2h0LyxoPS90b3B8Y2VudGVyfGJvdHRvbS8sbD0vW1xcK1xcLV1cXGQrKFxcLltcXGRdKyk/JT8vLGM9L15cXHcrLyx1PS8lJC8sZD10LmZuLnBvc2l0aW9uO3QucG9zaXRpb249e3Njcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09bilyZXR1cm4gbjt2YXIgZSxpLHM9dChcIjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NTBweDtoZWlnaHQ6NTBweDtvdmVyZmxvdzpoaWRkZW47Jz48ZGl2IHN0eWxlPSdoZWlnaHQ6MTAwcHg7d2lkdGg6YXV0bzsnPjwvZGl2PjwvZGl2PlwiKSxvPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gdChcImJvZHlcIikuYXBwZW5kKHMpLGU9by5vZmZzZXRXaWR0aCxzLmNzcyhcIm92ZXJmbG93XCIsXCJzY3JvbGxcIiksaT1vLm9mZnNldFdpZHRoLGU9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49ZS1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKGUpe3ZhciBpPWUuaXNXaW5kb3d8fGUuaXNEb2N1bWVudD9cIlwiOmUuZWxlbWVudC5jc3MoXCJvdmVyZmxvdy14XCIpLHM9ZS5pc1dpbmRvd3x8ZS5pc0RvY3VtZW50P1wiXCI6ZS5lbGVtZW50LmNzcyhcIm92ZXJmbG93LXlcIiksbj1cInNjcm9sbFwiPT09aXx8XCJhdXRvXCI9PT1pJiZlLndpZHRoPGUuZWxlbWVudFswXS5zY3JvbGxXaWR0aCxvPVwic2Nyb2xsXCI9PT1zfHxcImF1dG9cIj09PXMmJmUuaGVpZ2h0PGUuZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ7cmV0dXJue3dpZHRoOm8/dC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjAsaGVpZ2h0Om4/dC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjB9fSxnZXRXaXRoaW5JbmZvOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZXx8d2luZG93KSxzPXQuaXNXaW5kb3coaVswXSksbj0hIWlbMF0mJjk9PT1pWzBdLm5vZGVUeXBlLG89IXMmJiFuO3JldHVybntlbGVtZW50OmksaXNXaW5kb3c6cyxpc0RvY3VtZW50Om4sb2Zmc2V0Om8/dChlKS5vZmZzZXQoKTp7bGVmdDowLHRvcDowfSxzY3JvbGxMZWZ0Omkuc2Nyb2xsTGVmdCgpLHNjcm9sbFRvcDppLnNjcm9sbFRvcCgpLHdpZHRoOmkub3V0ZXJXaWR0aCgpLGhlaWdodDppLm91dGVySGVpZ2h0KCl9fX0sdC5mbi5wb3NpdGlvbj1mdW5jdGlvbihuKXtpZighbnx8IW4ub2YpcmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249dC5leHRlbmQoe30sbik7dmFyIHUscCxmLGcsbSxfLHY9dChuLm9mKSxiPXQucG9zaXRpb24uZ2V0V2l0aGluSW5mbyhuLndpdGhpbikseT10LnBvc2l0aW9uLmdldFNjcm9sbEluZm8oYiksdz0obi5jb2xsaXNpb258fFwiZmxpcFwiKS5zcGxpdChcIiBcIiksaz17fTtyZXR1cm4gXz1zKHYpLHZbMF0ucHJldmVudERlZmF1bHQmJihuLmF0PVwibGVmdCB0b3BcIikscD1fLndpZHRoLGY9Xy5oZWlnaHQsZz1fLm9mZnNldCxtPXQuZXh0ZW5kKHt9LGcpLHQuZWFjaChbXCJteVwiLFwiYXRcIl0sZnVuY3Rpb24oKXt2YXIgdCxlLGk9KG5bdGhpc118fFwiXCIpLnNwbGl0KFwiIFwiKTsxPT09aS5sZW5ndGgmJihpPXIudGVzdChpWzBdKT9pLmNvbmNhdChbXCJjZW50ZXJcIl0pOmgudGVzdChpWzBdKT9bXCJjZW50ZXJcIl0uY29uY2F0KGkpOltcImNlbnRlclwiLFwiY2VudGVyXCJdKSxpWzBdPXIudGVzdChpWzBdKT9pWzBdOlwiY2VudGVyXCIsaVsxXT1oLnRlc3QoaVsxXSk/aVsxXTpcImNlbnRlclwiLHQ9bC5leGVjKGlbMF0pLGU9bC5leGVjKGlbMV0pLGtbdGhpc109W3Q/dFswXTowLGU/ZVswXTowXSxuW3RoaXNdPVtjLmV4ZWMoaVswXSlbMF0sYy5leGVjKGlbMV0pWzBdXX0pLDE9PT13Lmxlbmd0aCYmKHdbMV09d1swXSksXCJyaWdodFwiPT09bi5hdFswXT9tLmxlZnQrPXA6XCJjZW50ZXJcIj09PW4uYXRbMF0mJihtLmxlZnQrPXAvMiksXCJib3R0b21cIj09PW4uYXRbMV0/bS50b3ArPWY6XCJjZW50ZXJcIj09PW4uYXRbMV0mJihtLnRvcCs9Zi8yKSx1PWUoay5hdCxwLGYpLG0ubGVmdCs9dVswXSxtLnRvcCs9dVsxXSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcyxyLGg9dCh0aGlzKSxsPWgub3V0ZXJXaWR0aCgpLGM9aC5vdXRlckhlaWdodCgpLGQ9aSh0aGlzLFwibWFyZ2luTGVmdFwiKSxfPWkodGhpcyxcIm1hcmdpblRvcFwiKSx4PWwrZCtpKHRoaXMsXCJtYXJnaW5SaWdodFwiKSt5LndpZHRoLEM9YytfK2kodGhpcyxcIm1hcmdpbkJvdHRvbVwiKSt5LmhlaWdodCxEPXQuZXh0ZW5kKHt9LG0pLEk9ZShrLm15LGgub3V0ZXJXaWR0aCgpLGgub3V0ZXJIZWlnaHQoKSk7XCJyaWdodFwiPT09bi5teVswXT9ELmxlZnQtPWw6XCJjZW50ZXJcIj09PW4ubXlbMF0mJihELmxlZnQtPWwvMiksXCJib3R0b21cIj09PW4ubXlbMV0/RC50b3AtPWM6XCJjZW50ZXJcIj09PW4ubXlbMV0mJihELnRvcC09Yy8yKSxELmxlZnQrPUlbMF0sRC50b3ArPUlbMV0scz17bWFyZ2luTGVmdDpkLG1hcmdpblRvcDpffSx0LmVhY2goW1wibGVmdFwiLFwidG9wXCJdLGZ1bmN0aW9uKGUsaSl7dC51aS5wb3NpdGlvblt3W2VdXSYmdC51aS5wb3NpdGlvblt3W2VdXVtpXShELHt0YXJnZXRXaWR0aDpwLHRhcmdldEhlaWdodDpmLGVsZW1XaWR0aDpsLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpzLGNvbGxpc2lvbldpZHRoOngsY29sbGlzaW9uSGVpZ2h0OkMsb2Zmc2V0Olt1WzBdK0lbMF0sdVsxXStJWzFdXSxteTpuLm15LGF0Om4uYXQsd2l0aGluOmIsZWxlbTpofSl9KSxuLnVzaW5nJiYocj1mdW5jdGlvbih0KXt2YXIgZT1nLmxlZnQtRC5sZWZ0LGk9ZStwLWwscz1nLnRvcC1ELnRvcCxyPXMrZi1jLHU9e3RhcmdldDp7ZWxlbWVudDp2LGxlZnQ6Zy5sZWZ0LHRvcDpnLnRvcCx3aWR0aDpwLGhlaWdodDpmfSxlbGVtZW50OntlbGVtZW50OmgsbGVmdDpELmxlZnQsdG9wOkQudG9wLHdpZHRoOmwsaGVpZ2h0OmN9LGhvcml6b250YWw6MD5pP1wibGVmdFwiOmU+MD9cInJpZ2h0XCI6XCJjZW50ZXJcIix2ZXJ0aWNhbDowPnI/XCJ0b3BcIjpzPjA/XCJib3R0b21cIjpcIm1pZGRsZVwifTtsPnAmJnA+YShlK2kpJiYodS5ob3Jpem9udGFsPVwiY2VudGVyXCIpLGM+ZiYmZj5hKHMrcikmJih1LnZlcnRpY2FsPVwibWlkZGxlXCIpLHUuaW1wb3J0YW50PW8oYShlKSxhKGkpKT5vKGEocyksYShyKSk/XCJob3Jpem9udGFsXCI6XCJ2ZXJ0aWNhbFwiLG4udXNpbmcuY2FsbCh0aGlzLHQsdSl9KSxoLm9mZnNldCh0LmV4dGVuZChELHt1c2luZzpyfSkpfSl9LHQudWkucG9zaXRpb249e2ZpdDp7bGVmdDpmdW5jdGlvbih0LGUpe3ZhciBpLHM9ZS53aXRoaW4sbj1zLmlzV2luZG93P3Muc2Nyb2xsTGVmdDpzLm9mZnNldC5sZWZ0LGE9cy53aWR0aCxyPXQubGVmdC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsaD1uLXIsbD1yK2UuY29sbGlzaW9uV2lkdGgtYS1uO2UuY29sbGlzaW9uV2lkdGg+YT9oPjAmJjA+PWw/KGk9dC5sZWZ0K2grZS5jb2xsaXNpb25XaWR0aC1hLW4sdC5sZWZ0Kz1oLWkpOnQubGVmdD1sPjAmJjA+PWg/bjpoPmw/bithLWUuY29sbGlzaW9uV2lkdGg6bjpoPjA/dC5sZWZ0Kz1oOmw+MD90LmxlZnQtPWw6dC5sZWZ0PW8odC5sZWZ0LXIsdC5sZWZ0KX0sdG9wOmZ1bmN0aW9uKHQsZSl7dmFyIGkscz1lLndpdGhpbixuPXMuaXNXaW5kb3c/cy5zY3JvbGxUb3A6cy5vZmZzZXQudG9wLGE9ZS53aXRoaW4uaGVpZ2h0LHI9dC50b3AtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsaD1uLXIsbD1yK2UuY29sbGlzaW9uSGVpZ2h0LWEtbjtlLmNvbGxpc2lvbkhlaWdodD5hP2g+MCYmMD49bD8oaT10LnRvcCtoK2UuY29sbGlzaW9uSGVpZ2h0LWEtbix0LnRvcCs9aC1pKTp0LnRvcD1sPjAmJjA+PWg/bjpoPmw/bithLWUuY29sbGlzaW9uSGVpZ2h0Om46aD4wP3QudG9wKz1oOmw+MD90LnRvcC09bDp0LnRvcD1vKHQudG9wLXIsdC50b3ApfX0sZmxpcDp7bGVmdDpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbj1lLndpdGhpbixvPW4ub2Zmc2V0LmxlZnQrbi5zY3JvbGxMZWZ0LHI9bi53aWR0aCxoPW4uaXNXaW5kb3c/bi5zY3JvbGxMZWZ0Om4ub2Zmc2V0LmxlZnQsbD10LmxlZnQtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGM9bC1oLHU9bCtlLmNvbGxpc2lvbldpZHRoLXItaCxkPVwibGVmdFwiPT09ZS5teVswXT8tZS5lbGVtV2lkdGg6XCJyaWdodFwiPT09ZS5teVswXT9lLmVsZW1XaWR0aDowLHA9XCJsZWZ0XCI9PT1lLmF0WzBdP2UudGFyZ2V0V2lkdGg6XCJyaWdodFwiPT09ZS5hdFswXT8tZS50YXJnZXRXaWR0aDowLGY9LTIqZS5vZmZzZXRbMF07MD5jPyhpPXQubGVmdCtkK3ArZitlLmNvbGxpc2lvbldpZHRoLXItbywoMD5pfHxhKGMpPmkpJiYodC5sZWZ0Kz1kK3ArZikpOnU+MCYmKHM9dC5sZWZ0LWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtkK3ArZi1oLChzPjB8fHU+YShzKSkmJih0LmxlZnQrPWQrcCtmKSl9LHRvcDpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbj1lLndpdGhpbixvPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxyPW4uaGVpZ2h0LGg9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsbD10LnRvcC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxjPWwtaCx1PWwrZS5jb2xsaXNpb25IZWlnaHQtci1oLGQ9XCJ0b3BcIj09PWUubXlbMV0scD1kPy1lLmVsZW1IZWlnaHQ6XCJib3R0b21cIj09PWUubXlbMV0/ZS5lbGVtSGVpZ2h0OjAsZj1cInRvcFwiPT09ZS5hdFsxXT9lLnRhcmdldEhlaWdodDpcImJvdHRvbVwiPT09ZS5hdFsxXT8tZS50YXJnZXRIZWlnaHQ6MCxnPS0yKmUub2Zmc2V0WzFdOzA+Yz8ocz10LnRvcCtwK2YrZytlLmNvbGxpc2lvbkhlaWdodC1yLW8sKDA+c3x8YShjKT5zKSYmKHQudG9wKz1wK2YrZykpOnU+MCYmKGk9dC50b3AtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3ArcCtmK2ctaCwoaT4wfHx1PmEoaSkpJiYodC50b3ArPXArZitnKSl9fSxmbGlwZml0OntsZWZ0OmZ1bmN0aW9uKCl7dC51aS5wb3NpdGlvbi5mbGlwLmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0b3A6ZnVuY3Rpb24oKXt0LnVpLnBvc2l0aW9uLmZsaXAudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LnVpLnBvc2l0aW9uLmZpdC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19fSgpLHQudWkucG9zaXRpb24sdC5leHRlbmQodC5leHByW1wiOlwiXSx7ZGF0YTp0LmV4cHIuY3JlYXRlUHNldWRvP3QuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhdC5kYXRhKGksZSl9fSk6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiEhdC5kYXRhKGUsc1szXSl9fSksdC5mbi5leHRlbmQoe2Rpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgdD1cIm9uc2VsZWN0c3RhcnRcImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik/XCJzZWxlY3RzdGFydFwiOlwibW91c2Vkb3duXCI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24odCtcIi51aS1kaXNhYmxlU2VsZWN0aW9uXCIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZihcIi51aS1kaXNhYmxlU2VsZWN0aW9uXCIpfX0pO3ZhciBjPVwidWktZWZmZWN0cy1cIix1PVwidWktZWZmZWN0cy1zdHlsZVwiLGQ9XCJ1aS1lZmZlY3RzLWFuaW1hdGVkXCIscD10O3QuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlLGkpe3ZhciBzPXVbZS50eXBlXXx8e307cmV0dXJuIG51bGw9PXQ/aXx8IWUuZGVmP251bGw6ZS5kZWY6KHQ9cy5mbG9vcj9+fnQ6cGFyc2VGbG9hdCh0KSxpc05hTih0KT9lLmRlZjpzLm1vZD8odCtzLm1vZCklcy5tb2Q6MD50PzA6dD5zLm1heD9zLm1heDp0KX1mdW5jdGlvbiBzKGkpe3ZhciBzPWwoKSxuPXMuX3JnYmE9W107cmV0dXJuIGk9aS50b0xvd2VyQ2FzZSgpLGYoaCxmdW5jdGlvbih0LG8pe3ZhciBhLHI9by5yZS5leGVjKGkpLGg9ciYmby5wYXJzZShyKSxsPW8uc3BhY2V8fFwicmdiYVwiO3JldHVybiBoPyhhPXNbbF0oaCksc1tjW2xdLmNhY2hlXT1hW2NbbF0uY2FjaGVdLG49cy5fcmdiYT1hLl9yZ2JhLCExKTplfSksbi5sZW5ndGg/KFwiMCwwLDAsMFwiPT09bi5qb2luKCkmJnQuZXh0ZW5kKG4sby50cmFuc3BhcmVudCkscyk6b1tpXX1mdW5jdGlvbiBuKHQsZSxpKXtyZXR1cm4gaT0oaSsxKSUxLDE+NippP3QrNiooZS10KSppOjE+MippP2U6Mj4zKmk/dCs2KihlLXQpKigyLzMtaSk6dH12YXIgbyxhPVwiYmFja2dyb3VuZENvbG9yIGJvcmRlckJvdHRvbUNvbG9yIGJvcmRlckxlZnRDb2xvciBib3JkZXJSaWdodENvbG9yIGJvcmRlclRvcENvbG9yIGNvbG9yIGNvbHVtblJ1bGVDb2xvciBvdXRsaW5lQ29sb3IgdGV4dERlY29yYXRpb25Db2xvciB0ZXh0RW1waGFzaXNDb2xvclwiLHI9L14oW1xcLStdKT1cXHMqKFxcZCtcXC4/XFxkKikvLGg9W3tyZTovcmdiYT9cXChcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bdFsxXSx0WzJdLHRbM10sdFs0XV19fSx7cmU6L3JnYmE/XFwoXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuWzIuNTUqdFsxXSwyLjU1KnRbMl0sMi41NSp0WzNdLHRbNF1dfX0se3JlOi8jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bcGFyc2VJbnQodFsxXSwxNikscGFyc2VJbnQodFsyXSwxNikscGFyc2VJbnQodFszXSwxNildfX0se3JlOi8jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bcGFyc2VJbnQodFsxXSt0WzFdLDE2KSxwYXJzZUludCh0WzJdK3RbMl0sMTYpLHBhcnNlSW50KHRbM10rdFszXSwxNildfX0se3JlOi9oc2xhP1xcKFxccyooXFxkKyg/OlxcLlxcZCspPylcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqKD86LFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqKT9cXCkvLHNwYWNlOlwiaHNsYVwiLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblt0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF1dfX1dLGw9dC5Db2xvcj1mdW5jdGlvbihlLGkscyxuKXtyZXR1cm4gbmV3IHQuQ29sb3IuZm4ucGFyc2UoZSxpLHMsbil9LGM9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6XCJieXRlXCJ9LGdyZWVuOntpZHg6MSx0eXBlOlwiYnl0ZVwifSxibHVlOntpZHg6Mix0eXBlOlwiYnl0ZVwifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6XCJkZWdyZWVzXCJ9LHNhdHVyYXRpb246e2lkeDoxLHR5cGU6XCJwZXJjZW50XCJ9LGxpZ2h0bmVzczp7aWR4OjIsdHlwZTpcInBlcmNlbnRcIn19fX0sdT17XCJieXRlXCI6e2Zsb29yOiEwLG1heDoyNTV9LHBlcmNlbnQ6e21heDoxfSxkZWdyZWVzOnttb2Q6MzYwLGZsb29yOiEwfX0sZD1sLnN1cHBvcnQ9e30scD10KFwiPHA+XCIpWzBdLGY9dC5lYWNoO3Auc3R5bGUuY3NzVGV4dD1cImJhY2tncm91bmQtY29sb3I6cmdiYSgxLDEsMSwuNSlcIixkLnJnYmE9cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZihcInJnYmFcIik+LTEsZihjLGZ1bmN0aW9uKHQsZSl7ZS5jYWNoZT1cIl9cIit0LGUucHJvcHMuYWxwaGE9e2lkeDozLHR5cGU6XCJwZXJjZW50XCIsZGVmOjF9fSksbC5mbj10LmV4dGVuZChsLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24obixhLHIsaCl7aWYobj09PWUpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7KG4uanF1ZXJ5fHxuLm5vZGVUeXBlKSYmKG49dChuKS5jc3MoYSksYT1lKTt2YXIgdT10aGlzLGQ9dC50eXBlKG4pLHA9dGhpcy5fcmdiYT1bXTtyZXR1cm4gYSE9PWUmJihuPVtuLGEscixoXSxkPVwiYXJyYXlcIiksXCJzdHJpbmdcIj09PWQ/dGhpcy5wYXJzZShzKG4pfHxvLl9kZWZhdWx0KTpcImFycmF5XCI9PT1kPyhmKGMucmdiYS5wcm9wcyxmdW5jdGlvbih0LGUpe3BbZS5pZHhdPWkobltlLmlkeF0sZSl9KSx0aGlzKTpcIm9iamVjdFwiPT09ZD8obiBpbnN0YW5jZW9mIGw/ZihjLGZ1bmN0aW9uKHQsZSl7bltlLmNhY2hlXSYmKHVbZS5jYWNoZV09bltlLmNhY2hlXS5zbGljZSgpKX0pOmYoYyxmdW5jdGlvbihlLHMpe3ZhciBvPXMuY2FjaGU7ZihzLnByb3BzLGZ1bmN0aW9uKHQsZSl7aWYoIXVbb10mJnMudG8pe2lmKFwiYWxwaGFcIj09PXR8fG51bGw9PW5bdF0pcmV0dXJuO3Vbb109cy50byh1Ll9yZ2JhKX11W29dW2UuaWR4XT1pKG5bdF0sZSwhMCl9KSx1W29dJiYwPnQuaW5BcnJheShudWxsLHVbb10uc2xpY2UoMCwzKSkmJih1W29dWzNdPTEscy5mcm9tJiYodS5fcmdiYT1zLmZyb20odVtvXSkpKX0pLHRoaXMpOmV9LGlzOmZ1bmN0aW9uKHQpe3ZhciBpPWwodCkscz0hMCxuPXRoaXM7cmV0dXJuIGYoYyxmdW5jdGlvbih0LG8pe3ZhciBhLHI9aVtvLmNhY2hlXTtyZXR1cm4gciYmKGE9bltvLmNhY2hlXXx8by50byYmby50byhuLl9yZ2JhKXx8W10sZihvLnByb3BzLGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG51bGwhPXJbaS5pZHhdP3M9cltpLmlkeF09PT1hW2kuaWR4XTplfSkpLHN9KSxzfSxfc3BhY2U6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXM7cmV0dXJuIGYoYyxmdW5jdGlvbihpLHMpe2Vbcy5jYWNoZV0mJnQucHVzaChpKX0pLHQucG9wKCl9LHRyYW5zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcz1sKHQpLG49cy5fc3BhY2UoKSxvPWNbbl0sYT0wPT09dGhpcy5hbHBoYSgpP2woXCJ0cmFuc3BhcmVudFwiKTp0aGlzLHI9YVtvLmNhY2hlXXx8by50byhhLl9yZ2JhKSxoPXIuc2xpY2UoKTtyZXR1cm4gcz1zW28uY2FjaGVdLGYoby5wcm9wcyxmdW5jdGlvbih0LG4pe3ZhciBvPW4uaWR4LGE9cltvXSxsPXNbb10sYz11W24udHlwZV18fHt9O251bGwhPT1sJiYobnVsbD09PWE/aFtvXT1sOihjLm1vZCYmKGwtYT5jLm1vZC8yP2ErPWMubW9kOmEtbD5jLm1vZC8yJiYoYS09Yy5tb2QpKSxoW29dPWkoKGwtYSkqZSthLG4pKSl9KSx0aGlzW25dKGgpfSxibGVuZDpmdW5jdGlvbihlKXtpZigxPT09dGhpcy5fcmdiYVszXSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpLG49bChlKS5fcmdiYTtyZXR1cm4gbCh0Lm1hcChpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEtcykqbltlXStzKnR9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciBlPVwicmdiYShcIixpPXQubWFwKHRoaXMuX3JnYmEsZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9lPjI/MTowOnR9KTtyZXR1cm4gMT09PWlbM10mJihpLnBvcCgpLGU9XCJyZ2IoXCIpLGUraS5qb2luKCkrXCIpXCJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciBlPVwiaHNsYShcIixpPXQubWFwKHRoaXMuaHNsYSgpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PWU+Mj8xOjApLGUmJjM+ZSYmKHQ9TWF0aC5yb3VuZCgxMDAqdCkrXCIlXCIpLHR9KTtyZXR1cm4gMT09PWlbM10mJihpLnBvcCgpLGU9XCJoc2woXCIpLGUraS5qb2luKCkrXCIpXCJ9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX3JnYmEuc2xpY2UoKSxzPWkucG9wKCk7cmV0dXJuIGUmJmkucHVzaCh+figyNTUqcykpLFwiI1wiK3QubWFwKGksZnVuY3Rpb24odCl7cmV0dXJuIHQ9KHR8fDApLnRvU3RyaW5nKDE2KSwxPT09dC5sZW5ndGg/XCIwXCIrdDp0fSkuam9pbihcIlwiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX3JnYmFbM10/XCJ0cmFuc3BhcmVudFwiOnRoaXMudG9SZ2JhU3RyaW5nKCl9fSksbC5mbi5wYXJzZS5wcm90b3R5cGU9bC5mbixjLmhzbGEudG89ZnVuY3Rpb24odCl7aWYobnVsbD09dFswXXx8bnVsbD09dFsxXXx8bnVsbD09dFsyXSlyZXR1cm5bbnVsbCxudWxsLG51bGwsdFszXV07dmFyIGUsaSxzPXRbMF0vMjU1LG49dFsxXS8yNTUsbz10WzJdLzI1NSxhPXRbM10scj1NYXRoLm1heChzLG4sbyksaD1NYXRoLm1pbihzLG4sbyksbD1yLWgsYz1yK2gsdT0uNSpjO3JldHVybiBlPWg9PT1yPzA6cz09PXI/NjAqKG4tbykvbCszNjA6bj09PXI/NjAqKG8tcykvbCsxMjA6NjAqKHMtbikvbCsyNDAsaT0wPT09bD8wOi41Pj11P2wvYzpsLygyLWMpLFtNYXRoLnJvdW5kKGUpJTM2MCxpLHUsbnVsbD09YT8xOmFdfSxjLmhzbGEuZnJvbT1mdW5jdGlvbih0KXtpZihudWxsPT10WzBdfHxudWxsPT10WzFdfHxudWxsPT10WzJdKXJldHVybltudWxsLG51bGwsbnVsbCx0WzNdXTt2YXIgZT10WzBdLzM2MCxpPXRbMV0scz10WzJdLG89dFszXSxhPS41Pj1zP3MqKDEraSk6cytpLXMqaSxyPTIqcy1hO3JldHVybltNYXRoLnJvdW5kKDI1NSpuKHIsYSxlKzEvMykpLE1hdGgucm91bmQoMjU1Km4ocixhLGUpKSxNYXRoLnJvdW5kKDI1NSpuKHIsYSxlLTEvMykpLG9dfSxmKGMsZnVuY3Rpb24ocyxuKXt2YXIgbz1uLnByb3BzLGE9bi5jYWNoZSxoPW4udG8sYz1uLmZyb207bC5mbltzXT1mdW5jdGlvbihzKXtpZihoJiYhdGhpc1thXSYmKHRoaXNbYV09aCh0aGlzLl9yZ2JhKSkscz09PWUpcmV0dXJuIHRoaXNbYV0uc2xpY2UoKTt2YXIgbixyPXQudHlwZShzKSx1PVwiYXJyYXlcIj09PXJ8fFwib2JqZWN0XCI9PT1yP3M6YXJndW1lbnRzLGQ9dGhpc1thXS5zbGljZSgpO3JldHVybiBmKG8sZnVuY3Rpb24odCxlKXt2YXIgcz11W1wib2JqZWN0XCI9PT1yP3Q6ZS5pZHhdO251bGw9PXMmJihzPWRbZS5pZHhdKSxkW2UuaWR4XT1pKHMsZSl9KSxjPyhuPWwoYyhkKSksblthXT1kLG4pOmwoZCl9LGYobyxmdW5jdGlvbihlLGkpe2wuZm5bZV18fChsLmZuW2VdPWZ1bmN0aW9uKG4pe3ZhciBvLGE9dC50eXBlKG4pLGg9XCJhbHBoYVwiPT09ZT90aGlzLl9oc2xhP1wiaHNsYVwiOlwicmdiYVwiOnMsbD10aGlzW2hdKCksYz1sW2kuaWR4XTtyZXR1cm5cInVuZGVmaW5lZFwiPT09YT9jOihcImZ1bmN0aW9uXCI9PT1hJiYobj1uLmNhbGwodGhpcyxjKSxhPXQudHlwZShuKSksbnVsbD09biYmaS5lbXB0eT90aGlzOihcInN0cmluZ1wiPT09YSYmKG89ci5leGVjKG4pLG8mJihuPWMrcGFyc2VGbG9hdChvWzJdKSooXCIrXCI9PT1vWzFdPzE6LTEpKSksbFtpLmlkeF09bix0aGlzW2hdKGwpKSl9KX0pfSksbC5ob29rPWZ1bmN0aW9uKGUpe3ZhciBpPWUuc3BsaXQoXCIgXCIpO2YoaSxmdW5jdGlvbihlLGkpe3QuY3NzSG9va3NbaV09e3NldDpmdW5jdGlvbihlLG4pe3ZhciBvLGEscj1cIlwiO2lmKFwidHJhbnNwYXJlbnRcIiE9PW4mJihcInN0cmluZ1wiIT09dC50eXBlKG4pfHwobz1zKG4pKSkpe2lmKG49bChvfHxuKSwhZC5yZ2JhJiYxIT09bi5fcmdiYVszXSl7Zm9yKGE9XCJiYWNrZ3JvdW5kQ29sb3JcIj09PWk/ZS5wYXJlbnROb2RlOmU7KFwiXCI9PT1yfHxcInRyYW5zcGFyZW50XCI9PT1yKSYmYSYmYS5zdHlsZTspdHJ5e3I9dC5jc3MoYSxcImJhY2tncm91bmRDb2xvclwiKSxhPWEucGFyZW50Tm9kZX1jYXRjaChoKXt9bj1uLmJsZW5kKHImJlwidHJhbnNwYXJlbnRcIiE9PXI/cjpcIl9kZWZhdWx0XCIpfW49bi50b1JnYmFTdHJpbmcoKX10cnl7ZS5zdHlsZVtpXT1ufWNhdGNoKGgpe319fSx0LmZ4LnN0ZXBbaV09ZnVuY3Rpb24oZSl7ZS5jb2xvckluaXR8fChlLnN0YXJ0PWwoZS5lbGVtLGkpLGUuZW5kPWwoZS5lbmQpLGUuY29sb3JJbml0PSEwKSx0LmNzc0hvb2tzW2ldLnNldChlLmVsZW0sZS5zdGFydC50cmFuc2l0aW9uKGUuZW5kLGUucG9zKSl9fSl9LGwuaG9vayhhKSx0LmNzc0hvb2tzLmJvcmRlckNvbG9yPXtleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGYoW1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLGZ1bmN0aW9uKGkscyl7ZVtcImJvcmRlclwiK3MrXCJDb2xvclwiXT10fSksZX19LG89dC5Db2xvci5uYW1lcz17YXF1YTpcIiMwMGZmZmZcIixibGFjazpcIiMwMDAwMDBcIixibHVlOlwiIzAwMDBmZlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixsaW1lOlwiIzAwZmYwMFwiLG1hcm9vbjpcIiM4MDAwMDBcIixuYXZ5OlwiIzAwMDA4MFwiLG9saXZlOlwiIzgwODAwMFwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHRlYWw6XCIjMDA4MDgwXCIsd2hpdGU6XCIjZmZmZmZmXCIseWVsbG93OlwiI2ZmZmYwMFwiLHRyYW5zcGFyZW50OltudWxsLG51bGwsbnVsbCwwXSxfZGVmYXVsdDpcIiNmZmZmZmZcIn19KHApLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgaSxzLG49ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P2Uub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCk6ZS5jdXJyZW50U3R5bGUsbz17fTtpZihuJiZuLmxlbmd0aCYmblswXSYmbltuWzBdXSlmb3Iocz1uLmxlbmd0aDtzLS07KWk9bltzXSxcInN0cmluZ1wiPT10eXBlb2YgbltpXSYmKG9bdC5jYW1lbENhc2UoaSldPW5baV0pO2Vsc2UgZm9yKGkgaW4gbilcInN0cmluZ1wiPT10eXBlb2YgbltpXSYmKG9baV09bltpXSk7cmV0dXJuIG99ZnVuY3Rpb24gaShlLGkpe3ZhciBzLG8sYT17fTtmb3IocyBpbiBpKW89aVtzXSxlW3NdIT09byYmKG5bc118fCh0LmZ4LnN0ZXBbc118fCFpc05hTihwYXJzZUZsb2F0KG8pKSkmJihhW3NdPW8pKTtyZXR1cm4gYX12YXIgcz1bXCJhZGRcIixcInJlbW92ZVwiLFwidG9nZ2xlXCJdLG49e2JvcmRlcjoxLGJvcmRlckJvdHRvbToxLGJvcmRlckNvbG9yOjEsYm9yZGVyTGVmdDoxLGJvcmRlclJpZ2h0OjEsYm9yZGVyVG9wOjEsYm9yZGVyV2lkdGg6MSxtYXJnaW46MSxwYWRkaW5nOjF9O3QuZWFjaChbXCJib3JkZXJMZWZ0U3R5bGVcIixcImJvcmRlclJpZ2h0U3R5bGVcIixcImJvcmRlckJvdHRvbVN0eWxlXCIsXCJib3JkZXJUb3BTdHlsZVwiXSxmdW5jdGlvbihlLGkpe3QuZnguc3RlcFtpXT1mdW5jdGlvbih0KXsoXCJub25lXCIhPT10LmVuZCYmIXQuc2V0QXR0cnx8MT09PXQucG9zJiYhdC5zZXRBdHRyKSYmKHAuc3R5bGUodC5lbGVtLGksdC5lbmQpLHQuc2V0QXR0cj0hMCl9fSksdC5mbi5hZGRCYWNrfHwodC5mbi5hZGRCYWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZChudWxsPT10P3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKHQpKX0pLHQuZWZmZWN0cy5hbmltYXRlQ2xhc3M9ZnVuY3Rpb24obixvLGEscil7dmFyIGg9dC5zcGVlZChvLGEscik7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgbyxhPXQodGhpcykscj1hLmF0dHIoXCJjbGFzc1wiKXx8XCJcIixsPWguY2hpbGRyZW4/YS5maW5kKFwiKlwiKS5hZGRCYWNrKCk6YTtsPWwubWFwKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKTtyZXR1cm57ZWw6aSxzdGFydDplKHRoaXMpfX0pLG89ZnVuY3Rpb24oKXt0LmVhY2gocyxmdW5jdGlvbih0LGUpe25bZV0mJmFbZStcIkNsYXNzXCJdKG5bZV0pfSl9LG8oKSxsPWwubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kPWUodGhpcy5lbFswXSksdGhpcy5kaWZmPWkodGhpcy5zdGFydCx0aGlzLmVuZCksdGhpc30pLGEuYXR0cihcImNsYXNzXCIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT10LkRlZmVycmVkKCkscz10LmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZShlKX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLHQud2hlbi5hcHBseSh0LGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXtvKCksdC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWw7dC5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbih0KXtlLmNzcyh0LFwiXCIpfSl9KSxoLmNvbXBsZXRlLmNhbGwoYVswXSl9KX0pfSx0LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLG8pe3JldHVybiBzP3QuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aX0scyxuLG8pOmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0odC5mbi5hZGRDbGFzcykscmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3JlbW92ZTppfSxzLG4sbyk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSh0LmZuLnJlbW92ZUNsYXNzKSx0b2dnbGVDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxzLG4sbyxhKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHN8fHZvaWQgMD09PXM/bj90LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyxzP3thZGQ6aX06e3JlbW92ZTppfSxuLG8sYSk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3RvZ2dsZTppfSxzLG4sbyl9fSh0LmZuLnRvZ2dsZUNsYXNzKSxzd2l0Y2hDbGFzczpmdW5jdGlvbihlLGkscyxuLG8pe3JldHVybiB0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOmkscmVtb3ZlOmV9LHMsbixvKX19KX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxpLHMsbil7cmV0dXJuIHQuaXNQbGFpbk9iamVjdChlKSYmKGk9ZSxlPWUuZWZmZWN0KSxlPXtlZmZlY3Q6ZX0sbnVsbD09aSYmKGk9e30pLHQuaXNGdW5jdGlvbihpKSYmKG49aSxzPW51bGwsaT17fSksKFwibnVtYmVyXCI9PXR5cGVvZiBpfHx0LmZ4LnNwZWVkc1tpXSkmJihuPXMscz1pLGk9e30pLHQuaXNGdW5jdGlvbihzKSYmKG49cyxzPW51bGwpLGkmJnQuZXh0ZW5kKGUsaSkscz1zfHxpLmR1cmF0aW9uLGUuZHVyYXRpb249dC5meC5vZmY/MDpcIm51bWJlclwiPT10eXBlb2Ygcz9zOnMgaW4gdC5meC5zcGVlZHM/dC5meC5zcGVlZHNbc106dC5meC5zcGVlZHMuX2RlZmF1bHQsZS5jb21wbGV0ZT1ufHxpLmNvbXBsZXRlLGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4hZXx8XCJudW1iZXJcIj09dHlwZW9mIGV8fHQuZnguc3BlZWRzW2VdPyEwOlwic3RyaW5nXCIhPXR5cGVvZiBlfHx0LmVmZmVjdHMuZWZmZWN0W2VdP3QuaXNGdW5jdGlvbihlKT8hMDpcIm9iamVjdFwiIT10eXBlb2YgZXx8ZS5lZmZlY3Q/ITE6ITA6ITB9ZnVuY3Rpb24gcyh0LGUpe3ZhciBpPWUub3V0ZXJXaWR0aCgpLHM9ZS5vdXRlckhlaWdodCgpLG49L15yZWN0XFwoKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKSw/XFxzKigtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0byksP1xccyooLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pLD9cXHMqKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKVxcKSQvLG89bi5leGVjKHQpfHxbXCJcIiwwLGkscywwXTtyZXR1cm57dG9wOnBhcnNlRmxvYXQob1sxXSl8fDAscmlnaHQ6XCJhdXRvXCI9PT1vWzJdP2k6cGFyc2VGbG9hdChvWzJdKSxib3R0b206XCJhdXRvXCI9PT1vWzNdP3M6cGFyc2VGbG9hdChvWzNdKSxsZWZ0OnBhcnNlRmxvYXQob1s0XSl8fDB9fXQuZXhwciYmdC5leHByLmZpbHRlcnMmJnQuZXhwci5maWx0ZXJzLmFuaW1hdGVkJiYodC5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhdChpKS5kYXRhKGQpfHxlKGkpfX0odC5leHByLmZpbHRlcnMuYW5pbWF0ZWQpKSx0LnVpQmFja0NvbXBhdCE9PSExJiZ0LmV4dGVuZCh0LmVmZmVjdHMse3NhdmU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9MCxzPWUubGVuZ3RoO3M+aTtpKyspbnVsbCE9PWVbaV0mJnQuZGF0YShjK2VbaV0sdFswXS5zdHlsZVtlW2ldXSl9LHJlc3RvcmU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkscz0wLG49ZS5sZW5ndGg7bj5zO3MrKyludWxsIT09ZVtzXSYmKGk9dC5kYXRhKGMrZVtzXSksdC5jc3MoZVtzXSxpKSl9LHNldE1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInRvZ2dsZVwiPT09ZSYmKGU9dC5pcyhcIjpoaWRkZW5cIik/XCJzaG93XCI6XCJoaWRlXCIpLGV9LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7aWYoZS5wYXJlbnQoKS5pcyhcIi51aS1lZmZlY3RzLXdyYXBwZXJcIikpcmV0dXJuIGUucGFyZW50KCk7dmFyIGk9e3dpZHRoOmUub3V0ZXJXaWR0aCghMCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoITApLFwiZmxvYXRcIjplLmNzcyhcImZsb2F0XCIpfSxzPXQoXCI8ZGl2PjwvZGl2PlwiKS5hZGRDbGFzcyhcInVpLWVmZmVjdHMtd3JhcHBlclwiKS5jc3Moe2ZvbnRTaXplOlwiMTAwJVwiLGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLGJvcmRlcjpcIm5vbmVcIixtYXJnaW46MCxwYWRkaW5nOjB9KSxuPXt3aWR0aDplLndpZHRoKCksaGVpZ2h0OmUuaGVpZ2h0KCl9LG89ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0cnl7by5pZH1jYXRjaChhKXtvPWRvY3VtZW50LmJvZHl9cmV0dXJuIGUud3JhcChzKSwoZVswXT09PW98fHQuY29udGFpbnMoZVswXSxvKSkmJnQobykudHJpZ2dlcihcImZvY3VzXCIpLHM9ZS5wYXJlbnQoKSxcInN0YXRpY1wiPT09ZS5jc3MoXCJwb3NpdGlvblwiKT8ocy5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIn0pLGUuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCJ9KSk6KHQuZXh0ZW5kKGkse3Bvc2l0aW9uOmUuY3NzKFwicG9zaXRpb25cIiksekluZGV4OmUuY3NzKFwiei1pbmRleFwiKX0pLHQuZWFjaChbXCJ0b3BcIixcImxlZnRcIixcImJvdHRvbVwiLFwicmlnaHRcIl0sZnVuY3Rpb24odCxzKXtpW3NdPWUuY3NzKHMpLGlzTmFOKHBhcnNlSW50KGlbc10sMTApKSYmKGlbc109XCJhdXRvXCIpfSksZS5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIix0b3A6MCxsZWZ0OjAscmlnaHQ6XCJhdXRvXCIsYm90dG9tOlwiYXV0b1wifSkpLGUuY3NzKG4pLHMuY3NzKGkpLnNob3coKX0scmVtb3ZlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgaT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiBlLnBhcmVudCgpLmlzKFwiLnVpLWVmZmVjdHMtd3JhcHBlclwiKSYmKGUucGFyZW50KCkucmVwbGFjZVdpdGgoZSksKGVbMF09PT1pfHx0LmNvbnRhaW5zKGVbMF0saSkpJiZ0KGkpLnRyaWdnZXIoXCJmb2N1c1wiKSksZX19KSx0LmV4dGVuZCh0LmVmZmVjdHMse3ZlcnNpb246XCIxLjEyLjFcIixkZWZpbmU6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiBzfHwocz1pLGk9XCJlZmZlY3RcIiksdC5lZmZlY3RzLmVmZmVjdFtlXT1zLHQuZWZmZWN0cy5lZmZlY3RbZV0ubW9kZT1pLHN9LHNjYWxlZERpbWVuc2lvbnM6ZnVuY3Rpb24odCxlLGkpe2lmKDA9PT1lKXJldHVybntoZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTt2YXIgcz1cImhvcml6b250YWxcIiE9PWk/KGV8fDEwMCkvMTAwOjEsbj1cInZlcnRpY2FsXCIhPT1pPyhlfHwxMDApLzEwMDoxO3JldHVybntoZWlnaHQ6dC5oZWlnaHQoKSpuLHdpZHRoOnQud2lkdGgoKSpzLG91dGVySGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSpuLG91dGVyV2lkdGg6dC5vdXRlcldpZHRoKCkqc319LGNsaXBUb0JveDpmdW5jdGlvbih0KXtyZXR1cm57d2lkdGg6dC5jbGlwLnJpZ2h0LXQuY2xpcC5sZWZ0LGhlaWdodDp0LmNsaXAuYm90dG9tLXQuY2xpcC50b3AsbGVmdDp0LmNsaXAubGVmdCx0b3A6dC5jbGlwLnRvcH19LHVuc2hpZnQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXQucXVldWUoKTtlPjEmJnMuc3BsaWNlLmFwcGx5KHMsWzEsMF0uY29uY2F0KHMuc3BsaWNlKGUsaSkpKSx0LmRlcXVldWUoKX0sc2F2ZVN0eWxlOmZ1bmN0aW9uKHQpe3QuZGF0YSh1LHRbMF0uc3R5bGUuY3NzVGV4dCl9LHJlc3RvcmVTdHlsZTpmdW5jdGlvbih0KXt0WzBdLnN0eWxlLmNzc1RleHQ9dC5kYXRhKHUpfHxcIlwiLHQucmVtb3ZlRGF0YSh1KX0sbW9kZTpmdW5jdGlvbih0LGUpe3ZhciBpPXQuaXMoXCI6aGlkZGVuXCIpO3JldHVyblwidG9nZ2xlXCI9PT1lJiYoZT1pP1wic2hvd1wiOlwiaGlkZVwiKSwoaT9cImhpZGVcIj09PWU6XCJzaG93XCI9PT1lKSYmKGU9XCJub25lXCIpLGV9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIGkscztzd2l0Y2godFswXSl7Y2FzZVwidG9wXCI6aT0wO2JyZWFrO2Nhc2VcIm1pZGRsZVwiOmk9LjU7YnJlYWs7Y2FzZVwiYm90dG9tXCI6aT0xO2JyZWFrO2RlZmF1bHQ6aT10WzBdL2UuaGVpZ2h0fXN3aXRjaCh0WzFdKXtjYXNlXCJsZWZ0XCI6cz0wO2JyZWFrO2Nhc2VcImNlbnRlclwiOnM9LjU7YnJlYWs7Y2FzZVwicmlnaHRcIjpzPTE7YnJlYWs7ZGVmYXVsdDpzPXRbMV0vZS53aWR0aH1yZXR1cm57eDpzLHk6aX19LGNyZWF0ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKGUpe3ZhciBpLHM9ZS5jc3MoXCJwb3NpdGlvblwiKSxuPWUucG9zaXRpb24oKTtyZXR1cm4gZS5jc3Moe21hcmdpblRvcDplLmNzcyhcIm1hcmdpblRvcFwiKSxtYXJnaW5Cb3R0b206ZS5jc3MoXCJtYXJnaW5Cb3R0b21cIiksbWFyZ2luTGVmdDplLmNzcyhcIm1hcmdpbkxlZnRcIiksbWFyZ2luUmlnaHQ6ZS5jc3MoXCJtYXJnaW5SaWdodFwiKX0pLm91dGVyV2lkdGgoZS5vdXRlcldpZHRoKCkpLm91dGVySGVpZ2h0KGUub3V0ZXJIZWlnaHQoKSksL14oc3RhdGljfHJlbGF0aXZlKS8udGVzdChzKSYmKHM9XCJhYnNvbHV0ZVwiLGk9dChcIjxcIitlWzBdLm5vZGVOYW1lK1wiPlwiKS5pbnNlcnRBZnRlcihlKS5jc3Moe2Rpc3BsYXk6L14oaW5saW5lfHJ1YnkpLy50ZXN0KGUuY3NzKFwiZGlzcGxheVwiKSk/XCJpbmxpbmUtYmxvY2tcIjpcImJsb2NrXCIsdmlzaWJpbGl0eTpcImhpZGRlblwiLG1hcmdpblRvcDplLmNzcyhcIm1hcmdpblRvcFwiKSxtYXJnaW5Cb3R0b206ZS5jc3MoXCJtYXJnaW5Cb3R0b21cIiksbWFyZ2luTGVmdDplLmNzcyhcIm1hcmdpbkxlZnRcIiksbWFyZ2luUmlnaHQ6ZS5jc3MoXCJtYXJnaW5SaWdodFwiKSxcImZsb2F0XCI6ZS5jc3MoXCJmbG9hdFwiKX0pLm91dGVyV2lkdGgoZS5vdXRlcldpZHRoKCkpLm91dGVySGVpZ2h0KGUub3V0ZXJIZWlnaHQoKSkuYWRkQ2xhc3MoXCJ1aS1lZmZlY3RzLXBsYWNlaG9sZGVyXCIpLGUuZGF0YShjK1wicGxhY2Vob2xkZXJcIixpKSksZS5jc3Moe3Bvc2l0aW9uOnMsbGVmdDpuLmxlZnQsdG9wOm4udG9wfSksaX0scmVtb3ZlUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCl7dmFyIGU9YytcInBsYWNlaG9sZGVyXCIsaT10LmRhdGEoZSk7aSYmKGkucmVtb3ZlKCksdC5yZW1vdmVEYXRhKGUpKX0sY2xlYW5VcDpmdW5jdGlvbihlKXt0LmVmZmVjdHMucmVzdG9yZVN0eWxlKGUpLHQuZWZmZWN0cy5yZW1vdmVQbGFjZWhvbGRlcihlKX0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbihlLGkscyxuKXtyZXR1cm4gbj1ufHx7fSx0LmVhY2goaSxmdW5jdGlvbih0LGkpe3ZhciBvPWUuY3NzVW5pdChpKTtvWzBdPjAmJihuW2ldPW9bMF0qcytvWzFdKX0pLG59fSksdC5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbigpe2Z1bmN0aW9uIGkoZSl7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlRGF0YShkKSx0LmVmZmVjdHMuY2xlYW5VcChyKSxcImhpZGVcIj09PXMubW9kZSYmci5oaWRlKCksYSgpfWZ1bmN0aW9uIGEoKXt0LmlzRnVuY3Rpb24oaCkmJmguY2FsbChyWzBdKSx0LmlzRnVuY3Rpb24oZSkmJmUoKX12YXIgcj10KHRoaXMpO3MubW9kZT1jLnNoaWZ0KCksdC51aUJhY2tDb21wYXQ9PT0hMXx8bz9cIm5vbmVcIj09PXMubW9kZT8ocltsXSgpLGEoKSk6bi5jYWxsKHJbMF0scyxpKTooci5pcyhcIjpoaWRkZW5cIik/XCJoaWRlXCI9PT1sOlwic2hvd1wiPT09bCk/KHJbbF0oKSxhKCkpOm4uY2FsbChyWzBdLHMsYSl9dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj10LmVmZmVjdHMuZWZmZWN0W3MuZWZmZWN0XSxvPW4ubW9kZSxhPXMucXVldWUscj1hfHxcImZ4XCIsaD1zLmNvbXBsZXRlLGw9cy5tb2RlLGM9W10sdT1mdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLHM9dC5lZmZlY3RzLm1vZGUoaSxsKXx8bztpLmRhdGEoZCwhMCksYy5wdXNoKHMpLG8mJihcInNob3dcIj09PXN8fHM9PT1vJiZcImhpZGVcIj09PXMpJiZpLnNob3coKSxvJiZcIm5vbmVcIj09PXN8fHQuZWZmZWN0cy5zYXZlU3R5bGUoaSksdC5pc0Z1bmN0aW9uKGUpJiZlKCl9O3JldHVybiB0LmZ4Lm9mZnx8IW4/bD90aGlzW2xdKHMuZHVyYXRpb24saCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aCYmaC5jYWxsKHRoaXMpfSk6YT09PSExP3RoaXMuZWFjaCh1KS5lYWNoKGkpOnRoaXMucXVldWUocix1KS5xdWV1ZShyLGkpfSxzaG93OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPVwic2hvd1wiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKVxyXG59fSh0LmZuLnNob3cpLGhpZGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHMpe2lmKGkocykpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBuLm1vZGU9XCJoaWRlXCIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0odC5mbi5oaWRlKSx0b2dnbGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHMpe2lmKGkocyl8fFwiYm9vbGVhblwiPT10eXBlb2YgcylyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT1cInRvZ2dsZVwiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKX19KHQuZm4udG9nZ2xlKSxjc3NVbml0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuY3NzKGUpLHM9W107cmV0dXJuIHQuZWFjaChbXCJlbVwiLFwicHhcIixcIiVcIixcInB0XCJdLGZ1bmN0aW9uKHQsZSl7aS5pbmRleE9mKGUpPjAmJihzPVtwYXJzZUZsb2F0KGkpLGVdKX0pLHN9LGNzc0NsaXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dGhpcy5jc3MoXCJjbGlwXCIsXCJyZWN0KFwiK3QudG9wK1wicHggXCIrdC5yaWdodCtcInB4IFwiK3QuYm90dG9tK1wicHggXCIrdC5sZWZ0K1wicHgpXCIpOnModGhpcy5jc3MoXCJjbGlwXCIpLHRoaXMpfSx0cmFuc2ZlcjpmdW5jdGlvbihlLGkpe3ZhciBzPXQodGhpcyksbj10KGUudG8pLG89XCJmaXhlZFwiPT09bi5jc3MoXCJwb3NpdGlvblwiKSxhPXQoXCJib2R5XCIpLHI9bz9hLnNjcm9sbFRvcCgpOjAsaD1vP2Euc2Nyb2xsTGVmdCgpOjAsbD1uLm9mZnNldCgpLGM9e3RvcDpsLnRvcC1yLGxlZnQ6bC5sZWZ0LWgsaGVpZ2h0Om4uaW5uZXJIZWlnaHQoKSx3aWR0aDpuLmlubmVyV2lkdGgoKX0sdT1zLm9mZnNldCgpLGQ9dChcIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PlwiKS5hcHBlbmRUbyhcImJvZHlcIikuYWRkQ2xhc3MoZS5jbGFzc05hbWUpLmNzcyh7dG9wOnUudG9wLXIsbGVmdDp1LmxlZnQtaCxoZWlnaHQ6cy5pbm5lckhlaWdodCgpLHdpZHRoOnMuaW5uZXJXaWR0aCgpLHBvc2l0aW9uOm8/XCJmaXhlZFwiOlwiYWJzb2x1dGVcIn0pLmFuaW1hdGUoYyxlLmR1cmF0aW9uLGUuZWFzaW5nLGZ1bmN0aW9uKCl7ZC5yZW1vdmUoKSx0LmlzRnVuY3Rpb24oaSkmJmkoKX0pfX0pLHQuZnguc3RlcC5jbGlwPWZ1bmN0aW9uKGUpe2UuY2xpcEluaXR8fChlLnN0YXJ0PXQoZS5lbGVtKS5jc3NDbGlwKCksXCJzdHJpbmdcIj09dHlwZW9mIGUuZW5kJiYoZS5lbmQ9cyhlLmVuZCxlLmVsZW0pKSxlLmNsaXBJbml0PSEwKSx0KGUuZWxlbSkuY3NzQ2xpcCh7dG9wOmUucG9zKihlLmVuZC50b3AtZS5zdGFydC50b3ApK2Uuc3RhcnQudG9wLHJpZ2h0OmUucG9zKihlLmVuZC5yaWdodC1lLnN0YXJ0LnJpZ2h0KStlLnN0YXJ0LnJpZ2h0LGJvdHRvbTplLnBvcyooZS5lbmQuYm90dG9tLWUuc3RhcnQuYm90dG9tKStlLnN0YXJ0LmJvdHRvbSxsZWZ0OmUucG9zKihlLmVuZC5sZWZ0LWUuc3RhcnQubGVmdCkrZS5zdGFydC5sZWZ0fSl9fSgpLGZ1bmN0aW9uKCl7dmFyIGU9e307dC5lYWNoKFtcIlF1YWRcIixcIkN1YmljXCIsXCJRdWFydFwiLFwiUXVpbnRcIixcIkV4cG9cIl0sZnVuY3Rpb24odCxpKXtlW2ldPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQrMil9fSksdC5leHRlbmQoZSx7U2luZTpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLmNvcyh0Kk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX0sRWxhc3RpYzpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR8fDE9PT10P3Q6LU1hdGgucG93KDIsOCoodC0xKSkqTWF0aC5zaW4oKDgwKih0LTEpLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooMyp0LTIpfSxCb3VuY2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9NDsoKGU9TWF0aC5wb3coMiwtLWkpKS0xKS8xMT50Oyk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLWkpLTcuNTYyNSpNYXRoLnBvdygoMyplLTIpLzIyLXQsMil9fSksdC5lYWNoKGUsZnVuY3Rpb24oZSxpKXt0LmVhc2luZ1tcImVhc2VJblwiK2VdPWksdC5lYXNpbmdbXCJlYXNlT3V0XCIrZV09ZnVuY3Rpb24odCl7cmV0dXJuIDEtaSgxLXQpfSx0LmVhc2luZ1tcImVhc2VJbk91dFwiK2VdPWZ1bmN0aW9uKHQpe3JldHVybi41PnQ/aSgyKnQpLzI6MS1pKC0yKnQrMikvMn19KX0oKTt2YXIgZj10LmVmZmVjdHM7dC5lZmZlY3RzLmRlZmluZShcImJsaW5kXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz17dXA6W1wiYm90dG9tXCIsXCJ0b3BcIl0sdmVydGljYWw6W1wiYm90dG9tXCIsXCJ0b3BcIl0sZG93bjpbXCJ0b3BcIixcImJvdHRvbVwiXSxsZWZ0OltcInJpZ2h0XCIsXCJsZWZ0XCJdLGhvcml6b250YWw6W1wicmlnaHRcIixcImxlZnRcIl0scmlnaHQ6W1wibGVmdFwiLFwicmlnaHRcIl19LG49dCh0aGlzKSxvPWUuZGlyZWN0aW9ufHxcInVwXCIsYT1uLmNzc0NsaXAoKSxyPXtjbGlwOnQuZXh0ZW5kKHt9LGEpfSxoPXQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihuKTtyLmNsaXBbc1tvXVswXV09ci5jbGlwW3Nbb11bMV1dLFwic2hvd1wiPT09ZS5tb2RlJiYobi5jc3NDbGlwKHIuY2xpcCksaCYmaC5jc3ModC5lZmZlY3RzLmNsaXBUb0JveChyKSksci5jbGlwPWEpLGgmJmguYW5pbWF0ZSh0LmVmZmVjdHMuY2xpcFRvQm94KHIpLGUuZHVyYXRpb24sZS5lYXNpbmcpLG4uYW5pbWF0ZShyLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiYm91bmNlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG8sYT10KHRoaXMpLHI9ZS5tb2RlLGg9XCJoaWRlXCI9PT1yLGw9XCJzaG93XCI9PT1yLGM9ZS5kaXJlY3Rpb258fFwidXBcIix1PWUuZGlzdGFuY2UsZD1lLnRpbWVzfHw1LHA9MipkKyhsfHxoPzE6MCksZj1lLmR1cmF0aW9uL3AsZz1lLmVhc2luZyxtPVwidXBcIj09PWN8fFwiZG93blwiPT09Yz9cInRvcFwiOlwibGVmdFwiLF89XCJ1cFwiPT09Y3x8XCJsZWZ0XCI9PT1jLHY9MCxiPWEucXVldWUoKS5sZW5ndGg7Zm9yKHQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihhKSxvPWEuY3NzKG0pLHV8fCh1PWFbXCJ0b3BcIj09PW0/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSgpLzMpLGwmJihuPXtvcGFjaXR5OjF9LG5bbV09byxhLmNzcyhcIm9wYWNpdHlcIiwwKS5jc3MobSxfPzIqLXU6Mip1KS5hbmltYXRlKG4sZixnKSksaCYmKHUvPU1hdGgucG93KDIsZC0xKSksbj17fSxuW21dPW87ZD52O3YrKylzPXt9LHNbbV09KF8/XCItPVwiOlwiKz1cIikrdSxhLmFuaW1hdGUocyxmLGcpLmFuaW1hdGUobixmLGcpLHU9aD8yKnU6dS8yO2gmJihzPXtvcGFjaXR5OjB9LHNbbV09KF8/XCItPVwiOlwiKz1cIikrdSxhLmFuaW1hdGUocyxmLGcpKSxhLnF1ZXVlKGkpLHQuZWZmZWN0cy51bnNoaWZ0KGEsYixwKzEpfSksdC5lZmZlY3RzLmRlZmluZShcImNsaXBcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBzLG49e30sbz10KHRoaXMpLGE9ZS5kaXJlY3Rpb258fFwidmVydGljYWxcIixyPVwiYm90aFwiPT09YSxoPXJ8fFwiaG9yaXpvbnRhbFwiPT09YSxsPXJ8fFwidmVydGljYWxcIj09PWE7cz1vLmNzc0NsaXAoKSxuLmNsaXA9e3RvcDpsPyhzLmJvdHRvbS1zLnRvcCkvMjpzLnRvcCxyaWdodDpoPyhzLnJpZ2h0LXMubGVmdCkvMjpzLnJpZ2h0LGJvdHRvbTpsPyhzLmJvdHRvbS1zLnRvcCkvMjpzLmJvdHRvbSxsZWZ0Omg/KHMucmlnaHQtcy5sZWZ0KS8yOnMubGVmdH0sdC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKG8pLFwic2hvd1wiPT09ZS5tb2RlJiYoby5jc3NDbGlwKG4uY2xpcCksbi5jbGlwPXMpLG8uYW5pbWF0ZShuLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZHJvcFwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIHMsbj10KHRoaXMpLG89ZS5tb2RlLGE9XCJzaG93XCI9PT1vLHI9ZS5kaXJlY3Rpb258fFwibGVmdFwiLGg9XCJ1cFwiPT09cnx8XCJkb3duXCI9PT1yP1widG9wXCI6XCJsZWZ0XCIsbD1cInVwXCI9PT1yfHxcImxlZnRcIj09PXI/XCItPVwiOlwiKz1cIixjPVwiKz1cIj09PWw/XCItPVwiOlwiKz1cIix1PXtvcGFjaXR5OjB9O3QuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihuKSxzPWUuZGlzdGFuY2V8fG5bXCJ0b3BcIj09PWg/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSghMCkvMix1W2hdPWwrcyxhJiYobi5jc3ModSksdVtoXT1jK3MsdS5vcGFjaXR5PTEpLG4uYW5pbWF0ZSh1LHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZXhwbG9kZVwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gcygpe2IucHVzaCh0aGlzKSxiLmxlbmd0aD09PXUqZCYmbigpfWZ1bmN0aW9uIG4oKXtwLmNzcyh7dmlzaWJpbGl0eTpcInZpc2libGVcIn0pLHQoYikucmVtb3ZlKCksaSgpfXZhciBvLGEscixoLGwsYyx1PWUucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KGUucGllY2VzKSk6MyxkPXUscD10KHRoaXMpLGY9ZS5tb2RlLGc9XCJzaG93XCI9PT1mLG09cC5zaG93KCkuY3NzKFwidmlzaWJpbGl0eVwiLFwiaGlkZGVuXCIpLm9mZnNldCgpLF89TWF0aC5jZWlsKHAub3V0ZXJXaWR0aCgpL2QpLHY9TWF0aC5jZWlsKHAub3V0ZXJIZWlnaHQoKS91KSxiPVtdO2ZvcihvPTA7dT5vO28rKylmb3IoaD1tLnRvcCtvKnYsYz1vLSh1LTEpLzIsYT0wO2Q+YTthKyspcj1tLmxlZnQrYSpfLGw9YS0oZC0xKS8yLHAuY2xvbmUoKS5hcHBlbmRUbyhcImJvZHlcIikud3JhcChcIjxkaXY+PC9kaXY+XCIpLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJ2aXNpYmxlXCIsbGVmdDotYSpfLHRvcDotbyp2fSkucGFyZW50KCkuYWRkQ2xhc3MoXCJ1aS1lZmZlY3RzLWV4cGxvZGVcIikuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIix3aWR0aDpfLGhlaWdodDp2LGxlZnQ6cisoZz9sKl86MCksdG9wOmgrKGc/Yyp2OjApLG9wYWNpdHk6Zz8wOjF9KS5hbmltYXRlKHtsZWZ0OnIrKGc/MDpsKl8pLHRvcDpoKyhnPzA6Yyp2KSxvcGFjaXR5Omc/MTowfSxlLmR1cmF0aW9ufHw1MDAsZS5lYXNpbmcscyl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZmFkZVwiLFwidG9nZ2xlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz1cInNob3dcIj09PWUubW9kZTt0KHRoaXMpLmNzcyhcIm9wYWNpdHlcIixzPzA6MSkuYW5pbWF0ZSh7b3BhY2l0eTpzPzE6MH0se3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJmb2xkXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49ZS5tb2RlLG89XCJzaG93XCI9PT1uLGE9XCJoaWRlXCI9PT1uLHI9ZS5zaXplfHwxNSxoPS8oWzAtOV0rKSUvLmV4ZWMociksbD0hIWUuaG9yaXpGaXJzdCxjPWw/W1wicmlnaHRcIixcImJvdHRvbVwiXTpbXCJib3R0b21cIixcInJpZ2h0XCJdLHU9ZS5kdXJhdGlvbi8yLGQ9dC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKHMpLHA9cy5jc3NDbGlwKCksZj17Y2xpcDp0LmV4dGVuZCh7fSxwKX0sZz17Y2xpcDp0LmV4dGVuZCh7fSxwKX0sbT1bcFtjWzBdXSxwW2NbMV1dXSxfPXMucXVldWUoKS5sZW5ndGg7aCYmKHI9cGFyc2VJbnQoaFsxXSwxMCkvMTAwKm1bYT8wOjFdKSxmLmNsaXBbY1swXV09cixnLmNsaXBbY1swXV09cixnLmNsaXBbY1sxXV09MCxvJiYocy5jc3NDbGlwKGcuY2xpcCksZCYmZC5jc3ModC5lZmZlY3RzLmNsaXBUb0JveChnKSksZy5jbGlwPXApLHMucXVldWUoZnVuY3Rpb24oaSl7ZCYmZC5hbmltYXRlKHQuZWZmZWN0cy5jbGlwVG9Cb3goZiksdSxlLmVhc2luZykuYW5pbWF0ZSh0LmVmZmVjdHMuY2xpcFRvQm94KGcpLHUsZS5lYXNpbmcpLGkoKX0pLmFuaW1hdGUoZix1LGUuZWFzaW5nKS5hbmltYXRlKGcsdSxlLmVhc2luZykucXVldWUoaSksdC5lZmZlY3RzLnVuc2hpZnQocyxfLDQpfSksdC5lZmZlY3RzLmRlZmluZShcImhpZ2hsaWdodFwiLFwic2hvd1wiLGZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKSxuPXtiYWNrZ3JvdW5kQ29sb3I6cy5jc3MoXCJiYWNrZ3JvdW5kQ29sb3JcIil9O1wiaGlkZVwiPT09ZS5tb2RlJiYobi5vcGFjaXR5PTApLHQuZWZmZWN0cy5zYXZlU3R5bGUocykscy5jc3Moe2JhY2tncm91bmRJbWFnZTpcIm5vbmVcIixiYWNrZ3JvdW5kQ29sb3I6ZS5jb2xvcnx8XCIjZmZmZjk5XCJ9KS5hbmltYXRlKG4se3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJzaXplXCIsZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG8sYT10KHRoaXMpLHI9W1wiZm9udFNpemVcIl0saD1bXCJib3JkZXJUb3BXaWR0aFwiLFwiYm9yZGVyQm90dG9tV2lkdGhcIixcInBhZGRpbmdUb3BcIixcInBhZGRpbmdCb3R0b21cIl0sbD1bXCJib3JkZXJMZWZ0V2lkdGhcIixcImJvcmRlclJpZ2h0V2lkdGhcIixcInBhZGRpbmdMZWZ0XCIsXCJwYWRkaW5nUmlnaHRcIl0sYz1lLm1vZGUsdT1cImVmZmVjdFwiIT09YyxkPWUuc2NhbGV8fFwiYm90aFwiLHA9ZS5vcmlnaW58fFtcIm1pZGRsZVwiLFwiY2VudGVyXCJdLGY9YS5jc3MoXCJwb3NpdGlvblwiKSxnPWEucG9zaXRpb24oKSxtPXQuZWZmZWN0cy5zY2FsZWREaW1lbnNpb25zKGEpLF89ZS5mcm9tfHxtLHY9ZS50b3x8dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoYSwwKTt0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoYSksXCJzaG93XCI9PT1jJiYobz1fLF89dix2PW8pLG49e2Zyb206e3k6Xy5oZWlnaHQvbS5oZWlnaHQseDpfLndpZHRoL20ud2lkdGh9LHRvOnt5OnYuaGVpZ2h0L20uaGVpZ2h0LHg6di53aWR0aC9tLndpZHRofX0sKFwiYm94XCI9PT1kfHxcImJvdGhcIj09PWQpJiYobi5mcm9tLnkhPT1uLnRvLnkmJihfPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsaCxuLmZyb20ueSxfKSx2PXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsaCxuLnRvLnksdikpLG4uZnJvbS54IT09bi50by54JiYoXz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGwsbi5mcm9tLngsXyksdj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGwsbi50by54LHYpKSksKFwiY29udGVudFwiPT09ZHx8XCJib3RoXCI9PT1kKSYmbi5mcm9tLnkhPT1uLnRvLnkmJihfPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEscixuLmZyb20ueSxfKSx2PXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEscixuLnRvLnksdikpLHAmJihzPXQuZWZmZWN0cy5nZXRCYXNlbGluZShwLG0pLF8udG9wPShtLm91dGVySGVpZ2h0LV8ub3V0ZXJIZWlnaHQpKnMueStnLnRvcCxfLmxlZnQ9KG0ub3V0ZXJXaWR0aC1fLm91dGVyV2lkdGgpKnMueCtnLmxlZnQsdi50b3A9KG0ub3V0ZXJIZWlnaHQtdi5vdXRlckhlaWdodCkqcy55K2cudG9wLHYubGVmdD0obS5vdXRlcldpZHRoLXYub3V0ZXJXaWR0aCkqcy54K2cubGVmdCksYS5jc3MoXyksKFwiY29udGVudFwiPT09ZHx8XCJib3RoXCI9PT1kKSYmKGg9aC5jb25jYXQoW1wibWFyZ2luVG9wXCIsXCJtYXJnaW5Cb3R0b21cIl0pLmNvbmNhdChyKSxsPWwuY29uY2F0KFtcIm1hcmdpbkxlZnRcIixcIm1hcmdpblJpZ2h0XCJdKSxhLmZpbmQoXCIqW3dpZHRoXVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxzPXQuZWZmZWN0cy5zY2FsZWREaW1lbnNpb25zKGkpLG89e2hlaWdodDpzLmhlaWdodCpuLmZyb20ueSx3aWR0aDpzLndpZHRoKm4uZnJvbS54LG91dGVySGVpZ2h0OnMub3V0ZXJIZWlnaHQqbi5mcm9tLnksb3V0ZXJXaWR0aDpzLm91dGVyV2lkdGgqbi5mcm9tLnh9LGE9e2hlaWdodDpzLmhlaWdodCpuLnRvLnksd2lkdGg6cy53aWR0aCpuLnRvLngsb3V0ZXJIZWlnaHQ6cy5oZWlnaHQqbi50by55LG91dGVyV2lkdGg6cy53aWR0aCpuLnRvLnh9O24uZnJvbS55IT09bi50by55JiYobz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGgsbi5mcm9tLnksbyksYT10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGgsbi50by55LGEpKSxuLmZyb20ueCE9PW4udG8ueCYmKG89dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxsLG4uZnJvbS54LG8pLGE9dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxsLG4udG8ueCxhKSksdSYmdC5lZmZlY3RzLnNhdmVTdHlsZShpKSxpLmNzcyhvKSxpLmFuaW1hdGUoYSxlLmR1cmF0aW9uLGUuZWFzaW5nLGZ1bmN0aW9uKCl7dSYmdC5lZmZlY3RzLnJlc3RvcmVTdHlsZShpKX0pfSkpLGEuYW5pbWF0ZSh2LHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe3ZhciBlPWEub2Zmc2V0KCk7MD09PXYub3BhY2l0eSYmYS5jc3MoXCJvcGFjaXR5XCIsXy5vcGFjaXR5KSx1fHwoYS5jc3MoXCJwb3NpdGlvblwiLFwic3RhdGljXCI9PT1mP1wicmVsYXRpdmVcIjpmKS5vZmZzZXQoZSksdC5lZmZlY3RzLnNhdmVTdHlsZShhKSksaSgpfX0pfSksdC5lZmZlY3RzLmRlZmluZShcInNjYWxlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49ZS5tb2RlLG89cGFyc2VJbnQoZS5wZXJjZW50LDEwKXx8KDA9PT1wYXJzZUludChlLnBlcmNlbnQsMTApPzA6XCJlZmZlY3RcIiE9PW4/MDoxMDApLGE9dC5leHRlbmQoITAse2Zyb206dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMocyksdG86dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMocyxvLGUuZGlyZWN0aW9ufHxcImJvdGhcIiksb3JpZ2luOmUub3JpZ2lufHxbXCJtaWRkbGVcIixcImNlbnRlclwiXX0sZSk7ZS5mYWRlJiYoYS5mcm9tLm9wYWNpdHk9MSxhLnRvLm9wYWNpdHk9MCksdC5lZmZlY3RzLmVmZmVjdC5zaXplLmNhbGwodGhpcyxhLGkpfSksdC5lZmZlY3RzLmRlZmluZShcInB1ZmZcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBzPXQuZXh0ZW5kKCEwLHt9LGUse2ZhZGU6ITAscGVyY2VudDpwYXJzZUludChlLnBlcmNlbnQsMTApfHwxNTB9KTt0LmVmZmVjdHMuZWZmZWN0LnNjYWxlLmNhbGwodGhpcyxzLGkpfSksdC5lZmZlY3RzLmRlZmluZShcInB1bHNhdGVcIixcInNob3dcIixmdW5jdGlvbihlLGkpe3ZhciBzPXQodGhpcyksbj1lLm1vZGUsbz1cInNob3dcIj09PW4sYT1cImhpZGVcIj09PW4scj1vfHxhLGg9MiooZS50aW1lc3x8NSkrKHI/MTowKSxsPWUuZHVyYXRpb24vaCxjPTAsdT0xLGQ9cy5xdWV1ZSgpLmxlbmd0aDtmb3IoKG98fCFzLmlzKFwiOnZpc2libGVcIikpJiYocy5jc3MoXCJvcGFjaXR5XCIsMCkuc2hvdygpLGM9MSk7aD51O3UrKylzLmFuaW1hdGUoe29wYWNpdHk6Y30sbCxlLmVhc2luZyksYz0xLWM7cy5hbmltYXRlKHtvcGFjaXR5OmN9LGwsZS5lYXNpbmcpLHMucXVldWUoaSksdC5lZmZlY3RzLnVuc2hpZnQocyxkLGgrMSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwic2hha2VcIixmdW5jdGlvbihlLGkpe3ZhciBzPTEsbj10KHRoaXMpLG89ZS5kaXJlY3Rpb258fFwibGVmdFwiLGE9ZS5kaXN0YW5jZXx8MjAscj1lLnRpbWVzfHwzLGg9MipyKzEsbD1NYXRoLnJvdW5kKGUuZHVyYXRpb24vaCksYz1cInVwXCI9PT1vfHxcImRvd25cIj09PW8/XCJ0b3BcIjpcImxlZnRcIix1PVwidXBcIj09PW98fFwibGVmdFwiPT09byxkPXt9LHA9e30sZj17fSxnPW4ucXVldWUoKS5sZW5ndGg7Zm9yKHQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihuKSxkW2NdPSh1P1wiLT1cIjpcIis9XCIpK2EscFtjXT0odT9cIis9XCI6XCItPVwiKSsyKmEsZltjXT0odT9cIi09XCI6XCIrPVwiKSsyKmEsbi5hbmltYXRlKGQsbCxlLmVhc2luZyk7cj5zO3MrKyluLmFuaW1hdGUocCxsLGUuZWFzaW5nKS5hbmltYXRlKGYsbCxlLmVhc2luZyk7bi5hbmltYXRlKHAsbCxlLmVhc2luZykuYW5pbWF0ZShkLGwvMixlLmVhc2luZykucXVldWUoaSksdC5lZmZlY3RzLnVuc2hpZnQobixnLGgrMSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwic2xpZGVcIixcInNob3dcIixmdW5jdGlvbihlLGkpe3ZhciBzLG4sbz10KHRoaXMpLGE9e3VwOltcImJvdHRvbVwiLFwidG9wXCJdLGRvd246W1widG9wXCIsXCJib3R0b21cIl0sbGVmdDpbXCJyaWdodFwiLFwibGVmdFwiXSxyaWdodDpbXCJsZWZ0XCIsXCJyaWdodFwiXX0scj1lLm1vZGUsaD1lLmRpcmVjdGlvbnx8XCJsZWZ0XCIsbD1cInVwXCI9PT1ofHxcImRvd25cIj09PWg/XCJ0b3BcIjpcImxlZnRcIixjPVwidXBcIj09PWh8fFwibGVmdFwiPT09aCx1PWUuZGlzdGFuY2V8fG9bXCJ0b3BcIj09PWw/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSghMCksZD17fTt0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIobykscz1vLmNzc0NsaXAoKSxuPW8ucG9zaXRpb24oKVtsXSxkW2xdPShjPy0xOjEpKnUrbixkLmNsaXA9by5jc3NDbGlwKCksZC5jbGlwW2FbaF1bMV1dPWQuY2xpcFthW2hdWzBdXSxcInNob3dcIj09PXImJihvLmNzc0NsaXAoZC5jbGlwKSxvLmNzcyhsLGRbbF0pLGQuY2xpcD1zLGRbbF09biksby5hbmltYXRlKGQse3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pO3ZhciBmO3QudWlCYWNrQ29tcGF0IT09ITEmJihmPXQuZWZmZWN0cy5kZWZpbmUoXCJ0cmFuc2ZlclwiLGZ1bmN0aW9uKGUsaSl7dCh0aGlzKS50cmFuc2ZlcihlLGkpfSkpLHQudWkuZm9jdXNhYmxlPWZ1bmN0aW9uKGkscyl7dmFyIG4sbyxhLHIsaCxsPWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImFyZWFcIj09PWw/KG49aS5wYXJlbnROb2RlLG89bi5uYW1lLGkuaHJlZiYmbyYmXCJtYXBcIj09PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8oYT10KFwiaW1nW3VzZW1hcD0nI1wiK28rXCInXVwiKSxhLmxlbmd0aD4wJiZhLmlzKFwiOnZpc2libGVcIikpOiExKTooL14oaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC8udGVzdChsKT8ocj0haS5kaXNhYmxlZCxyJiYoaD10KGkpLmNsb3Nlc3QoXCJmaWVsZHNldFwiKVswXSxoJiYocj0haC5kaXNhYmxlZCkpKTpyPVwiYVwiPT09bD9pLmhyZWZ8fHM6cyxyJiZ0KGkpLmlzKFwiOnZpc2libGVcIikmJmUodChpKSkpfSx0LmV4dGVuZCh0LmV4cHJbXCI6XCJdLHtmb2N1c2FibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQudWkuZm9jdXNhYmxlKGUsbnVsbCE9dC5hdHRyKGUsXCJ0YWJpbmRleFwiKSl9fSksdC51aS5mb2N1c2FibGUsdC5mbi5mb3JtPWZ1bmN0aW9uKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXNbMF0uZm9ybT90aGlzLmNsb3Nlc3QoXCJmb3JtXCIpOnQodGhpc1swXS5mb3JtKX0sdC51aS5mb3JtUmVzZXRNaXhpbj17X2Zvcm1SZXNldEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgaT1lLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKTt0LmVhY2goaSxmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpfSl9KX0sX2JpbmRGb3JtUmVzZXRIYW5kbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5mb3JtPXRoaXMuZWxlbWVudC5mb3JtKCksdGhpcy5mb3JtLmxlbmd0aCl7dmFyIHQ9dGhpcy5mb3JtLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKXx8W107dC5sZW5ndGh8fHRoaXMuZm9ybS5vbihcInJlc2V0LnVpLWZvcm0tcmVzZXRcIix0aGlzLl9mb3JtUmVzZXRIYW5kbGVyKSx0LnB1c2godGhpcyksdGhpcy5mb3JtLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiLHQpfX0sX3VuYmluZEZvcm1SZXNldEhhbmRsZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmZvcm0ubGVuZ3RoKXt2YXIgZT10aGlzLmZvcm0uZGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIpO2Uuc3BsaWNlKHQuaW5BcnJheSh0aGlzLGUpLDEpLGUubGVuZ3RoP3RoaXMuZm9ybS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIixlKTp0aGlzLmZvcm0ucmVtb3ZlRGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIpLm9mZihcInJlc2V0LnVpLWZvcm0tcmVzZXRcIil9fX0sXCIxLjdcIj09PXQuZm4uanF1ZXJ5LnN1YnN0cmluZygwLDMpJiYodC5lYWNoKFtcIldpZHRoXCIsXCJIZWlnaHRcIl0sZnVuY3Rpb24oZSxpKXtmdW5jdGlvbiBzKGUsaSxzLG8pe3JldHVybiB0LmVhY2gobixmdW5jdGlvbigpe2ktPXBhcnNlRmxvYXQodC5jc3MoZSxcInBhZGRpbmdcIit0aGlzKSl8fDAscyYmKGktPXBhcnNlRmxvYXQodC5jc3MoZSxcImJvcmRlclwiK3RoaXMrXCJXaWR0aFwiKSl8fDApLG8mJihpLT1wYXJzZUZsb2F0KHQuY3NzKGUsXCJtYXJnaW5cIit0aGlzKSl8fDApfSksaX12YXIgbj1cIldpZHRoXCI9PT1pP1tcIkxlZnRcIixcIlJpZ2h0XCJdOltcIlRvcFwiLFwiQm90dG9tXCJdLG89aS50b0xvd2VyQ2FzZSgpLGE9e2lubmVyV2lkdGg6dC5mbi5pbm5lcldpZHRoLGlubmVySGVpZ2h0OnQuZm4uaW5uZXJIZWlnaHQsb3V0ZXJXaWR0aDp0LmZuLm91dGVyV2lkdGgsb3V0ZXJIZWlnaHQ6dC5mbi5vdXRlckhlaWdodH07dC5mbltcImlubmVyXCIraV09ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/YVtcImlubmVyXCIraV0uY2FsbCh0aGlzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmNzcyhvLHModGhpcyxlKStcInB4XCIpfSl9LHQuZm5bXCJvdXRlclwiK2ldPWZ1bmN0aW9uKGUsbil7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGU/YVtcIm91dGVyXCIraV0uY2FsbCh0aGlzLGUpOnRoaXMuZWFjaChmdW5jdGlvbigpe3QodGhpcykuY3NzKG8scyh0aGlzLGUsITAsbikrXCJweFwiKX0pfX0pLHQuZm4uYWRkQmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGQobnVsbD09dD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcih0KSl9KSx0LnVpLmtleUNvZGU9e0JBQ0tTUEFDRTo4LENPTU1BOjE4OCxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsTEVGVDozNyxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fSx0LnVpLmVzY2FwZVNlbGVjdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9LyhbIVwiIyQlJicoKSorLC5cXC86Ozw9Pj9AW1xcXV5ge3x9fl0pL2c7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodCxcIlxcXFwkMVwiKX19KCksdC5mbi5sYWJlbHM9ZnVuY3Rpb24oKXt2YXIgZSxpLHMsbixvO3JldHVybiB0aGlzWzBdLmxhYmVscyYmdGhpc1swXS5sYWJlbHMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKHRoaXNbMF0ubGFiZWxzKToobj10aGlzLmVxKDApLnBhcmVudHMoXCJsYWJlbFwiKSxzPXRoaXMuYXR0cihcImlkXCIpLHMmJihlPXRoaXMuZXEoMCkucGFyZW50cygpLmxhc3QoKSxvPWUuYWRkKGUubGVuZ3RoP2Uuc2libGluZ3MoKTp0aGlzLnNpYmxpbmdzKCkpLGk9XCJsYWJlbFtmb3I9J1wiK3QudWkuZXNjYXBlU2VsZWN0b3IocykrXCInXVwiLG49bi5hZGQoby5maW5kKGkpLmFkZEJhY2soaSkpKSx0aGlzLnB1c2hTdGFjayhuKSl9LHQuZm4uc2Nyb2xsUGFyZW50PWZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuY3NzKFwicG9zaXRpb25cIikscz1cImFic29sdXRlXCI9PT1pLG49ZT8vKGF1dG98c2Nyb2xsfGhpZGRlbikvOi8oYXV0b3xzY3JvbGwpLyxvPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuIHMmJlwic3RhdGljXCI9PT1lLmNzcyhcInBvc2l0aW9uXCIpPyExOm4udGVzdChlLmNzcyhcIm92ZXJmbG93XCIpK2UuY3NzKFwib3ZlcmZsb3cteVwiKStlLmNzcyhcIm92ZXJmbG93LXhcIikpfSkuZXEoMCk7cmV0dXJuXCJmaXhlZFwiIT09aSYmby5sZW5ndGg/bzp0KHRoaXNbMF0ub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQpfSx0LmV4dGVuZCh0LmV4cHJbXCI6XCJdLHt0YWJiYWJsZTpmdW5jdGlvbihlKXt2YXIgaT10LmF0dHIoZSxcInRhYmluZGV4XCIpLHM9bnVsbCE9aTtyZXR1cm4oIXN8fGk+PTApJiZ0LnVpLmZvY3VzYWJsZShlLHMpfX0pLHQuZm4uZXh0ZW5kKHt1bmlxdWVJZDpmdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuaWR8fCh0aGlzLmlkPVwidWktaWQtXCIrICsrdCl9KX19KCkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cXGQrJC8udGVzdCh0aGlzLmlkKSYmdCh0aGlzKS5yZW1vdmVBdHRyKFwiaWRcIil9KX19KSx0LndpZGdldChcInVpLmFjY29yZGlvblwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsb3B0aW9uczp7YWN0aXZlOjAsYW5pbWF0ZTp7fSxjbGFzc2VzOntcInVpLWFjY29yZGlvbi1oZWFkZXJcIjpcInVpLWNvcm5lci10b3BcIixcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1hY2NvcmRpb24tY29udGVudFwiOlwidWktY29ybmVyLWJvdHRvbVwifSxjb2xsYXBzaWJsZTohMSxldmVudDpcImNsaWNrXCIsaGVhZGVyOlwiPiBsaSA+IDpmaXJzdC1jaGlsZCwgPiA6bm90KGxpKTpldmVuXCIsaGVpZ2h0U3R5bGU6XCJhdXRvXCIsaWNvbnM6e2FjdGl2ZUhlYWRlcjpcInVpLWljb24tdHJpYW5nbGUtMS1zXCIsaGVhZGVyOlwidWktaWNvbi10cmlhbmdsZS0xLWVcIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxoaWRlUHJvcHM6e2JvcmRlclRvcFdpZHRoOlwiaGlkZVwiLGJvcmRlckJvdHRvbVdpZHRoOlwiaGlkZVwiLHBhZGRpbmdUb3A6XCJoaWRlXCIscGFkZGluZ0JvdHRvbTpcImhpZGVcIixoZWlnaHQ6XCJoaWRlXCJ9LHNob3dQcm9wczp7Ym9yZGVyVG9wV2lkdGg6XCJzaG93XCIsYm9yZGVyQm90dG9tV2lkdGg6XCJzaG93XCIscGFkZGluZ1RvcDpcInNob3dcIixwYWRkaW5nQm90dG9tOlwic2hvd1wiLGhlaWdodDpcInNob3dcIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLnByZXZTaG93PXRoaXMucHJldkhpZGU9dCgpLHRoaXMuX2FkZENsYXNzKFwidWktYWNjb3JkaW9uXCIsXCJ1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0XCIpLHRoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwidGFibGlzdFwiKSxlLmNvbGxhcHNpYmxlfHxlLmFjdGl2ZSE9PSExJiZudWxsIT1lLmFjdGl2ZXx8KGUuYWN0aXZlPTApLHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSwwPmUuYWN0aXZlJiYoZS5hY3RpdmUrPXRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuX3JlZnJlc2goKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLm5leHQoKTp0KCl9fSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgZSxpLHM9dGhpcy5vcHRpb25zLmljb25zO3MmJihlPXQoXCI8c3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3MoZSxcInVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiLFwidWktaWNvbiBcIitzLmhlYWRlciksZS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSxpPXRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhpLHMuaGVhZGVyKS5fYWRkQ2xhc3MoaSxudWxsLHMuYWN0aXZlSGVhZGVyKS5fYWRkQ2xhc3ModGhpcy5oZWFkZXJzLFwidWktYWNjb3JkaW9uLWljb25zXCIpKX0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaGVhZGVycyxcInVpLWFjY29yZGlvbi1pY29uc1wiKSx0aGlzLmhlYWRlcnMuY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLnJlbW92ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciB0O3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwicm9sZVwiKSx0aGlzLmhlYWRlcnMucmVtb3ZlQXR0cihcInJvbGUgYXJpYS1leHBhbmRlZCBhcmlhLXNlbGVjdGVkIGFyaWEtY29udHJvbHMgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLl9kZXN0cm95SWNvbnMoKSx0PXRoaXMuaGVhZGVycy5uZXh0KCkuY3NzKFwiZGlzcGxheVwiLFwiXCIpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtaGlkZGVuIGFyaWEtbGFiZWxsZWRieVwiKS5yZW1vdmVVbmlxdWVJZCgpLFwiY29udGVudFwiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZ0LmNzcyhcImhlaWdodFwiLFwiXCIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJhY3RpdmVcIj09PXQ/KHRoaXMuX2FjdGl2YXRlKGUpLHZvaWQgMCk6KFwiZXZlbnRcIj09PXQmJih0aGlzLm9wdGlvbnMuZXZlbnQmJnRoaXMuX29mZih0aGlzLmhlYWRlcnMsdGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEV2ZW50cyhlKSksdGhpcy5fc3VwZXIodCxlKSxcImNvbGxhcHNpYmxlXCIhPT10fHxlfHx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITF8fHRoaXMuX2FjdGl2YXRlKDApLFwiaWNvbnNcIj09PXQmJih0aGlzLl9kZXN0cm95SWNvbnMoKSxlJiZ0aGlzLl9jcmVhdGVJY29ucygpKSx2b2lkIDApfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsdCksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCl9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe2lmKCFlLmFsdEtleSYmIWUuY3RybEtleSl7dmFyIGk9dC51aS5rZXlDb2RlLHM9dGhpcy5oZWFkZXJzLmxlbmd0aCxuPXRoaXMuaGVhZGVycy5pbmRleChlLnRhcmdldCksbz0hMTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046bz10aGlzLmhlYWRlcnNbKG4rMSklc107YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOm89dGhpcy5oZWFkZXJzWyhuLTErcyklc107YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIoZSk7YnJlYWs7Y2FzZSBpLkhPTUU6bz10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDpvPXRoaXMuaGVhZGVyc1tzLTFdfW8mJih0KGUudGFyZ2V0KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksdChvKS5hdHRyKFwidGFiSW5kZXhcIiwwKSx0KG8pLnRyaWdnZXIoXCJmb2N1c1wiKSxlLnByZXZlbnREZWZhdWx0KCkpfX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbihlKXtlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuVVAmJmUuY3RybEtleSYmdChlLmN1cnJlbnRUYXJnZXQpLnByZXYoKS50cmlnZ2VyKFwiZm9jdXNcIil9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7dGhpcy5fcHJvY2Vzc1BhbmVscygpLGUuYWN0aXZlPT09ITEmJmUuY29sbGFwc2libGU9PT0hMHx8IXRoaXMuaGVhZGVycy5sZW5ndGg/KGUuYWN0aXZlPSExLHRoaXMuYWN0aXZlPXQoKSk6ZS5hY3RpdmU9PT0hMT90aGlzLl9hY3RpdmF0ZSgwKTp0aGlzLmFjdGl2ZS5sZW5ndGgmJiF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy5oZWFkZXJzLmxlbmd0aD09PXRoaXMuaGVhZGVycy5maW5kKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmxlbmd0aD8oZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKTp0aGlzLl9hY3RpdmF0ZShNYXRoLm1heCgwLGUuYWN0aXZlLTEpKTplLmFjdGl2ZT10aGlzLmhlYWRlcnMuaW5kZXgodGhpcy5hY3RpdmUpLHRoaXMuX2Rlc3Ryb3lJY29ucygpLHRoaXMuX3JlZnJlc2goKX0sX3Byb2Nlc3NQYW5lbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlYWRlcnMsZT10aGlzLnBhbmVsczt0aGlzLmhlYWRlcnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhlYWRlciksdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWFkZXJzLFwidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiLFwidWktc3RhdGUtZGVmYXVsdFwiKSx0aGlzLnBhbmVscz10aGlzLmhlYWRlcnMubmV4dCgpLmZpbHRlcihcIjpub3QoLnVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSlcIikuaGlkZSgpLHRoaXMuX2FkZENsYXNzKHRoaXMucGFuZWxzLFwidWktYWNjb3JkaW9uLWNvbnRlbnRcIixcInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudFwiKSxlJiYodGhpcy5fb2ZmKHQubm90KHRoaXMuaGVhZGVycykpLHRoaXMuX29mZihlLm5vdCh0aGlzLnBhbmVscykpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMub3B0aW9ucyxzPWkuaGVpZ2h0U3R5bGUsbj10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSksdGhpcy5fYWRkQ2xhc3ModGhpcy5hY3RpdmUsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLl9yZW1vdmVDbGFzcyh0aGlzLmFjdGl2ZSxcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuYWN0aXZlLm5leHQoKSxcInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZVwiKSx0aGlzLmFjdGl2ZS5uZXh0KCkuc2hvdygpLHRoaXMuaGVhZGVycy5hdHRyKFwicm9sZVwiLFwidGFiXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKSxzPWUubmV4dCgpLG49cy51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKTtlLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIsbikscy5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIsaSl9KS5uZXh0KCkuYXR0cihcInJvbGVcIixcInRhYnBhbmVsXCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCIsdGFiSW5kZXg6LTF9KS5uZXh0KCkuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcInRydWVcIixcImFyaWEtZXhwYW5kZWRcIjpcInRydWVcIix0YWJJbmRleDowfSkubmV4dCgpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cihcInRhYkluZGV4XCIsMCksdGhpcy5fY3JlYXRlSWNvbnMoKSx0aGlzLl9zZXR1cEV2ZW50cyhpLmV2ZW50KSxcImZpbGxcIj09PXM/KGU9bi5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoXCI6dmlzaWJsZVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxzPWkuY3NzKFwicG9zaXRpb25cIik7XCJhYnNvbHV0ZVwiIT09cyYmXCJmaXhlZFwiIT09cyYmKGUtPWkub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7ZS09dCh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGUtdCh0aGlzKS5pbm5lckhlaWdodCgpK3QodGhpcykuaGVpZ2h0KCkpKX0pLmNzcyhcIm92ZXJmbG93XCIsXCJhdXRvXCIpKTpcImF1dG9cIj09PXMmJihlPTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKS5pcyhcIjp2aXNpYmxlXCIpO2l8fHQodGhpcykuc2hvdygpLGU9TWF0aC5tYXgoZSx0KHRoaXMpLmNzcyhcImhlaWdodFwiLFwiXCIpLmhlaWdodCgpKSxpfHx0KHRoaXMpLmhpZGUoKX0pLmhlaWdodChlKSl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9maW5kQWN0aXZlKGUpWzBdO2khPT10aGlzLmFjdGl2ZVswXSYmKGk9aXx8dGhpcy5hY3RpdmVbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6dC5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT90aGlzLmhlYWRlcnMuZXEoZSk6dCgpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24oZSl7dmFyIGk9e2tleWRvd246XCJfa2V5ZG93blwifTtlJiZ0LmVhY2goZS5zcGxpdChcIiBcIiksZnVuY3Rpb24odCxlKXtpW2VdPVwiX2V2ZW50SGFuZGxlclwifSksdGhpcy5fb2ZmKHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkpLHRoaXMuX29uKHRoaXMuaGVhZGVycyxpKSx0aGlzLl9vbih0aGlzLmhlYWRlcnMubmV4dCgpLHtrZXlkb3duOlwiX3BhbmVsS2V5RG93blwifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxvPXRoaXMuYWN0aXZlLGE9dChlLmN1cnJlbnRUYXJnZXQpLHI9YVswXT09PW9bMF0saD1yJiZuLmNvbGxhcHNpYmxlLGw9aD90KCk6YS5uZXh0KCksYz1vLm5leHQoKSx1PXtvbGRIZWFkZXI6byxvbGRQYW5lbDpjLG5ld0hlYWRlcjpoP3QoKTphLG5ld1BhbmVsOmx9O2UucHJldmVudERlZmF1bHQoKSxyJiYhbi5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcihcImJlZm9yZUFjdGl2YXRlXCIsZSx1KT09PSExfHwobi5hY3RpdmU9aD8hMTp0aGlzLmhlYWRlcnMuaW5kZXgoYSksdGhpcy5hY3RpdmU9cj90KCk6YSx0aGlzLl90b2dnbGUodSksdGhpcy5fcmVtb3ZlQ2xhc3MobyxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksbi5pY29ucyYmKGk9by5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxudWxsLG4uaWNvbnMuYWN0aXZlSGVhZGVyKS5fYWRkQ2xhc3MoaSxudWxsLG4uaWNvbnMuaGVhZGVyKSkscnx8KHRoaXMuX3JlbW92ZUNsYXNzKGEsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiKS5fYWRkQ2xhc3MoYSxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksbi5pY29ucyYmKHM9YS5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MocyxudWxsLG4uaWNvbnMuaGVhZGVyKS5fYWRkQ2xhc3MocyxudWxsLG4uaWNvbnMuYWN0aXZlSGVhZGVyKSksdGhpcy5fYWRkQ2xhc3MoYS5uZXh0KCksXCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmVcIikpKX0sX3RvZ2dsZTpmdW5jdGlvbihlKXt2YXIgaT1lLm5ld1BhbmVsLHM9dGhpcy5wcmV2U2hvdy5sZW5ndGg/dGhpcy5wcmV2U2hvdzplLm9sZFBhbmVsO3RoaXMucHJldlNob3cuYWRkKHRoaXMucHJldkhpZGUpLnN0b3AoITAsITApLHRoaXMucHJldlNob3c9aSx0aGlzLnByZXZIaWRlPXMsdGhpcy5vcHRpb25zLmFuaW1hdGU/dGhpcy5fYW5pbWF0ZShpLHMsZSk6KHMuaGlkZSgpLGkuc2hvdygpLHRoaXMuX3RvZ2dsZUNvbXBsZXRlKGUpKSxzLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pLHMucHJldigpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KSxpLmxlbmd0aCYmcy5sZW5ndGg/cy5wcmV2KCkuYXR0cih7dGFiSW5kZXg6LTEsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSk6aS5sZW5ndGgmJnRoaXMuaGVhZGVycy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMD09PXBhcnNlSW50KHQodGhpcykuYXR0cihcInRhYkluZGV4XCIpLDEwKX0pLmF0dHIoXCJ0YWJJbmRleFwiLC0xKSxpLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIikucHJldigpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KX0sX2FuaW1hdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzLG4sbyxhPXRoaXMscj0wLGg9dC5jc3MoXCJib3gtc2l6aW5nXCIpLGw9dC5sZW5ndGgmJighZS5sZW5ndGh8fHQuaW5kZXgoKTxlLmluZGV4KCkpLGM9dGhpcy5vcHRpb25zLmFuaW1hdGV8fHt9LHU9bCYmYy5kb3dufHxjLGQ9ZnVuY3Rpb24oKXthLl90b2dnbGVDb21wbGV0ZShpKX07cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHUmJihvPXUpLFwic3RyaW5nXCI9PXR5cGVvZiB1JiYobj11KSxuPW58fHUuZWFzaW5nfHxjLmVhc2luZyxvPW98fHUuZHVyYXRpb258fGMuZHVyYXRpb24sZS5sZW5ndGg/dC5sZW5ndGg/KHM9dC5zaG93KCkub3V0ZXJIZWlnaHQoKSxlLmFuaW1hdGUodGhpcy5oaWRlUHJvcHMse2R1cmF0aW9uOm8sZWFzaW5nOm4sc3RlcDpmdW5jdGlvbih0LGUpe2Uubm93PU1hdGgucm91bmQodCl9fSksdC5oaWRlKCkuYW5pbWF0ZSh0aGlzLnNob3dQcm9wcyx7ZHVyYXRpb246byxlYXNpbmc6bixjb21wbGV0ZTpkLHN0ZXA6ZnVuY3Rpb24odCxpKXtpLm5vdz1NYXRoLnJvdW5kKHQpLFwiaGVpZ2h0XCIhPT1pLnByb3A/XCJjb250ZW50LWJveFwiPT09aCYmKHIrPWkubm93KTpcImNvbnRlbnRcIiE9PWEub3B0aW9ucy5oZWlnaHRTdHlsZSYmKGkubm93PU1hdGgucm91bmQocy1lLm91dGVySGVpZ2h0KCktcikscj0wKX19KSx2b2lkIDApOmUuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyxvLG4sZCk6dC5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLG8sbixkKX0sX3RvZ2dsZUNvbXBsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXQub2xkUGFuZWwsaT1lLnByZXYoKTt0aGlzLl9yZW1vdmVDbGFzcyhlLFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpLHRoaXMuX3JlbW92ZUNsYXNzKGksXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiKS5fYWRkQ2xhc3MoaSxcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIpLGUubGVuZ3RoJiYoZS5wYXJlbnQoKVswXS5jbGFzc05hbWU9ZS5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLG51bGwsdCl9fSksdC51aS5zYWZlQWN0aXZlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goaSl7ZT10LmJvZHl9cmV0dXJuIGV8fChlPXQuYm9keSksZS5ub2RlTmFtZXx8KGU9dC5ib2R5KSxlfSx0LndpZGdldChcInVpLm1lbnVcIix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmF1bHRFbGVtZW50OlwiPHVsPlwiLGRlbGF5OjMwMCxvcHRpb25zOntpY29uczp7c3VibWVudTpcInVpLWljb24tY2FyZXQtMS1lXCJ9LGl0ZW1zOlwiPiAqXCIsbWVudXM6XCJ1bFwiLHBvc2l0aW9uOntteTpcImxlZnQgdG9wXCIsYXQ6XCJyaWdodCB0b3BcIn0scm9sZTpcIm1lbnVcIixibHVyOm51bGwsZm9jdXM6bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuYWN0aXZlTWVudT10aGlzLmVsZW1lbnQsdGhpcy5tb3VzZUhhbmRsZWQ9ITEsdGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1tZW51XCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fb24oe1wibW91c2Vkb3duIC51aS1tZW51LWl0ZW1cIjpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LFwiY2xpY2sgLnVpLW1lbnUtaXRlbVwiOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZS50YXJnZXQpLHM9dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKTshdGhpcy5tb3VzZUhhbmRsZWQmJmkubm90KFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmxlbmd0aCYmKHRoaXMuc2VsZWN0KGUpLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKXx8KHRoaXMubW91c2VIYW5kbGVkPSEwKSxpLmhhcyhcIi51aS1tZW51XCIpLmxlbmd0aD90aGlzLmV4cGFuZChlKTohdGhpcy5lbGVtZW50LmlzKFwiOmZvY3VzXCIpJiZzLmNsb3Nlc3QoXCIudWktbWVudVwiKS5sZW5ndGgmJih0aGlzLmVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIsWyEwXSksdGhpcy5hY3RpdmUmJjE9PT10aGlzLmFjdGl2ZS5wYXJlbnRzKFwiLnVpLW1lbnVcIikubGVuZ3RoJiZjbGVhclRpbWVvdXQodGhpcy50aW1lcikpKX0sXCJtb3VzZWVudGVyIC51aS1tZW51LWl0ZW1cIjpmdW5jdGlvbihlKXtpZighdGhpcy5wcmV2aW91c0ZpbHRlcil7dmFyIGk9dChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIikscz10KGUuY3VycmVudFRhcmdldCk7aVswXT09PXNbMF0mJih0aGlzLl9yZW1vdmVDbGFzcyhzLnNpYmxpbmdzKCkuY2hpbGRyZW4oXCIudWktc3RhdGUtYWN0aXZlXCIpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5mb2N1cyhlLHMpKX19LG1vdXNlbGVhdmU6XCJjb2xsYXBzZUFsbFwiLFwibW91c2VsZWF2ZSAudWktbWVudVwiOlwiY29sbGFwc2VBbGxcIixmb2N1czpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuYWN0aXZlfHx0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmVxKDApO2V8fHRoaXMuZm9jdXModCxpKX0sYmx1cjpmdW5jdGlvbihlKXt0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciBpPSF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKTtpJiZ0aGlzLmNvbGxhcHNlQWxsKGUpfSl9LGtleWRvd246XCJfa2V5ZG93blwifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5fY2xvc2VPbkRvY3VtZW50Q2xpY2sodCkmJnRoaXMuY29sbGFwc2VBbGwodCksdGhpcy5tb3VzZUhhbmRsZWQ9ITF9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudS1pdGVtXCIpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtZGlzYWJsZWRcIiksaT1lLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQXR0cihcInRhYkluZGV4IHJvbGUgYXJpYS1oYXNwb3B1cFwiKTt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKS5maW5kKFwiLnVpLW1lbnVcIikuYWRkQmFjaygpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtbGFiZWxsZWRieSBhcmlhLWV4cGFuZGVkIGFyaWEtaGlkZGVuIGFyaWEtZGlzYWJsZWQgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksaS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLW1lbnUtc3VibWVudS1jYXJldFwiKSYmZS5yZW1vdmUoKX0pfSxfa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhPSEwO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5wcmV2aW91c1BhZ2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMubmV4dFBhZ2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTp0aGlzLl9tb3ZlKFwiZmlyc3RcIixcImZpcnN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoXCJsYXN0XCIsXCJsYXN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6dGhpcy5wcmV2aW91cyhlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5ET1dOOnRoaXMubmV4dChlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5MRUZUOnRoaXMuY29sbGFwc2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmdGhpcy5leHBhbmQoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5URVI6Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UoZSk7YnJlYWs7ZGVmYXVsdDphPSExLHM9dGhpcy5wcmV2aW91c0ZpbHRlcnx8XCJcIixvPSExLG49ZS5rZXlDb2RlPj05NiYmMTA1Pj1lLmtleUNvZGU/XCJcIisoZS5rZXlDb2RlLTk2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksY2xlYXJUaW1lb3V0KHRoaXMuZmlsdGVyVGltZXIpLG49PT1zP289ITA6bj1zK24saT10aGlzLl9maWx0ZXJNZW51SXRlbXMobiksaT1vJiYtMSE9PWkuaW5kZXgodGhpcy5hY3RpdmUubmV4dCgpKT90aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKTppLGkubGVuZ3RofHwobj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksaT10aGlzLl9maWx0ZXJNZW51SXRlbXMobikpLGkubGVuZ3RoPyh0aGlzLmZvY3VzKGUsaSksdGhpcy5wcmV2aW91c0ZpbHRlcj1uLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9YSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmKHRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiW2FyaWEtaGFzcG9wdXA9J3RydWUnXVwiKS5sZW5ndGg/dGhpcy5leHBhbmQodCk6dGhpcy5zZWxlY3QodCkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbyxhPXRoaXMscj10aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSxoPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5tZW51cyk7dGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS1tZW51LWljb25zXCIsbnVsbCwhIXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLWljb25cIikubGVuZ3RoKSxzPWguZmlsdGVyKFwiOm5vdCgudWktbWVudSlcIikuaGlkZSgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5wcmV2KCkscz10KFwiPHNwYW4+XCIpLmRhdGEoXCJ1aS1tZW51LXN1Ym1lbnUtY2FyZXRcIiwhMCk7YS5fYWRkQ2xhc3MocyxcInVpLW1lbnUtaWNvblwiLFwidWktaWNvbiBcIityKSxpLmF0dHIoXCJhcmlhLWhhc3BvcHVwXCIsXCJ0cnVlXCIpLnByZXBlbmQocyksZS5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIsaS5hdHRyKFwiaWRcIikpfSksdGhpcy5fYWRkQ2xhc3MocyxcInVpLW1lbnVcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1mcm9udFwiKSxlPWguYWRkKHRoaXMuZWxlbWVudCksaT1lLmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxpLm5vdChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7YS5faXNEaXZpZGVyKGUpJiZhLl9hZGRDbGFzcyhlLFwidWktbWVudS1kaXZpZGVyXCIsXCJ1aS13aWRnZXQtY29udGVudFwiKX0pLG49aS5ub3QoXCIudWktbWVudS1pdGVtLCAudWktbWVudS1kaXZpZGVyXCIpLG89bi5jaGlsZHJlbigpLm5vdChcIi51aS1tZW51XCIpLnVuaXF1ZUlkKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksdGhpcy5fYWRkQ2xhc3MobixcInVpLW1lbnUtaXRlbVwiKS5fYWRkQ2xhc3MobyxcInVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLGkuZmlsdGVyKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJ0cnVlXCIpLHRoaXMuYWN0aXZlJiYhdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pJiZ0aGlzLmJsdXIoKX0sX2l0ZW1Sb2xlOmZ1bmN0aW9uKCl7cmV0dXJue21lbnU6XCJtZW51aXRlbVwiLGxpc3Rib3g6XCJvcHRpb25cIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJpY29uc1wiPT09dCl7dmFyIGk9dGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudS1pY29uXCIpO3RoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSkuX2FkZENsYXNzKGksbnVsbCxlLnN1Ym1lbnUpfXRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIix0K1wiXCIpLHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCl9LGZvY3VzOmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuO3RoaXMuYmx1cih0LHQmJlwiZm9jdXNcIj09PXQudHlwZSksdGhpcy5fc2Nyb2xsSW50b1ZpZXcoZSksdGhpcy5hY3RpdmU9ZS5maXJzdCgpLHM9dGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fYWRkQ2xhc3MocyxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLHMuYXR0cihcImlkXCIpKSxuPXRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIpLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLHRoaXMuX2FkZENsYXNzKG4sbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0JiZcImtleWRvd25cIj09PXQudHlwZT90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxpPWUuY2hpbGRyZW4oXCIudWktbWVudVwiKSxpLmxlbmd0aCYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpJiZ0aGlzLl9zdGFydE9wZW5pbmcoaSksdGhpcy5hY3RpdmVNZW51PWUucGFyZW50KCksdGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsdCx7aXRlbTplfSl9LF9zY3JvbGxJbnRvVmlldzpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhLHI7dGhpcy5faGFzU2Nyb2xsKCkmJihpPXBhcnNlRmxvYXQodC5jc3ModGhpcy5hY3RpdmVNZW51WzBdLFwiYm9yZGVyVG9wV2lkdGhcIikpfHwwLHM9cGFyc2VGbG9hdCh0LmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sXCJwYWRkaW5nVG9wXCIpKXx8MCxuPWUub2Zmc2V0KCkudG9wLXRoaXMuYWN0aXZlTWVudS5vZmZzZXQoKS50b3AtaS1zLG89dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcCgpLGE9dGhpcy5hY3RpdmVNZW51LmhlaWdodCgpLHI9ZS5vdXRlckhlaWdodCgpLDA+bj90aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKG8rbik6bityPmEmJnRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AobytuLWErcikpfSxibHVyOmZ1bmN0aW9uKHQsZSl7ZXx8Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuYWN0aXZlJiYodGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLl90cmlnZ2VyKFwiYmx1clwiLHQse2l0ZW06dGhpcy5hY3RpdmV9KSx0aGlzLmFjdGl2ZT1udWxsKX0sX3N0YXJ0T3BlbmluZzpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksXCJ0cnVlXCI9PT10LmF0dHIoXCJhcmlhLWhpZGRlblwiKSYmKHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpLHRoaXMuX29wZW4odCl9LHRoaXMuZGVsYXkpKX0sX29wZW46ZnVuY3Rpb24oZSl7dmFyIGk9dC5leHRlbmQoe29mOnRoaXMuYWN0aXZlfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51XCIpLm5vdChlLnBhcmVudHMoXCIudWktbWVudVwiKSkuaGlkZSgpLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxlLnNob3coKS5yZW1vdmVBdHRyKFwiYXJpYS1oaWRkZW5cIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIikucG9zaXRpb24oaSl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKGUsaSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcz1pP3RoaXMuZWxlbWVudDp0KGUmJmUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnVcIikpO3MubGVuZ3RofHwocz10aGlzLmVsZW1lbnQpLHRoaXMuX2Nsb3NlKHMpLHRoaXMuYmx1cihlKSx0aGlzLl9yZW1vdmVDbGFzcyhzLmZpbmQoXCIudWktc3RhdGUtYWN0aXZlXCIpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5hY3RpdmVNZW51PXN9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSx0LmZpbmQoXCIudWktbWVudVwiKS5oaWRlKCkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKX0sX2Nsb3NlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiF0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnVcIikubGVuZ3RofSxfaXNEaXZpZGVyOmZ1bmN0aW9uKHQpe3JldHVybiEvW15cXC1cXHUyMDE0XFx1MjAxM1xcc10vLnRlc3QodC50ZXh0KCkpfSxjb2xsYXBzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIix0aGlzLmVsZW1lbnQpO2UmJmUubGVuZ3RoJiYodGhpcy5fY2xvc2UoKSx0aGlzLmZvY3VzKHQsZSkpfSxleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLW1lbnUgXCIpLmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maXJzdCgpO2UmJmUubGVuZ3RoJiYodGhpcy5fb3BlbihlLnBhcmVudCgpKSx0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuZm9jdXModCxlKX0pKX0sbmV4dDpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlKFwibmV4dFwiLFwiZmlyc3RcIix0KX0scHJldmlvdXM6ZnVuY3Rpb24odCl7dGhpcy5fbW92ZShcInByZXZcIixcImxhc3RcIix0KX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5sZW5ndGh9LGlzTGFzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5sZW5ndGh9LF9tb3ZlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgczt0aGlzLmFjdGl2ZSYmKHM9XCJmaXJzdFwiPT09dHx8XCJsYXN0XCI9PT10P3RoaXMuYWN0aXZlW1wiZmlyc3RcIj09PXQ/XCJwcmV2QWxsXCI6XCJuZXh0QWxsXCJdKFwiLnVpLW1lbnUtaXRlbVwiKS5lcSgtMSk6dGhpcy5hY3RpdmVbdCtcIkFsbFwiXShcIi51aS1tZW51LWl0ZW1cIikuZXEoMCkpLHMmJnMubGVuZ3RoJiZ0aGlzLmFjdGl2ZXx8KHM9dGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKVtlXSgpKSx0aGlzLmZvY3VzKGkscyl9LG5leHRQYWdlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbjtyZXR1cm4gdGhpcy5hY3RpdmU/KHRoaXMuaXNMYXN0SXRlbSgpfHwodGhpcy5faGFzU2Nyb2xsKCk/KHM9dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLG49dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT10KHRoaXMpLDA+aS5vZmZzZXQoKS50b3Atcy1ufSksdGhpcy5mb2N1cyhlLGkpKTp0aGlzLmZvY3VzKGUsdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKVt0aGlzLmFjdGl2ZT9cImxhc3RcIjpcImZpcnN0XCJdKCkpKSx2b2lkIDApOih0aGlzLm5leHQoZSksdm9pZCAwKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbjtyZXR1cm4gdGhpcy5hY3RpdmU/KHRoaXMuaXNGaXJzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5wcmV2QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGk9dCh0aGlzKSxpLm9mZnNldCgpLnRvcC1zK24+MH0pLHRoaXMuZm9jdXMoZSxpKSk6dGhpcy5mb2N1cyhlLHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlyc3QoKSkpLHZvaWQgMCk6KHRoaXMubmV4dChlKSx2b2lkIDApfSxfaGFzU2Nyb2xsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpPHRoaXMuZWxlbWVudC5wcm9wKFwic2Nyb2xsSGVpZ2h0XCIpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fHQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIpO3ZhciBpPXtpdGVtOnRoaXMuYWN0aXZlfTt0aGlzLmFjdGl2ZS5oYXMoXCIudWktbWVudVwiKS5sZW5ndGh8fHRoaXMuY29sbGFwc2VBbGwoZSwhMCksdGhpcy5fdHJpZ2dlcihcInNlbGVjdFwiLGUsaSl9LF9maWx0ZXJNZW51SXRlbXM6ZnVuY3Rpb24oZSl7dmFyIGk9ZS5yZXBsYWNlKC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZyxcIlxcXFwkJlwiKSxzPVJlZ0V4cChcIl5cIitpLFwiaVwiKTtyZXR1cm4gdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoXCIudWktbWVudS1pdGVtXCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBzLnRlc3QodC50cmltKHQodGhpcykuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIikudGV4dCgpKSl9KX19KSx0LndpZGdldChcInVpLmF1dG9jb21wbGV0ZVwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8aW5wdXQ+XCIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxhdXRvRm9jdXM6ITEsZGVsYXk6MzAwLG1pbkxlbmd0aDoxLHBvc2l0aW9uOntteTpcImxlZnQgdG9wXCIsYXQ6XCJsZWZ0IGJvdHRvbVwiLGNvbGxpc2lvbjpcIm5vbmVcIn0sc291cmNlOm51bGwsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNwb25zZTpudWxsLHNlYXJjaDpudWxsLHNlbGVjdDpudWxsfSxyZXF1ZXN0SW5kZXg6MCxwZW5kaW5nOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlLGkscyxuPXRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG89XCJ0ZXh0YXJlYVwiPT09bixhPVwiaW5wdXRcIj09PW47XHJcbnRoaXMuaXNNdWx0aUxpbmU9b3x8IWEmJnRoaXMuX2lzQ29udGVudEVkaXRhYmxlKHRoaXMuZWxlbWVudCksdGhpcy52YWx1ZU1ldGhvZD10aGlzLmVsZW1lbnRbb3x8YT9cInZhbFwiOlwidGV4dFwiXSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLl9hZGRDbGFzcyhcInVpLWF1dG9jb21wbGV0ZS1pbnB1dFwiKSx0aGlzLmVsZW1lbnQuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpLHRoaXMuX29uKHRoaXMuZWxlbWVudCx7a2V5ZG93bjpmdW5jdGlvbihuKXtpZih0aGlzLmVsZW1lbnQucHJvcChcInJlYWRPbmx5XCIpKXJldHVybiBlPSEwLHM9ITAsaT0hMCx2b2lkIDA7ZT0hMSxzPSExLGk9ITE7dmFyIG89dC51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2Ugby5QQUdFX1VQOmU9ITAsdGhpcy5fbW92ZShcInByZXZpb3VzUGFnZVwiLG4pO2JyZWFrO2Nhc2Ugby5QQUdFX0RPV046ZT0hMCx0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixuKTticmVhaztjYXNlIG8uVVA6ZT0hMCx0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIsbik7YnJlYWs7Y2FzZSBvLkRPV046ZT0hMCx0aGlzLl9rZXlFdmVudChcIm5leHRcIixuKTticmVhaztjYXNlIG8uRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKGU9ITAsbi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QobikpO2JyZWFrO2Nhc2Ugby5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChuKTticmVhaztjYXNlIG8uRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMuY2xvc2Uobiksbi5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0Omk9ITAsdGhpcy5fc2VhcmNoVGltZW91dChuKX19LGtleXByZXNzOmZ1bmN0aW9uKHMpe2lmKGUpcmV0dXJuIGU9ITEsKCF0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpKSYmcy5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMDtpZighaSl7dmFyIG49dC51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoXCJwcmV2aW91c1BhZ2VcIixzKTticmVhaztjYXNlIG4uUEFHRV9ET1dOOnRoaXMuX21vdmUoXCJuZXh0UGFnZVwiLHMpO2JyZWFrO2Nhc2Ugbi5VUDp0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoXCJuZXh0XCIscyl9fX0saW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHM/KHM9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMCk6KHRoaXMuX3NlYXJjaFRpbWVvdXQodCksdm9pZCAwKX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMucHJldmlvdXM9dGhpcy5fdmFsdWUoKX0sYmx1cjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYW5jZWxCbHVyPyhkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHZvaWQgMCk6KGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5jbG9zZSh0KSx0aGlzLl9jaGFuZ2UodCksdm9pZCAwKX19KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PXQoXCI8dWw+XCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KFwiaW5zdGFuY2VcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5tZW51LmVsZW1lbnQsXCJ1aS1hdXRvY29tcGxldGVcIixcInVpLWZyb250XCIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsdGhpcy5lbGVtZW50WzBdIT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSYmdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0pfSxtZW51Zm9jdXM6ZnVuY3Rpb24oZSxpKXt2YXIgcyxuO3JldHVybiB0aGlzLmlzTmV3TWVudSYmKHRoaXMuaXNOZXdNZW51PSExLGUub3JpZ2luYWxFdmVudCYmL15tb3VzZS8udGVzdChlLm9yaWdpbmFsRXZlbnQudHlwZSkpPyh0aGlzLm1lbnUuYmx1cigpLHRoaXMuZG9jdW1lbnQub25lKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24oKXt0KGUudGFyZ2V0KS50cmlnZ2VyKGUub3JpZ2luYWxFdmVudCl9KSx2b2lkIDApOihuPWkuaXRlbS5kYXRhKFwidWktYXV0b2NvbXBsZXRlLWl0ZW1cIiksITEhPT10aGlzLl90cmlnZ2VyKFwiZm9jdXNcIixlLHtpdGVtOm59KSYmZS5vcmlnaW5hbEV2ZW50JiYvXmtleS8udGVzdChlLm9yaWdpbmFsRXZlbnQudHlwZSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLHM9aS5pdGVtLmF0dHIoXCJhcmlhLWxhYmVsXCIpfHxuLnZhbHVlLHMmJnQudHJpbShzKS5sZW5ndGgmJih0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCksdChcIjxkaXY+XCIpLnRleHQocykuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSksdm9pZCAwKX0sbWVudXNlbGVjdDpmdW5jdGlvbihlLGkpe3ZhciBzPWkuaXRlbS5kYXRhKFwidWktYXV0b2NvbXBsZXRlLWl0ZW1cIiksbj10aGlzLnByZXZpb3VzO3RoaXMuZWxlbWVudFswXSE9PXQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkmJih0aGlzLmVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLHRoaXMucHJldmlvdXM9bix0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMucHJldmlvdXM9bix0aGlzLnNlbGVjdGVkSXRlbT1zfSkpLCExIT09dGhpcy5fdHJpZ2dlcihcInNlbGVjdFwiLGUse2l0ZW06c30pJiZ0aGlzLl92YWx1ZShzLnZhbHVlKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSx0aGlzLmNsb3NlKGUpLHRoaXMuc2VsZWN0ZWRJdGVtPXN9fSksdGhpcy5saXZlUmVnaW9uPXQoXCI8ZGl2PlwiLHtyb2xlOlwic3RhdHVzXCIsXCJhcmlhLWxpdmVcIjpcImFzc2VydGl2ZVwiLFwiYXJpYS1yZWxldmFudFwiOlwiYWRkaXRpb25zXCJ9KS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50WzBdLmJvZHkpLHRoaXMuX2FkZENsYXNzKHRoaXMubGl2ZVJlZ2lvbixudWxsLFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImF1dG9jb21wbGV0ZVwiKX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpLHRoaXMubWVudS5lbGVtZW50LnJlbW92ZSgpLHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuX3N1cGVyKHQsZSksXCJzb3VyY2VcIj09PXQmJnRoaXMuX2luaXRTb3VyY2UoKSxcImFwcGVuZFRvXCI9PT10JiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSxcImRpc2FibGVkXCI9PT10JiZlJiZ0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX0sX2lzRXZlbnRUYXJnZXRJbldpZGdldDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm1lbnUuZWxlbWVudFswXTtyZXR1cm4gZS50YXJnZXQ9PT10aGlzLmVsZW1lbnRbMF18fGUudGFyZ2V0PT09aXx8dC5jb250YWlucyhpLGUudGFyZ2V0KX0sX2Nsb3NlT25DbGlja091dHNpZGU6ZnVuY3Rpb24odCl7dGhpcy5faXNFdmVudFRhcmdldEluV2lkZ2V0KHQpfHx0aGlzLmNsb3NlKCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gZSYmKGU9ZS5qcXVlcnl8fGUubm9kZVR5cGU/dChlKTp0aGlzLmRvY3VtZW50LmZpbmQoZSkuZXEoMCkpLGUmJmVbMF18fChlPXRoaXMuZWxlbWVudC5jbG9zZXN0KFwiLnVpLWZyb250LCBkaWFsb2dcIikpLGUubGVuZ3RofHwoZT10aGlzLmRvY3VtZW50WzBdLmJvZHkpLGV9LF9pbml0U291cmNlOmZ1bmN0aW9uKCl7dmFyIGUsaSxzPXRoaXM7dC5pc0FycmF5KHRoaXMub3B0aW9ucy5zb3VyY2UpPyhlPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24oaSxzKXtzKHQudWkuYXV0b2NvbXBsZXRlLmZpbHRlcihlLGkudGVybSkpfSk6XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihlLG4pe3MueGhyJiZzLnhoci5hYm9ydCgpLHMueGhyPXQuYWpheCh7dXJsOmksZGF0YTplLGRhdGFUeXBlOlwianNvblwiLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7bih0KX0sZXJyb3I6ZnVuY3Rpb24oKXtuKFtdKX19KX0pOnRoaXMuc291cmNlPXRoaXMub3B0aW9ucy5zb3VyY2V9LF9zZWFyY2hUaW1lb3V0OmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5zZWFyY2hpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRlcm09PT10aGlzLl92YWx1ZSgpLGk9dGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSxzPXQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleXx8dC5zaGlmdEtleTsoIWV8fGUmJiFpJiYhcykmJih0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMuc2VhcmNoKG51bGwsdCkpfSx0aGlzLm9wdGlvbnMuZGVsYXkpfSxzZWFyY2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1udWxsIT10P3Q6dGhpcy5fdmFsdWUoKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSx0Lmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoP3RoaXMuY2xvc2UoZSk6dGhpcy5fdHJpZ2dlcihcInNlYXJjaFwiLGUpIT09ITE/dGhpcy5fc2VhcmNoKHQpOnZvaWQgMH0sX3NlYXJjaDpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmcrKyx0aGlzLl9hZGRDbGFzcyhcInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nXCIpLHRoaXMuY2FuY2VsU2VhcmNoPSExLHRoaXMuc291cmNlKHt0ZXJtOnR9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgZT0rK3RoaXMucmVxdWVzdEluZGV4O3JldHVybiB0LnByb3h5KGZ1bmN0aW9uKHQpe2U9PT10aGlzLnJlcXVlc3RJbmRleCYmdGhpcy5fX3Jlc3BvbnNlKHQpLHRoaXMucGVuZGluZy0tLHRoaXMucGVuZGluZ3x8dGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZ1wiKX0sdGhpcyl9LF9fcmVzcG9uc2U6ZnVuY3Rpb24odCl7dCYmKHQ9dGhpcy5fbm9ybWFsaXplKHQpKSx0aGlzLl90cmlnZ2VyKFwicmVzcG9uc2VcIixudWxsLHtjb250ZW50OnR9KSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0JiZ0Lmxlbmd0aCYmIXRoaXMuY2FuY2VsU2VhcmNoPyh0aGlzLl9zdWdnZXN0KHQpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbih0KXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZSh0KX0sX2Nsb3NlOmZ1bmN0aW9uKHQpe3RoaXMuX29mZih0aGlzLmRvY3VtZW50LFwibW91c2Vkb3duXCIpLHRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCksdGhpcy5tZW51LmJsdXIoKSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLl90cmlnZ2VyKFwiY2xvc2VcIix0KSl9LF9jaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5wcmV2aW91cyE9PXRoaXMuX3ZhbHVlKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoJiZlWzBdLmxhYmVsJiZlWzBdLnZhbHVlP2U6dC5tYXAoZSxmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT97bGFiZWw6ZSx2YWx1ZTplfTp0LmV4dGVuZCh7fSxlLHtsYWJlbDplLmxhYmVsfHxlLnZhbHVlLHZhbHVlOmUudmFsdWV8fGUubGFiZWx9KX0pfSxfc3VnZ2VzdDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpO3RoaXMuX3JlbmRlck1lbnUoaSxlKSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLm1lbnUucmVmcmVzaCgpLGkuc2hvdygpLHRoaXMuX3Jlc2l6ZU1lbnUoKSxpLnBvc2l0aW9uKHQuZXh0ZW5kKHtvZjp0aGlzLmVsZW1lbnR9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLHRoaXMub3B0aW9ucy5hdXRvRm9jdXMmJnRoaXMubWVudS5uZXh0KCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vkb3duOlwiX2Nsb3NlT25DbGlja091dHNpZGVcIn0pfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWVudS5lbGVtZW50O3Qub3V0ZXJXaWR0aChNYXRoLm1heCh0LndpZHRoKFwiXCIpLm91dGVyV2lkdGgoKSsxLHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkpKX0sX3JlbmRlck1lbnU6ZnVuY3Rpb24oZSxpKXt2YXIgcz10aGlzO3QuZWFjaChpLGZ1bmN0aW9uKHQsaSl7cy5fcmVuZGVySXRlbURhdGEoZSxpKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbSh0LGUpLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiLGUpfSxfcmVuZGVySXRlbTpmdW5jdGlvbihlLGkpe3JldHVybiB0KFwiPGxpPlwiKS5hcHBlbmQodChcIjxkaXY+XCIpLnRleHQoaS5sYWJlbCkpLmFwcGVuZFRvKGUpfSxfbW92ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpP3RoaXMubWVudS5pc0ZpcnN0SXRlbSgpJiYvXnByZXZpb3VzLy50ZXN0KHQpfHx0aGlzLm1lbnUuaXNMYXN0SXRlbSgpJiYvXm5leHQvLnRlc3QodCk/KHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5tZW51LmJsdXIoKSx2b2lkIDApOih0aGlzLm1lbnVbdF0oZSksdm9pZCAwKToodGhpcy5zZWFyY2gobnVsbCxlKSx2b2lkIDApfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24odCxlKXsoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikpJiYodGhpcy5fbW92ZSh0LGUpLGUucHJldmVudERlZmF1bHQoKSl9LF9pc0NvbnRlbnRFZGl0YWJsZTpmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpcmV0dXJuITE7dmFyIGU9dC5wcm9wKFwiY29udGVudEVkaXRhYmxlXCIpO3JldHVyblwiaW5oZXJpdFwiPT09ZT90aGlzLl9pc0NvbnRlbnRFZGl0YWJsZSh0LnBhcmVudCgpKTpcInRydWVcIj09PWV9fSksdC5leHRlbmQodC51aS5hdXRvY29tcGxldGUse2VzY2FwZVJlZ2V4OmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLFwiXFxcXCQmXCIpfSxmaWx0ZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz1SZWdFeHAodC51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksXCJpXCIpO3JldHVybiB0LmdyZXAoZSxmdW5jdGlvbih0KXtyZXR1cm4gcy50ZXN0KHQubGFiZWx8fHQudmFsdWV8fHQpfSl9fSksdC53aWRnZXQoXCJ1aS5hdXRvY29tcGxldGVcIix0LnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czpcIk5vIHNlYXJjaCByZXN1bHRzLlwiLHJlc3VsdHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrKHQ+MT9cIiByZXN1bHRzIGFyZVwiOlwiIHJlc3VsdCBpc1wiKStcIiBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLlwifX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24oZSl7dmFyIGk7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5jYW5jZWxTZWFyY2h8fChpPWUmJmUubGVuZ3RoP3RoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKGUubGVuZ3RoKTp0aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSx0KFwiPGRpdj5cIikudGV4dChpKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pKX19KSx0LnVpLmF1dG9jb21wbGV0ZTt2YXIgZz0vdWktY29ybmVyLShbYS16XSl7Miw2fS9nO3Qud2lkZ2V0KFwidWkuY29udHJvbGdyb3VwXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxkaXY+XCIsb3B0aW9uczp7ZGlyZWN0aW9uOlwiaG9yaXpvbnRhbFwiLGRpc2FibGVkOm51bGwsb25seVZpc2libGU6ITAsaXRlbXM6e2J1dHRvbjpcImlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgYnV0dG9uLCBhXCIsY29udHJvbGdyb3VwTGFiZWw6XCIudWktY29udHJvbGdyb3VwLWxhYmVsXCIsY2hlY2tib3hyYWRpbzpcImlucHV0W3R5cGU9J2NoZWNrYm94J10sIGlucHV0W3R5cGU9J3JhZGlvJ11cIixzZWxlY3RtZW51Olwic2VsZWN0XCIsc3Bpbm5lcjpcIi51aS1zcGlubmVyLWlucHV0XCJ9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fZW5oYW5jZSgpfSxfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwidG9vbGJhclwiKSx0aGlzLnJlZnJlc2goKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsQ2hpbGRNZXRob2QoXCJkZXN0cm95XCIpLHRoaXMuY2hpbGRXaWRnZXRzLnJlbW92ZURhdGEoXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiKSx0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGVcIiksdGhpcy5vcHRpb25zLml0ZW1zLmNvbnRyb2xncm91cExhYmVsJiZ0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMuY29udHJvbGdyb3VwTGFiZWwpLmZpbmQoXCIudWktY29udHJvbGdyb3VwLWxhYmVsLWNvbnRlbnRzXCIpLmNvbnRlbnRzKCkudW53cmFwKCl9LF9pbml0V2lkZ2V0czpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT1bXTt0LmVhY2godGhpcy5vcHRpb25zLml0ZW1zLGZ1bmN0aW9uKHMsbil7dmFyIG8sYT17fTtyZXR1cm4gbj9cImNvbnRyb2xncm91cExhYmVsXCI9PT1zPyhvPWUuZWxlbWVudC5maW5kKG4pLG8uZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5jaGlsZHJlbihcIi51aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHNcIikubGVuZ3RofHxlLmNvbnRlbnRzKCkud3JhcEFsbChcIjxzcGFuIGNsYXNzPSd1aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHMnPjwvc3Bhbj5cIil9KSxlLl9hZGRDbGFzcyhvLG51bGwsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktc3RhdGUtZGVmYXVsdFwiKSxpPWkuY29uY2F0KG8uZ2V0KCkpLHZvaWQgMCk6KHQuZm5bc10mJihhPWVbXCJfXCIrcytcIk9wdGlvbnNcIl0/ZVtcIl9cIitzK1wiT3B0aW9uc1wiXShcIm1pZGRsZVwiKTp7Y2xhc3Nlczp7fX0sZS5lbGVtZW50LmZpbmQobikuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcyksbz1uW3NdKFwiaW5zdGFuY2VcIikscj10LndpZGdldC5leHRlbmQoe30sYSk7aWYoXCJidXR0b25cIiE9PXN8fCFuLnBhcmVudChcIi51aS1zcGlubmVyXCIpLmxlbmd0aCl7b3x8KG89bltzXSgpW3NdKFwiaW5zdGFuY2VcIikpLG8mJihyLmNsYXNzZXM9ZS5fcmVzb2x2ZUNsYXNzZXNWYWx1ZXMoci5jbGFzc2VzLG8pKSxuW3NdKHIpO3ZhciBoPW5bc10oXCJ3aWRnZXRcIik7dC5kYXRhKGhbMF0sXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiLG8/bzpuW3NdKFwiaW5zdGFuY2VcIikpLGkucHVzaChoWzBdKX19KSksdm9pZCAwKTp2b2lkIDB9KSx0aGlzLmNoaWxkV2lkZ2V0cz10KHQudW5pcXVlKGkpKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmNoaWxkV2lkZ2V0cyxcInVpLWNvbnRyb2xncm91cC1pdGVtXCIpfSxfY2FsbENoaWxkTWV0aG9kOmZ1bmN0aW9uKGUpe3RoaXMuY2hpbGRXaWRnZXRzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9aS5kYXRhKFwidWktY29udHJvbGdyb3VwLWRhdGFcIik7cyYmc1tlXSYmc1tlXSgpfSl9LF91cGRhdGVDb3JuZXJDbGFzczpmdW5jdGlvbih0LGUpe3ZhciBpPVwidWktY29ybmVyLXRvcCB1aS1jb3JuZXItYm90dG9tIHVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodCB1aS1jb3JuZXItYWxsXCIscz10aGlzLl9idWlsZFNpbXBsZU9wdGlvbnMoZSxcImxhYmVsXCIpLmNsYXNzZXMubGFiZWw7dGhpcy5fcmVtb3ZlQ2xhc3ModCxudWxsLGkpLHRoaXMuX2FkZENsYXNzKHQsbnVsbCxzKX0sX2J1aWxkU2ltcGxlT3B0aW9uczpmdW5jdGlvbih0LGUpe3ZhciBpPVwidmVydGljYWxcIj09PXRoaXMub3B0aW9ucy5kaXJlY3Rpb24scz17Y2xhc3Nlczp7fX07cmV0dXJuIHMuY2xhc3Nlc1tlXT17bWlkZGxlOlwiXCIsZmlyc3Q6XCJ1aS1jb3JuZXItXCIrKGk/XCJ0b3BcIjpcImxlZnRcIiksbGFzdDpcInVpLWNvcm5lci1cIisoaT9cImJvdHRvbVwiOlwicmlnaHRcIiksb25seTpcInVpLWNvcm5lci1hbGxcIn1bdF0sc30sX3NwaW5uZXJPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2J1aWxkU2ltcGxlT3B0aW9ucyh0LFwidWktc3Bpbm5lclwiKTtyZXR1cm4gZS5jbGFzc2VzW1widWktc3Bpbm5lci11cFwiXT1cIlwiLGUuY2xhc3Nlc1tcInVpLXNwaW5uZXItZG93blwiXT1cIlwiLGV9LF9idXR0b25PcHRpb25zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnModCxcInVpLWJ1dHRvblwiKX0sX2NoZWNrYm94cmFkaW9PcHRpb25zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnModCxcInVpLWNoZWNrYm94cmFkaW8tbGFiZWxcIil9LF9zZWxlY3RtZW51T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT1cInZlcnRpY2FsXCI9PT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uO3JldHVybnt3aWR0aDplP1wiYXV0b1wiOiExLGNsYXNzZXM6e21pZGRsZTp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6XCJcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwiXCJ9LGZpcnN0OntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcInVpLWNvcm5lci1cIisoZT9cInRvcFwiOlwidGxcIiksXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcInVpLWNvcm5lci1cIisoZT9cInRvcFwiOlwibGVmdFwiKX0sbGFzdDp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6ZT9cIlwiOlwidWktY29ybmVyLXRyXCIsXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcInVpLWNvcm5lci1cIisoZT9cImJvdHRvbVwiOlwicmlnaHRcIil9LG9ubHk6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOlwidWktY29ybmVyLXRvcFwiLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJ1aS1jb3JuZXItYWxsXCJ9fVt0XX19LF9yZXNvbHZlQ2xhc3Nlc1ZhbHVlczpmdW5jdGlvbihlLGkpe3ZhciBzPXt9O3JldHVybiB0LmVhY2goZSxmdW5jdGlvbihuKXt2YXIgbz1pLm9wdGlvbnMuY2xhc3Nlc1tuXXx8XCJcIjtvPXQudHJpbShvLnJlcGxhY2UoZyxcIlwiKSksc1tuXT0obytcIiBcIitlW25dKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpfSksc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3JldHVyblwiZGlyZWN0aW9uXCI9PT10JiZ0aGlzLl9yZW1vdmVDbGFzcyhcInVpLWNvbnRyb2xncm91cC1cIit0aGlzLm9wdGlvbnMuZGlyZWN0aW9uKSx0aGlzLl9zdXBlcih0LGUpLFwiZGlzYWJsZWRcIj09PXQ/KHRoaXMuX2NhbGxDaGlsZE1ldGhvZChlP1wiZGlzYWJsZVwiOlwiZW5hYmxlXCIpLHZvaWQgMCk6KHRoaXMucmVmcmVzaCgpLHZvaWQgMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXM7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1jb250cm9sZ3JvdXAgdWktY29udHJvbGdyb3VwLVwiK3RoaXMub3B0aW9ucy5kaXJlY3Rpb24pLFwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcHRpb25zLmRpcmVjdGlvbiYmdGhpcy5fYWRkQ2xhc3MobnVsbCxcInVpLWhlbHBlci1jbGVhcmZpeFwiKSx0aGlzLl9pbml0V2lkZ2V0cygpLGU9dGhpcy5jaGlsZFdpZGdldHMsdGhpcy5vcHRpb25zLm9ubHlWaXNpYmxlJiYoZT1lLmZpbHRlcihcIjp2aXNpYmxlXCIpKSxlLmxlbmd0aCYmKHQuZWFjaChbXCJmaXJzdFwiLFwibGFzdFwiXSxmdW5jdGlvbih0LHMpe3ZhciBuPWVbc10oKS5kYXRhKFwidWktY29udHJvbGdyb3VwLWRhdGFcIik7aWYobiYmaVtcIl9cIituLndpZGdldE5hbWUrXCJPcHRpb25zXCJdKXt2YXIgbz1pW1wiX1wiK24ud2lkZ2V0TmFtZStcIk9wdGlvbnNcIl0oMT09PWUubGVuZ3RoP1wib25seVwiOnMpO28uY2xhc3Nlcz1pLl9yZXNvbHZlQ2xhc3Nlc1ZhbHVlcyhvLmNsYXNzZXMsbiksbi5lbGVtZW50W24ud2lkZ2V0TmFtZV0obyl9ZWxzZSBpLl91cGRhdGVDb3JuZXJDbGFzcyhlW3NdKCkscyl9KSx0aGlzLl9jYWxsQ2hpbGRNZXRob2QoXCJyZWZyZXNoXCIpKX19KSx0LndpZGdldChcInVpLmNoZWNrYm94cmFkaW9cIixbdC51aS5mb3JtUmVzZXRNaXhpbix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2Rpc2FibGVkOm51bGwsbGFiZWw6bnVsbCxpY29uOiEwLGNsYXNzZXM6e1widWktY2hlY2tib3hyYWRpby1sYWJlbFwiOlwidWktY29ybmVyLWFsbFwiLFwidWktY2hlY2tib3hyYWRpby1pY29uXCI6XCJ1aS1jb3JuZXItYWxsXCJ9fSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciBlLGkscz10aGlzLG49dGhpcy5fc3VwZXIoKXx8e307cmV0dXJuIHRoaXMuX3JlYWRUeXBlKCksaT10aGlzLmVsZW1lbnQubGFiZWxzKCksdGhpcy5sYWJlbD10KGlbaS5sZW5ndGgtMV0pLHRoaXMubGFiZWwubGVuZ3RofHx0LmVycm9yKFwiTm8gbGFiZWwgZm91bmQgZm9yIGNoZWNrYm94cmFkaW8gd2lkZ2V0XCIpLHRoaXMub3JpZ2luYWxMYWJlbD1cIlwiLHRoaXMubGFiZWwuY29udGVudHMoKS5ub3QodGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7cy5vcmlnaW5hbExhYmVsKz0zPT09dGhpcy5ub2RlVHlwZT90KHRoaXMpLnRleHQoKTp0aGlzLm91dGVySFRNTH0pLHRoaXMub3JpZ2luYWxMYWJlbCYmKG4ubGFiZWw9dGhpcy5vcmlnaW5hbExhYmVsKSxlPXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZCxudWxsIT1lJiYobi5kaXNhYmxlZD1lKSxufSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50WzBdLmNoZWNrZWQ7dGhpcy5fYmluZEZvcm1SZXNldEhhbmRsZXIoKSxudWxsPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJih0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkKSx0aGlzLl9zZXRPcHRpb24oXCJkaXNhYmxlZFwiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1jaGVja2JveHJhZGlvXCIsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tbGFiZWxcIixcInVpLWJ1dHRvbiB1aS13aWRnZXRcIiksXCJyYWRpb1wiPT09dGhpcy50eXBlJiZ0aGlzLl9hZGRDbGFzcyh0aGlzLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1yYWRpby1sYWJlbFwiKSx0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMub3B0aW9ucy5sYWJlbCE9PXRoaXMub3JpZ2luYWxMYWJlbD90aGlzLl91cGRhdGVMYWJlbCgpOnRoaXMub3JpZ2luYWxMYWJlbCYmKHRoaXMub3B0aW9ucy5sYWJlbD10aGlzLm9yaWdpbmFsTGFiZWwpLHRoaXMuX2VuaGFuY2UoKSx0JiYodGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuaWNvbiYmdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKSksdGhpcy5fb24oe2NoYW5nZTpcIl90b2dnbGVDbGFzc2VzXCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGRDbGFzcyh0aGlzLmxhYmVsLG51bGwsXCJ1aS1zdGF0ZS1mb2N1cyB1aS12aXN1YWwtZm9jdXNcIil9LGJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmxhYmVsLG51bGwsXCJ1aS1zdGF0ZS1mb2N1cyB1aS12aXN1YWwtZm9jdXNcIil9fSl9LF9yZWFkVHlwZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3RoaXMudHlwZT10aGlzLmVsZW1lbnRbMF0udHlwZSxcImlucHV0XCI9PT1lJiYvcmFkaW98Y2hlY2tib3gvLnRlc3QodGhpcy50eXBlKXx8dC5lcnJvcihcIkNhbid0IGNyZWF0ZSBjaGVja2JveHJhZGlvIG9uIGVsZW1lbnQubm9kZU5hbWU9XCIrZStcIiBhbmQgZWxlbWVudC50eXBlPVwiK3RoaXMudHlwZSl9LF9lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWNvbih0aGlzLmVsZW1lbnRbMF0uY2hlY2tlZCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsfSxfZ2V0UmFkaW9Hcm91cDpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5lbGVtZW50WzBdLm5hbWUscz1cImlucHV0W25hbWU9J1wiK3QudWkuZXNjYXBlU2VsZWN0b3IoaSkrXCInXVwiO3JldHVybiBpPyhlPXRoaXMuZm9ybS5sZW5ndGg/dCh0aGlzLmZvcm1bMF0uZWxlbWVudHMpLmZpbHRlcihzKTp0KHMpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09dCh0aGlzKS5mb3JtKCkubGVuZ3RofSksZS5ub3QodGhpcy5lbGVtZW50KSk6dChbXSl9LF90b2dnbGVDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdLmNoZWNrZWQ7dGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIsZSksdGhpcy5vcHRpb25zLmljb24mJlwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIixlKS5fdG9nZ2xlQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS1pY29uLWJsYW5rXCIsIWUpLFwicmFkaW9cIj09PXRoaXMudHlwZSYmdGhpcy5fZ2V0UmFkaW9Hcm91cCgpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLmNoZWNrYm94cmFkaW8oXCJpbnN0YW5jZVwiKTtlJiZlLl9yZW1vdmVDbGFzcyhlLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIil9KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl91bmJpbmRGb3JtUmVzZXRIYW5kbGVyKCksdGhpcy5pY29uJiYodGhpcy5pY29uLnJlbW92ZSgpLHRoaXMuaWNvblNwYWNlLnJlbW92ZSgpKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3JldHVyblwibGFiZWxcIiE9PXR8fGU/KHRoaXMuX3N1cGVyKHQsZSksXCJkaXNhYmxlZFwiPT09dD8odGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5sYWJlbCxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIixlKSx0aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ9ZSx2b2lkIDApOih0aGlzLnJlZnJlc2goKSx2b2lkIDApKTp2b2lkIDB9LF91cGRhdGVJY29uOmZ1bmN0aW9uKGUpe3ZhciBpPVwidWktaWNvbiB1aS1pY29uLWJhY2tncm91bmQgXCI7dGhpcy5vcHRpb25zLmljb24/KHRoaXMuaWNvbnx8KHRoaXMuaWNvbj10KFwiPHNwYW4+XCIpLHRoaXMuaWNvblNwYWNlPXQoXCI8c3Bhbj4gPC9zcGFuPlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmljb25TcGFjZSxcInVpLWNoZWNrYm94cmFkaW8taWNvbi1zcGFjZVwiKSksXCJjaGVja2JveFwiPT09dGhpcy50eXBlPyhpKz1lP1widWktaWNvbi1jaGVjayB1aS1zdGF0ZS1jaGVja2VkXCI6XCJ1aS1pY29uLWJsYW5rXCIsdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5pY29uLG51bGwsZT9cInVpLWljb24tYmxhbmtcIjpcInVpLWljb24tY2hlY2tcIikpOmkrPVwidWktaWNvbi1ibGFua1wiLHRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixcInVpLWNoZWNrYm94cmFkaW8taWNvblwiLGkpLGV8fHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaWNvbixudWxsLFwidWktaWNvbi1jaGVjayB1aS1zdGF0ZS1jaGVja2VkXCIpLHRoaXMuaWNvbi5wcmVwZW5kVG8odGhpcy5sYWJlbCkuYWZ0ZXIodGhpcy5pY29uU3BhY2UpKTp2b2lkIDAhPT10aGlzLmljb24mJih0aGlzLmljb24ucmVtb3ZlKCksdGhpcy5pY29uU3BhY2UucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWNvbil9LF91cGRhdGVMYWJlbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGFiZWwuY29udGVudHMoKS5ub3QodGhpcy5lbGVtZW50WzBdKTt0aGlzLmljb24mJih0PXQubm90KHRoaXMuaWNvblswXSkpLHRoaXMuaWNvblNwYWNlJiYodD10Lm5vdCh0aGlzLmljb25TcGFjZVswXSkpLHQucmVtb3ZlKCksdGhpcy5sYWJlbC5hcHBlbmQodGhpcy5vcHRpb25zLmxhYmVsKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudFswXS5jaGVja2VkLGU9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkO3RoaXMuX3VwZGF0ZUljb24odCksdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIsdCksbnVsbCE9PXRoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5fdXBkYXRlTGFiZWwoKSxlIT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDplfSl9fV0pLHQudWkuY2hlY2tib3hyYWRpbyx0LndpZGdldChcInVpLmJ1dHRvblwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8YnV0dG9uPlwiLG9wdGlvbnM6e2NsYXNzZXM6e1widWktYnV0dG9uXCI6XCJ1aS1jb3JuZXItYWxsXCJ9LGRpc2FibGVkOm51bGwsaWNvbjpudWxsLGljb25Qb3NpdGlvbjpcImJlZ2lubmluZ1wiLGxhYmVsOm51bGwsc2hvd0xhYmVsOiEwfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fc3VwZXIoKXx8e307cmV0dXJuIHRoaXMuaXNJbnB1dD10aGlzLmVsZW1lbnQuaXMoXCJpbnB1dFwiKSx0PXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZCxudWxsIT10JiYoZS5kaXNhYmxlZD10KSx0aGlzLm9yaWdpbmFsTGFiZWw9dGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudC52YWwoKTp0aGlzLmVsZW1lbnQuaHRtbCgpLHRoaXMub3JpZ2luYWxMYWJlbCYmKGUubGFiZWw9dGhpcy5vcmlnaW5hbExhYmVsKSxlfSxfY3JlYXRlOmZ1bmN0aW9uKCl7IXRoaXMub3B0aW9uLnNob3dMYWJlbCYhdGhpcy5vcHRpb25zLmljb24mJih0aGlzLm9wdGlvbnMuc2hvd0xhYmVsPSEwKSxudWxsPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJih0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkfHwhMSksdGhpcy5oYXNUaXRsZT0hIXRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIiksdGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLm9wdGlvbnMubGFiZWwhPT10aGlzLm9yaWdpbmFsTGFiZWwmJih0aGlzLmlzSW5wdXQ/dGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpOnRoaXMuZWxlbWVudC5odG1sKHRoaXMub3B0aW9ucy5sYWJlbCkpLHRoaXMuX2FkZENsYXNzKFwidWktYnV0dG9uXCIsXCJ1aS13aWRnZXRcIiksdGhpcy5fc2V0T3B0aW9uKFwiZGlzYWJsZWRcIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2VuaGFuY2UoKSx0aGlzLmVsZW1lbnQuaXMoXCJhXCIpJiZ0aGlzLl9vbih7a2V5dXA6ZnVuY3Rpb24oZSl7ZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlNQQUNFJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZWxlbWVudFswXS5jbGljaz90aGlzLmVsZW1lbnRbMF0uY2xpY2soKTp0aGlzLmVsZW1lbnQudHJpZ2dlcihcImNsaWNrXCIpKX19KX0sX2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuaXMoXCJidXR0b25cIil8fHRoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwiYnV0dG9uXCIpLHRoaXMub3B0aW9ucy5pY29uJiYodGhpcy5fdXBkYXRlSWNvbihcImljb25cIix0aGlzLm9wdGlvbnMuaWNvbiksdGhpcy5fdXBkYXRlVG9vbHRpcCgpKX0sX3VwZGF0ZVRvb2x0aXA6ZnVuY3Rpb24oKXt0aGlzLnRpdGxlPXRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIiksdGhpcy5vcHRpb25zLnNob3dMYWJlbHx8dGhpcy50aXRsZXx8dGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiLHRoaXMub3B0aW9ucy5sYWJlbCl9LF91cGRhdGVJY29uOmZ1bmN0aW9uKGUsaSl7dmFyIHM9XCJpY29uUG9zaXRpb25cIiE9PWUsbj1zP3RoaXMub3B0aW9ucy5pY29uUG9zaXRpb246aSxvPVwidG9wXCI9PT1ufHxcImJvdHRvbVwiPT09bjt0aGlzLmljb24/cyYmdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5pY29uLG51bGwsdGhpcy5vcHRpb25zLmljb24pOih0aGlzLmljb249dChcIjxzcGFuPlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sXCJ1aS1idXR0b24taWNvblwiLFwidWktaWNvblwiKSx0aGlzLm9wdGlvbnMuc2hvd0xhYmVsfHx0aGlzLl9hZGRDbGFzcyhcInVpLWJ1dHRvbi1pY29uLW9ubHlcIikpLHMmJnRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixudWxsLGkpLHRoaXMuX2F0dGFjaEljb24obiksbz8odGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS13aWRnZXQtaWNvbi1ibG9ja1wiKSx0aGlzLmljb25TcGFjZSYmdGhpcy5pY29uU3BhY2UucmVtb3ZlKCkpOih0aGlzLmljb25TcGFjZXx8KHRoaXMuaWNvblNwYWNlPXQoXCI8c3Bhbj4gPC9zcGFuPlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmljb25TcGFjZSxcInVpLWJ1dHRvbi1pY29uLXNwYWNlXCIpKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLXdpZ2V0LWljb24tYmxvY2tcIiksdGhpcy5fYXR0YWNoSWNvblNwYWNlKG4pKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGVcIiksdGhpcy5pY29uJiZ0aGlzLmljb24ucmVtb3ZlKCksdGhpcy5pY29uU3BhY2UmJnRoaXMuaWNvblNwYWNlLnJlbW92ZSgpLHRoaXMuaGFzVGl0bGV8fHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwidGl0bGVcIil9LF9hdHRhY2hJY29uU3BhY2U6ZnVuY3Rpb24odCl7dGhpcy5pY29uWy9eKD86ZW5kfGJvdHRvbSkvLnRlc3QodCk/XCJiZWZvcmVcIjpcImFmdGVyXCJdKHRoaXMuaWNvblNwYWNlKX0sX2F0dGFjaEljb246ZnVuY3Rpb24odCl7dGhpcy5lbGVtZW50Wy9eKD86ZW5kfGJvdHRvbSkvLnRlc3QodCk/XCJhcHBlbmRcIjpcInByZXBlbmRcIl0odGhpcy5pY29uKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwPT09dC5zaG93TGFiZWw/dGhpcy5vcHRpb25zLnNob3dMYWJlbDp0LnNob3dMYWJlbCxpPXZvaWQgMD09PXQuaWNvbj90aGlzLm9wdGlvbnMuaWNvbjp0Lmljb247ZXx8aXx8KHQuc2hvd0xhYmVsPSEwKSx0aGlzLl9zdXBlcih0KX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiaWNvblwiPT09dCYmKGU/dGhpcy5fdXBkYXRlSWNvbih0LGUpOnRoaXMuaWNvbiYmKHRoaXMuaWNvbi5yZW1vdmUoKSx0aGlzLmljb25TcGFjZSYmdGhpcy5pY29uU3BhY2UucmVtb3ZlKCkpKSxcImljb25Qb3NpdGlvblwiPT09dCYmdGhpcy5fdXBkYXRlSWNvbih0LGUpLFwic2hvd0xhYmVsXCI9PT10JiYodGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS1idXR0b24taWNvbi1vbmx5XCIsbnVsbCwhZSksdGhpcy5fdXBkYXRlVG9vbHRpcCgpKSxcImxhYmVsXCI9PT10JiYodGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudC52YWwoZSk6KHRoaXMuZWxlbWVudC5odG1sKGUpLHRoaXMuaWNvbiYmKHRoaXMuX2F0dGFjaEljb24odGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiksdGhpcy5fYXR0YWNoSWNvblNwYWNlKHRoaXMub3B0aW9ucy5pY29uUG9zaXRpb24pKSkpLHRoaXMuX3N1cGVyKHQsZSksXCJkaXNhYmxlZFwiPT09dCYmKHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLGUpLHRoaXMuZWxlbWVudFswXS5kaXNhYmxlZD1lLGUmJnRoaXMuZWxlbWVudC5ibHVyKCkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmlzKFwiaW5wdXQsIGJ1dHRvblwiKT90aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ6dGhpcy5lbGVtZW50Lmhhc0NsYXNzKFwidWktYnV0dG9uLWRpc2FibGVkXCIpO3QhPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOnR9KSx0aGlzLl91cGRhdGVUb29sdGlwKCl9fSksdC51aUJhY2tDb21wYXQhPT0hMSYmKHQud2lkZ2V0KFwidWkuYnV0dG9uXCIsdC51aS5idXR0b24se29wdGlvbnM6e3RleHQ6ITAsaWNvbnM6e3ByaW1hcnk6bnVsbCxzZWNvbmRhcnk6bnVsbH19LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc2hvd0xhYmVsJiYhdGhpcy5vcHRpb25zLnRleHQmJih0aGlzLm9wdGlvbnMuc2hvd0xhYmVsPXRoaXMub3B0aW9ucy50ZXh0KSwhdGhpcy5vcHRpb25zLnNob3dMYWJlbCYmdGhpcy5vcHRpb25zLnRleHQmJih0aGlzLm9wdGlvbnMudGV4dD10aGlzLm9wdGlvbnMuc2hvd0xhYmVsKSx0aGlzLm9wdGlvbnMuaWNvbnx8IXRoaXMub3B0aW9ucy5pY29ucy5wcmltYXJ5JiYhdGhpcy5vcHRpb25zLmljb25zLnNlY29uZGFyeT90aGlzLm9wdGlvbnMuaWNvbiYmKHRoaXMub3B0aW9ucy5pY29ucy5wcmltYXJ5PXRoaXMub3B0aW9ucy5pY29uKTp0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeT90aGlzLm9wdGlvbnMuaWNvbj10aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeToodGhpcy5vcHRpb25zLmljb249dGhpcy5vcHRpb25zLmljb25zLnNlY29uZGFyeSx0aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uPVwiZW5kXCIpLHRoaXMuX3N1cGVyKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm5cInRleHRcIj09PXQ/KHRoaXMuX3N1cGVyKFwic2hvd0xhYmVsXCIsZSksdm9pZCAwKTooXCJzaG93TGFiZWxcIj09PXQmJih0aGlzLm9wdGlvbnMudGV4dD1lKSxcImljb25cIj09PXQmJih0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeT1lKSxcImljb25zXCI9PT10JiYoZS5wcmltYXJ5Pyh0aGlzLl9zdXBlcihcImljb25cIixlLnByaW1hcnkpLHRoaXMuX3N1cGVyKFwiaWNvblBvc2l0aW9uXCIsXCJiZWdpbm5pbmdcIikpOmUuc2Vjb25kYXJ5JiYodGhpcy5fc3VwZXIoXCJpY29uXCIsZS5zZWNvbmRhcnkpLHRoaXMuX3N1cGVyKFwiaWNvblBvc2l0aW9uXCIsXCJlbmRcIikpKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdm9pZCAwKX19KSx0LmZuLmJ1dHRvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5sZW5ndGh8fHRoaXMubGVuZ3RoJiZcIklOUFVUXCIhPT10aGlzWzBdLnRhZ05hbWV8fHRoaXMubGVuZ3RoJiZcIklOUFVUXCI9PT10aGlzWzBdLnRhZ05hbWUmJlwiY2hlY2tib3hcIiE9PXRoaXMuYXR0cihcInR5cGVcIikmJlwicmFkaW9cIiE9PXRoaXMuYXR0cihcInR5cGVcIik/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KHQudWkuY2hlY2tib3hyYWRpb3x8dC5lcnJvcihcIkNoZWNrYm94cmFkaW8gd2lkZ2V0IG1pc3NpbmdcIiksMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jaGVja2JveHJhZGlvKHtpY29uOiExfSk6dGhpcy5jaGVja2JveHJhZGlvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSh0LmZuLmJ1dHRvbiksdC5mbi5idXR0b25zZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC51aS5jb250cm9sZ3JvdXB8fHQuZXJyb3IoXCJDb250cm9sZ3JvdXAgd2lkZ2V0IG1pc3NpbmdcIiksXCJvcHRpb25cIj09PWFyZ3VtZW50c1swXSYmXCJpdGVtc1wiPT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMl0/dGhpcy5jb250cm9sZ3JvdXAuYXBwbHkodGhpcyxbYXJndW1lbnRzWzBdLFwiaXRlbXMuYnV0dG9uXCIsYXJndW1lbnRzWzJdXSk6XCJvcHRpb25cIj09PWFyZ3VtZW50c1swXSYmXCJpdGVtc1wiPT09YXJndW1lbnRzWzFdP3RoaXMuY29udHJvbGdyb3VwLmFwcGx5KHRoaXMsW2FyZ3VtZW50c1swXSxcIml0ZW1zLmJ1dHRvblwiXSk6KFwib2JqZWN0XCI9PXR5cGVvZiBhcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXS5pdGVtcyYmKGFyZ3VtZW50c1swXS5pdGVtcz17YnV0dG9uOmFyZ3VtZW50c1swXS5pdGVtc30pLHRoaXMuY29udHJvbGdyb3VwLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSx0LnVpLmJ1dHRvbix0LmV4dGVuZCh0LnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOlwiMS4xMi4xXCJ9fSk7dmFyIG07dC5leHRlbmQocy5wcm90b3R5cGUse21hcmtlckNsYXNzTmFtZTpcImhhc0RhdGVwaWNrZXJcIixtYXhSb3dzOjQsX3dpZGdldERhdGVwaWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcERpdn0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fZGVmYXVsdHMsdHx8e30pLHRoaXN9LF9hdHRhY2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvO3M9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49XCJkaXZcIj09PXN8fFwic3BhblwiPT09cyxlLmlkfHwodGhpcy51dWlkKz0xLGUuaWQ9XCJkcFwiK3RoaXMudXVpZCksbz10aGlzLl9uZXdJbnN0KHQoZSksbiksby5zZXR0aW5ncz10LmV4dGVuZCh7fSxpfHx7fSksXCJpbnB1dFwiPT09cz90aGlzLl9jb25uZWN0RGF0ZXBpY2tlcihlLG8pOm4mJnRoaXMuX2lubGluZURhdGVwaWNrZXIoZSxvKX0sX25ld0luc3Q6ZnVuY3Rpb24oZSxpKXt2YXIgcz1lWzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cXC1dKS9nLFwiXFxcXFxcXFwkMVwiKTtyZXR1cm57aWQ6cyxpbnB1dDplLHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOmksZHBEaXY6aT9uKHQoXCI8ZGl2IGNsYXNzPSdcIit0aGlzLl9pbmxpbmVDbGFzcytcIiB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dChlKTtpLmFwcGVuZD10KFtdKSxpLnRyaWdnZXI9dChbXSkscy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fCh0aGlzLl9hdHRhY2htZW50cyhzLGkpLHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLm9uKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93bikub24oXCJrZXlwcmVzc1wiLHRoaXMuX2RvS2V5UHJlc3MpLm9uKFwia2V5dXBcIix0aGlzLl9kb0tleVVwKSx0aGlzLl9hdXRvU2l6ZShpKSx0LmRhdGEoZSxcImRhdGVwaWNrZXJcIixpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPXRoaXMuX2dldChpLFwiYXBwZW5kVGV4dFwiKSxyPXRoaXMuX2dldChpLFwiaXNSVExcIik7aS5hcHBlbmQmJmkuYXBwZW5kLnJlbW92ZSgpLGEmJihpLmFwcGVuZD10KFwiPHNwYW4gY2xhc3M9J1wiK3RoaXMuX2FwcGVuZENsYXNzK1wiJz5cIithK1wiPC9zcGFuPlwiKSxlW3I/XCJiZWZvcmVcIjpcImFmdGVyXCJdKGkuYXBwZW5kKSksZS5vZmYoXCJmb2N1c1wiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxpLnRyaWdnZXImJmkudHJpZ2dlci5yZW1vdmUoKSxzPXRoaXMuX2dldChpLFwic2hvd09uXCIpLChcImZvY3VzXCI9PT1zfHxcImJvdGhcIj09PXMpJiZlLm9uKFwiZm9jdXNcIix0aGlzLl9zaG93RGF0ZXBpY2tlciksKFwiYnV0dG9uXCI9PT1zfHxcImJvdGhcIj09PXMpJiYobj10aGlzLl9nZXQoaSxcImJ1dHRvblRleHRcIiksbz10aGlzLl9nZXQoaSxcImJ1dHRvbkltYWdlXCIpLGkudHJpZ2dlcj10KHRoaXMuX2dldChpLFwiYnV0dG9uSW1hZ2VPbmx5XCIpP3QoXCI8aW1nLz5cIikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5hdHRyKHtzcmM6byxhbHQ6bix0aXRsZTpufSk6dChcIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj5cIikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKG8/dChcIjxpbWcvPlwiKS5hdHRyKHtzcmM6byxhbHQ6bix0aXRsZTpufSk6bikpLGVbcj9cImJlZm9yZVwiOlwiYWZ0ZXJcIl0oaS50cmlnZ2VyKSxpLnRyaWdnZXIub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09ZVswXT90LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk6dC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT1lWzBdPyh0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksdC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcihlWzBdKSk6dC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcihlWzBdKSwhMX0pKX0sX2F1dG9TaXplOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2dldCh0LFwiYXV0b1NpemVcIikmJiF0LmlubGluZSl7dmFyIGUsaSxzLG4sbz1uZXcgRGF0ZSgyMDA5LDExLDIwKSxhPXRoaXMuX2dldCh0LFwiZGF0ZUZvcm1hdFwiKTthLm1hdGNoKC9bRE1dLykmJihlPWZ1bmN0aW9uKHQpe2ZvcihpPTAscz0wLG49MDt0Lmxlbmd0aD5uO24rKyl0W25dLmxlbmd0aD5pJiYoaT10W25dLmxlbmd0aCxzPW4pO3JldHVybiBzfSxvLnNldE1vbnRoKGUodGhpcy5fZ2V0KHQsYS5tYXRjaCgvTU0vKT9cIm1vbnRoTmFtZXNcIjpcIm1vbnRoTmFtZXNTaG9ydFwiKSkpLG8uc2V0RGF0ZShlKHRoaXMuX2dldCh0LGEubWF0Y2goL0RELyk/XCJkYXlOYW1lc1wiOlwiZGF5TmFtZXNTaG9ydFwiKSkrMjAtby5nZXREYXkoKSkpLHQuaW5wdXQuYXR0cihcInNpemVcIix0aGlzLl9mb3JtYXREYXRlKHQsbykubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dChlKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSx0LmRhdGEoZSxcImRhdGVwaWNrZXJcIixpKSx0aGlzLl9zZXREYXRlKGksdGhpcy5fZ2V0RGVmYXVsdERhdGUoaSksITApLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpLGkuZHBEaXYuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihlLGkscyxuLG8pe3ZhciByLGgsbCxjLHUsZD10aGlzLl9kaWFsb2dJbnN0O3JldHVybiBkfHwodGhpcy51dWlkKz0xLHI9XCJkcFwiK3RoaXMudXVpZCx0aGlzLl9kaWFsb2dJbnB1dD10KFwiPGlucHV0IHR5cGU9J3RleHQnIGlkPSdcIityK1wiJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsnLz5cIiksdGhpcy5fZGlhbG9nSW5wdXQub24oXCJrZXlkb3duXCIsdGhpcy5fZG9LZXlEb3duKSx0KFwiYm9keVwiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpLGQ9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxvZ0lucHV0LCExKSxkLnNldHRpbmdzPXt9LHQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxcImRhdGVwaWNrZXJcIixkKSksYShkLnNldHRpbmdzLG58fHt9KSxpPWkmJmkuY29uc3RydWN0b3I9PT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUoZCxpKTppLHRoaXMuX2RpYWxvZ0lucHV0LnZhbChpKSx0aGlzLl9wb3M9bz9vLmxlbmd0aD9vOltvLnBhZ2VYLG8ucGFnZVldOm51bGwsdGhpcy5fcG9zfHwoaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLHRoaXMuX3Bvcz1baC8yLTEwMCtjLGwvMi0xNTArdV0pLHRoaXMuX2RpYWxvZ0lucHV0LmNzcyhcImxlZnRcIix0aGlzLl9wb3NbMF0rMjArXCJweFwiKS5jc3MoXCJ0b3BcIix0aGlzLl9wb3NbMV0rXCJweFwiKSxkLnNldHRpbmdzLm9uU2VsZWN0PXMsdGhpcy5faW5EaWFsb2c9ITAsdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pLHQuYmxvY2tVSSYmdC5ibG9ja1VJKHRoaXMuZHBEaXYpLHQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxcImRhdGVwaWNrZXJcIixkKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGkscz10KGUpLG49dC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpO3MuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksdC5yZW1vdmVEYXRhKGUsXCJkYXRlcGlja2VyXCIpLFwiaW5wdXRcIj09PWk/KG4uYXBwZW5kLnJlbW92ZSgpLG4udHJpZ2dlci5yZW1vdmUoKSxzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5vZmYoXCJmb2N1c1wiLHRoaXMuX3Nob3dEYXRlcGlja2VyKS5vZmYoXCJrZXlkb3duXCIsdGhpcy5fZG9LZXlEb3duKS5vZmYoXCJrZXlwcmVzc1wiLHRoaXMuX2RvS2V5UHJlc3MpLm9mZihcImtleXVwXCIsdGhpcy5fZG9LZXlVcCkpOihcImRpdlwiPT09aXx8XCJzcGFuXCI9PT1pKSYmcy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuZW1wdHkoKSxtPT09biYmKG09bnVsbCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxzLG49dChlKSxvPXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKTtuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFwiaW5wdXRcIj09PWk/KGUuZGlzYWJsZWQ9ITEsby50cmlnZ2VyLmZpbHRlcihcImJ1dHRvblwiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcihcImltZ1wiKS5jc3Moe29wYWNpdHk6XCIxLjBcIixjdXJzb3I6XCJcIn0pKTooXCJkaXZcIj09PWl8fFwic3BhblwiPT09aSkmJihzPW4uY2hpbGRyZW4oXCIuXCIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpLHMuZmluZChcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIpLnByb3AoXCJkaXNhYmxlZFwiLCExKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9dC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lP251bGw6dH0pKX0sX2Rpc2FibGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj10KGUpLG89dC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXCJpbnB1dFwiPT09aT8oZS5kaXNhYmxlZD0hMCxvLnRyaWdnZXIuZmlsdGVyKFwiYnV0dG9uXCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKFwiaW1nXCIpLmNzcyh7b3BhY2l0eTpcIjAuNVwiLGN1cnNvcjpcImRlZmF1bHRcIn0pKTooXCJkaXZcIj09PWl8fFwic3BhblwiPT09aSkmJihzPW4uY2hpbGRyZW4oXCIuXCIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5hZGRDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpLHMuZmluZChcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIpLnByb3AoXCJkaXNhYmxlZFwiLCEwKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9dC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lP251bGw6dH0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09ZSl9LF9pc0Rpc2FibGVkRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtmb3IodmFyIGU9MDt0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg+ZTtlKyspaWYodGhpcy5fZGlzYWJsZWRJbnB1dHNbZV09PT10KXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKX1jYXRjaChpKXt0aHJvd1wiTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXJcIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLHIsaCxsPXRoaXMuX2dldEluc3QoZSk7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgaT9cImRlZmF1bHRzXCI9PT1pP3QuZXh0ZW5kKHt9LHQuZGF0ZXBpY2tlci5fZGVmYXVsdHMpOmw/XCJhbGxcIj09PWk/dC5leHRlbmQoe30sbC5zZXR0aW5ncyk6dGhpcy5fZ2V0KGwsaSk6bnVsbDoobj1pfHx7fSxcInN0cmluZ1wiPT10eXBlb2YgaSYmKG49e30sbltpXT1zKSxsJiYodGhpcy5fY3VySW5zdD09PWwmJnRoaXMuX2hpZGVEYXRlcGlja2VyKCksbz10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcihlLCEwKSxyPXRoaXMuX2dldE1pbk1heERhdGUobCxcIm1pblwiKSxoPXRoaXMuX2dldE1pbk1heERhdGUobCxcIm1heFwiKSxhKGwuc2V0dGluZ3MsbiksbnVsbCE9PXImJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5taW5EYXRlJiYobC5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxyKSksbnVsbCE9PWgmJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5tYXhEYXRlJiYobC5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxoKSksXCJkaXNhYmxlZFwiaW4gbiYmKG4uZGlzYWJsZWQ/dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSk6dGhpcy5fZW5hYmxlRGF0ZXBpY2tlcihlKSksdGhpcy5fYXR0YWNobWVudHModChlKSxsKSx0aGlzLl9hdXRvU2l6ZShsKSx0aGlzLl9zZXREYXRlKGwsbyksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGwpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobCkpLHZvaWQgMCl9LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSxpKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKHQsZSxpKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEluc3QodCk7ZSYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihlKX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SW5zdCh0KTtpJiYodGhpcy5fc2V0RGF0ZShpLGUpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SW5zdCh0KTtyZXR1cm4gaSYmIWkuaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksZSksaT90aGlzLl9nZXREYXRlKGkpOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG89dC5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KSxhPSEwLHI9by5kcERpdi5pcyhcIi51aS1kYXRlcGlja2VyLXJ0bFwiKTtpZihvLl9rZXlFdmVudD0hMCx0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgOTp0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksYT0hMTticmVhaztjYXNlIDEzOnJldHVybiBuPXQoXCJ0ZC5cIit0LmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcytcIjpub3QoLlwiK3QuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzK1wiKVwiLG8uZHBEaXYpLG5bMF0mJnQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGUudGFyZ2V0LG8uc2VsZWN0ZWRNb250aCxvLnNlbGVjdGVkWWVhcixuWzBdKSxpPXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJvblNlbGVjdFwiKSxpPyhzPXQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShvKSxpLmFwcGx5KG8uaW5wdXQ/by5pbnB1dFswXTpudWxsLFtzLG9dKSk6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCExO2Nhc2UgMjc6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO2JyZWFrO2Nhc2UgMzM6dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8tdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBCaWdNb250aHNcIik6LXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwTW9udGhzXCIpLFwiTVwiKTticmVhaztjYXNlIDM0OnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/K3QuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwQmlnTW9udGhzXCIpOit0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSAzNTooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2NsZWFyRGF0ZShlLnRhcmdldCksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM2OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGUudGFyZ2V0KSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzc6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/MTotMSxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTotdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LFwiRFwiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/LTE6MSxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Pyt0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTordC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgNDA6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LDcsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDphPSExfWVsc2UgMzY9PT1lLmtleUNvZGUmJmUuY3RybEtleT90LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOmE9ITE7YSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7cmV0dXJuIHQuZGF0ZXBpY2tlci5fZ2V0KG4sXCJjb25zdHJhaW5JbnB1dFwiKT8oaT10LmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnModC5kYXRlcGlja2VyLl9nZXQobixcImRhdGVGb3JtYXRcIikpLHM9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1lLmNoYXJDb2RlP2Uua2V5Q29kZTplLmNoYXJDb2RlKSxlLmN0cmxLZXl8fGUubWV0YUtleXx8XCIgXCI+c3x8IWl8fGkuaW5kZXhPZihzKT4tMSk6dm9pZCAwfSxfZG9LZXlVcDpmdW5jdGlvbihlKXt2YXIgaSxzPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYocy5pbnB1dC52YWwoKSE9PXMubGFzdFZhbCl0cnl7aT10LmRhdGVwaWNrZXIucGFyc2VEYXRlKHQuZGF0ZXBpY2tlci5fZ2V0KHMsXCJkYXRlRm9ybWF0XCIpLHMuaW5wdXQ/cy5pbnB1dC52YWwoKTpudWxsLHQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKHMpKSxpJiYodC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKHMpLHQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKHMpLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihzKSl9Y2F0Y2gobil7fXJldHVybiEwfSxfc2hvd0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7aWYoZT1lLnRhcmdldHx8ZSxcImlucHV0XCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihlPXQoXCJpbnB1dFwiLGUucGFyZW50Tm9kZSlbMF0pLCF0LmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGUpJiZ0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PWUpe3ZhciBzLG4sbyxyLGgsbCxjO3M9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGUpLHQuZGF0ZXBpY2tlci5fY3VySW5zdCYmdC5kYXRlcGlja2VyLl9jdXJJbnN0IT09cyYmKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxzJiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLG49dC5kYXRlcGlja2VyLl9nZXQocyxcImJlZm9yZVNob3dcIiksbz1uP24uYXBwbHkoZSxbZSxzXSk6e30sbyE9PSExJiYoYShzLnNldHRpbmdzLG8pLHMubGFzdFZhbD1udWxsLHQuZGF0ZXBpY2tlci5fbGFzdElucHV0PWUsdC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKHMpLHQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJihlLnZhbHVlPVwiXCIpLHQuZGF0ZXBpY2tlci5fcG9zfHwodC5kYXRlcGlja2VyLl9wb3M9dC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLHQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCkscj0hMSx0KGUpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIHJ8PVwiZml4ZWRcIj09PXQodGhpcykuY3NzKFwicG9zaXRpb25cIiksIXJ9KSxoPXtsZWZ0OnQuZGF0ZXBpY2tlci5fcG9zWzBdLHRvcDp0LmRhdGVwaWNrZXIuX3Bvc1sxXX0sdC5kYXRlcGlja2VyLl9wb3M9bnVsbCxzLmRwRGl2LmVtcHR5KCkscy5kcERpdi5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixkaXNwbGF5OlwiYmxvY2tcIix0b3A6XCItMTAwMHB4XCJ9KSx0LmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocyksaD10LmRhdGVwaWNrZXIuX2NoZWNrT2Zmc2V0KHMsaCxyKSxzLmRwRGl2LmNzcyh7cG9zaXRpb246dC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmdC5ibG9ja1VJP1wic3RhdGljXCI6cj9cImZpeGVkXCI6XCJhYnNvbHV0ZVwiLGRpc3BsYXk6XCJub25lXCIsbGVmdDpoLmxlZnQrXCJweFwiLHRvcDpoLnRvcCtcInB4XCJ9KSxzLmlubGluZXx8KGw9dC5kYXRlcGlja2VyLl9nZXQocyxcInNob3dBbmltXCIpLGM9dC5kYXRlcGlja2VyLl9nZXQocyxcImR1cmF0aW9uXCIpLHMuZHBEaXYuY3NzKFwiei1pbmRleFwiLGkodChlKSkrMSksdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZz0hMCx0LmVmZmVjdHMmJnQuZWZmZWN0cy5lZmZlY3RbbF0/cy5kcERpdi5zaG93KGwsdC5kYXRlcGlja2VyLl9nZXQocyxcInNob3dPcHRpb25zXCIpLGMpOnMuZHBEaXZbbHx8XCJzaG93XCJdKGw/YzpudWxsKSx0LmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQocykmJnMuaW5wdXQudHJpZ2dlcihcImZvY3VzXCIpLHQuZGF0ZXBpY2tlci5fY3VySW5zdD1zKSlcclxufX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dGhpcy5tYXhSb3dzPTQsbT1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG49c1sxXSxhPTE3LHI9ZS5kcERpdi5maW5kKFwiLlwiK3RoaXMuX2RheU92ZXJDbGFzcytcIiBhXCIpO3IubGVuZ3RoPjAmJm8uYXBwbHkoci5nZXQoMCkpLGUuZHBEaXYucmVtb3ZlQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLW11bHRpLTIgdWktZGF0ZXBpY2tlci1tdWx0aS0zIHVpLWRhdGVwaWNrZXItbXVsdGktNFwiKS53aWR0aChcIlwiKSxuPjEmJmUuZHBEaXYuYWRkQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLW11bHRpLVwiK24pLmNzcyhcIndpZHRoXCIsYSpuK1wiZW1cIiksZS5kcERpdlsoMSE9PXNbMF18fDEhPT1zWzFdP1wiYWRkXCI6XCJyZW1vdmVcIikrXCJDbGFzc1wiXShcInVpLWRhdGVwaWNrZXItbXVsdGlcIiksZS5kcERpdlsodGhpcy5fZ2V0KGUsXCJpc1JUTFwiKT9cImFkZFwiOlwicmVtb3ZlXCIpK1wiQ2xhc3NcIl0oXCJ1aS1kYXRlcGlja2VyLXJ0bFwiKSxlPT09dC5kYXRlcGlja2VyLl9jdXJJbnN0JiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoZSkmJmUuaW5wdXQudHJpZ2dlcihcImZvY3VzXCIpLGUueWVhcnNodG1sJiYoaT1lLnllYXJzaHRtbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT09PWUueWVhcnNodG1sJiZlLnllYXJzaHRtbCYmZS5kcERpdi5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcjpmaXJzdFwiKS5yZXBsYWNlV2l0aChlLnllYXJzaHRtbCksaT1lLnllYXJzaHRtbD1udWxsfSwwKSl9LF9zaG91bGRGb2N1c0lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0LmlucHV0JiZ0LmlucHV0LmlzKFwiOnZpc2libGVcIikmJiF0LmlucHV0LmlzKFwiOmRpc2FibGVkXCIpJiYhdC5pbnB1dC5pcyhcIjpmb2N1c1wiKX0sX2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1lLmRwRGl2Lm91dGVyV2lkdGgoKSxvPWUuZHBEaXYub3V0ZXJIZWlnaHQoKSxhPWUuaW5wdXQ/ZS5pbnB1dC5vdXRlcldpZHRoKCk6MCxyPWUuaW5wdXQ/ZS5pbnB1dC5vdXRlckhlaWdodCgpOjAsaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgrKHM/MDp0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCsocz8wOnQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTtyZXR1cm4gaS5sZWZ0LT10aGlzLl9nZXQoZSxcImlzUlRMXCIpP24tYTowLGkubGVmdC09cyYmaS5sZWZ0PT09ZS5pbnB1dC5vZmZzZXQoKS5sZWZ0P3QoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTowLGkudG9wLT1zJiZpLnRvcD09PWUuaW5wdXQub2Zmc2V0KCkudG9wK3I/dChkb2N1bWVudCkuc2Nyb2xsVG9wKCk6MCxpLmxlZnQtPU1hdGgubWluKGkubGVmdCxpLmxlZnQrbj5oJiZoPm4/TWF0aC5hYnMoaS5sZWZ0K24taCk6MCksaS50b3AtPU1hdGgubWluKGkudG9wLGkudG9wK28+bCYmbD5vP01hdGguYWJzKG8rcik6MCksaX0sX2ZpbmRQb3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciBpLHM9dGhpcy5fZ2V0SW5zdChlKSxuPXRoaXMuX2dldChzLFwiaXNSVExcIik7ZSYmKFwiaGlkZGVuXCI9PT1lLnR5cGV8fDEhPT1lLm5vZGVUeXBlfHx0LmV4cHIuZmlsdGVycy5oaWRkZW4oZSkpOyllPWVbbj9cInByZXZpb3VzU2libGluZ1wiOlwibmV4dFNpYmxpbmdcIl07cmV0dXJuIGk9dChlKS5vZmZzZXQoKSxbaS5sZWZ0LGkudG9wXX0sX2hpZGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGE9dGhpcy5fY3VySW5zdDshYXx8ZSYmYSE9PXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKXx8dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcmJihpPXRoaXMuX2dldChhLFwic2hvd0FuaW1cIikscz10aGlzLl9nZXQoYSxcImR1cmF0aW9uXCIpLG49ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX3RpZHlEaWFsb2coYSl9LHQuZWZmZWN0cyYmKHQuZWZmZWN0cy5lZmZlY3RbaV18fHQuZWZmZWN0c1tpXSk/YS5kcERpdi5oaWRlKGksdC5kYXRlcGlja2VyLl9nZXQoYSxcInNob3dPcHRpb25zXCIpLHMsbik6YS5kcERpdltcInNsaWRlRG93blwiPT09aT9cInNsaWRlVXBcIjpcImZhZGVJblwiPT09aT9cImZhZGVPdXRcIjpcImhpZGVcIl0oaT9zOm51bGwsbiksaXx8bigpLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLG89dGhpcy5fZ2V0KGEsXCJvbkNsb3NlXCIpLG8mJm8uYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW2EuaW5wdXQ/YS5pbnB1dC52YWwoKTpcIlwiLGFdKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCx0aGlzLl9pbkRpYWxvZyYmKHRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGxlZnQ6XCIwXCIsdG9wOlwiLTEwMHB4XCJ9KSx0LmJsb2NrVUkmJih0LnVuYmxvY2tVSSgpLHQoXCJib2R5XCIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLHRoaXMuX2luRGlhbG9nPSExKX0sX3RpZHlEaWFsb2c6ZnVuY3Rpb24odCl7dC5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykub2ZmKFwiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXJcIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24oZSl7aWYodC5kYXRlcGlja2VyLl9jdXJJbnN0KXt2YXIgaT10KGUudGFyZ2V0KSxzPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsoaVswXS5pZCE9PXQuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiYwPT09aS5wYXJlbnRzKFwiI1wiK3QuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGgmJiFpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYhaS5jbG9zZXN0KFwiLlwiK3QuZGF0ZXBpY2tlci5fdHJpZ2dlckNsYXNzKS5sZW5ndGgmJnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJighdC5kYXRlcGlja2VyLl9pbkRpYWxvZ3x8IXQuYmxvY2tVSSl8fGkuaGFzQ2xhc3ModC5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJnQuZGF0ZXBpY2tlci5fY3VySW5zdCE9PXMpJiZ0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9fSxfYWRqdXN0RGF0ZTpmdW5jdGlvbihlLGkscyl7dmFyIG49dChlKSxvPXRoaXMuX2dldEluc3QoblswXSk7dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoblswXSl8fCh0aGlzLl9hZGp1c3RJbnN0RGF0ZShvLGkrKFwiTVwiPT09cz90aGlzLl9nZXQobyxcInNob3dDdXJyZW50QXRQb3NcIik6MCkscyksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihvKSl9LF9nb3RvVG9kYXk6ZnVuY3Rpb24oZSl7dmFyIGkscz10KGUpLG49dGhpcy5fZ2V0SW5zdChzWzBdKTt0aGlzLl9nZXQobixcImdvdG9DdXJyZW50XCIpJiZuLmN1cnJlbnREYXk/KG4uc2VsZWN0ZWREYXk9bi5jdXJyZW50RGF5LG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1uLmN1cnJlbnRNb250aCxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPW4uY3VycmVudFllYXIpOihpPW5ldyBEYXRlLG4uc2VsZWN0ZWREYXk9aS5nZXREYXRlKCksbi5kcmF3TW9udGg9bi5zZWxlY3RlZE1vbnRoPWkuZ2V0TW9udGgoKSxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPWkuZ2V0RnVsbFllYXIoKSksdGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUocyl9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXQoZSksbz10aGlzLl9nZXRJbnN0KG5bMF0pO29bXCJzZWxlY3RlZFwiKyhcIk1cIj09PXM/XCJNb250aFwiOlwiWWVhclwiKV09b1tcImRyYXdcIisoXCJNXCI9PT1zP1wiTW9udGhcIjpcIlllYXJcIildPXBhcnNlSW50KGkub3B0aW9uc1tpLnNlbGVjdGVkSW5kZXhdLnZhbHVlLDEwKSx0aGlzLl9ub3RpZnlDaGFuZ2UobyksdGhpcy5fYWRqdXN0RGF0ZShuKX0sX3NlbGVjdERheTpmdW5jdGlvbihlLGkscyxuKXt2YXIgbyxhPXQoZSk7dChuKS5oYXNDbGFzcyh0aGlzLl91bnNlbGVjdGFibGVDbGFzcyl8fHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKGFbMF0pfHwobz10aGlzLl9nZXRJbnN0KGFbMF0pLG8uc2VsZWN0ZWREYXk9by5jdXJyZW50RGF5PXQoXCJhXCIsbikuaHRtbCgpLG8uc2VsZWN0ZWRNb250aD1vLmN1cnJlbnRNb250aD1pLG8uc2VsZWN0ZWRZZWFyPW8uY3VycmVudFllYXI9cyx0aGlzLl9zZWxlY3REYXRlKGUsdGhpcy5fZm9ybWF0RGF0ZShvLG8uY3VycmVudERheSxvLmN1cnJlbnRNb250aCxvLmN1cnJlbnRZZWFyKSkpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSk7dGhpcy5fc2VsZWN0RGF0ZShpLFwiXCIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbihlLGkpe3ZhciBzLG49dChlKSxvPXRoaXMuX2dldEluc3QoblswXSk7aT1udWxsIT1pP2k6dGhpcy5fZm9ybWF0RGF0ZShvKSxvLmlucHV0JiZvLmlucHV0LnZhbChpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobykscz10aGlzLl9nZXQobyxcIm9uU2VsZWN0XCIpLHM/cy5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbaSxvXSk6by5pbnB1dCYmby5pbnB1dC50cmlnZ2VyKFwiY2hhbmdlXCIpLG8uaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIobyk6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PW8uaW5wdXRbMF0sXCJvYmplY3RcIiE9dHlwZW9mIG8uaW5wdXRbMF0mJm8uaW5wdXQudHJpZ2dlcihcImZvY3VzXCIpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbz10aGlzLl9nZXQoZSxcImFsdEZpZWxkXCIpO28mJihpPXRoaXMuX2dldChlLFwiYWx0Rm9ybWF0XCIpfHx0aGlzLl9nZXQoZSxcImRhdGVGb3JtYXRcIikscz10aGlzLl9nZXREYXRlKGUpLG49dGhpcy5mb3JtYXREYXRlKGkscyx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpLHQobykudmFsKG4pKX0sbm9XZWVrZW5kczpmdW5jdGlvbih0KXt2YXIgZT10LmdldERheSgpO3JldHVybltlPjAmJjY+ZSxcIlwiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24odCl7dmFyIGUsaT1uZXcgRGF0ZSh0LmdldFRpbWUoKSk7cmV0dXJuIGkuc2V0RGF0ZShpLmdldERhdGUoKSs0LShpLmdldERheSgpfHw3KSksZT1pLmdldFRpbWUoKSxpLnNldE1vbnRoKDApLGkuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGUtaSkvODY0ZTUpLzcpKzF9LHBhcnNlRGF0ZTpmdW5jdGlvbihlLGkscyl7aWYobnVsbD09ZXx8bnVsbD09aSl0aHJvd1wiSW52YWxpZCBhcmd1bWVudHNcIjtpZihpPVwib2JqZWN0XCI9PXR5cGVvZiBpP1wiXCIraTppK1wiXCIsXCJcIj09PWkpcmV0dXJuIG51bGw7dmFyIG4sbyxhLHIsaD0wLGw9KHM/cy5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZixjPVwic3RyaW5nXCIhPXR5cGVvZiBsP2w6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChsLDEwKSx1PShzP3MuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxkPShzP3MuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLHA9KHM/cy5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxmPShzP3MubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxnPS0xLG09LTEsXz0tMSx2PS0xLGI9ITEseT1mdW5jdGlvbih0KXt2YXIgaT1lLmxlbmd0aD5uKzEmJmUuY2hhckF0KG4rMSk9PT10O3JldHVybiBpJiZuKyssaX0sdz1mdW5jdGlvbih0KXt2YXIgZT15KHQpLHM9XCJAXCI9PT10PzE0OlwiIVwiPT09dD8yMDpcInlcIj09PXQmJmU/NDpcIm9cIj09PXQ/MzoyLG49XCJ5XCI9PT10P3M6MSxvPVJlZ0V4cChcIl5cXFxcZHtcIituK1wiLFwiK3MrXCJ9XCIpLGE9aS5zdWJzdHJpbmcoaCkubWF0Y2gobyk7aWYoIWEpdGhyb3dcIk1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uIFwiK2g7cmV0dXJuIGgrPWFbMF0ubGVuZ3RoLHBhcnNlSW50KGFbMF0sMTApfSxrPWZ1bmN0aW9uKGUscyxuKXt2YXIgbz0tMSxhPXQubWFwKHkoZSk/bjpzLGZ1bmN0aW9uKHQsZSl7cmV0dXJuW1tlLHRdXX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4tKHRbMV0ubGVuZ3RoLWVbMV0ubGVuZ3RoKX0pO2lmKHQuZWFjaChhLGZ1bmN0aW9uKHQsZSl7dmFyIHM9ZVsxXTtyZXR1cm4gaS5zdWJzdHIoaCxzLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PXMudG9Mb3dlckNhc2UoKT8obz1lWzBdLGgrPXMubGVuZ3RoLCExKTp2b2lkIDB9KSwtMSE9PW8pcmV0dXJuIG8rMTt0aHJvd1wiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIFwiK2h9LHg9ZnVuY3Rpb24oKXtpZihpLmNoYXJBdChoKSE9PWUuY2hhckF0KG4pKXRocm93XCJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gXCIraDtoKyt9O2ZvcihuPTA7ZS5sZW5ndGg+bjtuKyspaWYoYilcIidcIiE9PWUuY2hhckF0KG4pfHx5KFwiJ1wiKT94KCk6Yj0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdChuKSl7Y2FzZVwiZFwiOl89dyhcImRcIik7YnJlYWs7Y2FzZVwiRFwiOmsoXCJEXCIsdSxkKTticmVhaztjYXNlXCJvXCI6dj13KFwib1wiKTticmVhaztjYXNlXCJtXCI6bT13KFwibVwiKTticmVhaztjYXNlXCJNXCI6bT1rKFwiTVwiLHAsZik7YnJlYWs7Y2FzZVwieVwiOmc9dyhcInlcIik7YnJlYWs7Y2FzZVwiQFwiOnI9bmV3IERhdGUodyhcIkBcIikpLGc9ci5nZXRGdWxsWWVhcigpLG09ci5nZXRNb250aCgpKzEsXz1yLmdldERhdGUoKTticmVhaztjYXNlXCIhXCI6cj1uZXcgRGF0ZSgodyhcIiFcIiktdGhpcy5fdGlja3NUbzE5NzApLzFlNCksZz1yLmdldEZ1bGxZZWFyKCksbT1yLmdldE1vbnRoKCkrMSxfPXIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2VcIidcIjp5KFwiJ1wiKT94KCk6Yj0hMDticmVhaztkZWZhdWx0OngoKX1pZihpLmxlbmd0aD5oJiYoYT1pLnN1YnN0cihoKSwhL15cXHMrLy50ZXN0KGEpKSl0aHJvd1wiRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiBcIithO2lmKC0xPT09Zz9nPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKToxMDA+ZyYmKGcrPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyhjPj1nPzA6LTEwMCkpLHY+LTEpZm9yKG09MSxfPXY7Oyl7aWYobz10aGlzLl9nZXREYXlzSW5Nb250aChnLG0tMSksbz49XylicmVhazttKyssXy09b31pZihyPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGcsbS0xLF8pKSxyLmdldEZ1bGxZZWFyKCkhPT1nfHxyLmdldE1vbnRoKCkrMSE9PW18fHIuZ2V0RGF0ZSgpIT09Xyl0aHJvd1wiSW52YWxpZCBkYXRlXCI7cmV0dXJuIHJ9LEFUT006XCJ5eS1tbS1kZFwiLENPT0tJRTpcIkQsIGRkIE0geXlcIixJU09fODYwMTpcInl5LW1tLWRkXCIsUkZDXzgyMjpcIkQsIGQgTSB5XCIsUkZDXzg1MDpcIkRELCBkZC1NLXlcIixSRkNfMTAzNjpcIkQsIGQgTSB5XCIsUkZDXzExMjM6XCJELCBkIE0geXlcIixSRkNfMjgyMjpcIkQsIGQgTSB5eVwiLFJTUzpcIkQsIGQgTSB5XCIsVElDS1M6XCIhXCIsVElNRVNUQU1QOlwiQFwiLFczQzpcInl5LW1tLWRkXCIsX3RpY2tzVG8xOTcwOjFlNyo2MCo2MCoyNCooNzE4Njg1K01hdGguZmxvb3IoNDkyLjUpLU1hdGguZmxvb3IoMTkuNykrTWF0aC5mbG9vcig0LjkyNSkpLGZvcm1hdERhdGU6ZnVuY3Rpb24odCxlLGkpe2lmKCFlKXJldHVyblwiXCI7dmFyIHMsbj0oaT9pLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsbz0oaT9pLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxhPShpP2kubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQscj0oaT9pLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsaD1mdW5jdGlvbihlKXt2YXIgaT10Lmxlbmd0aD5zKzEmJnQuY2hhckF0KHMrMSk9PT1lO3JldHVybiBpJiZzKyssaX0sbD1mdW5jdGlvbih0LGUsaSl7dmFyIHM9XCJcIitlO2lmKGgodCkpZm9yKDtpPnMubGVuZ3RoOylzPVwiMFwiK3M7cmV0dXJuIHN9LGM9ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIGgodCk/c1tlXTppW2VdfSx1PVwiXCIsZD0hMTtpZihlKWZvcihzPTA7dC5sZW5ndGg+cztzKyspaWYoZClcIidcIiE9PXQuY2hhckF0KHMpfHxoKFwiJ1wiKT91Kz10LmNoYXJBdChzKTpkPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KHMpKXtjYXNlXCJkXCI6dSs9bChcImRcIixlLmdldERhdGUoKSwyKTticmVhaztjYXNlXCJEXCI6dSs9YyhcIkRcIixlLmdldERheSgpLG4sbyk7YnJlYWs7Y2FzZVwib1wiOnUrPWwoXCJvXCIsTWF0aC5yb3VuZCgobmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSkuZ2V0VGltZSgpLW5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDApLmdldFRpbWUoKSkvODY0ZTUpLDMpO2JyZWFrO2Nhc2VcIm1cIjp1Kz1sKFwibVwiLGUuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2VcIk1cIjp1Kz1jKFwiTVwiLGUuZ2V0TW9udGgoKSxhLHIpO2JyZWFrO2Nhc2VcInlcIjp1Kz1oKFwieVwiKT9lLmdldEZ1bGxZZWFyKCk6KDEwPmUuZ2V0RnVsbFllYXIoKSUxMDA/XCIwXCI6XCJcIikrZS5nZXRGdWxsWWVhcigpJTEwMDticmVhaztjYXNlXCJAXCI6dSs9ZS5nZXRUaW1lKCk7YnJlYWs7Y2FzZVwiIVwiOnUrPTFlNCplLmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlXCInXCI6aChcIidcIik/dSs9XCInXCI6ZD0hMDticmVhaztkZWZhdWx0OnUrPXQuY2hhckF0KHMpfXJldHVybiB1fSxfcG9zc2libGVDaGFyczpmdW5jdGlvbih0KXt2YXIgZSxpPVwiXCIscz0hMSxuPWZ1bmN0aW9uKGkpe3ZhciBzPXQubGVuZ3RoPmUrMSYmdC5jaGFyQXQoZSsxKT09PWk7cmV0dXJuIHMmJmUrKyxzfTtmb3IoZT0wO3QubGVuZ3RoPmU7ZSsrKWlmKHMpXCInXCIhPT10LmNoYXJBdChlKXx8bihcIidcIik/aSs9dC5jaGFyQXQoZSk6cz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChlKSl7Y2FzZVwiZFwiOmNhc2VcIm1cIjpjYXNlXCJ5XCI6Y2FzZVwiQFwiOmkrPVwiMDEyMzQ1Njc4OVwiO2JyZWFrO2Nhc2VcIkRcIjpjYXNlXCJNXCI6cmV0dXJuIG51bGw7Y2FzZVwiJ1wiOm4oXCInXCIpP2krPVwiJ1wiOnM9ITA7YnJlYWs7ZGVmYXVsdDppKz10LmNoYXJBdChlKX1yZXR1cm4gaX0sX2dldDpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT10LnNldHRpbmdzW2VdP3Quc2V0dGluZ3NbZV06dGhpcy5fZGVmYXVsdHNbZV19LF9zZXREYXRlRnJvbUZpZWxkOmZ1bmN0aW9uKHQsZSl7aWYodC5pbnB1dC52YWwoKSE9PXQubGFzdFZhbCl7dmFyIGk9dGhpcy5fZ2V0KHQsXCJkYXRlRm9ybWF0XCIpLHM9dC5sYXN0VmFsPXQuaW5wdXQ/dC5pbnB1dC52YWwoKTpudWxsLG49dGhpcy5fZ2V0RGVmYXVsdERhdGUodCksbz1uLGE9dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpO3RyeXtvPXRoaXMucGFyc2VEYXRlKGkscyxhKXx8bn1jYXRjaChyKXtzPWU/XCJcIjpzfXQuc2VsZWN0ZWREYXk9by5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPW8uZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPW8uZ2V0RnVsbFllYXIoKSx0LmN1cnJlbnREYXk9cz9vLmdldERhdGUoKTowLHQuY3VycmVudE1vbnRoPXM/by5nZXRNb250aCgpOjAsdC5jdXJyZW50WWVhcj1zP28uZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKHQpfX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RldGVybWluZURhdGUodCx0aGlzLl9nZXQodCxcImRlZmF1bHREYXRlXCIpLG5ldyBEYXRlKSl9LF9kZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpLGV9LG89ZnVuY3Rpb24oaSl7dHJ5e3JldHVybiB0LmRhdGVwaWNrZXIucGFyc2VEYXRlKHQuZGF0ZXBpY2tlci5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLGksdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZSkpfWNhdGNoKHMpe31mb3IodmFyIG49KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT90LmRhdGVwaWNrZXIuX2dldERhdGUoZSk6bnVsbCl8fG5ldyBEYXRlLG89bi5nZXRGdWxsWWVhcigpLGE9bi5nZXRNb250aCgpLHI9bi5nZXREYXRlKCksaD0vKFsrXFwtXT9bMC05XSspXFxzKihkfER8d3xXfG18TXx5fFkpPy9nLGw9aC5leGVjKGkpO2w7KXtzd2l0Y2gobFsyXXx8XCJkXCIpe2Nhc2VcImRcIjpjYXNlXCJEXCI6cis9cGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZVwid1wiOmNhc2VcIldcIjpyKz03KnBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2VcIm1cIjpjYXNlXCJNXCI6YSs9cGFyc2VJbnQobFsxXSwxMCkscj1NYXRoLm1pbihyLHQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgobyxhKSk7YnJlYWs7Y2FzZVwieVwiOmNhc2VcIllcIjpvKz1wYXJzZUludChsWzFdLDEwKSxyPU1hdGgubWluKHIsdC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChvLGEpKX1sPWguZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUobyxhLHIpfSxhPW51bGw9PWl8fFwiXCI9PT1pP3M6XCJzdHJpbmdcIj09dHlwZW9mIGk/byhpKTpcIm51bWJlclwiPT10eXBlb2YgaT9pc05hTihpKT9zOm4oaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybiBhPWEmJlwiSW52YWxpZCBEYXRlXCI9PVwiXCIrYT9zOmEsYSYmKGEuc2V0SG91cnMoMCksYS5zZXRNaW51dGVzKDApLGEuc2V0U2Vjb25kcygwKSxhLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoYSl9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbih0KXtyZXR1cm4gdD8odC5zZXRIb3Vycyh0LmdldEhvdXJzKCk+MTI/dC5nZXRIb3VycygpKzI6MCksdCk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPSFlLG49dC5zZWxlY3RlZE1vbnRoLG89dC5zZWxlY3RlZFllYXIsYT10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RldGVybWluZURhdGUodCxlLG5ldyBEYXRlKSk7dC5zZWxlY3RlZERheT10LmN1cnJlbnREYXk9YS5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPXQuY3VycmVudE1vbnRoPWEuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPXQuY3VycmVudFllYXI9YS5nZXRGdWxsWWVhcigpLG49PT10LnNlbGVjdGVkTW9udGgmJm89PT10LnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKHQpLHRoaXMuX2FkanVzdEluc3REYXRlKHQpLHQuaW5wdXQmJnQuaW5wdXQudmFsKHM/XCJcIjp0aGlzLl9mb3JtYXREYXRlKHQpKX0sX2dldERhdGU6ZnVuY3Rpb24odCl7dmFyIGU9IXQuY3VycmVudFllYXJ8fHQuaW5wdXQmJlwiXCI9PT10LmlucHV0LnZhbCgpP251bGw6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodC5jdXJyZW50WWVhcix0LmN1cnJlbnRNb250aCx0LmN1cnJlbnREYXkpKTtyZXR1cm4gZX0sX2F0dGFjaEhhbmRsZXJzOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2dldChlLFwic3RlcE1vbnRoc1wiKSxzPVwiI1wiK2UuaWQucmVwbGFjZSgvXFxcXFxcXFwvZyxcIlxcXFxcIik7ZS5kcERpdi5maW5kKFwiW2RhdGEtaGFuZGxlcl1cIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9e3ByZXY6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywtaSxcIk1cIil9LG5leHQ6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywraSxcIk1cIil9LGhpZGU6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LHRvZGF5OmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9nb3RvVG9kYXkocyl9LHNlbGVjdERheTpmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX3NlbGVjdERheShzLCt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtbW9udGhcIiksK3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS15ZWFyXCIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsXCJNXCIpLCExfSxzZWxlY3RZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKHMsdGhpcyxcIllcIiksITF9fTt0KHRoaXMpLm9uKHRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1ldmVudFwiKSxlW3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1oYW5kbGVyXCIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbih0KXt2YXIgZSxpLHMsbixvLGEscixoLGwsYyx1LGQscCxmLGcsbSxfLHYsYix5LHcsayx4LEMsRCxJLFQsUCxNLFMsSCx6LE8sQSxOLFcsRSxGLEwsUj1uZXcgRGF0ZSxCPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKFIuZ2V0RnVsbFllYXIoKSxSLmdldE1vbnRoKCksUi5nZXREYXRlKCkpKSxZPXRoaXMuX2dldCh0LFwiaXNSVExcIiksaj10aGlzLl9nZXQodCxcInNob3dCdXR0b25QYW5lbFwiKSxxPXRoaXMuX2dldCh0LFwiaGlkZUlmTm9QcmV2TmV4dFwiKSxLPXRoaXMuX2dldCh0LFwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdFwiKSxVPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLFY9dGhpcy5fZ2V0KHQsXCJzaG93Q3VycmVudEF0UG9zXCIpLCQ9dGhpcy5fZ2V0KHQsXCJzdGVwTW9udGhzXCIpLFg9MSE9PVVbMF18fDEhPT1VWzFdLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QodC5jdXJyZW50RGF5P25ldyBEYXRlKHQuY3VycmVudFllYXIsdC5jdXJyZW50TW9udGgsdC5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLFE9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWluXCIpLEo9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWF4XCIpLFo9dC5kcmF3TW9udGgtVix0ZT10LmRyYXdZZWFyO2lmKDA+WiYmKForPTEyLHRlLS0pLEopZm9yKGU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoSi5nZXRGdWxsWWVhcigpLEouZ2V0TW9udGgoKS1VWzBdKlVbMV0rMSxKLmdldERhdGUoKSkpLGU9USYmUT5lP1E6ZTt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0ZSxaLDEpKT5lOylaLS0sMD5aJiYoWj0xMSx0ZS0tKTtmb3IodC5kcmF3TW9udGg9Wix0LmRyYXdZZWFyPXRlLGk9dGhpcy5fZ2V0KHQsXCJwcmV2VGV4dFwiKSxpPUs/dGhpcy5mb3JtYXREYXRlKGksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodGUsWi0kLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOmkscz10aGlzLl9jYW5BZGp1c3RNb250aCh0LC0xLHRlLFopP1wiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nXCIraStcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKFk/XCJlXCI6XCJ3XCIpK1wiJz5cIitpK1wiPC9zcGFuPjwvYT5cIjpxP1wiXCI6XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSdcIitpK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoWT9cImVcIjpcIndcIikrXCInPlwiK2krXCI8L3NwYW4+PC9hPlwiLG49dGhpcy5fZ2V0KHQsXCJuZXh0VGV4dFwiKSxuPUs/dGhpcy5mb3JtYXREYXRlKG4sdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodGUsWiskLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOm4sbz10aGlzLl9jYW5BZGp1c3RNb250aCh0LDEsdGUsWik/XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0nbmV4dCcgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSdcIituK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoWT9cIndcIjpcImVcIikrXCInPlwiK24rXCI8L3NwYW4+PC9hPlwiOnE/XCJcIjpcIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9J1wiK24rXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhZP1wid1wiOlwiZVwiKStcIic+XCIrbitcIjwvc3Bhbj48L2E+XCIsYT10aGlzLl9nZXQodCxcImN1cnJlbnRUZXh0XCIpLHI9dGhpcy5fZ2V0KHQsXCJnb3RvQ3VycmVudFwiKSYmdC5jdXJyZW50RGF5P0c6QixhPUs/dGhpcy5mb3JtYXREYXRlKGEscix0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOmEsaD10LmlubGluZT9cIlwiOlwiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz5cIit0aGlzLl9nZXQodCxcImNsb3NlVGV4dFwiKStcIjwvYnV0dG9uPlwiLGw9aj9cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCc+XCIrKFk/aDpcIlwiKSsodGhpcy5faXNJblJhbmdlKHQscik/XCI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY3VycmVudCB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXNlY29uZGFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3RvZGF5JyBkYXRhLWV2ZW50PSdjbGljayc+XCIrYStcIjwvYnV0dG9uPlwiOlwiXCIpKyhZP1wiXCI6aCkrXCI8L2Rpdj5cIjpcIlwiLGM9cGFyc2VJbnQodGhpcy5fZ2V0KHQsXCJmaXJzdERheVwiKSwxMCksYz1pc05hTihjKT8wOmMsdT10aGlzLl9nZXQodCxcInNob3dXZWVrXCIpLGQ9dGhpcy5fZ2V0KHQsXCJkYXlOYW1lc1wiKSxwPXRoaXMuX2dldCh0LFwiZGF5TmFtZXNNaW5cIiksZj10aGlzLl9nZXQodCxcIm1vbnRoTmFtZXNcIiksZz10aGlzLl9nZXQodCxcIm1vbnRoTmFtZXNTaG9ydFwiKSxtPXRoaXMuX2dldCh0LFwiYmVmb3JlU2hvd0RheVwiKSxfPXRoaXMuX2dldCh0LFwic2hvd090aGVyTW9udGhzXCIpLHY9dGhpcy5fZ2V0KHQsXCJzZWxlY3RPdGhlck1vbnRoc1wiKSxiPXRoaXMuX2dldERlZmF1bHREYXRlKHQpLHk9XCJcIixrPTA7VVswXT5rO2srKyl7Zm9yKHg9XCJcIix0aGlzLm1heFJvd3M9NCxDPTA7VVsxXT5DO0MrKyl7aWYoRD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0ZSxaLHQuc2VsZWN0ZWREYXkpKSxJPVwiIHVpLWNvcm5lci1hbGxcIixUPVwiXCIsWCl7aWYoVCs9XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwXCIsVVsxXT4xKXN3aXRjaChDKXtjYXNlIDA6VCs9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdFwiLEk9XCIgdWktY29ybmVyLVwiKyhZP1wicmlnaHRcIjpcImxlZnRcIik7YnJlYWs7Y2FzZSBVWzFdLTE6VCs9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0XCIsST1cIiB1aS1jb3JuZXItXCIrKFk/XCJsZWZ0XCI6XCJyaWdodFwiKTticmVhaztkZWZhdWx0OlQrPVwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlXCIsST1cIlwifVQrPVwiJz5cIn1mb3IoVCs9XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeFwiK0krXCInPlwiKygvYWxsfGxlZnQvLnRlc3QoSSkmJjA9PT1rP1k/bzpzOlwiXCIpKygvYWxsfHJpZ2h0Ly50ZXN0KEkpJiYwPT09az9ZP3M6bzpcIlwiKSt0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcih0LFosdGUsUSxKLGs+MHx8Qz4wLGYsZykrXCI8L2Rpdj48dGFibGUgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2FsZW5kYXInPjx0aGVhZD5cIitcIjx0cj5cIixQPXU/XCI8dGggY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPlwiK3RoaXMuX2dldCh0LFwid2Vla0hlYWRlclwiKStcIjwvdGg+XCI6XCJcIix3PTA7Nz53O3crKylNPSh3K2MpJTcsUCs9XCI8dGggc2NvcGU9J2NvbCdcIisoKHcrYys2KSU3Pj01P1wiIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstZW5kJ1wiOlwiXCIpK1wiPlwiK1wiPHNwYW4gdGl0bGU9J1wiK2RbTV0rXCInPlwiK3BbTV0rXCI8L3NwYW4+PC90aD5cIjtmb3IoVCs9UCtcIjwvdHI+PC90aGVhZD48dGJvZHk+XCIsUz10aGlzLl9nZXREYXlzSW5Nb250aCh0ZSxaKSx0ZT09PXQuc2VsZWN0ZWRZZWFyJiZaPT09dC5zZWxlY3RlZE1vbnRoJiYodC5zZWxlY3RlZERheT1NYXRoLm1pbih0LnNlbGVjdGVkRGF5LFMpKSxIPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgodGUsWiktYys3KSU3LHo9TWF0aC5jZWlsKChIK1MpLzcpLE89WD90aGlzLm1heFJvd3M+ej90aGlzLm1heFJvd3M6ejp6LHRoaXMubWF4Um93cz1PLEE9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodGUsWiwxLUgpKSxOPTA7Tz5OO04rKyl7Zm9yKFQrPVwiPHRyPlwiLFc9dT9cIjx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIrdGhpcy5fZ2V0KHQsXCJjYWxjdWxhdGVXZWVrXCIpKEEpK1wiPC90ZD5cIjpcIlwiLHc9MDs3Pnc7dysrKUU9bT9tLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFtBXSk6WyEwLFwiXCJdLEY9QS5nZXRNb250aCgpIT09WixMPUYmJiF2fHwhRVswXXx8USYmUT5BfHxKJiZBPkosVys9XCI8dGQgY2xhc3M9J1wiKygodytjKzYpJTc+PTU/XCIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZFwiOlwiXCIpKyhGP1wiIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGhcIjpcIlwiKSsoQS5nZXRUaW1lKCk9PT1ELmdldFRpbWUoKSYmWj09PXQuc2VsZWN0ZWRNb250aCYmdC5fa2V5RXZlbnR8fGIuZ2V0VGltZSgpPT09QS5nZXRUaW1lKCkmJmIuZ2V0VGltZSgpPT09RC5nZXRUaW1lKCk/XCIgXCIrdGhpcy5fZGF5T3ZlckNsYXNzOlwiXCIpKyhMP1wiIFwiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzK1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIikrKEYmJiFfP1wiXCI6XCIgXCIrRVsxXSsoQS5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT9cIiBcIit0aGlzLl9jdXJyZW50Q2xhc3M6XCJcIikrKEEuZ2V0VGltZSgpPT09Qi5nZXRUaW1lKCk/XCIgdWktZGF0ZXBpY2tlci10b2RheVwiOlwiXCIpKStcIidcIisoRiYmIV98fCFFWzJdP1wiXCI6XCIgdGl0bGU9J1wiK0VbMl0ucmVwbGFjZSgvJy9nLFwiJiMzOTtcIikrXCInXCIpKyhMP1wiXCI6XCIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSdcIitBLmdldE1vbnRoKCkrXCInIGRhdGEteWVhcj0nXCIrQS5nZXRGdWxsWWVhcigpK1wiJ1wiKStcIj5cIisoRiYmIV8/XCImI3hhMDtcIjpMP1wiPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPlwiK0EuZ2V0RGF0ZSgpK1wiPC9zcGFuPlwiOlwiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHRcIisoQS5nZXRUaW1lKCk9PT1CLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1oaWdobGlnaHRcIjpcIlwiKSsoQS5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1hY3RpdmVcIjpcIlwiKSsoRj9cIiB1aS1wcmlvcml0eS1zZWNvbmRhcnlcIjpcIlwiKStcIicgaHJlZj0nIyc+XCIrQS5nZXREYXRlKCkrXCI8L2E+XCIpK1wiPC90ZD5cIixBLnNldERhdGUoQS5nZXREYXRlKCkrMSksQT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChBKTtUKz1XK1wiPC90cj5cIn1aKyssWj4xMSYmKFo9MCx0ZSsrKSxUKz1cIjwvdGJvZHk+PC90YWJsZT5cIisoWD9cIjwvZGl2PlwiKyhVWzBdPjAmJkM9PT1VWzFdLTE/XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXJvdy1icmVhayc+PC9kaXY+XCI6XCJcIik6XCJcIikseCs9VH15Kz14fXJldHVybiB5Kz1sLHQuX2tleUV2ZW50PSExLHl9LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbih0LGUsaSxzLG4sbyxhLHIpe3ZhciBoLGwsYyx1LGQscCxmLGcsbT10aGlzLl9nZXQodCxcImNoYW5nZU1vbnRoXCIpLF89dGhpcy5fZ2V0KHQsXCJjaGFuZ2VZZWFyXCIpLHY9dGhpcy5fZ2V0KHQsXCJzaG93TW9udGhBZnRlclllYXJcIiksYj1cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItdGl0bGUnPlwiLHk9XCJcIjtpZihvfHwhbSl5Kz1cIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJz5cIithW2VdK1wiPC9zcGFuPlwiO2Vsc2V7Zm9yKGg9cyYmcy5nZXRGdWxsWWVhcigpPT09aSxsPW4mJm4uZ2V0RnVsbFllYXIoKT09PWkseSs9XCI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJyBkYXRhLWhhbmRsZXI9J3NlbGVjdE1vbnRoJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPlwiLGM9MDsxMj5jO2MrKykoIWh8fGM+PXMuZ2V0TW9udGgoKSkmJighbHx8bi5nZXRNb250aCgpPj1jKSYmKHkrPVwiPG9wdGlvbiB2YWx1ZT0nXCIrYytcIidcIisoYz09PWU/XCIgc2VsZWN0ZWQ9J3NlbGVjdGVkJ1wiOlwiXCIpK1wiPlwiK3JbY10rXCI8L29wdGlvbj5cIik7eSs9XCI8L3NlbGVjdD5cIn1pZih2fHwoYis9eSsoIW8mJm0mJl8/XCJcIjpcIiYjeGEwO1wiKSksIXQueWVhcnNodG1sKWlmKHQueWVhcnNodG1sPVwiXCIsb3x8IV8pYis9XCI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz5cIitpK1wiPC9zcGFuPlwiO2Vsc2V7Zm9yKHU9dGhpcy5fZ2V0KHQsXCJ5ZWFyUmFuZ2VcIikuc3BsaXQoXCI6XCIpLGQ9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvY1srXFwtXS4qLyk/aStwYXJzZUludCh0LnN1YnN0cmluZygxKSwxMCk6dC5tYXRjaCgvWytcXC1dLiovKT9kK3BhcnNlSW50KHQsMTApOnBhcnNlSW50KHQsMTApO3JldHVybiBpc05hTihlKT9kOmV9LGY9cCh1WzBdKSxnPU1hdGgubWF4KGYscCh1WzFdfHxcIlwiKSksZj1zP01hdGgubWF4KGYscy5nZXRGdWxsWWVhcigpKTpmLGc9bj9NYXRoLm1pbihnLG4uZ2V0RnVsbFllYXIoKSk6Zyx0LnllYXJzaHRtbCs9XCI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInIGRhdGEtaGFuZGxlcj0nc2VsZWN0WWVhcicgZGF0YS1ldmVudD0nY2hhbmdlJz5cIjtnPj1mO2YrKyl0LnllYXJzaHRtbCs9XCI8b3B0aW9uIHZhbHVlPSdcIitmK1wiJ1wiKyhmPT09aT9cIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCI6XCJcIikrXCI+XCIrZitcIjwvb3B0aW9uPlwiO3QueWVhcnNodG1sKz1cIjwvc2VsZWN0PlwiLGIrPXQueWVhcnNodG1sLHQueWVhcnNodG1sPW51bGx9cmV0dXJuIGIrPXRoaXMuX2dldCh0LFwieWVhclN1ZmZpeFwiKSx2JiYoYis9KCFvJiZtJiZfP1wiXCI6XCImI3hhMDtcIikreSksYis9XCI8L2Rpdj5cIn0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10LnNlbGVjdGVkWWVhcisoXCJZXCI9PT1pP2U6MCksbj10LnNlbGVjdGVkTW9udGgrKFwiTVwiPT09aT9lOjApLG89TWF0aC5taW4odC5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChzLG4pKSsoXCJEXCI9PT1pP2U6MCksYT10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsbixvKSkpO3Quc2VsZWN0ZWREYXk9YS5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPWEuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPWEuZ2V0RnVsbFllYXIoKSwoXCJNXCI9PT1pfHxcIllcIj09PWkpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UodCl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1pblwiKSxzPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1heFwiKSxuPWkmJmk+ZT9pOmU7cmV0dXJuIHMmJm4+cz9zOm59LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0KHQsXCJvbkNoYW5nZU1vbnRoWWVhclwiKTtlJiZlLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFt0LnNlbGVjdGVkWWVhcix0LnNlbGVjdGVkTW9udGgrMSx0XSl9LF9nZXROdW1iZXJPZk1vbnRoczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXQodCxcIm51bWJlck9mTW9udGhzXCIpO3JldHVybiBudWxsPT1lP1sxLDFdOlwibnVtYmVyXCI9PXR5cGVvZiBlP1sxLGVdOmV9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUodCx0aGlzLl9nZXQodCxlK1wiRGF0ZVwiKSxudWxsKX0sX2dldERheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDMyLXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHQsZSwzMikpLmdldERhdGUoKX0sX2dldEZpcnN0RGF5T2ZNb250aDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRGF0ZSh0LGUsMSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbih0LGUsaSxzKXt2YXIgbj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyh0KSxvPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGkscysoMD5lP2U6blswXSpuWzFdKSwxKSk7cmV0dXJuIDA+ZSYmby5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKG8uZ2V0RnVsbFllYXIoKSxvLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UodCxvKX0sX2lzSW5SYW5nZTpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbj10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtaW5cIiksbz10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtYXhcIiksYT1udWxsLHI9bnVsbCxoPXRoaXMuX2dldCh0LFwieWVhclJhbmdlXCIpO3JldHVybiBoJiYoaT1oLnNwbGl0KFwiOlwiKSxzPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxhPXBhcnNlSW50KGlbMF0sMTApLHI9cGFyc2VJbnQoaVsxXSwxMCksaVswXS5tYXRjaCgvWytcXC1dLiovKSYmKGErPXMpLGlbMV0ubWF0Y2goL1srXFwtXS4qLykmJihyKz1zKSksKCFufHxlLmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIW98fGUuZ2V0VGltZSgpPD1vLmdldFRpbWUoKSkmJighYXx8ZS5nZXRGdWxsWWVhcigpPj1hKSYmKCFyfHxyPj1lLmdldEZ1bGxZZWFyKCkpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LFwic2hvcnRZZWFyQ3V0b2ZmXCIpO3JldHVybiBlPVwic3RyaW5nXCIhPXR5cGVvZiBlP2U6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChlLDEwKSx7c2hvcnRZZWFyQ3V0b2ZmOmUsZGF5TmFtZXNTaG9ydDp0aGlzLl9nZXQodCxcImRheU5hbWVzU2hvcnRcIiksZGF5TmFtZXM6dGhpcy5fZ2V0KHQsXCJkYXlOYW1lc1wiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzU2hvcnRcIiksbW9udGhOYW1lczp0aGlzLl9nZXQodCxcIm1vbnRoTmFtZXNcIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUsaSxzKXtlfHwodC5jdXJyZW50RGF5PXQuc2VsZWN0ZWREYXksdC5jdXJyZW50TW9udGg9dC5zZWxlY3RlZE1vbnRoLHQuY3VycmVudFllYXI9dC5zZWxlY3RlZFllYXIpO3ZhciBuPWU/XCJvYmplY3RcIj09dHlwZW9mIGU/ZTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShzLGksZSkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHQuY3VycmVudFllYXIsdC5jdXJyZW50TW9udGgsdC5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQodCxcImRhdGVGb3JtYXRcIiksbix0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpfX0pLHQuZm4uZGF0ZXBpY2tlcj1mdW5jdGlvbihlKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dC5kYXRlcGlja2VyLmluaXRpYWxpemVkfHwodChkb2N1bWVudCkub24oXCJtb3VzZWRvd25cIix0LmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayksdC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSEwKSwwPT09dChcIiNcIit0LmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiZ0KFwiYm9keVwiKS5hcHBlbmQodC5kYXRlcGlja2VyLmRwRGl2KTt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGV8fFwiaXNEaXNhYmxlZFwiIT09ZSYmXCJnZXREYXRlXCIhPT1lJiZcIndpZGdldFwiIT09ZT9cIm9wdGlvblwiPT09ZSYmMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBhcmd1bWVudHNbMV0/dC5kYXRlcGlja2VyW1wiX1wiK2UrXCJEYXRlcGlja2VyXCJdLmFwcGx5KHQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtcInN0cmluZ1wiPT10eXBlb2YgZT90LmRhdGVwaWNrZXJbXCJfXCIrZStcIkRhdGVwaWNrZXJcIl0uYXBwbHkodC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoaSkpOnQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGUpfSk6dC5kYXRlcGlja2VyW1wiX1wiK2UrXCJEYXRlcGlja2VyXCJdLmFwcGx5KHQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKX0sdC5kYXRlcGlja2VyPW5ldyBzLHQuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMSx0LmRhdGVwaWNrZXIudXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSx0LmRhdGVwaWNrZXIudmVyc2lvbj1cIjEuMTIuMVwiLHQuZGF0ZXBpY2tlcix0LnVpLmllPSEhL21zaWUgW1xcdy5dKy8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpO3ZhciBfPSExO3QoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7Xz0hMX0pLHQud2lkZ2V0KFwidWkubW91c2VcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2NhbmNlbDpcImlucHV0LCB0ZXh0YXJlYSwgYnV0dG9uLCBzZWxlY3QsIG9wdGlvblwiLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5lbGVtZW50Lm9uKFwibW91c2Vkb3duLlwiK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbih0KXtyZXR1cm4gZS5fbW91c2VEb3duKHQpfSkub24oXCJjbGljay5cIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oaSl7cmV0dXJuITA9PT10LmRhdGEoaS50YXJnZXQsZS53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpPyh0LnJlbW92ZURhdGEoaS50YXJnZXQsZS53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpLGkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITEpOnZvaWQgMH0pLHRoaXMuc3RhcnRlZD0hMX0sX21vdXNlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5vZmYoXCIuXCIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmdGhpcy5kb2N1bWVudC5vZmYoXCJtb3VzZW1vdmUuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5vZmYoXCJtb3VzZXVwLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpfSxfbW91c2VEb3duOmZ1bmN0aW9uKGUpe2lmKCFfKXt0aGlzLl9tb3VzZU1vdmVkPSExLHRoaXMuX21vdXNlU3RhcnRlZCYmdGhpcy5fbW91c2VVcChlKSx0aGlzLl9tb3VzZURvd25FdmVudD1lO3ZhciBpPXRoaXMscz0xPT09ZS53aGljaCxuPVwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsJiZlLnRhcmdldC5ub2RlTmFtZT90KGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDohMTtyZXR1cm4gcyYmIW4mJnRoaXMuX21vdXNlQ2FwdHVyZShlKT8odGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpLHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZSkmJnRoaXMuX21vdXNlRGVsYXlNZXQoZSkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydChlKSE9PSExLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpPyhlLnByZXZlbnREZWZhdWx0KCksITApOighMD09PXQuZGF0YShlLnRhcmdldCx0aGlzLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIikmJnQucmVtb3ZlRGF0YShlLnRhcmdldCx0aGlzLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIiksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21vdXNlTW92ZSh0KX0sdGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tb3VzZVVwKHQpfSx0aGlzLmRvY3VtZW50Lm9uKFwibW91c2Vtb3ZlLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkub24oXCJtb3VzZXVwLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLGUucHJldmVudERlZmF1bHQoKSxfPSEwLCEwKSk6ITB9fSxfbW91c2VNb3ZlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX21vdXNlTW92ZWQpe2lmKHQudWkuaWUmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PmRvY3VtZW50LmRvY3VtZW50TW9kZSkmJiFlLmJ1dHRvbilyZXR1cm4gdGhpcy5fbW91c2VVcChlKTtpZighZS53aGljaClpZihlLm9yaWdpbmFsRXZlbnQuYWx0S2V5fHxlLm9yaWdpbmFsRXZlbnQuY3RybEtleXx8ZS5vcmlnaW5hbEV2ZW50Lm1ldGFLZXl8fGUub3JpZ2luYWxFdmVudC5zaGlmdEtleSl0aGlzLmlnbm9yZU1pc3NpbmdXaGljaD0hMDtlbHNlIGlmKCF0aGlzLmlnbm9yZU1pc3NpbmdXaGljaClyZXR1cm4gdGhpcy5fbW91c2VVcChlKX1yZXR1cm4oZS53aGljaHx8ZS5idXR0b24pJiYodGhpcy5fbW91c2VNb3ZlZD0hMCksdGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcoZSksZS5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldChlKSYmdGhpcy5fbW91c2VEZWxheU1ldChlKSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LGUpIT09ITEsdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyhlKTp0aGlzLl9tb3VzZVVwKGUpKSwhdGhpcy5fbW91c2VTdGFydGVkKX0sX21vdXNlVXA6ZnVuY3Rpb24oZSl7dGhpcy5kb2N1bWVudC5vZmYoXCJtb3VzZW1vdmUuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5vZmYoXCJtb3VzZXVwLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSxlLnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmdC5kYXRhKGUudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiLCEwKSx0aGlzLl9tb3VzZVN0b3AoZSkpLHRoaXMuX21vdXNlRGVsYXlUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLl9tb3VzZURlbGF5VGltZXIpLGRlbGV0ZSB0aGlzLl9tb3VzZURlbGF5VGltZXIpLHRoaXMuaWdub3JlTWlzc2luZ1doaWNoPSExLF89ITEsZS5wcmV2ZW50RGVmYXVsdCgpfSxfbW91c2VEaXN0YW5jZU1ldDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVgtdC5wYWdlWCksTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVktdC5wYWdlWSkpPj10aGlzLm9wdGlvbnMuZGlzdGFuY2V9LF9tb3VzZURlbGF5TWV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oKXt9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oKXt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSx0LnVpLnBsdWdpbj17YWRkOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvPXQudWlbZV0ucHJvdG90eXBlO2ZvcihuIGluIHMpby5wbHVnaW5zW25dPW8ucGx1Z2luc1tuXXx8W10sby5wbHVnaW5zW25dLnB1c2goW2ksc1tuXV0pfSxjYWxsOmZ1bmN0aW9uKHQsZSxpLHMpe3ZhciBuLG89dC5wbHVnaW5zW2VdO2lmKG8mJihzfHx0LmVsZW1lbnRbMF0ucGFyZW50Tm9kZSYmMTEhPT10LmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZSkpZm9yKG49MDtvLmxlbmd0aD5uO24rKyl0Lm9wdGlvbnNbb1tuXVswXV0mJm9bbl1bMV0uYXBwbHkodC5lbGVtZW50LGkpfX0sdC51aS5zYWZlQmx1cj1mdW5jdGlvbihlKXtlJiZcImJvZHlcIiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmdChlKS50cmlnZ2VyKFwiYmx1clwiKX0sdC53aWRnZXQoXCJ1aS5kcmFnZ2FibGVcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJkcmFnXCIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzpcInBhcmVudFwiLGF4aXM6ITEsY29ubmVjdFRvU29ydGFibGU6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOlwiYXV0b1wiLGN1cnNvckF0OiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjpcIm9yaWdpbmFsXCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOlwiZGVmYXVsdFwiLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzbmFwOiExLHNuYXBNb2RlOlwiYm90aFwiLHNuYXBUb2xlcmFuY2U6MjAsc3RhY2s6ITEsekluZGV4OiExLGRyYWc6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe1wib3JpZ2luYWxcIj09PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcmFnZ2FibGVcIiksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VJbml0KCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXt0aGlzLl9zdXBlcih0LGUpLFwiaGFuZGxlXCI9PT10JiYodGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCkpfSxfZGVzdHJveTpmdW5jdGlvbigpe3JldHVybih0aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50KS5pcyhcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIik/KHRoaXMuZGVzdHJveU9uQ2xlYXI9ITAsdm9pZCAwKToodGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VEZXN0cm95KCksdm9pZCAwKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyfHxpLmRpc2FibGVkfHx0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIikubGVuZ3RoPjA/ITE6KHRoaXMuaGFuZGxlPXRoaXMuX2dldEhhbmRsZShlKSx0aGlzLmhhbmRsZT8odGhpcy5fYmx1ckFjdGl2ZUVsZW1lbnQoZSksdGhpcy5fYmxvY2tGcmFtZXMoaS5pZnJhbWVGaXg9PT0hMD9cImlmcmFtZVwiOmkuaWZyYW1lRml4KSwhMCk6ITEpfSxfYmxvY2tGcmFtZXM6ZnVuY3Rpb24oZSl7dGhpcy5pZnJhbWVCbG9ja3M9dGhpcy5kb2N1bWVudC5maW5kKGUpLm1hcChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuIHQoXCI8ZGl2PlwiKS5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIikuYXBwZW5kVG8oZS5wYXJlbnQoKSkub3V0ZXJXaWR0aChlLm91dGVyV2lkdGgoKSkub3V0ZXJIZWlnaHQoZS5vdXRlckhlaWdodCgpKS5vZmZzZXQoZS5vZmZzZXQoKSlbMF19KX0sX3VuYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2NrcyYmKHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmlmcmFtZUJsb2Nrcyl9LF9ibHVyQWN0aXZlRWxlbWVudDpmdW5jdGlvbihlKXt2YXIgaT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pLHM9dChlLnRhcmdldCk7cy5jbG9zZXN0KGkpLmxlbmd0aHx8dC51aS5zYWZlQmx1cihpKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoZSksdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHQudWkuZGRtYW5hZ2VyJiYodC51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCghMCksdGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCksdGhpcy5oYXNGaXhlZEFuY2VzdG9yPXRoaXMuaGVscGVyLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm5cImZpeGVkXCI9PT10KHRoaXMpLmNzcyhcInBvc2l0aW9uXCIpfSkubGVuZ3RoPjAsdGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fcmVmcmVzaE9mZnNldHMoZSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlLCExKSx0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsZSk9PT0hMT8odGhpcy5fY2xlYXIoKSwhMSk6KHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0LnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxlKSx0aGlzLl9tb3VzZURyYWcoZSwhMCksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLGUpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKHQpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLCFpKXt2YXIgcz10aGlzLl91aUhhc2goKTtpZih0aGlzLl90cmlnZ2VyKFwiZHJhZ1wiLGUscyk9PT0hMSlyZXR1cm4gdGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIixlKSksITE7dGhpcy5wb3NpdGlvbj1zLnBvc2l0aW9ufXJldHVybiB0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wK1wicHhcIix0LnVpLmRkbWFuYWdlciYmdC51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLGUpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscz0hMTtyZXR1cm4gdC51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmKHM9dC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLGUpKSx0aGlzLmRyb3BwZWQmJihzPXRoaXMuZHJvcHBlZCx0aGlzLmRyb3BwZWQ9ITEpLFwiaW52YWxpZFwiPT09dGhpcy5vcHRpb25zLnJldmVydCYmIXN8fFwidmFsaWRcIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8dC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP3QodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKFwic3RvcFwiLGUpIT09ITEmJmkuX2NsZWFyKCl9KTp0aGlzLl90cmlnZ2VyKFwic3RvcFwiLGUpIT09ITEmJnRoaXMuX2NsZWFyKCksITF9LF9tb3VzZVVwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl91bmJsb2NrRnJhbWVzKCksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKHRoaXMsZSksdGhpcy5oYW5kbGVFbGVtZW50LmlzKGUudGFyZ2V0KSYmdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0LnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsZSl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcyhcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIik/dGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIix7dGFyZ2V0OnRoaXMuZWxlbWVudFswXX0pKTp0aGlzLl9jbGVhcigpLHRoaXN9LF9nZXRIYW5kbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucy5oYW5kbGU/ISF0KGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpKS5sZW5ndGg6ITB9LF9zZXRIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZUVsZW1lbnQ9dGhpcy5vcHRpb25zLmhhbmRsZT90aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGFuZGxlKTp0aGlzLmVsZW1lbnQsdGhpcy5fYWRkQ2xhc3ModGhpcy5oYW5kbGVFbGVtZW50LFwidWktZHJhZ2dhYmxlLWhhbmRsZVwiKX0sX3JlbW92ZUhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaGFuZGxlRWxlbWVudCxcInVpLWRyYWdnYWJsZS1oYW5kbGVcIil9LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dC5pc0Z1bmN0aW9uKGkuaGVscGVyKSxuPXM/dChpLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2VdKSk6XCJjbG9uZVwiPT09aS5oZWxwZXI/dGhpcy5lbGVtZW50LmNsb25lKCkucmVtb3ZlQXR0cihcImlkXCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gbi5wYXJlbnRzKFwiYm9keVwiKS5sZW5ndGh8fG4uYXBwZW5kVG8oXCJwYXJlbnRcIj09PWkuYXBwZW5kVG8/dGhpcy5lbGVtZW50WzBdLnBhcmVudE5vZGU6aS5hcHBlbmRUbykscyYmblswXT09PXRoaXMuZWxlbWVudFswXSYmdGhpcy5fc2V0UG9zaXRpb25SZWxhdGl2ZSgpLG5bMF09PT10aGlzLmVsZW1lbnRbMF18fC8oZml4ZWR8YWJzb2x1dGUpLy50ZXN0KG4uY3NzKFwicG9zaXRpb25cIikpfHxuLmNzcyhcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKSxufSxfc2V0UG9zaXRpb25SZWxhdGl2ZTpmdW5jdGlvbigpey9eKD86cnxhfGYpLy50ZXN0KHRoaXMuZWxlbWVudC5jc3MoXCJwb3NpdGlvblwiKSl8fCh0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKX0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoXCIgXCIpKSx0LmlzQXJyYXkoZSkmJihlPXtsZWZ0OitlWzBdLHRvcDorZVsxXXx8MH0pLFwibGVmdFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9ZS5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInJpZ2h0XCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLWUucmlnaHQrdGhpcy5tYXJnaW5zLmxlZnQpLFwidG9wXCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPWUudG9wK3RoaXMubWFyZ2lucy50b3ApLFwiYm90dG9tXCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LWUuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfaXNSb290Tm9kZTpmdW5jdGlvbih0KXtyZXR1cm4vKGh0bWx8Ym9keSkvaS50ZXN0KHQudGFnTmFtZSl8fHQ9PT10aGlzLmRvY3VtZW50WzBdfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCksaT10aGlzLmRvY3VtZW50WzBdO3JldHVyblwiYWJzb2x1dGVcIj09PXRoaXMuY3NzUG9zaXRpb24mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09aSYmdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJihlLmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSxlLnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpLHRoaXMuX2lzUm9vdE5vZGUodGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZT17dG9wOjAsbGVmdDowfSkse3RvcDplLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKSxsZWZ0OmUubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZihcInJlbGF0aXZlXCIhPT10aGlzLmNzc1Bvc2l0aW9uKXJldHVybnt0b3A6MCxsZWZ0OjB9O3ZhciB0PXRoaXMuZWxlbWVudC5wb3NpdGlvbigpLGU9dGhpcy5faXNSb290Tm9kZSh0aGlzLnNjcm9sbFBhcmVudFswXSk7cmV0dXJue3RvcDp0LnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKFwidG9wXCIpLDEwKXx8MCkrKGU/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksbGVmdDp0LmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcImxlZnRcIiksMTApfHwwKSsoZT8wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSl9XHJcbn0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luTGVmdFwiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5Ub3BcIiksMTApfHwwLHJpZ2h0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5SaWdodFwiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5Cb3R0b21cIiksMTApfHwwfX0sX2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlbHBlclByb3BvcnRpb25zPXt3aWR0aDp0aGlzLmhlbHBlci5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuaGVscGVyLm91dGVySGVpZ2h0KCl9fSxfc2V0Q29udGFpbm1lbnQ6ZnVuY3Rpb24oKXt2YXIgZSxpLHMsbj10aGlzLm9wdGlvbnMsbz10aGlzLmRvY3VtZW50WzBdO3JldHVybiB0aGlzLnJlbGF0aXZlQ29udGFpbmVyPW51bGwsbi5jb250YWlubWVudD9cIndpbmRvd1wiPT09bi5jb250YWlubWVudD8odGhpcy5jb250YWlubWVudD1bdCh3aW5kb3cpLnNjcm9sbExlZnQoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LHQod2luZG93KS5zY3JvbGxUb3AoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCx0KHdpbmRvdykuc2Nyb2xsTGVmdCgpK3Qod2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsdCh3aW5kb3cpLnNjcm9sbFRvcCgpKyh0KHdpbmRvdykuaGVpZ2h0KCl8fG8uYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0sdm9pZCAwKTpcImRvY3VtZW50XCI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVswLDAsdChvKS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKHQobykuaGVpZ2h0KCl8fG8uYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0sdm9pZCAwKTpuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/KHRoaXMuY29udGFpbm1lbnQ9bi5jb250YWlubWVudCx2b2lkIDApOihcInBhcmVudFwiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksaT10KG4uY29udGFpbm1lbnQpLHM9aVswXSxzJiYoZT0vKHNjcm9sbHxhdXRvKS8udGVzdChpLmNzcyhcIm92ZXJmbG93XCIpKSx0aGlzLmNvbnRhaW5tZW50PVsocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nTGVmdFwiKSwxMCl8fDApLChwYXJzZUludChpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ1RvcFwiKSwxMCl8fDApLChlP01hdGgubWF4KHMuc2Nyb2xsV2lkdGgscy5vZmZzZXRXaWR0aCk6cy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyUmlnaHRXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChpLmNzcyhcInBhZGRpbmdSaWdodFwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQtdGhpcy5tYXJnaW5zLnJpZ2h0LChlP01hdGgubWF4KHMuc2Nyb2xsSGVpZ2h0LHMub2Zmc2V0SGVpZ2h0KTpzLm9mZnNldEhlaWdodCktKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nQm90dG9tXCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcC10aGlzLm1hcmdpbnMuYm90dG9tXSx0aGlzLnJlbGF0aXZlQ29udGFpbmVyPWkpLHZvaWQgMCk6KHRoaXMuY29udGFpbm1lbnQ9bnVsbCx2b2lkIDApfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24odCxlKXtlfHwoZT10aGlzLnBvc2l0aW9uKTt2YXIgaT1cImFic29sdXRlXCI9PT10PzE6LTEscz10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOmUudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCppK3RoaXMub2Zmc2V0LnBhcmVudC50b3AqaS0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpzPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCkqaSxsZWZ0OmUubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmkrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqaS0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cz8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KSppfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG4sbyxhPXRoaXMub3B0aW9ucyxyPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pLGg9dC5wYWdlWCxsPXQucGFnZVk7cmV0dXJuIHImJnRoaXMub2Zmc2V0LnNjcm9sbHx8KHRoaXMub2Zmc2V0LnNjcm9sbD17dG9wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfSksZSYmKHRoaXMuY29udGFpbm1lbnQmJih0aGlzLnJlbGF0aXZlQ29udGFpbmVyPyhzPXRoaXMucmVsYXRpdmVDb250YWluZXIub2Zmc2V0KCksaT1bdGhpcy5jb250YWlubWVudFswXStzLmxlZnQsdGhpcy5jb250YWlubWVudFsxXStzLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK3MubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK3MudG9wXSk6aT10aGlzLmNvbnRhaW5tZW50LHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDxpWzBdJiYoaD1pWzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPGlbMV0mJihsPWlbMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSx0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXSYmKGg9aVsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdJiYobD1pWzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLGEuZ3JpZCYmKG49YS5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChsLXRoaXMub3JpZ2luYWxQYWdlWSkvYS5ncmlkWzFdKSphLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZLGw9aT9uLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXXx8bi10aGlzLm9mZnNldC5jbGljay50b3A+aVszXT9uOm4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdP24tYS5ncmlkWzFdOm4rYS5ncmlkWzFdOm4sbz1hLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGgtdGhpcy5vcmlnaW5hbFBhZ2VYKS9hLmdyaWRbMF0pKmEuZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVgsaD1pP28tdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXXx8by10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0/bzpvLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF0/by1hLmdyaWRbMF06bythLmdyaWRbMF06byksXCJ5XCI9PT1hLmF4aXMmJihoPXRoaXMub3JpZ2luYWxQYWdlWCksXCJ4XCI9PT1hLmF4aXMmJihsPXRoaXMub3JpZ2luYWxQYWdlWSkpLHt0b3A6bC10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC50b3A6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC50b3ApLGxlZnQ6aC10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnI/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCl9fSxfY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhlbHBlcixcInVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKSx0aGlzLmhlbHBlclswXT09PXRoaXMuZWxlbWVudFswXXx8dGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHx0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmRlc3Ryb3lPbkNsZWFyJiZ0aGlzLmRlc3Ryb3koKX0sX3RyaWdnZXI6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiBzPXN8fHRoaXMuX3VpSGFzaCgpLHQudWkucGx1Z2luLmNhbGwodGhpcyxlLFtpLHMsdGhpc10sITApLC9eKGRyYWd8c3RhcnR8c3RvcCkvLnRlc3QoZSkmJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIikscy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicyksdC5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmNhbGwodGhpcyxlLGkscyl9LHBsdWdpbnM6e30sX3VpSGFzaDpmdW5jdGlvbigpe3JldHVybntoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic319fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJjb25uZWN0VG9Tb3J0YWJsZVwiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG49dC5leHRlbmQoe30saSx7aXRlbTpzLmVsZW1lbnR9KTtzLnNvcnRhYmxlcz1bXSx0KHMub3B0aW9ucy5jb25uZWN0VG9Tb3J0YWJsZSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuc29ydGFibGUoXCJpbnN0YW5jZVwiKTtpJiYhaS5vcHRpb25zLmRpc2FibGVkJiYocy5zb3J0YWJsZXMucHVzaChpKSxpLnJlZnJlc2hQb3NpdGlvbnMoKSxpLl90cmlnZ2VyKFwiYWN0aXZhdGVcIixlLG4pKX0pfSxzdG9wOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10LmV4dGVuZCh7fSxpLHtpdGVtOnMuZWxlbWVudH0pO3MuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0LmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuaXNPdmVyPyh0LmlzT3Zlcj0wLHMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCx0LmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdC5fc3RvcmVkQ1NTPXtwb3NpdGlvbjp0LnBsYWNlaG9sZGVyLmNzcyhcInBvc2l0aW9uXCIpLHRvcDp0LnBsYWNlaG9sZGVyLmNzcyhcInRvcFwiKSxsZWZ0OnQucGxhY2Vob2xkZXIuY3NzKFwibGVmdFwiKX0sdC5fbW91c2VTdG9wKGUpLHQub3B0aW9ucy5oZWxwZXI9dC5vcHRpb25zLl9oZWxwZXIpOih0LmNhbmNlbEhlbHBlclJlbW92YWw9ITAsdC5fdHJpZ2dlcihcImRlYWN0aXZhdGVcIixlLG4pKX0pfSxkcmFnOmZ1bmN0aW9uKGUsaSxzKXt0LmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgbj0hMSxvPXRoaXM7by5wb3NpdGlvbkFicz1zLnBvc2l0aW9uQWJzLG8uaGVscGVyUHJvcG9ydGlvbnM9cy5oZWxwZXJQcm9wb3J0aW9ucyxvLm9mZnNldC5jbGljaz1zLm9mZnNldC5jbGljayxvLl9pbnRlcnNlY3RzV2l0aChvLmNvbnRhaW5lckNhY2hlKSYmKG49ITAsdC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyx0aGlzLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssdGhpcyE9PW8mJnRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyQ2FjaGUpJiZ0LmNvbnRhaW5zKG8uZWxlbWVudFswXSx0aGlzLmVsZW1lbnRbMF0pJiYobj0hMSksbn0pKSxuPyhvLmlzT3Zlcnx8KG8uaXNPdmVyPTEscy5fcGFyZW50PWkuaGVscGVyLnBhcmVudCgpLG8uY3VycmVudEl0ZW09aS5oZWxwZXIuYXBwZW5kVG8oby5lbGVtZW50KS5kYXRhKFwidWktc29ydGFibGUtaXRlbVwiLCEwKSxvLm9wdGlvbnMuX2hlbHBlcj1vLm9wdGlvbnMuaGVscGVyLG8ub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWxwZXJbMF19LGUudGFyZ2V0PW8uY3VycmVudEl0ZW1bMF0sby5fbW91c2VDYXB0dXJlKGUsITApLG8uX21vdXNlU3RhcnQoZSwhMCwhMCksby5vZmZzZXQuY2xpY2sudG9wPXMub2Zmc2V0LmNsaWNrLnRvcCxvLm9mZnNldC5jbGljay5sZWZ0PXMub2Zmc2V0LmNsaWNrLmxlZnQsby5vZmZzZXQucGFyZW50LmxlZnQtPXMub2Zmc2V0LnBhcmVudC5sZWZ0LW8ub2Zmc2V0LnBhcmVudC5sZWZ0LG8ub2Zmc2V0LnBhcmVudC50b3AtPXMub2Zmc2V0LnBhcmVudC50b3Atby5vZmZzZXQucGFyZW50LnRvcCxzLl90cmlnZ2VyKFwidG9Tb3J0YWJsZVwiLGUpLHMuZHJvcHBlZD1vLmVsZW1lbnQsdC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9KSxzLmN1cnJlbnRJdGVtPXMuZWxlbWVudCxvLmZyb21PdXRzaWRlPXMpLG8uY3VycmVudEl0ZW0mJihvLl9tb3VzZURyYWcoZSksaS5wb3NpdGlvbj1vLnBvc2l0aW9uKSk6by5pc092ZXImJihvLmlzT3Zlcj0wLG8uY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxvLm9wdGlvbnMuX3JldmVydD1vLm9wdGlvbnMucmV2ZXJ0LG8ub3B0aW9ucy5yZXZlcnQ9ITEsby5fdHJpZ2dlcihcIm91dFwiLGUsby5fdWlIYXNoKG8pKSxvLl9tb3VzZVN0b3AoZSwhMCksby5vcHRpb25zLnJldmVydD1vLm9wdGlvbnMuX3JldmVydCxvLm9wdGlvbnMuaGVscGVyPW8ub3B0aW9ucy5faGVscGVyLG8ucGxhY2Vob2xkZXImJm8ucGxhY2Vob2xkZXIucmVtb3ZlKCksaS5oZWxwZXIuYXBwZW5kVG8ocy5fcGFyZW50KSxzLl9yZWZyZXNoT2Zmc2V0cyhlKSxpLnBvc2l0aW9uPXMuX2dlbmVyYXRlUG9zaXRpb24oZSwhMCkscy5fdHJpZ2dlcihcImZyb21Tb3J0YWJsZVwiLGUpLHMuZHJvcHBlZD0hMSx0LmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pKX0pfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwiY3Vyc29yXCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10KFwiYm9keVwiKSxvPXMub3B0aW9ucztuLmNzcyhcImN1cnNvclwiKSYmKG8uX2N1cnNvcj1uLmNzcyhcImN1cnNvclwiKSksbi5jc3MoXCJjdXJzb3JcIixvLmN1cnNvcil9LHN0b3A6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9jdXJzb3ImJnQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLG4uX2N1cnNvcil9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJvcGFjaXR5XCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10KGkuaGVscGVyKSxvPXMub3B0aW9ucztuLmNzcyhcIm9wYWNpdHlcIikmJihvLl9vcGFjaXR5PW4uY3NzKFwib3BhY2l0eVwiKSksbi5jc3MoXCJvcGFjaXR5XCIsby5vcGFjaXR5KX0sc3RvcDpmdW5jdGlvbihlLGkscyl7dmFyIG49cy5vcHRpb25zO24uX29wYWNpdHkmJnQoaS5oZWxwZXIpLmNzcyhcIm9wYWNpdHlcIixuLl9vcGFjaXR5KX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInNjcm9sbFwiLHtzdGFydDpmdW5jdGlvbih0LGUsaSl7aS5zY3JvbGxQYXJlbnROb3RIaWRkZW58fChpLnNjcm9sbFBhcmVudE5vdEhpZGRlbj1pLmhlbHBlci5zY3JvbGxQYXJlbnQoITEpKSxpLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXSE9PWkuZG9jdW1lbnRbMF0mJlwiSFRNTFwiIT09aS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0udGFnTmFtZSYmKGkub3ZlcmZsb3dPZmZzZXQ9aS5zY3JvbGxQYXJlbnROb3RIaWRkZW4ub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1zLm9wdGlvbnMsbz0hMSxhPXMuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdLHI9cy5kb2N1bWVudFswXTthIT09ciYmXCJIVE1MXCIhPT1hLnRhZ05hbWU/KG4uYXhpcyYmXCJ4XCI9PT1uLmF4aXN8fChzLm92ZXJmbG93T2Zmc2V0LnRvcCthLm9mZnNldEhlaWdodC1lLnBhZ2VZPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YS5zY3JvbGxUb3A9bz1hLnNjcm9sbFRvcCtuLnNjcm9sbFNwZWVkOmUucGFnZVktcy5vdmVyZmxvd09mZnNldC50b3A8bi5zY3JvbGxTZW5zaXRpdml0eSYmKGEuc2Nyb2xsVG9wPW89YS5zY3JvbGxUb3Atbi5zY3JvbGxTcGVlZCkpLG4uYXhpcyYmXCJ5XCI9PT1uLmF4aXN8fChzLm92ZXJmbG93T2Zmc2V0LmxlZnQrYS5vZmZzZXRXaWR0aC1lLnBhZ2VYPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YS5zY3JvbGxMZWZ0PW89YS5zY3JvbGxMZWZ0K24uc2Nyb2xsU3BlZWQ6ZS5wYWdlWC1zLm92ZXJmbG93T2Zmc2V0LmxlZnQ8bi5zY3JvbGxTZW5zaXRpdml0eSYmKGEuc2Nyb2xsTGVmdD1vPWEuc2Nyb2xsTGVmdC1uLnNjcm9sbFNwZWVkKSkpOihuLmF4aXMmJlwieFwiPT09bi5heGlzfHwoZS5wYWdlWS10KHIpLnNjcm9sbFRvcCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/bz10KHIpLnNjcm9sbFRvcCh0KHIpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOnQod2luZG93KS5oZWlnaHQoKS0oZS5wYWdlWS10KHIpLnNjcm9sbFRvcCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYobz10KHIpLnNjcm9sbFRvcCh0KHIpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSksbi5heGlzJiZcInlcIj09PW4uYXhpc3x8KGUucGFnZVgtdChyKS5zY3JvbGxMZWZ0KCk8bi5zY3JvbGxTZW5zaXRpdml0eT9vPXQocikuc2Nyb2xsTGVmdCh0KHIpLnNjcm9sbExlZnQoKS1uLnNjcm9sbFNwZWVkKTp0KHdpbmRvdykud2lkdGgoKS0oZS5wYWdlWC10KHIpLnNjcm9sbExlZnQoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKG89dChyKS5zY3JvbGxMZWZ0KHQocikuc2Nyb2xsTGVmdCgpK24uc2Nyb2xsU3BlZWQpKSkpLG8hPT0hMSYmdC51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHMsZSl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzbmFwXCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1zLm9wdGlvbnM7cy5zbmFwRWxlbWVudHM9W10sdChuLnNuYXAuY29uc3RydWN0b3IhPT1TdHJpbmc/bi5zbmFwLml0ZW1zfHxcIjpkYXRhKHVpLWRyYWdnYWJsZSlcIjpuLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5vZmZzZXQoKTt0aGlzIT09cy5lbGVtZW50WzBdJiZzLnNuYXBFbGVtZW50cy5wdXNoKHtpdGVtOnRoaXMsd2lkdGg6ZS5vdXRlcldpZHRoKCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoKSx0b3A6aS50b3AsbGVmdDppLmxlZnR9KX0pfSxkcmFnOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLGEscixoLGwsYyx1LGQscCxmPXMub3B0aW9ucyxnPWYuc25hcFRvbGVyYW5jZSxtPWkub2Zmc2V0LmxlZnQsXz1tK3MuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsdj1pLm9mZnNldC50b3AsYj12K3MuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0O2ZvcihkPXMuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2Q+PTA7ZC0tKWg9cy5zbmFwRWxlbWVudHNbZF0ubGVmdC1zLm1hcmdpbnMubGVmdCxsPWgrcy5zbmFwRWxlbWVudHNbZF0ud2lkdGgsYz1zLnNuYXBFbGVtZW50c1tkXS50b3Atcy5tYXJnaW5zLnRvcCx1PWMrcy5zbmFwRWxlbWVudHNbZF0uaGVpZ2h0LGgtZz5ffHxtPmwrZ3x8Yy1nPmJ8fHY+dStnfHwhdC5jb250YWlucyhzLnNuYXBFbGVtZW50c1tkXS5pdGVtLm93bmVyRG9jdW1lbnQscy5zbmFwRWxlbWVudHNbZF0uaXRlbSk/KHMuc25hcEVsZW1lbnRzW2RdLnNuYXBwaW5nJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlLmNhbGwocy5lbGVtZW50LGUsdC5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2RdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbZF0uc25hcHBpbmc9ITEpOihcImlubmVyXCIhPT1mLnNuYXBNb2RlJiYobj1nPj1NYXRoLmFicyhjLWIpLG89Zz49TWF0aC5hYnModS12KSxhPWc+PU1hdGguYWJzKGgtXykscj1nPj1NYXRoLmFicyhsLW0pLG4mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDpjLXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOnUsbGVmdDowfSkudG9wKSxhJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpoLXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSxyJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpsfSkubGVmdCkpLHA9bnx8b3x8YXx8cixcIm91dGVyXCIhPT1mLnNuYXBNb2RlJiYobj1nPj1NYXRoLmFicyhjLXYpLG89Zz49TWF0aC5hYnModS1iKSxhPWc+PU1hdGguYWJzKGgtbSkscj1nPj1NYXRoLmFicyhsLV8pLG4mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDpjLGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOnUtcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wKSxhJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpofSkubGVmdCksciYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6bC1zLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdCkpLCFzLnNuYXBFbGVtZW50c1tkXS5zbmFwcGluZyYmKG58fG98fGF8fHJ8fHApJiZzLm9wdGlvbnMuc25hcC5zbmFwJiZzLm9wdGlvbnMuc25hcC5zbmFwLmNhbGwocy5lbGVtZW50LGUsdC5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2RdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbZF0uc25hcHBpbmc9bnx8b3x8YXx8cnx8cCl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzdGFja1wiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG4sbz1zLm9wdGlvbnMsYT10Lm1ha2VBcnJheSh0KG8uc3RhY2spKS5zb3J0KGZ1bmN0aW9uKGUsaSl7cmV0dXJuKHBhcnNlSW50KHQoZSkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCktKHBhcnNlSW50KHQoaSkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCl9KTthLmxlbmd0aCYmKG49cGFyc2VJbnQodChhWzBdKS5jc3MoXCJ6SW5kZXhcIiksMTApfHwwLHQoYSkuZWFjaChmdW5jdGlvbihlKXt0KHRoaXMpLmNzcyhcInpJbmRleFwiLG4rZSl9KSx0aGlzLmNzcyhcInpJbmRleFwiLG4rYS5sZW5ndGgpKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInpJbmRleFwiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG49dChpLmhlbHBlciksbz1zLm9wdGlvbnM7bi5jc3MoXCJ6SW5kZXhcIikmJihvLl96SW5kZXg9bi5jc3MoXCJ6SW5kZXhcIikpLG4uY3NzKFwiekluZGV4XCIsby56SW5kZXgpfSxzdG9wOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fekluZGV4JiZ0KGkuaGVscGVyKS5jc3MoXCJ6SW5kZXhcIixuLl96SW5kZXgpfX0pLHQudWkuZHJhZ2dhYmxlLHQud2lkZ2V0KFwidWkucmVzaXphYmxlXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4OlwicmVzaXplXCIsb3B0aW9uczp7YWxzb1Jlc2l6ZTohMSxhbmltYXRlOiExLGFuaW1hdGVEdXJhdGlvbjpcInNsb3dcIixhbmltYXRlRWFzaW5nOlwic3dpbmdcIixhc3BlY3RSYXRpbzohMSxhdXRvSGlkZTohMSxjbGFzc2VzOntcInVpLXJlc2l6YWJsZS1zZVwiOlwidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZVwifSxjb250YWlubWVudDohMSxnaG9zdDohMSxncmlkOiExLGhhbmRsZXM6XCJlLHMsc2VcIixoZWxwZXI6ITEsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTAsbWluV2lkdGg6MTAsekluZGV4OjkwLHJlc2l6ZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfbnVtOmZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfHwwfSxfaXNOdW1iZXI6ZnVuY3Rpb24odCl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQodCkpfSxfaGFzU2Nyb2xsOmZ1bmN0aW9uKGUsaSl7aWYoXCJoaWRkZW5cIj09PXQoZSkuY3NzKFwib3ZlcmZsb3dcIikpcmV0dXJuITE7dmFyIHM9aSYmXCJsZWZ0XCI9PT1pP1wic2Nyb2xsTGVmdFwiOlwic2Nyb2xsVG9wXCIsbj0hMTtyZXR1cm4gZVtzXT4wPyEwOihlW3NdPTEsbj1lW3NdPjAsZVtzXT0wLG4pfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLm9wdGlvbnMscz10aGlzO3RoaXMuX2FkZENsYXNzKFwidWktcmVzaXphYmxlXCIpLHQuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIWkuYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86aS5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6aS5oZWxwZXJ8fGkuZ2hvc3R8fGkuYW5pbWF0ZT9pLmhlbHBlcnx8XCJ1aS1yZXNpemFibGUtaGVscGVyXCI6bnVsbH0pLHRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvXihjYW52YXN8dGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbnxpbWcpJC9pKSYmKHRoaXMuZWxlbWVudC53cmFwKHQoXCI8ZGl2IGNsYXNzPSd1aS13cmFwcGVyJyBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnPjwvZGl2PlwiKS5jc3Moe3Bvc2l0aW9uOnRoaXMuZWxlbWVudC5jc3MoXCJwb3NpdGlvblwiKSx3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSx0b3A6dGhpcy5lbGVtZW50LmNzcyhcInRvcFwiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoXCJsZWZ0XCIpfSkpLHRoaXMuZWxlbWVudD10aGlzLmVsZW1lbnQucGFyZW50KCkuZGF0YShcInVpLXJlc2l6YWJsZVwiLHRoaXMuZWxlbWVudC5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSksdGhpcy5lbGVtZW50SXNXcmFwcGVyPSEwLGU9e21hcmdpblRvcDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5Ub3BcIiksbWFyZ2luUmlnaHQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luUmlnaHRcIiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpbkxlZnRcIil9LHRoaXMuZWxlbWVudC5jc3MoZSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luXCIsMCksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcInJlc2l6ZVwiKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJyZXNpemVcIixcIm5vbmVcIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246XCJzdGF0aWNcIix6b29tOjEsZGlzcGxheTpcImJsb2NrXCJ9KSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKGUpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuX3NldHVwSGFuZGxlcygpLGkuYXV0b0hpZGUmJnQodGhpcy5lbGVtZW50KS5vbihcIm1vdXNlZW50ZXJcIixmdW5jdGlvbigpe2kuZGlzYWJsZWR8fChzLl9yZW1vdmVDbGFzcyhcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiKSxzLl9oYW5kbGVzLnNob3coKSl9KS5vbihcIm1vdXNlbGVhdmVcIixmdW5jdGlvbigpe2kuZGlzYWJsZWR8fHMucmVzaXppbmd8fChzLl9hZGRDbGFzcyhcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiKSxzLl9oYW5kbGVzLmhpZGUoKSl9KSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZURlc3Ryb3koKTt2YXIgZSxpPWZ1bmN0aW9uKGUpe3QoZSkucmVtb3ZlRGF0YShcInJlc2l6YWJsZVwiKS5yZW1vdmVEYXRhKFwidWktcmVzaXphYmxlXCIpLm9mZihcIi5yZXNpemFibGVcIikuZmluZChcIi51aS1yZXNpemFibGUtaGFuZGxlXCIpLnJlbW92ZSgpfTtyZXR1cm4gdGhpcy5lbGVtZW50SXNXcmFwcGVyJiYoaSh0aGlzLmVsZW1lbnQpLGU9dGhpcy5lbGVtZW50LHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246ZS5jc3MoXCJwb3NpdGlvblwiKSx3aWR0aDplLm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCgpLHRvcDplLmNzcyhcInRvcFwiKSxsZWZ0OmUuY3NzKFwibGVmdFwiKX0pLmluc2VydEFmdGVyKGUpLGUucmVtb3ZlKCkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcInJlc2l6ZVwiLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZSksaSh0aGlzLm9yaWdpbmFsRWxlbWVudCksdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9zdXBlcih0LGUpLHQpe2Nhc2VcImhhbmRsZXNcIjp0aGlzLl9yZW1vdmVIYW5kbGVzKCksdGhpcy5fc2V0dXBIYW5kbGVzKCk7YnJlYWs7ZGVmYXVsdDp9fSxfc2V0dXBIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbyxhPXRoaXMub3B0aW9ucyxyPXRoaXM7aWYodGhpcy5oYW5kbGVzPWEuaGFuZGxlc3x8KHQoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiLHRoaXMuZWxlbWVudCkubGVuZ3RoP3tuOlwiLnVpLXJlc2l6YWJsZS1uXCIsZTpcIi51aS1yZXNpemFibGUtZVwiLHM6XCIudWktcmVzaXphYmxlLXNcIix3OlwiLnVpLXJlc2l6YWJsZS13XCIsc2U6XCIudWktcmVzaXphYmxlLXNlXCIsc3c6XCIudWktcmVzaXphYmxlLXN3XCIsbmU6XCIudWktcmVzaXphYmxlLW5lXCIsbnc6XCIudWktcmVzaXphYmxlLW53XCJ9OlwiZSxzLHNlXCIpLHRoaXMuX2hhbmRsZXM9dCgpLHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3Rvcj09PVN0cmluZylmb3IoXCJhbGxcIj09PXRoaXMuaGFuZGxlcyYmKHRoaXMuaGFuZGxlcz1cIm4sZSxzLHcsc2Usc3csbmUsbndcIikscz10aGlzLmhhbmRsZXMuc3BsaXQoXCIsXCIpLHRoaXMuaGFuZGxlcz17fSxpPTA7cy5sZW5ndGg+aTtpKyspZT10LnRyaW0oc1tpXSksbj1cInVpLXJlc2l6YWJsZS1cIitlLG89dChcIjxkaXY+XCIpLHRoaXMuX2FkZENsYXNzKG8sXCJ1aS1yZXNpemFibGUtaGFuZGxlIFwiK24pLG8uY3NzKHt6SW5kZXg6YS56SW5kZXh9KSx0aGlzLmhhbmRsZXNbZV09XCIudWktcmVzaXphYmxlLVwiK2UsdGhpcy5lbGVtZW50LmFwcGVuZChvKTt0aGlzLl9yZW5kZXJBeGlzPWZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvO2U9ZXx8dGhpcy5lbGVtZW50O2ZvcihpIGluIHRoaXMuaGFuZGxlcyl0aGlzLmhhbmRsZXNbaV0uY29uc3RydWN0b3I9PT1TdHJpbmc/dGhpcy5oYW5kbGVzW2ldPXRoaXMuZWxlbWVudC5jaGlsZHJlbih0aGlzLmhhbmRsZXNbaV0pLmZpcnN0KCkuc2hvdygpOih0aGlzLmhhbmRsZXNbaV0uanF1ZXJ5fHx0aGlzLmhhbmRsZXNbaV0ubm9kZVR5cGUpJiYodGhpcy5oYW5kbGVzW2ldPXQodGhpcy5oYW5kbGVzW2ldKSx0aGlzLl9vbih0aGlzLmhhbmRsZXNbaV0se21vdXNlZG93bjpyLl9tb3VzZURvd259KSksdGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvXih0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9uKSQvaSkmJihzPXQodGhpcy5oYW5kbGVzW2ldLHRoaXMuZWxlbWVudCksbz0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KGkpP3Mub3V0ZXJIZWlnaHQoKTpzLm91dGVyV2lkdGgoKSxuPVtcInBhZGRpbmdcIiwvbmV8bnd8bi8udGVzdChpKT9cIlRvcFwiOi9zZXxzd3xzLy50ZXN0KGkpP1wiQm90dG9tXCI6L15lJC8udGVzdChpKT9cIlJpZ2h0XCI6XCJMZWZ0XCJdLmpvaW4oXCJcIiksZS5jc3MobixvKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLl9oYW5kbGVzPXRoaXMuX2hhbmRsZXMuYWRkKHRoaXMuaGFuZGxlc1tpXSl9LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPXRoaXMuX2hhbmRsZXMuYWRkKHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIikpLHRoaXMuX2hhbmRsZXMuZGlzYWJsZVNlbGVjdGlvbigpLHRoaXMuX2hhbmRsZXMub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe3IucmVzaXppbmd8fCh0aGlzLmNsYXNzTmFtZSYmKG89dGhpcy5jbGFzc05hbWUubWF0Y2goL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSkpLHIuYXhpcz1vJiZvWzFdP29bMV06XCJzZVwiKX0pLGEuYXV0b0hpZGUmJih0aGlzLl9oYW5kbGVzLmhpZGUoKSx0aGlzLl9hZGRDbGFzcyhcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiKSl9LF9yZW1vdmVIYW5kbGVzOmZ1bmN0aW9uKCl7dGhpcy5faGFuZGxlcy5yZW1vdmUoKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgaSxzLG49ITE7Zm9yKGkgaW4gdGhpcy5oYW5kbGVzKXM9dCh0aGlzLmhhbmRsZXNbaV0pWzBdLChzPT09ZS50YXJnZXR8fHQuY29udGFpbnMocyxlLnRhcmdldCkpJiYobj0hMCk7cmV0dXJuIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmbn0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG89dGhpcy5vcHRpb25zLGE9dGhpcy5lbGVtZW50O3JldHVybiB0aGlzLnJlc2l6aW5nPSEwLHRoaXMuX3JlbmRlclByb3h5KCksaT10aGlzLl9udW0odGhpcy5oZWxwZXIuY3NzKFwibGVmdFwiKSkscz10aGlzLl9udW0odGhpcy5oZWxwZXIuY3NzKFwidG9wXCIpKSxvLmNvbnRhaW5tZW50JiYoaSs9dChvLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDAscys9dChvLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MCksdGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5wb3NpdGlvbj17bGVmdDppLHRvcDpzfSx0aGlzLnNpemU9dGhpcy5faGVscGVyP3t3aWR0aDp0aGlzLmhlbHBlci53aWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5oZWlnaHQoKX06e3dpZHRoOmEud2lkdGgoKSxoZWlnaHQ6YS5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFNpemU9dGhpcy5faGVscGVyP3t3aWR0aDphLm91dGVyV2lkdGgoKSxoZWlnaHQ6YS5vdXRlckhlaWdodCgpfTp7d2lkdGg6YS53aWR0aCgpLGhlaWdodDphLmhlaWdodCgpfSx0aGlzLnNpemVEaWZmPXt3aWR0aDphLm91dGVyV2lkdGgoKS1hLndpZHRoKCksaGVpZ2h0OmEub3V0ZXJIZWlnaHQoKS1hLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb249e2xlZnQ6ZS5wYWdlWCx0b3A6ZS5wYWdlWX0sdGhpcy5hc3BlY3RSYXRpbz1cIm51bWJlclwiPT10eXBlb2Ygby5hc3BlY3RSYXRpbz9vLmFzcGVjdFJhdGlvOnRoaXMub3JpZ2luYWxTaXplLndpZHRoL3RoaXMub3JpZ2luYWxTaXplLmhlaWdodHx8MSxuPXQoXCIudWktcmVzaXphYmxlLVwiK3RoaXMuYXhpcykuY3NzKFwiY3Vyc29yXCIpLHQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLFwiYXV0b1wiPT09bj90aGlzLmF4aXMrXCItcmVzaXplXCI6biksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGUtcmVzaXppbmdcIiksdGhpcy5fcHJvcGFnYXRlKFwic3RhcnRcIixlKSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgaSxzLG49dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sbz10aGlzLmF4aXMsYT1lLnBhZ2VYLW4ubGVmdHx8MCxyPWUucGFnZVktbi50b3B8fDAsaD10aGlzLl9jaGFuZ2Vbb107cmV0dXJuIHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksaD8oaT1oLmFwcGx5KHRoaXMsW2UsYSxyXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXMoZS5zaGlmdEtleSksKHRoaXMuX2FzcGVjdFJhdGlvfHxlLnNoaWZ0S2V5KSYmKGk9dGhpcy5fdXBkYXRlUmF0aW8oaSxlKSksaT10aGlzLl9yZXNwZWN0U2l6ZShpLGUpLHRoaXMuX3VwZGF0ZUNhY2hlKGkpLHRoaXMuX3Byb3BhZ2F0ZShcInJlc2l6ZVwiLGUpLHM9dGhpcy5fYXBwbHlDaGFuZ2VzKCksIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCksdC5pc0VtcHR5T2JqZWN0KHMpfHwodGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKSx0aGlzLl90cmlnZ2VyKFwicmVzaXplXCIsZSx0aGlzLnVpKCkpLHRoaXMuX2FwcGx5Q2hhbmdlcygpKSwhMSk6ITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7dGhpcy5yZXNpemluZz0hMTt2YXIgaSxzLG4sbyxhLHIsaCxsPXRoaXMub3B0aW9ucyxjPXRoaXM7cmV0dXJuIHRoaXMuX2hlbHBlciYmKGk9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxzPWkubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGlbMF0ubm9kZU5hbWUpLG49cyYmdGhpcy5faGFzU2Nyb2xsKGlbMF0sXCJsZWZ0XCIpPzA6Yy5zaXplRGlmZi5oZWlnaHQsbz1zPzA6Yy5zaXplRGlmZi53aWR0aCxhPXt3aWR0aDpjLmhlbHBlci53aWR0aCgpLW8saGVpZ2h0OmMuaGVscGVyLmhlaWdodCgpLW59LHI9cGFyc2VGbG9hdChjLmVsZW1lbnQuY3NzKFwibGVmdFwiKSkrKGMucG9zaXRpb24ubGVmdC1jLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsaD1wYXJzZUZsb2F0KGMuZWxlbWVudC5jc3MoXCJ0b3BcIikpKyhjLnBvc2l0aW9uLnRvcC1jLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbCxsLmFuaW1hdGV8fHRoaXMuZWxlbWVudC5jc3ModC5leHRlbmQoYSx7dG9wOmgsbGVmdDpyfSkpLGMuaGVscGVyLmhlaWdodChjLnNpemUuaGVpZ2h0KSxjLmhlbHBlci53aWR0aChjLnNpemUud2lkdGgpLHRoaXMuX2hlbHBlciYmIWwuYW5pbWF0ZSYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIsXCJhdXRvXCIpLHRoaXMuX3JlbW92ZUNsYXNzKFwidWktcmVzaXphYmxlLXJlc2l6aW5nXCIpLHRoaXMuX3Byb3BhZ2F0ZShcInN0b3BcIixlKSx0aGlzLl9oZWxwZXImJnRoaXMuaGVscGVyLnJlbW92ZSgpLCExfSxfdXBkYXRlUHJldlByb3BlcnRpZXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZQb3NpdGlvbj17dG9wOnRoaXMucG9zaXRpb24udG9wLGxlZnQ6dGhpcy5wb3NpdGlvbi5sZWZ0fSx0aGlzLnByZXZTaXplPXt3aWR0aDp0aGlzLnNpemUud2lkdGgsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHR9fSxfYXBwbHlDaGFuZ2VzOmZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRoaXMucG9zaXRpb24udG9wIT09dGhpcy5wcmV2UG9zaXRpb24udG9wJiYodC50b3A9dGhpcy5wb3NpdGlvbi50b3ArXCJweFwiKSx0aGlzLnBvc2l0aW9uLmxlZnQhPT10aGlzLnByZXZQb3NpdGlvbi5sZWZ0JiYodC5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIpLHRoaXMuc2l6ZS53aWR0aCE9PXRoaXMucHJldlNpemUud2lkdGgmJih0LndpZHRoPXRoaXMuc2l6ZS53aWR0aCtcInB4XCIpLHRoaXMuc2l6ZS5oZWlnaHQhPT10aGlzLnByZXZTaXplLmhlaWdodCYmKHQuaGVpZ2h0PXRoaXMuc2l6ZS5oZWlnaHQrXCJweFwiKSx0aGlzLmhlbHBlci5jc3ModCksdH0sX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlLGkscyxuLG8sYT10aGlzLm9wdGlvbnM7bz17bWluV2lkdGg6dGhpcy5faXNOdW1iZXIoYS5taW5XaWR0aCk/YS5taW5XaWR0aDowLG1heFdpZHRoOnRoaXMuX2lzTnVtYmVyKGEubWF4V2lkdGgpP2EubWF4V2lkdGg6MS8wLG1pbkhlaWdodDp0aGlzLl9pc051bWJlcihhLm1pbkhlaWdodCk/YS5taW5IZWlnaHQ6MCxtYXhIZWlnaHQ6dGhpcy5faXNOdW1iZXIoYS5tYXhIZWlnaHQpP2EubWF4SGVpZ2h0OjEvMH0sKHRoaXMuX2FzcGVjdFJhdGlvfHx0KSYmKGU9by5taW5IZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxzPW8ubWluV2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxpPW8ubWF4SGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8sbj1vLm1heFdpZHRoL3RoaXMuYXNwZWN0UmF0aW8sZT5vLm1pbldpZHRoJiYoby5taW5XaWR0aD1lKSxzPm8ubWluSGVpZ2h0JiYoby5taW5IZWlnaHQ9cyksby5tYXhXaWR0aD5pJiYoby5tYXhXaWR0aD1pKSxvLm1heEhlaWdodD5uJiYoby5tYXhIZWlnaHQ9bikpLHRoaXMuX3ZCb3VuZGFyaWVzPW99LF91cGRhdGVDYWNoZTpmdW5jdGlvbih0KXt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLl9pc051bWJlcih0LmxlZnQpJiYodGhpcy5wb3NpdGlvbi5sZWZ0PXQubGVmdCksdGhpcy5faXNOdW1iZXIodC50b3ApJiYodGhpcy5wb3NpdGlvbi50b3A9dC50b3ApLHRoaXMuX2lzTnVtYmVyKHQuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9dC5oZWlnaHQpLHRoaXMuX2lzTnVtYmVyKHQud2lkdGgpJiYodGhpcy5zaXplLndpZHRoPXQud2lkdGgpfSxfdXBkYXRlUmF0aW86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wb3NpdGlvbixpPXRoaXMuc2l6ZSxzPXRoaXMuYXhpcztyZXR1cm4gdGhpcy5faXNOdW1iZXIodC5oZWlnaHQpP3Qud2lkdGg9dC5oZWlnaHQqdGhpcy5hc3BlY3RSYXRpbzp0aGlzLl9pc051bWJlcih0LndpZHRoKSYmKHQuaGVpZ2h0PXQud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksXCJzd1wiPT09cyYmKHQubGVmdD1lLmxlZnQrKGkud2lkdGgtdC53aWR0aCksdC50b3A9bnVsbCksXCJud1wiPT09cyYmKHQudG9wPWUudG9wKyhpLmhlaWdodC10LmhlaWdodCksdC5sZWZ0PWUubGVmdCsoaS53aWR0aC10LndpZHRoKSksdH0sX3Jlc3BlY3RTaXplOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZCb3VuZGFyaWVzLGk9dGhpcy5heGlzLHM9dGhpcy5faXNOdW1iZXIodC53aWR0aCkmJmUubWF4V2lkdGgmJmUubWF4V2lkdGg8dC53aWR0aCxuPXRoaXMuX2lzTnVtYmVyKHQuaGVpZ2h0KSYmZS5tYXhIZWlnaHQmJmUubWF4SGVpZ2h0PHQuaGVpZ2h0LG89dGhpcy5faXNOdW1iZXIodC53aWR0aCkmJmUubWluV2lkdGgmJmUubWluV2lkdGg+dC53aWR0aCxhPXRoaXMuX2lzTnVtYmVyKHQuaGVpZ2h0KSYmZS5taW5IZWlnaHQmJmUubWluSGVpZ2h0PnQuaGVpZ2h0LHI9dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsaD10aGlzLm9yaWdpbmFsUG9zaXRpb24udG9wK3RoaXMub3JpZ2luYWxTaXplLmhlaWdodCxsPS9zd3xud3x3Ly50ZXN0KGkpLGM9L253fG5lfG4vLnRlc3QoaSk7cmV0dXJuIG8mJih0LndpZHRoPWUubWluV2lkdGgpLGEmJih0LmhlaWdodD1lLm1pbkhlaWdodCkscyYmKHQud2lkdGg9ZS5tYXhXaWR0aCksbiYmKHQuaGVpZ2h0PWUubWF4SGVpZ2h0KSxvJiZsJiYodC5sZWZ0PXItZS5taW5XaWR0aCkscyYmbCYmKHQubGVmdD1yLWUubWF4V2lkdGgpLGEmJmMmJih0LnRvcD1oLWUubWluSGVpZ2h0KSxuJiZjJiYodC50b3A9aC1lLm1heEhlaWdodCksdC53aWR0aHx8dC5oZWlnaHR8fHQubGVmdHx8IXQudG9wP3Qud2lkdGh8fHQuaGVpZ2h0fHx0LnRvcHx8IXQubGVmdHx8KHQubGVmdD1udWxsKTp0LnRvcD1udWxsLHR9LF9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT1bXSxzPVt0LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLHQuY3NzKFwiYm9yZGVyUmlnaHRXaWR0aFwiKSx0LmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLHQuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpXSxuPVt0LmNzcyhcInBhZGRpbmdUb3BcIiksdC5jc3MoXCJwYWRkaW5nUmlnaHRcIiksdC5jc3MoXCJwYWRkaW5nQm90dG9tXCIpLHQuY3NzKFwicGFkZGluZ0xlZnRcIildOzQ+ZTtlKyspaVtlXT1wYXJzZUZsb2F0KHNbZV0pfHwwLGlbZV0rPXBhcnNlRmxvYXQobltlXSl8fDA7cmV0dXJue2hlaWdodDppWzBdK2lbMl0sd2lkdGg6aVsxXStpWzNdfX0sX3Byb3BvcnRpb25hbGx5UmVzaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgpZm9yKHZhciB0LGU9MCxpPXRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQ7dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGg+ZTtlKyspdD10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzW2VdLHRoaXMub3V0ZXJEaW1lbnNpb25zfHwodGhpcy5vdXRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zKHQpKSx0LmNzcyh7aGVpZ2h0OmkuaGVpZ2h0KCktdGhpcy5vdXRlckRpbWVuc2lvbnMuaGVpZ2h0fHwwLHdpZHRoOmkud2lkdGgoKS10aGlzLm91dGVyRGltZW5zaW9ucy53aWR0aHx8MH0pfSxfcmVuZGVyUHJveHk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQsaT10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50T2Zmc2V0PWUub2Zmc2V0KCksdGhpcy5faGVscGVyPyh0aGlzLmhlbHBlcj10aGlzLmhlbHBlcnx8dChcIjxkaXYgc3R5bGU9J292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcix0aGlzLl9oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkscG9zaXRpb246XCJhYnNvbHV0ZVwiLGxlZnQ6dGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQrXCJweFwiLHRvcDp0aGlzLmVsZW1lbnRPZmZzZXQudG9wK1wicHhcIix6SW5kZXg6KytpLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKFwiYm9keVwiKS5kaXNhYmxlU2VsZWN0aW9uKCkpOnRoaXMuaGVscGVyPXRoaXMuZWxlbWVudH0sX2NoYW5nZTp7ZTpmdW5jdGlvbih0LGUpe3JldHVybnt3aWR0aDp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCtlfX0sdzpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMub3JpZ2luYWxTaXplLHM9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybntsZWZ0OnMubGVmdCtlLHdpZHRoOmkud2lkdGgtZX19LG46ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXMub3JpZ2luYWxTaXplLG49dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybnt0b3A6bi50b3AraSxoZWlnaHQ6cy5oZWlnaHQtaX19LHM6ZnVuY3Rpb24odCxlLGkpe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K2l9fSxzZTpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtlLGksc10pKX0sc3c6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbZSxpLHNdKSl9LG5lOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW2UsaSxzXSkpfSxudzpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtlLGksc10pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24oZSxpKXt0LnVpLnBsdWdpbi5jYWxsKHRoaXMsZSxbaSx0aGlzLnVpKCldKSxcInJlc2l6ZVwiIT09ZSYmdGhpcy5fdHJpZ2dlcihlLGksdGhpcy51aSgpKX0scGx1Z2luczp7fSx1aTpmdW5jdGlvbigpe3JldHVybntvcmlnaW5hbEVsZW1lbnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQsZWxlbWVudDp0aGlzLmVsZW1lbnQsaGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sc2l6ZTp0aGlzLnNpemUsb3JpZ2luYWxTaXplOnRoaXMub3JpZ2luYWxTaXplLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9ufX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImFuaW1hdGVcIix7c3RvcDpmdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHM9aS5vcHRpb25zLG49aS5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxvPW4ubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KG5bMF0ubm9kZU5hbWUpLGE9byYmaS5faGFzU2Nyb2xsKG5bMF0sXCJsZWZ0XCIpPzA6aS5zaXplRGlmZi5oZWlnaHQscj1vPzA6aS5zaXplRGlmZi53aWR0aCxoPXt3aWR0aDppLnNpemUud2lkdGgtcixoZWlnaHQ6aS5zaXplLmhlaWdodC1hfSxsPXBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcImxlZnRcIikpKyhpLnBvc2l0aW9uLmxlZnQtaS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGM9cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwidG9wXCIpKSsoaS5wb3NpdGlvbi50b3AtaS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7aS5lbGVtZW50LmFuaW1hdGUodC5leHRlbmQoaCxjJiZsP3t0b3A6YyxsZWZ0Omx9Ont9KSx7ZHVyYXRpb246cy5hbmltYXRlRHVyYXRpb24sZWFzaW5nOnMuYW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIHM9e3dpZHRoOnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcIndpZHRoXCIpKSxoZWlnaHQ6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwiaGVpZ2h0XCIpKSx0b3A6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwidG9wXCIpKSxsZWZ0OnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcImxlZnRcIikpfTtuJiZuLmxlbmd0aCYmdChuWzBdKS5jc3Moe3dpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0fSksaS5fdXBkYXRlQ2FjaGUocyksaS5fcHJvcGFnYXRlKFwicmVzaXplXCIsZSl9fSl9fSksdC51aS5wbHVnaW4uYWRkKFwicmVzaXphYmxlXCIsXCJjb250YWlubWVudFwiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlLGkscyxuLG8sYSxyLGg9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxsPWgub3B0aW9ucyxjPWguZWxlbWVudCx1PWwuY29udGFpbm1lbnQsZD11IGluc3RhbmNlb2YgdD91LmdldCgwKTovcGFyZW50Ly50ZXN0KHUpP2MucGFyZW50KCkuZ2V0KDApOnU7ZCYmKGguY29udGFpbmVyRWxlbWVudD10KGQpLC9kb2N1bWVudC8udGVzdCh1KXx8dT09PWRvY3VtZW50PyhoLmNvbnRhaW5lck9mZnNldD17bGVmdDowLHRvcDowfSxoLmNvbnRhaW5lclBvc2l0aW9uPXtsZWZ0OjAsdG9wOjB9LGgucGFyZW50RGF0YT17ZWxlbWVudDp0KGRvY3VtZW50KSxsZWZ0OjAsdG9wOjAsd2lkdGg6dChkb2N1bWVudCkud2lkdGgoKSxoZWlnaHQ6dChkb2N1bWVudCkuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHR9KTooZT10KGQpLGk9W10sdChbXCJUb3BcIixcIlJpZ2h0XCIsXCJMZWZ0XCIsXCJCb3R0b21cIl0pLmVhY2goZnVuY3Rpb24odCxzKXtpW3RdPWguX251bShlLmNzcyhcInBhZGRpbmdcIitzKSl9KSxoLmNvbnRhaW5lck9mZnNldD1lLm9mZnNldCgpLGguY29udGFpbmVyUG9zaXRpb249ZS5wb3NpdGlvbigpLGguY29udGFpbmVyU2l6ZT17aGVpZ2h0OmUuaW5uZXJIZWlnaHQoKS1pWzNdLHdpZHRoOmUuaW5uZXJXaWR0aCgpLWlbMV19LHM9aC5jb250YWluZXJPZmZzZXQsbj1oLmNvbnRhaW5lclNpemUuaGVpZ2h0LG89aC5jb250YWluZXJTaXplLndpZHRoLGE9aC5faGFzU2Nyb2xsKGQsXCJsZWZ0XCIpP2Quc2Nyb2xsV2lkdGg6byxyPWguX2hhc1Njcm9sbChkKT9kLnNjcm9sbEhlaWdodDpuLGgucGFyZW50RGF0YT17ZWxlbWVudDpkLGxlZnQ6cy5sZWZ0LHRvcDpzLnRvcCx3aWR0aDphLGhlaWdodDpyfSkpfSxyZXNpemU6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHI9YS5vcHRpb25zLGg9YS5jb250YWluZXJPZmZzZXQsbD1hLnBvc2l0aW9uLGM9YS5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXksdT17dG9wOjAsbGVmdDowfSxkPWEuY29udGFpbmVyRWxlbWVudCxwPSEwO2RbMF0hPT1kb2N1bWVudCYmL3N0YXRpYy8udGVzdChkLmNzcyhcInBvc2l0aW9uXCIpKSYmKHU9aCksbC5sZWZ0PChhLl9oZWxwZXI/aC5sZWZ0OjApJiYoYS5zaXplLndpZHRoPWEuc2l6ZS53aWR0aCsoYS5faGVscGVyP2EucG9zaXRpb24ubGVmdC1oLmxlZnQ6YS5wb3NpdGlvbi5sZWZ0LXUubGVmdCksYyYmKGEuc2l6ZS5oZWlnaHQ9YS5zaXplLndpZHRoL2EuYXNwZWN0UmF0aW8scD0hMSksYS5wb3NpdGlvbi5sZWZ0PXIuaGVscGVyP2gubGVmdDowKSxsLnRvcDwoYS5faGVscGVyP2gudG9wOjApJiYoYS5zaXplLmhlaWdodD1hLnNpemUuaGVpZ2h0KyhhLl9oZWxwZXI/YS5wb3NpdGlvbi50b3AtaC50b3A6YS5wb3NpdGlvbi50b3ApLGMmJihhLnNpemUud2lkdGg9YS5zaXplLmhlaWdodCphLmFzcGVjdFJhdGlvLHA9ITEpLGEucG9zaXRpb24udG9wPWEuX2hlbHBlcj9oLnRvcDowKSxuPWEuY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PT1hLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLG89L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KGEuY29udGFpbmVyRWxlbWVudC5jc3MoXCJwb3NpdGlvblwiKSksbiYmbz8oYS5vZmZzZXQubGVmdD1hLnBhcmVudERhdGEubGVmdCthLnBvc2l0aW9uLmxlZnQsYS5vZmZzZXQudG9wPWEucGFyZW50RGF0YS50b3ArYS5wb3NpdGlvbi50b3ApOihhLm9mZnNldC5sZWZ0PWEuZWxlbWVudC5vZmZzZXQoKS5sZWZ0LGEub2Zmc2V0LnRvcD1hLmVsZW1lbnQub2Zmc2V0KCkudG9wKSxpPU1hdGguYWJzKGEuc2l6ZURpZmYud2lkdGgrKGEuX2hlbHBlcj9hLm9mZnNldC5sZWZ0LXUubGVmdDphLm9mZnNldC5sZWZ0LWgubGVmdCkpLHM9TWF0aC5hYnMoYS5zaXplRGlmZi5oZWlnaHQrKGEuX2hlbHBlcj9hLm9mZnNldC50b3AtdS50b3A6YS5vZmZzZXQudG9wLWgudG9wKSksaSthLnNpemUud2lkdGg+PWEucGFyZW50RGF0YS53aWR0aCYmKGEuc2l6ZS53aWR0aD1hLnBhcmVudERhdGEud2lkdGgtaSxjJiYoYS5zaXplLmhlaWdodD1hLnNpemUud2lkdGgvYS5hc3BlY3RSYXRpbyxwPSExKSkscythLnNpemUuaGVpZ2h0Pj1hLnBhcmVudERhdGEuaGVpZ2h0JiYoYS5zaXplLmhlaWdodD1hLnBhcmVudERhdGEuaGVpZ2h0LXMsYyYmKGEuc2l6ZS53aWR0aD1hLnNpemUuaGVpZ2h0KmEuYXNwZWN0UmF0aW8scD0hMSkpLHB8fChhLnBvc2l0aW9uLmxlZnQ9YS5wcmV2UG9zaXRpb24ubGVmdCxhLnBvc2l0aW9uLnRvcD1hLnByZXZQb3NpdGlvbi50b3AsYS5zaXplLndpZHRoPWEucHJldlNpemUud2lkdGgsYS5zaXplLmhlaWdodD1hLnByZXZTaXplLmhlaWdodCl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLGk9ZS5vcHRpb25zLHM9ZS5jb250YWluZXJPZmZzZXQsbj1lLmNvbnRhaW5lclBvc2l0aW9uLG89ZS5jb250YWluZXJFbGVtZW50LGE9dChlLmhlbHBlcikscj1hLm9mZnNldCgpLGg9YS5vdXRlcldpZHRoKCktZS5zaXplRGlmZi53aWR0aCxsPWEub3V0ZXJIZWlnaHQoKS1lLnNpemVEaWZmLmhlaWdodDtlLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9yZWxhdGl2ZS8udGVzdChvLmNzcyhcInBvc2l0aW9uXCIpKSYmdCh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pLGUuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3N0YXRpYy8udGVzdChvLmNzcyhcInBvc2l0aW9uXCIpKSYmdCh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiYWxzb1Jlc2l6ZVwiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksaT1lLm9wdGlvbnM7dChpLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplXCIse3dpZHRoOnBhcnNlRmxvYXQoZS53aWR0aCgpKSxoZWlnaHQ6cGFyc2VGbG9hdChlLmhlaWdodCgpKSxsZWZ0OnBhcnNlRmxvYXQoZS5jc3MoXCJsZWZ0XCIpKSx0b3A6cGFyc2VGbG9hdChlLmNzcyhcInRvcFwiKSl9KX0pfSxyZXNpemU6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLG49cy5vcHRpb25zLG89cy5vcmlnaW5hbFNpemUsYT1zLm9yaWdpbmFsUG9zaXRpb24scj17aGVpZ2h0OnMuc2l6ZS5oZWlnaHQtby5oZWlnaHR8fDAsd2lkdGg6cy5zaXplLndpZHRoLW8ud2lkdGh8fDAsdG9wOnMucG9zaXRpb24udG9wLWEudG9wfHwwLGxlZnQ6cy5wb3NpdGlvbi5sZWZ0LWEubGVmdHx8MH07dChuLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLHM9dCh0aGlzKS5kYXRhKFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIiksbj17fSxvPWUucGFyZW50cyhpLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1tcIndpZHRoXCIsXCJoZWlnaHRcIl06W1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCJdO3QuZWFjaChvLGZ1bmN0aW9uKHQsZSl7dmFyIGk9KHNbZV18fDApKyhyW2VdfHwwKTtpJiZpPj0wJiYobltlXT1pfHxudWxsKX0pLGUuY3NzKG4pfSl9LHN0b3A6ZnVuY3Rpb24oKXt0KHRoaXMpLnJlbW92ZURhdGEoXCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZVwiKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImdob3N0XCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxpPWUuc2l6ZTtlLmdob3N0PWUub3JpZ2luYWxFbGVtZW50LmNsb25lKCksZS5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6XCJibG9ja1wiLHBvc2l0aW9uOlwicmVsYXRpdmVcIixoZWlnaHQ6aS5oZWlnaHQsd2lkdGg6aS53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KSxlLl9hZGRDbGFzcyhlLmdob3N0LFwidWktcmVzaXphYmxlLWdob3N0XCIpLHQudWlCYWNrQ29tcGF0IT09ITEmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm9wdGlvbnMuZ2hvc3QmJmUuZ2hvc3QuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmdob3N0KSxlLmdob3N0LmFwcGVuZFRvKGUuaGVscGVyKX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKTtlLmdob3N0JiZlLmdob3N0LmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLGhlaWdodDplLnNpemUuaGVpZ2h0LHdpZHRoOmUuc2l6ZS53aWR0aH0pfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKTtlLmdob3N0JiZlLmhlbHBlciYmZS5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKGUuZ2hvc3QuZ2V0KDApKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImdyaWRcIix7cmVzaXplOmZ1bmN0aW9uKCl7dmFyIGUsaT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHM9aS5vcHRpb25zLG49aS5zaXplLG89aS5vcmlnaW5hbFNpemUsYT1pLm9yaWdpbmFsUG9zaXRpb24scj1pLmF4aXMsaD1cIm51bWJlclwiPT10eXBlb2Ygcy5ncmlkP1tzLmdyaWQscy5ncmlkXTpzLmdyaWQsbD1oWzBdfHwxLGM9aFsxXXx8MSx1PU1hdGgucm91bmQoKG4ud2lkdGgtby53aWR0aCkvbCkqbCxkPU1hdGgucm91bmQoKG4uaGVpZ2h0LW8uaGVpZ2h0KS9jKSpjLHA9by53aWR0aCt1LGY9by5oZWlnaHQrZCxnPXMubWF4V2lkdGgmJnA+cy5tYXhXaWR0aCxtPXMubWF4SGVpZ2h0JiZmPnMubWF4SGVpZ2h0LF89cy5taW5XaWR0aCYmcy5taW5XaWR0aD5wLHY9cy5taW5IZWlnaHQmJnMubWluSGVpZ2h0PmY7cy5ncmlkPWgsXyYmKHArPWwpLHYmJihmKz1jKSxnJiYocC09bCksbSYmKGYtPWMpLC9eKHNlfHN8ZSkkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYpOi9eKG5lKSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1hLnRvcC1kKTovXihzdykkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi5sZWZ0PWEubGVmdC11KTooKDA+PWYtY3x8MD49cC1sKSYmKGU9aS5fZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zKHRoaXMpKSxmLWM+MD8oaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPWEudG9wLWQpOihmPWMtZS5oZWlnaHQsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPWEudG9wK28uaGVpZ2h0LWYpLHAtbD4wPyhpLnNpemUud2lkdGg9cCxpLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0LXUpOihwPWwtZS53aWR0aCxpLnNpemUud2lkdGg9cCxpLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0K28ud2lkdGgtcCkpfX0pLHQudWkucmVzaXphYmxlLHQud2lkZ2V0KFwidWkuZGlhbG9nXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOnthcHBlbmRUbzpcImJvZHlcIixhdXRvT3BlbjohMCxidXR0b25zOltdLGNsYXNzZXM6e1widWktZGlhbG9nXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1kaWFsb2ctdGl0bGViYXJcIjpcInVpLWNvcm5lci1hbGxcIn0sY2xvc2VPbkVzY2FwZTohMCxjbG9zZVRleHQ6XCJDbG9zZVwiLGRyYWdnYWJsZTohMCxoaWRlOm51bGwsaGVpZ2h0OlwiYXV0b1wiLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjE1MCxtaW5XaWR0aDoxNTAsbW9kYWw6ITEscG9zaXRpb246e215OlwiY2VudGVyXCIsYXQ6XCJjZW50ZXJcIixvZjp3aW5kb3csY29sbGlzaW9uOlwiZml0XCIsdXNpbmc6ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKS5jc3MoZSkub2Zmc2V0KCkudG9wOzA+aSYmdCh0aGlzKS5jc3MoXCJ0b3BcIixlLnRvcC1pKX19LHJlc2l6YWJsZTohMCxzaG93Om51bGwsdGl0bGU6bnVsbCx3aWR0aDozMDAsYmVmb3JlQ2xvc2U6bnVsbCxjbG9zZTpudWxsLGRyYWc6bnVsbCxkcmFnU3RhcnQ6bnVsbCxkcmFnU3RvcDpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc2l6ZTpudWxsLHJlc2l6ZVN0YXJ0Om51bGwscmVzaXplU3RvcDpudWxsfSxzaXplUmVsYXRlZE9wdGlvbnM6e2J1dHRvbnM6ITAsaGVpZ2h0OiEwLG1heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITAsd2lkdGg6ITB9LHJlc2l6YWJsZVJlbGF0ZWRPcHRpb25zOnttYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcmlnaW5hbENzcz17ZGlzcGxheTp0aGlzLmVsZW1lbnRbMF0uc3R5bGUuZGlzcGxheSx3aWR0aDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUud2lkdGgsbWluSGVpZ2h0OnRoaXMuZWxlbWVudFswXS5zdHlsZS5taW5IZWlnaHQsbWF4SGVpZ2h0OnRoaXMuZWxlbWVudFswXS5zdHlsZS5tYXhIZWlnaHQsaGVpZ2h0OnRoaXMuZWxlbWVudFswXS5zdHlsZS5oZWlnaHR9LHRoaXMub3JpZ2luYWxQb3NpdGlvbj17cGFyZW50OnRoaXMuZWxlbWVudC5wYXJlbnQoKSxpbmRleDp0aGlzLmVsZW1lbnQucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleCh0aGlzLmVsZW1lbnQpfSx0aGlzLm9yaWdpbmFsVGl0bGU9dGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiKSxudWxsPT10aGlzLm9wdGlvbnMudGl0bGUmJm51bGwhPXRoaXMub3JpZ2luYWxUaXRsZSYmKHRoaXMub3B0aW9ucy50aXRsZT10aGlzLm9yaWdpbmFsVGl0bGUpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmKHRoaXMub3B0aW9ucy5kaXNhYmxlZD0hMSksdGhpcy5fY3JlYXRlV3JhcHBlcigpLHRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cihcInRpdGxlXCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHRoaXMuX2FkZENsYXNzKFwidWktZGlhbG9nLWNvbnRlbnRcIixcInVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCksdGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJnQuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCksdGhpcy5vcHRpb25zLnJlc2l6YWJsZSYmdC5mbi5yZXNpemFibGUmJnRoaXMuX21ha2VSZXNpemFibGUoKSx0aGlzLl9pc09wZW49ITEsdGhpcy5fdHJhY2tGb2N1cygpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdXRvT3BlbiYmdGhpcy5vcGVuKCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gZSYmKGUuanF1ZXJ5fHxlLm5vZGVUeXBlKT90KGUpOnRoaXMuZG9jdW1lbnQuZmluZChlfHxcImJvZHlcIikuZXEoMCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLm9yaWdpbmFsUG9zaXRpb247dGhpcy5fdW50cmFja0luc3RhbmNlKCksdGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKS5jc3ModGhpcy5vcmlnaW5hbENzcykuZGV0YWNoKCksdGhpcy51aURpYWxvZy5yZW1vdmUoKSx0aGlzLm9yaWdpbmFsVGl0bGUmJnRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIix0aGlzLm9yaWdpbmFsVGl0bGUpLHQ9ZS5wYXJlbnQuY2hpbGRyZW4oKS5lcShlLmluZGV4KSx0Lmxlbmd0aCYmdFswXSE9PXRoaXMuZWxlbWVudFswXT90LmJlZm9yZSh0aGlzLmVsZW1lbnQpOmUucGFyZW50LmFwcGVuZCh0aGlzLmVsZW1lbnQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aURpYWxvZ1xyXG59LGRpc2FibGU6dC5ub29wLGVuYWJsZTp0Lm5vb3AsY2xvc2U6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpczt0aGlzLl9pc09wZW4mJnRoaXMuX3RyaWdnZXIoXCJiZWZvcmVDbG9zZVwiLGUpIT09ITEmJih0aGlzLl9pc09wZW49ITEsdGhpcy5fZm9jdXNlZEVsZW1lbnQ9bnVsbCx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMub3BlbmVyLmZpbHRlcihcIjpmb2N1c2FibGVcIikudHJpZ2dlcihcImZvY3VzXCIpLmxlbmd0aHx8dC51aS5zYWZlQmx1cih0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKSx0aGlzLl9oaWRlKHRoaXMudWlEaWFsb2csdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtpLl90cmlnZ2VyKFwiY2xvc2VcIixlKX0pKX0saXNPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzT3Blbn0sbW92ZVRvVG9wOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZVRvVG9wKCl9LF9tb3ZlVG9Ub3A6ZnVuY3Rpb24oZSxpKXt2YXIgcz0hMSxuPXRoaXMudWlEaWFsb2cuc2libGluZ3MoXCIudWktZnJvbnQ6dmlzaWJsZVwiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4rdCh0aGlzKS5jc3MoXCJ6LWluZGV4XCIpfSkuZ2V0KCksbz1NYXRoLm1heC5hcHBseShudWxsLG4pO3JldHVybiBvPj0rdGhpcy51aURpYWxvZy5jc3MoXCJ6LWluZGV4XCIpJiYodGhpcy51aURpYWxvZy5jc3MoXCJ6LWluZGV4XCIsbysxKSxzPSEwKSxzJiYhaSYmdGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsZSksc30sb3BlbjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2lzT3Blbj8odGhpcy5fbW92ZVRvVG9wKCkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKSx2b2lkIDApOih0aGlzLl9pc09wZW49ITAsdGhpcy5vcGVuZXI9dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKSx0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9jcmVhdGVPdmVybGF5KCksdGhpcy5fbW92ZVRvVG9wKG51bGwsITApLHRoaXMub3ZlcmxheSYmdGhpcy5vdmVybGF5LmNzcyhcInotaW5kZXhcIix0aGlzLnVpRGlhbG9nLmNzcyhcInotaW5kZXhcIiktMSksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7ZS5fZm9jdXNUYWJiYWJsZSgpLGUuX3RyaWdnZXIoXCJmb2N1c1wiKX0pLHRoaXMuX21ha2VGb2N1c1RhcmdldCgpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIpLHZvaWQgMCl9LF9mb2N1c1RhYmJhYmxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZm9jdXNlZEVsZW1lbnQ7dHx8KHQ9dGhpcy5lbGVtZW50LmZpbmQoXCJbYXV0b2ZvY3VzXVwiKSksdC5sZW5ndGh8fCh0PXRoaXMuZWxlbWVudC5maW5kKFwiOnRhYmJhYmxlXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZChcIjp0YWJiYWJsZVwiKSksdC5sZW5ndGh8fCh0PXRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLmZpbHRlcihcIjp0YWJiYWJsZVwiKSksdC5sZW5ndGh8fCh0PXRoaXMudWlEaWFsb2cpLHQuZXEoMCkudHJpZ2dlcihcImZvY3VzXCIpfSxfa2VlcEZvY3VzOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXt2YXIgZT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pLGk9dGhpcy51aURpYWxvZ1swXT09PWV8fHQuY29udGFpbnModGhpcy51aURpYWxvZ1swXSxlKTtpfHx0aGlzLl9mb2N1c1RhYmJhYmxlKCl9ZS5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLl9kZWxheShpKX0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLnVpRGlhbG9nPXQoXCI8ZGl2PlwiKS5oaWRlKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZTpcImRpYWxvZ1wifSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZyxcInVpLWRpYWxvZ1wiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWZyb250XCIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2cse2tleWRvd246ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLmNsb3NlT25Fc2NhcGUmJiFlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZlLmtleUNvZGUmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5FU0NBUEUpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKGUpLHZvaWQgMDtpZihlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuVEFCJiYhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGk9dGhpcy51aURpYWxvZy5maW5kKFwiOnRhYmJhYmxlXCIpLHM9aS5maWx0ZXIoXCI6Zmlyc3RcIiksbj1pLmZpbHRlcihcIjpsYXN0XCIpO2UudGFyZ2V0IT09blswXSYmZS50YXJnZXQhPT10aGlzLnVpRGlhbG9nWzBdfHxlLnNoaWZ0S2V5P2UudGFyZ2V0IT09c1swXSYmZS50YXJnZXQhPT10aGlzLnVpRGlhbG9nWzBdfHwhZS5zaGlmdEtleXx8KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bi50cmlnZ2VyKFwiZm9jdXNcIil9KSxlLnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9kZWxheShmdW5jdGlvbigpe3MudHJpZ2dlcihcImZvY3VzXCIpfSksZS5wcmV2ZW50RGVmYXVsdCgpKX19LG1vdXNlZG93bjpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlVG9Ub3AodCkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKX19KSx0aGlzLmVsZW1lbnQuZmluZChcIlthcmlhLWRlc2NyaWJlZGJ5XVwiKS5sZW5ndGh8fHRoaXMudWlEaWFsb2cuYXR0cih7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpfSl9LF9jcmVhdGVUaXRsZWJhcjpmdW5jdGlvbigpe3ZhciBlO3RoaXMudWlEaWFsb2dUaXRsZWJhcj10KFwiPGRpdj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZ1RpdGxlYmFyLFwidWktZGlhbG9nLXRpdGxlYmFyXCIsXCJ1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeFwiKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXIse21vdXNlZG93bjpmdW5jdGlvbihlKXt0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiKXx8dGhpcy51aURpYWxvZy50cmlnZ2VyKFwiZm9jdXNcIil9fSksdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2U9dChcIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj5cIikuYnV0dG9uKHtsYWJlbDp0KFwiPGE+XCIpLnRleHQodGhpcy5vcHRpb25zLmNsb3NlVGV4dCkuaHRtbCgpLGljb246XCJ1aS1pY29uLWNsb3NldGhpY2tcIixzaG93TGFiZWw6ITF9KS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLFwidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLHtjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSh0KX19KSxlPXQoXCI8c3Bhbj5cIikudW5pcXVlSWQoKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZ1RpdGxlYmFyKSx0aGlzLl9hZGRDbGFzcyhlLFwidWktZGlhbG9nLXRpdGxlXCIpLHRoaXMuX3RpdGxlKGUpLHRoaXMudWlEaWFsb2dUaXRsZWJhci5wcmVwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy51aURpYWxvZy5hdHRyKHtcImFyaWEtbGFiZWxsZWRieVwiOmUuYXR0cihcImlkXCIpfSl9LF90aXRsZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMudGl0bGU/dC50ZXh0KHRoaXMub3B0aW9ucy50aXRsZSk6dC5odG1sKFwiJiMxNjA7XCIpfSxfY3JlYXRlQnV0dG9uUGFuZTpmdW5jdGlvbigpe3RoaXMudWlEaWFsb2dCdXR0b25QYW5lPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZSxcInVpLWRpYWxvZy1idXR0b25wYW5lXCIsXCJ1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXhcIiksdGhpcy51aUJ1dHRvblNldD10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlCdXR0b25TZXQsXCJ1aS1kaWFsb2ctYnV0dG9uc2V0XCIpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKX0sX2NyZWF0ZUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy5vcHRpb25zLmJ1dHRvbnM7cmV0dXJuIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSx0LmlzRW1wdHlPYmplY3QoaSl8fHQuaXNBcnJheShpKSYmIWkubGVuZ3RoPyh0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLnVpRGlhbG9nLFwidWktZGlhbG9nLWJ1dHRvbnNcIiksdm9pZCAwKToodC5lYWNoKGksZnVuY3Rpb24oaSxzKXt2YXIgbixvO3M9dC5pc0Z1bmN0aW9uKHMpP3tjbGljazpzLHRleHQ6aX06cyxzPXQuZXh0ZW5kKHt0eXBlOlwiYnV0dG9uXCJ9LHMpLG49cy5jbGljayxvPXtpY29uOnMuaWNvbixpY29uUG9zaXRpb246cy5pY29uUG9zaXRpb24sc2hvd0xhYmVsOnMuc2hvd0xhYmVsLGljb25zOnMuaWNvbnMsdGV4dDpzLnRleHR9LGRlbGV0ZSBzLmNsaWNrLGRlbGV0ZSBzLmljb24sZGVsZXRlIHMuaWNvblBvc2l0aW9uLGRlbGV0ZSBzLnNob3dMYWJlbCxkZWxldGUgcy5pY29ucyxcImJvb2xlYW5cIj09dHlwZW9mIHMudGV4dCYmZGVsZXRlIHMudGV4dCx0KFwiPGJ1dHRvbj48L2J1dHRvbj5cIixzKS5idXR0b24obykuYXBwZW5kVG8oZS51aUJ1dHRvblNldCkub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7bi5hcHBseShlLmVsZW1lbnRbMF0sYXJndW1lbnRzKX0pfSksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZyxcInVpLWRpYWxvZy1idXR0b25zXCIpLHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHZvaWQgMCl9LF9tYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm57cG9zaXRpb246dC5wb3NpdGlvbixvZmZzZXQ6dC5vZmZzZXR9fXZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoe2NhbmNlbDpcIi51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiLGhhbmRsZTpcIi51aS1kaWFsb2ctdGl0bGViYXJcIixjb250YWlubWVudDpcImRvY3VtZW50XCIsc3RhcnQ6ZnVuY3Rpb24ocyxuKXtpLl9hZGRDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcImRyYWdTdGFydFwiLHMsZShuKSl9LGRyYWc6ZnVuY3Rpb24odCxzKXtpLl90cmlnZ2VyKFwiZHJhZ1wiLHQsZShzKSl9LHN0b3A6ZnVuY3Rpb24obixvKXt2YXIgYT1vLm9mZnNldC5sZWZ0LWkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLHI9by5vZmZzZXQudG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7cy5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhhPj0wP1wiK1wiOlwiXCIpK2ErXCIgXCIrXCJ0b3BcIisocj49MD9cIitcIjpcIlwiKStyLG9mOmkud2luZG93fSxpLl9yZW1vdmVDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX3VuYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwiZHJhZ1N0b3BcIixuLGUobykpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246dC5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTp0Lm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjp0LnBvc2l0aW9uLHNpemU6dC5zaXplfX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zLG49cy5yZXNpemFibGUsbz10aGlzLnVpRGlhbG9nLmNzcyhcInBvc2l0aW9uXCIpLGE9XCJzdHJpbmdcIj09dHlwZW9mIG4/bjpcIm4sZSxzLHcsc2Usc3csbmUsbndcIjt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOlwiLnVpLWRpYWxvZy1jb250ZW50XCIsY29udGFpbm1lbnQ6XCJkb2N1bWVudFwiLGFsc29SZXNpemU6dGhpcy5lbGVtZW50LG1heFdpZHRoOnMubWF4V2lkdGgsbWF4SGVpZ2h0OnMubWF4SGVpZ2h0LG1pbldpZHRoOnMubWluV2lkdGgsbWluSGVpZ2h0OnRoaXMuX21pbkhlaWdodCgpLGhhbmRsZXM6YSxzdGFydDpmdW5jdGlvbihzLG4pe2kuX2FkZENsYXNzKHQodGhpcyksXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwicmVzaXplU3RhcnRcIixzLGUobikpfSxyZXNpemU6ZnVuY3Rpb24odCxzKXtpLl90cmlnZ2VyKFwicmVzaXplXCIsdCxlKHMpKX0sc3RvcDpmdW5jdGlvbihuLG8pe3ZhciBhPWkudWlEaWFsb2cub2Zmc2V0KCkscj1hLmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCksaD1hLnRvcC1pLmRvY3VtZW50LnNjcm9sbFRvcCgpO3MuaGVpZ2h0PWkudWlEaWFsb2cuaGVpZ2h0KCkscy53aWR0aD1pLnVpRGlhbG9nLndpZHRoKCkscy5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhyPj0wP1wiK1wiOlwiXCIpK3IrXCIgXCIrXCJ0b3BcIisoaD49MD9cIitcIjpcIlwiKStoLG9mOmkud2luZG93fSxpLl9yZW1vdmVDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLXJlc2l6aW5nXCIpLGkuX3VuYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwicmVzaXplU3RvcFwiLG4sZShvKSl9fSkuY3NzKFwicG9zaXRpb25cIixvKX0sX3RyYWNrRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9vbih0aGlzLndpZGdldCgpLHtmb2N1c2luOmZ1bmN0aW9uKGUpe3RoaXMuX21ha2VGb2N1c1RhcmdldCgpLHRoaXMuX2ZvY3VzZWRFbGVtZW50PXQoZS50YXJnZXQpfX0pfSxfbWFrZUZvY3VzVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5fdW50cmFja0luc3RhbmNlKCksdGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKS51bnNoaWZ0KHRoaXMpfSxfdW50cmFja0luc3RhbmNlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKSxpPXQuaW5BcnJheSh0aGlzLGUpOy0xIT09aSYmZS5zcGxpY2UoaSwxKX0sX3RyYWNraW5nSW5zdGFuY2VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLWluc3RhbmNlc1wiKTtyZXR1cm4gdHx8KHQ9W10sdGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLWluc3RhbmNlc1wiLHQpKSx0fSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3JldHVyblwiYXV0b1wiPT09dC5oZWlnaHQ/dC5taW5IZWlnaHQ6TWF0aC5taW4odC5taW5IZWlnaHQsdC5oZWlnaHQpfSxfcG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnVpRGlhbG9nLmlzKFwiOnZpc2libGVcIik7dHx8dGhpcy51aURpYWxvZy5zaG93KCksdGhpcy51aURpYWxvZy5wb3NpdGlvbih0aGlzLm9wdGlvbnMucG9zaXRpb24pLHR8fHRoaXMudWlEaWFsb2cuaGlkZSgpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgaT10aGlzLHM9ITEsbj17fTt0LmVhY2goZSxmdW5jdGlvbih0LGUpe2kuX3NldE9wdGlvbih0LGUpLHQgaW4gaS5zaXplUmVsYXRlZE9wdGlvbnMmJihzPSEwKSx0IGluIGkucmVzaXphYmxlUmVsYXRlZE9wdGlvbnMmJihuW3RdPWUpfSkscyYmKHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbigpKSx0aGlzLnVpRGlhbG9nLmlzKFwiOmRhdGEodWktcmVzaXphYmxlKVwiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoXCJvcHRpb25cIixuKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbz10aGlzLnVpRGlhbG9nO1wiZGlzYWJsZWRcIiE9PWUmJih0aGlzLl9zdXBlcihlLGkpLFwiYXBwZW5kVG9cIj09PWUmJnRoaXMudWlEaWFsb2cuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksXCJidXR0b25zXCI9PT1lJiZ0aGlzLl9jcmVhdGVCdXR0b25zKCksXCJjbG9zZVRleHRcIj09PWUmJnRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLmJ1dHRvbih7bGFiZWw6dChcIjxhPlwiKS50ZXh0KFwiXCIrdGhpcy5vcHRpb25zLmNsb3NlVGV4dCkuaHRtbCgpfSksXCJkcmFnZ2FibGVcIj09PWUmJihzPW8uaXMoXCI6ZGF0YSh1aS1kcmFnZ2FibGUpXCIpLHMmJiFpJiZvLmRyYWdnYWJsZShcImRlc3Ryb3lcIiksIXMmJmkmJnRoaXMuX21ha2VEcmFnZ2FibGUoKSksXCJwb3NpdGlvblwiPT09ZSYmdGhpcy5fcG9zaXRpb24oKSxcInJlc2l6YWJsZVwiPT09ZSYmKG49by5pcyhcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIiksbiYmIWkmJm8ucmVzaXphYmxlKFwiZGVzdHJveVwiKSxuJiZcInN0cmluZ1wiPT10eXBlb2YgaSYmby5yZXNpemFibGUoXCJvcHRpb25cIixcImhhbmRsZXNcIixpKSxufHxpPT09ITF8fHRoaXMuX21ha2VSZXNpemFibGUoKSksXCJ0aXRsZVwiPT09ZSYmdGhpcy5fdGl0bGUodGhpcy51aURpYWxvZ1RpdGxlYmFyLmZpbmQoXCIudWktZGlhbG9nLXRpdGxlXCIpKSl9LF9zaXplOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLHM9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudC5zaG93KCkuY3NzKHt3aWR0aDpcImF1dG9cIixtaW5IZWlnaHQ6MCxtYXhIZWlnaHQ6XCJub25lXCIsaGVpZ2h0OjB9KSxzLm1pbldpZHRoPnMud2lkdGgmJihzLndpZHRoPXMubWluV2lkdGgpLHQ9dGhpcy51aURpYWxvZy5jc3Moe2hlaWdodDpcImF1dG9cIix3aWR0aDpzLndpZHRofSkub3V0ZXJIZWlnaHQoKSxlPU1hdGgubWF4KDAscy5taW5IZWlnaHQtdCksaT1cIm51bWJlclwiPT10eXBlb2Ygcy5tYXhIZWlnaHQ/TWF0aC5tYXgoMCxzLm1heEhlaWdodC10KTpcIm5vbmVcIixcImF1dG9cIj09PXMuaGVpZ2h0P3RoaXMuZWxlbWVudC5jc3Moe21pbkhlaWdodDplLG1heEhlaWdodDppLGhlaWdodDpcImF1dG9cIn0pOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCxzLmhlaWdodC10KSksdGhpcy51aURpYWxvZy5pcyhcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIikmJnRoaXMudWlEaWFsb2cucmVzaXphYmxlKFwib3B0aW9uXCIsXCJtaW5IZWlnaHRcIix0aGlzLl9taW5IZWlnaHQoKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZChcImlmcmFtZVwiKS5tYXAoZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3JldHVybiB0KFwiPGRpdj5cIikuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsd2lkdGg6ZS5vdXRlcldpZHRoKCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKGUucGFyZW50KCkpLm9mZnNldChlLm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2FsbG93SW50ZXJhY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGlhbG9nXCIpLmxlbmd0aD8hMDohIXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGF0ZXBpY2tlclwiKS5sZW5ndGh9LF9jcmVhdGVPdmVybGF5OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm1vZGFsKXt2YXIgZT0hMDt0aGlzLl9kZWxheShmdW5jdGlvbigpe2U9ITF9KSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24odCl7ZXx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbih0KXx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fYWRkQ2xhc3ModGhpcy5vdmVybGF5LG51bGwsXCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udFwiKSx0aGlzLl9vbih0aGlzLm92ZXJsYXkse21vdXNlZG93bjpcIl9rZWVwRm9jdXNcIn0pLHRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiLCh0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIil8fDApKzEpfX0sX2Rlc3Ryb3lPdmVybGF5OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm1vZGFsJiZ0aGlzLm92ZXJsYXkpe3ZhciB0PXRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiKS0xO3Q/dGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIsdCk6KHRoaXMuX29mZih0aGlzLmRvY3VtZW50LFwiZm9jdXNpblwiKSx0aGlzLmRvY3VtZW50LnJlbW92ZURhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIikpLHRoaXMub3ZlcmxheS5yZW1vdmUoKSx0aGlzLm92ZXJsYXk9bnVsbH19fSksdC51aUJhY2tDb21wYXQhPT0hMSYmdC53aWRnZXQoXCJ1aS5kaWFsb2dcIix0LnVpLmRpYWxvZyx7b3B0aW9uczp7ZGlhbG9nQ2xhc3M6XCJcIn0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiZGlhbG9nQ2xhc3NcIj09PXQmJnRoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFzcyhlKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyl9fSksdC51aS5kaWFsb2csdC53aWRnZXQoXCJ1aS5kcm9wcGFibGVcIix7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4OlwiZHJvcFwiLG9wdGlvbnM6e2FjY2VwdDpcIipcIixhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxzY29wZTpcImRlZmF1bHRcIix0b2xlcmFuY2U6XCJpbnRlcnNlY3RcIixhY3RpdmF0ZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxkcm9wOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLm9wdGlvbnMscz1pLmFjY2VwdDt0aGlzLmlzb3Zlcj0hMSx0aGlzLmlzb3V0PSEwLHRoaXMuYWNjZXB0PXQuaXNGdW5jdGlvbihzKT9zOmZ1bmN0aW9uKHQpe3JldHVybiB0LmlzKHMpfSx0aGlzLnByb3BvcnRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YXJndW1lbnRzWzBdLHZvaWQgMCk6ZT9lOmU9e3dpZHRoOnRoaXMuZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLm9mZnNldEhlaWdodH19LHRoaXMuX2FkZFRvTWFuYWdlcihpLnNjb3BlKSxpLmFkZENsYXNzZXMmJnRoaXMuX2FkZENsYXNzKFwidWktZHJvcHBhYmxlXCIpfSxfYWRkVG9NYW5hZ2VyOmZ1bmN0aW9uKGUpe3QudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZV09dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXXx8W10sdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXS5wdXNoKHRoaXMpfSxfc3BsaWNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO3QubGVuZ3RoPmU7ZSsrKXRbZV09PT10aGlzJiZ0LnNwbGljZShlLDEpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UoZSl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXtpZihcImFjY2VwdFwiPT09ZSl0aGlzLmFjY2VwdD10LmlzRnVuY3Rpb24oaSk/aTpmdW5jdGlvbih0KXtyZXR1cm4gdC5pcyhpKX07ZWxzZSBpZihcInNjb3BlXCI9PT1lKXt2YXIgcz10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RoaXMub3B0aW9ucy5zY29wZV07dGhpcy5fc3BsaWNlKHMpLHRoaXMuX2FkZFRvTWFuYWdlcihpKX10aGlzLl9zdXBlcihlLGkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLl9hZGRBY3RpdmVDbGFzcygpLGkmJnRoaXMuX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLGUsdGhpcy51aShpKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKSxpJiZ0aGlzLl90cmlnZ2VyKFwiZGVhY3RpdmF0ZVwiLGUsdGhpcy51aShpKSl9LF9vdmVyOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLl9hZGRIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcIm92ZXJcIixlLHRoaXMudWkoaSkpKX0sX291dDpmdW5jdGlvbihlKXt2YXIgaT10LnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5fcmVtb3ZlSG92ZXJDbGFzcygpLHRoaXMuX3RyaWdnZXIoXCJvdXRcIixlLHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24oZSxpKXt2YXIgcz1pfHx0LnVpLmRkbWFuYWdlci5jdXJyZW50LG49ITE7cmV0dXJuIHMmJihzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdPyh0aGlzLmVsZW1lbnQuZmluZChcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIikubm90KFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKS5kcm9wcGFibGUoXCJpbnN0YW5jZVwiKTtyZXR1cm4gaS5vcHRpb25zLmdyZWVkeSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmaS5vcHRpb25zLnNjb3BlPT09cy5vcHRpb25zLnNjb3BlJiZpLmFjY2VwdC5jYWxsKGkuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpJiZ2KHMsdC5leHRlbmQoaSx7b2Zmc2V0OmkuZWxlbWVudC5vZmZzZXQoKX0pLGkub3B0aW9ucy50b2xlcmFuY2UsZSk/KG49ITAsITEpOnZvaWQgMH0pLG4/ITE6dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0scy5jdXJyZW50SXRlbXx8cy5lbGVtZW50KT8odGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKSx0aGlzLl9yZW1vdmVIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcImRyb3BcIixlLHRoaXMudWkocykpLHRoaXMuZWxlbWVudCk6ITEpOiExfSx1aTpmdW5jdGlvbih0KXtyZXR1cm57ZHJhZ2dhYmxlOnQuY3VycmVudEl0ZW18fHQuZWxlbWVudCxoZWxwZXI6dC5oZWxwZXIscG9zaXRpb246dC5wb3NpdGlvbixvZmZzZXQ6dC5wb3NpdGlvbkFic319LF9hZGRIb3ZlckNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcm9wcGFibGUtaG92ZXJcIil9LF9yZW1vdmVIb3ZlckNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1kcm9wcGFibGUtaG92ZXJcIil9LF9hZGRBY3RpdmVDbGFzczpmdW5jdGlvbigpe3RoaXMuX2FkZENsYXNzKFwidWktZHJvcHBhYmxlLWFjdGl2ZVwiKX0sX3JlbW92ZUFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1kcm9wcGFibGUtYWN0aXZlXCIpfX0pO3ZhciB2PXQudWkuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsaSl7cmV0dXJuIHQ+PWUmJmUraT50fXJldHVybiBmdW5jdGlvbihlLGkscyxuKXtpZighaS5vZmZzZXQpcmV0dXJuITE7dmFyIG89KGUucG9zaXRpb25BYnN8fGUucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQrZS5tYXJnaW5zLmxlZnQsYT0oZS5wb3NpdGlvbkFic3x8ZS5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wK2UubWFyZ2lucy50b3Ascj1vK2UuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsaD1hK2UuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGw9aS5vZmZzZXQubGVmdCxjPWkub2Zmc2V0LnRvcCx1PWwraS5wcm9wb3J0aW9ucygpLndpZHRoLGQ9YytpLnByb3BvcnRpb25zKCkuaGVpZ2h0O3N3aXRjaChzKXtjYXNlXCJmaXRcIjpyZXR1cm4gbz49bCYmdT49ciYmYT49YyYmZD49aDtjYXNlXCJpbnRlcnNlY3RcIjpyZXR1cm4gbytlLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI+bCYmdT5yLWUuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmYStlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPmMmJmQ+aC1lLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yO2Nhc2VcInBvaW50ZXJcIjpyZXR1cm4gdChuLnBhZ2VZLGMsaS5wcm9wb3J0aW9ucygpLmhlaWdodCkmJnQobi5wYWdlWCxsLGkucHJvcG9ydGlvbnMoKS53aWR0aCk7Y2FzZVwidG91Y2hcIjpyZXR1cm4oYT49YyYmZD49YXx8aD49YyYmZD49aHx8Yz5hJiZoPmQpJiYobz49bCYmdT49b3x8cj49bCYmdT49cnx8bD5vJiZyPnUpO2RlZmF1bHQ6cmV0dXJuITF9fX0oKTt0LnVpLmRkbWFuYWdlcj17Y3VycmVudDpudWxsLGRyb3BwYWJsZXM6e1wiZGVmYXVsdFwiOltdfSxwcmVwYXJlT2Zmc2V0czpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbz10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV18fFtdLGE9aT9pLnR5cGU6bnVsbCxyPShlLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQpLmZpbmQoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLmFkZEJhY2soKTt0OmZvcihzPTA7by5sZW5ndGg+cztzKyspaWYoIShvW3NdLm9wdGlvbnMuZGlzYWJsZWR8fGUmJiFvW3NdLmFjY2VwdC5jYWxsKG9bc10uZWxlbWVudFswXSxlLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQpKSl7Zm9yKG49MDtyLmxlbmd0aD5uO24rKylpZihyW25dPT09b1tzXS5lbGVtZW50WzBdKXtvW3NdLnByb3BvcnRpb25zKCkuaGVpZ2h0PTA7Y29udGludWUgdH1vW3NdLnZpc2libGU9XCJub25lXCIhPT1vW3NdLmVsZW1lbnQuY3NzKFwiZGlzcGxheVwiKSxvW3NdLnZpc2libGUmJihcIm1vdXNlZG93blwiPT09YSYmb1tzXS5fYWN0aXZhdGUuY2FsbChvW3NdLGkpLG9bc10ub2Zmc2V0PW9bc10uZWxlbWVudC5vZmZzZXQoKSxvW3NdLnByb3BvcnRpb25zKHt3aWR0aDpvW3NdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0Om9bc10uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KSl9fSxkcm9wOmZ1bmN0aW9uKGUsaSl7dmFyIHM9ITE7cmV0dXJuIHQuZWFjaCgodC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdfHxbXSkuc2xpY2UoKSxmdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmdihlLHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSYmKHM9dGhpcy5fZHJvcC5jYWxsKHRoaXMsaSl8fHMpLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50KSYmKHRoaXMuaXNvdXQ9ITAsdGhpcy5pc292ZXI9ITEsdGhpcy5fZGVhY3RpdmF0ZS5jYWxsKHRoaXMsaSkpKX0pLHN9LGRyYWdTdGFydDpmdW5jdGlvbihlLGkpe2UuZWxlbWVudC5wYXJlbnRzVW50aWwoXCJib2R5XCIpLm9uKFwic2Nyb2xsLmRyb3BwYWJsZVwiLGZ1bmN0aW9uKCl7ZS5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fHQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGUsaSl9KX0sZHJhZzpmdW5jdGlvbihlLGkpe2Uub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLGkpLHQuZWFjaCh0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmIXRoaXMuZ3JlZWR5Q2hpbGQmJnRoaXMudmlzaWJsZSl7dmFyIHMsbixvLGE9dihlLHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSxyPSFhJiZ0aGlzLmlzb3Zlcj9cImlzb3V0XCI6YSYmIXRoaXMuaXNvdmVyP1wiaXNvdmVyXCI6bnVsbDtyJiYodGhpcy5vcHRpb25zLmdyZWVkeSYmKG49dGhpcy5vcHRpb25zLnNjb3BlLG89dGhpcy5lbGVtZW50LnBhcmVudHMoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0KHRoaXMpLmRyb3BwYWJsZShcImluc3RhbmNlXCIpLm9wdGlvbnMuc2NvcGU9PT1ufSksby5sZW5ndGgmJihzPXQob1swXSkuZHJvcHBhYmxlKFwiaW5zdGFuY2VcIikscy5ncmVlZHlDaGlsZD1cImlzb3ZlclwiPT09cikpLHMmJlwiaXNvdmVyXCI9PT1yJiYocy5pc292ZXI9ITEscy5pc291dD0hMCxzLl9vdXQuY2FsbChzLGkpKSx0aGlzW3JdPSEwLHRoaXNbXCJpc291dFwiPT09cj9cImlzb3ZlclwiOlwiaXNvdXRcIl09ITEsdGhpc1tcImlzb3ZlclwiPT09cj9cIl9vdmVyXCI6XCJfb3V0XCJdLmNhbGwodGhpcyxpKSxzJiZcImlzb3V0XCI9PT1yJiYocy5pc291dD0hMSxzLmlzb3Zlcj0hMCxzLl9vdmVyLmNhbGwocyxpKSkpfX0pfSxkcmFnU3RvcDpmdW5jdGlvbihlLGkpe2UuZWxlbWVudC5wYXJlbnRzVW50aWwoXCJib2R5XCIpLm9mZihcInNjcm9sbC5kcm9wcGFibGVcIiksZS5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fHQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGUsaSl9fSx0LnVpQmFja0NvbXBhdCE9PSExJiZ0LndpZGdldChcInVpLmRyb3BwYWJsZVwiLHQudWkuZHJvcHBhYmxlLHtvcHRpb25zOntob3ZlckNsYXNzOiExLGFjdGl2ZUNsYXNzOiExfSxfYWRkQWN0aXZlQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyl9LF9yZW1vdmVBY3RpdmVDbGFzczpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKX0sX2FkZEhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpfSxfcmVtb3ZlSG92ZXJDbGFzczpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyl9fSksdC51aS5kcm9wcGFibGUsdC53aWRnZXQoXCJ1aS5wcm9ncmVzc2JhclwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsb3B0aW9uczp7Y2xhc3Nlczp7XCJ1aS1wcm9ncmVzc2JhclwiOlwidWktY29ybmVyLWFsbFwiLFwidWktcHJvZ3Jlc3NiYXItdmFsdWVcIjpcInVpLWNvcm5lci1sZWZ0XCIsXCJ1aS1wcm9ncmVzc2Jhci1jb21wbGV0ZVwiOlwidWktY29ybmVyLXJpZ2h0XCJ9LG1heDoxMDAsdmFsdWU6MCxjaGFuZ2U6bnVsbCxjb21wbGV0ZTpudWxsfSxtaW46MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vbGRWYWx1ZT10aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpLHRoaXMuZWxlbWVudC5hdHRyKHtyb2xlOlwicHJvZ3Jlc3NiYXJcIixcImFyaWEtdmFsdWVtaW5cIjp0aGlzLm1pbn0pLHRoaXMuX2FkZENsYXNzKFwidWktcHJvZ3Jlc3NiYXJcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLnZhbHVlRGl2PXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMudmFsdWVEaXYsXCJ1aS1wcm9ncmVzc2Jhci12YWx1ZVwiLFwidWktd2lkZ2V0LWhlYWRlclwiKSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGUgYXJpYS12YWx1ZW1pbiBhcmlhLXZhbHVlbWF4IGFyaWEtdmFsdWVub3dcIiksdGhpcy52YWx1ZURpdi5yZW1vdmUoKX0sdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5vcHRpb25zLnZhbHVlOih0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSh0KSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx2b2lkIDApfSxfY29uc3RyYWluZWRWYWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLmluZGV0ZXJtaW5hdGU9dD09PSExLFwibnVtYmVyXCIhPXR5cGVvZiB0JiYodD0wKSx0aGlzLmluZGV0ZXJtaW5hdGU/ITE6TWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbix0KSl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWU7ZGVsZXRlIHQudmFsdWUsdGhpcy5fc3VwZXIodCksdGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcIm1heFwiPT09dCYmKGU9TWF0aC5tYXgodGhpcy5taW4sZSkpLHRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIix0KSx0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpfSxfcGVyY2VudGFnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU/MTAwOjEwMCoodGhpcy5vcHRpb25zLnZhbHVlLXRoaXMubWluKS8odGhpcy5vcHRpb25zLm1heC10aGlzLm1pbil9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWUsaT10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy52YWx1ZURpdi50b2dnbGUodGhpcy5pbmRldGVybWluYXRlfHxlPnRoaXMubWluKS53aWR0aChpLnRvRml4ZWQoMCkrXCIlXCIpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMudmFsdWVEaXYsXCJ1aS1wcm9ncmVzc2Jhci1jb21wbGV0ZVwiLG51bGwsZT09PXRoaXMub3B0aW9ucy5tYXgpLl90b2dnbGVDbGFzcyhcInVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGVcIixudWxsLHRoaXMuaW5kZXRlcm1pbmF0ZSksdGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImFyaWEtdmFsdWVub3dcIiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLnZhbHVlRGl2KSx0aGlzLl9hZGRDbGFzcyh0aGlzLm92ZXJsYXlEaXYsXCJ1aS1wcm9ncmVzc2Jhci1vdmVybGF5XCIpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtYXhcIjp0aGlzLm9wdGlvbnMubWF4LFwiYXJpYS12YWx1ZW5vd1wiOmV9KSx0aGlzLm92ZXJsYXlEaXYmJih0aGlzLm92ZXJsYXlEaXYucmVtb3ZlKCksdGhpcy5vdmVybGF5RGl2PW51bGwpKSx0aGlzLm9sZFZhbHVlIT09ZSYmKHRoaXMub2xkVmFsdWU9ZSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIpKSxlPT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcihcImNvbXBsZXRlXCIpfX0pLHQud2lkZ2V0KFwidWkuc2VsZWN0YWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOnthcHBlbmRUbzpcImJvZHlcIixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjpcIipcIix0b2xlcmFuY2U6XCJ0b3VjaFwiLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2FkZENsYXNzKFwidWktc2VsZWN0YWJsZVwiKSx0aGlzLmRyYWdnZWQ9ITEsdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKCl7ZS5lbGVtZW50UG9zPXQoZS5lbGVtZW50WzBdKS5vZmZzZXQoKSxlLnNlbGVjdGVlcz10KGUub3B0aW9ucy5maWx0ZXIsZS5lbGVtZW50WzBdKSxlLl9hZGRDbGFzcyhlLnNlbGVjdGVlcyxcInVpLXNlbGVjdGVlXCIpLGUuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9aS5vZmZzZXQoKSxuPXtsZWZ0OnMubGVmdC1lLmVsZW1lbnRQb3MubGVmdCx0b3A6cy50b3AtZS5lbGVtZW50UG9zLnRvcH07dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OmksbGVmdDpuLmxlZnQsdG9wOm4udG9wLHJpZ2h0Om4ubGVmdCtpLm91dGVyV2lkdGgoKSxib3R0b206bi50b3AraS5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6aS5oYXNDbGFzcyhcInVpLXNlbGVjdGVkXCIpLHNlbGVjdGluZzppLmhhc0NsYXNzKFwidWktc2VsZWN0aW5nXCIpLHVuc2VsZWN0aW5nOmkuaGFzQ2xhc3MoXCJ1aS11bnNlbGVjdGluZ1wiKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcixcInVpLXNlbGVjdGFibGUtaGVscGVyXCIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZURhdGEoXCJzZWxlY3RhYmxlLWl0ZW1cIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy5vcG9zPVtlLnBhZ2VYLGUucGFnZVldLHRoaXMuZWxlbWVudFBvcz10KHRoaXMuZWxlbWVudFswXSkub2Zmc2V0KCksdGhpcy5vcHRpb25zLmRpc2FibGVkfHwodGhpcy5zZWxlY3RlZXM9dChzLmZpbHRlcix0aGlzLmVsZW1lbnRbMF0pLHRoaXMuX3RyaWdnZXIoXCJzdGFydFwiLGUpLHQocy5hcHBlbmRUbykuYXBwZW5kKHRoaXMuaGVscGVyKSx0aGlzLmhlbHBlci5jc3Moe2xlZnQ6ZS5wYWdlWCx0b3A6ZS5wYWdlWSx3aWR0aDowLGhlaWdodDowfSkscy5hdXRvUmVmcmVzaCYmdGhpcy5yZWZyZXNoKCksdGhpcy5zZWxlY3RlZXMuZmlsdGVyKFwiLnVpLXNlbGVjdGVkXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcz10LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiKTtzLnN0YXJ0c2VsZWN0ZWQ9ITAsZS5tZXRhS2V5fHxlLmN0cmxLZXl8fChpLl9yZW1vdmVDbGFzcyhzLiRlbGVtZW50LFwidWktc2VsZWN0ZWRcIikscy5zZWxlY3RlZD0hMSxpLl9hZGRDbGFzcyhzLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIikscy51bnNlbGVjdGluZz0hMCxpLl90cmlnZ2VyKFwidW5zZWxlY3RpbmdcIixlLHt1bnNlbGVjdGluZzpzLmVsZW1lbnR9KSl9KSx0KGUudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgcyxuPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO3JldHVybiBuPyhzPSFlLm1ldGFLZXkmJiFlLmN0cmxLZXl8fCFuLiRlbGVtZW50Lmhhc0NsYXNzKFwidWktc2VsZWN0ZWRcIiksaS5fcmVtb3ZlQ2xhc3Mobi4kZWxlbWVudCxzP1widWktdW5zZWxlY3RpbmdcIjpcInVpLXNlbGVjdGVkXCIpLl9hZGRDbGFzcyhuLiRlbGVtZW50LHM/XCJ1aS1zZWxlY3RpbmdcIjpcInVpLXVuc2VsZWN0aW5nXCIpLG4udW5zZWxlY3Rpbmc9IXMsbi5zZWxlY3Rpbmc9cyxuLnNlbGVjdGVkPXMscz9pLl90cmlnZ2VyKFwic2VsZWN0aW5nXCIsZSx7c2VsZWN0aW5nOm4uZWxlbWVudH0pOmkuX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLGUse3Vuc2VsZWN0aW5nOm4uZWxlbWVudH0pLCExKTp2b2lkIDB9KSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7aWYodGhpcy5kcmFnZ2VkPSEwLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3ZhciBpLHM9dGhpcyxuPXRoaXMub3B0aW9ucyxvPXRoaXMub3Bvc1swXSxhPXRoaXMub3Bvc1sxXSxyPWUucGFnZVgsaD1lLnBhZ2VZO3JldHVybiBvPnImJihpPXIscj1vLG89aSksYT5oJiYoaT1oLGg9YSxhPWkpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDpvLHRvcDphLHdpZHRoOnItbyxoZWlnaHQ6aC1hfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpLGw9ITEsYz17fTtpJiZpLmVsZW1lbnQhPT1zLmVsZW1lbnRbMF0mJihjLmxlZnQ9aS5sZWZ0K3MuZWxlbWVudFBvcy5sZWZ0LGMucmlnaHQ9aS5yaWdodCtzLmVsZW1lbnRQb3MubGVmdCxjLnRvcD1pLnRvcCtzLmVsZW1lbnRQb3MudG9wLGMuYm90dG9tPWkuYm90dG9tK3MuZWxlbWVudFBvcy50b3AsXCJ0b3VjaFwiPT09bi50b2xlcmFuY2U/bD0hKGMubGVmdD5yfHxvPmMucmlnaHR8fGMudG9wPmh8fGE+Yy5ib3R0b20pOlwiZml0XCI9PT1uLnRvbGVyYW5jZSYmKGw9Yy5sZWZ0Pm8mJnI+Yy5yaWdodCYmYy50b3A+YSYmaD5jLmJvdHRvbSksbD8oaS5zZWxlY3RlZCYmKHMuX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSExKSxpLnVuc2VsZWN0aW5nJiYocy5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXVuc2VsZWN0aW5nXCIpLGkudW5zZWxlY3Rpbmc9ITEpLGkuc2VsZWN0aW5nfHwocy5fYWRkQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKSxpLnNlbGVjdGluZz0hMCxzLl90cmlnZ2VyKFwic2VsZWN0aW5nXCIsZSx7c2VsZWN0aW5nOmkuZWxlbWVudH0pKSk6KGkuc2VsZWN0aW5nJiYoKGUubWV0YUtleXx8ZS5jdHJsS2V5KSYmaS5zdGFydHNlbGVjdGVkPyhzLl9yZW1vdmVDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0aW5nXCIpLGkuc2VsZWN0aW5nPSExLHMuX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSEwKToocy5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKSxpLnNlbGVjdGluZz0hMSxpLnN0YXJ0c2VsZWN0ZWQmJihzLl9hZGRDbGFzcyhpLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIiksaS51bnNlbGVjdGluZz0hMCkscy5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsZSx7dW5zZWxlY3Rpbmc6aS5lbGVtZW50fSkpKSxpLnNlbGVjdGVkJiYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGkuc3RhcnRzZWxlY3RlZHx8KHMuX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSExLHMuX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxpLnVuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLGUse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSkpKX0pLCExfX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt2YXIgaT10aGlzO3JldHVybiB0aGlzLmRyYWdnZWQ9ITEsdChcIi51aS11bnNlbGVjdGluZ1wiLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2kuX3JlbW92ZUNsYXNzKHMuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxzLnVuc2VsZWN0aW5nPSExLHMuc3RhcnRzZWxlY3RlZD0hMSxpLl90cmlnZ2VyKFwidW5zZWxlY3RlZFwiLGUse3Vuc2VsZWN0ZWQ6cy5lbGVtZW50fSl9KSx0KFwiLnVpLXNlbGVjdGluZ1wiLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2kuX3JlbW92ZUNsYXNzKHMuJGVsZW1lbnQsXCJ1aS1zZWxlY3RpbmdcIikuX2FkZENsYXNzKHMuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxzLnNlbGVjdGluZz0hMSxzLnNlbGVjdGVkPSEwLHMuc3RhcnRzZWxlY3RlZD0hMCxpLl90cmlnZ2VyKFwic2VsZWN0ZWRcIixlLHtzZWxlY3RlZDpzLmVsZW1lbnR9KX0pLHRoaXMuX3RyaWdnZXIoXCJzdG9wXCIsZSksdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9fSksdC53aWRnZXQoXCJ1aS5zZWxlY3RtZW51XCIsW3QudWkuZm9ybVJlc2V0TWl4aW4se3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxzZWxlY3Q+XCIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxjbGFzc2VzOntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcInVpLWNvcm5lci10b3BcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwidWktY29ybmVyLWFsbFwifSxkaXNhYmxlZDpudWxsLGljb25zOntidXR0b246XCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wifSxwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdCBib3R0b21cIixjb2xsaXNpb246XCJub25lXCJ9LHdpZHRoOiExLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7dGhpcy5pZHM9e2VsZW1lbnQ6ZSxidXR0b246ZStcIi1idXR0b25cIixtZW51OmUrXCItbWVudVwifSx0aGlzLl9kcmF3QnV0dG9uKCksdGhpcy5fZHJhd01lbnUoKSx0aGlzLl9iaW5kRm9ybVJlc2V0SGFuZGxlcigpLHRoaXMuX3JlbmRlcmVkPSExLHRoaXMubWVudUl0ZW1zPXQoKX0sX2RyYXdCdXR0b246ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMscz10aGlzLl9wYXJzZU9wdGlvbih0aGlzLmVsZW1lbnQuZmluZChcIm9wdGlvbjpzZWxlY3RlZFwiKSx0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleCk7dGhpcy5sYWJlbHM9dGhpcy5lbGVtZW50LmxhYmVscygpLmF0dHIoXCJmb3JcIix0aGlzLmlkcy5idXR0b24pLHRoaXMuX29uKHRoaXMubGFiZWxzLHtjbGljazpmdW5jdGlvbih0KXt0aGlzLmJ1dHRvbi5mb2N1cygpLHQucHJldmVudERlZmF1bHQoKX19KSx0aGlzLmVsZW1lbnQuaGlkZSgpLHRoaXMuYnV0dG9uPXQoXCI8c3Bhbj5cIix7dGFiaW5kZXg6dGhpcy5vcHRpb25zLmRpc2FibGVkPy0xOjAsaWQ6dGhpcy5pZHMuYnV0dG9uLHJvbGU6XCJjb21ib2JveFwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIixcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCIsXCJhcmlhLW93bnNcIjp0aGlzLmlkcy5tZW51LFwiYXJpYS1oYXNwb3B1cFwiOlwidHJ1ZVwiLHRpdGxlOnRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIil9KS5pbnNlcnRBZnRlcih0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMuYnV0dG9uLFwidWktc2VsZWN0bWVudS1idXR0b24gdWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCIsXCJ1aS1idXR0b24gdWktd2lkZ2V0XCIpLGU9dChcIjxzcGFuPlwiKS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5fYWRkQ2xhc3MoZSxcInVpLXNlbGVjdG1lbnUtaWNvblwiLFwidWktaWNvbiBcIit0aGlzLm9wdGlvbnMuaWNvbnMuYnV0dG9uKSx0aGlzLmJ1dHRvbkl0ZW09dGhpcy5fcmVuZGVyQnV0dG9uSXRlbShzKS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5vcHRpb25zLndpZHRoIT09ITEmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpLHRoaXMuX29uKHRoaXMuYnV0dG9uLHRoaXMuX2J1dHRvbkV2ZW50cyksdGhpcy5idXR0b24ub25lKFwiZm9jdXNpblwiLGZ1bmN0aW9uKCl7aS5fcmVuZGVyZWR8fGkuX3JlZnJlc2hNZW51KCl9KX0sX2RyYXdNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm1lbnU9dChcIjx1bD5cIix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLFwiYXJpYS1sYWJlbGxlZGJ5XCI6dGhpcy5pZHMuYnV0dG9uLGlkOnRoaXMuaWRzLm1lbnV9KSx0aGlzLm1lbnVXcmFwPXQoXCI8ZGl2PlwiKS5hcHBlbmQodGhpcy5tZW51KSx0aGlzLl9hZGRDbGFzcyh0aGlzLm1lbnVXcmFwLFwidWktc2VsZWN0bWVudS1tZW51XCIsXCJ1aS1mcm9udFwiKSx0aGlzLm1lbnVXcmFwLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMubWVudUluc3RhbmNlPXRoaXMubWVudS5tZW51KHtjbGFzc2VzOntcInVpLW1lbnVcIjpcInVpLWNvcm5lci1ib3R0b21cIn0scm9sZTpcImxpc3Rib3hcIixzZWxlY3Q6ZnVuY3Rpb24odCxpKXt0LnByZXZlbnREZWZhdWx0KCksZS5fc2V0U2VsZWN0aW9uKCksZS5fc2VsZWN0KGkuaXRlbS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpLHQpfSxmb2N1czpmdW5jdGlvbih0LGkpe3ZhciBzPWkuaXRlbS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpO251bGwhPWUuZm9jdXNJbmRleCYmcy5pbmRleCE9PWUuZm9jdXNJbmRleCYmKGUuX3RyaWdnZXIoXCJmb2N1c1wiLHQse2l0ZW06c30pLGUuaXNPcGVufHxlLl9zZWxlY3Qocyx0KSksZS5mb2N1c0luZGV4PXMuaW5kZXgsZS5idXR0b24uYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUubWVudUl0ZW1zLmVxKHMuaW5kZXgpLmF0dHIoXCJpZFwiKSl9fSkubWVudShcImluc3RhbmNlXCIpLHRoaXMubWVudUluc3RhbmNlLl9vZmYodGhpcy5tZW51LFwibW91c2VsZWF2ZVwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fY2xvc2VPbkRvY3VtZW50Q2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5tZW51SW5zdGFuY2UuX2lzRGl2aWRlcj1mdW5jdGlvbigpe3JldHVybiExfX0scmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3JlZnJlc2hNZW51KCksdGhpcy5idXR0b25JdGVtLnJlcGxhY2VXaXRoKHRoaXMuYnV0dG9uSXRlbT10aGlzLl9yZW5kZXJCdXR0b25JdGVtKHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIil8fHt9KSksbnVsbD09PXRoaXMub3B0aW9ucy53aWR0aCYmdGhpcy5fcmVzaXplQnV0dG9uKCl9LF9yZWZyZXNoTWVudTpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5lbGVtZW50LmZpbmQoXCJvcHRpb25cIik7dGhpcy5tZW51LmVtcHR5KCksdGhpcy5fcGFyc2VPcHRpb25zKGUpLHRoaXMuX3JlbmRlck1lbnUodGhpcy5tZW51LHRoaXMuaXRlbXMpLHRoaXMubWVudUluc3RhbmNlLnJlZnJlc2goKSx0aGlzLm1lbnVJdGVtcz10aGlzLm1lbnUuZmluZChcImxpXCIpLm5vdChcIi51aS1zZWxlY3RtZW51LW9wdGdyb3VwXCIpLmZpbmQoXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fcmVuZGVyZWQ9ITAsZS5sZW5ndGgmJih0PXRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdCksdGhpcy5fc2V0QXJpYSh0LmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIikpLHRoaXMuX3NldE9wdGlvbihcImRpc2FibGVkXCIsdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKSkpfSxvcGVuOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuX3JlbmRlcmVkPyh0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLm1lbnUuZmluZChcIi51aS1zdGF0ZS1hY3RpdmVcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpKSk6dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLm1lbnVJdGVtcy5sZW5ndGgmJih0aGlzLmlzT3Blbj0hMCx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5fcmVzaXplTWVudSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx0aGlzLl9kb2N1bWVudENsaWNrKSx0aGlzLl90cmlnZ2VyKFwib3BlblwiLHQpKSl9LF9wb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucG9zaXRpb24odC5leHRlbmQoe29mOnRoaXMuYnV0dG9ufSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKX0sY2xvc2U6ZnVuY3Rpb24odCl7dGhpcy5pc09wZW4mJih0aGlzLmlzT3Blbj0hMSx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5yYW5nZT1udWxsLHRoaXMuX29mZih0aGlzLmRvY3VtZW50KSx0aGlzLl90cmlnZ2VyKFwiY2xvc2VcIix0KSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbn0sbWVudVdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnV9LF9yZW5kZXJCdXR0b25JdGVtOmZ1bmN0aW9uKGUpe3ZhciBpPXQoXCI8c3Bhbj5cIik7cmV0dXJuIHRoaXMuX3NldFRleHQoaSxlLmxhYmVsKSx0aGlzLl9hZGRDbGFzcyhpLFwidWktc2VsZWN0bWVudS10ZXh0XCIpLGl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGUsaSl7dmFyIHM9dGhpcyxuPVwiXCI7dC5lYWNoKGksZnVuY3Rpb24oaSxvKXt2YXIgYTtvLm9wdGdyb3VwIT09biYmKGE9dChcIjxsaT5cIix7dGV4dDpvLm9wdGdyb3VwfSkscy5fYWRkQ2xhc3MoYSxcInVpLXNlbGVjdG1lbnUtb3B0Z3JvdXBcIixcInVpLW1lbnUtZGl2aWRlclwiKyhvLmVsZW1lbnQucGFyZW50KFwib3B0Z3JvdXBcIikucHJvcChcImRpc2FibGVkXCIpP1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIikpLGEuYXBwZW5kVG8oZSksbj1vLm9wdGdyb3VwKSxzLl9yZW5kZXJJdGVtRGF0YShlLG8pfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKHQsZSkuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiLGUpfSxfcmVuZGVySXRlbTpmdW5jdGlvbihlLGkpe3ZhciBzPXQoXCI8bGk+XCIpLG49dChcIjxkaXY+XCIse3RpdGxlOmkuZWxlbWVudC5hdHRyKFwidGl0bGVcIil9KTtyZXR1cm4gaS5kaXNhYmxlZCYmdGhpcy5fYWRkQ2xhc3MocyxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiksdGhpcy5fc2V0VGV4dChuLGkubGFiZWwpLHMuYXBwZW5kKG4pLmFwcGVuZFRvKGUpfSxfc2V0VGV4dDpmdW5jdGlvbih0LGUpe2U/dC50ZXh0KGUpOnQuaHRtbChcIiYjMTYwO1wiKX0sX21vdmU6ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG49XCIudWktbWVudS1pdGVtXCI7dGhpcy5pc09wZW4/aT10aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmZvY3VzSW5kZXgpLnBhcmVudChcImxpXCIpOihpPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4KS5wYXJlbnQoXCJsaVwiKSxuKz1cIjpub3QoLnVpLXN0YXRlLWRpc2FibGVkKVwiKSxzPVwiZmlyc3RcIj09PXR8fFwibGFzdFwiPT09dD9pW1wiZmlyc3RcIj09PXQ/XCJwcmV2QWxsXCI6XCJuZXh0QWxsXCJdKG4pLmVxKC0xKTppW3QrXCJBbGxcIl0obikuZXEoMCkscy5sZW5ndGgmJnRoaXMubWVudUluc3RhbmNlLmZvY3VzKGUscyl9LF9nZXRTZWxlY3RlZEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLnBhcmVudChcImxpXCIpfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3RoaXNbdGhpcy5pc09wZW4/XCJjbG9zZVwiOlwib3BlblwiXSh0KX0sX3NldFNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciB0O3RoaXMucmFuZ2UmJih3aW5kb3cuZ2V0U2VsZWN0aW9uPyh0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKSx0LnJlbW92ZUFsbFJhbmdlcygpLHQuYWRkUmFuZ2UodGhpcy5yYW5nZSkpOnRoaXMucmFuZ2Uuc2VsZWN0KCksdGhpcy5idXR0b24uZm9jdXMoKSl9LF9kb2N1bWVudENsaWNrOnttb3VzZWRvd246ZnVuY3Rpb24oZSl7dGhpcy5pc09wZW4mJih0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLXNlbGVjdG1lbnUtbWVudSwgI1wiK3QudWkuZXNjYXBlU2VsZWN0b3IodGhpcy5pZHMuYnV0dG9uKSkubGVuZ3RofHx0aGlzLmNsb3NlKGUpKX19LF9idXR0b25FdmVudHM6e21vdXNlZG93bjpmdW5jdGlvbigpe3ZhciB0O3dpbmRvdy5nZXRTZWxlY3Rpb24/KHQ9d2luZG93LmdldFNlbGVjdGlvbigpLHQucmFuZ2VDb3VudCYmKHRoaXMucmFuZ2U9dC5nZXRSYW5nZUF0KDApKSk6dGhpcy5yYW5nZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX0sY2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5fc2V0U2VsZWN0aW9uKCksdGhpcy5fdG9nZ2xlKHQpfSxrZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpPSEwO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLlRBQjpjYXNlIHQudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jbG9zZShlKSxpPSExO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVOVEVSOnRoaXMuaXNPcGVuJiZ0aGlzLl9zZWxlY3RGb2N1c2VkSXRlbShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDplLmFsdEtleT90aGlzLl90b2dnbGUoZSk6dGhpcy5fbW92ZShcInByZXZcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5ET1dOOmUuYWx0S2V5P3RoaXMuX3RvZ2dsZShlKTp0aGlzLl9tb3ZlKFwibmV4dFwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlNQQUNFOnRoaXMuaXNPcGVuP3RoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKGUpOnRoaXMuX3RvZ2dsZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5MRUZUOnRoaXMuX21vdmUoXCJwcmV2XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6dGhpcy5fbW92ZShcIm5leHRcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5IT01FOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5fbW92ZShcImZpcnN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKFwibGFzdFwiLGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tZW51LnRyaWdnZXIoZSksaT0hMX1pJiZlLnByZXZlbnREZWZhdWx0KCl9fSxfc2VsZWN0Rm9jdXNlZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5mb2N1c0luZGV4KS5wYXJlbnQoXCJsaVwiKTtlLmhhc0NsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIil8fHRoaXMuX3NlbGVjdChlLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiksdCl9LF9zZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleDt0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleD10LmluZGV4LHRoaXMuYnV0dG9uSXRlbS5yZXBsYWNlV2l0aCh0aGlzLmJ1dHRvbkl0ZW09dGhpcy5fcmVuZGVyQnV0dG9uSXRlbSh0KSksdGhpcy5fc2V0QXJpYSh0KSx0aGlzLl90cmlnZ2VyKFwic2VsZWN0XCIsZSx7aXRlbTp0fSksdC5pbmRleCE9PWkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIixlLHtpdGVtOnR9KSx0aGlzLmNsb3NlKGUpfSxfc2V0QXJpYTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm1lbnVJdGVtcy5lcSh0LmluZGV4KS5hdHRyKFwiaWRcIik7dGhpcy5idXR0b24uYXR0cih7XCJhcmlhLWxhYmVsbGVkYnlcIjplLFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6ZX0pLHRoaXMubWVudS5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsZSl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImljb25zXCI9PT10KXt2YXIgaT10aGlzLmJ1dHRvbi5maW5kKFwic3Bhbi51aS1pY29uXCIpO3RoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMuYnV0dG9uKS5fYWRkQ2xhc3MoaSxudWxsLGUuYnV0dG9uKX10aGlzLl9zdXBlcih0LGUpLFwiYXBwZW5kVG9cIj09PXQmJnRoaXMubWVudVdyYXAuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksXCJ3aWR0aFwiPT09dCYmdGhpcy5fcmVzaXplQnV0dG9uKCl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLm1lbnVJbnN0YW5jZS5vcHRpb24oXCJkaXNhYmxlZFwiLHQpLHRoaXMuYnV0dG9uLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsdCksdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5idXR0b24sbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsdCksdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLHQpLHQ/KHRoaXMuYnV0dG9uLmF0dHIoXCJ0YWJpbmRleFwiLC0xKSx0aGlzLmNsb3NlKCkpOnRoaXMuYnV0dG9uLmF0dHIoXCJ0YWJpbmRleFwiLDApfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIGUmJihlPWUuanF1ZXJ5fHxlLm5vZGVUeXBlP3QoZSk6dGhpcy5kb2N1bWVudC5maW5kKGUpLmVxKDApKSxlJiZlWzBdfHwoZT10aGlzLmVsZW1lbnQuY2xvc2VzdChcIi51aS1mcm9udCwgZGlhbG9nXCIpKSxlLmxlbmd0aHx8KGU9dGhpcy5kb2N1bWVudFswXS5ib2R5KSxlfSxfdG9nZ2xlQXR0cjpmdW5jdGlvbigpe3RoaXMuYnV0dG9uLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsdGhpcy5pc09wZW4pLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuYnV0dG9uLFwidWktc2VsZWN0bWVudS1idXR0b24tXCIrKHRoaXMuaXNPcGVuP1wiY2xvc2VkXCI6XCJvcGVuXCIpKS5fYWRkQ2xhc3ModGhpcy5idXR0b24sXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1cIisodGhpcy5pc09wZW4/XCJvcGVuXCI6XCJjbG9zZWRcIikpLl90b2dnbGVDbGFzcyh0aGlzLm1lbnVXcmFwLFwidWktc2VsZWN0bWVudS1vcGVuXCIsbnVsbCx0aGlzLmlzT3BlbiksdGhpcy5tZW51LmF0dHIoXCJhcmlhLWhpZGRlblwiLCF0aGlzLmlzT3Blbil9LF9yZXNpemVCdXR0b246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMud2lkdGg7cmV0dXJuIHQ9PT0hMT8odGhpcy5idXR0b24uY3NzKFwid2lkdGhcIixcIlwiKSx2b2lkIDApOihudWxsPT09dCYmKHQ9dGhpcy5lbGVtZW50LnNob3coKS5vdXRlcldpZHRoKCksdGhpcy5lbGVtZW50LmhpZGUoKSksdGhpcy5idXR0b24ub3V0ZXJXaWR0aCh0KSx2b2lkIDApfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3RoaXMubWVudS5vdXRlcldpZHRoKE1hdGgubWF4KHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoKSx0aGlzLm1lbnUud2lkdGgoXCJcIikub3V0ZXJXaWR0aCgpKzEpKX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdXBlcigpO3JldHVybiB0LmRpc2FibGVkPXRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiksdH0sX3BhcnNlT3B0aW9uczpmdW5jdGlvbihlKXt2YXIgaT10aGlzLHM9W107ZS5lYWNoKGZ1bmN0aW9uKGUsbil7cy5wdXNoKGkuX3BhcnNlT3B0aW9uKHQobiksZSkpfSksdGhpcy5pdGVtcz1zfSxfcGFyc2VPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgaT10LnBhcmVudChcIm9wdGdyb3VwXCIpO3JldHVybntlbGVtZW50OnQsaW5kZXg6ZSx2YWx1ZTp0LnZhbCgpLGxhYmVsOnQudGV4dCgpLG9wdGdyb3VwOmkuYXR0cihcImxhYmVsXCIpfHxcIlwiLGRpc2FibGVkOmkucHJvcChcImRpc2FibGVkXCIpfHx0LnByb3AoXCJkaXNhYmxlZFwiKX19LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fdW5iaW5kRm9ybVJlc2V0SGFuZGxlcigpLHRoaXMubWVudVdyYXAucmVtb3ZlKCksdGhpcy5idXR0b24ucmVtb3ZlKCksdGhpcy5lbGVtZW50LnNob3coKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLmxhYmVscy5hdHRyKFwiZm9yXCIsdGhpcy5pZHMuZWxlbWVudCl9fV0pLHQud2lkZ2V0KFwidWkuc2xpZGVyXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4Olwic2xpZGVcIixvcHRpb25zOnthbmltYXRlOiExLGNsYXNzZXM6e1widWktc2xpZGVyXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1zbGlkZXItaGFuZGxlXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1zbGlkZXItcmFuZ2VcIjpcInVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LWhlYWRlclwifSxkaXN0YW5jZTowLG1heDoxMDAsbWluOjAsb3JpZW50YXRpb246XCJob3Jpem9udGFsXCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGwsY2hhbmdlOm51bGwsc2xpZGU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sbnVtUGFnZXM6NSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5fY2FsY3VsYXRlTmV3TWF4KCksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1zbGlkZXIgdWktc2xpZGVyLVwiK3RoaXMub3JpZW50YXRpb24sXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX2FuaW1hdGVPZmY9ITFcclxufSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVJhbmdlKCksdGhpcy5fY3JlYXRlSGFuZGxlcygpLHRoaXMuX3NldHVwRXZlbnRzKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jcmVhdGVIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIGUsaSxzPXRoaXMub3B0aW9ucyxuPXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLXNsaWRlci1oYW5kbGVcIiksbz1cIjxzcGFuIHRhYmluZGV4PScwJz48L3NwYW4+XCIsYT1bXTtmb3IoaT1zLnZhbHVlcyYmcy52YWx1ZXMubGVuZ3RofHwxLG4ubGVuZ3RoPmkmJihuLnNsaWNlKGkpLnJlbW92ZSgpLG49bi5zbGljZSgwLGkpKSxlPW4ubGVuZ3RoO2k+ZTtlKyspYS5wdXNoKG8pO3RoaXMuaGFuZGxlcz1uLmFkZCh0KGEuam9pbihcIlwiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksdGhpcy5fYWRkQ2xhc3ModGhpcy5oYW5kbGVzLFwidWktc2xpZGVyLWhhbmRsZVwiLFwidWktc3RhdGUtZGVmYXVsdFwiKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oZSl7dCh0aGlzKS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiLGUpLmF0dHIoXCJ0YWJJbmRleFwiLDApfSl9LF9jcmVhdGVSYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztlLnJhbmdlPyhlLnJhbmdlPT09ITAmJihlLnZhbHVlcz9lLnZhbHVlcy5sZW5ndGgmJjIhPT1lLnZhbHVlcy5sZW5ndGg/ZS52YWx1ZXM9W2UudmFsdWVzWzBdLGUudmFsdWVzWzBdXTp0LmlzQXJyYXkoZS52YWx1ZXMpJiYoZS52YWx1ZXM9ZS52YWx1ZXMuc2xpY2UoMCkpOmUudmFsdWVzPVt0aGlzLl92YWx1ZU1pbigpLHRoaXMuX3ZhbHVlTWluKCldKSx0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLmxlbmd0aD8odGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5yYW5nZSxcInVpLXNsaWRlci1yYW5nZS1taW4gdWktc2xpZGVyLXJhbmdlLW1heFwiKSx0aGlzLnJhbmdlLmNzcyh7bGVmdDpcIlwiLGJvdHRvbTpcIlwifSkpOih0aGlzLnJhbmdlPXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMucmFuZ2UsXCJ1aS1zbGlkZXItcmFuZ2VcIikpLChcIm1pblwiPT09ZS5yYW5nZXx8XCJtYXhcIj09PWUucmFuZ2UpJiZ0aGlzLl9hZGRDbGFzcyh0aGlzLnJhbmdlLFwidWktc2xpZGVyLXJhbmdlLVwiK2UucmFuZ2UpKToodGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5yZW1vdmUoKSx0aGlzLnJhbmdlPW51bGwpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLl9vZmYodGhpcy5oYW5kbGVzKSx0aGlzLl9vbih0aGlzLmhhbmRsZXMsdGhpcy5faGFuZGxlRXZlbnRzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oYW5kbGVzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oYW5kbGVzKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXMucmVtb3ZlKCksdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5yZW1vdmUoKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhLHIsaCxsLGM9dGhpcyx1PXRoaXMub3B0aW9ucztyZXR1cm4gdS5kaXNhYmxlZD8hMToodGhpcy5lbGVtZW50U2l6ZT17d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCl9LHRoaXMuZWxlbWVudE9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksaT17eDplLnBhZ2VYLHk6ZS5wYWdlWX0scz10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoaSksbj10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkrMSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmFicyhzLWMudmFsdWVzKGUpKTsobj5pfHxuPT09aSYmKGU9PT1jLl9sYXN0Q2hhbmdlZFZhbHVlfHxjLnZhbHVlcyhlKT09PXUubWluKSkmJihuPWksbz10KHRoaXMpLGE9ZSl9KSxyPXRoaXMuX3N0YXJ0KGUsYSkscj09PSExPyExOih0aGlzLl9tb3VzZVNsaWRpbmc9ITAsdGhpcy5faGFuZGxlSW5kZXg9YSx0aGlzLl9hZGRDbGFzcyhvLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksby50cmlnZ2VyKFwiZm9jdXNcIiksaD1vLm9mZnNldCgpLGw9IXQoZS50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuaXMoXCIudWktc2xpZGVyLWhhbmRsZVwiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OmUucGFnZVgtaC5sZWZ0LW8ud2lkdGgoKS8yLHRvcDplLnBhZ2VZLWgudG9wLW8uaGVpZ2h0KCkvMi0ocGFyc2VJbnQoby5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChvLmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KG8uY3NzKFwibWFyZ2luVG9wXCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpfHx0aGlzLl9zbGlkZShlLGEscyksdGhpcy5fYW5pbWF0ZU9mZj0hMCwhMCkpfSxfbW91c2VTdGFydDpmdW5jdGlvbigpe3JldHVybiEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBlPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxpPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShlKTtyZXR1cm4gdGhpcy5fc2xpZGUodCx0aGlzLl9oYW5kbGVJbmRleCxpKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5oYW5kbGVzLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AodCx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKHQsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPVwidmVydGljYWxcIj09PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj9cInZlcnRpY2FsXCI6XCJob3Jpem9udGFsXCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24odCl7dmFyIGUsaSxzLG4sbztyZXR1cm5cImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24/KGU9dGhpcy5lbGVtZW50U2l6ZS53aWR0aCxpPXQueC10aGlzLmVsZW1lbnRPZmZzZXQubGVmdC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQubGVmdDowKSk6KGU9dGhpcy5lbGVtZW50U2l6ZS5oZWlnaHQsaT10LnktdGhpcy5lbGVtZW50T2Zmc2V0LnRvcC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQudG9wOjApKSxzPWkvZSxzPjEmJihzPTEpLDA+cyYmKHM9MCksXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmKHM9MS1zKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSxvPXRoaXMuX3ZhbHVlTWluKCkrcypuLHRoaXMuX3RyaW1BbGlnblZhbHVlKG8pfSxfdWlIYXNoOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSxoYW5kbGVJbmRleDp0LHZhbHVlOnZvaWQgMCE9PWU/ZTp0aGlzLnZhbHVlKCl9O3JldHVybiB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpJiYocy52YWx1ZT12b2lkIDAhPT1lP2U6dGhpcy52YWx1ZXModCkscy52YWx1ZXM9aXx8dGhpcy52YWx1ZXMoKSksc30sX2hhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RofSxfc3RhcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsdCx0aGlzLl91aUhhc2goZSkpfSxfc2xpZGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzLG4sbz10aGlzLnZhbHVlKCksYT10aGlzLnZhbHVlcygpO3RoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkmJihuPXRoaXMudmFsdWVzKGU/MDoxKSxvPXRoaXMudmFsdWVzKGUpLDI9PT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJihpPTA9PT1lP01hdGgubWluKG4saSk6TWF0aC5tYXgobixpKSksYVtlXT1pKSxpIT09byYmKHM9dGhpcy5fdHJpZ2dlcihcInNsaWRlXCIsdCx0aGlzLl91aUhhc2goZSxpLGEpKSxzIT09ITEmJih0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpP3RoaXMudmFsdWVzKGUsaSk6dGhpcy52YWx1ZShpKSkpfSxfc3RvcDpmdW5jdGlvbih0LGUpe3RoaXMuX3RyaWdnZXIoXCJzdG9wXCIsdCx0aGlzLl91aUhhc2goZSkpfSxfY2hhbmdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5fa2V5U2xpZGluZ3x8dGhpcy5fbW91c2VTbGlkaW5nfHwodGhpcy5fbGFzdENoYW5nZWRWYWx1ZT1lLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHRoaXMuX3VpSGFzaChlKSkpfSx2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHZvaWQgMCk6dGhpcy5fdmFsdWUoKX0sdmFsdWVzOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlc1tlXT10aGlzLl90cmltQWxpZ25WYWx1ZShpKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCxlKSx2b2lkIDA7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3ZhbHVlcygpO2lmKCF0LmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKT90aGlzLl92YWx1ZXMoZSk6dGhpcy52YWx1ZSgpO2ZvcihzPXRoaXMub3B0aW9ucy52YWx1ZXMsbj1hcmd1bWVudHNbMF0sbz0wO3MubGVuZ3RoPm87bys9MSlzW29dPXRoaXMuX3RyaW1BbGlnblZhbHVlKG5bb10pLHRoaXMuX2NoYW5nZShudWxsLG8pO3RoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbj0wO3N3aXRjaChcInJhbmdlXCI9PT1lJiZ0aGlzLm9wdGlvbnMucmFuZ2U9PT0hMCYmKFwibWluXCI9PT1pPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKDApLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCk6XCJtYXhcIj09PWkmJih0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoLTEpLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCkpLHQuaXNBcnJheSh0aGlzLm9wdGlvbnMudmFsdWVzKSYmKG49dGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgpLHRoaXMuX3N1cGVyKGUsaSksZSl7Y2FzZVwib3JpZW50YXRpb25cIjp0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuX3JlbW92ZUNsYXNzKFwidWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsXCIpLl9hZGRDbGFzcyhcInVpLXNsaWRlci1cIit0aGlzLm9yaWVudGF0aW9uKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLm9wdGlvbnMucmFuZ2UmJnRoaXMuX3JlZnJlc2hSYW5nZShpKSx0aGlzLmhhbmRsZXMuY3NzKFwiaG9yaXpvbnRhbFwiPT09aT9cImJvdHRvbVwiOlwibGVmdFwiLFwiXCIpO2JyZWFrO2Nhc2VcInZhbHVlXCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2VcInZhbHVlc1wiOmZvcih0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHM9bi0xO3M+PTA7cy0tKXRoaXMuX2NoYW5nZShudWxsLHMpO3RoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZVwic3RlcFwiOmNhc2VcIm1pblwiOmNhc2VcIm1heFwiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fY2FsY3VsYXRlTmV3TWF4KCksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlXCJyYW5nZVwiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaCgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9fSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KX0sX3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZhbHVlO3JldHVybiB0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpfSxfdmFsdWVzOmZ1bmN0aW9uKHQpe3ZhciBlLGkscztpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlPXRoaXMub3B0aW9ucy52YWx1ZXNbdF0sZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKTtpZih0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpKXtmb3IoaT10aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCkscz0wO2kubGVuZ3RoPnM7cys9MSlpW3NdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGlbc10pO3JldHVybiBpfXJldHVybltdfSxfdHJpbUFsaWduVmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5fdmFsdWVNaW4oKT49dClyZXR1cm4gdGhpcy5fdmFsdWVNaW4oKTtpZih0Pj10aGlzLl92YWx1ZU1heCgpKXJldHVybiB0aGlzLl92YWx1ZU1heCgpO3ZhciBlPXRoaXMub3B0aW9ucy5zdGVwPjA/dGhpcy5vcHRpb25zLnN0ZXA6MSxpPSh0LXRoaXMuX3ZhbHVlTWluKCkpJWUscz10LWk7cmV0dXJuIDIqTWF0aC5hYnMoaSk+PWUmJihzKz1pPjA/ZTotZSkscGFyc2VGbG9hdChzLnRvRml4ZWQoNSkpfSxfY2FsY3VsYXRlTmV3TWF4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLm1heCxlPXRoaXMuX3ZhbHVlTWluKCksaT10aGlzLm9wdGlvbnMuc3RlcCxzPU1hdGgucm91bmQoKHQtZSkvaSkqaTt0PXMrZSx0PnRoaXMub3B0aW9ucy5tYXgmJih0LT1pKSx0aGlzLm1heD1wYXJzZUZsb2F0KHQudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpfSxfcHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLnN0ZXApO3JldHVybiBudWxsIT09dGhpcy5vcHRpb25zLm1pbiYmKHQ9TWF0aC5tYXgodCx0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMubWluKSkpLHR9LF9wcmVjaXNpb25PZjpmdW5jdGlvbih0KXt2YXIgZT1cIlwiK3QsaT1lLmluZGV4T2YoXCIuXCIpO3JldHVybi0xPT09aT8wOmUubGVuZ3RoLWktMX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sX3JlZnJlc2hSYW5nZTpmdW5jdGlvbih0KXtcInZlcnRpY2FsXCI9PT10JiZ0aGlzLnJhbmdlLmNzcyh7d2lkdGg6XCJcIixsZWZ0OlwiXCJ9KSxcImhvcml6b250YWxcIj09PXQmJnRoaXMucmFuZ2UuY3NzKHtoZWlnaHQ6XCJcIixib3R0b206XCJcIn0pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbyxhPXRoaXMub3B0aW9ucy5yYW5nZSxyPXRoaXMub3B0aW9ucyxoPXRoaXMsbD10aGlzLl9hbmltYXRlT2ZmPyExOnIuYW5pbWF0ZSxjPXt9O3RoaXMuX2hhc011bHRpcGxlVmFsdWVzKCk/dGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24ocyl7aT0xMDAqKChoLnZhbHVlcyhzKS1oLl92YWx1ZU1pbigpKS8oaC5fdmFsdWVNYXgoKS1oLl92YWx1ZU1pbigpKSksY1tcImhvcml6b250YWxcIj09PWgub3JpZW50YXRpb24/XCJsZWZ0XCI6XCJib3R0b21cIl09aStcIiVcIix0KHRoaXMpLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKGMsci5hbmltYXRlKSxoLm9wdGlvbnMucmFuZ2U9PT0hMCYmKFwiaG9yaXpvbnRhbFwiPT09aC5vcmllbnRhdGlvbj8oMD09PXMmJmgucmFuZ2Uuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2xlZnQ6aStcIiVcIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHt3aWR0aDppLWUrXCIlXCJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSk6KDA9PT1zJiZoLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtib3R0b206aStcIiVcIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtoZWlnaHQ6aS1lK1wiJVwifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpKSxlPWl9KToocz10aGlzLnZhbHVlKCksbj10aGlzLl92YWx1ZU1pbigpLG89dGhpcy5fdmFsdWVNYXgoKSxpPW8hPT1uPzEwMCooKHMtbikvKG8tbikpOjAsY1tcImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24/XCJsZWZ0XCI6XCJib3R0b21cIl09aStcIiVcIix0aGlzLmhhbmRsZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXShjLHIuYW5pbWF0ZSksXCJtaW5cIj09PWEmJlwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7d2lkdGg6aStcIiVcIn0sci5hbmltYXRlKSxcIm1heFwiPT09YSYmXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHt3aWR0aDoxMDAtaStcIiVcIn0sci5hbmltYXRlKSxcIm1pblwiPT09YSYmXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7aGVpZ2h0OmkrXCIlXCJ9LHIuYW5pbWF0ZSksXCJtYXhcIj09PWEmJlwidmVydGljYWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2hlaWdodDoxMDAtaStcIiVcIn0sci5hbmltYXRlKSl9LF9oYW5kbGVFdmVudHM6e2tleWRvd246ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT10KGUudGFyZ2V0KS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiKTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5IT01FOmNhc2UgdC51aS5rZXlDb2RlLkVORDpjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfRE9XTjpjYXNlIHQudWkua2V5Q29kZS5VUDpjYXNlIHQudWkua2V5Q29kZS5SSUdIVDpjYXNlIHQudWkua2V5Q29kZS5ET1dOOmNhc2UgdC51aS5rZXlDb2RlLkxFRlQ6aWYoZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMCx0aGlzLl9hZGRDbGFzcyh0KGUudGFyZ2V0KSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLGk9dGhpcy5fc3RhcnQoZSxhKSxpPT09ITEpKXJldHVybn1zd2l0Y2gobz10aGlzLm9wdGlvbnMuc3RlcCxzPW49dGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKT90aGlzLnZhbHVlcyhhKTp0aGlzLnZhbHVlKCksZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5IT01FOm49dGhpcy5fdmFsdWVNaW4oKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTkQ6bj10aGlzLl92YWx1ZU1heCgpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6bj10aGlzLl90cmltQWxpZ25WYWx1ZShzKyh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL3RoaXMubnVtUGFnZXMpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlBBR0VfRE9XTjpuPXRoaXMuX3RyaW1BbGlnblZhbHVlKHMtKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6aWYocz09PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuO249dGhpcy5fdHJpbUFsaWduVmFsdWUocytvKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5ET1dOOmNhc2UgdC51aS5rZXlDb2RlLkxFRlQ6aWYocz09PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuO249dGhpcy5fdHJpbUFsaWduVmFsdWUocy1vKX10aGlzLl9zbGlkZShlLGEsbil9LGtleXVwOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZS50YXJnZXQpLmRhdGEoXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIpO3RoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX3N0b3AoZSxpKSx0aGlzLl9jaGFuZ2UoZSxpKSx0aGlzLl9yZW1vdmVDbGFzcyh0KGUudGFyZ2V0KSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpKX19fSksdC53aWRnZXQoXCJ1aS5zb3J0YWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcInNvcnRcIixyZWFkeTohMSxvcHRpb25zOnthcHBlbmRUbzpcInBhcmVudFwiLGF4aXM6ITEsY29ubmVjdFdpdGg6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOlwiYXV0b1wiLGN1cnNvckF0OiExLGRyb3BPbkVtcHR5OiEwLGZvcmNlUGxhY2Vob2xkZXJTaXplOiExLGZvcmNlSGVscGVyU2l6ZTohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6XCJvcmlnaW5hbFwiLGl0ZW1zOlwiPiAqXCIsb3BhY2l0eTohMSxwbGFjZWhvbGRlcjohMSxyZXZlcnQ6ITEsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNjb3BlOlwiZGVmYXVsdFwiLHRvbGVyYW5jZTpcImludGVyc2VjdFwiLHpJbmRleDoxZTMsYWN0aXZhdGU6bnVsbCxiZWZvcmVTdG9wOm51bGwsY2hhbmdlOm51bGwsZGVhY3RpdmF0ZTpudWxsLG91dDpudWxsLG92ZXI6bnVsbCxyZWNlaXZlOm51bGwscmVtb3ZlOm51bGwsc29ydDpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLHVwZGF0ZTpudWxsfSxfaXNPdmVyQXhpczpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQ+PWUmJmUraT50fSxfaXNGbG9hdGluZzpmdW5jdGlvbih0KXtyZXR1cm4vbGVmdHxyaWdodC8udGVzdCh0LmNzcyhcImZsb2F0XCIpKXx8L2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KHQuY3NzKFwiZGlzcGxheVwiKSl9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lckNhY2hlPXt9LHRoaXMuX2FkZENsYXNzKFwidWktc29ydGFibGVcIiksdGhpcy5yZWZyZXNoKCksdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpLHRoaXMucmVhZHk9ITB9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXt0aGlzLl9zdXBlcih0LGUpLFwiaGFuZGxlXCI9PT10JiZ0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKX0sX3NldEhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50LmZpbmQoXCIudWktc29ydGFibGUtaGFuZGxlXCIpLFwidWktc29ydGFibGUtaGFuZGxlXCIpLHQuZWFjaCh0aGlzLml0ZW1zLGZ1bmN0aW9uKCl7ZS5fYWRkQ2xhc3ModGhpcy5pbnN0YW5jZS5vcHRpb25zLmhhbmRsZT90aGlzLml0ZW0uZmluZCh0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlKTp0aGlzLml0ZW0sXCJ1aS1zb3J0YWJsZS1oYW5kbGVcIil9KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZURlc3Ryb3koKTtmb3IodmFyIHQ9dGhpcy5pdGVtcy5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLml0ZW1zW3RdLml0ZW0ucmVtb3ZlRGF0YSh0aGlzLndpZGdldE5hbWUrXCItaXRlbVwiKTtyZXR1cm4gdGhpc30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlLGkpe3ZhciBzPW51bGwsbj0hMSxvPXRoaXM7cmV0dXJuIHRoaXMucmV2ZXJ0aW5nPyExOnRoaXMub3B0aW9ucy5kaXNhYmxlZHx8XCJzdGF0aWNcIj09PXRoaXMub3B0aW9ucy50eXBlPyExOih0aGlzLl9yZWZyZXNoSXRlbXMoZSksdChlLnRhcmdldCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRhKHRoaXMsby53aWRnZXROYW1lK1wiLWl0ZW1cIik9PT1vPyhzPXQodGhpcyksITEpOnZvaWQgMH0pLHQuZGF0YShlLnRhcmdldCxvLndpZGdldE5hbWUrXCItaXRlbVwiKT09PW8mJihzPXQoZS50YXJnZXQpKSxzPyF0aGlzLm9wdGlvbnMuaGFuZGxlfHxpfHwodCh0aGlzLm9wdGlvbnMuaGFuZGxlLHMpLmZpbmQoXCIqXCIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PWUudGFyZ2V0JiYobj0hMCl9KSxuKT8odGhpcy5jdXJyZW50SXRlbT1zLHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksITApOiExOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuLG8sYT10aGlzLm9wdGlvbnM7aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGUpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSx0LmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6ZS5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDplLnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIiksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoXCJwb3NpdGlvblwiKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlKSx0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWSxhLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGEuY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxhLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLGEuY3Vyc29yJiZcImF1dG9cIiE9PWEuY3Vyc29yJiYobz10aGlzLmRvY3VtZW50LmZpbmQoXCJib2R5XCIpLHRoaXMuc3RvcmVkQ3Vyc29yPW8uY3NzKFwiY3Vyc29yXCIpLG8uY3NzKFwiY3Vyc29yXCIsYS5jdXJzb3IpLHRoaXMuc3RvcmVkU3R5bGVzaGVldD10KFwiPHN0eWxlPip7IGN1cnNvcjogXCIrYS5jdXJzb3IrXCIgIWltcG9ydGFudDsgfTwvc3R5bGU+XCIpLmFwcGVuZFRvKG8pKSxhLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoXCJvcGFjaXR5XCIpJiYodGhpcy5fc3RvcmVkT3BhY2l0eT10aGlzLmhlbHBlci5jc3MoXCJvcGFjaXR5XCIpKSx0aGlzLmhlbHBlci5jc3MoXCJvcGFjaXR5XCIsYS5vcGFjaXR5KSksYS56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIikmJih0aGlzLl9zdG9yZWRaSW5kZXg9dGhpcy5oZWxwZXIuY3NzKFwiekluZGV4XCIpKSx0aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIixhLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmXCJIVE1MXCIhPT10aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lJiYodGhpcy5vdmVyZmxvd09mZnNldD10aGlzLnNjcm9sbFBhcmVudC5vZmZzZXQoKSksdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5fcHJlc2VydmVIZWxwZXJQcm9wb3J0aW9uc3x8dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCFzKWZvcihuPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtuPj0wO24tLSl0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gdC51aS5kZG1hbmFnZXImJih0LnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLHQudWkuZGRtYW5hZ2VyJiYhYS5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGUpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIiksdGhpcy5fbW91c2VEcmFnKGUpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGE9dGhpcy5vcHRpb25zLHI9ITE7Zm9yKHRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIiksdGhpcy5sYXN0UG9zaXRpb25BYnN8fCh0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzKSx0aGlzLm9wdGlvbnMuc2Nyb2xsJiYodGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZcIkhUTUxcIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC1lLnBhZ2VZPGEuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK2Euc2Nyb2xsU3BlZWQ6ZS5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxhLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLWEuc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC1lLnBhZ2VYPGEuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrYS5zY3JvbGxTcGVlZDplLnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxhLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtYS5zY3JvbGxTcGVlZCkpOihlLnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCk8YS5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCktYS5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cuaGVpZ2h0KCktKGUucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSk8YS5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSthLnNjcm9sbFNwZWVkKSksZS5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKTxhLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLWEuc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LndpZHRoKCktKGUucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkpPGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSthLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmdC51aS5kZG1hbmFnZXImJiFhLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsZSkpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oXCJhYnNvbHV0ZVwiKSx0aGlzLm9wdGlvbnMuYXhpcyYmXCJ5XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8KHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0K1wicHhcIiksdGhpcy5vcHRpb25zLmF4aXMmJlwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fCh0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArXCJweFwiKSxpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0paWYocz10aGlzLml0ZW1zW2ldLG49cy5pdGVtWzBdLG89dGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKHMpLG8mJnMuaW5zdGFuY2U9PT10aGlzLmN1cnJlbnRDb250YWluZXImJm4hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLnBsYWNlaG9sZGVyWzE9PT1vP1wibmV4dFwiOlwicHJldlwiXSgpWzBdIT09biYmIXQuY29udGFpbnModGhpcy5wbGFjZWhvbGRlclswXSxuKSYmKFwic2VtaS1keW5hbWljXCI9PT10aGlzLm9wdGlvbnMudHlwZT8hdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sbik6ITApKXtpZih0aGlzLmRpcmVjdGlvbj0xPT09bz9cImRvd25cIjpcInVwXCIsXCJwb2ludGVyXCIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiYhdGhpcy5faW50ZXJzZWN0c1dpdGhTaWRlcyhzKSlicmVhazt0aGlzLl9yZWFycmFuZ2UoZSxzKSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx0aGlzLl91aUhhc2goKSk7YnJlYWt9cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKGUpLHQudWkuZGRtYW5hZ2VyJiZ0LnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsZSksdGhpcy5fdHJpZ2dlcihcInNvcnRcIixlLHRoaXMuX3VpSGFzaCgpKSx0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUsaSl7aWYoZSl7aWYodC51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLGUpLHRoaXMub3B0aW9ucy5yZXZlcnQpe3ZhciBzPXRoaXMsbj10aGlzLnBsYWNlaG9sZGVyLm9mZnNldCgpLG89dGhpcy5vcHRpb25zLmF4aXMsYT17fTtvJiZcInhcIiE9PW98fChhLmxlZnQ9bi5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0Kyh0aGlzLm9mZnNldFBhcmVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYm9keT8wOnRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbExlZnQpKSxvJiZcInlcIiE9PW98fChhLnRvcD1uLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKSksdGhpcy5yZXZlcnRpbmc9ITAsdCh0aGlzLmhlbHBlcikuYW5pbWF0ZShhLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsMTApfHw1MDAsZnVuY3Rpb24oKXtzLl9jbGVhcihlKX0pfWVsc2UgdGhpcy5fY2xlYXIoZSxpKTtyZXR1cm4hMX19LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAobmV3IHQuRXZlbnQoXCJtb3VzZXVwXCIse3RhcmdldDpudWxsfSkpLFwib3JpZ2luYWxcIj09PXRoaXMub3B0aW9ucy5oZWxwZXI/KHRoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUyksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5jdXJyZW50SXRlbSxcInVpLXNvcnRhYmxlLWhlbHBlclwiKSk6dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHZhciBlPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLmNvbnRhaW5lcnNbZV0uX3RyaWdnZXIoXCJkZWFjdGl2YXRlXCIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW2VdLl90cmlnZ2VyKFwib3V0XCIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyPTApfXJldHVybiB0aGlzLnBsYWNlaG9sZGVyJiYodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlJiZ0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksXCJvcmlnaW5hbFwiIT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLHQuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj90KHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6dCh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoZSYmZS5jb25uZWN0ZWQpLHM9W107cmV0dXJuIGU9ZXx8e30sdChpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9KHQoZS5pdGVtfHx0aGlzKS5hdHRyKGUuYXR0cmlidXRlfHxcImlkXCIpfHxcIlwiKS5tYXRjaChlLmV4cHJlc3Npb258fC8oLispW1xcLT1fXSguKykvKTtpJiZzLnB1c2goKGUua2V5fHxpWzFdK1wiW11cIikrXCI9XCIrKGUua2V5JiZlLmV4cHJlc3Npb24/aVsxXTppWzJdKSl9KSwhcy5sZW5ndGgmJmUua2V5JiZzLnB1c2goZS5rZXkrXCI9XCIpLHMuam9pbihcIiZcIil9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeShlJiZlLmNvbm5lY3RlZCkscz1bXTtyZXR1cm4gZT1lfHx7fSxpLmVhY2goZnVuY3Rpb24oKXtzLnB1c2godChlLml0ZW18fHRoaXMpLmF0dHIoZS5hdHRyaWJ1dGV8fFwiaWRcIil8fFwiXCIpfSksc30sX2ludGVyc2VjdHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMubGVmdCxpPWUrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxzPXRoaXMucG9zaXRpb25BYnMudG9wLG49cyt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxvPXQubGVmdCxhPW8rdC53aWR0aCxyPXQudG9wLGg9cit0LmhlaWdodCxsPXRoaXMub2Zmc2V0LmNsaWNrLnRvcCxjPXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdT1cInhcIj09PXRoaXMub3B0aW9ucy5heGlzfHxzK2w+ciYmaD5zK2wsZD1cInlcIj09PXRoaXMub3B0aW9ucy5heGlzfHxlK2M+byYmYT5lK2MscD11JiZkO3JldHVyblwicG9pbnRlclwiPT09dGhpcy5vcHRpb25zLnRvbGVyYW5jZXx8dGhpcy5vcHRpb25zLmZvcmNlUG9pbnRlckZvckNvbnRhaW5lcnN8fFwicG9pbnRlclwiIT09dGhpcy5vcHRpb25zLnRvbGVyYW5jZSYmdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nP1wid2lkdGhcIjpcImhlaWdodFwiXT50W3RoaXMuZmxvYXRpbmc/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJdP3A6ZSt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI+byYmYT5pLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmcyt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPnImJmg+bi10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKHQpe3ZhciBlLGkscz1cInhcIj09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCx0LmhlaWdodCksbj1cInlcIj09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LHQubGVmdCx0LndpZHRoKSxvPXMmJm47cmV0dXJuIG8/KGU9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksaT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpLHRoaXMuZmxvYXRpbmc/XCJyaWdodFwiPT09aXx8XCJkb3duXCI9PT1lPzI6MTplJiYoXCJkb3duXCI9PT1lPzI6MSkpOiExfSxfaW50ZXJzZWN0c1dpdGhTaWRlczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCt0LmhlaWdodC8yLHQuaGVpZ2h0KSxpPXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0K3Qud2lkdGgvMix0LndpZHRoKSxzPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLG49dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gdGhpcy5mbG9hdGluZyYmbj9cInJpZ2h0XCI9PT1uJiZpfHxcImxlZnRcIj09PW4mJiFpOnMmJihcImRvd25cIj09PXMmJmV8fFwidXBcIj09PXMmJiFlKX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gMCE9PXQmJih0PjA/XCJkb3duXCI6XCJ1cFwiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIDAhPT10JiYodD4wP1wicmlnaHRcIjpcImxlZnRcIil9LHJlZnJlc2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZnJlc2hJdGVtcyh0KSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzfSxfY29ubmVjdFdpdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuIHQuY29ubmVjdFdpdGguY29uc3RydWN0b3I9PT1TdHJpbmc/W3QuY29ubmVjdFdpdGhdOnQuY29ubmVjdFdpdGh9LF9nZXRJdGVtc0FzalF1ZXJ5OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXtyLnB1c2godGhpcyl9dmFyIHMsbixvLGEscj1bXSxoPVtdLGw9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihsJiZlKWZvcihzPWwubGVuZ3RoLTE7cz49MDtzLS0pZm9yKG89dChsW3NdLHRoaXMuZG9jdW1lbnRbMF0pLG49by5sZW5ndGgtMTtuPj0wO24tLSlhPXQuZGF0YShvW25dLHRoaXMud2lkZ2V0RnVsbE5hbWUpLGEmJmEhPT10aGlzJiYhYS5vcHRpb25zLmRpc2FibGVkJiZoLnB1c2goW3QuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudCk6dChhLm9wdGlvbnMuaXRlbXMsYS5lbGVtZW50KS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpLm5vdChcIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiKSxhXSk7Zm9yKGgucHVzaChbdC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KFwiLnVpLXNvcnRhYmxlLWhlbHBlclwiKS5ub3QoXCIudWktc29ydGFibGUtcGxhY2Vob2xkZXJcIiksdGhpc10pLHM9aC5sZW5ndGgtMTtzPj0wO3MtLSloW3NdWzBdLmVhY2goaSk7cmV0dXJuIHQocil9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0uZmluZChcIjpkYXRhKFwiK3RoaXMud2lkZ2V0TmFtZStcIi1pdGVtKVwiKTt0aGlzLml0ZW1zPXQuZ3JlcCh0aGlzLml0ZW1zLGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT0wO2UubGVuZ3RoPmk7aSsrKWlmKGVbaV09PT10Lml0ZW1bMF0pcmV0dXJuITE7cmV0dXJuITB9KX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbihlKXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIGkscyxuLG8sYSxyLGgsbCxjPXRoaXMuaXRlbXMsdT1bW3QuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudFswXSxlLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTp0KHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLHRoaXNdXSxkPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoZCYmdGhpcy5yZWFkeSlmb3IoaT1kLmxlbmd0aC0xO2k+PTA7aS0tKWZvcihuPXQoZFtpXSx0aGlzLmRvY3VtZW50WzBdKSxzPW4ubGVuZ3RoLTE7cz49MDtzLS0pbz10LmRhdGEobltzXSx0aGlzLndpZGdldEZ1bGxOYW1lKSxvJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmKHUucHVzaChbdC5pc0Z1bmN0aW9uKG8ub3B0aW9ucy5pdGVtcyk/by5vcHRpb25zLml0ZW1zLmNhbGwoby5lbGVtZW50WzBdLGUse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCksb10pLHRoaXMuY29udGFpbmVycy5wdXNoKG8pKTtmb3IoaT11Lmxlbmd0aC0xO2k+PTA7aS0tKWZvcihhPXVbaV1bMV0scj11W2ldWzBdLHM9MCxsPXIubGVuZ3RoO2w+cztzKyspaD10KHJbc10pLGguZGF0YSh0aGlzLndpZGdldE5hbWUrXCItaXRlbVwiLGEpLGMucHVzaCh7aXRlbTpoLGluc3RhbmNlOmEsd2lkdGg6MCxoZWlnaHQ6MCxsZWZ0OjAsdG9wOjB9KX0scmVmcmVzaFBvc2l0aW9uczpmdW5jdGlvbihlKXt0aGlzLmZsb2F0aW5nPXRoaXMuaXRlbXMubGVuZ3RoP1wieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5pdGVtc1swXS5pdGVtKTohMSx0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO3ZhciBpLHMsbixvO2ZvcihpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pcz10aGlzLml0ZW1zW2ldLHMuaW5zdGFuY2UhPT10aGlzLmN1cnJlbnRDb250YWluZXImJnRoaXMuY3VycmVudENvbnRhaW5lciYmcy5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXXx8KG49dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/dCh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxzLml0ZW0pOnMuaXRlbSxlfHwocy53aWR0aD1uLm91dGVyV2lkdGgoKSxzLmhlaWdodD1uLm91dGVySGVpZ2h0KCkpLG89bi5vZmZzZXQoKSxzLmxlZnQ9by5sZWZ0LHMudG9wPW8udG9wKTtpZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcihpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlvPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm9mZnNldCgpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0PW8ubGVmdCx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wPW8udG9wLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlckhlaWdodCgpO3JldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzO3ZhciBpLHM9ZS5vcHRpb25zO3MucGxhY2Vob2xkZXImJnMucGxhY2Vob2xkZXIuY29uc3RydWN0b3IhPT1TdHJpbmd8fChpPXMucGxhY2Vob2xkZXIscy5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBzPWUuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPXQoXCI8XCIrcytcIj5cIixlLmRvY3VtZW50WzBdKTtyZXR1cm4gZS5fYWRkQ2xhc3MobixcInVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIsaXx8ZS5jdXJyZW50SXRlbVswXS5jbGFzc05hbWUpLl9yZW1vdmVDbGFzcyhuLFwidWktc29ydGFibGUtaGVscGVyXCIpLFwidGJvZHlcIj09PXM/ZS5fY3JlYXRlVHJQbGFjZWhvbGRlcihlLmN1cnJlbnRJdGVtLmZpbmQoXCJ0clwiKS5lcSgwKSx0KFwiPHRyPlwiLGUuZG9jdW1lbnRbMF0pLmFwcGVuZFRvKG4pKTpcInRyXCI9PT1zP2UuX2NyZWF0ZVRyUGxhY2Vob2xkZXIoZS5jdXJyZW50SXRlbSxuKTpcImltZ1wiPT09cyYmbi5hdHRyKFwic3JjXCIsZS5jdXJyZW50SXRlbS5hdHRyKFwic3JjXCIpKSxpfHxuLmNzcyhcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSxufSx1cGRhdGU6ZnVuY3Rpb24odCxuKXsoIWl8fHMuZm9yY2VQbGFjZWhvbGRlclNpemUpJiYobi5oZWlnaHQoKXx8bi5oZWlnaHQoZS5jdXJyZW50SXRlbS5pbm5lckhlaWdodCgpLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1RvcFwiKXx8MCwxMCktcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoXCJwYWRkaW5nQm90dG9tXCIpfHwwLDEwKSksbi53aWR0aCgpfHxuLndpZHRoKGUuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ0xlZnRcIil8fDAsMTApLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1JpZ2h0XCIpfHwwLDEwKSkpfX0pLGUucGxhY2Vob2xkZXI9dChzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbChlLmVsZW1lbnQsZS5jdXJyZW50SXRlbSkpLGUuY3VycmVudEl0ZW0uYWZ0ZXIoZS5wbGFjZWhvbGRlcikscy5wbGFjZWhvbGRlci51cGRhdGUoZSxlLnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz10aGlzO2UuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dChcIjx0ZD4mIzE2MDs8L3RkPlwiLHMuZG9jdW1lbnRbMF0pLmF0dHIoXCJjb2xzcGFuXCIsdCh0aGlzKS5hdHRyKFwiY29sc3BhblwiKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGEscixoLGwsYyx1LGQ9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCF0LmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGQmJnQuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sZC5lbGVtZW50WzBdKSljb250aW51ZTtkPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcihcIm91dFwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZihkKWlmKDE9PT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoKXRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyfHwodGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xKTtlbHNle2ZvcihuPTFlNCxvPW51bGwsYz1kLmZsb2F0aW5nfHx0aGlzLl9pc0Zsb2F0aW5nKHRoaXMuY3VycmVudEl0ZW0pLGE9Yz9cImxlZnRcIjpcInRvcFwiLHI9Yz9cIndpZHRoXCI6XCJoZWlnaHRcIix1PWM/XCJwYWdlWFwiOlwicGFnZVlcIixzPXRoaXMuaXRlbXMubGVuZ3RoLTE7cz49MDtzLS0pdC5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW3NdLml0ZW1bMF0pJiZ0aGlzLml0ZW1zW3NdLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYoaD10aGlzLml0ZW1zW3NdLml0ZW0ub2Zmc2V0KClbYV0sbD0hMSxlW3VdLWg+dGhpcy5pdGVtc1tzXVtyXS8yJiYobD0hMCksbj5NYXRoLmFicyhlW3VdLWgpJiYobj1NYXRoLmFicyhlW3VdLWgpLG89dGhpcy5pdGVtc1tzXSx0aGlzLmRpcmVjdGlvbj1sP1widXBcIjpcImRvd25cIikpO2lmKCFvJiYhdGhpcy5vcHRpb25zLmRyb3BPbkVtcHR5KXJldHVybjtpZih0aGlzLmN1cnJlbnRDb250YWluZXI9PT10aGlzLmNvbnRhaW5lcnNbcF0pcmV0dXJuIHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyfHwodGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyPTEpLHZvaWQgMDtvP3RoaXMuX3JlYXJyYW5nZShlLG8sbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKGUsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLGUsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcihcImNoYW5nZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmN1cnJlbnRDb250YWluZXI9dGhpcy5jb250YWluZXJzW3BdLHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlci51cGRhdGUodGhpcy5jdXJyZW50Q29udGFpbmVyLHRoaXMucGxhY2Vob2xkZXIpLHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcihcIm92ZXJcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dC5pc0Z1bmN0aW9uKGkuaGVscGVyKT90KGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbZSx0aGlzLmN1cnJlbnRJdGVtXSkpOlwiY2xvbmVcIj09PWkuaGVscGVyP3RoaXMuY3VycmVudEl0ZW0uY2xvbmUoKTp0aGlzLmN1cnJlbnRJdGVtO3JldHVybiBzLnBhcmVudHMoXCJib2R5XCIpLmxlbmd0aHx8dChcInBhcmVudFwiIT09aS5hcHBlbmRUbz9pLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoc1swXSksc1swXT09PXRoaXMuY3VycmVudEl0ZW1bMF0mJih0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKFwicG9zaXRpb25cIiksdG9wOnRoaXMuY3VycmVudEl0ZW0uY3NzKFwidG9wXCIpLGxlZnQ6dGhpcy5jdXJyZW50SXRlbS5jc3MoXCJsZWZ0XCIpfSksKCFzWzBdLnN0eWxlLndpZHRofHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSwoIXNbMF0uc3R5bGUuaGVpZ2h0fHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLHN9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKGUpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KFwiIFwiKSksdC5pc0FycmF5KGUpJiYoZT17bGVmdDorZVswXSx0b3A6K2VbMV18fDB9KSxcImxlZnRcImluIGUmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PWUubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksXCJyaWdodFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1lLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInRvcFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD1lLnRvcCt0aGlzLm1hcmdpbnMudG9wKSxcImJvdHRvbVwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC1lLmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3JldHVyblwiYWJzb2x1dGVcIj09PXRoaXMuY3NzUG9zaXRpb24mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJihlLmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSxlLnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpLCh0aGlzLm9mZnNldFBhcmVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYm9keXx8dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZSYmXCJodG1sXCI9PT10aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJnQudWkuaWUpJiYoZT17dG9wOjAsbGVmdDowfSkse3RvcDplLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKSxsZWZ0OmUubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZihcInJlbGF0aXZlXCI9PT10aGlzLmNzc1Bvc2l0aW9uKXt2YXIgdD10aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7cmV0dXJue3RvcDp0LnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKFwidG9wXCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDp0LmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcImxlZnRcIiksMTApfHwwKSt0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCl9fXJldHVybnt0b3A6MCxsZWZ0OjB9fSxfY2FjaGVNYXJnaW5zOmZ1bmN0aW9uKCl7dGhpcy5tYXJnaW5zPXtsZWZ0OnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKFwibWFyZ2luTGVmdFwiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKFwibWFyZ2luVG9wXCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG49dGhpcy5vcHRpb25zO1wicGFyZW50XCI9PT1uLmNvbnRhaW5tZW50JiYobi5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKSwoXCJkb2N1bWVudFwiPT09bi5jb250YWlubWVudHx8XCJ3aW5kb3dcIj09PW4uY29udGFpbm1lbnQpJiYodGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsXCJkb2N1bWVudFwiPT09bi5jb250YWlubWVudD90aGlzLmRvY3VtZW50LndpZHRoKCk6dGhpcy53aW5kb3cud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LChcImRvY3VtZW50XCI9PT1uLmNvbnRhaW5tZW50P3RoaXMuZG9jdW1lbnQuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQ6dGhpcy53aW5kb3cuaGVpZ2h0KCl8fHRoaXMuZG9jdW1lbnRbMF0uYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0pLC9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdChuLmNvbnRhaW5tZW50KXx8KGU9dChuLmNvbnRhaW5tZW50KVswXSxpPXQobi5jb250YWlubWVudCkub2Zmc2V0KCkscz1cImhpZGRlblwiIT09dChlKS5jc3MoXCJvdmVyZmxvd1wiKSx0aGlzLmNvbnRhaW5tZW50PVtpLmxlZnQrKHBhcnNlSW50KHQoZSkuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ0xlZnRcIiksMTApfHwwKS10aGlzLm1hcmdpbnMubGVmdCxpLnRvcCsocGFyc2VJbnQodChlKS5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludCh0KGUpLmNzcyhcInBhZGRpbmdUb3BcIiksMTApfHwwKS10aGlzLm1hcmdpbnMudG9wLGkubGVmdCsocz9NYXRoLm1heChlLnNjcm9sbFdpZHRoLGUub2Zmc2V0V2lkdGgpOmUub2Zmc2V0V2lkdGgpLShwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludCh0KGUpLmNzcyhcInBhZGRpbmdSaWdodFwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHM/TWF0aC5tYXgoZS5zY3JvbGxIZWlnaHQsZS5vZmZzZXRIZWlnaHQpOmUub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQodChlKS5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludCh0KGUpLmNzcyhcInBhZGRpbmdCb3R0b21cIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSl9LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbihlLGkpe2l8fChpPXRoaXMucG9zaXRpb24pO3ZhciBzPVwiYWJzb2x1dGVcIj09PWU/MTotMSxuPVwiYWJzb2x1dGVcIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsbz0vKGh0bWx8Ym9keSkvaS50ZXN0KG5bMF0udGFnTmFtZSk7cmV0dXJue3RvcDppLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3Aqcyt0aGlzLm9mZnNldC5wYXJlbnQudG9wKnMtKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOm8/MDpuLnNjcm9sbFRvcCgpKSpzLGxlZnQ6aS5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqcyt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpzLShcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6bz8wOm4uc2Nyb2xsTGVmdCgpKSpzfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxvPWUucGFnZVgsYT1lLnBhZ2VZLHI9XCJhYnNvbHV0ZVwiIT09dGhpcy5jc3NQb3NpdGlvbnx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZ0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxoPS8oaHRtbHxib2R5KS9pLnRlc3QoclswXS50YWdOYW1lKTtyZXR1cm5cInJlbGF0aXZlXCIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5vZmZzZXRQYXJlbnRbMF18fCh0aGlzLm9mZnNldC5yZWxhdGl2ZT10aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpKSx0aGlzLm9yaWdpbmFsUG9zaXRpb24mJih0aGlzLmNvbnRhaW5tZW50JiYoZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihvPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKGE9dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLGUucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYobz10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihhPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksbi5ncmlkJiYoaT10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoYS10aGlzLm9yaWdpbmFsUGFnZVkpL24uZ3JpZFsxXSkqbi5ncmlkWzFdLGE9dGhpcy5jb250YWlubWVudD9pLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXSYmaS10aGlzLm9mZnNldC5jbGljay50b3A8PXRoaXMuY29udGFpbm1lbnRbM10/aTppLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXT9pLW4uZ3JpZFsxXTppK24uZ3JpZFsxXTppLHM9dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKG8tdGhpcy5vcmlnaW5hbFBhZ2VYKS9uLmdyaWRbMF0pKm4uZ3JpZFswXSxvPXRoaXMuY29udGFpbm1lbnQ/cy10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj10aGlzLmNvbnRhaW5tZW50WzBdJiZzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8PXRoaXMuY29udGFpbm1lbnRbMl0/czpzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0/cy1uLmdyaWRbMF06cytuLmdyaWRbMF06cykpLHt0b3A6YS10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmg/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0Om8tdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aD8wOnIuc2Nyb2xsTGVmdCgpKX19LF9yZWFycmFuZ2U6ZnVuY3Rpb24odCxlLGkscyl7aT9pWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pOmUuaXRlbVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyWzBdLFwiZG93blwiPT09dGhpcy5kaXJlY3Rpb24/ZS5pdGVtWzBdOmUuaXRlbVswXS5uZXh0U2libGluZyksdGhpcy5jb3VudGVyPXRoaXMuY291bnRlcj8rK3RoaXMuY291bnRlcjoxO3ZhciBuPXRoaXMuY291bnRlcjtcclxudGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtuPT09dGhpcy5jb3VudGVyJiZ0aGlzLnJlZnJlc2hQb3NpdGlvbnMoIXMpfSl9LF9jbGVhcjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlLGkpe3JldHVybiBmdW5jdGlvbihzKXtpLl90cmlnZ2VyKHQscyxlLl91aUhhc2goZSkpfX10aGlzLnJldmVydGluZz0hMTt2YXIgcyxuPVtdO2lmKCF0aGlzLl9ub0ZpbmFsU29ydCYmdGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKS5sZW5ndGgmJnRoaXMucGxhY2Vob2xkZXIuYmVmb3JlKHRoaXMuY3VycmVudEl0ZW0pLHRoaXMuX25vRmluYWxTb3J0PW51bGwsdGhpcy5oZWxwZXJbMF09PT10aGlzLmN1cnJlbnRJdGVtWzBdKXtmb3IocyBpbiB0aGlzLl9zdG9yZWRDU1MpKFwiYXV0b1wiPT09dGhpcy5fc3RvcmVkQ1NTW3NdfHxcInN0YXRpY1wiPT09dGhpcy5fc3RvcmVkQ1NTW3NdKSYmKHRoaXMuX3N0b3JlZENTU1tzXT1cIlwiKTt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuY3VycmVudEl0ZW0sXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodGhpcy5mcm9tT3V0c2lkZSYmIWUmJm4ucHVzaChmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyKFwicmVjZWl2ZVwiLHQsdGhpcy5fdWlIYXNoKHRoaXMuZnJvbU91dHNpZGUpKX0pLCF0aGlzLmZyb21PdXRzaWRlJiZ0aGlzLmRvbVBvc2l0aW9uLnByZXY9PT10aGlzLmN1cnJlbnRJdGVtLnByZXYoKS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpWzBdJiZ0aGlzLmRvbVBvc2l0aW9uLnBhcmVudD09PXRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF18fGV8fG4ucHVzaChmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsdCx0aGlzLl91aUhhc2goKSl9KSx0aGlzIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYoZXx8KG4ucHVzaChmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsdCx0aGlzLl91aUhhc2goKSl9KSxuLnB1c2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuX3RyaWdnZXIoXCJyZWNlaXZlXCIsZSx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLG4ucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5fdHJpZ2dlcihcInVwZGF0ZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSkpLHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKWV8fG4ucHVzaChpKFwiZGVhY3RpdmF0ZVwiLHRoaXMsdGhpcy5jb250YWluZXJzW3NdKSksdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXImJihuLnB1c2goaShcIm91dFwiLHRoaXMsdGhpcy5jb250YWluZXJzW3NdKSksdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYodGhpcy5zdG9yZWRDdXJzb3ImJih0aGlzLmRvY3VtZW50LmZpbmQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLHRoaXMuc3RvcmVkQ3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQucmVtb3ZlKCkpLHRoaXMuX3N0b3JlZE9wYWNpdHkmJnRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIix0aGlzLl9zdG9yZWRPcGFjaXR5KSx0aGlzLl9zdG9yZWRaSW5kZXgmJnRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiLFwiYXV0b1wiPT09dGhpcy5fc3RvcmVkWkluZGV4P1wiXCI6dGhpcy5fc3RvcmVkWkluZGV4KSx0aGlzLmRyYWdnaW5nPSExLGV8fHRoaXMuX3RyaWdnZXIoXCJiZWZvcmVTdG9wXCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8KHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCksIWUpe2ZvcihzPTA7bi5sZW5ndGg+cztzKyspbltzXS5jYWxsKHRoaXMsdCk7dGhpcy5fdHJpZ2dlcihcInN0b3BcIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfSxfdHJpZ2dlcjpmdW5jdGlvbigpe3QuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbihlKXt2YXIgaT1lfHx0aGlzO3JldHVybntoZWxwZXI6aS5oZWxwZXIscGxhY2Vob2xkZXI6aS5wbGFjZWhvbGRlcnx8dChbXSkscG9zaXRpb246aS5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOmkub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6aS5wb3NpdGlvbkFicyxpdGVtOmkuY3VycmVudEl0ZW0sc2VuZGVyOmU/ZS5lbGVtZW50Om51bGx9fX0pLHQud2lkZ2V0KFwidWkuc3Bpbm5lclwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8aW5wdXQ+XCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzcGluXCIsb3B0aW9uczp7Y2xhc3Nlczp7XCJ1aS1zcGlubmVyXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1zcGlubmVyLWRvd25cIjpcInVpLWNvcm5lci1iclwiLFwidWktc3Bpbm5lci11cFwiOlwidWktY29ybmVyLXRyXCJ9LGN1bHR1cmU6bnVsbCxpY29uczp7ZG93bjpcInVpLWljb24tdHJpYW5nbGUtMS1zXCIsdXA6XCJ1aS1pY29uLXRyaWFuZ2xlLTEtblwifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oXCJtYXhcIix0aGlzLm9wdGlvbnMubWF4KSx0aGlzLl9zZXRPcHRpb24oXCJtaW5cIix0aGlzLm9wdGlvbnMubWluKSx0aGlzLl9zZXRPcHRpb24oXCJzdGVwXCIsdGhpcy5vcHRpb25zLnN0ZXApLFwiXCIhPT10aGlzLnZhbHVlKCkmJnRoaXMuX3ZhbHVlKHRoaXMuZWxlbWVudC52YWwoKSwhMCksdGhpcy5fZHJhdygpLHRoaXMuX29uKHRoaXMuX2V2ZW50cyksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImF1dG9jb21wbGV0ZVwiKX19KX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zdXBlcigpLGk9dGhpcy5lbGVtZW50O3JldHVybiB0LmVhY2goW1wibWluXCIsXCJtYXhcIixcInN0ZXBcIl0sZnVuY3Rpb24odCxzKXt2YXIgbj1pLmF0dHIocyk7bnVsbCE9biYmbi5sZW5ndGgmJihlW3NdPW4pfSksZX0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLl9zdGFydCh0KSYmdGhpcy5fa2V5ZG93bih0KSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDpcIl9zdG9wXCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYW5jZWxCbHVyPyhkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHZvaWQgMCk6KHRoaXMuX3N0b3AoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5wcmV2aW91cyE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLHQpLHZvaWQgMCl9LG1vdXNld2hlZWw6ZnVuY3Rpb24odCxlKXtpZihlKXtpZighdGhpcy5zcGlubmluZyYmIXRoaXMuX3N0YXJ0KHQpKXJldHVybiExO3RoaXMuX3NwaW4oKGU+MD8xOi0xKSp0aGlzLm9wdGlvbnMuc3RlcCx0KSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMubW91c2V3aGVlbFRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5zcGlubmluZyYmdGhpcy5fc3RvcCh0KX0sMTAwKSx0LnByZXZlbnREZWZhdWx0KCl9fSxcIm1vdXNlZG93biAudWktc3Bpbm5lci1idXR0b25cIjpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKTtlfHwodGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXN9KSl9dmFyIHM7cz10aGlzLmVsZW1lbnRbMF09PT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pP3RoaXMucHJldmlvdXM6dGhpcy5lbGVtZW50LnZhbCgpLGUucHJldmVudERlZmF1bHQoKSxpLmNhbGwodGhpcyksdGhpcy5jYW5jZWxCbHVyPSEwLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cixpLmNhbGwodGhpcyl9KSx0aGlzLl9zdGFydChlKSE9PSExJiZ0aGlzLl9yZXBlYXQobnVsbCx0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zcGlubmVyLXVwXCIpPzE6LTEsZSl9LFwibW91c2V1cCAudWktc3Bpbm5lci1idXR0b25cIjpcIl9zdG9wXCIsXCJtb3VzZWVudGVyIC51aS1zcGlubmVyLWJ1dHRvblwiOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIik/dGhpcy5fc3RhcnQoZSk9PT0hMT8hMToodGhpcy5fcmVwZWF0KG51bGwsdChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKFwidWktc3Bpbm5lci11cFwiKT8xOi0xLGUpLHZvaWQgMCk6dm9pZCAwfSxcIm1vdXNlbGVhdmUgLnVpLXNwaW5uZXItYnV0dG9uXCI6XCJfc3RvcFwifSxfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMudWlTcGlubmVyPXRoaXMuZWxlbWVudC5hdHRyKFwiYXV0b2NvbXBsZXRlXCIsXCJvZmZcIikud3JhcChcIjxzcGFuPlwiKS5wYXJlbnQoKS5hcHBlbmQoXCI8YT48L2E+PGE+PC9hPlwiKX0sX2RyYXc6ZnVuY3Rpb24oKXt0aGlzLl9lbmhhbmNlKCksdGhpcy5fYWRkQ2xhc3ModGhpcy51aVNwaW5uZXIsXCJ1aS1zcGlubmVyXCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1zcGlubmVyLWlucHV0XCIpLHRoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwic3BpbmJ1dHRvblwiKSx0aGlzLmJ1dHRvbnM9dGhpcy51aVNwaW5uZXIuY2hpbGRyZW4oXCJhXCIpLmF0dHIoXCJ0YWJJbmRleFwiLC0xKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwhMCkuYnV0dG9uKHtjbGFzc2VzOntcInVpLWJ1dHRvblwiOlwiXCJ9fSksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5idXR0b25zLFwidWktY29ybmVyLWFsbFwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmJ1dHRvbnMuZmlyc3QoKSxcInVpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItdXBcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5idXR0b25zLmxhc3QoKSxcInVpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93blwiKSx0aGlzLmJ1dHRvbnMuZmlyc3QoKS5idXR0b24oe2ljb246dGhpcy5vcHRpb25zLmljb25zLnVwLHNob3dMYWJlbDohMX0pLHRoaXMuYnV0dG9ucy5sYXN0KCkuYnV0dG9uKHtpY29uOnRoaXMub3B0aW9ucy5pY29ucy5kb3duLHNob3dMYWJlbDohMX0pLHRoaXMuYnV0dG9ucy5oZWlnaHQoKT5NYXRoLmNlaWwoLjUqdGhpcy51aVNwaW5uZXIuaGVpZ2h0KCkpJiZ0aGlzLnVpU3Bpbm5lci5oZWlnaHQoKT4wJiZ0aGlzLnVpU3Bpbm5lci5oZWlnaHQodGhpcy51aVNwaW5uZXIuaGVpZ2h0KCkpfSxfa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMscz10LnVpLmtleUNvZGU7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSBzLlVQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwxLGUpLCEwO2Nhc2Ugcy5ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtMSxlKSwhMDtjYXNlIHMuUEFHRV9VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsaS5wYWdlLGUpLCEwO2Nhc2Ugcy5QQUdFX0RPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC1pLnBhZ2UsZSksITB9cmV0dXJuITF9LF9zdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zcGlubmluZ3x8dGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsdCkhPT0hMT8odGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApOiExfSxfcmVwZWF0OmZ1bmN0aW9uKHQsZSxpKXt0PXR8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCxlLGkpfSx0KSx0aGlzLl9zcGluKGUqdGhpcy5vcHRpb25zLnN0ZXAsaSl9LF9zcGluOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxpPXRoaXMuX2FkanVzdFZhbHVlKGkrdCp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksdGhpcy5zcGlubmluZyYmdGhpcy5fdHJpZ2dlcihcInNwaW5cIixlLHt2YWx1ZTppfSk9PT0hMXx8KHRoaXMuX3ZhbHVlKGkpLHRoaXMuY291bnRlcisrKX0sX2luY3JlbWVudDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuaW5jcmVtZW50YWw7cmV0dXJuIGk/dC5pc0Z1bmN0aW9uKGkpP2koZSk6TWF0aC5mbG9vcihlKmUqZS81ZTQtZSplLzUwMCsxNyplLzIwMCsxKToxfSxfcHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLnN0ZXApO3JldHVybiBudWxsIT09dGhpcy5vcHRpb25zLm1pbiYmKHQ9TWF0aC5tYXgodCx0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMubWluKSkpLHR9LF9wcmVjaXNpb25PZjpmdW5jdGlvbih0KXt2YXIgZT1cIlwiK3QsaT1lLmluZGV4T2YoXCIuXCIpO3JldHVybi0xPT09aT8wOmUubGVuZ3RoLWktMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGkscz10aGlzLm9wdGlvbnM7cmV0dXJuIGU9bnVsbCE9PXMubWluP3MubWluOjAsaT10LWUsaT1NYXRoLnJvdW5kKGkvcy5zdGVwKSpzLnN0ZXAsdD1lK2ksdD1wYXJzZUZsb2F0KHQudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLG51bGwhPT1zLm1heCYmdD5zLm1heD9zLm1heDpudWxsIT09cy5taW4mJnMubWluPnQ/cy5taW46dH0sX3N0b3A6ZnVuY3Rpb24odCl7dGhpcy5zcGlubmluZyYmKGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcihcInN0b3BcIix0KSl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG47cmV0dXJuXCJjdWx0dXJlXCI9PT10fHxcIm51bWJlckZvcm1hdFwiPT09dD8oaT10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpLHRoaXMub3B0aW9uc1t0XT1lLHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KGkpKSx2b2lkIDApOigoXCJtYXhcIj09PXR8fFwibWluXCI9PT10fHxcInN0ZXBcIj09PXQpJiZcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5fcGFyc2UoZSkpLFwiaWNvbnNcIj09PXQmJihzPXRoaXMuYnV0dG9ucy5maXJzdCgpLmZpbmQoXCIudWktaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhzLG51bGwsdGhpcy5vcHRpb25zLmljb25zLnVwKSx0aGlzLl9hZGRDbGFzcyhzLG51bGwsZS51cCksbj10aGlzLmJ1dHRvbnMubGFzdCgpLmZpbmQoXCIudWktaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhuLG51bGwsdGhpcy5vcHRpb25zLmljb25zLmRvd24pLHRoaXMuX2FkZENsYXNzKG4sbnVsbCxlLmRvd24pKSx0aGlzLl9zdXBlcih0LGUpLHZvaWQgMCl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLnVpU3Bpbm5lcixudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwhIXQpLHRoaXMuYnV0dG9ucy5idXR0b24odD9cImRpc2FibGVcIjpcImVuYWJsZVwiKX0sX3NldE9wdGlvbnM6cihmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KX0pLF9wYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXQmJih0PXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQodCwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K3QpLFwiXCI9PT10fHxpc05hTih0KT9udWxsOnR9LF9mb3JtYXQ6ZnVuY3Rpb24odCl7cmV0dXJuXCJcIj09PXQ/XCJcIjp3aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5mb3JtYXQodCx0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LHRoaXMub3B0aW9ucy5jdWx0dXJlKTp0fSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtaW5cIjp0aGlzLm9wdGlvbnMubWluLFwiYXJpYS12YWx1ZW1heFwiOnRoaXMub3B0aW9ucy5tYXgsXCJhcmlhLXZhbHVlbm93XCI6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0pfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZSgpO3JldHVybiBudWxsPT09dD8hMTp0PT09dGhpcy5fYWRqdXN0VmFsdWUodCl9LF92YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpO1wiXCIhPT10JiYoaT10aGlzLl9wYXJzZSh0KSxudWxsIT09aSYmKGV8fChpPXRoaXMuX2FkanVzdFZhbHVlKGkpKSx0PXRoaXMuX2Zvcm1hdChpKSkpLHRoaXMuZWxlbWVudC52YWwodCksdGhpcy5fcmVmcmVzaCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwhMSkucmVtb3ZlQXR0cihcImF1dG9jb21wbGV0ZSByb2xlIGFyaWEtdmFsdWVtaW4gYXJpYS12YWx1ZW1heCBhcmlhLXZhbHVlbm93XCIpLHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCl9LHN0ZXBVcDpyKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBVcCh0KX0pLF9zdGVwVXA6ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKHR8fDEpKnRoaXMub3B0aW9ucy5zdGVwKSx0aGlzLl9zdG9wKCkpfSxzdGVwRG93bjpyKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBEb3duKHQpfSksX3N0ZXBEb3duOmZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0KCkmJih0aGlzLl9zcGluKCh0fHwxKSotdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHBhZ2VVcDpyKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBVcCgodHx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSkscGFnZURvd246cihmdW5jdGlvbih0KXt0aGlzLl9zdGVwRG93bigodHx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSksdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodGhpcy5fdmFsdWUpLmNhbGwodGhpcyx0KSx2b2lkIDApOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpU3Bpbm5lcn19KSx0LnVpQmFja0NvbXBhdCE9PSExJiZ0LndpZGdldChcInVpLnNwaW5uZXJcIix0LnVpLnNwaW5uZXIse19lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy51aVNwaW5uZXI9dGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSl9LF91aVNwaW5uZXJIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuXCI8c3Bhbj5cIn0sX2J1dHRvbkh0bWw6ZnVuY3Rpb24oKXtyZXR1cm5cIjxhPjwvYT48YT48L2E+XCJ9fSksdC51aS5zcGlubmVyLHQud2lkZ2V0KFwidWkudGFic1wiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVsYXk6MzAwLG9wdGlvbnM6e2FjdGl2ZTpudWxsLGNsYXNzZXM6e1widWktdGFic1wiOlwidWktY29ybmVyLWFsbFwiLFwidWktdGFicy1uYXZcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXRhYnMtcGFuZWxcIjpcInVpLWNvcm5lci1ib3R0b21cIixcInVpLXRhYnMtdGFiXCI6XCJ1aS1jb3JuZXItdG9wXCJ9LGNvbGxhcHNpYmxlOiExLGV2ZW50OlwiY2xpY2tcIixoZWlnaHRTdHlsZTpcImNvbnRlbnRcIixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfaXNMb2NhbDpmdW5jdGlvbigpe3ZhciB0PS8jLiokLztyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGkscztpPWUuaHJlZi5yZXBsYWNlKHQsXCJcIikscz1sb2NhdGlvbi5ocmVmLnJlcGxhY2UodCxcIlwiKTt0cnl7aT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2gobil7fXRyeXtzPWRlY29kZVVSSUNvbXBvbmVudChzKX1jYXRjaChuKXt9cmV0dXJuIGUuaGFzaC5sZW5ndGg+MSYmaT09PXN9fSgpLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLl9hZGRDbGFzcyhcInVpLXRhYnNcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl90b2dnbGVDbGFzcyhcInVpLXRhYnMtY29sbGFwc2libGVcIixudWxsLGkuY29sbGFwc2libGUpLHRoaXMuX3Byb2Nlc3NUYWJzKCksaS5hY3RpdmU9dGhpcy5faW5pdGlhbEFjdGl2ZSgpLHQuaXNBcnJheShpLmRpc2FibGVkKSYmKGkuZGlzYWJsZWQ9dC51bmlxdWUoaS5kaXNhYmxlZC5jb25jYXQodC5tYXAodGhpcy50YWJzLmZpbHRlcihcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSxmdW5jdGlvbih0KXtyZXR1cm4gZS50YWJzLmluZGV4KHQpfSkpKS5zb3J0KCkpLHRoaXMuYWN0aXZlPXRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKTp0KCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKGkuYWN0aXZlKX0sX2luaXRpYWxBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMuYWN0aXZlLGk9dGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLHM9bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7cmV0dXJuIG51bGw9PT1lJiYocyYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oaSxuKXtyZXR1cm4gdChuKS5hdHRyKFwiYXJpYS1jb250cm9sc1wiKT09PXM/KGU9aSwhMSk6dm9pZCAwfSksbnVsbD09PWUmJihlPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKFwiLnVpLXRhYnMtYWN0aXZlXCIpKSksKG51bGw9PT1lfHwtMT09PWUpJiYoZT10aGlzLnRhYnMubGVuZ3RoPzA6ITEpKSxlIT09ITEmJihlPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZXEoZSkpLC0xPT09ZSYmKGU9aT8hMTowKSksIWkmJmU9PT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aCYmKGU9MCksZX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybnt0YWI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKTp0KCl9fSxfdGFiS2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaT10KHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpLmNsb3Nlc3QoXCJsaVwiKSxzPXRoaXMudGFicy5pbmRleChpKSxuPSEwO2lmKCF0aGlzLl9oYW5kbGVQYWdlTmF2KGUpKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5SSUdIVDpjYXNlIHQudWkua2V5Q29kZS5ET1dOOnMrKzticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDpjYXNlIHQudWkua2V5Q29kZS5MRUZUOm49ITEscy0tO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVORDpzPXRoaXMuYW5jaG9ycy5sZW5ndGgtMTticmVhaztjYXNlIHQudWkua2V5Q29kZS5IT01FOnM9MDticmVhaztjYXNlIHQudWkua2V5Q29kZS5TUEFDRTpyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHRoaXMuX2FjdGl2YXRlKHMpLHZvaWQgMDtjYXNlIHQudWkua2V5Q29kZS5FTlRFUjpyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHRoaXMuX2FjdGl2YXRlKHM9PT10aGlzLm9wdGlvbnMuYWN0aXZlPyExOnMpLHZvaWQgMDtkZWZhdWx0OnJldHVybn1lLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZykscz10aGlzLl9mb2N1c05leHRUYWIocyxuKSxlLmN0cmxLZXl8fGUubWV0YUtleXx8KGkuYXR0cihcImFyaWEtc2VsZWN0ZWRcIixcImZhbHNlXCIpLHRoaXMudGFicy5lcShzKS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLFwidHJ1ZVwiKSx0aGlzLmFjdGl2YXRpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLm9wdGlvbihcImFjdGl2ZVwiLHMpfSx0aGlzLmRlbGF5KSl9fSxfcGFuZWxLZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZVBhZ2VOYXYoZSl8fGUuY3RybEtleSYmZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlVQJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlLnRyaWdnZXIoXCJmb2N1c1wiKSl9LF9oYW5kbGVQYWdlTmF2OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFsdEtleSYmZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlBBR0VfVVA/KHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlLTEsITEpKSwhMCk6ZS5hbHRLZXkmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5QQUdFX0RPV04/KHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlKzEsITApKSwhMCk6dm9pZCAwfSxfZmluZE5leHRUYWI6ZnVuY3Rpb24oZSxpKXtmdW5jdGlvbiBzKCl7cmV0dXJuIGU+biYmKGU9MCksMD5lJiYoZT1uKSxlfWZvcih2YXIgbj10aGlzLnRhYnMubGVuZ3RoLTE7LTEhPT10LmluQXJyYXkocygpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCk7KWU9aT9lKzE6ZS0xO3JldHVybiBlfSxfZm9jdXNOZXh0VGFiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9dGhpcy5fZmluZE5leHRUYWIodCxlKSx0aGlzLnRhYnMuZXEodCkudHJpZ2dlcihcImZvY3VzXCIpLHR9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm5cImFjdGl2ZVwiPT09dD8odGhpcy5fYWN0aXZhdGUoZSksdm9pZCAwKToodGhpcy5fc3VwZXIodCxlKSxcImNvbGxhcHNpYmxlXCI9PT10JiYodGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS10YWJzLWNvbGxhcHNpYmxlXCIsbnVsbCxlKSxlfHx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITF8fHRoaXMuX2FjdGl2YXRlKDApKSxcImV2ZW50XCI9PT10JiZ0aGlzLl9zZXR1cEV2ZW50cyhlKSxcImhlaWdodFN0eWxlXCI9PT10JiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKGUpLHZvaWQgMCl9LF9zYW5pdGl6ZVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0P3QucmVwbGFjZSgvWyFcIiQlJicoKSorLC5cXC86Ozw9Pj9AXFxbXFxdXFxeYHt8fX5dL2csXCJcXFxcJCZcIik6XCJcIn0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyxpPXRoaXMudGFibGlzdC5jaGlsZHJlbihcIjpoYXMoYVtocmVmXSlcIik7ZS5kaXNhYmxlZD10Lm1hcChpLmZpbHRlcihcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pbmRleCh0KX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksZS5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZS5sZW5ndGgmJiF0LmNvbnRhaW5zKHRoaXMudGFibGlzdFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy50YWJzLmxlbmd0aD09PWUuZGlzYWJsZWQubGVuZ3RoPyhlLmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT10KCkpOnRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZpbmROZXh0VGFiKE1hdGgubWF4KDAsZS5hY3RpdmUtMSksITEpKTplLmFjdGl2ZT10aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpOihlLmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT10KCkpLHRoaXMuX3JlZnJlc2goKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3NldHVwRXZlbnRzKHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLHRoaXMudGFicy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscy5ub3QodGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpKS5oaWRlKCkuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSksdGhpcy5hY3RpdmUubGVuZ3RoPyh0aGlzLmFjdGl2ZS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcInRydWVcIixcImFyaWEtZXhwYW5kZWRcIjpcInRydWVcIix0YWJJbmRleDowfSksdGhpcy5fYWRkQ2xhc3ModGhpcy5hY3RpdmUsXCJ1aS10YWJzLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKS5zaG93KCkuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIn0pKTp0aGlzLnRhYnMuZXEoMCkuYXR0cihcInRhYkluZGV4XCIsMCl9LF9wcm9jZXNzVGFiczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT10aGlzLnRhYnMscz10aGlzLmFuY2hvcnMsbj10aGlzLnBhbmVsczt0aGlzLnRhYmxpc3Q9dGhpcy5fZ2V0TGlzdCgpLmF0dHIoXCJyb2xlXCIsXCJ0YWJsaXN0XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMudGFibGlzdCxcInVpLXRhYnMtbmF2XCIsXCJ1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXJcIiksdGhpcy50YWJsaXN0Lm9uKFwibW91c2Vkb3duXCIrdGhpcy5ldmVudE5hbWVzcGFjZSxcIj4gbGlcIixmdW5jdGlvbihlKXt0KHRoaXMpLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiZlLnByZXZlbnREZWZhdWx0KCl9KS5vbihcImZvY3VzXCIrdGhpcy5ldmVudE5hbWVzcGFjZSxcIi51aS10YWJzLWFuY2hvclwiLGZ1bmN0aW9uKCl7dCh0aGlzKS5jbG9zZXN0KFwibGlcIikuaXMoXCIudWktc3RhdGUtZGlzYWJsZWRcIikmJnRoaXMuYmx1cigpfSksdGhpcy50YWJzPXRoaXMudGFibGlzdC5maW5kKFwiPiBsaTpoYXMoYVtocmVmXSlcIikuYXR0cih7cm9sZTpcInRhYlwiLHRhYkluZGV4Oi0xfSksdGhpcy5fYWRkQ2xhc3ModGhpcy50YWJzLFwidWktdGFicy10YWJcIixcInVpLXN0YXRlLWRlZmF1bHRcIiksdGhpcy5hbmNob3JzPXRoaXMudGFicy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdChcImFcIix0aGlzKVswXX0pLmF0dHIoe3JvbGU6XCJwcmVzZW50YXRpb25cIix0YWJJbmRleDotMX0pLHRoaXMuX2FkZENsYXNzKHRoaXMuYW5jaG9ycyxcInVpLXRhYnMtYW5jaG9yXCIpLHRoaXMucGFuZWxzPXQoKSx0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbihpLHMpe3ZhciBuLG8sYSxyPXQocykudW5pcXVlSWQoKS5hdHRyKFwiaWRcIiksaD10KHMpLmNsb3Nlc3QoXCJsaVwiKSxsPWguYXR0cihcImFyaWEtY29udHJvbHNcIik7ZS5faXNMb2NhbChzKT8obj1zLmhhc2gsYT1uLnN1YnN0cmluZygxKSxvPWUuZWxlbWVudC5maW5kKGUuX3Nhbml0aXplU2VsZWN0b3IobikpKTooYT1oLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpfHx0KHt9KS51bmlxdWVJZCgpWzBdLmlkLG49XCIjXCIrYSxvPWUuZWxlbWVudC5maW5kKG4pLG8ubGVuZ3RofHwobz1lLl9jcmVhdGVQYW5lbChhKSxvLmluc2VydEFmdGVyKGUucGFuZWxzW2ktMV18fGUudGFibGlzdCkpLG8uYXR0cihcImFyaWEtbGl2ZVwiLFwicG9saXRlXCIpKSxvLmxlbmd0aCYmKGUucGFuZWxzPWUucGFuZWxzLmFkZChvKSksbCYmaC5kYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIsbCksaC5hdHRyKHtcImFyaWEtY29udHJvbHNcIjphLFwiYXJpYS1sYWJlbGxlZGJ5XCI6cn0pLG8uYXR0cihcImFyaWEtbGFiZWxsZWRieVwiLHIpfSksdGhpcy5wYW5lbHMuYXR0cihcInJvbGVcIixcInRhYnBhbmVsXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMucGFuZWxzLFwidWktdGFicy1wYW5lbFwiLFwidWktd2lkZ2V0LWNvbnRlbnRcIiksaSYmKHRoaXMuX29mZihpLm5vdCh0aGlzLnRhYnMpKSx0aGlzLl9vZmYocy5ub3QodGhpcy5hbmNob3JzKSksdGhpcy5fb2ZmKG4ubm90KHRoaXMucGFuZWxzKSkpfSxfZ2V0TGlzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhYmxpc3R8fHRoaXMuZWxlbWVudC5maW5kKFwib2wsIHVsXCIpLmVxKDApfSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoXCI8ZGl2PlwiKS5hdHRyKFwiaWRcIixlKS5kYXRhKFwidWktdGFicy1kZXN0cm95XCIsITApfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24oZSl7dmFyIGkscyxuO2Zvcih0LmlzQXJyYXkoZSkmJihlLmxlbmd0aD9lLmxlbmd0aD09PXRoaXMuYW5jaG9ycy5sZW5ndGgmJihlPSEwKTplPSExKSxuPTA7cz10aGlzLnRhYnNbbl07bisrKWk9dChzKSxlPT09ITB8fC0xIT09dC5pbkFycmF5KG4sZSk/KGkuYXR0cihcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIiksdGhpcy5fYWRkQ2xhc3MoaSxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIikpOihpLnJlbW92ZUF0dHIoXCJhcmlhLWRpc2FibGVkXCIpLHRoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIpKTt0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9ZSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLndpZGdldCgpLHRoaXMud2lkZ2V0RnVsbE5hbWUrXCItZGlzYWJsZWRcIixudWxsLGU9PT0hMCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbihlKXt2YXIgaT17fTtlJiZ0LmVhY2goZS5zcGxpdChcIiBcIiksZnVuY3Rpb24odCxlKXtpW2VdPVwiX2V2ZW50SGFuZGxlclwifSksdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSx0aGlzLl9vbighMCx0aGlzLmFuY2hvcnMse2NsaWNrOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX19KSx0aGlzLl9vbih0aGlzLmFuY2hvcnMsaSksdGhpcy5fb24odGhpcy50YWJzLHtrZXlkb3duOlwiX3RhYktleWRvd25cIn0pLHRoaXMuX29uKHRoaXMucGFuZWxzLHtrZXlkb3duOlwiX3BhbmVsS2V5ZG93blwifSksdGhpcy5fZm9jdXNhYmxlKHRoaXMudGFicyksdGhpcy5faG92ZXJhYmxlKHRoaXMudGFicyl9LF9zZXR1cEhlaWdodFN0eWxlOmZ1bmN0aW9uKGUpe3ZhciBpLHM9dGhpcy5lbGVtZW50LnBhcmVudCgpO1wiZmlsbFwiPT09ZT8oaT1zLmhlaWdodCgpLGktPXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoXCI6dmlzaWJsZVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxzPWUuY3NzKFwicG9zaXRpb25cIik7XCJhYnNvbHV0ZVwiIT09cyYmXCJmaXhlZFwiIT09cyYmKGktPWUub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuZWxlbWVudC5jaGlsZHJlbigpLm5vdCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2ktPXQodGhpcykub3V0ZXJIZWlnaHQoITApfSksdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe3QodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsaS10KHRoaXMpLmlubmVySGVpZ2h0KCkrdCh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIikpOlwiYXV0b1wiPT09ZSYmKGk9MCx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7aT1NYXRoLm1heChpLHQodGhpcykuaGVpZ2h0KFwiXCIpLmhlaWdodCgpKX0pLmhlaWdodChpKSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dGhpcy5hY3RpdmUsbj10KGUuY3VycmVudFRhcmdldCksbz1uLmNsb3Nlc3QoXCJsaVwiKSxhPW9bMF09PT1zWzBdLHI9YSYmaS5jb2xsYXBzaWJsZSxoPXI/dCgpOnRoaXMuX2dldFBhbmVsRm9yVGFiKG8pLGw9cy5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIocyk6dCgpLGM9e29sZFRhYjpzLG9sZFBhbmVsOmwsbmV3VGFiOnI/dCgpOm8sbmV3UGFuZWw6aH07ZS5wcmV2ZW50RGVmYXVsdCgpLG8uaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKXx8by5oYXNDbGFzcyhcInVpLXRhYnMtbG9hZGluZ1wiKXx8dGhpcy5ydW5uaW5nfHxhJiYhaS5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcihcImJlZm9yZUFjdGl2YXRlXCIsZSxjKT09PSExfHwoaS5hY3RpdmU9cj8hMTp0aGlzLnRhYnMuaW5kZXgobyksdGhpcy5hY3RpdmU9YT90KCk6byx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSxsLmxlbmd0aHx8aC5sZW5ndGh8fHQuZXJyb3IoXCJqUXVlcnkgVUkgVGFiczogTWlzbWF0Y2hpbmcgZnJhZ21lbnQgaWRlbnRpZmllci5cIiksaC5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgobyksZSksdGhpcy5fdG9nZ2xlKGUsYykpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gcygpe28ucnVubmluZz0hMSxvLl90cmlnZ2VyKFwiYWN0aXZhdGVcIixlLGkpfWZ1bmN0aW9uIG4oKXtvLl9hZGRDbGFzcyhpLm5ld1RhYi5jbG9zZXN0KFwibGlcIiksXCJ1aS10YWJzLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLGEubGVuZ3RoJiZvLm9wdGlvbnMuc2hvdz9vLl9zaG93KGEsby5vcHRpb25zLnNob3cscyk6KGEuc2hvdygpLHMoKSl9dmFyIG89dGhpcyxhPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7by5fcmVtb3ZlQ2xhc3MoaS5vbGRUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxuKCl9KToodGhpcy5fcmVtb3ZlQ2xhc3MoaS5vbGRUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxyLmhpZGUoKSxuKCkpLHIuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLGkub2xkVGFiLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KSxhLmxlbmd0aCYmci5sZW5ndGg/aS5vbGRUYWIuYXR0cihcInRhYkluZGV4XCIsLTEpOmEubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10KHRoaXMpLmF0dHIoXCJ0YWJJbmRleFwiKX0pLmF0dHIoXCJ0YWJJbmRleFwiLC0xKSxhLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIiksaS5uZXdUYWIuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGkscz10aGlzLl9maW5kQWN0aXZlKGUpO3NbMF0hPT10aGlzLmFjdGl2ZVswXSYmKHMubGVuZ3RofHwocz10aGlzLmFjdGl2ZSksaT1zLmZpbmQoXCIudWktdGFicy1hbmNob3JcIilbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6dC5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSExP3QoKTp0aGlzLnRhYnMuZXEoZSl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoXCJbaHJlZiQ9J1wiK3QudWkuZXNjYXBlU2VsZWN0b3IoZSkrXCInXVwiKSkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy50YWJsaXN0LnJlbW92ZUF0dHIoXCJyb2xlXCIpLm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmFuY2hvcnMucmVtb3ZlQXR0cihcInJvbGUgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLnRhYnMuYWRkKHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7dC5kYXRhKHRoaXMsXCJ1aS10YWJzLWRlc3Ryb3lcIik/dCh0aGlzKS5yZW1vdmUoKTp0KHRoaXMpLnJlbW92ZUF0dHIoXCJyb2xlIHRhYkluZGV4IGFyaWEtbGl2ZSBhcmlhLWJ1c3kgYXJpYS1zZWxlY3RlZCBhcmlhLWxhYmVsbGVkYnkgYXJpYS1oaWRkZW4gYXJpYS1leHBhbmRlZFwiKX0pLHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxpPWUuZGF0YShcInVpLXRhYnMtYXJpYS1jb250cm9sc1wiKTtpP2UuYXR0cihcImFyaWEtY29udHJvbHNcIixpKS5yZW1vdmVEYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIpOmUucmVtb3ZlQXR0cihcImFyaWEtY29udHJvbHNcIil9KSx0aGlzLnBhbmVscy5zaG93KCksXCJjb250ZW50XCIhPT10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUmJnRoaXMucGFuZWxzLmNzcyhcImhlaWdodFwiLFwiXCIpfSxlbmFibGU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLmRpc2FibGVkO2khPT0hMSYmKHZvaWQgMD09PWU/aT0hMTooZT10aGlzLl9nZXRJbmRleChlKSxpPXQuaXNBcnJheShpKT90Lm1hcChpLGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT90Om51bGx9KTp0Lm1hcCh0aGlzLnRhYnMsZnVuY3Rpb24odCxpKXtyZXR1cm4gaSE9PWU/aTpudWxsfSkpLHRoaXMuX3NldE9wdGlvbkRpc2FibGVkKGkpKX0sZGlzYWJsZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYoaSE9PSEwKXtpZih2b2lkIDA9PT1lKWk9ITA7ZWxzZXtpZihlPXRoaXMuX2dldEluZGV4KGUpLC0xIT09dC5pbkFycmF5KGUsaSkpcmV0dXJuO2k9dC5pc0FycmF5KGkpP3QubWVyZ2UoW2VdLGkpLnNvcnQoKTpbZV19dGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoaSl9fSxsb2FkOmZ1bmN0aW9uKGUsaSl7ZT10aGlzLl9nZXRJbmRleChlKTt2YXIgcz10aGlzLG49dGhpcy50YWJzLmVxKGUpLG89bi5maW5kKFwiLnVpLXRhYnMtYW5jaG9yXCIpLGE9dGhpcy5fZ2V0UGFuZWxGb3JUYWIobikscj17dGFiOm4scGFuZWw6YX0saD1mdW5jdGlvbih0LGUpe1wiYWJvcnRcIj09PWUmJnMucGFuZWxzLnN0b3AoITEsITApLHMuX3JlbW92ZUNsYXNzKG4sXCJ1aS10YWJzLWxvYWRpbmdcIiksYS5yZW1vdmVBdHRyKFwiYXJpYS1idXN5XCIpLHQ9PT1zLnhociYmZGVsZXRlIHMueGhyfTt0aGlzLl9pc0xvY2FsKG9bMF0pfHwodGhpcy54aHI9dC5hamF4KHRoaXMuX2FqYXhTZXR0aW5ncyhvLGkscikpLHRoaXMueGhyJiZcImNhbmNlbGVkXCIhPT10aGlzLnhoci5zdGF0dXNUZXh0JiYodGhpcy5fYWRkQ2xhc3MobixcInVpLXRhYnMtbG9hZGluZ1wiKSxhLmF0dHIoXCJhcmlhLWJ1c3lcIixcInRydWVcIiksdGhpcy54aHIuZG9uZShmdW5jdGlvbih0LGUsbil7c2V0VGltZW91dChmdW5jdGlvbigpe2EuaHRtbCh0KSxzLl90cmlnZ2VyKFwibG9hZFwiLGksciksaChuLGUpfSwxKX0pLmZhaWwoZnVuY3Rpb24odCxlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aCh0LGUpfSwxKX0pKSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXRoaXM7cmV0dXJue3VybDplLmF0dHIoXCJocmVmXCIpLnJlcGxhY2UoLyMuKiQvLFwiXCIpLGJlZm9yZVNlbmQ6ZnVuY3Rpb24oZSxvKXtyZXR1cm4gbi5fdHJpZ2dlcihcImJlZm9yZUxvYWRcIixpLHQuZXh0ZW5kKHtqcVhIUjplLGFqYXhTZXR0aW5nczpvfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSkuYXR0cihcImFyaWEtY29udHJvbHNcIik7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoXCIjXCIraSkpfX0pLHQudWlCYWNrQ29tcGF0IT09ITEmJnQud2lkZ2V0KFwidWkudGFic1wiLHQudWkudGFicyx7X3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMuX2FkZENsYXNzKHRoaXMudGFicyxcInVpLXRhYlwiKX19KSx0LnVpLnRhYnMsdC53aWRnZXQoXCJ1aS50b29sdGlwXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOntjbGFzc2VzOntcInVpLXRvb2x0aXBcIjpcInVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LXNoYWRvd1wifSxjb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5hdHRyKFwidGl0bGVcIil8fFwiXCI7cmV0dXJuIHQoXCI8YT5cIikudGV4dChlKS5odG1sKCl9LGhpZGU6ITAsaXRlbXM6XCJbdGl0bGVdOm5vdChbZGlzYWJsZWRdKVwiLHBvc2l0aW9uOntteTpcImxlZnQgdG9wKzE1XCIsYXQ6XCJsZWZ0IGJvdHRvbVwiLGNvbGxpc2lvbjpcImZsaXBmaXQgZmxpcFwifSxzaG93OiEwLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfYWRkRGVzY3JpYmVkQnk6ZnVuY3Rpb24oZSxpKXt2YXIgcz0oZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKXx8XCJcIikuc3BsaXQoL1xccysvKTtzLnB1c2goaSksZS5kYXRhKFwidWktdG9vbHRpcC1pZFwiLGkpLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsdC50cmltKHMuam9pbihcIiBcIikpKX0sX3JlbW92ZURlc2NyaWJlZEJ5OmZ1bmN0aW9uKGUpe3ZhciBpPWUuZGF0YShcInVpLXRvb2x0aXAtaWRcIikscz0oZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKXx8XCJcIikuc3BsaXQoL1xccysvKSxuPXQuaW5BcnJheShpLHMpOy0xIT09biYmcy5zcGxpY2UobiwxKSxlLnJlbW92ZURhdGEoXCJ1aS10b29sdGlwLWlkXCIpLHM9dC50cmltKHMuam9pbihcIiBcIikpLHM/ZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLHMpOmUucmVtb3ZlQXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIil9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vbih7bW91c2VvdmVyOlwib3BlblwiLGZvY3VzaW46XCJvcGVuXCJ9KSx0aGlzLnRvb2x0aXBzPXt9LHRoaXMucGFyZW50cz17fSx0aGlzLmxpdmVSZWdpb249dChcIjxkaXY+XCIpLmF0dHIoe3JvbGU6XCJsb2dcIixcImFyaWEtbGl2ZVwiOlwiYXNzZXJ0aXZlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnNcIn0pLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fYWRkQ2xhc3ModGhpcy5saXZlUmVnaW9uLG51bGwsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5kaXNhYmxlZFRpdGxlcz10KFtdKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpe3ZhciBzPXRoaXM7dGhpcy5fc3VwZXIoZSxpKSxcImNvbnRlbnRcIj09PWUmJnQuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKHQsZSl7cy5fdXBkYXRlQ29udGVudChlLmVsZW1lbnQpfSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzW3Q/XCJfZGlzYWJsZVwiOlwiX2VuYWJsZVwiXSgpfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj10LkV2ZW50KFwiYmx1clwiKTtuLnRhcmdldD1uLmN1cnJlbnRUYXJnZXQ9cy5lbGVtZW50WzBdLGUuY2xvc2UobiwhMCl9KSx0aGlzLmRpc2FibGVkVGl0bGVzPXRoaXMuZGlzYWJsZWRUaXRsZXMuYWRkKHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuIGUuaXMoXCJbdGl0bGVdXCIpP2UuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIixlLmF0dHIoXCJ0aXRsZVwiKSkucmVtb3ZlQXR0cihcInRpdGxlXCIpOnZvaWQgMH0pKX0sX2VuYWJsZTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWRUaXRsZXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSYmZS5hdHRyKFwidGl0bGVcIixlLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpKX0pLHRoaXMuZGlzYWJsZWRUaXRsZXM9dChbXSl9LG9wZW46ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxzPXQoZT9lLnRhcmdldDp0aGlzLmVsZW1lbnQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLml0ZW1zKTtzLmxlbmd0aCYmIXMuZGF0YShcInVpLXRvb2x0aXAtaWRcIikmJihzLmF0dHIoXCJ0aXRsZVwiKSYmcy5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiLHMuYXR0cihcInRpdGxlXCIpKSxzLmRhdGEoXCJ1aS10b29sdGlwLW9wZW5cIiwhMCksZSYmXCJtb3VzZW92ZXJcIj09PWUudHlwZSYmcy5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3ZhciBlLHM9dCh0aGlzKTtzLmRhdGEoXCJ1aS10b29sdGlwLW9wZW5cIikmJihlPXQuRXZlbnQoXCJibHVyXCIpLGUudGFyZ2V0PWUuY3VycmVudFRhcmdldD10aGlzLGkuY2xvc2UoZSwhMCkpLHMuYXR0cihcInRpdGxlXCIpJiYocy51bmlxdWVJZCgpLGkucGFyZW50c1t0aGlzLmlkXT17ZWxlbWVudDp0aGlzLHRpdGxlOnMuYXR0cihcInRpdGxlXCIpfSxzLmF0dHIoXCJ0aXRsZVwiLFwiXCIpKX0pLHRoaXMuX3JlZ2lzdGVyQ2xvc2VIYW5kbGVycyhlLHMpLHRoaXMuX3VwZGF0ZUNvbnRlbnQocyxlKSl9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKHQsZSl7dmFyIGkscz10aGlzLm9wdGlvbnMuY29udGVudCxuPXRoaXMsbz1lP2UudHlwZTpudWxsO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBzfHxzLm5vZGVUeXBlfHxzLmpxdWVyeT90aGlzLl9vcGVuKGUsdCxzKTooaT1zLmNhbGwodFswXSxmdW5jdGlvbihpKXtuLl9kZWxheShmdW5jdGlvbigpe3QuZGF0YShcInVpLXRvb2x0aXAtb3BlblwiKSYmKGUmJihlLnR5cGU9byksdGhpcy5fb3BlbihlLHQsaSkpfSl9KSxpJiZ0aGlzLl9vcGVuKGUsdCxpKSx2b2lkIDApfSxfb3BlbjpmdW5jdGlvbihlLGkscyl7ZnVuY3Rpb24gbih0KXtsLm9mPXQsYS5pcyhcIjpoaWRkZW5cIil8fGEucG9zaXRpb24obCl9dmFyIG8sYSxyLGgsbD10LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKHMpe2lmKG89dGhpcy5fZmluZChpKSlyZXR1cm4gby50b29sdGlwLmZpbmQoXCIudWktdG9vbHRpcC1jb250ZW50XCIpLmh0bWwocyksdm9pZCAwO2kuaXMoXCJbdGl0bGVdXCIpJiYoZSYmXCJtb3VzZW92ZXJcIj09PWUudHlwZT9pLmF0dHIoXCJ0aXRsZVwiLFwiXCIpOmkucmVtb3ZlQXR0cihcInRpdGxlXCIpKSxvPXRoaXMuX3Rvb2x0aXAoaSksYT1vLnRvb2x0aXAsdGhpcy5fYWRkRGVzY3JpYmVkQnkoaSxhLmF0dHIoXCJpZFwiKSksYS5maW5kKFwiLnVpLXRvb2x0aXAtY29udGVudFwiKS5odG1sKHMpLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxoPXQoXCI8ZGl2PlwiKS5odG1sKGEuZmluZChcIi51aS10b29sdGlwLWNvbnRlbnRcIikuaHRtbCgpKSxoLnJlbW92ZUF0dHIoXCJuYW1lXCIpLmZpbmQoXCJbbmFtZV1cIikucmVtb3ZlQXR0cihcIm5hbWVcIiksaC5yZW1vdmVBdHRyKFwiaWRcIikuZmluZChcIltpZF1cIikucmVtb3ZlQXR0cihcImlkXCIpLGguYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSx0aGlzLm9wdGlvbnMudHJhY2smJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKT8odGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vtb3ZlOm59KSxuKGUpKTphLnBvc2l0aW9uKHQuZXh0ZW5kKHtvZjppfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSxhLmhpZGUoKSx0aGlzLl9zaG93KGEsdGhpcy5vcHRpb25zLnNob3cpLHRoaXMub3B0aW9ucy50cmFjayYmdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYocj10aGlzLmRlbGF5ZWRTaG93PXNldEludGVydmFsKGZ1bmN0aW9uKCl7YS5pcyhcIjp2aXNpYmxlXCIpJiYobihsLm9mKSxjbGVhckludGVydmFsKHIpKX0sdC5meC5pbnRlcnZhbCkpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIsZSx7dG9vbHRpcDphfSl9fSxfcmVnaXN0ZXJDbG9zZUhhbmRsZXJzOmZ1bmN0aW9uKGUsaSl7dmFyIHM9e2tleXVwOmZ1bmN0aW9uKGUpe2lmKGUua2V5Q29kZT09PXQudWkua2V5Q29kZS5FU0NBUEUpe3ZhciBzPXQuRXZlbnQoZSk7cy5jdXJyZW50VGFyZ2V0PWlbMF0sdGhpcy5jbG9zZShzLCEwKX19fTtpWzBdIT09dGhpcy5lbGVtZW50WzBdJiYocy5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVUb29sdGlwKHRoaXMuX2ZpbmQoaSkudG9vbHRpcCl9KSxlJiZcIm1vdXNlb3ZlclwiIT09ZS50eXBlfHwocy5tb3VzZWxlYXZlPVwiY2xvc2VcIiksZSYmXCJmb2N1c2luXCIhPT1lLnR5cGV8fChzLmZvY3Vzb3V0PVwiY2xvc2VcIiksdGhpcy5fb24oITAsaSxzKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dmFyIGkscz10aGlzLG49dChlP2UuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLG89dGhpcy5fZmluZChuKTtyZXR1cm4gbz8oaT1vLnRvb2x0aXAsby5jbG9zaW5nfHwoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSxuLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiYhbi5hdHRyKFwidGl0bGVcIikmJm4uYXR0cihcInRpdGxlXCIsbi5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSksdGhpcy5fcmVtb3ZlRGVzY3JpYmVkQnkobiksby5oaWRpbmc9ITAsaS5zdG9wKCEwKSx0aGlzLl9oaWRlKGksdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtzLl9yZW1vdmVUb29sdGlwKHQodGhpcykpfSksbi5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpLHRoaXMuX29mZihuLFwibW91c2VsZWF2ZSBmb2N1c291dCBrZXl1cFwiKSxuWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYobixcInJlbW92ZVwiKSx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcIm1vdXNlbW92ZVwiKSxlJiZcIm1vdXNlbGVhdmVcIj09PWUudHlwZSYmdC5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbihlLGkpe3QoaS5lbGVtZW50KS5hdHRyKFwidGl0bGVcIixpLnRpdGxlKSxkZWxldGUgcy5wYXJlbnRzW2VdfSksby5jbG9zaW5nPSEwLHRoaXMuX3RyaWdnZXIoXCJjbG9zZVwiLGUse3Rvb2x0aXA6aX0pLG8uaGlkaW5nfHwoby5jbG9zaW5nPSExKSksdm9pZCAwKToobi5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpLHZvaWQgMCl9LF90b29sdGlwOmZ1bmN0aW9uKGUpe3ZhciBpPXQoXCI8ZGl2PlwiKS5hdHRyKFwicm9sZVwiLFwidG9vbHRpcFwiKSxzPXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyhpKSxuPWkudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7cmV0dXJuIHRoaXMuX2FkZENsYXNzKHMsXCJ1aS10b29sdGlwLWNvbnRlbnRcIiksdGhpcy5fYWRkQ2xhc3MoaSxcInVpLXRvb2x0aXBcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSxpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKGUpKSx0aGlzLnRvb2x0aXBzW25dPXtlbGVtZW50OmUsdG9vbHRpcDppfX0sX2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhKFwidWktdG9vbHRpcC1pZFwiKTtyZXR1cm4gZT90aGlzLnRvb2x0aXBzW2VdOm51bGx9LF9yZW1vdmVUb29sdGlwOmZ1bmN0aW9uKHQpe3QucmVtb3ZlKCksZGVsZXRlIHRoaXMudG9vbHRpcHNbdC5hdHRyKFwiaWRcIildfSxfYXBwZW5kVG86ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9zZXN0KFwiLnVpLWZyb250LCBkaWFsb2dcIik7cmV0dXJuIGUubGVuZ3RofHwoZT10aGlzLmRvY3VtZW50WzBdLmJvZHkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLHMpe3ZhciBuPXQuRXZlbnQoXCJibHVyXCIpLG89cy5lbGVtZW50O24udGFyZ2V0PW4uY3VycmVudFRhcmdldD1vWzBdLGUuY2xvc2UobiwhMCksdChcIiNcIitpKS5yZW1vdmUoKSxvLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiYoby5hdHRyKFwidGl0bGVcIil8fG8uYXR0cihcInRpdGxlXCIsby5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSksby5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSl9KSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9fSksdC51aUJhY2tDb21wYXQhPT0hMSYmdC53aWRnZXQoXCJ1aS50b29sdGlwXCIsdC51aS50b29sdGlwLHtvcHRpb25zOnt0b29sdGlwQ2xhc3M6bnVsbH0sX3Rvb2x0aXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3MmJnQudG9vbHRpcC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzKSx0fX0pLHQudWkudG9vbHRpcH0pOyIsIiQuZXh0ZW5kKCAkLmZuLCB7XHJcblxyXG5cdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvdmFsaWRhdGUvXHJcblx0dmFsaWRhdGU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xyXG5cclxuXHRcdC8vIElmIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHJldHVybiBub3RoaW5nOyBjYW4ndCBjaGFpbiBhbnl3YXlcclxuXHRcdGlmICggIXRoaXMubGVuZ3RoICkge1xyXG5cdFx0XHRpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSApIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oIFwiTm90aGluZyBzZWxlY3RlZCwgY2FuJ3QgdmFsaWRhdGUsIHJldHVybmluZyBub3RoaW5nLlwiICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENoZWNrIGlmIGEgdmFsaWRhdG9yIGZvciB0aGlzIGZvcm0gd2FzIGFscmVhZHkgY3JlYXRlZFxyXG5cdFx0dmFyIHZhbGlkYXRvciA9ICQuZGF0YSggdGhpc1sgMCBdLCBcInZhbGlkYXRvclwiICk7XHJcblx0XHRpZiAoIHZhbGlkYXRvciApIHtcclxuXHRcdFx0cmV0dXJuIHZhbGlkYXRvcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBZGQgbm92YWxpZGF0ZSB0YWcgaWYgSFRNTDUuXHJcblx0XHR0aGlzLmF0dHIoIFwibm92YWxpZGF0ZVwiLCBcIm5vdmFsaWRhdGVcIiApO1xyXG5cclxuXHRcdHZhbGlkYXRvciA9IG5ldyAkLnZhbGlkYXRvciggb3B0aW9ucywgdGhpc1sgMCBdICk7XHJcblx0XHQkLmRhdGEoIHRoaXNbIDAgXSwgXCJ2YWxpZGF0b3JcIiwgdmFsaWRhdG9yICk7XHJcblxyXG5cdFx0aWYgKCB2YWxpZGF0b3Iuc2V0dGluZ3Mub25zdWJtaXQgKSB7XHJcblxyXG5cdFx0XHR0aGlzLm9uKCBcImNsaWNrLnZhbGlkYXRlXCIsIFwiOnN1Ym1pdFwiLCBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFRyYWNrIHRoZSB1c2VkIHN1Ym1pdCBidXR0b24gdG8gcHJvcGVybHkgaGFuZGxlIHNjcmlwdGVkXHJcblx0XHRcdFx0Ly8gc3VibWl0cyBsYXRlci5cclxuXHRcdFx0XHR2YWxpZGF0b3Iuc3VibWl0QnV0dG9uID0gZXZlbnQuY3VycmVudFRhcmdldDtcclxuXHJcblx0XHRcdFx0Ly8gQWxsb3cgc3VwcHJlc3NpbmcgdmFsaWRhdGlvbiBieSBhZGRpbmcgYSBjYW5jZWwgY2xhc3MgdG8gdGhlIHN1Ym1pdCBidXR0b25cclxuXHRcdFx0XHRpZiAoICQoIHRoaXMgKS5oYXNDbGFzcyggXCJjYW5jZWxcIiApICkge1xyXG5cdFx0XHRcdFx0dmFsaWRhdG9yLmNhbmNlbFN1Ym1pdCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBBbGxvdyBzdXBwcmVzc2luZyB2YWxpZGF0aW9uIGJ5IGFkZGluZyB0aGUgaHRtbDUgZm9ybW5vdmFsaWRhdGUgYXR0cmlidXRlIHRvIHRoZSBzdWJtaXQgYnV0dG9uXHJcblx0XHRcdFx0aWYgKCAkKCB0aGlzICkuYXR0ciggXCJmb3Jtbm92YWxpZGF0ZVwiICkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHZhbGlkYXRvci5jYW5jZWxTdWJtaXQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gVmFsaWRhdGUgdGhlIGZvcm0gb24gc3VibWl0XHJcblx0XHRcdHRoaXMub24oIFwic3VibWl0LnZhbGlkYXRlXCIsIGZ1bmN0aW9uKCBldmVudCApIHtcclxuXHRcdFx0XHRpZiAoIHZhbGlkYXRvci5zZXR0aW5ncy5kZWJ1ZyApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBQcmV2ZW50IGZvcm0gc3VibWl0IHRvIGJlIGFibGUgdG8gc2VlIGNvbnNvbGUgb3V0cHV0XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gaGFuZGxlKCkge1xyXG5cdFx0XHRcdFx0dmFyIGhpZGRlbiwgcmVzdWx0O1xyXG5cclxuXHRcdFx0XHRcdC8vIEluc2VydCBhIGhpZGRlbiBpbnB1dCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgbWlzc2luZyBzdWJtaXQgYnV0dG9uXHJcblx0XHRcdFx0XHQvLyBUaGUgaGlkZGVuIGlucHV0IGlzIGluc2VydGVkIGluIHR3byBjYXNlczpcclxuXHRcdFx0XHRcdC8vICAgLSBBIHVzZXIgZGVmaW5lZCBhIGBzdWJtaXRIYW5kbGVyYFxyXG5cdFx0XHRcdFx0Ly8gICAtIFRoZXJlIHdhcyBhIHBlbmRpbmcgcmVxdWVzdCBkdWUgdG8gYHJlbW90ZWAgbWV0aG9kIGFuZCBgc3RvcFJlcXVlc3QoKWBcclxuXHRcdFx0XHRcdC8vICAgICB3YXMgY2FsbGVkIHRvIHN1Ym1pdCB0aGUgZm9ybSBpbiBjYXNlIGl0J3MgdmFsaWRcclxuXHRcdFx0XHRcdGlmICggdmFsaWRhdG9yLnN1Ym1pdEJ1dHRvbiAmJiAoIHZhbGlkYXRvci5zZXR0aW5ncy5zdWJtaXRIYW5kbGVyIHx8IHZhbGlkYXRvci5mb3JtU3VibWl0dGVkICkgKSB7XHJcblx0XHRcdFx0XHRcdGhpZGRlbiA9ICQoIFwiPGlucHV0IHR5cGU9J2hpZGRlbicvPlwiIClcclxuXHRcdFx0XHRcdFx0XHQuYXR0ciggXCJuYW1lXCIsIHZhbGlkYXRvci5zdWJtaXRCdXR0b24ubmFtZSApXHJcblx0XHRcdFx0XHRcdFx0LnZhbCggJCggdmFsaWRhdG9yLnN1Ym1pdEJ1dHRvbiApLnZhbCgpIClcclxuXHRcdFx0XHRcdFx0XHQuYXBwZW5kVG8oIHZhbGlkYXRvci5jdXJyZW50Rm9ybSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggdmFsaWRhdG9yLnNldHRpbmdzLnN1Ym1pdEhhbmRsZXIgJiYgIXZhbGlkYXRvci5zZXR0aW5ncy5kZWJ1ZyApIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0ID0gdmFsaWRhdG9yLnNldHRpbmdzLnN1Ym1pdEhhbmRsZXIuY2FsbCggdmFsaWRhdG9yLCB2YWxpZGF0b3IuY3VycmVudEZvcm0sIGV2ZW50ICk7XHJcblx0XHRcdFx0XHRcdGlmICggaGlkZGVuICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBBbmQgY2xlYW4gdXAgYWZ0ZXJ3YXJkczsgdGhhbmtzIHRvIG5vLWJsb2NrLXNjb3BlLCBoaWRkZW4gY2FuIGJlIHJlZmVyZW5jZWRcclxuXHRcdFx0XHRcdFx0XHRoaWRkZW4ucmVtb3ZlKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKCByZXN1bHQgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUHJldmVudCBzdWJtaXQgZm9yIGludmFsaWQgZm9ybXMgb3IgY3VzdG9tIHN1Ym1pdCBoYW5kbGVyc1xyXG5cdFx0XHRcdGlmICggdmFsaWRhdG9yLmNhbmNlbFN1Ym1pdCApIHtcclxuXHRcdFx0XHRcdHZhbGlkYXRvci5jYW5jZWxTdWJtaXQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHJldHVybiBoYW5kbGUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCB2YWxpZGF0b3IuZm9ybSgpICkge1xyXG5cdFx0XHRcdFx0aWYgKCB2YWxpZGF0b3IucGVuZGluZ1JlcXVlc3QgKSB7XHJcblx0XHRcdFx0XHRcdHZhbGlkYXRvci5mb3JtU3VibWl0dGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIGhhbmRsZSgpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YWxpZGF0b3IuZm9jdXNJbnZhbGlkKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHZhbGlkYXRvcjtcclxuXHR9LFxyXG5cclxuXHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL3ZhbGlkL1xyXG5cdHZhbGlkOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciB2YWxpZCwgdmFsaWRhdG9yLCBlcnJvckxpc3Q7XHJcblxyXG5cdFx0aWYgKCAkKCB0aGlzWyAwIF0gKS5pcyggXCJmb3JtXCIgKSApIHtcclxuXHRcdFx0dmFsaWQgPSB0aGlzLnZhbGlkYXRlKCkuZm9ybSgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZXJyb3JMaXN0ID0gW107XHJcblx0XHRcdHZhbGlkID0gdHJ1ZTtcclxuXHRcdFx0dmFsaWRhdG9yID0gJCggdGhpc1sgMCBdLmZvcm0gKS52YWxpZGF0ZSgpO1xyXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhbGlkID0gdmFsaWRhdG9yLmVsZW1lbnQoIHRoaXMgKSAmJiB2YWxpZDtcclxuXHRcdFx0XHRpZiAoICF2YWxpZCApIHtcclxuXHRcdFx0XHRcdGVycm9yTGlzdCA9IGVycm9yTGlzdC5jb25jYXQoIHZhbGlkYXRvci5lcnJvckxpc3QgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dmFsaWRhdG9yLmVycm9yTGlzdCA9IGVycm9yTGlzdDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWxpZDtcclxuXHR9LFxyXG5cclxuXHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL3J1bGVzL1xyXG5cdHJ1bGVzOiBmdW5jdGlvbiggY29tbWFuZCwgYXJndW1lbnQgKSB7XHJcblx0XHR2YXIgZWxlbWVudCA9IHRoaXNbIDAgXSxcclxuXHRcdFx0aXNDb250ZW50RWRpdGFibGUgPSB0eXBlb2YgdGhpcy5hdHRyKCBcImNvbnRlbnRlZGl0YWJsZVwiICkgIT09IFwidW5kZWZpbmVkXCIgJiYgdGhpcy5hdHRyKCBcImNvbnRlbnRlZGl0YWJsZVwiICkgIT09IFwiZmFsc2VcIixcclxuXHRcdFx0c2V0dGluZ3MsIHN0YXRpY1J1bGVzLCBleGlzdGluZ1J1bGVzLCBkYXRhLCBwYXJhbSwgZmlsdGVyZWQ7XHJcblxyXG5cdFx0Ly8gSWYgbm90aGluZyBpcyBzZWxlY3RlZCwgcmV0dXJuIGVtcHR5IG9iamVjdDsgY2FuJ3QgY2hhaW4gYW55d2F5XHJcblx0XHRpZiAoIGVsZW1lbnQgPT0gbnVsbCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggIWVsZW1lbnQuZm9ybSAmJiBpc0NvbnRlbnRFZGl0YWJsZSApIHtcclxuXHRcdFx0ZWxlbWVudC5mb3JtID0gdGhpcy5jbG9zZXN0KCBcImZvcm1cIiApWyAwIF07XHJcblx0XHRcdGVsZW1lbnQubmFtZSA9IHRoaXMuYXR0ciggXCJuYW1lXCIgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGVsZW1lbnQuZm9ybSA9PSBudWxsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBjb21tYW5kICkge1xyXG5cdFx0XHRzZXR0aW5ncyA9ICQuZGF0YSggZWxlbWVudC5mb3JtLCBcInZhbGlkYXRvclwiICkuc2V0dGluZ3M7XHJcblx0XHRcdHN0YXRpY1J1bGVzID0gc2V0dGluZ3MucnVsZXM7XHJcblx0XHRcdGV4aXN0aW5nUnVsZXMgPSAkLnZhbGlkYXRvci5zdGF0aWNSdWxlcyggZWxlbWVudCApO1xyXG5cdFx0XHRzd2l0Y2ggKCBjb21tYW5kICkge1xyXG5cdFx0XHRjYXNlIFwiYWRkXCI6XHJcblx0XHRcdFx0JC5leHRlbmQoIGV4aXN0aW5nUnVsZXMsICQudmFsaWRhdG9yLm5vcm1hbGl6ZVJ1bGUoIGFyZ3VtZW50ICkgKTtcclxuXHJcblx0XHRcdFx0Ly8gUmVtb3ZlIG1lc3NhZ2VzIGZyb20gcnVsZXMsIGJ1dCBhbGxvdyB0aGVtIHRvIGJlIHNldCBzZXBhcmF0ZWx5XHJcblx0XHRcdFx0ZGVsZXRlIGV4aXN0aW5nUnVsZXMubWVzc2FnZXM7XHJcblx0XHRcdFx0c3RhdGljUnVsZXNbIGVsZW1lbnQubmFtZSBdID0gZXhpc3RpbmdSdWxlcztcclxuXHRcdFx0XHRpZiAoIGFyZ3VtZW50Lm1lc3NhZ2VzICkge1xyXG5cdFx0XHRcdFx0c2V0dGluZ3MubWVzc2FnZXNbIGVsZW1lbnQubmFtZSBdID0gJC5leHRlbmQoIHNldHRpbmdzLm1lc3NhZ2VzWyBlbGVtZW50Lm5hbWUgXSwgYXJndW1lbnQubWVzc2FnZXMgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJyZW1vdmVcIjpcclxuXHRcdFx0XHRpZiAoICFhcmd1bWVudCApIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBzdGF0aWNSdWxlc1sgZWxlbWVudC5uYW1lIF07XHJcblx0XHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdSdWxlcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZmlsdGVyZWQgPSB7fTtcclxuXHRcdFx0XHQkLmVhY2goIGFyZ3VtZW50LnNwbGl0KCAvXFxzLyApLCBmdW5jdGlvbiggaW5kZXgsIG1ldGhvZCApIHtcclxuXHRcdFx0XHRcdGZpbHRlcmVkWyBtZXRob2QgXSA9IGV4aXN0aW5nUnVsZXNbIG1ldGhvZCBdO1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGV4aXN0aW5nUnVsZXNbIG1ldGhvZCBdO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRyZXR1cm4gZmlsdGVyZWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRkYXRhID0gJC52YWxpZGF0b3Iubm9ybWFsaXplUnVsZXMoXHJcblx0XHQkLmV4dGVuZChcclxuXHRcdFx0e30sXHJcblx0XHRcdCQudmFsaWRhdG9yLmNsYXNzUnVsZXMoIGVsZW1lbnQgKSxcclxuXHRcdFx0JC52YWxpZGF0b3IuYXR0cmlidXRlUnVsZXMoIGVsZW1lbnQgKSxcclxuXHRcdFx0JC52YWxpZGF0b3IuZGF0YVJ1bGVzKCBlbGVtZW50ICksXHJcblx0XHRcdCQudmFsaWRhdG9yLnN0YXRpY1J1bGVzKCBlbGVtZW50IClcclxuXHRcdCksIGVsZW1lbnQgKTtcclxuXHJcblx0XHQvLyBNYWtlIHN1cmUgcmVxdWlyZWQgaXMgYXQgZnJvbnRcclxuXHRcdGlmICggZGF0YS5yZXF1aXJlZCApIHtcclxuXHRcdFx0cGFyYW0gPSBkYXRhLnJlcXVpcmVkO1xyXG5cdFx0XHRkZWxldGUgZGF0YS5yZXF1aXJlZDtcclxuXHRcdFx0ZGF0YSA9ICQuZXh0ZW5kKCB7IHJlcXVpcmVkOiBwYXJhbSB9LCBkYXRhICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTWFrZSBzdXJlIHJlbW90ZSBpcyBhdCBiYWNrXHJcblx0XHRpZiAoIGRhdGEucmVtb3RlICkge1xyXG5cdFx0XHRwYXJhbSA9IGRhdGEucmVtb3RlO1xyXG5cdFx0XHRkZWxldGUgZGF0YS5yZW1vdGU7XHJcblx0XHRcdGRhdGEgPSAkLmV4dGVuZCggZGF0YSwgeyByZW1vdGU6IHBhcmFtIH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGF0YTtcclxuXHR9XHJcbn0gKTtcclxuXHJcbi8vIEN1c3RvbSBzZWxlY3RvcnNcclxuJC5leHRlbmQoICQuZXhwci5wc2V1ZG9zIHx8ICQuZXhwclsgXCI6XCIgXSwge1x0XHQvLyAnfHwgJC5leHByWyBcIjpcIiBdJyBoZXJlIGVuYWJsZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdG8galF1ZXJ5IDEuNy4gQ2FuIGJlIHJlbW92ZWQgd2hlbiBkcm9wcGluZyBqUSAxLjcueCBzdXBwb3J0XHJcblxyXG5cdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvYmxhbmstc2VsZWN0b3IvXHJcblx0Ymxhbms6IGZ1bmN0aW9uKCBhICkge1xyXG5cdFx0cmV0dXJuICEkLnRyaW0oIFwiXCIgKyAkKCBhICkudmFsKCkgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL2ZpbGxlZC1zZWxlY3Rvci9cclxuXHRmaWxsZWQ6IGZ1bmN0aW9uKCBhICkge1xyXG5cdFx0dmFyIHZhbCA9ICQoIGEgKS52YWwoKTtcclxuXHRcdHJldHVybiB2YWwgIT09IG51bGwgJiYgISEkLnRyaW0oIFwiXCIgKyB2YWwgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL3VuY2hlY2tlZC1zZWxlY3Rvci9cclxuXHR1bmNoZWNrZWQ6IGZ1bmN0aW9uKCBhICkge1xyXG5cdFx0cmV0dXJuICEkKCBhICkucHJvcCggXCJjaGVja2VkXCIgKTtcclxuXHR9XHJcbn0gKTtcclxuXHJcbi8vIENvbnN0cnVjdG9yIGZvciB2YWxpZGF0b3JcclxuJC52YWxpZGF0b3IgPSBmdW5jdGlvbiggb3B0aW9ucywgZm9ybSApIHtcclxuXHR0aGlzLnNldHRpbmdzID0gJC5leHRlbmQoIHRydWUsIHt9LCAkLnZhbGlkYXRvci5kZWZhdWx0cywgb3B0aW9ucyApO1xyXG5cdHRoaXMuY3VycmVudEZvcm0gPSBmb3JtO1xyXG5cdHRoaXMuaW5pdCgpO1xyXG59O1xyXG5cclxuLy8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9qUXVlcnkudmFsaWRhdG9yLmZvcm1hdC9cclxuJC52YWxpZGF0b3IuZm9ybWF0ID0gZnVuY3Rpb24oIHNvdXJjZSwgcGFyYW1zICkge1xyXG5cdGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMSApIHtcclxuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGFyZ3MgPSAkLm1ha2VBcnJheSggYXJndW1lbnRzICk7XHJcblx0XHRcdGFyZ3MudW5zaGlmdCggc291cmNlICk7XHJcblx0XHRcdHJldHVybiAkLnZhbGlkYXRvci5mb3JtYXQuYXBwbHkoIHRoaXMsIGFyZ3MgKTtcclxuXHRcdH07XHJcblx0fVxyXG5cdGlmICggcGFyYW1zID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRyZXR1cm4gc291cmNlO1xyXG5cdH1cclxuXHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIHBhcmFtcy5jb25zdHJ1Y3RvciAhPT0gQXJyYXkgICkge1xyXG5cdFx0cGFyYW1zID0gJC5tYWtlQXJyYXkoIGFyZ3VtZW50cyApLnNsaWNlKCAxICk7XHJcblx0fVxyXG5cdGlmICggcGFyYW1zLmNvbnN0cnVjdG9yICE9PSBBcnJheSApIHtcclxuXHRcdHBhcmFtcyA9IFsgcGFyYW1zIF07XHJcblx0fVxyXG5cdCQuZWFjaCggcGFyYW1zLCBmdW5jdGlvbiggaSwgbiApIHtcclxuXHRcdHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKCBuZXcgUmVnRXhwKCBcIlxcXFx7XCIgKyBpICsgXCJcXFxcfVwiLCBcImdcIiApLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIG47XHJcblx0XHR9ICk7XHJcblx0fSApO1xyXG5cdHJldHVybiBzb3VyY2U7XHJcbn07XHJcblxyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IsIHtcclxuXHJcblx0ZGVmYXVsdHM6IHtcclxuXHRcdG1lc3NhZ2VzOiB7fSxcclxuXHRcdGdyb3Vwczoge30sXHJcblx0XHRydWxlczoge30sXHJcblx0XHRlcnJvckNsYXNzOiBcImVycm9yXCIsXHJcblx0XHRwZW5kaW5nQ2xhc3M6IFwicGVuZGluZ1wiLFxyXG5cdFx0dmFsaWRDbGFzczogXCJ2YWxpZFwiLFxyXG5cdFx0ZXJyb3JFbGVtZW50OiBcImxhYmVsXCIsXHJcblx0XHRmb2N1c0NsZWFudXA6IGZhbHNlLFxyXG5cdFx0Zm9jdXNJbnZhbGlkOiB0cnVlLFxyXG5cdFx0ZXJyb3JDb250YWluZXI6ICQoIFtdICksXHJcblx0XHRlcnJvckxhYmVsQ29udGFpbmVyOiAkKCBbXSApLFxyXG5cdFx0b25zdWJtaXQ6IHRydWUsXHJcblx0XHRpZ25vcmU6IFwiOmhpZGRlblwiLFxyXG5cdFx0aWdub3JlVGl0bGU6IGZhbHNlLFxyXG5cdFx0b25mb2N1c2luOiBmdW5jdGlvbiggZWxlbWVudCApIHtcclxuXHRcdFx0dGhpcy5sYXN0QWN0aXZlID0gZWxlbWVudDtcclxuXHJcblx0XHRcdC8vIEhpZGUgZXJyb3IgbGFiZWwgYW5kIHJlbW92ZSBlcnJvciBjbGFzcyBvbiBmb2N1cyBpZiBlbmFibGVkXHJcblx0XHRcdGlmICggdGhpcy5zZXR0aW5ncy5mb2N1c0NsZWFudXAgKSB7XHJcblx0XHRcdFx0aWYgKCB0aGlzLnNldHRpbmdzLnVuaGlnaGxpZ2h0ICkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodC5jYWxsKCB0aGlzLCBlbGVtZW50LCB0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MsIHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmhpZGVUaGVzZSggdGhpcy5lcnJvcnNGb3IoIGVsZW1lbnQgKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25mb2N1c291dDogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHRcdGlmICggIXRoaXMuY2hlY2thYmxlKCBlbGVtZW50ICkgJiYgKCBlbGVtZW50Lm5hbWUgaW4gdGhpcy5zdWJtaXR0ZWQgfHwgIXRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSApICkge1xyXG5cdFx0XHRcdHRoaXMuZWxlbWVudCggZWxlbWVudCApO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25rZXl1cDogZnVuY3Rpb24oIGVsZW1lbnQsIGV2ZW50ICkge1xyXG5cclxuXHRcdFx0Ly8gQXZvaWQgcmV2YWxpZGF0ZSB0aGUgZmllbGQgd2hlbiBwcmVzc2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBrZXlzXHJcblx0XHRcdC8vIFNoaWZ0ICAgICAgID0+IDE2XHJcblx0XHRcdC8vIEN0cmwgICAgICAgID0+IDE3XHJcblx0XHRcdC8vIEFsdCAgICAgICAgID0+IDE4XHJcblx0XHRcdC8vIENhcHMgbG9jayAgID0+IDIwXHJcblx0XHRcdC8vIEVuZCAgICAgICAgID0+IDM1XHJcblx0XHRcdC8vIEhvbWUgICAgICAgID0+IDM2XHJcblx0XHRcdC8vIExlZnQgYXJyb3cgID0+IDM3XHJcblx0XHRcdC8vIFVwIGFycm93ICAgID0+IDM4XHJcblx0XHRcdC8vIFJpZ2h0IGFycm93ID0+IDM5XHJcblx0XHRcdC8vIERvd24gYXJyb3cgID0+IDQwXHJcblx0XHRcdC8vIEluc2VydCAgICAgID0+IDQ1XHJcblx0XHRcdC8vIE51bSBsb2NrICAgID0+IDE0NFxyXG5cdFx0XHQvLyBBbHRHciBrZXkgICA9PiAyMjVcclxuXHRcdFx0dmFyIGV4Y2x1ZGVkS2V5cyA9IFtcclxuXHRcdFx0XHQxNiwgMTcsIDE4LCAyMCwgMzUsIDM2LCAzNyxcclxuXHRcdFx0XHQzOCwgMzksIDQwLCA0NSwgMTQ0LCAyMjVcclxuXHRcdFx0XTtcclxuXHJcblx0XHRcdGlmICggZXZlbnQud2hpY2ggPT09IDkgJiYgdGhpcy5lbGVtZW50VmFsdWUoIGVsZW1lbnQgKSA9PT0gXCJcIiB8fCAkLmluQXJyYXkoIGV2ZW50LmtleUNvZGUsIGV4Y2x1ZGVkS2V5cyApICE9PSAtMSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW1lbnQubmFtZSBpbiB0aGlzLnN1Ym1pdHRlZCB8fCBlbGVtZW50Lm5hbWUgaW4gdGhpcy5pbnZhbGlkICkge1xyXG5cdFx0XHRcdHRoaXMuZWxlbWVudCggZWxlbWVudCApO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25jbGljazogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblxyXG5cdFx0XHQvLyBDbGljayBvbiBzZWxlY3RzLCByYWRpb2J1dHRvbnMgYW5kIGNoZWNrYm94ZXNcclxuXHRcdFx0aWYgKCBlbGVtZW50Lm5hbWUgaW4gdGhpcy5zdWJtaXR0ZWQgKSB7XHJcblx0XHRcdFx0dGhpcy5lbGVtZW50KCBlbGVtZW50ICk7XHJcblxyXG5cdFx0XHQvLyBPciBvcHRpb24gZWxlbWVudHMsIGNoZWNrIHBhcmVudCBzZWxlY3QgaW4gdGhhdCBjYXNlXHJcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW1lbnQucGFyZW50Tm9kZS5uYW1lIGluIHRoaXMuc3VibWl0dGVkICkge1xyXG5cdFx0XHRcdHRoaXMuZWxlbWVudCggZWxlbWVudC5wYXJlbnROb2RlICk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRoaWdobGlnaHQ6IGZ1bmN0aW9uKCBlbGVtZW50LCBlcnJvckNsYXNzLCB2YWxpZENsYXNzICkge1xyXG5cdFx0XHRpZiAoIGVsZW1lbnQudHlwZSA9PT0gXCJyYWRpb1wiICkge1xyXG5cdFx0XHRcdHRoaXMuZmluZEJ5TmFtZSggZWxlbWVudC5uYW1lICkuYWRkQ2xhc3MoIGVycm9yQ2xhc3MgKS5yZW1vdmVDbGFzcyggdmFsaWRDbGFzcyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdCQoIGVsZW1lbnQgKS5hZGRDbGFzcyggZXJyb3JDbGFzcyApLnJlbW92ZUNsYXNzKCB2YWxpZENsYXNzICk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHR1bmhpZ2hsaWdodDogZnVuY3Rpb24oIGVsZW1lbnQsIGVycm9yQ2xhc3MsIHZhbGlkQ2xhc3MgKSB7XHJcblx0XHRcdGlmICggZWxlbWVudC50eXBlID09PSBcInJhZGlvXCIgKSB7XHJcblx0XHRcdFx0dGhpcy5maW5kQnlOYW1lKCBlbGVtZW50Lm5hbWUgKS5yZW1vdmVDbGFzcyggZXJyb3JDbGFzcyApLmFkZENsYXNzKCB2YWxpZENsYXNzICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0JCggZWxlbWVudCApLnJlbW92ZUNsYXNzKCBlcnJvckNsYXNzICkuYWRkQ2xhc3MoIHZhbGlkQ2xhc3MgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvalF1ZXJ5LnZhbGlkYXRvci5zZXREZWZhdWx0cy9cclxuXHRzZXREZWZhdWx0czogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG5cdFx0JC5leHRlbmQoICQudmFsaWRhdG9yLmRlZmF1bHRzLCBzZXR0aW5ncyApO1xyXG5cdH0sXHJcblxyXG5cdG1lc3NhZ2VzOiB7XHJcblx0XHRyZXF1aXJlZDogXCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiLFxyXG5cdFx0cmVtb3RlOiBcIlBsZWFzZSBmaXggdGhpcyBmaWVsZC5cIixcclxuXHRcdGVtYWlsOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXCIsXHJcblx0XHR1cmw6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMLlwiLFxyXG5cdFx0ZGF0ZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlLlwiLFxyXG5cdFx0ZGF0ZUlTTzogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIChJU08pLlwiLFxyXG5cdFx0bnVtYmVyOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlci5cIixcclxuXHRcdGRpZ2l0czogXCJQbGVhc2UgZW50ZXIgb25seSBkaWdpdHMuXCIsXHJcblx0XHRlcXVhbFRvOiBcIlBsZWFzZSBlbnRlciB0aGUgc2FtZSB2YWx1ZSBhZ2Fpbi5cIixcclxuXHRcdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuXCIgKSxcclxuXHRcdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVycy5cIiApLFxyXG5cdFx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9IGNoYXJhY3RlcnMgbG9uZy5cIiApLFxyXG5cdFx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9LlwiICksXHJcblx0XHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gezB9LlwiICksXHJcblx0XHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gezB9LlwiICksXHJcblx0XHRzdGVwOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGxlYXNlIGVudGVyIGEgbXVsdGlwbGUgb2YgezB9LlwiIClcclxuXHR9LFxyXG5cclxuXHRhdXRvQ3JlYXRlUmFuZ2VzOiBmYWxzZSxcclxuXHJcblx0cHJvdG90eXBlOiB7XHJcblxyXG5cdFx0aW5pdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMubGFiZWxDb250YWluZXIgPSAkKCB0aGlzLnNldHRpbmdzLmVycm9yTGFiZWxDb250YWluZXIgKTtcclxuXHRcdFx0dGhpcy5lcnJvckNvbnRleHQgPSB0aGlzLmxhYmVsQ29udGFpbmVyLmxlbmd0aCAmJiB0aGlzLmxhYmVsQ29udGFpbmVyIHx8ICQoIHRoaXMuY3VycmVudEZvcm0gKTtcclxuXHRcdFx0dGhpcy5jb250YWluZXJzID0gJCggdGhpcy5zZXR0aW5ncy5lcnJvckNvbnRhaW5lciApLmFkZCggdGhpcy5zZXR0aW5ncy5lcnJvckxhYmVsQ29udGFpbmVyICk7XHJcblx0XHRcdHRoaXMuc3VibWl0dGVkID0ge307XHJcblx0XHRcdHRoaXMudmFsdWVDYWNoZSA9IHt9O1xyXG5cdFx0XHR0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gMDtcclxuXHRcdFx0dGhpcy5wZW5kaW5nID0ge307XHJcblx0XHRcdHRoaXMuaW52YWxpZCA9IHt9O1xyXG5cdFx0XHR0aGlzLnJlc2V0KCk7XHJcblxyXG5cdFx0XHR2YXIgY3VycmVudEZvcm0gPSB0aGlzLmN1cnJlbnRGb3JtLFxyXG5cdFx0XHRcdGdyb3VwcyA9ICggdGhpcy5ncm91cHMgPSB7fSApLFxyXG5cdFx0XHRcdHJ1bGVzO1xyXG5cdFx0XHQkLmVhY2goIHRoaXMuc2V0dGluZ3MuZ3JvdXBzLCBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoIC9cXHMvICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCQuZWFjaCggdmFsdWUsIGZ1bmN0aW9uKCBpbmRleCwgbmFtZSApIHtcclxuXHRcdFx0XHRcdGdyb3Vwc1sgbmFtZSBdID0ga2V5O1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRydWxlcyA9IHRoaXMuc2V0dGluZ3MucnVsZXM7XHJcblx0XHRcdCQuZWFjaCggcnVsZXMsIGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xyXG5cdFx0XHRcdHJ1bGVzWyBrZXkgXSA9ICQudmFsaWRhdG9yLm5vcm1hbGl6ZVJ1bGUoIHZhbHVlICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGZ1bmN0aW9uIGRlbGVnYXRlKCBldmVudCApIHtcclxuXHRcdFx0XHR2YXIgaXNDb250ZW50RWRpdGFibGUgPSB0eXBlb2YgJCggdGhpcyApLmF0dHIoIFwiY29udGVudGVkaXRhYmxlXCIgKSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAkKCB0aGlzICkuYXR0ciggXCJjb250ZW50ZWRpdGFibGVcIiApICE9PSBcImZhbHNlXCI7XHJcblxyXG5cdFx0XHRcdC8vIFNldCBmb3JtIGV4cGFuZG8gb24gY29udGVudGVkaXRhYmxlXHJcblx0XHRcdFx0aWYgKCAhdGhpcy5mb3JtICYmIGlzQ29udGVudEVkaXRhYmxlICkge1xyXG5cdFx0XHRcdFx0dGhpcy5mb3JtID0gJCggdGhpcyApLmNsb3Nlc3QoIFwiZm9ybVwiIClbIDAgXTtcclxuXHRcdFx0XHRcdHRoaXMubmFtZSA9ICQoIHRoaXMgKS5hdHRyKCBcIm5hbWVcIiApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gSWdub3JlIHRoZSBlbGVtZW50IGlmIGl0IGJlbG9uZ3MgdG8gYW5vdGhlciBmb3JtLiBUaGlzIHdpbGwgaGFwcGVuIG1haW5seVxyXG5cdFx0XHRcdC8vIHdoZW4gc2V0dGluZyB0aGUgYGZvcm1gIGF0dHJpYnV0ZSBvZiBhbiBpbnB1dCB0byB0aGUgaWQgb2YgYW5vdGhlciBmb3JtLlxyXG5cdFx0XHRcdGlmICggY3VycmVudEZvcm0gIT09IHRoaXMuZm9ybSApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHZhciB2YWxpZGF0b3IgPSAkLmRhdGEoIHRoaXMuZm9ybSwgXCJ2YWxpZGF0b3JcIiApLFxyXG5cdFx0XHRcdFx0ZXZlbnRUeXBlID0gXCJvblwiICsgZXZlbnQudHlwZS5yZXBsYWNlKCAvXnZhbGlkYXRlLywgXCJcIiApLFxyXG5cdFx0XHRcdFx0c2V0dGluZ3MgPSB2YWxpZGF0b3Iuc2V0dGluZ3M7XHJcblx0XHRcdFx0aWYgKCBzZXR0aW5nc1sgZXZlbnRUeXBlIF0gJiYgISQoIHRoaXMgKS5pcyggc2V0dGluZ3MuaWdub3JlICkgKSB7XHJcblx0XHRcdFx0XHRzZXR0aW5nc1sgZXZlbnRUeXBlIF0uY2FsbCggdmFsaWRhdG9yLCB0aGlzLCBldmVudCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0JCggdGhpcy5jdXJyZW50Rm9ybSApXHJcblx0XHRcdFx0Lm9uKCBcImZvY3VzaW4udmFsaWRhdGUgZm9jdXNvdXQudmFsaWRhdGUga2V5dXAudmFsaWRhdGVcIixcclxuXHRcdFx0XHRcdFwiOnRleHQsIFt0eXBlPSdwYXNzd29yZCddLCBbdHlwZT0nZmlsZSddLCBzZWxlY3QsIHRleHRhcmVhLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgXCIgK1xyXG5cdFx0XHRcdFx0XCJbdHlwZT0ndGVsJ10sIFt0eXBlPSd1cmwnXSwgW3R5cGU9J2VtYWlsJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZSddLCBbdHlwZT0nbW9udGgnXSwgXCIgK1xyXG5cdFx0XHRcdFx0XCJbdHlwZT0nd2VlayddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J3JhbmdlJ10sIFt0eXBlPSdjb2xvciddLCBcIiArXHJcblx0XHRcdFx0XHRcIlt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXSwgW2NvbnRlbnRlZGl0YWJsZV0sIFt0eXBlPSdidXR0b24nXVwiLCBkZWxlZ2F0ZSApXHJcblxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSwgb2xkSUVcclxuXHRcdFx0XHQvLyBcInNlbGVjdFwiIGlzIHByb3ZpZGVkIGFzIGV2ZW50LnRhcmdldCB3aGVuIGNsaWNraW5nIGEgb3B0aW9uXHJcblx0XHRcdFx0Lm9uKCBcImNsaWNrLnZhbGlkYXRlXCIsIFwic2VsZWN0LCBvcHRpb24sIFt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXVwiLCBkZWxlZ2F0ZSApO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLnNldHRpbmdzLmludmFsaWRIYW5kbGVyICkge1xyXG5cdFx0XHRcdCQoIHRoaXMuY3VycmVudEZvcm0gKS5vbiggXCJpbnZhbGlkLWZvcm0udmFsaWRhdGVcIiwgdGhpcy5zZXR0aW5ncy5pbnZhbGlkSGFuZGxlciApO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvVmFsaWRhdG9yLmZvcm0vXHJcblx0XHRmb3JtOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dGhpcy5jaGVja0Zvcm0oKTtcclxuXHRcdFx0JC5leHRlbmQoIHRoaXMuc3VibWl0dGVkLCB0aGlzLmVycm9yTWFwICk7XHJcblx0XHRcdHRoaXMuaW52YWxpZCA9ICQuZXh0ZW5kKCB7fSwgdGhpcy5lcnJvck1hcCApO1xyXG5cdFx0XHRpZiAoICF0aGlzLnZhbGlkKCkgKSB7XHJcblx0XHRcdFx0JCggdGhpcy5jdXJyZW50Rm9ybSApLnRyaWdnZXJIYW5kbGVyKCBcImludmFsaWQtZm9ybVwiLCBbIHRoaXMgXSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2hvd0Vycm9ycygpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy52YWxpZCgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjaGVja0Zvcm06IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR0aGlzLnByZXBhcmVGb3JtKCk7XHJcblx0XHRcdGZvciAoIHZhciBpID0gMCwgZWxlbWVudHMgPSAoIHRoaXMuY3VycmVudEVsZW1lbnRzID0gdGhpcy5lbGVtZW50cygpICk7IGVsZW1lbnRzWyBpIF07IGkrKyApIHtcclxuXHRcdFx0XHR0aGlzLmNoZWNrKCBlbGVtZW50c1sgaSBdICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRoaXMudmFsaWQoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9WYWxpZGF0b3IuZWxlbWVudC9cclxuXHRcdGVsZW1lbnQ6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xyXG5cdFx0XHR2YXIgY2xlYW5FbGVtZW50ID0gdGhpcy5jbGVhbiggZWxlbWVudCApLFxyXG5cdFx0XHRcdGNoZWNrRWxlbWVudCA9IHRoaXMudmFsaWRhdGlvblRhcmdldEZvciggY2xlYW5FbGVtZW50ICksXHJcblx0XHRcdFx0diA9IHRoaXMsXHJcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZSxcclxuXHRcdFx0XHRycywgZ3JvdXA7XHJcblxyXG5cdFx0XHRpZiAoIGNoZWNrRWxlbWVudCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmludmFsaWRbIGNsZWFuRWxlbWVudC5uYW1lIF07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5wcmVwYXJlRWxlbWVudCggY2hlY2tFbGVtZW50ICk7XHJcblx0XHRcdFx0dGhpcy5jdXJyZW50RWxlbWVudHMgPSAkKCBjaGVja0VsZW1lbnQgKTtcclxuXHJcblx0XHRcdFx0Ly8gSWYgdGhpcyBlbGVtZW50IGlzIGdyb3VwZWQsIHRoZW4gdmFsaWRhdGUgYWxsIGdyb3VwIGVsZW1lbnRzIGFscmVhZHlcclxuXHRcdFx0XHQvLyBjb250YWluaW5nIGEgdmFsdWVcclxuXHRcdFx0XHRncm91cCA9IHRoaXMuZ3JvdXBzWyBjaGVja0VsZW1lbnQubmFtZSBdO1xyXG5cdFx0XHRcdGlmICggZ3JvdXAgKSB7XHJcblx0XHRcdFx0XHQkLmVhY2goIHRoaXMuZ3JvdXBzLCBmdW5jdGlvbiggbmFtZSwgdGVzdGdyb3VwICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHRlc3Rncm91cCA9PT0gZ3JvdXAgJiYgbmFtZSAhPT0gY2hlY2tFbGVtZW50Lm5hbWUgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2xlYW5FbGVtZW50ID0gdi52YWxpZGF0aW9uVGFyZ2V0Rm9yKCB2LmNsZWFuKCB2LmZpbmRCeU5hbWUoIG5hbWUgKSApICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBjbGVhbkVsZW1lbnQgJiYgY2xlYW5FbGVtZW50Lm5hbWUgaW4gdi5pbnZhbGlkICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0di5jdXJyZW50RWxlbWVudHMucHVzaCggY2xlYW5FbGVtZW50ICk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSB2LmNoZWNrKCBjbGVhbkVsZW1lbnQgKSAmJiByZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRycyA9IHRoaXMuY2hlY2soIGNoZWNrRWxlbWVudCApICE9PSBmYWxzZTtcclxuXHRcdFx0XHRyZXN1bHQgPSByZXN1bHQgJiYgcnM7XHJcblx0XHRcdFx0aWYgKCBycyApIHtcclxuXHRcdFx0XHRcdHRoaXMuaW52YWxpZFsgY2hlY2tFbGVtZW50Lm5hbWUgXSA9IGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmludmFsaWRbIGNoZWNrRWxlbWVudC5uYW1lIF0gPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCAhdGhpcy5udW1iZXJPZkludmFsaWRzKCkgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSGlkZSBlcnJvciBjb250YWluZXJzIG9uIGxhc3QgZXJyb3JcclxuXHRcdFx0XHRcdHRoaXMudG9IaWRlID0gdGhpcy50b0hpZGUuYWRkKCB0aGlzLmNvbnRhaW5lcnMgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5zaG93RXJyb3JzKCk7XHJcblxyXG5cdFx0XHRcdC8vIEFkZCBhcmlhLWludmFsaWQgc3RhdHVzIGZvciBzY3JlZW4gcmVhZGVyc1xyXG5cdFx0XHRcdCQoIGVsZW1lbnQgKS5hdHRyKCBcImFyaWEtaW52YWxpZFwiLCAhcnMgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9WYWxpZGF0b3Iuc2hvd0Vycm9ycy9cclxuXHRcdHNob3dFcnJvcnM6IGZ1bmN0aW9uKCBlcnJvcnMgKSB7XHJcblx0XHRcdGlmICggZXJyb3JzICkge1xyXG5cdFx0XHRcdHZhciB2YWxpZGF0b3IgPSB0aGlzO1xyXG5cclxuXHRcdFx0XHQvLyBBZGQgaXRlbXMgdG8gZXJyb3IgbGlzdCBhbmQgbWFwXHJcblx0XHRcdFx0JC5leHRlbmQoIHRoaXMuZXJyb3JNYXAsIGVycm9ycyApO1xyXG5cdFx0XHRcdHRoaXMuZXJyb3JMaXN0ID0gJC5tYXAoIHRoaXMuZXJyb3JNYXAsIGZ1bmN0aW9uKCBtZXNzYWdlLCBuYW1lICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0bWVzc2FnZTogbWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0ZWxlbWVudDogdmFsaWRhdG9yLmZpbmRCeU5hbWUoIG5hbWUgKVsgMCBdXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH0gKTtcclxuXHJcblx0XHRcdFx0Ly8gUmVtb3ZlIGl0ZW1zIGZyb20gc3VjY2VzcyBsaXN0XHJcblx0XHRcdFx0dGhpcy5zdWNjZXNzTGlzdCA9ICQuZ3JlcCggdGhpcy5zdWNjZXNzTGlzdCwgZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gISggZWxlbWVudC5uYW1lIGluIGVycm9ycyApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHRoaXMuc2V0dGluZ3Muc2hvd0Vycm9ycyApIHtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLnNob3dFcnJvcnMuY2FsbCggdGhpcywgdGhpcy5lcnJvck1hcCwgdGhpcy5lcnJvckxpc3QgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmRlZmF1bHRTaG93RXJyb3JzKCk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9WYWxpZGF0b3IucmVzZXRGb3JtL1xyXG5cdFx0cmVzZXRGb3JtOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCAkLmZuLnJlc2V0Rm9ybSApIHtcclxuXHRcdFx0XHQkKCB0aGlzLmN1cnJlbnRGb3JtICkucmVzZXRGb3JtKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5pbnZhbGlkID0ge307XHJcblx0XHRcdHRoaXMuc3VibWl0dGVkID0ge307XHJcblx0XHRcdHRoaXMucHJlcGFyZUZvcm0oKTtcclxuXHRcdFx0dGhpcy5oaWRlRXJyb3JzKCk7XHJcblx0XHRcdHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHMoKVxyXG5cdFx0XHRcdC5yZW1vdmVEYXRhKCBcInByZXZpb3VzVmFsdWVcIiApXHJcblx0XHRcdFx0LnJlbW92ZUF0dHIoIFwiYXJpYS1pbnZhbGlkXCIgKTtcclxuXHJcblx0XHRcdHRoaXMucmVzZXRFbGVtZW50cyggZWxlbWVudHMgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0cmVzZXRFbGVtZW50czogZnVuY3Rpb24oIGVsZW1lbnRzICkge1xyXG5cdFx0XHR2YXIgaTtcclxuXHJcblx0XHRcdGlmICggdGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodCApIHtcclxuXHRcdFx0XHRmb3IgKCBpID0gMDsgZWxlbWVudHNbIGkgXTsgaSsrICkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodC5jYWxsKCB0aGlzLCBlbGVtZW50c1sgaSBdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MsIFwiXCIgKTtcclxuXHRcdFx0XHRcdHRoaXMuZmluZEJ5TmFtZSggZWxlbWVudHNbIGkgXS5uYW1lICkucmVtb3ZlQ2xhc3MoIHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlbGVtZW50c1xyXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCB0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MgKVxyXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCB0aGlzLnNldHRpbmdzLnZhbGlkQ2xhc3MgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRudW1iZXJPZkludmFsaWRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub2JqZWN0TGVuZ3RoKCB0aGlzLmludmFsaWQgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0b2JqZWN0TGVuZ3RoOiBmdW5jdGlvbiggb2JqICkge1xyXG5cdFx0XHQvKiBqc2hpbnQgdW51c2VkOiBmYWxzZSAqL1xyXG5cdFx0XHR2YXIgY291bnQgPSAwLFxyXG5cdFx0XHRcdGk7XHJcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xyXG5cclxuXHRcdFx0XHQvLyBUaGlzIGNoZWNrIGFsbG93cyBjb3VudGluZyBlbGVtZW50cyB3aXRoIGVtcHR5IGVycm9yXHJcblx0XHRcdFx0Ly8gbWVzc2FnZSBhcyBpbnZhbGlkIGVsZW1lbnRzXHJcblx0XHRcdFx0aWYgKCBvYmpbIGkgXSAhPT0gdW5kZWZpbmVkICYmIG9ialsgaSBdICE9PSBudWxsICYmIG9ialsgaSBdICE9PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdGNvdW50Kys7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBjb3VudDtcclxuXHRcdH0sXHJcblxyXG5cdFx0aGlkZUVycm9yczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMuaGlkZVRoZXNlKCB0aGlzLnRvSGlkZSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRoaWRlVGhlc2U6IGZ1bmN0aW9uKCBlcnJvcnMgKSB7XHJcblx0XHRcdGVycm9ycy5ub3QoIHRoaXMuY29udGFpbmVycyApLnRleHQoIFwiXCIgKTtcclxuXHRcdFx0dGhpcy5hZGRXcmFwcGVyKCBlcnJvcnMgKS5oaWRlKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHZhbGlkOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2l6ZSgpID09PSAwO1xyXG5cdFx0fSxcclxuXHJcblx0XHRzaXplOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JMaXN0Lmxlbmd0aDtcclxuXHRcdH0sXHJcblxyXG5cdFx0Zm9jdXNJbnZhbGlkOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCB0aGlzLnNldHRpbmdzLmZvY3VzSW52YWxpZCApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0JCggdGhpcy5maW5kTGFzdEFjdGl2ZSgpIHx8IHRoaXMuZXJyb3JMaXN0Lmxlbmd0aCAmJiB0aGlzLmVycm9yTGlzdFsgMCBdLmVsZW1lbnQgfHwgW10gKVxyXG5cdFx0XHRcdFx0LmZpbHRlciggXCI6dmlzaWJsZVwiIClcclxuXHRcdFx0XHRcdC50cmlnZ2VyKCBcImZvY3VzXCIgKVxyXG5cclxuXHRcdFx0XHRcdC8vIE1hbnVhbGx5IHRyaWdnZXIgZm9jdXNpbiBldmVudDsgd2l0aG91dCBpdCwgZm9jdXNpbiBoYW5kbGVyIGlzbid0IGNhbGxlZCwgZmluZExhc3RBY3RpdmUgd29uJ3QgaGF2ZSBhbnl0aGluZyB0byBmaW5kXHJcblx0XHRcdFx0XHQudHJpZ2dlciggXCJmb2N1c2luXCIgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBJZ25vcmUgSUUgdGhyb3dpbmcgZXJyb3JzIHdoZW4gZm9jdXNpbmcgaGlkZGVuIGVsZW1lbnRzXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGZpbmRMYXN0QWN0aXZlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGxhc3RBY3RpdmUgPSB0aGlzLmxhc3RBY3RpdmU7XHJcblx0XHRcdHJldHVybiBsYXN0QWN0aXZlICYmICQuZ3JlcCggdGhpcy5lcnJvckxpc3QsIGZ1bmN0aW9uKCBuICkge1xyXG5cdFx0XHRcdHJldHVybiBuLmVsZW1lbnQubmFtZSA9PT0gbGFzdEFjdGl2ZS5uYW1lO1xyXG5cdFx0XHR9ICkubGVuZ3RoID09PSAxICYmIGxhc3RBY3RpdmU7XHJcblx0XHR9LFxyXG5cclxuXHRcdGVsZW1lbnRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHZhbGlkYXRvciA9IHRoaXMsXHJcblx0XHRcdFx0cnVsZXNDYWNoZSA9IHt9O1xyXG5cclxuXHRcdFx0Ly8gU2VsZWN0IGFsbCB2YWxpZCBpbnB1dHMgaW5zaWRlIHRoZSBmb3JtIChubyBzdWJtaXQgb3IgcmVzZXQgYnV0dG9ucylcclxuXHRcdFx0cmV0dXJuICQoIHRoaXMuY3VycmVudEZvcm0gKVxyXG5cdFx0XHQuZmluZCggXCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW2NvbnRlbnRlZGl0YWJsZV1cIiApXHJcblx0XHRcdC5ub3QoIFwiOnN1Ym1pdCwgOnJlc2V0LCA6aW1hZ2UsIDpkaXNhYmxlZFwiIClcclxuXHRcdFx0Lm5vdCggdGhpcy5zZXR0aW5ncy5pZ25vcmUgKVxyXG5cdFx0XHQuZmlsdGVyKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR2YXIgbmFtZSA9IHRoaXMubmFtZSB8fCAkKCB0aGlzICkuYXR0ciggXCJuYW1lXCIgKTsgLy8gRm9yIGNvbnRlbnRlZGl0YWJsZVxyXG5cdFx0XHRcdHZhciBpc0NvbnRlbnRFZGl0YWJsZSA9IHR5cGVvZiAkKCB0aGlzICkuYXR0ciggXCJjb250ZW50ZWRpdGFibGVcIiApICE9PSBcInVuZGVmaW5lZFwiICYmICQoIHRoaXMgKS5hdHRyKCBcImNvbnRlbnRlZGl0YWJsZVwiICkgIT09IFwiZmFsc2VcIjtcclxuXHJcblx0XHRcdFx0aWYgKCAhbmFtZSAmJiB2YWxpZGF0b3Iuc2V0dGluZ3MuZGVidWcgJiYgd2luZG93LmNvbnNvbGUgKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCBcIiVvIGhhcyBubyBuYW1lIGFzc2lnbmVkXCIsIHRoaXMgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFNldCBmb3JtIGV4cGFuZG8gb24gY29udGVudGVkaXRhYmxlXHJcblx0XHRcdFx0aWYgKCBpc0NvbnRlbnRFZGl0YWJsZSApIHtcclxuXHRcdFx0XHRcdHRoaXMuZm9ybSA9ICQoIHRoaXMgKS5jbG9zZXN0KCBcImZvcm1cIiApWyAwIF07XHJcblx0XHRcdFx0XHR0aGlzLm5hbWUgPSBuYW1lO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gSWdub3JlIGVsZW1lbnRzIHRoYXQgYmVsb25nIHRvIG90aGVyL25lc3RlZCBmb3Jtc1xyXG5cdFx0XHRcdGlmICggdGhpcy5mb3JtICE9PSB2YWxpZGF0b3IuY3VycmVudEZvcm0gKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBTZWxlY3Qgb25seSB0aGUgZmlyc3QgZWxlbWVudCBmb3IgZWFjaCBuYW1lLCBhbmQgb25seSB0aG9zZSB3aXRoIHJ1bGVzIHNwZWNpZmllZFxyXG5cdFx0XHRcdGlmICggbmFtZSBpbiBydWxlc0NhY2hlIHx8ICF2YWxpZGF0b3Iub2JqZWN0TGVuZ3RoKCAkKCB0aGlzICkucnVsZXMoKSApICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cnVsZXNDYWNoZVsgbmFtZSBdID0gdHJ1ZTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjbGVhbjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0XHRyZXR1cm4gJCggc2VsZWN0b3IgKVsgMCBdO1xyXG5cdFx0fSxcclxuXHJcblx0XHRlcnJvcnM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgZXJyb3JDbGFzcyA9IHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcy5zcGxpdCggXCIgXCIgKS5qb2luKCBcIi5cIiApO1xyXG5cdFx0XHRyZXR1cm4gJCggdGhpcy5zZXR0aW5ncy5lcnJvckVsZW1lbnQgKyBcIi5cIiArIGVycm9yQ2xhc3MsIHRoaXMuZXJyb3JDb250ZXh0ICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHJlc2V0SW50ZXJuYWxzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dGhpcy5zdWNjZXNzTGlzdCA9IFtdO1xyXG5cdFx0XHR0aGlzLmVycm9yTGlzdCA9IFtdO1xyXG5cdFx0XHR0aGlzLmVycm9yTWFwID0ge307XHJcblx0XHRcdHRoaXMudG9TaG93ID0gJCggW10gKTtcclxuXHRcdFx0dGhpcy50b0hpZGUgPSAkKCBbXSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRyZXNldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMucmVzZXRJbnRlcm5hbHMoKTtcclxuXHRcdFx0dGhpcy5jdXJyZW50RWxlbWVudHMgPSAkKCBbXSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRwcmVwYXJlRm9ybTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMucmVzZXQoKTtcclxuXHRcdFx0dGhpcy50b0hpZGUgPSB0aGlzLmVycm9ycygpLmFkZCggdGhpcy5jb250YWluZXJzICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHByZXBhcmVFbGVtZW50OiBmdW5jdGlvbiggZWxlbWVudCApIHtcclxuXHRcdFx0dGhpcy5yZXNldCgpO1xyXG5cdFx0XHR0aGlzLnRvSGlkZSA9IHRoaXMuZXJyb3JzRm9yKCBlbGVtZW50ICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGVsZW1lbnRWYWx1ZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHRcdHZhciAkZWxlbWVudCA9ICQoIGVsZW1lbnQgKSxcclxuXHRcdFx0XHR0eXBlID0gZWxlbWVudC50eXBlLFxyXG5cdFx0XHRcdGlzQ29udGVudEVkaXRhYmxlID0gdHlwZW9mICRlbGVtZW50LmF0dHIoIFwiY29udGVudGVkaXRhYmxlXCIgKSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAkZWxlbWVudC5hdHRyKCBcImNvbnRlbnRlZGl0YWJsZVwiICkgIT09IFwiZmFsc2VcIixcclxuXHRcdFx0XHR2YWwsIGlkeDtcclxuXHJcblx0XHRcdGlmICggdHlwZSA9PT0gXCJyYWRpb1wiIHx8IHR5cGUgPT09IFwiY2hlY2tib3hcIiApIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5maW5kQnlOYW1lKCBlbGVtZW50Lm5hbWUgKS5maWx0ZXIoIFwiOmNoZWNrZWRcIiApLnZhbCgpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBlbGVtZW50LnZhbGlkaXR5ICE9PSBcInVuZGVmaW5lZFwiICkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50LnZhbGlkaXR5LmJhZElucHV0ID8gXCJOYU5cIiA6ICRlbGVtZW50LnZhbCgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIGlzQ29udGVudEVkaXRhYmxlICkge1xyXG5cdFx0XHRcdHZhbCA9ICRlbGVtZW50LnRleHQoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR2YWwgPSAkZWxlbWVudC52YWwoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZpbGVcIiApIHtcclxuXHJcblx0XHRcdFx0Ly8gTW9kZXJuIGJyb3dzZXIgKGNocm9tZSAmIHNhZmFyaSlcclxuXHRcdFx0XHRpZiAoIHZhbC5zdWJzdHIoIDAsIDEyICkgPT09IFwiQzpcXFxcZmFrZXBhdGhcXFxcXCIgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdmFsLnN1YnN0ciggMTIgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIExlZ2FjeSBicm93c2Vyc1xyXG5cdFx0XHRcdC8vIFVuaXgtYmFzZWQgcGF0aFxyXG5cdFx0XHRcdGlkeCA9IHZhbC5sYXN0SW5kZXhPZiggXCIvXCIgKTtcclxuXHRcdFx0XHRpZiAoIGlkeCA+PSAwICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHZhbC5zdWJzdHIoIGlkeCArIDEgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFdpbmRvd3MtYmFzZWQgcGF0aFxyXG5cdFx0XHRcdGlkeCA9IHZhbC5sYXN0SW5kZXhPZiggXCJcXFxcXCIgKTtcclxuXHRcdFx0XHRpZiAoIGlkeCA+PSAwICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHZhbC5zdWJzdHIoIGlkeCArIDEgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEp1c3QgdGhlIGZpbGUgbmFtZVxyXG5cdFx0XHRcdHJldHVybiB2YWw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0XHRyZXR1cm4gdmFsLnJlcGxhY2UoIC9cXHIvZywgXCJcIiApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB2YWw7XHJcblx0XHR9LFxyXG5cclxuXHRcdGNoZWNrOiBmdW5jdGlvbiggZWxlbWVudCApIHtcclxuXHRcdFx0ZWxlbWVudCA9IHRoaXMudmFsaWRhdGlvblRhcmdldEZvciggdGhpcy5jbGVhbiggZWxlbWVudCApICk7XHJcblxyXG5cdFx0XHR2YXIgcnVsZXMgPSAkKCBlbGVtZW50ICkucnVsZXMoKSxcclxuXHRcdFx0XHRydWxlc0NvdW50ID0gJC5tYXAoIHJ1bGVzLCBmdW5jdGlvbiggbiwgaSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0XHRcdH0gKS5sZW5ndGgsXHJcblx0XHRcdFx0ZGVwZW5kZW5jeU1pc21hdGNoID0gZmFsc2UsXHJcblx0XHRcdFx0dmFsID0gdGhpcy5lbGVtZW50VmFsdWUoIGVsZW1lbnQgKSxcclxuXHRcdFx0XHRyZXN1bHQsIG1ldGhvZCwgcnVsZSwgbm9ybWFsaXplcjtcclxuXHJcblx0XHRcdC8vIFByaW9yaXRpemUgdGhlIGxvY2FsIG5vcm1hbGl6ZXIgZGVmaW5lZCBmb3IgdGhpcyBlbGVtZW50IG92ZXIgdGhlIGdsb2JhbCBvbmVcclxuXHRcdFx0Ly8gaWYgdGhlIGZvcm1lciBleGlzdHMsIG90aGVyd2lzZSB1c2VyIHRoZSBnbG9iYWwgb25lIGluIGNhc2UgaXQgZXhpc3RzLlxyXG5cdFx0XHRpZiAoIHR5cGVvZiBydWxlcy5ub3JtYWxpemVyID09PSBcImZ1bmN0aW9uXCIgKSB7XHJcblx0XHRcdFx0bm9ybWFsaXplciA9IHJ1bGVzLm5vcm1hbGl6ZXI7XHJcblx0XHRcdH0gZWxzZSBpZiAoXHR0eXBlb2YgdGhpcy5zZXR0aW5ncy5ub3JtYWxpemVyID09PSBcImZ1bmN0aW9uXCIgKSB7XHJcblx0XHRcdFx0bm9ybWFsaXplciA9IHRoaXMuc2V0dGluZ3Mubm9ybWFsaXplcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWYgbm9ybWFsaXplciBpcyBkZWZpbmVkLCB0aGVuIGNhbGwgaXQgdG8gcmV0cmVpdmUgdGhlIGNoYW5nZWQgdmFsdWUgaW5zdGVhZFxyXG5cdFx0XHQvLyBvZiB1c2luZyB0aGUgcmVhbCBvbmUuXHJcblx0XHRcdC8vIE5vdGUgdGhhdCBgdGhpc2AgaW4gdGhlIG5vcm1hbGl6ZXIgaXMgYGVsZW1lbnRgLlxyXG5cdFx0XHRpZiAoIG5vcm1hbGl6ZXIgKSB7XHJcblx0XHRcdFx0dmFsID0gbm9ybWFsaXplci5jYWxsKCBlbGVtZW50LCB2YWwgKTtcclxuXHJcblx0XHRcdFx0Ly8gRGVsZXRlIHRoZSBub3JtYWxpemVyIGZyb20gcnVsZXMgdG8gYXZvaWQgdHJlYXRpbmcgaXQgYXMgYSBwcmUtZGVmaW5lZCBtZXRob2QuXHJcblx0XHRcdFx0ZGVsZXRlIHJ1bGVzLm5vcm1hbGl6ZXI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoIG1ldGhvZCBpbiBydWxlcyApIHtcclxuXHRcdFx0XHRydWxlID0geyBtZXRob2Q6IG1ldGhvZCwgcGFyYW1ldGVyczogcnVsZXNbIG1ldGhvZCBdIH07XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHJlc3VsdCA9ICQudmFsaWRhdG9yLm1ldGhvZHNbIG1ldGhvZCBdLmNhbGwoIHRoaXMsIHZhbCwgZWxlbWVudCwgcnVsZS5wYXJhbWV0ZXJzICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgYSBtZXRob2QgaW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkIGlzIG9wdGlvbmFsIGFuZCB0aGVyZWZvcmUgdmFsaWQsXHJcblx0XHRcdFx0XHQvLyBkb24ndCBtYXJrIGl0IGFzIHZhbGlkIHdoZW4gdGhlcmUgYXJlIG5vIG90aGVyIHJ1bGVzXHJcblx0XHRcdFx0XHRpZiAoIHJlc3VsdCA9PT0gXCJkZXBlbmRlbmN5LW1pc21hdGNoXCIgJiYgcnVsZXNDb3VudCA9PT0gMSApIHtcclxuXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeU1pc21hdGNoID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRkZXBlbmRlbmN5TWlzbWF0Y2ggPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHJlc3VsdCA9PT0gXCJwZW5kaW5nXCIgKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9IaWRlID0gdGhpcy50b0hpZGUubm90KCB0aGlzLmVycm9yc0ZvciggZWxlbWVudCApICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICFyZXN1bHQgKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0QW5kQWRkKCBlbGVtZW50LCBydWxlICk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdGlmICggdGhpcy5zZXR0aW5ncy5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coIFwiRXhjZXB0aW9uIG9jY3VycmVkIHdoZW4gY2hlY2tpbmcgZWxlbWVudCBcIiArIGVsZW1lbnQuaWQgKyBcIiwgY2hlY2sgdGhlICdcIiArIHJ1bGUubWV0aG9kICsgXCInIG1ldGhvZC5cIiwgZSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBlIGluc3RhbmNlb2YgVHlwZUVycm9yICkge1xyXG5cdFx0XHRcdFx0XHRlLm1lc3NhZ2UgKz0gXCIuICBFeGNlcHRpb24gb2NjdXJyZWQgd2hlbiBjaGVja2luZyBlbGVtZW50IFwiICsgZWxlbWVudC5pZCArIFwiLCBjaGVjayB0aGUgJ1wiICsgcnVsZS5tZXRob2QgKyBcIicgbWV0aG9kLlwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRocm93IGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggZGVwZW5kZW5jeU1pc21hdGNoICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHRoaXMub2JqZWN0TGVuZ3RoKCBydWxlcyApICkge1xyXG5cdFx0XHRcdHRoaXMuc3VjY2Vzc0xpc3QucHVzaCggZWxlbWVudCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBSZXR1cm4gdGhlIGN1c3RvbSBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4gZWxlbWVudCBhbmQgdmFsaWRhdGlvbiBtZXRob2RcclxuXHRcdC8vIHNwZWNpZmllZCBpbiB0aGUgZWxlbWVudCdzIEhUTUw1IGRhdGEgYXR0cmlidXRlXHJcblx0XHQvLyByZXR1cm4gdGhlIGdlbmVyaWMgbWVzc2FnZSBpZiBwcmVzZW50IGFuZCBubyBtZXRob2Qgc3BlY2lmaWMgbWVzc2FnZSBpcyBwcmVzZW50XHJcblx0XHRjdXN0b21EYXRhTWVzc2FnZTogZnVuY3Rpb24oIGVsZW1lbnQsIG1ldGhvZCApIHtcclxuXHRcdFx0cmV0dXJuICQoIGVsZW1lbnQgKS5kYXRhKCBcIm1zZ1wiICsgbWV0aG9kLmNoYXJBdCggMCApLnRvVXBwZXJDYXNlKCkgK1xyXG5cdFx0XHRcdG1ldGhvZC5zdWJzdHJpbmcoIDEgKS50b0xvd2VyQ2FzZSgpICkgfHwgJCggZWxlbWVudCApLmRhdGEoIFwibXNnXCIgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gUmV0dXJuIHRoZSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGVsZW1lbnQgbmFtZSBhbmQgdmFsaWRhdGlvbiBtZXRob2RcclxuXHRcdGN1c3RvbU1lc3NhZ2U6IGZ1bmN0aW9uKCBuYW1lLCBtZXRob2QgKSB7XHJcblx0XHRcdHZhciBtID0gdGhpcy5zZXR0aW5ncy5tZXNzYWdlc1sgbmFtZSBdO1xyXG5cdFx0XHRyZXR1cm4gbSAmJiAoIG0uY29uc3RydWN0b3IgPT09IFN0cmluZyA/IG0gOiBtWyBtZXRob2QgXSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBSZXR1cm4gdGhlIGZpcnN0IGRlZmluZWQgYXJndW1lbnQsIGFsbG93aW5nIGVtcHR5IHN0cmluZ3NcclxuXHRcdGZpbmREZWZpbmVkOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggYXJndW1lbnRzWyBpIF0gIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBhcmd1bWVudHNbIGkgXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgJ3J1bGUnIHVzZWQgdG8gYmUgYSBzdHJpbmcsIGFuZCBleHRlbmRlZCB0byBhbiBvYmplY3QgbGl0ZXJhbFxyXG5cdFx0Ly8gb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxyXG5cdFx0Ly8gcnVsZSA9IHtcclxuXHRcdC8vICAgICBtZXRob2Q6IFwibWV0aG9kIG5hbWVcIixcclxuXHRcdC8vICAgICBwYXJhbWV0ZXJzOiBcInRoZSBnaXZlbiBtZXRob2QgcGFyYW1ldGVyc1wiXHJcblx0XHQvLyB9XHJcblx0XHQvL1xyXG5cdFx0Ly8gVGhlIG9sZCBiZWhhdmlvciBzdGlsbCBzdXBwb3J0ZWQsIGtlcHQgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoXHJcblx0XHQvLyBvbGQgY29kZSwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxyXG5cdFx0ZGVmYXVsdE1lc3NhZ2U6IGZ1bmN0aW9uKCBlbGVtZW50LCBydWxlICkge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRcdHJ1bGUgPSB7IG1ldGhvZDogcnVsZSB9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgbWVzc2FnZSA9IHRoaXMuZmluZERlZmluZWQoXHJcblx0XHRcdFx0XHR0aGlzLmN1c3RvbU1lc3NhZ2UoIGVsZW1lbnQubmFtZSwgcnVsZS5tZXRob2QgKSxcclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tRGF0YU1lc3NhZ2UoIGVsZW1lbnQsIHJ1bGUubWV0aG9kICksXHJcblxyXG5cdFx0XHRcdFx0Ly8gJ3RpdGxlJyBpcyBuZXZlciB1bmRlZmluZWQsIHNvIGhhbmRsZSBlbXB0eSBzdHJpbmcgYXMgdW5kZWZpbmVkXHJcblx0XHRcdFx0XHQhdGhpcy5zZXR0aW5ncy5pZ25vcmVUaXRsZSAmJiBlbGVtZW50LnRpdGxlIHx8IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdCQudmFsaWRhdG9yLm1lc3NhZ2VzWyBydWxlLm1ldGhvZCBdLFxyXG5cdFx0XHRcdFx0XCI8c3Ryb25nPldhcm5pbmc6IE5vIG1lc3NhZ2UgZGVmaW5lZCBmb3IgXCIgKyBlbGVtZW50Lm5hbWUgKyBcIjwvc3Ryb25nPlwiXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHR0aGVyZWdleCA9IC9cXCQ/XFx7KFxcZCspXFx9L2c7XHJcblx0XHRcdGlmICggdHlwZW9mIG1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIiApIHtcclxuXHRcdFx0XHRtZXNzYWdlID0gbWVzc2FnZS5jYWxsKCB0aGlzLCBydWxlLnBhcmFtZXRlcnMsIGVsZW1lbnQgKTtcclxuXHRcdFx0fSBlbHNlIGlmICggdGhlcmVnZXgudGVzdCggbWVzc2FnZSApICkge1xyXG5cdFx0XHRcdG1lc3NhZ2UgPSAkLnZhbGlkYXRvci5mb3JtYXQoIG1lc3NhZ2UucmVwbGFjZSggdGhlcmVnZXgsIFwieyQxfVwiICksIHJ1bGUucGFyYW1ldGVycyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbWVzc2FnZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Zm9ybWF0QW5kQWRkOiBmdW5jdGlvbiggZWxlbWVudCwgcnVsZSApIHtcclxuXHRcdFx0dmFyIG1lc3NhZ2UgPSB0aGlzLmRlZmF1bHRNZXNzYWdlKCBlbGVtZW50LCBydWxlICk7XHJcblxyXG5cdFx0XHR0aGlzLmVycm9yTGlzdC5wdXNoKCB7XHJcblx0XHRcdFx0bWVzc2FnZTogbWVzc2FnZSxcclxuXHRcdFx0XHRlbGVtZW50OiBlbGVtZW50LFxyXG5cdFx0XHRcdG1ldGhvZDogcnVsZS5tZXRob2RcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0dGhpcy5lcnJvck1hcFsgZWxlbWVudC5uYW1lIF0gPSBtZXNzYWdlO1xyXG5cdFx0XHR0aGlzLnN1Ym1pdHRlZFsgZWxlbWVudC5uYW1lIF0gPSBtZXNzYWdlO1xyXG5cdFx0fSxcclxuXHJcblx0XHRhZGRXcmFwcGVyOiBmdW5jdGlvbiggdG9Ub2dnbGUgKSB7XHJcblx0XHRcdGlmICggdGhpcy5zZXR0aW5ncy53cmFwcGVyICkge1xyXG5cdFx0XHRcdHRvVG9nZ2xlID0gdG9Ub2dnbGUuYWRkKCB0b1RvZ2dsZS5wYXJlbnQoIHRoaXMuc2V0dGluZ3Mud3JhcHBlciApICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRvVG9nZ2xlO1xyXG5cdFx0fSxcclxuXHJcblx0XHRkZWZhdWx0U2hvd0Vycm9yczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBpLCBlbGVtZW50cywgZXJyb3I7XHJcblx0XHRcdGZvciAoIGkgPSAwOyB0aGlzLmVycm9yTGlzdFsgaSBdOyBpKysgKSB7XHJcblx0XHRcdFx0ZXJyb3IgPSB0aGlzLmVycm9yTGlzdFsgaSBdO1xyXG5cdFx0XHRcdGlmICggdGhpcy5zZXR0aW5ncy5oaWdobGlnaHQgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmhpZ2hsaWdodC5jYWxsKCB0aGlzLCBlcnJvci5lbGVtZW50LCB0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MsIHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnNob3dMYWJlbCggZXJyb3IuZWxlbWVudCwgZXJyb3IubWVzc2FnZSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggdGhpcy5lcnJvckxpc3QubGVuZ3RoICkge1xyXG5cdFx0XHRcdHRoaXMudG9TaG93ID0gdGhpcy50b1Nob3cuYWRkKCB0aGlzLmNvbnRhaW5lcnMgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHRoaXMuc2V0dGluZ3Muc3VjY2VzcyApIHtcclxuXHRcdFx0XHRmb3IgKCBpID0gMDsgdGhpcy5zdWNjZXNzTGlzdFsgaSBdOyBpKysgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dMYWJlbCggdGhpcy5zdWNjZXNzTGlzdFsgaSBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggdGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodCApIHtcclxuXHRcdFx0XHRmb3IgKCBpID0gMCwgZWxlbWVudHMgPSB0aGlzLnZhbGlkRWxlbWVudHMoKTsgZWxlbWVudHNbIGkgXTsgaSsrICkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodC5jYWxsKCB0aGlzLCBlbGVtZW50c1sgaSBdLCB0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MsIHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnRvSGlkZSA9IHRoaXMudG9IaWRlLm5vdCggdGhpcy50b1Nob3cgKTtcclxuXHRcdFx0dGhpcy5oaWRlRXJyb3JzKCk7XHJcblx0XHRcdHRoaXMuYWRkV3JhcHBlciggdGhpcy50b1Nob3cgKS5zaG93KCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHZhbGlkRWxlbWVudHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jdXJyZW50RWxlbWVudHMubm90KCB0aGlzLmludmFsaWRFbGVtZW50cygpICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGludmFsaWRFbGVtZW50czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiAkKCB0aGlzLmVycm9yTGlzdCApLm1hcCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZWxlbWVudDtcclxuXHRcdFx0fSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRzaG93TGFiZWw6IGZ1bmN0aW9uKCBlbGVtZW50LCBtZXNzYWdlICkge1xyXG5cdFx0XHR2YXIgcGxhY2UsIGdyb3VwLCBlcnJvcklELCB2LFxyXG5cdFx0XHRcdGVycm9yID0gdGhpcy5lcnJvcnNGb3IoIGVsZW1lbnQgKSxcclxuXHRcdFx0XHRlbGVtZW50SUQgPSB0aGlzLmlkT3JOYW1lKCBlbGVtZW50ICksXHJcblx0XHRcdFx0ZGVzY3JpYmVkQnkgPSAkKCBlbGVtZW50ICkuYXR0ciggXCJhcmlhLWRlc2NyaWJlZGJ5XCIgKTtcclxuXHJcblx0XHRcdGlmICggZXJyb3IubGVuZ3RoICkge1xyXG5cclxuXHRcdFx0XHQvLyBSZWZyZXNoIGVycm9yL3N1Y2Nlc3MgY2xhc3NcclxuXHRcdFx0XHRlcnJvci5yZW1vdmVDbGFzcyggdGhpcy5zZXR0aW5ncy52YWxpZENsYXNzICkuYWRkQ2xhc3MoIHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcyApO1xyXG5cclxuXHRcdFx0XHQvLyBSZXBsYWNlIG1lc3NhZ2Ugb24gZXhpc3RpbmcgbGFiZWxcclxuXHRcdFx0XHRlcnJvci5odG1sKCBtZXNzYWdlICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdC8vIENyZWF0ZSBlcnJvciBlbGVtZW50XHJcblx0XHRcdFx0ZXJyb3IgPSAkKCBcIjxcIiArIHRoaXMuc2V0dGluZ3MuZXJyb3JFbGVtZW50ICsgXCI+XCIgKVxyXG5cdFx0XHRcdFx0LmF0dHIoIFwiaWRcIiwgZWxlbWVudElEICsgXCItZXJyb3JcIiApXHJcblx0XHRcdFx0XHQuYWRkQ2xhc3MoIHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcyApXHJcblx0XHRcdFx0XHQuaHRtbCggbWVzc2FnZSB8fCBcIlwiICk7XHJcblxyXG5cdFx0XHRcdC8vIE1haW50YWluIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB0byBiZSBwbGFjZWQgaW50byB0aGUgRE9NXHJcblx0XHRcdFx0cGxhY2UgPSBlcnJvcjtcclxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0dGluZ3Mud3JhcHBlciApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSwgZXZlbiBpbiBJRVxyXG5cdFx0XHRcdFx0Ly8gYWN0dWFsbHkgc2hvd2luZyB0aGUgd3JhcHBlZCBlbGVtZW50IGlzIGhhbmRsZWQgZWxzZXdoZXJlXHJcblx0XHRcdFx0XHRwbGFjZSA9IGVycm9yLmhpZGUoKS5zaG93KCkud3JhcCggXCI8XCIgKyB0aGlzLnNldHRpbmdzLndyYXBwZXIgKyBcIi8+XCIgKS5wYXJlbnQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCB0aGlzLmxhYmVsQ29udGFpbmVyLmxlbmd0aCApIHtcclxuXHRcdFx0XHRcdHRoaXMubGFiZWxDb250YWluZXIuYXBwZW5kKCBwbGFjZSApO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHRoaXMuc2V0dGluZ3MuZXJyb3JQbGFjZW1lbnQgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmVycm9yUGxhY2VtZW50LmNhbGwoIHRoaXMsIHBsYWNlLCAkKCBlbGVtZW50ICkgKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cGxhY2UuaW5zZXJ0QWZ0ZXIoIGVsZW1lbnQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIExpbmsgZXJyb3IgYmFjayB0byB0aGUgZWxlbWVudFxyXG5cdFx0XHRcdGlmICggZXJyb3IuaXMoIFwibGFiZWxcIiApICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIHRoZSBlcnJvciBpcyBhIGxhYmVsLCB0aGVuIGFzc29jaWF0ZSB1c2luZyAnZm9yJ1xyXG5cdFx0XHRcdFx0ZXJyb3IuYXR0ciggXCJmb3JcIiwgZWxlbWVudElEICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgYW4gYXNzb2NpYXRlZCBsYWJlbCwgdGhlbiBpdCdzIG5lY2Vzc2FyeVxyXG5cdFx0XHRcdFx0Ly8gdG8gZXhwbGljaXRseSBhcHBseSBhcmlhLWRlc2NyaWJlZGJ5XHJcblx0XHRcdFx0fSBlbHNlIGlmICggZXJyb3IucGFyZW50cyggXCJsYWJlbFtmb3I9J1wiICsgdGhpcy5lc2NhcGVDc3NNZXRhKCBlbGVtZW50SUQgKSArIFwiJ11cIiApLmxlbmd0aCA9PT0gMCApIHtcclxuXHRcdFx0XHRcdGVycm9ySUQgPSBlcnJvci5hdHRyKCBcImlkXCIgKTtcclxuXHJcblx0XHRcdFx0XHQvLyBSZXNwZWN0IGV4aXN0aW5nIG5vbi1lcnJvciBhcmlhLWRlc2NyaWJlZGJ5XHJcblx0XHRcdFx0XHRpZiAoICFkZXNjcmliZWRCeSApIHtcclxuXHRcdFx0XHRcdFx0ZGVzY3JpYmVkQnkgPSBlcnJvcklEO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWRlc2NyaWJlZEJ5Lm1hdGNoKCBuZXcgUmVnRXhwKCBcIlxcXFxiXCIgKyB0aGlzLmVzY2FwZUNzc01ldGEoIGVycm9ySUQgKSArIFwiXFxcXGJcIiApICkgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBBZGQgdG8gZW5kIG9mIGxpc3QgaWYgbm90IGFscmVhZHkgcHJlc2VudFxyXG5cdFx0XHRcdFx0XHRkZXNjcmliZWRCeSArPSBcIiBcIiArIGVycm9ySUQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkKCBlbGVtZW50ICkuYXR0ciggXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NyaWJlZEJ5ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgdGhpcyBlbGVtZW50IGlzIGdyb3VwZWQsIHRoZW4gYXNzaWduIHRvIGFsbCBlbGVtZW50cyBpbiB0aGUgc2FtZSBncm91cFxyXG5cdFx0XHRcdFx0Z3JvdXAgPSB0aGlzLmdyb3Vwc1sgZWxlbWVudC5uYW1lIF07XHJcblx0XHRcdFx0XHRpZiAoIGdyb3VwICkge1xyXG5cdFx0XHRcdFx0XHR2ID0gdGhpcztcclxuXHRcdFx0XHRcdFx0JC5lYWNoKCB2Lmdyb3VwcywgZnVuY3Rpb24oIG5hbWUsIHRlc3Rncm91cCApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIHRlc3Rncm91cCA9PT0gZ3JvdXAgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQkKCBcIltuYW1lPSdcIiArIHYuZXNjYXBlQ3NzTWV0YSggbmFtZSApICsgXCInXVwiLCB2LmN1cnJlbnRGb3JtIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIoIFwiYXJpYS1kZXNjcmliZWRieVwiLCBlcnJvci5hdHRyKCBcImlkXCIgKSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoICFtZXNzYWdlICYmIHRoaXMuc2V0dGluZ3Muc3VjY2VzcyApIHtcclxuXHRcdFx0XHRlcnJvci50ZXh0KCBcIlwiICk7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgdGhpcy5zZXR0aW5ncy5zdWNjZXNzID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRcdFx0ZXJyb3IuYWRkQ2xhc3MoIHRoaXMuc2V0dGluZ3Muc3VjY2VzcyApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLnN1Y2Nlc3MoIGVycm9yLCBlbGVtZW50ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMudG9TaG93ID0gdGhpcy50b1Nob3cuYWRkKCBlcnJvciApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRlcnJvcnNGb3I6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xyXG5cdFx0XHR2YXIgbmFtZSA9IHRoaXMuZXNjYXBlQ3NzTWV0YSggdGhpcy5pZE9yTmFtZSggZWxlbWVudCApICksXHJcblx0XHRcdFx0ZGVzY3JpYmVyID0gJCggZWxlbWVudCApLmF0dHIoIFwiYXJpYS1kZXNjcmliZWRieVwiICksXHJcblx0XHRcdFx0c2VsZWN0b3IgPSBcImxhYmVsW2Zvcj0nXCIgKyBuYW1lICsgXCInXSwgbGFiZWxbZm9yPSdcIiArIG5hbWUgKyBcIiddICpcIjtcclxuXHJcblx0XHRcdC8vICdhcmlhLWRlc2NyaWJlZGJ5JyBzaG91bGQgZGlyZWN0bHkgcmVmZXJlbmNlIHRoZSBlcnJvciBlbGVtZW50XHJcblx0XHRcdGlmICggZGVzY3JpYmVyICkge1xyXG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3IgKyBcIiwgI1wiICsgdGhpcy5lc2NhcGVDc3NNZXRhKCBkZXNjcmliZXIgKVxyXG5cdFx0XHRcdFx0LnJlcGxhY2UoIC9cXHMrL2csIFwiLCAjXCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXNcclxuXHRcdFx0XHQuZXJyb3JzKClcclxuXHRcdFx0XHQuZmlsdGVyKCBzZWxlY3RvciApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBTZWUgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9jYXRlZ29yeS9zZWxlY3RvcnMvLCBmb3IgQ1NTXHJcblx0XHQvLyBtZXRhLWNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgZXNjYXBlZCBpbiBvcmRlciB0byBiZSB1c2VkIHdpdGggSlF1ZXJ5XHJcblx0XHQvLyBhcyBhIGxpdGVyYWwgcGFydCBvZiBhIG5hbWUvaWQgb3IgYW55IHNlbGVjdG9yLlxyXG5cdFx0ZXNjYXBlQ3NzTWV0YTogZnVuY3Rpb24oIHN0cmluZyApIHtcclxuXHRcdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCAvKFtcXFxcIVwiIyQlJicoKSorLC4vOjs8PT4/QFxcW1xcXV5ge3x9fl0pL2csIFwiXFxcXCQxXCIgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0aWRPck5hbWU6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5ncm91cHNbIGVsZW1lbnQubmFtZSBdIHx8ICggdGhpcy5jaGVja2FibGUoIGVsZW1lbnQgKSA/IGVsZW1lbnQubmFtZSA6IGVsZW1lbnQuaWQgfHwgZWxlbWVudC5uYW1lICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHZhbGlkYXRpb25UYXJnZXRGb3I6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xyXG5cclxuXHRcdFx0Ly8gSWYgcmFkaW8vY2hlY2tib3gsIHZhbGlkYXRlIGZpcnN0IGVsZW1lbnQgaW4gZ3JvdXAgaW5zdGVhZFxyXG5cdFx0XHRpZiAoIHRoaXMuY2hlY2thYmxlKCBlbGVtZW50ICkgKSB7XHJcblx0XHRcdFx0ZWxlbWVudCA9IHRoaXMuZmluZEJ5TmFtZSggZWxlbWVudC5uYW1lICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFsd2F5cyBhcHBseSBpZ25vcmUgZmlsdGVyXHJcblx0XHRcdHJldHVybiAkKCBlbGVtZW50ICkubm90KCB0aGlzLnNldHRpbmdzLmlnbm9yZSApWyAwIF07XHJcblx0XHR9LFxyXG5cclxuXHRcdGNoZWNrYWJsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHRcdHJldHVybiAoIC9yYWRpb3xjaGVja2JveC9pICkudGVzdCggZWxlbWVudC50eXBlICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGZpbmRCeU5hbWU6IGZ1bmN0aW9uKCBuYW1lICkge1xyXG5cdFx0XHRyZXR1cm4gJCggdGhpcy5jdXJyZW50Rm9ybSApLmZpbmQoIFwiW25hbWU9J1wiICsgdGhpcy5lc2NhcGVDc3NNZXRhKCBuYW1lICkgKyBcIiddXCIgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0TGVuZ3RoOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XHRcdHN3aXRjaCAoIGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcclxuXHRcdFx0Y2FzZSBcInNlbGVjdFwiOlxyXG5cdFx0XHRcdHJldHVybiAkKCBcIm9wdGlvbjpzZWxlY3RlZFwiLCBlbGVtZW50ICkubGVuZ3RoO1xyXG5cdFx0XHRjYXNlIFwiaW5wdXRcIjpcclxuXHRcdFx0XHRpZiAoIHRoaXMuY2hlY2thYmxlKCBlbGVtZW50ICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5maW5kQnlOYW1lKCBlbGVtZW50Lm5hbWUgKS5maWx0ZXIoIFwiOmNoZWNrZWRcIiApLmxlbmd0aDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aDtcclxuXHRcdH0sXHJcblxyXG5cdFx0ZGVwZW5kOiBmdW5jdGlvbiggcGFyYW0sIGVsZW1lbnQgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmRlcGVuZFR5cGVzWyB0eXBlb2YgcGFyYW0gXSA/IHRoaXMuZGVwZW5kVHlwZXNbIHR5cGVvZiBwYXJhbSBdKCBwYXJhbSwgZWxlbWVudCApIDogdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0ZGVwZW5kVHlwZXM6IHtcclxuXHRcdFx0XCJib29sZWFuXCI6IGZ1bmN0aW9uKCBwYXJhbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gcGFyYW07XHJcblx0XHRcdH0sXHJcblx0XHRcdFwic3RyaW5nXCI6IGZ1bmN0aW9uKCBwYXJhbSwgZWxlbWVudCApIHtcclxuXHRcdFx0XHRyZXR1cm4gISEkKCBwYXJhbSwgZWxlbWVudC5mb3JtICkubGVuZ3RoO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcImZ1bmN0aW9uXCI6IGZ1bmN0aW9uKCBwYXJhbSwgZWxlbWVudCApIHtcclxuXHRcdFx0XHRyZXR1cm4gcGFyYW0oIGVsZW1lbnQgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRvcHRpb25hbDogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHRcdHZhciB2YWwgPSB0aGlzLmVsZW1lbnRWYWx1ZSggZWxlbWVudCApO1xyXG5cdFx0XHRyZXR1cm4gISQudmFsaWRhdG9yLm1ldGhvZHMucmVxdWlyZWQuY2FsbCggdGhpcywgdmFsLCBlbGVtZW50ICkgJiYgXCJkZXBlbmRlbmN5LW1pc21hdGNoXCI7XHJcblx0XHR9LFxyXG5cclxuXHRcdHN0YXJ0UmVxdWVzdDogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHRcdGlmICggIXRoaXMucGVuZGluZ1sgZWxlbWVudC5uYW1lIF0gKSB7XHJcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdCsrO1xyXG5cdFx0XHRcdCQoIGVsZW1lbnQgKS5hZGRDbGFzcyggdGhpcy5zZXR0aW5ncy5wZW5kaW5nQ2xhc3MgKTtcclxuXHRcdFx0XHR0aGlzLnBlbmRpbmdbIGVsZW1lbnQubmFtZSBdID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRzdG9wUmVxdWVzdDogZnVuY3Rpb24oIGVsZW1lbnQsIHZhbGlkICkge1xyXG5cdFx0XHR0aGlzLnBlbmRpbmdSZXF1ZXN0LS07XHJcblxyXG5cdFx0XHQvLyBTb21ldGltZXMgc3luY2hyb25pemF0aW9uIGZhaWxzLCBtYWtlIHN1cmUgcGVuZGluZ1JlcXVlc3QgaXMgbmV2ZXIgPCAwXHJcblx0XHRcdGlmICggdGhpcy5wZW5kaW5nUmVxdWVzdCA8IDAgKSB7XHJcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdCA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0ZGVsZXRlIHRoaXMucGVuZGluZ1sgZWxlbWVudC5uYW1lIF07XHJcblx0XHRcdCQoIGVsZW1lbnQgKS5yZW1vdmVDbGFzcyggdGhpcy5zZXR0aW5ncy5wZW5kaW5nQ2xhc3MgKTtcclxuXHRcdFx0aWYgKCB2YWxpZCAmJiB0aGlzLnBlbmRpbmdSZXF1ZXN0ID09PSAwICYmIHRoaXMuZm9ybVN1Ym1pdHRlZCAmJiB0aGlzLmZvcm0oKSApIHtcclxuXHRcdFx0XHQkKCB0aGlzLmN1cnJlbnRGb3JtICkuc3VibWl0KCk7XHJcblxyXG5cdFx0XHRcdC8vIFJlbW92ZSB0aGUgaGlkZGVuIGlucHV0IHRoYXQgd2FzIHVzZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlXHJcblx0XHRcdFx0Ly8gbWlzc2luZyBzdWJtaXQgYnV0dG9uLiBUaGUgaGlkZGVuIGlucHV0IGlzIGFkZGVkIGJ5IGBoYW5kbGUoKWBcclxuXHRcdFx0XHQvLyB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIHVzZWQgc3VibWl0IGJ1dHRvbiBpcyBwYXNzZWQgb25cclxuXHRcdFx0XHQvLyBmb3Igc2NyaXB0ZWQgc3VibWl0cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2RcclxuXHRcdFx0XHRpZiAoIHRoaXMuc3VibWl0QnV0dG9uICkge1xyXG5cdFx0XHRcdFx0JCggXCJpbnB1dDpoaWRkZW5bbmFtZT0nXCIgKyB0aGlzLnN1Ym1pdEJ1dHRvbi5uYW1lICsgXCInXVwiLCB0aGlzLmN1cnJlbnRGb3JtICkucmVtb3ZlKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmZvcm1TdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHRcdFx0fSBlbHNlIGlmICggIXZhbGlkICYmIHRoaXMucGVuZGluZ1JlcXVlc3QgPT09IDAgJiYgdGhpcy5mb3JtU3VibWl0dGVkICkge1xyXG5cdFx0XHRcdCQoIHRoaXMuY3VycmVudEZvcm0gKS50cmlnZ2VySGFuZGxlciggXCJpbnZhbGlkLWZvcm1cIiwgWyB0aGlzIF0gKTtcclxuXHRcdFx0XHR0aGlzLmZvcm1TdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRwcmV2aW91c1ZhbHVlOiBmdW5jdGlvbiggZWxlbWVudCwgbWV0aG9kICkge1xyXG5cdFx0XHRtZXRob2QgPSB0eXBlb2YgbWV0aG9kID09PSBcInN0cmluZ1wiICYmIG1ldGhvZCB8fCBcInJlbW90ZVwiO1xyXG5cclxuXHRcdFx0cmV0dXJuICQuZGF0YSggZWxlbWVudCwgXCJwcmV2aW91c1ZhbHVlXCIgKSB8fCAkLmRhdGEoIGVsZW1lbnQsIFwicHJldmlvdXNWYWx1ZVwiLCB7XHJcblx0XHRcdFx0b2xkOiBudWxsLFxyXG5cdFx0XHRcdHZhbGlkOiB0cnVlLFxyXG5cdFx0XHRcdG1lc3NhZ2U6IHRoaXMuZGVmYXVsdE1lc3NhZ2UoIGVsZW1lbnQsIHsgbWV0aG9kOiBtZXRob2QgfSApXHJcblx0XHRcdH0gKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gQ2xlYW5zIHVwIGFsbCBmb3JtcyBhbmQgZWxlbWVudHMsIHJlbW92ZXMgdmFsaWRhdG9yLXNwZWNpZmljIGV2ZW50c1xyXG5cdFx0ZGVzdHJveTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMucmVzZXRGb3JtKCk7XHJcblxyXG5cdFx0XHQkKCB0aGlzLmN1cnJlbnRGb3JtIClcclxuXHRcdFx0XHQub2ZmKCBcIi52YWxpZGF0ZVwiIClcclxuXHRcdFx0XHQucmVtb3ZlRGF0YSggXCJ2YWxpZGF0b3JcIiApXHJcblx0XHRcdFx0LmZpbmQoIFwiLnZhbGlkYXRlLWVxdWFsVG8tYmx1clwiIClcclxuXHRcdFx0XHRcdC5vZmYoIFwiLnZhbGlkYXRlLWVxdWFsVG9cIiApXHJcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoIFwidmFsaWRhdGUtZXF1YWxUby1ibHVyXCIgKVxyXG5cdFx0XHRcdC5maW5kKCBcIi52YWxpZGF0ZS1sZXNzVGhhbi1ibHVyXCIgKVxyXG5cdFx0XHRcdFx0Lm9mZiggXCIudmFsaWRhdGUtbGVzc1RoYW5cIiApXHJcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoIFwidmFsaWRhdGUtbGVzc1RoYW4tYmx1clwiIClcclxuXHRcdFx0XHQuZmluZCggXCIudmFsaWRhdGUtbGVzc1RoYW5FcXVhbC1ibHVyXCIgKVxyXG5cdFx0XHRcdFx0Lm9mZiggXCIudmFsaWRhdGUtbGVzc1RoYW5FcXVhbFwiIClcclxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcyggXCJ2YWxpZGF0ZS1sZXNzVGhhbkVxdWFsLWJsdXJcIiApXHJcblx0XHRcdFx0LmZpbmQoIFwiLnZhbGlkYXRlLWdyZWF0ZXJUaGFuRXF1YWwtYmx1clwiIClcclxuXHRcdFx0XHRcdC5vZmYoIFwiLnZhbGlkYXRlLWdyZWF0ZXJUaGFuRXF1YWxcIiApXHJcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoIFwidmFsaWRhdGUtZ3JlYXRlclRoYW5FcXVhbC1ibHVyXCIgKVxyXG5cdFx0XHRcdC5maW5kKCBcIi52YWxpZGF0ZS1ncmVhdGVyVGhhbi1ibHVyXCIgKVxyXG5cdFx0XHRcdFx0Lm9mZiggXCIudmFsaWRhdGUtZ3JlYXRlclRoYW5cIiApXHJcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoIFwidmFsaWRhdGUtZ3JlYXRlclRoYW4tYmx1clwiICk7XHJcblx0XHR9XHJcblxyXG5cdH0sXHJcblxyXG5cdGNsYXNzUnVsZVNldHRpbmdzOiB7XHJcblx0XHRyZXF1aXJlZDogeyByZXF1aXJlZDogdHJ1ZSB9LFxyXG5cdFx0ZW1haWw6IHsgZW1haWw6IHRydWUgfSxcclxuXHRcdHVybDogeyB1cmw6IHRydWUgfSxcclxuXHRcdGRhdGU6IHsgZGF0ZTogdHJ1ZSB9LFxyXG5cdFx0ZGF0ZUlTTzogeyBkYXRlSVNPOiB0cnVlIH0sXHJcblx0XHRudW1iZXI6IHsgbnVtYmVyOiB0cnVlIH0sXHJcblx0XHRkaWdpdHM6IHsgZGlnaXRzOiB0cnVlIH0sXHJcblx0XHRjcmVkaXRjYXJkOiB7IGNyZWRpdGNhcmQ6IHRydWUgfVxyXG5cdH0sXHJcblxyXG5cdGFkZENsYXNzUnVsZXM6IGZ1bmN0aW9uKCBjbGFzc05hbWUsIHJ1bGVzICkge1xyXG5cdFx0aWYgKCBjbGFzc05hbWUuY29uc3RydWN0b3IgPT09IFN0cmluZyApIHtcclxuXHRcdFx0dGhpcy5jbGFzc1J1bGVTZXR0aW5nc1sgY2xhc3NOYW1lIF0gPSBydWxlcztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCQuZXh0ZW5kKCB0aGlzLmNsYXNzUnVsZVNldHRpbmdzLCBjbGFzc05hbWUgKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRjbGFzc1J1bGVzOiBmdW5jdGlvbiggZWxlbWVudCApIHtcclxuXHRcdHZhciBydWxlcyA9IHt9LFxyXG5cdFx0XHRjbGFzc2VzID0gJCggZWxlbWVudCApLmF0dHIoIFwiY2xhc3NcIiApO1xyXG5cclxuXHRcdGlmICggY2xhc3NlcyApIHtcclxuXHRcdFx0JC5lYWNoKCBjbGFzc2VzLnNwbGl0KCBcIiBcIiApLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoIHRoaXMgaW4gJC52YWxpZGF0b3IuY2xhc3NSdWxlU2V0dGluZ3MgKSB7XHJcblx0XHRcdFx0XHQkLmV4dGVuZCggcnVsZXMsICQudmFsaWRhdG9yLmNsYXNzUnVsZVNldHRpbmdzWyB0aGlzIF0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBydWxlcztcclxuXHR9LFxyXG5cclxuXHRub3JtYWxpemVBdHRyaWJ1dGVSdWxlOiBmdW5jdGlvbiggcnVsZXMsIHR5cGUsIG1ldGhvZCwgdmFsdWUgKSB7XHJcblxyXG5cdFx0Ly8gQ29udmVydCB0aGUgdmFsdWUgdG8gYSBudW1iZXIgZm9yIG51bWJlciBpbnB1dHMsIGFuZCBmb3IgdGV4dCBmb3IgYmFja3dhcmRzIGNvbXBhYmlsaXR5XHJcblx0XHQvLyBhbGxvd3MgdHlwZT1cImRhdGVcIiBhbmQgb3RoZXJzIHRvIGJlIGNvbXBhcmVkIGFzIHN0cmluZ3NcclxuXHRcdGlmICggL21pbnxtYXh8c3RlcC8udGVzdCggbWV0aG9kICkgJiYgKCB0eXBlID09PSBudWxsIHx8IC9udW1iZXJ8cmFuZ2V8dGV4dC8udGVzdCggdHlwZSApICkgKSB7XHJcblx0XHRcdHZhbHVlID0gTnVtYmVyKCB2YWx1ZSApO1xyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydCBPcGVyYSBNaW5pLCB3aGljaCByZXR1cm5zIE5hTiBmb3IgdW5kZWZpbmVkIG1pbmxlbmd0aFxyXG5cdFx0XHRpZiAoIGlzTmFOKCB2YWx1ZSApICkge1xyXG5cdFx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB2YWx1ZSB8fCB2YWx1ZSA9PT0gMCApIHtcclxuXHRcdFx0cnVsZXNbIG1ldGhvZCBdID0gdmFsdWU7XHJcblx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBtZXRob2QgJiYgdHlwZSAhPT0gXCJyYW5nZVwiICkge1xyXG5cclxuXHRcdFx0Ly8gRXhjZXB0aW9uOiB0aGUganF1ZXJ5IHZhbGlkYXRlICdyYW5nZScgbWV0aG9kXHJcblx0XHRcdC8vIGRvZXMgbm90IHRlc3QgZm9yIHRoZSBodG1sNSAncmFuZ2UnIHR5cGVcclxuXHRcdFx0cnVsZXNbIG1ldGhvZCBdID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRhdHRyaWJ1dGVSdWxlczogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHR2YXIgcnVsZXMgPSB7fSxcclxuXHRcdFx0JGVsZW1lbnQgPSAkKCBlbGVtZW50ICksXHJcblx0XHRcdHR5cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSxcclxuXHRcdFx0bWV0aG9kLCB2YWx1ZTtcclxuXHJcblx0XHRmb3IgKCBtZXRob2QgaW4gJC52YWxpZGF0b3IubWV0aG9kcyApIHtcclxuXHJcblx0XHRcdC8vIFN1cHBvcnQgZm9yIDxpbnB1dCByZXF1aXJlZD4gaW4gYm90aCBodG1sNSBhbmQgb2xkZXIgYnJvd3NlcnNcclxuXHRcdFx0aWYgKCBtZXRob2QgPT09IFwicmVxdWlyZWRcIiApIHtcclxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCBtZXRob2QgKTtcclxuXHJcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgcmVxdWlyZWQgYXR0cmlidXRlXHJcblx0XHRcdFx0Ly8gYW5kIG5vbi1IVE1MNSBicm93c2VycyBtaWdodCBoYXZlIHJlcXVpcmVkPVwiXCIgbWFya3VwXHJcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJcIiApIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEZvcmNlIG5vbi1IVE1MNSBicm93c2VycyB0byByZXR1cm4gYm9vbFxyXG5cdFx0XHRcdHZhbHVlID0gISF2YWx1ZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR2YWx1ZSA9ICRlbGVtZW50LmF0dHIoIG1ldGhvZCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLm5vcm1hbGl6ZUF0dHJpYnV0ZVJ1bGUoIHJ1bGVzLCB0eXBlLCBtZXRob2QsIHZhbHVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gJ21heGxlbmd0aCcgbWF5IGJlIHJldHVybmVkIGFzIC0xLCAyMTQ3NDgzNjQ3ICggSUUgKSBhbmQgNTI0Mjg4ICggc2FmYXJpICkgZm9yIHRleHQgaW5wdXRzXHJcblx0XHRpZiAoIHJ1bGVzLm1heGxlbmd0aCAmJiAvLTF8MjE0NzQ4MzY0N3w1MjQyODgvLnRlc3QoIHJ1bGVzLm1heGxlbmd0aCApICkge1xyXG5cdFx0XHRkZWxldGUgcnVsZXMubWF4bGVuZ3RoO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBydWxlcztcclxuXHR9LFxyXG5cclxuXHRkYXRhUnVsZXM6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xyXG5cdFx0dmFyIHJ1bGVzID0ge30sXHJcblx0XHRcdCRlbGVtZW50ID0gJCggZWxlbWVudCApLFxyXG5cdFx0XHR0eXBlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICksXHJcblx0XHRcdG1ldGhvZCwgdmFsdWU7XHJcblxyXG5cdFx0Zm9yICggbWV0aG9kIGluICQudmFsaWRhdG9yLm1ldGhvZHMgKSB7XHJcblx0XHRcdHZhbHVlID0gJGVsZW1lbnQuZGF0YSggXCJydWxlXCIgKyBtZXRob2QuY2hhckF0KCAwICkudG9VcHBlckNhc2UoKSArIG1ldGhvZC5zdWJzdHJpbmcoIDEgKS50b0xvd2VyQ2FzZSgpICk7XHJcblxyXG5cdFx0XHQvLyBDYXN0IGVtcHR5IGF0dHJpYnV0ZXMgbGlrZSBgZGF0YS1ydWxlLXJlcXVpcmVkYCB0byBgdHJ1ZWBcclxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJcIiApIHtcclxuXHRcdFx0XHR2YWx1ZSA9IHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMubm9ybWFsaXplQXR0cmlidXRlUnVsZSggcnVsZXMsIHR5cGUsIG1ldGhvZCwgdmFsdWUgKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBydWxlcztcclxuXHR9LFxyXG5cclxuXHRzdGF0aWNSdWxlczogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XHJcblx0XHR2YXIgcnVsZXMgPSB7fSxcclxuXHRcdFx0dmFsaWRhdG9yID0gJC5kYXRhKCBlbGVtZW50LmZvcm0sIFwidmFsaWRhdG9yXCIgKTtcclxuXHJcblx0XHRpZiAoIHZhbGlkYXRvci5zZXR0aW5ncy5ydWxlcyApIHtcclxuXHRcdFx0cnVsZXMgPSAkLnZhbGlkYXRvci5ub3JtYWxpemVSdWxlKCB2YWxpZGF0b3Iuc2V0dGluZ3MucnVsZXNbIGVsZW1lbnQubmFtZSBdICkgfHwge307XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcnVsZXM7XHJcblx0fSxcclxuXHJcblx0bm9ybWFsaXplUnVsZXM6IGZ1bmN0aW9uKCBydWxlcywgZWxlbWVudCApIHtcclxuXHJcblx0XHQvLyBIYW5kbGUgZGVwZW5kZW5jeSBjaGVja1xyXG5cdFx0JC5lYWNoKCBydWxlcywgZnVuY3Rpb24oIHByb3AsIHZhbCApIHtcclxuXHJcblx0XHRcdC8vIElnbm9yZSBydWxlIHdoZW4gcGFyYW0gaXMgZXhwbGljaXRseSBmYWxzZSwgZWcuIHJlcXVpcmVkOmZhbHNlXHJcblx0XHRcdGlmICggdmFsID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRkZWxldGUgcnVsZXNbIHByb3AgXTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB2YWwucGFyYW0gfHwgdmFsLmRlcGVuZHMgKSB7XHJcblx0XHRcdFx0dmFyIGtlZXBSdWxlID0gdHJ1ZTtcclxuXHRcdFx0XHRzd2l0Y2ggKCB0eXBlb2YgdmFsLmRlcGVuZHMgKSB7XHJcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxyXG5cdFx0XHRcdFx0a2VlcFJ1bGUgPSAhISQoIHZhbC5kZXBlbmRzLCBlbGVtZW50LmZvcm0gKS5sZW5ndGg7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiZnVuY3Rpb25cIjpcclxuXHRcdFx0XHRcdGtlZXBSdWxlID0gdmFsLmRlcGVuZHMuY2FsbCggZWxlbWVudCwgZWxlbWVudCApO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICgga2VlcFJ1bGUgKSB7XHJcblx0XHRcdFx0XHRydWxlc1sgcHJvcCBdID0gdmFsLnBhcmFtICE9PSB1bmRlZmluZWQgPyB2YWwucGFyYW0gOiB0cnVlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQkLmRhdGEoIGVsZW1lbnQuZm9ybSwgXCJ2YWxpZGF0b3JcIiApLnJlc2V0RWxlbWVudHMoICQoIGVsZW1lbnQgKSApO1xyXG5cdFx0XHRcdFx0ZGVsZXRlIHJ1bGVzWyBwcm9wIF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0Ly8gRXZhbHVhdGUgcGFyYW1ldGVyc1xyXG5cdFx0JC5lYWNoKCBydWxlcywgZnVuY3Rpb24oIHJ1bGUsIHBhcmFtZXRlciApIHtcclxuXHRcdFx0cnVsZXNbIHJ1bGUgXSA9ICQuaXNGdW5jdGlvbiggcGFyYW1ldGVyICkgJiYgcnVsZSAhPT0gXCJub3JtYWxpemVyXCIgPyBwYXJhbWV0ZXIoIGVsZW1lbnQgKSA6IHBhcmFtZXRlcjtcclxuXHRcdH0gKTtcclxuXHJcblx0XHQvLyBDbGVhbiBudW1iZXIgcGFyYW1ldGVyc1xyXG5cdFx0JC5lYWNoKCBbIFwibWlubGVuZ3RoXCIsIFwibWF4bGVuZ3RoXCIgXSwgZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICggcnVsZXNbIHRoaXMgXSApIHtcclxuXHRcdFx0XHRydWxlc1sgdGhpcyBdID0gTnVtYmVyKCBydWxlc1sgdGhpcyBdICk7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHRcdCQuZWFjaCggWyBcInJhbmdlbGVuZ3RoXCIsIFwicmFuZ2VcIiBdLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHBhcnRzO1xyXG5cdFx0XHRpZiAoIHJ1bGVzWyB0aGlzIF0gKSB7XHJcblx0XHRcdFx0aWYgKCAkLmlzQXJyYXkoIHJ1bGVzWyB0aGlzIF0gKSApIHtcclxuXHRcdFx0XHRcdHJ1bGVzWyB0aGlzIF0gPSBbIE51bWJlciggcnVsZXNbIHRoaXMgXVsgMCBdICksIE51bWJlciggcnVsZXNbIHRoaXMgXVsgMSBdICkgXTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgcnVsZXNbIHRoaXMgXSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0XHRcdHBhcnRzID0gcnVsZXNbIHRoaXMgXS5yZXBsYWNlKCAvW1xcW1xcXV0vZywgXCJcIiApLnNwbGl0KCAvW1xccyxdKy8gKTtcclxuXHRcdFx0XHRcdHJ1bGVzWyB0aGlzIF0gPSBbIE51bWJlciggcGFydHNbIDAgXSApLCBOdW1iZXIoIHBhcnRzWyAxIF0gKSBdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cclxuXHRcdGlmICggJC52YWxpZGF0b3IuYXV0b0NyZWF0ZVJhbmdlcyApIHtcclxuXHJcblx0XHRcdC8vIEF1dG8tY3JlYXRlIHJhbmdlc1xyXG5cdFx0XHRpZiAoIHJ1bGVzLm1pbiAhPSBudWxsICYmIHJ1bGVzLm1heCAhPSBudWxsICkge1xyXG5cdFx0XHRcdHJ1bGVzLnJhbmdlID0gWyBydWxlcy5taW4sIHJ1bGVzLm1heCBdO1xyXG5cdFx0XHRcdGRlbGV0ZSBydWxlcy5taW47XHJcblx0XHRcdFx0ZGVsZXRlIHJ1bGVzLm1heDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHJ1bGVzLm1pbmxlbmd0aCAhPSBudWxsICYmIHJ1bGVzLm1heGxlbmd0aCAhPSBudWxsICkge1xyXG5cdFx0XHRcdHJ1bGVzLnJhbmdlbGVuZ3RoID0gWyBydWxlcy5taW5sZW5ndGgsIHJ1bGVzLm1heGxlbmd0aCBdO1xyXG5cdFx0XHRcdGRlbGV0ZSBydWxlcy5taW5sZW5ndGg7XHJcblx0XHRcdFx0ZGVsZXRlIHJ1bGVzLm1heGxlbmd0aDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBydWxlcztcclxuXHR9LFxyXG5cclxuXHQvLyBDb252ZXJ0cyBhIHNpbXBsZSBzdHJpbmcgdG8gYSB7c3RyaW5nOiB0cnVlfSBydWxlLCBlLmcuLCBcInJlcXVpcmVkXCIgdG8ge3JlcXVpcmVkOnRydWV9XHJcblx0bm9ybWFsaXplUnVsZTogZnVuY3Rpb24oIGRhdGEgKSB7XHJcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHR2YXIgdHJhbnNmb3JtZWQgPSB7fTtcclxuXHRcdFx0JC5lYWNoKCBkYXRhLnNwbGl0KCAvXFxzLyApLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR0cmFuc2Zvcm1lZFsgdGhpcyBdID0gdHJ1ZTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRkYXRhID0gdHJhbnNmb3JtZWQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZGF0YTtcclxuXHR9LFxyXG5cclxuXHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL2pRdWVyeS52YWxpZGF0b3IuYWRkTWV0aG9kL1xyXG5cdGFkZE1ldGhvZDogZnVuY3Rpb24oIG5hbWUsIG1ldGhvZCwgbWVzc2FnZSApIHtcclxuXHRcdCQudmFsaWRhdG9yLm1ldGhvZHNbIG5hbWUgXSA9IG1ldGhvZDtcclxuXHRcdCQudmFsaWRhdG9yLm1lc3NhZ2VzWyBuYW1lIF0gPSBtZXNzYWdlICE9PSB1bmRlZmluZWQgPyBtZXNzYWdlIDogJC52YWxpZGF0b3IubWVzc2FnZXNbIG5hbWUgXTtcclxuXHRcdGlmICggbWV0aG9kLmxlbmd0aCA8IDMgKSB7XHJcblx0XHRcdCQudmFsaWRhdG9yLmFkZENsYXNzUnVsZXMoIG5hbWUsICQudmFsaWRhdG9yLm5vcm1hbGl6ZVJ1bGUoIG5hbWUgKSApO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvalF1ZXJ5LnZhbGlkYXRvci5tZXRob2RzL1xyXG5cdG1ldGhvZHM6IHtcclxuXHJcblx0XHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL3JlcXVpcmVkLW1ldGhvZC9cclxuXHRcdHJlcXVpcmVkOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgZGVwZW5kZW5jeSBpcyBtZXRcclxuXHRcdFx0aWYgKCAhdGhpcy5kZXBlbmQoIHBhcmFtLCBlbGVtZW50ICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIFwiZGVwZW5kZW5jeS1taXNtYXRjaFwiO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInNlbGVjdFwiICkge1xyXG5cclxuXHRcdFx0XHQvLyBDb3VsZCBiZSBhbiBhcnJheSBmb3Igc2VsZWN0LW11bHRpcGxlIG9yIGEgc3RyaW5nLCBib3RoIGFyZSBmaW5lIHRoaXMgd2F5XHJcblx0XHRcdFx0dmFyIHZhbCA9ICQoIGVsZW1lbnQgKS52YWwoKTtcclxuXHRcdFx0XHRyZXR1cm4gdmFsICYmIHZhbC5sZW5ndGggPiAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggdGhpcy5jaGVja2FibGUoIGVsZW1lbnQgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMZW5ndGgoIHZhbHVlLCBlbGVtZW50ICkgPiAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlLmxlbmd0aCA+IDA7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvZW1haWwtbWV0aG9kL1xyXG5cdFx0ZW1haWw6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHJcblx0XHRcdC8vIEZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCN2YWxpZC1lLW1haWwtYWRkcmVzc1xyXG5cdFx0XHQvLyBSZXRyaWV2ZWQgMjAxNC0wMS0xNFxyXG5cdFx0XHQvLyBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gd2l0aCB0aGlzIGltcGxlbWVudGF0aW9uLCByZXBvcnQgYSBidWcgYWdhaW5zdCB0aGUgYWJvdmUgc3BlY1xyXG5cdFx0XHQvLyBPciB1c2UgY3VzdG9tIG1ldGhvZHMgdG8gaW1wbGVtZW50IHlvdXIgb3duIGVtYWlsIHZhbGlkYXRpb25cclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXlthLXpBLVowLTkuISMkJSYnKitcXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLy50ZXN0KCB2YWx1ZSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL3VybC1tZXRob2QvXHJcblx0XHR1cmw6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHJcblx0XHRcdC8vIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIERpZWdvIFBlcmluaSwgTUlUIGxpY2Vuc2VkXHJcblx0XHRcdC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RwZXJpbmkvNzI5Mjk0XHJcblx0XHRcdC8vIHNlZSBhbHNvIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL3VybC1yZWdleFxyXG5cdFx0XHQvLyBtb2RpZmllZCB0byBhbGxvdyBwcm90b2NvbC1yZWxhdGl2ZSBVUkxzXHJcblx0XHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14oPzooPzooPzpodHRwcz98ZnRwKTopP1xcL1xcLykoPzpcXFMrKD86OlxcUyopP0ApPyg/Oig/ISg/OjEwfDEyNykoPzpcXC5cXGR7MSwzfSl7M30pKD8hKD86MTY5XFwuMjU0fDE5MlxcLjE2OCkoPzpcXC5cXGR7MSwzfSl7Mn0pKD8hMTcyXFwuKD86MVs2LTldfDJcXGR8M1swLTFdKSg/OlxcLlxcZHsxLDN9KXsyfSkoPzpbMS05XVxcZD98MVxcZFxcZHwyWzAxXVxcZHwyMlswLTNdKSg/OlxcLig/OjE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pKXsyfSg/OlxcLig/OlsxLTldXFxkP3wxXFxkXFxkfDJbMC00XVxcZHwyNVswLTRdKSl8KD86KD86W2EtelxcdTAwYTEtXFx1ZmZmZjAtOV0tKikqW2EtelxcdTAwYTEtXFx1ZmZmZjAtOV0rKSg/OlxcLig/OlthLXpcXHUwMGExLVxcdWZmZmYwLTldLSopKlthLXpcXHUwMGExLVxcdWZmZmYwLTldKykqKD86XFwuKD86W2EtelxcdTAwYTEtXFx1ZmZmZl17Mix9KSkuPykoPzo6XFxkezIsNX0pPyg/OlsvPyNdXFxTKik/JC9pLnRlc3QoIHZhbHVlICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvZGF0ZS1tZXRob2QvXHJcblx0XHRkYXRlOiAoIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgY2FsbGVkID0gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFx0XHRcdGlmICggIWNhbGxlZCApIHtcclxuXHRcdFx0XHRcdGNhbGxlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRpZiAoIHRoaXMuc2V0dGluZ3MuZGVidWcgJiYgd2luZG93LmNvbnNvbGUgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcclxuXHRcdFx0XHRcdFx0XHRcIlRoZSBgZGF0ZWAgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uICcyLjAuMCcuXFxuXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFwiUGxlYXNlIGRvbid0IHVzZSBpdCwgc2luY2UgaXQgcmVsaWVzIG9uIHRoZSBEYXRlIGNvbnN0cnVjdG9yLCB3aGljaFxcblwiICtcclxuXHRcdFx0XHRcdFx0XHRcImJlaGF2ZXMgdmVyeSBkaWZmZXJlbnRseSBhY3Jvc3MgYnJvd3NlcnMgYW5kIGxvY2FsZXMuIFVzZSBgZGF0ZUlTT2BcXG5cIiArXHJcblx0XHRcdFx0XHRcdFx0XCJpbnN0ZWFkIG9yIG9uZSBvZiB0aGUgbG9jYWxlIHNwZWNpZmljIG1ldGhvZHMgaW4gYGxvY2FsaXphdGlvbnMvYFxcblwiICtcclxuXHRcdFx0XHRcdFx0XHRcImFuZCBgYWRkaXRpb25hbC1tZXRob2RzLmpzYC5cIlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAhL0ludmFsaWR8TmFOLy50ZXN0KCBuZXcgRGF0ZSggdmFsdWUgKS50b1N0cmluZygpICk7XHJcblx0XHRcdH07XHJcblx0XHR9KCkgKSxcclxuXHJcblx0XHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL2RhdGVJU08tbWV0aG9kL1xyXG5cdFx0ZGF0ZUlTTzogZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eXFxkezR9W1xcL1xcLV0oMD9bMS05XXwxWzAxMl0pW1xcL1xcLV0oMD9bMS05XXxbMTJdWzAtOV18M1swMV0pJC8udGVzdCggdmFsdWUgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9udW1iZXItbWV0aG9kL1xyXG5cdFx0bnVtYmVyOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14oPzotP1xcZCt8LT9cXGR7MSwzfSg/OixcXGR7M30pKyk/KD86XFwuXFxkKyk/JC8udGVzdCggdmFsdWUgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9kaWdpdHMtbWV0aG9kL1xyXG5cdFx0ZGlnaXRzOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL15cXGQrJC8udGVzdCggdmFsdWUgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9taW5sZW5ndGgtbWV0aG9kL1xyXG5cdFx0bWlubGVuZ3RoOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cdFx0XHR2YXIgbGVuZ3RoID0gJC5pc0FycmF5KCB2YWx1ZSApID8gdmFsdWUubGVuZ3RoIDogdGhpcy5nZXRMZW5ndGgoIHZhbHVlLCBlbGVtZW50ICk7XHJcblx0XHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgbGVuZ3RoID49IHBhcmFtO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL21heGxlbmd0aC1tZXRob2QvXHJcblx0XHRtYXhsZW5ndGg6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCwgcGFyYW0gKSB7XHJcblx0XHRcdHZhciBsZW5ndGggPSAkLmlzQXJyYXkoIHZhbHVlICkgPyB2YWx1ZS5sZW5ndGggOiB0aGlzLmdldExlbmd0aCggdmFsdWUsIGVsZW1lbnQgKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCBsZW5ndGggPD0gcGFyYW07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvcmFuZ2VsZW5ndGgtbWV0aG9kL1xyXG5cdFx0cmFuZ2VsZW5ndGg6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCwgcGFyYW0gKSB7XHJcblx0XHRcdHZhciBsZW5ndGggPSAkLmlzQXJyYXkoIHZhbHVlICkgPyB2YWx1ZS5sZW5ndGggOiB0aGlzLmdldExlbmd0aCggdmFsdWUsIGVsZW1lbnQgKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAoIGxlbmd0aCA+PSBwYXJhbVsgMCBdICYmIGxlbmd0aCA8PSBwYXJhbVsgMSBdICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvbWluLW1ldGhvZC9cclxuXHRcdG1pbjogZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCB2YWx1ZSA+PSBwYXJhbTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9tYXgtbWV0aG9kL1xyXG5cdFx0bWF4OiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IHZhbHVlIDw9IHBhcmFtO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL3JhbmdlLW1ldGhvZC9cclxuXHRcdHJhbmdlOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8ICggdmFsdWUgPj0gcGFyYW1bIDAgXSAmJiB2YWx1ZSA8PSBwYXJhbVsgMSBdICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGh0dHBzOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvc3RlcC1tZXRob2QvXHJcblx0XHRzdGVwOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cdFx0XHR2YXIgdHlwZSA9ICQoIGVsZW1lbnQgKS5hdHRyKCBcInR5cGVcIiApLFxyXG5cdFx0XHRcdGVycm9yTWVzc2FnZSA9IFwiU3RlcCBhdHRyaWJ1dGUgb24gaW5wdXQgdHlwZSBcIiArIHR5cGUgKyBcIiBpcyBub3Qgc3VwcG9ydGVkLlwiLFxyXG5cdFx0XHRcdHN1cHBvcnRlZFR5cGVzID0gWyBcInRleHRcIiwgXCJudW1iZXJcIiwgXCJyYW5nZVwiIF0sXHJcblx0XHRcdFx0cmUgPSBuZXcgUmVnRXhwKCBcIlxcXFxiXCIgKyB0eXBlICsgXCJcXFxcYlwiICksXHJcblx0XHRcdFx0bm90U3VwcG9ydGVkID0gdHlwZSAmJiAhcmUudGVzdCggc3VwcG9ydGVkVHlwZXMuam9pbigpICksXHJcblx0XHRcdFx0ZGVjaW1hbFBsYWNlcyA9IGZ1bmN0aW9uKCBudW0gKSB7XHJcblx0XHRcdFx0XHR2YXIgbWF0Y2ggPSAoIFwiXCIgKyBudW0gKS5tYXRjaCggLyg/OlxcLihcXGQrKSk/JC8gKTtcclxuXHRcdFx0XHRcdGlmICggIW1hdGNoICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBOdW1iZXIgb2YgZGlnaXRzIHJpZ2h0IG9mIGRlY2ltYWwgcG9pbnQuXHJcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hbIDEgXSA/IG1hdGNoWyAxIF0ubGVuZ3RoIDogMDtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRvSW50ID0gZnVuY3Rpb24oIG51bSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKCBudW0gKiBNYXRoLnBvdyggMTAsIGRlY2ltYWxzICkgKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHZhbGlkID0gdHJ1ZSxcclxuXHRcdFx0XHRkZWNpbWFscztcclxuXHJcblx0XHRcdC8vIFdvcmtzIG9ubHkgZm9yIHRleHQsIG51bWJlciBhbmQgcmFuZ2UgaW5wdXQgdHlwZXNcclxuXHRcdFx0Ly8gVE9ETyBmaW5kIGEgd2F5IHRvIHN1cHBvcnQgaW5wdXQgdHlwZXMgZGF0ZSwgZGF0ZXRpbWUsIGRhdGV0aW1lLWxvY2FsLCBtb250aCwgdGltZSBhbmQgd2Vla1xyXG5cdFx0XHRpZiAoIG5vdFN1cHBvcnRlZCApIHtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIGVycm9yTWVzc2FnZSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkZWNpbWFscyA9IGRlY2ltYWxQbGFjZXMoIHBhcmFtICk7XHJcblxyXG5cdFx0XHQvLyBWYWx1ZSBjYW4ndCBoYXZlIHRvbyBtYW55IGRlY2ltYWxzXHJcblx0XHRcdGlmICggZGVjaW1hbFBsYWNlcyggdmFsdWUgKSA+IGRlY2ltYWxzIHx8IHRvSW50KCB2YWx1ZSApICUgdG9JbnQoIHBhcmFtICkgIT09IDAgKSB7XHJcblx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCB2YWxpZDtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9lcXVhbFRvLW1ldGhvZC9cclxuXHRcdGVxdWFsVG86IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCwgcGFyYW0gKSB7XHJcblxyXG5cdFx0XHQvLyBCaW5kIHRvIHRoZSBibHVyIGV2ZW50IG9mIHRoZSB0YXJnZXQgaW4gb3JkZXIgdG8gcmV2YWxpZGF0ZSB3aGVuZXZlciB0aGUgdGFyZ2V0IGZpZWxkIGlzIHVwZGF0ZWRcclxuXHRcdFx0dmFyIHRhcmdldCA9ICQoIHBhcmFtICk7XHJcblx0XHRcdGlmICggdGhpcy5zZXR0aW5ncy5vbmZvY3Vzb3V0ICYmIHRhcmdldC5ub3QoIFwiLnZhbGlkYXRlLWVxdWFsVG8tYmx1clwiICkubGVuZ3RoICkge1xyXG5cdFx0XHRcdHRhcmdldC5hZGRDbGFzcyggXCJ2YWxpZGF0ZS1lcXVhbFRvLWJsdXJcIiApLm9uKCBcImJsdXIudmFsaWRhdGUtZXF1YWxUb1wiLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCQoIGVsZW1lbnQgKS52YWxpZCgpO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHRhcmdldC52YWwoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy9yZW1vdGUtbWV0aG9kL1xyXG5cdFx0cmVtb3RlOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtLCBtZXRob2QgKSB7XHJcblx0XHRcdGlmICggdGhpcy5vcHRpb25hbCggZWxlbWVudCApICkge1xyXG5cdFx0XHRcdHJldHVybiBcImRlcGVuZGVuY3ktbWlzbWF0Y2hcIjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWV0aG9kID0gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIiAmJiBtZXRob2QgfHwgXCJyZW1vdGVcIjtcclxuXHJcblx0XHRcdHZhciBwcmV2aW91cyA9IHRoaXMucHJldmlvdXNWYWx1ZSggZWxlbWVudCwgbWV0aG9kICksXHJcblx0XHRcdFx0dmFsaWRhdG9yLCBkYXRhLCBvcHRpb25EYXRhU3RyaW5nO1xyXG5cclxuXHRcdFx0aWYgKCAhdGhpcy5zZXR0aW5ncy5tZXNzYWdlc1sgZWxlbWVudC5uYW1lIF0gKSB7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5tZXNzYWdlc1sgZWxlbWVudC5uYW1lIF0gPSB7fTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwcmV2aW91cy5vcmlnaW5hbE1lc3NhZ2UgPSBwcmV2aW91cy5vcmlnaW5hbE1lc3NhZ2UgfHwgdGhpcy5zZXR0aW5ncy5tZXNzYWdlc1sgZWxlbWVudC5uYW1lIF1bIG1ldGhvZCBdO1xyXG5cdFx0XHR0aGlzLnNldHRpbmdzLm1lc3NhZ2VzWyBlbGVtZW50Lm5hbWUgXVsgbWV0aG9kIF0gPSBwcmV2aW91cy5tZXNzYWdlO1xyXG5cclxuXHRcdFx0cGFyYW0gPSB0eXBlb2YgcGFyYW0gPT09IFwic3RyaW5nXCIgJiYgeyB1cmw6IHBhcmFtIH0gfHwgcGFyYW07XHJcblx0XHRcdG9wdGlvbkRhdGFTdHJpbmcgPSAkLnBhcmFtKCAkLmV4dGVuZCggeyBkYXRhOiB2YWx1ZSB9LCBwYXJhbS5kYXRhICkgKTtcclxuXHRcdFx0aWYgKCBwcmV2aW91cy5vbGQgPT09IG9wdGlvbkRhdGFTdHJpbmcgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHByZXZpb3VzLnZhbGlkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRwcmV2aW91cy5vbGQgPSBvcHRpb25EYXRhU3RyaW5nO1xyXG5cdFx0XHR2YWxpZGF0b3IgPSB0aGlzO1xyXG5cdFx0XHR0aGlzLnN0YXJ0UmVxdWVzdCggZWxlbWVudCApO1xyXG5cdFx0XHRkYXRhID0ge307XHJcblx0XHRcdGRhdGFbIGVsZW1lbnQubmFtZSBdID0gdmFsdWU7XHJcblx0XHRcdCQuYWpheCggJC5leHRlbmQoIHRydWUsIHtcclxuXHRcdFx0XHRtb2RlOiBcImFib3J0XCIsXHJcblx0XHRcdFx0cG9ydDogXCJ2YWxpZGF0ZVwiICsgZWxlbWVudC5uYW1lLFxyXG5cdFx0XHRcdGRhdGFUeXBlOiBcImpzb25cIixcclxuXHRcdFx0XHRkYXRhOiBkYXRhLFxyXG5cdFx0XHRcdGNvbnRleHQ6IHZhbGlkYXRvci5jdXJyZW50Rm9ybSxcclxuXHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XHJcblx0XHRcdFx0XHR2YXIgdmFsaWQgPSByZXNwb25zZSA9PT0gdHJ1ZSB8fCByZXNwb25zZSA9PT0gXCJ0cnVlXCIsXHJcblx0XHRcdFx0XHRcdGVycm9ycywgbWVzc2FnZSwgc3VibWl0dGVkO1xyXG5cclxuXHRcdFx0XHRcdHZhbGlkYXRvci5zZXR0aW5ncy5tZXNzYWdlc1sgZWxlbWVudC5uYW1lIF1bIG1ldGhvZCBdID0gcHJldmlvdXMub3JpZ2luYWxNZXNzYWdlO1xyXG5cdFx0XHRcdFx0aWYgKCB2YWxpZCApIHtcclxuXHRcdFx0XHRcdFx0c3VibWl0dGVkID0gdmFsaWRhdG9yLmZvcm1TdWJtaXR0ZWQ7XHJcblx0XHRcdFx0XHRcdHZhbGlkYXRvci5yZXNldEludGVybmFscygpO1xyXG5cdFx0XHRcdFx0XHR2YWxpZGF0b3IudG9IaWRlID0gdmFsaWRhdG9yLmVycm9yc0ZvciggZWxlbWVudCApO1xyXG5cdFx0XHRcdFx0XHR2YWxpZGF0b3IuZm9ybVN1Ym1pdHRlZCA9IHN1Ym1pdHRlZDtcclxuXHRcdFx0XHRcdFx0dmFsaWRhdG9yLnN1Y2Nlc3NMaXN0LnB1c2goIGVsZW1lbnQgKTtcclxuXHRcdFx0XHRcdFx0dmFsaWRhdG9yLmludmFsaWRbIGVsZW1lbnQubmFtZSBdID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHZhbGlkYXRvci5zaG93RXJyb3JzKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRlcnJvcnMgPSB7fTtcclxuXHRcdFx0XHRcdFx0bWVzc2FnZSA9IHJlc3BvbnNlIHx8IHZhbGlkYXRvci5kZWZhdWx0TWVzc2FnZSggZWxlbWVudCwgeyBtZXRob2Q6IG1ldGhvZCwgcGFyYW1ldGVyczogdmFsdWUgfSApO1xyXG5cdFx0XHRcdFx0XHRlcnJvcnNbIGVsZW1lbnQubmFtZSBdID0gcHJldmlvdXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcblx0XHRcdFx0XHRcdHZhbGlkYXRvci5pbnZhbGlkWyBlbGVtZW50Lm5hbWUgXSA9IHRydWU7XHJcblx0XHRcdFx0XHRcdHZhbGlkYXRvci5zaG93RXJyb3JzKCBlcnJvcnMgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHByZXZpb3VzLnZhbGlkID0gdmFsaWQ7XHJcblx0XHRcdFx0XHR2YWxpZGF0b3Iuc3RvcFJlcXVlc3QoIGVsZW1lbnQsIHZhbGlkICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCBwYXJhbSApICk7XHJcblx0XHRcdHJldHVybiBcInBlbmRpbmdcIjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59ICk7XHJcbiIsIi8vIEFqYXggbW9kZTogYWJvcnRcclxuLy8gdXNhZ2U6ICQuYWpheCh7IG1vZGU6IFwiYWJvcnRcIlssIHBvcnQ6IFwidW5pcXVlcG9ydFwiXX0pO1xyXG4vLyBpZiBtb2RlOlwiYWJvcnRcIiBpcyB1c2VkLCB0aGUgcHJldmlvdXMgcmVxdWVzdCBvbiB0aGF0IHBvcnQgKHBvcnQgY2FuIGJlIHVuZGVmaW5lZCkgaXMgYWJvcnRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuYWJvcnQoKVxyXG5cclxudmFyIHBlbmRpbmdSZXF1ZXN0cyA9IHt9LFxyXG5cdGFqYXg7XHJcblxyXG4vLyBVc2UgYSBwcmVmaWx0ZXIgaWYgYXZhaWxhYmxlICgxLjUrKVxyXG5pZiAoICQuYWpheFByZWZpbHRlciApIHtcclxuXHQkLmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzZXR0aW5ncywgXywgeGhyICkge1xyXG5cdFx0dmFyIHBvcnQgPSBzZXR0aW5ncy5wb3J0O1xyXG5cdFx0aWYgKCBzZXR0aW5ncy5tb2RlID09PSBcImFib3J0XCIgKSB7XHJcblx0XHRcdGlmICggcGVuZGluZ1JlcXVlc3RzWyBwb3J0IF0gKSB7XHJcblx0XHRcdFx0cGVuZGluZ1JlcXVlc3RzWyBwb3J0IF0uYWJvcnQoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwZW5kaW5nUmVxdWVzdHNbIHBvcnQgXSA9IHhocjtcclxuXHRcdH1cclxuXHR9ICk7XHJcbn0gZWxzZSB7XHJcblxyXG5cdC8vIFByb3h5IGFqYXhcclxuXHRhamF4ID0gJC5hamF4O1xyXG5cdCQuYWpheCA9IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuXHRcdHZhciBtb2RlID0gKCBcIm1vZGVcIiBpbiBzZXR0aW5ncyA/IHNldHRpbmdzIDogJC5hamF4U2V0dGluZ3MgKS5tb2RlLFxyXG5cdFx0XHRwb3J0ID0gKCBcInBvcnRcIiBpbiBzZXR0aW5ncyA/IHNldHRpbmdzIDogJC5hamF4U2V0dGluZ3MgKS5wb3J0O1xyXG5cdFx0aWYgKCBtb2RlID09PSBcImFib3J0XCIgKSB7XHJcblx0XHRcdGlmICggcGVuZGluZ1JlcXVlc3RzWyBwb3J0IF0gKSB7XHJcblx0XHRcdFx0cGVuZGluZ1JlcXVlc3RzWyBwb3J0IF0uYWJvcnQoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwZW5kaW5nUmVxdWVzdHNbIHBvcnQgXSA9IGFqYXguYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdFx0XHRyZXR1cm4gcGVuZGluZ1JlcXVlc3RzWyBwb3J0IF07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYWpheC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XHJcblx0fTtcclxufVxyXG4iLCIvKipcclxuICogVGhpcyBpcyB1c2VkIGluIHRoZSBVbml0ZWQgU3RhdGVzIHRvIHByb2Nlc3MgcGF5bWVudHMsIGRlcG9zaXRzLFxyXG4gKiBvciB0cmFuc2ZlcnMgdXNpbmcgdGhlIEF1dG9tYXRlZCBDbGVhcmluZyBIb3VzZSAoQUNIKSBvciBGZWR3aXJlXHJcbiAqIHN5c3RlbXMuIEEgdmVyeSBjb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdmFsaWRhdGUgYSBmb3JtIGZvclxyXG4gKiBhbiBBQ0ggYmlsbCBwYXltZW50LlxyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImFiYVJvdXRpbmdOdW1iZXJcIiwgZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdHZhciBjaGVja3N1bSA9IDA7XHJcblx0dmFyIHRva2VucyA9IHZhbHVlLnNwbGl0KCBcIlwiICk7XHJcblx0dmFyIGxlbmd0aCA9IHRva2Vucy5sZW5ndGg7XHJcblxyXG5cdC8vIExlbmd0aCBDaGVja1xyXG5cdGlmICggbGVuZ3RoICE9PSA5ICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gQ2FsYyB0aGUgY2hlY2tzdW1cclxuXHQvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BQkFfcm91dGluZ190cmFuc2l0X251bWJlclxyXG5cdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzICkge1xyXG5cdFx0Y2hlY2tzdW0gKz1cdHBhcnNlSW50KCB0b2tlbnNbIGkgXSwgMTAgKSAgICAgKiAzICtcclxuXHRcdFx0XHRcdHBhcnNlSW50KCB0b2tlbnNbIGkgKyAxIF0sIDEwICkgKiA3ICtcclxuXHRcdFx0XHRcdHBhcnNlSW50KCB0b2tlbnNbIGkgKyAyIF0sIDEwICk7XHJcblx0fVxyXG5cclxuXHQvLyBJZiBub3QgemVybyBhbmQgZGl2aXNpYmxlIGJ5IDEwIHRoZW4gdmFsaWRcclxuXHRpZiAoIGNoZWNrc3VtICE9PSAwICYmIGNoZWNrc3VtICUgMTAgPT09IDAgKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufSwgXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCByb3V0aW5nIG51bWJlci5cIiApO1xyXG4iLCIvLyBBY2NlcHQgYSB2YWx1ZSBmcm9tIGEgZmlsZSBpbnB1dCBiYXNlZCBvbiBhIHJlcXVpcmVkIG1pbWV0eXBlXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJhY2NlcHRcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuXHJcblx0Ly8gU3BsaXQgbWltZSBvbiBjb21tYXMgaW4gY2FzZSB3ZSBoYXZlIG11bHRpcGxlIHR5cGVzIHdlIGNhbiBhY2NlcHRcclxuXHR2YXIgdHlwZVBhcmFtID0gdHlwZW9mIHBhcmFtID09PSBcInN0cmluZ1wiID8gcGFyYW0ucmVwbGFjZSggL1xccy9nLCBcIlwiICkgOiBcImltYWdlLypcIixcclxuXHRcdG9wdGlvbmFsVmFsdWUgPSB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICksXHJcblx0XHRpLCBmaWxlLCByZWdleDtcclxuXHJcblx0Ly8gRWxlbWVudCBpcyBvcHRpb25hbFxyXG5cdGlmICggb3B0aW9uYWxWYWx1ZSApIHtcclxuXHRcdHJldHVybiBvcHRpb25hbFZhbHVlO1xyXG5cdH1cclxuXHJcblx0aWYgKCAkKCBlbGVtZW50ICkuYXR0ciggXCJ0eXBlXCIgKSA9PT0gXCJmaWxlXCIgKSB7XHJcblxyXG5cdFx0Ly8gRXNjYXBlIHN0cmluZyB0byBiZSB1c2VkIGluIHRoZSByZWdleFxyXG5cdFx0Ly8gc2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNDQ2MTcwL2VzY2FwZS1zdHJpbmctZm9yLXVzZS1pbi1qYXZhc2NyaXB0LXJlZ2V4XHJcblx0XHQvLyBFc2NhcGUgYWxzbyBcIi8qXCIgYXMgXCIvLipcIiBhcyBhIHdpbGRjYXJkXHJcblx0XHR0eXBlUGFyYW0gPSB0eXBlUGFyYW1cclxuXHRcdFx0XHQucmVwbGFjZSggL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiIClcclxuXHRcdFx0XHQucmVwbGFjZSggLywvZywgXCJ8XCIgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFwvXFwqL2csIFwiLy4qXCIgKTtcclxuXHJcblx0XHQvLyBDaGVjayBpZiB0aGUgZWxlbWVudCBoYXMgYSBGaWxlTGlzdCBiZWZvcmUgY2hlY2tpbmcgZWFjaCBmaWxlXHJcblx0XHRpZiAoIGVsZW1lbnQuZmlsZXMgJiYgZWxlbWVudC5maWxlcy5sZW5ndGggKSB7XHJcblx0XHRcdHJlZ2V4ID0gbmV3IFJlZ0V4cCggXCIuPyhcIiArIHR5cGVQYXJhbSArIFwiKSRcIiwgXCJpXCIgKTtcclxuXHRcdFx0Zm9yICggaSA9IDA7IGkgPCBlbGVtZW50LmZpbGVzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGZpbGUgPSBlbGVtZW50LmZpbGVzWyBpIF07XHJcblxyXG5cdFx0XHRcdC8vIEdyYWIgdGhlIG1pbWV0eXBlIGZyb20gdGhlIGxvYWRlZCBmaWxlLCB2ZXJpZnkgaXQgbWF0Y2hlc1xyXG5cdFx0XHRcdGlmICggIWZpbGUudHlwZS5tYXRjaCggcmVnZXggKSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEVpdGhlciByZXR1cm4gdHJ1ZSBiZWNhdXNlIHdlJ3ZlIHZhbGlkYXRlZCBlYWNoIGZpbGUsIG9yIGJlY2F1c2UgdGhlXHJcblx0Ly8gYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGVsZW1lbnQuZmlsZXMgYW5kIHRoZSBGaWxlTGlzdCBmZWF0dXJlXHJcblx0cmV0dXJuIHRydWU7XHJcbn0sICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSB3aXRoIGEgdmFsaWQgbWltZXR5cGUuXCIgKSApO1xyXG4iLCIoIGZ1bmN0aW9uKCkge1xyXG5cclxuXHRmdW5jdGlvbiBzdHJpcEh0bWwoIHZhbHVlICkge1xyXG5cclxuXHRcdC8vIFJlbW92ZSBodG1sIHRhZ3MgYW5kIHNwYWNlIGNoYXJzXHJcblx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZSggLzwuW148Pl0qPz4vZywgXCIgXCIgKS5yZXBsYWNlKCAvJm5ic3A7fCYjMTYwOy9naSwgXCIgXCIgKVxyXG5cclxuXHRcdC8vIFJlbW92ZSBwdW5jdHVhdGlvblxyXG5cdFx0LnJlcGxhY2UoIC9bLigpLDs6IT8lIyQnXFxcIl8rPVxcL1xcLeKAnOKAneKAmV0qL2csIFwiXCIgKTtcclxuXHR9XHJcblxyXG5cdCQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJtYXhXb3Jkc1wiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtcyApIHtcclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgc3RyaXBIdG1sKCB2YWx1ZSApLm1hdGNoKCAvXFxiXFx3K1xcYi9nICkubGVuZ3RoIDw9IHBhcmFtcztcclxuXHR9LCAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGxlYXNlIGVudGVyIHswfSB3b3JkcyBvciBsZXNzLlwiICkgKTtcclxuXHJcblx0JC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcIm1pbldvcmRzXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCwgcGFyYW1zICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCBzdHJpcEh0bWwoIHZhbHVlICkubWF0Y2goIC9cXGJcXHcrXFxiL2cgKS5sZW5ndGggPj0gcGFyYW1zO1xyXG5cdH0sICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IHdvcmRzLlwiICkgKTtcclxuXHJcblx0JC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInJhbmdlV29yZHNcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbXMgKSB7XHJcblx0XHR2YXIgdmFsdWVTdHJpcHBlZCA9IHN0cmlwSHRtbCggdmFsdWUgKSxcclxuXHRcdFx0cmVnZXggPSAvXFxiXFx3K1xcYi9nO1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCB2YWx1ZVN0cmlwcGVkLm1hdGNoKCByZWdleCApLmxlbmd0aCA+PSBwYXJhbXNbIDAgXSAmJiB2YWx1ZVN0cmlwcGVkLm1hdGNoKCByZWdleCApLmxlbmd0aCA8PSBwYXJhbXNbIDEgXTtcclxuXHR9LCAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGxlYXNlIGVudGVyIGJldHdlZW4gezB9IGFuZCB7MX0gd29yZHMuXCIgKSApO1xyXG5cclxufSgpICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJhbHBoYW51bWVyaWNcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL15cXHcrJC9pLnRlc3QoIHZhbHVlICk7XHJcbn0sIFwiTGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzIG9ubHkgcGxlYXNlXCIgKTtcclxuIiwiLypcclxuICogRHV0Y2ggYmFuayBhY2NvdW50IG51bWJlcnMgKG5vdCAnZ2lybycgbnVtYmVycykgaGF2ZSA5IGRpZ2l0c1xyXG4gKiBhbmQgcGFzcyB0aGUgJzExIGNoZWNrJy5cclxuICogV2UgYWNjZXB0IHRoZSBub3RhdGlvbiB3aXRoIHNwYWNlcywgYXMgdGhhdCBpcyBjb21tb24uXHJcbiAqIGFjY2VwdGFibGU6IDEyMzQ1Njc4OSBvciAxMiAzNCA1NiA3ODlcclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJiYW5rYWNjb3VudE5MXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRpZiAoIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSApIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHRpZiAoICEoIC9eWzAtOV17OX18KFswLTldezJ9ICl7M31bMC05XXszfSQvLnRlc3QoIHZhbHVlICkgKSApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIE5vdyAnMTEgY2hlY2snXHJcblx0dmFyIGFjY291bnQgPSB2YWx1ZS5yZXBsYWNlKCAvIC9nLCBcIlwiICksIC8vIFJlbW92ZSBzcGFjZXNcclxuXHRcdHN1bSA9IDAsXHJcblx0XHRsZW4gPSBhY2NvdW50Lmxlbmd0aCxcclxuXHRcdHBvcywgZmFjdG9yLCBkaWdpdDtcclxuXHRmb3IgKCBwb3MgPSAwOyBwb3MgPCBsZW47IHBvcysrICkge1xyXG5cdFx0ZmFjdG9yID0gbGVuIC0gcG9zO1xyXG5cdFx0ZGlnaXQgPSBhY2NvdW50LnN1YnN0cmluZyggcG9zLCBwb3MgKyAxICk7XHJcblx0XHRzdW0gPSBzdW0gKyBmYWN0b3IgKiBkaWdpdDtcclxuXHR9XHJcblx0cmV0dXJuIHN1bSAlIDExID09PSAwO1xyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgYmFuayBhY2NvdW50IG51bWJlclwiICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJiYW5rb3JnaXJvYWNjb3VudE5MXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8XHJcblx0XHRcdCggJC52YWxpZGF0b3IubWV0aG9kcy5iYW5rYWNjb3VudE5MLmNhbGwoIHRoaXMsIHZhbHVlLCBlbGVtZW50ICkgKSB8fFxyXG5cdFx0XHQoICQudmFsaWRhdG9yLm1ldGhvZHMuZ2lyb2FjY291bnROTC5jYWxsKCB0aGlzLCB2YWx1ZSwgZWxlbWVudCApICk7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBiYW5rIG9yIGdpcm8gYWNjb3VudCBudW1iZXJcIiApO1xyXG4iLCIvKipcclxuICogQklDIGlzIHRoZSBidXNpbmVzcyBpZGVudGlmaWVyIGNvZGUgKElTTyA5MzYyKS4gVGhpcyBCSUMgY2hlY2sgaXMgbm90IGEgZ3VhcmFudGVlIGZvciBhdXRoZW50aWNpdHkuXHJcbiAqXHJcbiAqIEJJQyBwYXR0ZXJuOiBCQkJCQ0NMTGJiYiAoOCBvciAxMSBjaGFyYWN0ZXJzIGxvbmc7IGJiYiBpcyBvcHRpb25hbClcclxuICpcclxuICogVmFsaWRhdGlvbiBpcyBjYXNlLWluc2Vuc2l0aXZlLiBQbGVhc2UgbWFrZSBzdXJlIHRvIG5vcm1hbGl6ZSBpbnB1dCB5b3Vyc2VsZi5cclxuICpcclxuICogQklDIGRlZmluaXRpb24gaW4gZGV0YWlsOlxyXG4gKiAtIEZpcnN0IDQgY2hhcmFjdGVycyAtIGJhbmsgY29kZSAob25seSBsZXR0ZXJzKVxyXG4gKiAtIE5leHQgMiBjaGFyYWN0ZXJzIC0gSVNPIDMxNjYtMSBhbHBoYS0yIGNvdW50cnkgY29kZSAob25seSBsZXR0ZXJzKVxyXG4gKiAtIE5leHQgMiBjaGFyYWN0ZXJzIC0gbG9jYXRpb24gY29kZSAobGV0dGVycyBhbmQgZGlnaXRzKVxyXG4gKiAgIGEuIHNoYWxsIG5vdCBzdGFydCB3aXRoICcwJyBvciAnMSdcclxuICogICBiLiBzZWNvbmQgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIgKCdPJyBpcyBub3QgYWxsb3dlZCkgb3IgZGlnaXQgKCcwJyBmb3IgdGVzdCAodGhlcmVmb3JlIG5vdCBhbGxvd2VkKSwgJzEnIGRlbm90aW5nIHBhc3NpdmUgcGFydGljaXBhbnQsICcyJyB0eXBpY2FsbHkgcmV2ZXJzZS1iaWxsaW5nKVxyXG4gKiAtIExhc3QgMyBjaGFyYWN0ZXJzIC0gYnJhbmNoIGNvZGUsIG9wdGlvbmFsIChzaGFsbCBub3Qgc3RhcnQgd2l0aCAnWCcgZXhjZXB0IGluIGNhc2Ugb2YgJ1hYWCcgZm9yIHByaW1hcnkgb2ZmaWNlKSAobGV0dGVycyBhbmQgZGlnaXRzKVxyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImJpY1wiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eKFtBLVpdezZ9W0EtWjItOV1bQS1OUC1aMS05XSkoWHszfXxbQS1XWS1aMC05XVtBLVowLTldezJ9KT8kLy50ZXN0KCB2YWx1ZS50b1VwcGVyQ2FzZSgpICk7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBCSUMgY29kZVwiICk7XHJcbiIsIi8qXHJcbiAqIEPDs2RpZ28gZGUgaWRlbnRpZmljYWNpw7NuIGZpc2NhbCAoIENJRiApIGlzIHRoZSB0YXggaWRlbnRpZmljYXRpb24gY29kZSBmb3IgU3BhbmlzaCBsZWdhbCBlbnRpdGllc1xyXG4gKiBGdXJ0aGVyIHJ1bGVzIGNhbiBiZSBmb3VuZCBpbiBTcGFuaXNoIG9uIGh0dHA6Ly9lcy53aWtpcGVkaWEub3JnL3dpa2kvQyVDMyVCM2RpZ29fZGVfaWRlbnRpZmljYWNpJUMzJUIzbl9maXNjYWxcclxuICpcclxuICogU3BhbmlzaCBDSUYgc3RydWN0dXJlOlxyXG4gKlxyXG4gKiBbIFQgXVsgUCBdWyBQIF1bIE4gXVsgTiBdWyBOIF1bIE4gXVsgTiBdWyBDIF1cclxuICpcclxuICogV2hlcmU6XHJcbiAqXHJcbiAqIFQ6IDEgY2hhcmFjdGVyLiBLaW5kIG9mIE9yZ2FuaXphdGlvbiBMZXR0ZXI6IFtBQkNERUZHSEpLTE1OUFFSU1VWV11cclxuICogUDogMiBjaGFyYWN0ZXJzLiBQcm92aW5jZS5cclxuICogTjogNSBjaGFyYWN0ZXJzLiBTZWN1ZW5jaWFsIE51bWJlciB3aXRoaW4gdGhlIHByb3ZpbmNlLlxyXG4gKiBDOiAxIGNoYXJhY3Rlci4gQ29udHJvbCBEaWdpdDogWzAtOUEtSl0uXHJcbiAqXHJcbiAqIFsgVCBdOiBLaW5kIG9mIE9yZ2FuaXphdGlvbnMuIFBvc3NpYmxlIHZhbHVlczpcclxuICpcclxuICogICBBLiBDb3Jwb3JhdGlvbnNcclxuICogICBCLiBMTENzXHJcbiAqICAgQy4gR2VuZXJhbCBwYXJ0bmVyc2hpcHNcclxuICogICBELiBDb21wYW5pZXMgbGltaXRlZCBwYXJ0bmVyc2hpcHNcclxuICogICBFLiBDb21tdW5pdGllcyBvZiBnb29kc1xyXG4gKiAgIEYuIENvb3BlcmF0aXZlIFNvY2lldGllc1xyXG4gKiAgIEcuIEFzc29jaWF0aW9uc1xyXG4gKiAgIEguIENvbW11bml0aWVzIG9mIGhvbWVvd25lcnMgaW4gaG9yaXpvbnRhbCBwcm9wZXJ0eSByZWdpbWVcclxuICogICBKLiBDaXZpbCBTb2NpZXRpZXNcclxuICogICBLLiBPbGQgZm9ybWF0XHJcbiAqICAgTC4gT2xkIGZvcm1hdFxyXG4gKiAgIE0uIE9sZCBmb3JtYXRcclxuICogICBOLiBOb25yZXNpZGVudCBlbnRpdGllc1xyXG4gKiAgIFAuIExvY2FsIGF1dGhvcml0aWVzXHJcbiAqICAgUS4gQXV0b25vbW91cyBib2RpZXMsIHN0YXRlIG9yIG5vdCwgYW5kIHRoZSBsaWtlLCBhbmQgY29uZ3JlZ2F0aW9ucyBhbmQgcmVsaWdpb3VzIGluc3RpdHV0aW9uc1xyXG4gKiAgIFIuIENvbmdyZWdhdGlvbnMgYW5kIHJlbGlnaW91cyBpbnN0aXR1dGlvbnMgKHNpbmNlIDIwMDggT1JERVIgRUhBLzQ1MS8yMDA4KVxyXG4gKiAgIFMuIE9yZ2FucyBvZiBTdGF0ZSBBZG1pbmlzdHJhdGlvbiBhbmQgcmVnaW9uc1xyXG4gKiAgIFYuIEFncmFyaWFuIFRyYW5zZm9ybWF0aW9uXHJcbiAqICAgVy4gUGVybWFuZW50IGVzdGFibGlzaG1lbnRzIG9mIG5vbi1yZXNpZGVudCBpbiBTcGFpblxyXG4gKlxyXG4gKiBbIEMgXTogQ29udHJvbCBEaWdpdC4gSXQgY2FuIGJlIGEgbnVtYmVyIG9yIGEgbGV0dGVyIGRlcGVuZGluZyBvbiBUIHZhbHVlOlxyXG4gKiBbIFQgXSAgLS0+ICBbIEMgXVxyXG4gKiAtLS0tLS0gICAgLS0tLS0tLS0tLVxyXG4gKiAgIEEgICAgICAgICBOdW1iZXJcclxuICogICBCICAgICAgICAgTnVtYmVyXHJcbiAqICAgRSAgICAgICAgIE51bWJlclxyXG4gKiAgIEggICAgICAgICBOdW1iZXJcclxuICogICBLICAgICAgICAgTGV0dGVyXHJcbiAqICAgUCAgICAgICAgIExldHRlclxyXG4gKiAgIFEgICAgICAgICBMZXR0ZXJcclxuICogICBTICAgICAgICAgTGV0dGVyXHJcbiAqXHJcbiAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwiY2lmRVNcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cclxuXHRpZiAoIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSApIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0dmFyIGNpZlJlZ0V4ID0gbmV3IFJlZ0V4cCggL14oW0FCQ0RFRkdISktMTU5QUVJTVVZXXSkoXFxkezd9KShbMC05QS1KXSkkL2dpICk7XHJcblx0dmFyIGxldHRlciAgPSB2YWx1ZS5zdWJzdHJpbmcoIDAsIDEgKSwgLy8gWyBUIF1cclxuXHRcdG51bWJlciAgPSB2YWx1ZS5zdWJzdHJpbmcoIDEsIDggKSwgLy8gWyBQIF1bIFAgXVsgTiBdWyBOIF1bIE4gXVsgTiBdWyBOIF1cclxuXHRcdGNvbnRyb2wgPSB2YWx1ZS5zdWJzdHJpbmcoIDgsIDkgKSwgLy8gWyBDIF1cclxuXHRcdGFsbF9zdW0gPSAwLFxyXG5cdFx0ZXZlbl9zdW0gPSAwLFxyXG5cdFx0b2RkX3N1bSA9IDAsXHJcblx0XHRpLCBuLFxyXG5cdFx0Y29udHJvbF9kaWdpdCxcclxuXHRcdGNvbnRyb2xfbGV0dGVyO1xyXG5cclxuXHRmdW5jdGlvbiBpc09kZCggbiApIHtcclxuXHRcdHJldHVybiBuICUgMiA9PT0gMDtcclxuXHR9XHJcblxyXG5cdC8vIFF1aWNrIGZvcm1hdCB0ZXN0XHJcblx0aWYgKCB2YWx1ZS5sZW5ndGggIT09IDkgfHwgIWNpZlJlZ0V4LnRlc3QoIHZhbHVlICkgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRmb3IgKCBpID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkrKyApIHtcclxuXHRcdG4gPSBwYXJzZUludCggbnVtYmVyWyBpIF0sIDEwICk7XHJcblxyXG5cdFx0Ly8gT2RkIHBvc2l0aW9uc1xyXG5cdFx0aWYgKCBpc09kZCggaSApICkge1xyXG5cclxuXHRcdFx0Ly8gT2RkIHBvc2l0aW9ucyBhcmUgbXVsdGlwbGllZCBmaXJzdC5cclxuXHRcdFx0biAqPSAyO1xyXG5cclxuXHRcdFx0Ly8gSWYgdGhlIG11bHRpcGxpY2F0aW9uIGlzIGJpZ2dlciB0aGFuIDEwIHdlIG5lZWQgdG8gYWRqdXN0XHJcblx0XHRcdG9kZF9zdW0gKz0gbiA8IDEwID8gbiA6IG4gLSA5O1xyXG5cclxuXHRcdC8vIEV2ZW4gcG9zaXRpb25zXHJcblx0XHQvLyBKdXN0IHN1bSB0aGVtXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRldmVuX3N1bSArPSBuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YWxsX3N1bSA9IGV2ZW5fc3VtICsgb2RkX3N1bTtcclxuXHRjb250cm9sX2RpZ2l0ID0gKCAxMCAtICggYWxsX3N1bSApLnRvU3RyaW5nKCkuc3Vic3RyKCAtMSApICkudG9TdHJpbmcoKTtcclxuXHRjb250cm9sX2RpZ2l0ID0gcGFyc2VJbnQoIGNvbnRyb2xfZGlnaXQsIDEwICkgPiA5ID8gXCIwXCIgOiBjb250cm9sX2RpZ2l0O1xyXG5cdGNvbnRyb2xfbGV0dGVyID0gXCJKQUJDREVGR0hJXCIuc3Vic3RyKCBjb250cm9sX2RpZ2l0LCAxICkudG9TdHJpbmcoKTtcclxuXHJcblx0Ly8gQ29udHJvbCBtdXN0IGJlIGEgZGlnaXRcclxuXHRpZiAoIGxldHRlci5tYXRjaCggL1tBQkVIXS8gKSApIHtcclxuXHRcdHJldHVybiBjb250cm9sID09PSBjb250cm9sX2RpZ2l0O1xyXG5cclxuXHQvLyBDb250cm9sIG11c3QgYmUgYSBsZXR0ZXJcclxuXHR9IGVsc2UgaWYgKCBsZXR0ZXIubWF0Y2goIC9bS1BRU10vICkgKSB7XHJcblx0XHRyZXR1cm4gY29udHJvbCA9PT0gY29udHJvbF9sZXR0ZXI7XHJcblx0fVxyXG5cclxuXHQvLyBDYW4gYmUgZWl0aGVyXHJcblx0cmV0dXJuIGNvbnRyb2wgPT09IGNvbnRyb2xfZGlnaXQgfHwgY29udHJvbCA9PT0gY29udHJvbF9sZXR0ZXI7XHJcblxyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgQ0lGIG51bWJlci5cIiApO1xyXG4iLCIvKlxyXG4gKiBCcmF6aWxsaWFuIENOSCBudW1iZXIgKENhcnRlaXJhIE5hY2lvbmFsIGRlIEhhYmlsaXRhY2FvKSBpcyB0aGUgTGljZW5zZSBEcml2ZXIgbnVtYmVyLlxyXG4gKiBDTkggbnVtYmVycyBoYXZlIDExIGRpZ2l0cyBpbiB0b3RhbDogOSBudW1iZXJzIGZvbGxvd2VkIGJ5IDIgY2hlY2sgbnVtYmVycyB0aGF0IGFyZSBiZWluZyB1c2VkIGZvciB2YWxpZGF0aW9uLlxyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImNuaEJSXCIsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHJcbiAgLy8gUmVtb3Zpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGZyb20gdmFsdWVcclxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIC8oW34hQCMkJV4mKigpXys9YHt9XFxbXFxdXFwtfFxcXFw6Oyc8PiwuXFwvPyBdKSsvZywgXCJcIiApO1xyXG5cclxuICAvLyBDaGVja2luZyB2YWx1ZSB0byBoYXZlIDExIGRpZ2l0cyBvbmx5XHJcbiAgaWYgKCB2YWx1ZS5sZW5ndGggIT09IDExICkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmFyIHN1bSA9IDAsIGRzYyA9IDAsIGZpcnN0Q2hhcixcclxuXHRcdGZpcnN0Q04sIHNlY29uZENOLCBpLCBqLCB2O1xyXG5cclxuICBmaXJzdENoYXIgPSB2YWx1ZS5jaGFyQXQoIDAgKTtcclxuXHJcbiAgaWYgKCBuZXcgQXJyYXkoIDEyICkuam9pbiggZmlyc3RDaGFyICkgPT09IHZhbHVlICkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gU3RlcCAxIC0gdXNpbmcgZmlyc3QgQ2hlY2sgTnVtYmVyOlxyXG4gIGZvciAoIGkgPSAwLCBqID0gOSwgdiA9IDA7IGkgPCA5OyArK2ksIC0taiApIHtcclxuICAgIHN1bSArPSArKCB2YWx1ZS5jaGFyQXQoIGkgKSAqIGogKTtcclxuICB9XHJcblxyXG4gIGZpcnN0Q04gPSBzdW0gJSAxMTtcclxuICBpZiAoIGZpcnN0Q04gPj0gMTAgKSB7XHJcbiAgICBmaXJzdENOID0gMDtcclxuICAgIGRzYyA9IDI7XHJcbiAgfVxyXG5cclxuICBzdW0gPSAwO1xyXG4gIGZvciAoIGkgPSAwLCBqID0gMSwgdiA9IDA7IGkgPCA5OyArK2ksICsraiApIHtcclxuICAgIHN1bSArPSArKCB2YWx1ZS5jaGFyQXQoIGkgKSAqIGogKTtcclxuICB9XHJcblxyXG4gIHNlY29uZENOID0gc3VtICUgMTE7XHJcbiAgaWYgKCBzZWNvbmRDTiA+PSAxMCApIHtcclxuICAgIHNlY29uZENOID0gMDtcclxuICB9IGVsc2Uge1xyXG4gICAgc2Vjb25kQ04gPSBzZWNvbmRDTiAtIGRzYztcclxuICB9XHJcblxyXG4gIHJldHVybiAoIFN0cmluZyggZmlyc3RDTiApLmNvbmNhdCggc2Vjb25kQ04gKSA9PT0gdmFsdWUuc3Vic3RyKCAtMiApICk7XHJcblxyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgQ05IIG51bWJlclwiICk7XHJcbiIsIi8qXHJcbiAqIEJyYXppbGxpYW4gdmFsdWUgbnVtYmVyIChDYWRhc3RyYWRvIGRlIFBlc3NvYXMgSnVyaWRpY2EpLlxyXG4gKiB2YWx1ZSBudW1iZXJzIGhhdmUgMTQgZGlnaXRzIGluIHRvdGFsOiAxMiBudW1iZXJzIGZvbGxvd2VkIGJ5IDIgY2hlY2sgbnVtYmVycyB0aGF0IGFyZSBiZWluZyB1c2VkIGZvciB2YWxpZGF0aW9uLlxyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImNucGpCUlwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5cdGlmICggdGhpcy5vcHRpb25hbCggZWxlbWVudCApICkge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyBSZW1vdmluZyBubyBudW1iZXJcclxuXHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIC9bXlxcZF0rL2csIFwiXCIgKTtcclxuXHJcblx0Ly8gQ2hlY2tpbmcgdmFsdWUgdG8gaGF2ZSAxNCBkaWdpdHMgb25seVxyXG5cdGlmICggdmFsdWUubGVuZ3RoICE9PSAxNCApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIEVsaW1pbmEgdmFsdWVzIGludmFsaWRvcyBjb25oZWNpZG9zXHJcblx0aWYgKCB2YWx1ZSA9PT0gXCIwMDAwMDAwMDAwMDAwMFwiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCIxMTExMTExMTExMTExMVwiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCIyMjIyMjIyMjIyMjIyMlwiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCIzMzMzMzMzMzMzMzMzM1wiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCI0NDQ0NDQ0NDQ0NDQ0NFwiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCI1NTU1NTU1NTU1NTU1NVwiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCI2NjY2NjY2NjY2NjY2NlwiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCI3Nzc3Nzc3Nzc3Nzc3N1wiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCI4ODg4ODg4ODg4ODg4OFwiIHx8XHJcblx0XHR2YWx1ZSA9PT0gXCI5OTk5OTk5OTk5OTk5OVwiICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gVmFsaWRhIERWc1xyXG5cdHZhciB0YW1hbmhvID0gKCB2YWx1ZS5sZW5ndGggLSAyICk7XHJcblx0dmFyIG51bWVyb3MgPSB2YWx1ZS5zdWJzdHJpbmcoIDAsIHRhbWFuaG8gKTtcclxuXHR2YXIgZGlnaXRvcyA9IHZhbHVlLnN1YnN0cmluZyggdGFtYW5obyApO1xyXG5cdHZhciBzb21hID0gMDtcclxuXHR2YXIgcG9zID0gdGFtYW5obyAtIDc7XHJcblxyXG5cdGZvciAoIHZhciBpID0gdGFtYW5obzsgaSA+PSAxOyBpLS0gKSB7XHJcblx0XHRzb21hICs9IG51bWVyb3MuY2hhckF0KCB0YW1hbmhvIC0gaSApICogcG9zLS07XHJcblx0XHRpZiAoIHBvcyA8IDIgKSB7XHJcblx0XHRcdHBvcyA9IDk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR2YXIgcmVzdWx0YWRvID0gc29tYSAlIDExIDwgMiA/IDAgOiAxMSAtIHNvbWEgJSAxMTtcclxuXHJcblx0aWYgKCByZXN1bHRhZG8gIT09IHBhcnNlSW50KCBkaWdpdG9zLmNoYXJBdCggMCApLCAxMCApICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0dGFtYW5obyA9IHRhbWFuaG8gKyAxO1xyXG5cdG51bWVyb3MgPSB2YWx1ZS5zdWJzdHJpbmcoIDAsIHRhbWFuaG8gKTtcclxuXHRzb21hID0gMDtcclxuXHRwb3MgPSB0YW1hbmhvIC0gNztcclxuXHJcblx0Zm9yICggdmFyIGlsID0gdGFtYW5obzsgaWwgPj0gMTsgaWwtLSApIHtcclxuXHRcdHNvbWEgKz0gbnVtZXJvcy5jaGFyQXQoIHRhbWFuaG8gLSBpbCApICogcG9zLS07XHJcblx0XHRpZiAoIHBvcyA8IDIgKSB7XHJcblx0XHRcdHBvcyA9IDk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXN1bHRhZG8gPSBzb21hICUgMTEgPCAyID8gMCA6IDExIC0gc29tYSAlIDExO1xyXG5cclxuXHRpZiAoIHJlc3VsdGFkbyAhPT0gcGFyc2VJbnQoIGRpZ2l0b3MuY2hhckF0KCAxICksIDEwICkgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxuXHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSBDTlBKIHZhbHVlIG51bWJlclwiICk7XHJcbiIsIi8qXHJcbiAqIEJyYXppbGxpYW4gQ1BGIG51bWJlciAoQ2FkYXN0cmFkbyBkZSBQZXNzb2FzIEbDrXNpY2FzKSBpcyB0aGUgZXF1aXZhbGVudCBvZiBhIEJyYXppbGlhbiB0YXggcmVnaXN0cmF0aW9uIG51bWJlci5cclxuICogQ1BGIG51bWJlcnMgaGF2ZSAxMSBkaWdpdHMgaW4gdG90YWw6IDkgbnVtYmVycyBmb2xsb3dlZCBieSAyIGNoZWNrIG51bWJlcnMgdGhhdCBhcmUgYmVpbmcgdXNlZCBmb3IgdmFsaWRhdGlvbi5cclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJjcGZCUlwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5cdGlmICggdGhpcy5vcHRpb25hbCggZWxlbWVudCApICkge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyBSZW1vdmluZyBzcGVjaWFsIGNoYXJhY3RlcnMgZnJvbSB2YWx1ZVxyXG5cdHZhbHVlID0gdmFsdWUucmVwbGFjZSggLyhbfiFAIyQlXiYqKClfKz1ge31cXFtcXF1cXC18XFxcXDo7Jzw+LC5cXC8/IF0pKy9nLCBcIlwiICk7XHJcblxyXG5cdC8vIENoZWNraW5nIHZhbHVlIHRvIGhhdmUgMTEgZGlnaXRzIG9ubHlcclxuXHRpZiAoIHZhbHVlLmxlbmd0aCAhPT0gMTEgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHR2YXIgc3VtID0gMCxcclxuXHRcdGZpcnN0Q04sIHNlY29uZENOLCBjaGVja1Jlc3VsdCwgaTtcclxuXHJcblx0Zmlyc3RDTiA9IHBhcnNlSW50KCB2YWx1ZS5zdWJzdHJpbmcoIDksIDEwICksIDEwICk7XHJcblx0c2Vjb25kQ04gPSBwYXJzZUludCggdmFsdWUuc3Vic3RyaW5nKCAxMCwgMTEgKSwgMTAgKTtcclxuXHJcblx0Y2hlY2tSZXN1bHQgPSBmdW5jdGlvbiggc3VtLCBjbiApIHtcclxuXHRcdHZhciByZXN1bHQgPSAoIHN1bSAqIDEwICkgJSAxMTtcclxuXHRcdGlmICggKCByZXN1bHQgPT09IDEwICkgfHwgKCByZXN1bHQgPT09IDExICkgKSB7XHJcblx0XHRcdHJlc3VsdCA9IDA7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKCByZXN1bHQgPT09IGNuICk7XHJcblx0fTtcclxuXHJcblx0Ly8gQ2hlY2tpbmcgZm9yIGR1bXAgZGF0YVxyXG5cdGlmICggdmFsdWUgPT09IFwiXCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjAwMDAwMDAwMDAwXCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjExMTExMTExMTExXCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjIyMjIyMjIyMjIyXCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjMzMzMzMzMzMzMzXCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjQ0NDQ0NDQ0NDQ0XCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjU1NTU1NTU1NTU1XCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjY2NjY2NjY2NjY2XCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjc3Nzc3Nzc3Nzc3XCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjg4ODg4ODg4ODg4XCIgfHxcclxuXHRcdHZhbHVlID09PSBcIjk5OTk5OTk5OTk5XCJcclxuXHQpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIFN0ZXAgMSAtIHVzaW5nIGZpcnN0IENoZWNrIE51bWJlcjpcclxuXHRmb3IgKCBpID0gMTsgaSA8PSA5OyBpKysgKSB7XHJcblx0XHRzdW0gPSBzdW0gKyBwYXJzZUludCggdmFsdWUuc3Vic3RyaW5nKCBpIC0gMSwgaSApLCAxMCApICogKCAxMSAtIGkgKTtcclxuXHR9XHJcblxyXG5cdC8vIElmIGZpcnN0IENoZWNrIE51bWJlciAoQ04pIGlzIHZhbGlkLCBtb3ZlIHRvIFN0ZXAgMiAtIHVzaW5nIHNlY29uZCBDaGVjayBOdW1iZXI6XHJcblx0aWYgKCBjaGVja1Jlc3VsdCggc3VtLCBmaXJzdENOICkgKSB7XHJcblx0XHRzdW0gPSAwO1xyXG5cdFx0Zm9yICggaSA9IDE7IGkgPD0gMTA7IGkrKyApIHtcclxuXHRcdFx0c3VtID0gc3VtICsgcGFyc2VJbnQoIHZhbHVlLnN1YnN0cmluZyggaSAtIDEsIGkgKSwgMTAgKSAqICggMTIgLSBpICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2hlY2tSZXN1bHQoIHN1bSwgc2Vjb25kQ04gKTtcclxuXHR9XHJcblx0cmV0dXJuIGZhbHNlO1xyXG5cclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIENQRiBudW1iZXJcIiApO1xyXG4iLCIvLyBodHRwczovL2pxdWVyeXZhbGlkYXRpb24ub3JnL2NyZWRpdGNhcmQtbWV0aG9kL1xyXG4vLyBiYXNlZCBvbiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MdWhuX2FsZ29yaXRobVxyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwiY3JlZGl0Y2FyZFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0aWYgKCB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgKSB7XHJcblx0XHRyZXR1cm4gXCJkZXBlbmRlbmN5LW1pc21hdGNoXCI7XHJcblx0fVxyXG5cclxuXHQvLyBBY2NlcHQgb25seSBzcGFjZXMsIGRpZ2l0cyBhbmQgZGFzaGVzXHJcblx0aWYgKCAvW14wLTkgXFwtXSsvLnRlc3QoIHZhbHVlICkgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHR2YXIgbkNoZWNrID0gMCxcclxuXHRcdG5EaWdpdCA9IDAsXHJcblx0XHRiRXZlbiA9IGZhbHNlLFxyXG5cdFx0biwgY0RpZ2l0O1xyXG5cclxuXHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApO1xyXG5cclxuXHQvLyBCYXNpbmcgbWluIGFuZCBtYXggbGVuZ3RoIG9uXHJcblx0Ly8gaHR0cHM6Ly9kZXYuZWFuLmNvbS9nZW5lcmFsLWluZm8vdmFsaWQtY2FyZC10eXBlcy9cclxuXHRpZiAoIHZhbHVlLmxlbmd0aCA8IDEzIHx8IHZhbHVlLmxlbmd0aCA+IDE5ICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Zm9yICggbiA9IHZhbHVlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tICkge1xyXG5cdFx0Y0RpZ2l0ID0gdmFsdWUuY2hhckF0KCBuICk7XHJcblx0XHRuRGlnaXQgPSBwYXJzZUludCggY0RpZ2l0LCAxMCApO1xyXG5cdFx0aWYgKCBiRXZlbiApIHtcclxuXHRcdFx0aWYgKCAoIG5EaWdpdCAqPSAyICkgPiA5ICkge1xyXG5cdFx0XHRcdG5EaWdpdCAtPSA5O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0bkNoZWNrICs9IG5EaWdpdDtcclxuXHRcdGJFdmVuID0gIWJFdmVuO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuICggbkNoZWNrICUgMTAgKSA9PT0gMDtcclxufSwgXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuXCIgKTtcclxuIiwiLyogTk9USUNFOiBNb2RpZmllZCB2ZXJzaW9uIG9mIENhc3RsZS5Db21wb25lbnRzLlZhbGlkYXRvci5DcmVkaXRDYXJkVmFsaWRhdG9yXHJcbiAqIFJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIDIuMCBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICogVmFsaWQgVHlwZXM6IG1hc3RlcmNhcmQsIHZpc2EsIGFtZXgsIGRpbmVyc2NsdWIsIGVucm91dGUsIGRpc2NvdmVyLCBqY2IsIHVua25vd24sIGFsbCAob3ZlcnJpZGVzIGFsbCBvdGhlciBzZXR0aW5ncylcclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJjcmVkaXRjYXJkdHlwZXNcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuXHRpZiAoIC9bXjAtOVxcLV0rLy50ZXN0KCB2YWx1ZSApICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKTtcclxuXHJcblx0dmFyIHZhbGlkVHlwZXMgPSAweDAwMDA7XHJcblxyXG5cdGlmICggcGFyYW0ubWFzdGVyY2FyZCApIHtcclxuXHRcdHZhbGlkVHlwZXMgfD0gMHgwMDAxO1xyXG5cdH1cclxuXHRpZiAoIHBhcmFtLnZpc2EgKSB7XHJcblx0XHR2YWxpZFR5cGVzIHw9IDB4MDAwMjtcclxuXHR9XHJcblx0aWYgKCBwYXJhbS5hbWV4ICkge1xyXG5cdFx0dmFsaWRUeXBlcyB8PSAweDAwMDQ7XHJcblx0fVxyXG5cdGlmICggcGFyYW0uZGluZXJzY2x1YiApIHtcclxuXHRcdHZhbGlkVHlwZXMgfD0gMHgwMDA4O1xyXG5cdH1cclxuXHRpZiAoIHBhcmFtLmVucm91dGUgKSB7XHJcblx0XHR2YWxpZFR5cGVzIHw9IDB4MDAxMDtcclxuXHR9XHJcblx0aWYgKCBwYXJhbS5kaXNjb3ZlciApIHtcclxuXHRcdHZhbGlkVHlwZXMgfD0gMHgwMDIwO1xyXG5cdH1cclxuXHRpZiAoIHBhcmFtLmpjYiApIHtcclxuXHRcdHZhbGlkVHlwZXMgfD0gMHgwMDQwO1xyXG5cdH1cclxuXHRpZiAoIHBhcmFtLnVua25vd24gKSB7XHJcblx0XHR2YWxpZFR5cGVzIHw9IDB4MDA4MDtcclxuXHR9XHJcblx0aWYgKCBwYXJhbS5hbGwgKSB7XHJcblx0XHR2YWxpZFR5cGVzID0gMHgwMDAxIHwgMHgwMDAyIHwgMHgwMDA0IHwgMHgwMDA4IHwgMHgwMDEwIHwgMHgwMDIwIHwgMHgwMDQwIHwgMHgwMDgwO1xyXG5cdH1cclxuXHRpZiAoIHZhbGlkVHlwZXMgJiAweDAwMDEgJiYgKCAvXig1WzEyMzQ1XSkvLnRlc3QoIHZhbHVlICkgfHwgL14oMlsyMzQ1NjddKS8udGVzdCggdmFsdWUgKSApICkgeyAvLyBNYXN0ZXJjYXJkXHJcblx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID09PSAxNjtcclxuXHR9XHJcblx0aWYgKCB2YWxpZFR5cGVzICYgMHgwMDAyICYmIC9eKDQpLy50ZXN0KCB2YWx1ZSApICkgeyAvLyBWaXNhXHJcblx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID09PSAxNjtcclxuXHR9XHJcblx0aWYgKCB2YWxpZFR5cGVzICYgMHgwMDA0ICYmIC9eKDNbNDddKS8udGVzdCggdmFsdWUgKSApIHsgLy8gQW1leFxyXG5cdFx0cmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMTU7XHJcblx0fVxyXG5cdGlmICggdmFsaWRUeXBlcyAmIDB4MDAwOCAmJiAvXigzKDBbMDEyMzQ1XXxbNjhdKSkvLnRlc3QoIHZhbHVlICkgKSB7IC8vIERpbmVyc2NsdWJcclxuXHRcdHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDE0O1xyXG5cdH1cclxuXHRpZiAoIHZhbGlkVHlwZXMgJiAweDAwMTAgJiYgL14oMigwMTR8MTQ5KSkvLnRlc3QoIHZhbHVlICkgKSB7IC8vIEVucm91dGVcclxuXHRcdHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDE1O1xyXG5cdH1cclxuXHRpZiAoIHZhbGlkVHlwZXMgJiAweDAwMjAgJiYgL14oNjAxMSkvLnRlc3QoIHZhbHVlICkgKSB7IC8vIERpc2NvdmVyXHJcblx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID09PSAxNjtcclxuXHR9XHJcblx0aWYgKCB2YWxpZFR5cGVzICYgMHgwMDQwICYmIC9eKDMpLy50ZXN0KCB2YWx1ZSApICkgeyAvLyBKY2JcclxuXHRcdHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDE2O1xyXG5cdH1cclxuXHRpZiAoIHZhbGlkVHlwZXMgJiAweDAwNDAgJiYgL14oMjEzMXwxODAwKS8udGVzdCggdmFsdWUgKSApIHsgLy8gSmNiXHJcblx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID09PSAxNTtcclxuXHR9XHJcblx0aWYgKCB2YWxpZFR5cGVzICYgMHgwMDgwICkgeyAvLyBVbmtub3duXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0cmV0dXJuIGZhbHNlO1xyXG59LCBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci5cIiApO1xyXG4iLCIvKipcclxuICogVmFsaWRhdGVzIGN1cnJlbmNpZXMgd2l0aCBhbnkgZ2l2ZW4gc3ltYm9scyBieSBAamFtZXNsb3VpelxyXG4gKiBTeW1ib2xzIGNhbiBiZSBvcHRpb25hbCBvciByZXF1aXJlZC4gU3ltYm9scyByZXF1aXJlZCBieSBkZWZhdWx0XHJcbiAqXHJcbiAqIFVzYWdlIGV4YW1wbGVzOlxyXG4gKiAgY3VycmVuY3k6IFtcIsKjXCIsIGZhbHNlXSAtIFVzZSBmYWxzZSBmb3Igc29mdCBjdXJyZW5jeSB2YWxpZGF0aW9uXHJcbiAqICBjdXJyZW5jeTogW1wiJFwiLCBmYWxzZV1cclxuICogIGN1cnJlbmN5OiBbXCJSTVwiLCBmYWxzZV0gLSBhbHNvIHdvcmtzIHdpdGggdGV4dCBiYXNlZCBzeW1ib2xzIHN1Y2ggYXMgXCJSTVwiIC0gTWFsYXlzaWEgUmluZ2dpdCBldGNcclxuICpcclxuICogIDxpbnB1dCBjbGFzcz1cImN1cnJlbmN5SW5wdXRcIiBuYW1lPVwiY3VycmVuY3lJbnB1dFwiPlxyXG4gKlxyXG4gKiBTb2Z0IHN5bWJvbCBjaGVja2luZ1xyXG4gKiAgY3VycmVuY3lJbnB1dDoge1xyXG4gKiAgICAgY3VycmVuY3k6IFtcIiRcIiwgZmFsc2VdXHJcbiAqICB9XHJcbiAqXHJcbiAqIFN0cmljdCBzeW1ib2wgY2hlY2tpbmcgKGRlZmF1bHQpXHJcbiAqICBjdXJyZW5jeUlucHV0OiB7XHJcbiAqICAgICBjdXJyZW5jeTogXCIkXCJcclxuICogICAgIC8vT1JcclxuICogICAgIGN1cnJlbmN5OiBbXCIkXCIsIHRydWVdXHJcbiAqICB9XHJcbiAqXHJcbiAqIE11bHRpcGxlIFN5bWJvbHNcclxuICogIGN1cnJlbmN5SW5wdXQ6IHtcclxuICogICAgIGN1cnJlbmN5OiBcIiQswqMswqJcIlxyXG4gKiAgfVxyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImN1cnJlbmN5XCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCwgcGFyYW0gKSB7XHJcbiAgICB2YXIgaXNQYXJhbVN0cmluZyA9IHR5cGVvZiBwYXJhbSA9PT0gXCJzdHJpbmdcIixcclxuICAgICAgICBzeW1ib2wgPSBpc1BhcmFtU3RyaW5nID8gcGFyYW0gOiBwYXJhbVsgMCBdLFxyXG4gICAgICAgIHNvZnQgPSBpc1BhcmFtU3RyaW5nID8gdHJ1ZSA6IHBhcmFtWyAxIF0sXHJcbiAgICAgICAgcmVnZXg7XHJcblxyXG4gICAgc3ltYm9sID0gc3ltYm9sLnJlcGxhY2UoIC8sL2csIFwiXCIgKTtcclxuICAgIHN5bWJvbCA9IHNvZnQgPyBzeW1ib2wgKyBcIl1cIiA6IHN5bWJvbCArIFwiXT9cIjtcclxuICAgIHJlZ2V4ID0gXCJeW1wiICsgc3ltYm9sICsgXCIoWzEtOV17MX1bMC05XXswLDJ9KFxcXFwsWzAtOV17M30pKihcXFxcLlswLTldezAsMn0pP3xbMS05XXsxfVswLTldezAsfShcXFxcLlswLTldezAsMn0pP3wwKFxcXFwuWzAtOV17MCwyfSk/fChcXFxcLlswLTldezEsMn0pPykkXCI7XHJcbiAgICByZWdleCA9IG5ldyBSZWdFeHAoIHJlZ2V4ICk7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IHJlZ2V4LnRlc3QoIHZhbHVlICk7XHJcblxyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgY3VycmVuY3lcIiApO1xyXG4iLCIkLnZhbGlkYXRvci5hZGRNZXRob2QoIFwiZGF0ZUZBXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eWzEtNF1cXGR7M31cXC8oKDA/WzEtNl1cXC8oKDNbMC0xXSl8KFsxLTJdWzAtOV0pfCgwP1sxLTldKSkpfCgoMVswLTJdfCgwP1s3LTldKSlcXC8oMzB8KFsxLTJdWzAtOV0pfCgwP1sxLTldKSkpKSQvLnRlc3QoIHZhbHVlICk7XHJcbn0sICQudmFsaWRhdG9yLm1lc3NhZ2VzLmRhdGUgKTtcclxuIiwiLyoqXHJcbiAqIFJldHVybiB0cnVlLCBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBkYXRlLCBhbHNvIG1ha2luZyB0aGlzIGZvcm1hbCBjaGVjayBkZC9tbS95eXl5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZSAkLnZhbGlkYXRvci5tZXRob2RzLmRhdGUoXCIwMS8wMS8xOTAwXCIpXHJcbiAqIEByZXN1bHQgdHJ1ZVxyXG4gKlxyXG4gKiBAZXhhbXBsZSAkLnZhbGlkYXRvci5tZXRob2RzLmRhdGUoXCIwMS8xMy8xOTkwXCIpXHJcbiAqIEByZXN1bHQgZmFsc2VcclxuICpcclxuICogQGV4YW1wbGUgJC52YWxpZGF0b3IubWV0aG9kcy5kYXRlKFwiMDEuMDEuMTkwMFwiKVxyXG4gKiBAcmVzdWx0IGZhbHNlXHJcbiAqXHJcbiAqIEBleGFtcGxlIDxpbnB1dCBuYW1lPVwicGlwcG9cIiBjbGFzcz1cIntkYXRlSVRBOnRydWV9XCIgLz5cclxuICogQGRlc2MgRGVjbGFyZXMgYW4gb3B0aW9uYWwgaW5wdXQgZWxlbWVudCB3aG9zZSB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZGF0ZS5cclxuICpcclxuICogQG5hbWUgJC52YWxpZGF0b3IubWV0aG9kcy5kYXRlSVRBXHJcbiAqIEB0eXBlIEJvb2xlYW5cclxuICogQGNhdCBQbHVnaW5zL1ZhbGlkYXRlL01ldGhvZHNcclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJkYXRlSVRBXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHR2YXIgY2hlY2sgPSBmYWxzZSxcclxuXHRcdHJlID0gL15cXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezR9JC8sXHJcblx0XHRhZGF0YSwgZ2csIG1tLCBhYWFhLCB4ZGF0YTtcclxuXHRpZiAoIHJlLnRlc3QoIHZhbHVlICkgKSB7XHJcblx0XHRhZGF0YSA9IHZhbHVlLnNwbGl0KCBcIi9cIiApO1xyXG5cdFx0Z2cgPSBwYXJzZUludCggYWRhdGFbIDAgXSwgMTAgKTtcclxuXHRcdG1tID0gcGFyc2VJbnQoIGFkYXRhWyAxIF0sIDEwICk7XHJcblx0XHRhYWFhID0gcGFyc2VJbnQoIGFkYXRhWyAyIF0sIDEwICk7XHJcblx0XHR4ZGF0YSA9IG5ldyBEYXRlKCBEYXRlLlVUQyggYWFhYSwgbW0gLSAxLCBnZywgMTIsIDAsIDAsIDAgKSApO1xyXG5cdFx0aWYgKCAoIHhkYXRhLmdldFVUQ0Z1bGxZZWFyKCkgPT09IGFhYWEgKSAmJiAoIHhkYXRhLmdldFVUQ01vbnRoKCkgPT09IG1tIC0gMSApICYmICggeGRhdGEuZ2V0VVRDRGF0ZSgpID09PSBnZyApICkge1xyXG5cdFx0XHRjaGVjayA9IHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjaGVjayA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH0gZWxzZSB7XHJcblx0XHRjaGVjayA9IGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IGNoZWNrO1xyXG59LCAkLnZhbGlkYXRvci5tZXNzYWdlcy5kYXRlICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJkYXRlTkxcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14oMD9bMS05XXxbMTJdXFxkfDNbMDFdKVtcXC5cXC9cXC1dKDA/WzEtOV18MVswMTJdKVtcXC5cXC9cXC1dKFsxMl1cXGQpPyhcXGRcXGQpJC8udGVzdCggdmFsdWUgKTtcclxufSwgJC52YWxpZGF0b3IubWVzc2FnZXMuZGF0ZSApO1xyXG4iLCIvLyBPbGRlciBcImFjY2VwdFwiIGZpbGUgZXh0ZW5zaW9uIG1ldGhvZC4gT2xkIGRvY3M6IGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vUGx1Z2lucy9WYWxpZGF0aW9uL01ldGhvZHMvYWNjZXB0XHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJleHRlbnNpb25cIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuXHRwYXJhbSA9IHR5cGVvZiBwYXJhbSA9PT0gXCJzdHJpbmdcIiA/IHBhcmFtLnJlcGxhY2UoIC8sL2csIFwifFwiICkgOiBcInBuZ3xqcGU/Z3xnaWZcIjtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IHZhbHVlLm1hdGNoKCBuZXcgUmVnRXhwKCBcIlxcXFwuKFwiICsgcGFyYW0gKyBcIikkXCIsIFwiaVwiICkgKTtcclxufSwgJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBsZWFzZSBlbnRlciBhIHZhbHVlIHdpdGggYSB2YWxpZCBleHRlbnNpb24uXCIgKSApO1xyXG4iLCIvKipcclxuICogRHV0Y2ggZ2lybyBhY2NvdW50IG51bWJlcnMgKG5vdCBiYW5rIG51bWJlcnMpIGhhdmUgbWF4IDcgZGlnaXRzXHJcbiAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwiZ2lyb2FjY291bnROTFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXlswLTldezEsN30kLy50ZXN0KCB2YWx1ZSApO1xyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgZ2lybyBhY2NvdW50IG51bWJlclwiICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJncmVhdGVyVGhhblwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG4gICAgdmFyIHRhcmdldCA9ICQoIHBhcmFtICk7XHJcblxyXG4gICAgaWYgKCB0aGlzLnNldHRpbmdzLm9uZm9jdXNvdXQgJiYgdGFyZ2V0Lm5vdCggXCIudmFsaWRhdGUtZ3JlYXRlclRoYW4tYmx1clwiICkubGVuZ3RoICkge1xyXG4gICAgICAgIHRhcmdldC5hZGRDbGFzcyggXCJ2YWxpZGF0ZS1ncmVhdGVyVGhhbi1ibHVyXCIgKS5vbiggXCJibHVyLnZhbGlkYXRlLWdyZWF0ZXJUaGFuXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAkKCBlbGVtZW50ICkudmFsaWQoKTtcclxuICAgICAgICB9ICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlID4gdGFyZ2V0LnZhbCgpO1xyXG59LCBcIlBsZWFzZSBlbnRlciBhIGdyZWF0ZXIgdmFsdWUuXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImdyZWF0ZXJUaGFuRXF1YWxcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuICAgIHZhciB0YXJnZXQgPSAkKCBwYXJhbSApO1xyXG5cclxuICAgIGlmICggdGhpcy5zZXR0aW5ncy5vbmZvY3Vzb3V0ICYmIHRhcmdldC5ub3QoIFwiLnZhbGlkYXRlLWdyZWF0ZXJUaGFuRXF1YWwtYmx1clwiICkubGVuZ3RoICkge1xyXG4gICAgICAgIHRhcmdldC5hZGRDbGFzcyggXCJ2YWxpZGF0ZS1ncmVhdGVyVGhhbkVxdWFsLWJsdXJcIiApLm9uKCBcImJsdXIudmFsaWRhdGUtZ3JlYXRlclRoYW5FcXVhbFwiLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgJCggZWxlbWVudCApLnZhbGlkKCk7XHJcbiAgICAgICAgfSApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZSA+PSB0YXJnZXQudmFsKCk7XHJcbn0sIFwiUGxlYXNlIGVudGVyIGEgZ3JlYXRlciB2YWx1ZS5cIiApO1xyXG4iLCIvKipcclxuICogSUJBTiBpcyB0aGUgaW50ZXJuYXRpb25hbCBiYW5rIGFjY291bnQgbnVtYmVyLlxyXG4gKiBJdCBoYXMgYSBjb3VudHJ5IC0gc3BlY2lmaWMgZm9ybWF0LCB0aGF0IGlzIGNoZWNrZWQgaGVyZSB0b29cclxuICpcclxuICogVmFsaWRhdGlvbiBpcyBjYXNlLWluc2Vuc2l0aXZlLiBQbGVhc2UgbWFrZSBzdXJlIHRvIG5vcm1hbGl6ZSBpbnB1dCB5b3Vyc2VsZi5cclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJpYmFuXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHJcblx0Ly8gU29tZSBxdWljayBzaW1wbGUgdGVzdHMgdG8gcHJldmVudCBuZWVkbGVzcyB3b3JrXHJcblx0aWYgKCB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8vIFJlbW92ZSBzcGFjZXMgYW5kIHRvIHVwcGVyIGNhc2VcclxuXHR2YXIgaWJhbiA9IHZhbHVlLnJlcGxhY2UoIC8gL2csIFwiXCIgKS50b1VwcGVyQ2FzZSgpLFxyXG5cdFx0aWJhbmNoZWNrZGlnaXRzID0gXCJcIixcclxuXHRcdGxlYWRpbmdaZXJvZXMgPSB0cnVlLFxyXG5cdFx0Y1Jlc3QgPSBcIlwiLFxyXG5cdFx0Y09wZXJhdG9yID0gXCJcIixcclxuXHRcdGNvdW50cnljb2RlLCBpYmFuY2hlY2ssIGNoYXJBdCwgY0NoYXIsIGJiYW5wYXR0ZXJuLCBiYmFuY291bnRyeXBhdHRlcm5zLCBpYmFucmVnZXhwLCBpLCBwO1xyXG5cclxuXHQvLyBDaGVjayBmb3IgSUJBTiBjb2RlIGxlbmd0aC5cclxuXHQvLyBJdCBjb250YWluczpcclxuXHQvLyBjb3VudHJ5IGNvZGUgSVNPIDMxNjYtMSAtIHR3byBsZXR0ZXJzLFxyXG5cdC8vIHR3byBjaGVjayBkaWdpdHMsXHJcblx0Ly8gQmFzaWMgQmFuayBBY2NvdW50IE51bWJlciAoQkJBTikgLSB1cCB0byAzMCBjaGFyc1xyXG5cdHZhciBtaW5pbWFsSUJBTmxlbmd0aCA9IDU7XHJcblx0aWYgKCBpYmFuLmxlbmd0aCA8IG1pbmltYWxJQkFObGVuZ3RoICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgdGhlIGNvdW50cnkgY29kZSBhbmQgZmluZCB0aGUgY291bnRyeSBzcGVjaWZpYyBmb3JtYXRcclxuXHRjb3VudHJ5Y29kZSA9IGliYW4uc3Vic3RyaW5nKCAwLCAyICk7XHJcblx0YmJhbmNvdW50cnlwYXR0ZXJucyA9IHtcclxuXHRcdFwiQUxcIjogXCJcXFxcZHs4fVtcXFxcZEEtWl17MTZ9XCIsXHJcblx0XHRcIkFEXCI6IFwiXFxcXGR7OH1bXFxcXGRBLVpdezEyfVwiLFxyXG5cdFx0XCJBVFwiOiBcIlxcXFxkezE2fVwiLFxyXG5cdFx0XCJBWlwiOiBcIltcXFxcZEEtWl17NH1cXFxcZHsyMH1cIixcclxuXHRcdFwiQkVcIjogXCJcXFxcZHsxMn1cIixcclxuXHRcdFwiQkhcIjogXCJbQS1aXXs0fVtcXFxcZEEtWl17MTR9XCIsXHJcblx0XHRcIkJBXCI6IFwiXFxcXGR7MTZ9XCIsXHJcblx0XHRcIkJSXCI6IFwiXFxcXGR7MjN9W0EtWl1bXFxcXGRBLVpdXCIsXHJcblx0XHRcIkJHXCI6IFwiW0EtWl17NH1cXFxcZHs2fVtcXFxcZEEtWl17OH1cIixcclxuXHRcdFwiQ1JcIjogXCJcXFxcZHsxN31cIixcclxuXHRcdFwiSFJcIjogXCJcXFxcZHsxN31cIixcclxuXHRcdFwiQ1lcIjogXCJcXFxcZHs4fVtcXFxcZEEtWl17MTZ9XCIsXHJcblx0XHRcIkNaXCI6IFwiXFxcXGR7MjB9XCIsXHJcblx0XHRcIkRLXCI6IFwiXFxcXGR7MTR9XCIsXHJcblx0XHRcIkRPXCI6IFwiW0EtWl17NH1cXFxcZHsyMH1cIixcclxuXHRcdFwiRUVcIjogXCJcXFxcZHsxNn1cIixcclxuXHRcdFwiRk9cIjogXCJcXFxcZHsxNH1cIixcclxuXHRcdFwiRklcIjogXCJcXFxcZHsxNH1cIixcclxuXHRcdFwiRlJcIjogXCJcXFxcZHsxMH1bXFxcXGRBLVpdezExfVxcXFxkezJ9XCIsXHJcblx0XHRcIkdFXCI6IFwiW1xcXFxkQS1aXXsyfVxcXFxkezE2fVwiLFxyXG5cdFx0XCJERVwiOiBcIlxcXFxkezE4fVwiLFxyXG5cdFx0XCJHSVwiOiBcIltBLVpdezR9W1xcXFxkQS1aXXsxNX1cIixcclxuXHRcdFwiR1JcIjogXCJcXFxcZHs3fVtcXFxcZEEtWl17MTZ9XCIsXHJcblx0XHRcIkdMXCI6IFwiXFxcXGR7MTR9XCIsXHJcblx0XHRcIkdUXCI6IFwiW1xcXFxkQS1aXXs0fVtcXFxcZEEtWl17MjB9XCIsXHJcblx0XHRcIkhVXCI6IFwiXFxcXGR7MjR9XCIsXHJcblx0XHRcIklTXCI6IFwiXFxcXGR7MjJ9XCIsXHJcblx0XHRcIklFXCI6IFwiW1xcXFxkQS1aXXs0fVxcXFxkezE0fVwiLFxyXG5cdFx0XCJJTFwiOiBcIlxcXFxkezE5fVwiLFxyXG5cdFx0XCJJVFwiOiBcIltBLVpdXFxcXGR7MTB9W1xcXFxkQS1aXXsxMn1cIixcclxuXHRcdFwiS1pcIjogXCJcXFxcZHszfVtcXFxcZEEtWl17MTN9XCIsXHJcblx0XHRcIktXXCI6IFwiW0EtWl17NH1bXFxcXGRBLVpdezIyfVwiLFxyXG5cdFx0XCJMVlwiOiBcIltBLVpdezR9W1xcXFxkQS1aXXsxM31cIixcclxuXHRcdFwiTEJcIjogXCJcXFxcZHs0fVtcXFxcZEEtWl17MjB9XCIsXHJcblx0XHRcIkxJXCI6IFwiXFxcXGR7NX1bXFxcXGRBLVpdezEyfVwiLFxyXG5cdFx0XCJMVFwiOiBcIlxcXFxkezE2fVwiLFxyXG5cdFx0XCJMVVwiOiBcIlxcXFxkezN9W1xcXFxkQS1aXXsxM31cIixcclxuXHRcdFwiTUtcIjogXCJcXFxcZHszfVtcXFxcZEEtWl17MTB9XFxcXGR7Mn1cIixcclxuXHRcdFwiTVRcIjogXCJbQS1aXXs0fVxcXFxkezV9W1xcXFxkQS1aXXsxOH1cIixcclxuXHRcdFwiTVJcIjogXCJcXFxcZHsyM31cIixcclxuXHRcdFwiTVVcIjogXCJbQS1aXXs0fVxcXFxkezE5fVtBLVpdezN9XCIsXHJcblx0XHRcIk1DXCI6IFwiXFxcXGR7MTB9W1xcXFxkQS1aXXsxMX1cXFxcZHsyfVwiLFxyXG5cdFx0XCJNRFwiOiBcIltcXFxcZEEtWl17Mn1cXFxcZHsxOH1cIixcclxuXHRcdFwiTUVcIjogXCJcXFxcZHsxOH1cIixcclxuXHRcdFwiTkxcIjogXCJbQS1aXXs0fVxcXFxkezEwfVwiLFxyXG5cdFx0XCJOT1wiOiBcIlxcXFxkezExfVwiLFxyXG5cdFx0XCJQS1wiOiBcIltcXFxcZEEtWl17NH1cXFxcZHsxNn1cIixcclxuXHRcdFwiUFNcIjogXCJbXFxcXGRBLVpdezR9XFxcXGR7MjF9XCIsXHJcblx0XHRcIlBMXCI6IFwiXFxcXGR7MjR9XCIsXHJcblx0XHRcIlBUXCI6IFwiXFxcXGR7MjF9XCIsXHJcblx0XHRcIlJPXCI6IFwiW0EtWl17NH1bXFxcXGRBLVpdezE2fVwiLFxyXG5cdFx0XCJTTVwiOiBcIltBLVpdXFxcXGR7MTB9W1xcXFxkQS1aXXsxMn1cIixcclxuXHRcdFwiU0FcIjogXCJcXFxcZHsyfVtcXFxcZEEtWl17MTh9XCIsXHJcblx0XHRcIlJTXCI6IFwiXFxcXGR7MTh9XCIsXHJcblx0XHRcIlNLXCI6IFwiXFxcXGR7MjB9XCIsXHJcblx0XHRcIlNJXCI6IFwiXFxcXGR7MTV9XCIsXHJcblx0XHRcIkVTXCI6IFwiXFxcXGR7MjB9XCIsXHJcblx0XHRcIlNFXCI6IFwiXFxcXGR7MjB9XCIsXHJcblx0XHRcIkNIXCI6IFwiXFxcXGR7NX1bXFxcXGRBLVpdezEyfVwiLFxyXG5cdFx0XCJUTlwiOiBcIlxcXFxkezIwfVwiLFxyXG5cdFx0XCJUUlwiOiBcIlxcXFxkezV9W1xcXFxkQS1aXXsxN31cIixcclxuXHRcdFwiQUVcIjogXCJcXFxcZHszfVxcXFxkezE2fVwiLFxyXG5cdFx0XCJHQlwiOiBcIltBLVpdezR9XFxcXGR7MTR9XCIsXHJcblx0XHRcIlZHXCI6IFwiW1xcXFxkQS1aXXs0fVxcXFxkezE2fVwiXHJcblx0fTtcclxuXHJcblx0YmJhbnBhdHRlcm4gPSBiYmFuY291bnRyeXBhdHRlcm5zWyBjb3VudHJ5Y29kZSBdO1xyXG5cclxuXHQvLyBBcyBuZXcgY291bnRyaWVzIHdpbGwgc3RhcnQgdXNpbmcgSUJBTiBpbiB0aGVcclxuXHQvLyBmdXR1cmUsIHdlIG9ubHkgY2hlY2sgaWYgdGhlIGNvdW50cnljb2RlIGlzIGtub3duLlxyXG5cdC8vIFRoaXMgcHJldmVudHMgZmFsc2UgbmVnYXRpdmVzLCB3aGlsZSBhbG1vc3QgYWxsXHJcblx0Ly8gZmFsc2UgcG9zaXRpdmVzIGludHJvZHVjZWQgYnkgdGhpcywgd2lsbCBiZSBjYXVnaHRcclxuXHQvLyBieSB0aGUgY2hlY2tzdW0gdmFsaWRhdGlvbiBiZWxvdyBhbnl3YXkuXHJcblx0Ly8gU3RyaWN0IGNoZWNraW5nIHNob3VsZCByZXR1cm4gRkFMU0UgZm9yIHVua25vd25cclxuXHQvLyBjb3VudHJpZXMuXHJcblx0aWYgKCB0eXBlb2YgYmJhbnBhdHRlcm4gIT09IFwidW5kZWZpbmVkXCIgKSB7XHJcblx0XHRpYmFucmVnZXhwID0gbmV3IFJlZ0V4cCggXCJeW0EtWl17Mn1cXFxcZHsyfVwiICsgYmJhbnBhdHRlcm4gKyBcIiRcIiwgXCJcIiApO1xyXG5cdFx0aWYgKCAhKCBpYmFucmVnZXhwLnRlc3QoIGliYW4gKSApICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIEludmFsaWQgY291bnRyeSBzcGVjaWZpYyBmb3JtYXRcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIE5vdyBjaGVjayB0aGUgY2hlY2tzdW0sIGZpcnN0IGNvbnZlcnQgdG8gZGlnaXRzXHJcblx0aWJhbmNoZWNrID0gaWJhbi5zdWJzdHJpbmcoIDQsIGliYW4ubGVuZ3RoICkgKyBpYmFuLnN1YnN0cmluZyggMCwgNCApO1xyXG5cdGZvciAoIGkgPSAwOyBpIDwgaWJhbmNoZWNrLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0Y2hhckF0ID0gaWJhbmNoZWNrLmNoYXJBdCggaSApO1xyXG5cdFx0aWYgKCBjaGFyQXQgIT09IFwiMFwiICkge1xyXG5cdFx0XHRsZWFkaW5nWmVyb2VzID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoICFsZWFkaW5nWmVyb2VzICkge1xyXG5cdFx0XHRpYmFuY2hlY2tkaWdpdHMgKz0gXCIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIi5pbmRleE9mKCBjaGFyQXQgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZSB0aGUgcmVzdWx0IG9mOiBpYmFuY2hlY2tkaWdpdHMgJSA5N1xyXG5cdGZvciAoIHAgPSAwOyBwIDwgaWJhbmNoZWNrZGlnaXRzLmxlbmd0aDsgcCsrICkge1xyXG5cdFx0Y0NoYXIgPSBpYmFuY2hlY2tkaWdpdHMuY2hhckF0KCBwICk7XHJcblx0XHRjT3BlcmF0b3IgPSBcIlwiICsgY1Jlc3QgKyBcIlwiICsgY0NoYXI7XHJcblx0XHRjUmVzdCA9IGNPcGVyYXRvciAlIDk3O1xyXG5cdH1cclxuXHRyZXR1cm4gY1Jlc3QgPT09IDE7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBJQkFOXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImludGVnZXJcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14tP1xcZCskLy50ZXN0KCB2YWx1ZSApO1xyXG59LCBcIkEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgbm9uLWRlY2ltYWwgbnVtYmVyIHBsZWFzZVwiICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJpcHY0XCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4oMjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLigyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKDI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkL2kudGVzdCggdmFsdWUgKTtcclxufSwgXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBJUCB2NCBhZGRyZXNzLlwiICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJpcHY2XCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eKCgoWzAtOUEtRmEtZl17MSw0fTopezd9WzAtOUEtRmEtZl17MSw0fSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Nn06WzAtOUEtRmEtZl17MSw0fSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX06KFswLTlBLUZhLWZdezEsNH06KT9bMC05QS1GYS1mXXsxLDR9KXwoKFswLTlBLUZhLWZdezEsNH06KXs0fTooWzAtOUEtRmEtZl17MSw0fTopezAsMn1bMC05QS1GYS1mXXsxLDR9KXwoKFswLTlBLUZhLWZdezEsNH06KXszfTooWzAtOUEtRmEtZl17MSw0fTopezAsM31bMC05QS1GYS1mXXsxLDR9KXwoKFswLTlBLUZhLWZdezEsNH06KXsyfTooWzAtOUEtRmEtZl17MSw0fTopezAsNH1bMC05QS1GYS1mXXsxLDR9KXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSgoXFxiKCgyNVswLTVdKXwoMVxcZHsyfSl8KDJbMC00XVxcZCl8KFxcZHsxLDJ9KSlcXGIpXFwuKXszfShcXGIoKDI1WzAtNV0pfCgxXFxkezJ9KXwoMlswLTRdXFxkKXwoXFxkezEsMn0pKVxcYikpfCgoWzAtOUEtRmEtZl17MSw0fTopezAsNX06KChcXGIoKDI1WzAtNV0pfCgxXFxkezJ9KXwoMlswLTRdXFxkKXwoXFxkezEsMn0pKVxcYilcXC4pezN9KFxcYigoMjVbMC01XSl8KDFcXGR7Mn0pfCgyWzAtNF1cXGQpfChcXGR7MSwyfSkpXFxiKSl8KDo6KFswLTlBLUZhLWZdezEsNH06KXswLDV9KChcXGIoKDI1WzAtNV0pfCgxXFxkezJ9KXwoMlswLTRdXFxkKXwoXFxkezEsMn0pKVxcYilcXC4pezN9KFxcYigoMjVbMC01XSl8KDFcXGR7Mn0pfCgyWzAtNF1cXGQpfChcXGR7MSwyfSkpXFxiKSl8KFswLTlBLUZhLWZdezEsNH06OihbMC05QS1GYS1mXXsxLDR9Oil7MCw1fVswLTlBLUZhLWZdezEsNH0pfCg6OihbMC05QS1GYS1mXXsxLDR9Oil7MCw2fVswLTlBLUZhLWZdezEsNH0pfCgoWzAtOUEtRmEtZl17MSw0fTopezEsN306KSkkL2kudGVzdCggdmFsdWUgKTtcclxufSwgXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBJUCB2NiBhZGRyZXNzLlwiICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJsZXNzVGhhblwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG4gICAgdmFyIHRhcmdldCA9ICQoIHBhcmFtICk7XHJcblxyXG4gICAgaWYgKCB0aGlzLnNldHRpbmdzLm9uZm9jdXNvdXQgJiYgdGFyZ2V0Lm5vdCggXCIudmFsaWRhdGUtbGVzc1RoYW4tYmx1clwiICkubGVuZ3RoICkge1xyXG4gICAgICAgIHRhcmdldC5hZGRDbGFzcyggXCJ2YWxpZGF0ZS1sZXNzVGhhbi1ibHVyXCIgKS5vbiggXCJibHVyLnZhbGlkYXRlLWxlc3NUaGFuXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAkKCBlbGVtZW50ICkudmFsaWQoKTtcclxuICAgICAgICB9ICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlIDwgdGFyZ2V0LnZhbCgpO1xyXG59LCBcIlBsZWFzZSBlbnRlciBhIGxlc3NlciB2YWx1ZS5cIiApO1xyXG4iLCIkLnZhbGlkYXRvci5hZGRNZXRob2QoIFwibGVzc1RoYW5FcXVhbFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG4gICAgdmFyIHRhcmdldCA9ICQoIHBhcmFtICk7XHJcblxyXG4gICAgaWYgKCB0aGlzLnNldHRpbmdzLm9uZm9jdXNvdXQgJiYgdGFyZ2V0Lm5vdCggXCIudmFsaWRhdGUtbGVzc1RoYW5FcXVhbC1ibHVyXCIgKS5sZW5ndGggKSB7XHJcbiAgICAgICAgdGFyZ2V0LmFkZENsYXNzKCBcInZhbGlkYXRlLWxlc3NUaGFuRXF1YWwtYmx1clwiICkub24oIFwiYmx1ci52YWxpZGF0ZS1sZXNzVGhhbkVxdWFsXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAkKCBlbGVtZW50ICkudmFsaWQoKTtcclxuICAgICAgICB9ICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlIDw9IHRhcmdldC52YWwoKTtcclxufSwgXCJQbGVhc2UgZW50ZXIgYSBsZXNzZXIgdmFsdWUuXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcImxldHRlcnNvbmx5XCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eW2Etel0rJC9pLnRlc3QoIHZhbHVlICk7XHJcbn0sIFwiTGV0dGVycyBvbmx5IHBsZWFzZVwiICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJsZXR0ZXJzd2l0aGJhc2ljcHVuY1wiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXlthLXpcXC0uLCgpJ1wiXFxzXSskL2kudGVzdCggdmFsdWUgKTtcclxufSwgXCJMZXR0ZXJzIG9yIHB1bmN0dWF0aW9uIG9ubHkgcGxlYXNlXCIgKTtcclxuIiwiLy8gTGltaXQgdGhlIG51bWJlciBvZiBmaWxlcyBpbiBhIEZpbGVMaXN0LlxyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwibWF4ZmlsZXNcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuXHRpZiAoIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSApIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0aWYgKCAkKCBlbGVtZW50ICkuYXR0ciggXCJ0eXBlXCIgKSA9PT0gXCJmaWxlXCIgKSB7XHJcblx0XHRpZiAoIGVsZW1lbnQuZmlsZXMgJiYgZWxlbWVudC5maWxlcy5sZW5ndGggPiBwYXJhbSApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn0sICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2Ugc2VsZWN0IG5vIG1vcmUgdGhhbiB7MH0gZmlsZXMuXCIgKSApO1xyXG4iLCIvLyBMaW1pdCB0aGUgc2l6ZSBvZiBlYWNoIGluZGl2aWR1YWwgZmlsZSBpbiBhIEZpbGVMaXN0LlxyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwibWF4c2l6ZVwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cdGlmICggdGhpcy5vcHRpb25hbCggZWxlbWVudCApICkge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpZiAoICQoIGVsZW1lbnQgKS5hdHRyKCBcInR5cGVcIiApID09PSBcImZpbGVcIiApIHtcclxuXHRcdGlmICggZWxlbWVudC5maWxlcyAmJiBlbGVtZW50LmZpbGVzLmxlbmd0aCApIHtcclxuXHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgZWxlbWVudC5maWxlcy5sZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRpZiAoIGVsZW1lbnQuZmlsZXNbIGkgXS5zaXplID4gcGFyYW0gKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufSwgJC52YWxpZGF0b3IuZm9ybWF0KCBcIkZpbGUgc2l6ZSBtdXN0IG5vdCBleGNlZWQgezB9IGJ5dGVzIGVhY2guXCIgKSApO1xyXG4iLCIvLyBMaW1pdCB0aGUgc2l6ZSBvZiBhbGwgZmlsZXMgaW4gYSBGaWxlTGlzdC5cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcIm1heHNpemV0b3RhbFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cdGlmICggdGhpcy5vcHRpb25hbCggZWxlbWVudCApICkge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpZiAoICQoIGVsZW1lbnQgKS5hdHRyKCBcInR5cGVcIiApID09PSBcImZpbGVcIiApIHtcclxuXHRcdGlmICggZWxlbWVudC5maWxlcyAmJiBlbGVtZW50LmZpbGVzLmxlbmd0aCApIHtcclxuXHRcdFx0dmFyIHRvdGFsU2l6ZSA9IDA7XHJcblxyXG5cdFx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmZpbGVzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdHRvdGFsU2l6ZSArPSBlbGVtZW50LmZpbGVzWyBpIF0uc2l6ZTtcclxuXHRcdFx0XHRpZiAoIHRvdGFsU2l6ZSA+IHBhcmFtICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn0sICQudmFsaWRhdG9yLmZvcm1hdCggXCJUb3RhbCBzaXplIG9mIGFsbCBmaWxlcyBtdXN0IG5vdCBleGNlZWQgezB9IGJ5dGVzLlwiICkgKTtcclxuXHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJtb2JpbGVOTFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXigoXFwrfDAwKFxcc3xcXHM/XFwtXFxzPyk/KTMxKFxcc3xcXHM/XFwtXFxzPyk/KFxcKDBcXClbXFwtXFxzXT8pP3wwKTYoKFxcc3xcXHM/XFwtXFxzPyk/WzAtOV0pezh9JC8udGVzdCggdmFsdWUgKTtcclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIG1vYmlsZSBudW1iZXJcIiApO1xyXG4iLCIkLnZhbGlkYXRvci5hZGRNZXRob2QoIFwibW9iaWxlUlVcIiwgZnVuY3Rpb24oIHBob25lX251bWJlciwgZWxlbWVudCApIHtcclxuXHR2YXIgcnVQaG9uZV9udW1iZXIgPSBwaG9uZV9udW1iZXIucmVwbGFjZSggL1xcKHxcXCl8XFxzK3wtL2csIFwiXCIgKTtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IHJ1UGhvbmVfbnVtYmVyLmxlbmd0aCA+IDkgJiYgL14oKFxcKzd8N3w4KSsoWzAtOV0pezEwfSkkLy50ZXN0KCBydVBob25lX251bWJlciApO1xyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgbW9iaWxlIG51bWJlclwiICk7XHJcbiIsIi8qIEZvciBVSyBwaG9uZSBmdW5jdGlvbnMsIGRvIHRoZSBmb2xsb3dpbmcgc2VydmVyIHNpZGUgcHJvY2Vzc2luZzpcclxuICogQ29tcGFyZSBvcmlnaW5hbCBpbnB1dCB3aXRoIHRoaXMgUmVnRXggcGF0dGVybjpcclxuICogXlxcKD8oPzooPzowMFxcKT9bXFxzXFwtXT9cXCg/fFxcKykoNDQpXFwpP1tcXHNcXC1dP1xcKD8oPzowXFwpP1tcXHNcXC1dP1xcKD8pP3wwKShbMS05XVxcZHsxLDR9XFwpP1tcXHNcXGRcXC1dKykkXHJcbiAqIEV4dHJhY3QgJDEgYW5kIHNldCAkcHJlZml4IHRvICcrNDQ8c3BhY2U+JyBpZiAkMSBpcyAnNDQnLCBvdGhlcndpc2Ugc2V0ICRwcmVmaXggdG8gJzAnXHJcbiAqIEV4dHJhY3QgJDIgYW5kIHJlbW92ZSBoeXBoZW5zLCBzcGFjZXMgYW5kIHBhcmVudGhlc2VzLiBQaG9uZSBudW1iZXIgaXMgY29tYmluZWQgJHByZWZpeCBhbmQgJDIuXHJcbiAqIEEgbnVtYmVyIG9mIHZlcnkgZGV0YWlsZWQgR0IgdGVsZXBob25lIG51bWJlciBSZWdFeCBwYXR0ZXJucyBjYW4gYWxzbyBiZSBmb3VuZCBhdDpcclxuICogaHR0cDovL3d3dy5hYS1hc3Rlcmlzay5vcmcudWsvaW5kZXgucGhwL1JlZ3VsYXJfRXhwcmVzc2lvbnNfZm9yX1ZhbGlkYXRpbmdfYW5kX0Zvcm1hdHRpbmdfR0JfVGVsZXBob25lX051bWJlcnNcclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJtb2JpbGVVS1wiLCBmdW5jdGlvbiggcGhvbmVfbnVtYmVyLCBlbGVtZW50ICkge1xyXG5cdHBob25lX251bWJlciA9IHBob25lX251bWJlci5yZXBsYWNlKCAvXFwofFxcKXxcXHMrfC0vZywgXCJcIiApO1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgcGhvbmVfbnVtYmVyLmxlbmd0aCA+IDkgJiZcclxuXHRcdHBob25lX251bWJlci5tYXRjaCggL14oPzooPzooPzowMFxccz98XFwrKTQ0XFxzP3wwKTcoPzpbMTM0NTc4OV1cXGR7Mn18NjI0KVxccz9cXGR7M31cXHM/XFxkezN9KSQvICk7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBtb2JpbGUgbnVtYmVyXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcIm5ldG1hc2tcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXigyNTR8MjUyfDI0OHwyNDB8MjI0fDE5MnwxMjgpXFwuMFxcLjBcXC4wfDI1NVxcLigyNTR8MjUyfDI0OHwyNDB8MjI0fDE5MnwxMjh8MClcXC4wXFwuMHwyNTVcXC4yNTVcXC4oMjU0fDI1MnwyNDh8MjQwfDIyNHwxOTJ8MTI4fDApXFwuMHwyNTVcXC4yNTVcXC4yNTVcXC4oMjU0fDI1MnwyNDh8MjQwfDIyNHwxOTJ8MTI4fDApL2kudGVzdCggdmFsdWUgKTtcclxufSwgXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBuZXRtYXNrLlwiICk7XHJcbiIsIi8qXHJcbiAqIFRoZSBOSUUgKE7Dum1lcm8gZGUgSWRlbnRpZmljYWNpw7NuIGRlIEV4dHJhbmplcm8pIGlzIGEgU3BhbmlzaCB0YXggaWRlbnRpZmljYXRpb24gbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBTcGFuaXNoXHJcbiAqIGF1dGhvcml0aWVzIHRvIGFueSBmb3JlaWduZXIuXHJcbiAqXHJcbiAqIFRoZSBOSUUgaXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBTcGFuaWFyZHMgTsO6bWVybyBkZSBJZGVudGlmaWNhY2nDs24gRmlzY2FsIChOSUYpIHdoaWNoIHNlcnZlcyBhcyBhIGZpc2NhbFxyXG4gKiBpZGVudGlmaWNhdGlvbiBudW1iZXIuIFRoZSBDSUYgbnVtYmVyIChDZXJ0aWZpY2FkbyBkZSBJZGVudGlmaWNhY2nDs24gRmlzY2FsKSBpcyBlcXVpdmFsZW50IHRvIHRoZSBOSUYsIGJ1dCBhcHBsaWVzIHRvXHJcbiAqIGNvbXBhbmllcyByYXRoZXIgdGhhbiBpbmRpdmlkdWFscy4gVGhlIE5JRSBjb25zaXN0cyBvZiBhbiAnWCcgb3IgJ1knIGZvbGxvd2VkIGJ5IDcgb3IgOCBkaWdpdHMgdGhlbiBhbm90aGVyIGxldHRlci5cclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJuaWVFU1wiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5cdGlmICggdGhpcy5vcHRpb25hbCggZWxlbWVudCApICkge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHR2YXIgbmllUmVnRXggPSBuZXcgUmVnRXhwKCAvXltNWFlaXXsxfVswLTldezcsOH1bVFJXQUdNWUZQRFhCTkpaU1FWSExDS0VUXXsxfSQvZ2kgKTtcclxuXHR2YXIgdmFsaWRDaGFycyA9IFwiVFJXQUdNWUZQRFhCTkpaU1FWSExDS0VUXCIsXHJcblx0XHRsZXR0ZXIgPSB2YWx1ZS5zdWJzdHIoIHZhbHVlLmxlbmd0aCAtIDEgKS50b1VwcGVyQ2FzZSgpLFxyXG5cdFx0bnVtYmVyO1xyXG5cclxuXHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcclxuXHJcblx0Ly8gUXVpY2sgZm9ybWF0IHRlc3RcclxuXHRpZiAoIHZhbHVlLmxlbmd0aCA+IDEwIHx8IHZhbHVlLmxlbmd0aCA8IDkgfHwgIW5pZVJlZ0V4LnRlc3QoIHZhbHVlICkgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBYIG1lYW5zIHNhbWUgbnVtYmVyXHJcblx0Ly8gWSBtZWFucyBudW1iZXIgKyAxMDAwMDAwMFxyXG5cdC8vIFogbWVhbnMgbnVtYmVyICsgMjAwMDAwMDBcclxuXHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIC9eW1hdLywgXCIwXCIgKVxyXG5cdFx0LnJlcGxhY2UoIC9eW1ldLywgXCIxXCIgKVxyXG5cdFx0LnJlcGxhY2UoIC9eW1pdLywgXCIyXCIgKTtcclxuXHJcblx0bnVtYmVyID0gdmFsdWUubGVuZ3RoID09PSA5ID8gdmFsdWUuc3Vic3RyKCAwLCA4ICkgOiB2YWx1ZS5zdWJzdHIoIDAsIDkgKTtcclxuXHJcblx0cmV0dXJuIHZhbGlkQ2hhcnMuY2hhckF0KCBwYXJzZUludCggbnVtYmVyLCAxMCApICUgMjMgKSA9PT0gbGV0dGVyO1xyXG5cclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIE5JRSBudW1iZXIuXCIgKTtcclxuIiwiLypcclxuICogVGhlIE7Dum1lcm8gZGUgSWRlbnRpZmljYWNpw7NuIEZpc2NhbCAoIE5JRiApIGlzIHRoZSB3YXkgdGF4IGlkZW50aWZpY2F0aW9uIHVzZWQgaW4gU3BhaW4gZm9yIGluZGl2aWR1YWxzXHJcbiAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwibmlmRVNcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cclxuXHRpZiAoIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSApIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0dmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHQvLyBCYXNpYyBmb3JtYXQgdGVzdFxyXG5cdGlmICggIXZhbHVlLm1hdGNoKCBcIigoXltBLVpdezF9WzAtOV17N31bQS1aMC05XXsxfSR8XltUXXsxfVtBLVowLTldezh9JCl8XlswLTldezh9W0EtWl17MX0kKVwiICkgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBUZXN0IE5JRlxyXG5cdGlmICggL15bMC05XXs4fVtBLVpdezF9JC8udGVzdCggdmFsdWUgKSApIHtcclxuXHRcdHJldHVybiAoIFwiVFJXQUdNWUZQRFhCTkpaU1FWSExDS0VcIi5jaGFyQXQoIHZhbHVlLnN1YnN0cmluZyggOCwgMCApICUgMjMgKSA9PT0gdmFsdWUuY2hhckF0KCA4ICkgKTtcclxuXHR9XHJcblxyXG5cdC8vIFRlc3Qgc3BlY2lhbHMgTklGIChzdGFydHMgd2l0aCBLLCBMIG9yIE0pXHJcblx0aWYgKCAvXltLTE1dezF9Ly50ZXN0KCB2YWx1ZSApICkge1xyXG5cdFx0cmV0dXJuICggdmFsdWVbIDggXSA9PT0gXCJUUldBR01ZRlBEWEJOSlpTUVZITENLRVwiLmNoYXJBdCggdmFsdWUuc3Vic3RyaW5nKCA4LCAxICkgJSAyMyApICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcblxyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgTklGIG51bWJlci5cIiApO1xyXG4iLCIvKlxyXG4gKiBOdW1lciBpZGVudHlmaWthY2ppIHBvZGF0a293ZWogKCBOSVAgKSBpcyB0aGUgd2F5IHRheCBpZGVudGlmaWNhdGlvbiB1c2VkIGluIFBvbGFuZCBmb3IgY29tcGFuaWVzXHJcbiAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwibmlwUExcIiwgZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cclxuXHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIC9bXjAtOV0vZywgXCJcIiApO1xyXG5cclxuXHRpZiAoIHZhbHVlLmxlbmd0aCAhPT0gMTAgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHR2YXIgYXJyU3RlcHMgPSBbIDYsIDUsIDcsIDIsIDMsIDQsIDUsIDYsIDcgXTtcclxuXHR2YXIgaW50U3VtID0gMDtcclxuXHRmb3IgKCB2YXIgaSA9IDA7IGkgPCA5OyBpKysgKSB7XHJcblx0XHRpbnRTdW0gKz0gYXJyU3RlcHNbIGkgXSAqIHZhbHVlWyBpIF07XHJcblx0fVxyXG5cdHZhciBpbnQyID0gaW50U3VtICUgMTE7XHJcblx0dmFyIGludENvbnRyb2xOciA9ICggaW50MiA9PT0gMTAgKSA/IDAgOiBpbnQyO1xyXG5cclxuXHRyZXR1cm4gKCBpbnRDb250cm9sTnIgPT09IHBhcnNlSW50KCB2YWx1ZVsgOSBdLCAxMCApICk7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBOSVAgbnVtYmVyLlwiICk7XHJcbiIsIi8qKlxyXG4gKiBDcmVhdGVkIGZvciBwcm9qZWN0IGpxdWVyeS12YWxpZGF0aW9uLlxyXG4gKiBARGVzY3JpcHRpb24gQnJhemlsbGlhbiBQSVMgb3IgTklTIG51bWJlciAoTsO6bWVybyBkZSBJZGVudGlmaWNhw6fDo28gU29jaWFsIFBpcyBvdSBQYXNlcCkgaXMgdGhlIGVxdWl2YWxlbnQgb2YgYVxyXG4gKiBCcmF6aWxpYW4gdGF4IHJlZ2lzdHJhdGlvbiBudW1iZXIgTklTIG9mIFBJUyBudW1iZXJzIGhhdmUgMTEgZGlnaXRzIGluIHRvdGFsOiAxMCBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgY2hlY2sgbnVtYmVyc1xyXG4gKiB0aGF0IGFyZSBiZWluZyB1c2VkIGZvciB2YWxpZGF0aW9uLlxyXG4gKiBAY29weXJpZ2h0IChjKSAyMS8wOC8yMDE4IDEzOjE0LCBDbGVpdG9uIGRhIFNpbHZhIE1lbmRvbsOnYVxyXG4gKiBAYXV0aG9yIENsZWl0b24gZGEgU2lsdmEgTWVuZG9uw6dhIDxjbGVpdG9uLm1lbmRvbmNhQGdtYWlsLmNvbT5cclxuICogQGxpbmsgaHR0cDovL2dpdGxhYi5jb20vY3NtZW5kb25jYSBHaXRsYWIgb2YgQ2xlaXRvbiBkYSBTaWx2YSBNZW5kb27Dp2FcclxuICogQGxpbmsgaHR0cDovL2dpdGh1Yi5jb20vY3NtZW5kb25jYSBHaXRodWIgb2YgQ2xlaXRvbiBkYSBTaWx2YSBNZW5kb27Dp2FcclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJuaXNCUlwiLCBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0dmFyIG51bWJlcjtcclxuXHR2YXIgY247XHJcblx0dmFyIHN1bSA9IDA7XHJcblx0dmFyIGR2O1xyXG5cdHZhciBjb3VudDtcclxuXHR2YXIgbXVsdGlwbGllcjtcclxuXHJcblx0Ly8gUmVtb3Zpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGZyb20gdmFsdWVcclxuXHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIC8oW34hQCMkJV4mKigpXys9YHt9XFxbXFxdXFwtfFxcXFw6Oyc8PiwuXFwvPyBdKSsvZywgXCJcIiApO1xyXG5cclxuXHQvLyBDaGVja2luZyB2YWx1ZSB0byBoYXZlIDExIGRpZ2l0cyBvbmx5XHJcblx0aWYgKCB2YWx1ZS5sZW5ndGggIT09IDExICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly9HZXQgY2hlY2sgbnVtYmVyIG9mIHZhbHVlXHJcblx0Y24gPSBwYXJzZUludCggdmFsdWUuc3Vic3RyaW5nKCAxMCwgMTEgKSwgMTAgKTtcclxuXHJcblx0Ly9HZXQgbnVtYmVyIHdpdGggMTAgZGlnaXRzIG9mIHRoZSB2YWx1ZVxyXG5cdG51bWJlciA9IHBhcnNlSW50KCB2YWx1ZS5zdWJzdHJpbmcoIDAsIDEwICksIDEwICk7XHJcblxyXG5cdGZvciAoIGNvdW50ID0gMjsgY291bnQgPCAxMjsgY291bnQrKyApIHtcclxuXHRcdG11bHRpcGxpZXIgPSBjb3VudDtcclxuXHRcdGlmICggY291bnQgPT09IDEwICkge1xyXG5cdFx0XHRtdWx0aXBsaWVyID0gMjtcclxuXHRcdH1cclxuXHRcdGlmICggY291bnQgPT09IDExICkge1xyXG5cdFx0XHRtdWx0aXBsaWVyID0gMztcclxuXHRcdH1cclxuXHRcdHN1bSArPSAoICggbnVtYmVyICUgMTAgKSAqIG11bHRpcGxpZXIgKTtcclxuXHRcdG51bWJlciA9IHBhcnNlSW50KCBudW1iZXIgLyAxMCwgMTAgKTtcclxuXHR9XHJcblx0ZHYgPSAoIHN1bSAlIDExICk7XHJcblxyXG5cdGlmICggZHYgPiAxICkge1xyXG5cdFx0ZHYgPSAoIDExIC0gZHYgKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0ZHYgPSAwO1xyXG5cdH1cclxuXHJcblx0aWYgKCBjbiA9PT0gZHYgKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIE5JUy9QSVMgbnVtYmVyXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcIm5vdEVxdWFsVG9cIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8ICEkLnZhbGlkYXRvci5tZXRob2RzLmVxdWFsVG8uY2FsbCggdGhpcywgdmFsdWUsIGVsZW1lbnQsIHBhcmFtICk7XHJcbn0sIFwiUGxlYXNlIGVudGVyIGEgZGlmZmVyZW50IHZhbHVlLCB2YWx1ZXMgbXVzdCBub3QgYmUgdGhlIHNhbWUuXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcIm5vd2hpdGVzcGFjZVwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXlxcUyskL2kudGVzdCggdmFsdWUgKTtcclxufSwgXCJObyB3aGl0ZSBzcGFjZSBwbGVhc2VcIiApO1xyXG4iLCIvKipcclxuKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmllbGQgdmFsdWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gZm9ybWF0IFJlZ0V4cFxyXG4qXHJcbiogQGV4YW1wbGUgJC52YWxpZGF0b3IubWV0aG9kcy5wYXR0ZXJuKFwiQVIxMDA0XCIsZWxlbWVudCwvXkFSXFxkezR9JC8pXHJcbiogQHJlc3VsdCB0cnVlXHJcbipcclxuKiBAZXhhbXBsZSAkLnZhbGlkYXRvci5tZXRob2RzLnBhdHRlcm4oXCJCUjEwMDRcIixlbGVtZW50LC9eQVJcXGR7NH0kLylcclxuKiBAcmVzdWx0IGZhbHNlXHJcbipcclxuKiBAbmFtZSAkLnZhbGlkYXRvci5tZXRob2RzLnBhdHRlcm5cclxuKiBAdHlwZSBCb29sZWFuXHJcbiogQGNhdCBQbHVnaW5zL1ZhbGlkYXRlL01ldGhvZHNcclxuKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInBhdHRlcm5cIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBwYXJhbSApIHtcclxuXHRpZiAoIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSApIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHRpZiAoIHR5cGVvZiBwYXJhbSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdHBhcmFtID0gbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBwYXJhbSArIFwiKSRcIiApO1xyXG5cdH1cclxuXHRyZXR1cm4gcGFyYW0udGVzdCggdmFsdWUgKTtcclxufSwgXCJJbnZhbGlkIGZvcm1hdC5cIiApO1xyXG4iLCIvKipcclxuICogRHV0Y2ggcGhvbmUgbnVtYmVycyBoYXZlIDEwIGRpZ2l0cyAob3IgMTEgYW5kIHN0YXJ0IHdpdGggKzMxKS5cclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJwaG9uZU5MXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eKChcXCt8MDAoXFxzfFxccz9cXC1cXHM/KT8pMzEoXFxzfFxccz9cXC1cXHM/KT8oXFwoMFxcKVtcXC1cXHNdPyk/fDApWzEtOV0oKFxcc3xcXHM/XFwtXFxzPyk/WzAtOV0pezh9JC8udGVzdCggdmFsdWUgKTtcclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIHBob25lIG51bWJlci5cIiApO1xyXG4iLCIvKipcclxuICogUG9saXNoIHRlbGVwaG9uZSBudW1iZXJzIGhhdmUgOSBkaWdpdHMuXHJcbiAqXHJcbiAqIE1vYmlsZSBwaG9uZSBudW1iZXJzIHN0YXJ0cyB3aXRoIGZvbGxvd2luZyBkaWdpdHM6XHJcbiAqIDQ1LCA1MCwgNTEsIDUzLCA1NywgNjAsIDY2LCA2OSwgNzIsIDczLCA3OCwgNzksIDg4LlxyXG4gKlxyXG4gKiBGaXhlZC1saW5lIG51bWJlcnMgc3RhcnRzIHdpdGggYXJlYSBjb2RlczpcclxuICogMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDIyLCAyMywgMjQsIDI1LCAyOSwgMzIsIDMzLFxyXG4gKiAzNCwgNDEsIDQyLCA0MywgNDQsIDQ2LCA0OCwgNTIsIDU0LCA1NSwgNTYsIDU4LCA1OSwgNjEsXHJcbiAqIDYyLCA2MywgNjUsIDY3LCA2OCwgNzEsIDc0LCA3NSwgNzYsIDc3LCA4MSwgODIsIDgzLCA4NCxcclxuICogODUsIDg2LCA4NywgODksIDkxLCA5NCwgOTUuXHJcbiAqXHJcbiAqIE1pbmlzdHJ5IG9mIE5hdGlvbmFsIERlZmVuY2UgbnVtYmVycyBhbmQgVm9JUCBudW1iZXJzIHN0YXJ0cyB3aXRoIDI2IGFuZCAzOS5cclxuICpcclxuICogRXhjbHVkZXMgaW50ZWxsaWdlbnQgbmV0d29ya3MgKHByZW1pdW0gcmF0ZSwgc2hhcmVkIGNvc3QsIGZyZWUgcGhvbmUgbnVtYmVycykuXHJcbiAqXHJcbiAqIFBvbGFuZCBOYXRpb25hbCBOdW1iZXJpbmcgUGxhbiBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMEE4L2VuXHJcbiAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwicGhvbmVQTFwiLCBmdW5jdGlvbiggcGhvbmVfbnVtYmVyLCBlbGVtZW50ICkge1xyXG5cdHBob25lX251bWJlciA9IHBob25lX251bWJlci5yZXBsYWNlKCAvXFxzKy9nLCBcIlwiICk7XHJcblx0dmFyIHJlZ2V4cCA9IC9eKD86KD86KD86XFwrfDAwKT80OCl8KD86XFwoXFwrPzQ4XFwpKSk/KD86MVsyLThdfDJbMi02OV18M1syLTQ5XXw0WzEtNjhdfDVbMC05XXw2WzAtMzUtOV18WzctOF1bMS05XXw5WzE0NV0pXFxkezd9JC87XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCByZWdleHAudGVzdCggcGhvbmVfbnVtYmVyICk7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBwaG9uZSBudW1iZXJcIiApO1xyXG4iLCIvKiBGb3IgVUsgcGhvbmUgZnVuY3Rpb25zLCBkbyB0aGUgZm9sbG93aW5nIHNlcnZlciBzaWRlIHByb2Nlc3Npbmc6XHJcbiAqIENvbXBhcmUgb3JpZ2luYWwgaW5wdXQgd2l0aCB0aGlzIFJlZ0V4IHBhdHRlcm46XHJcbiAqIF5cXCg/KD86KD86MDBcXCk/W1xcc1xcLV0/XFwoP3xcXCspKDQ0KVxcKT9bXFxzXFwtXT9cXCg/KD86MFxcKT9bXFxzXFwtXT9cXCg/KT98MCkoWzEtOV1cXGR7MSw0fVxcKT9bXFxzXFxkXFwtXSspJFxyXG4gKiBFeHRyYWN0ICQxIGFuZCBzZXQgJHByZWZpeCB0byAnKzQ0PHNwYWNlPicgaWYgJDEgaXMgJzQ0Jywgb3RoZXJ3aXNlIHNldCAkcHJlZml4IHRvICcwJ1xyXG4gKiBFeHRyYWN0ICQyIGFuZCByZW1vdmUgaHlwaGVucywgc3BhY2VzIGFuZCBwYXJlbnRoZXNlcy4gUGhvbmUgbnVtYmVyIGlzIGNvbWJpbmVkICRwcmVmaXggYW5kICQyLlxyXG4gKiBBIG51bWJlciBvZiB2ZXJ5IGRldGFpbGVkIEdCIHRlbGVwaG9uZSBudW1iZXIgUmVnRXggcGF0dGVybnMgY2FuIGFsc28gYmUgZm91bmQgYXQ6XHJcbiAqIGh0dHA6Ly93d3cuYWEtYXN0ZXJpc2sub3JnLnVrL2luZGV4LnBocC9SZWd1bGFyX0V4cHJlc3Npb25zX2Zvcl9WYWxpZGF0aW5nX2FuZF9Gb3JtYXR0aW5nX0dCX1RlbGVwaG9uZV9OdW1iZXJzXHJcbiAqL1xyXG5cclxuLy8gTWF0Y2hlcyBVSyBsYW5kbGluZSArIG1vYmlsZSwgYWNjZXB0aW5nIG9ubHkgMDEtMyBmb3IgbGFuZGxpbmUgb3IgMDcgZm9yIG1vYmlsZSB0byBleGNsdWRlIG1hbnkgcHJlbWl1bSBudW1iZXJzXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJwaG9uZXNVS1wiLCBmdW5jdGlvbiggcGhvbmVfbnVtYmVyLCBlbGVtZW50ICkge1xyXG5cdHBob25lX251bWJlciA9IHBob25lX251bWJlci5yZXBsYWNlKCAvXFwofFxcKXxcXHMrfC0vZywgXCJcIiApO1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgcGhvbmVfbnVtYmVyLmxlbmd0aCA+IDkgJiZcclxuXHRcdHBob25lX251bWJlci5tYXRjaCggL14oPzooPzooPzowMFxccz98XFwrKTQ0XFxzP3wwKSg/OjFcXGR7OCw5fXxbMjNdXFxkezl9fDcoPzpbMTM0NTc4OV1cXGR7OH18NjI0XFxkezZ9KSkpJC8gKTtcclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIHVrIHBob25lIG51bWJlclwiICk7XHJcbiIsIi8qIEZvciBVSyBwaG9uZSBmdW5jdGlvbnMsIGRvIHRoZSBmb2xsb3dpbmcgc2VydmVyIHNpZGUgcHJvY2Vzc2luZzpcclxuICogQ29tcGFyZSBvcmlnaW5hbCBpbnB1dCB3aXRoIHRoaXMgUmVnRXggcGF0dGVybjpcclxuICogXlxcKD8oPzooPzowMFxcKT9bXFxzXFwtXT9cXCg/fFxcKykoNDQpXFwpP1tcXHNcXC1dP1xcKD8oPzowXFwpP1tcXHNcXC1dP1xcKD8pP3wwKShbMS05XVxcZHsxLDR9XFwpP1tcXHNcXGRcXC1dKykkXHJcbiAqIEV4dHJhY3QgJDEgYW5kIHNldCAkcHJlZml4IHRvICcrNDQ8c3BhY2U+JyBpZiAkMSBpcyAnNDQnLCBvdGhlcndpc2Ugc2V0ICRwcmVmaXggdG8gJzAnXHJcbiAqIEV4dHJhY3QgJDIgYW5kIHJlbW92ZSBoeXBoZW5zLCBzcGFjZXMgYW5kIHBhcmVudGhlc2VzLiBQaG9uZSBudW1iZXIgaXMgY29tYmluZWQgJHByZWZpeCBhbmQgJDIuXHJcbiAqIEEgbnVtYmVyIG9mIHZlcnkgZGV0YWlsZWQgR0IgdGVsZXBob25lIG51bWJlciBSZWdFeCBwYXR0ZXJucyBjYW4gYWxzbyBiZSBmb3VuZCBhdDpcclxuICogaHR0cDovL3d3dy5hYS1hc3Rlcmlzay5vcmcudWsvaW5kZXgucGhwL1JlZ3VsYXJfRXhwcmVzc2lvbnNfZm9yX1ZhbGlkYXRpbmdfYW5kX0Zvcm1hdHRpbmdfR0JfVGVsZXBob25lX051bWJlcnNcclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJwaG9uZVVLXCIsIGZ1bmN0aW9uKCBwaG9uZV9udW1iZXIsIGVsZW1lbnQgKSB7XHJcblx0cGhvbmVfbnVtYmVyID0gcGhvbmVfbnVtYmVyLnJlcGxhY2UoIC9cXCh8XFwpfFxccyt8LS9nLCBcIlwiICk7XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCBwaG9uZV9udW1iZXIubGVuZ3RoID4gOSAmJlxyXG5cdFx0cGhvbmVfbnVtYmVyLm1hdGNoKCAvXig/Oig/Oig/OjAwXFxzP3xcXCspNDRcXHM/KXwoPzpcXCg/MCkpKD86XFxkezJ9XFwpP1xccz9cXGR7NH1cXHM/XFxkezR9fFxcZHszfVxcKT9cXHM/XFxkezN9XFxzP1xcZHszLDR9fFxcZHs0fVxcKT9cXHM/KD86XFxkezV9fFxcZHszfVxccz9cXGR7M30pfFxcZHs1fVxcKT9cXHM/XFxkezQsNX0pJC8gKTtcclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIHBob25lIG51bWJlclwiICk7XHJcbiIsIi8qKlxyXG4gKiBNYXRjaGVzIFVTIHBob25lIG51bWJlciBmb3JtYXRcclxuICpcclxuICogd2hlcmUgdGhlIGFyZWEgY29kZSBtYXkgbm90IHN0YXJ0IHdpdGggMSBhbmQgdGhlIHByZWZpeCBtYXkgbm90IHN0YXJ0IHdpdGggMVxyXG4gKiBhbGxvd3MgJy0nIG9yICcgJyBhcyBhIHNlcGFyYXRvciBhbmQgYWxsb3dzIHBhcmVucyBhcm91bmQgYXJlYSBjb2RlXHJcbiAqIHNvbWUgcGVvcGxlIG1heSB3YW50IHRvIHB1dCBhICcxJyBpbiBmcm9udCBvZiB0aGVpciBudW1iZXJcclxuICpcclxuICogMSgyMTIpLTk5OS0yMzQ1IG9yXHJcbiAqIDIxMiA5OTkgMjM0NCBvclxyXG4gKiAyMTItOTk5LTA5ODNcclxuICpcclxuICogYnV0IG5vdFxyXG4gKiAxMTEtMTIzLTU0MzRcclxuICogYW5kIG5vdFxyXG4gKiAyMTIgMTIzIDQ1NjdcclxuICovXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJwaG9uZVVTXCIsIGZ1bmN0aW9uKCBwaG9uZV9udW1iZXIsIGVsZW1lbnQgKSB7XHJcblx0cGhvbmVfbnVtYmVyID0gcGhvbmVfbnVtYmVyLnJlcGxhY2UoIC9cXHMrL2csIFwiXCIgKTtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IHBob25lX251bWJlci5sZW5ndGggPiA5ICYmXHJcblx0XHRwaG9uZV9udW1iZXIubWF0Y2goIC9eKFxcKz8xLT8pPyhcXChbMi05XShbMDItOV1cXGR8MVswMi05XSlcXCl8WzItOV0oWzAyLTldXFxkfDFbMDItOV0pKS0/WzItOV1cXGR7Mn0tP1xcZHs0fSQvICk7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBwaG9uZSBudW1iZXJcIiApO1xyXG4iLCIvKlxyXG4qIFZhbGlkYSBDRVBzIGRvIGJyYXNpbGVpcm9zOlxyXG4qXHJcbiogRm9ybWF0b3MgYWNlaXRvczpcclxuKiA5OTk5OS05OTlcclxuKiA5OS45OTktOTk5XHJcbiogOTk5OTk5OTlcclxuKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInBvc3RhbGNvZGVCUlwiLCBmdW5jdGlvbiggY2VwX3ZhbHVlLCBlbGVtZW50ICkge1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL15cXGR7Mn0uXFxkezN9LVxcZHszfT8kfF5cXGR7NX0tP1xcZHszfT8kLy50ZXN0KCBjZXBfdmFsdWUgKTtcclxufSwgXCJJbmZvcm1lIHVtIENFUCB2w6FsaWRvLlwiICk7XHJcbiIsIi8qKlxyXG4gKiBNYXRjaGVzIGEgdmFsaWQgQ2FuYWRpYW4gUG9zdGFsIENvZGVcclxuICpcclxuICogQGV4YW1wbGUgalF1ZXJ5LnZhbGlkYXRvci5tZXRob2RzLnBvc3RhbENvZGVDQSggXCJIMEggMEgwXCIsIGVsZW1lbnQgKVxyXG4gKiBAcmVzdWx0IHRydWVcclxuICpcclxuICogQGV4YW1wbGUgalF1ZXJ5LnZhbGlkYXRvci5tZXRob2RzLnBvc3RhbENvZGVDQSggXCJIMEgwSDBcIiwgZWxlbWVudCApXHJcbiAqIEByZXN1bHQgZmFsc2VcclxuICpcclxuICogQG5hbWUgalF1ZXJ5LnZhbGlkYXRvci5tZXRob2RzLnBvc3RhbENvZGVDQVxyXG4gKiBAdHlwZSBCb29sZWFuXHJcbiAqIEBjYXQgUGx1Z2lucy9WYWxpZGF0ZS9NZXRob2RzXHJcbiAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwicG9zdGFsQ29kZUNBXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eW0FCQ0VHSEpLTE1OUFJTVFZYWV1cXGRbQUJDRUdISktMTU5QUlNUVldYWVpdICpcXGRbQUJDRUdISktMTU5QUlNUVldYWVpdXFxkJC9pLnRlc3QoIHZhbHVlICk7XHJcbn0sIFwiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBwb3N0YWwgY29kZVwiICk7XHJcbiIsIi8qIE1hdGNoZXMgSXRhbGlhbiBwb3N0Y29kZSAoQ0FQKSAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwicG9zdGFsY29kZUlUXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eXFxkezV9JC8udGVzdCggdmFsdWUgKTtcclxufSwgXCJQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIHBvc3RhbCBjb2RlXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInBvc3RhbGNvZGVOTFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXlsxLTldWzAtOV17M31cXHM/W2EtekEtWl17Mn0kLy50ZXN0KCB2YWx1ZSApO1xyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgcG9zdGFsIGNvZGVcIiApO1xyXG4iLCIvLyBNYXRjaGVzIFVLIHBvc3Rjb2RlLiBEb2VzIG5vdCBtYXRjaCB0byBVSyBDaGFubmVsIElzbGFuZHMgdGhhdCBoYXZlIHRoZWlyIG93biBwb3N0Y29kZXMgKG5vbiBzdGFuZGFyZCBVSylcclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInBvc3Rjb2RlVUtcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14oKChbQS1QUi1VV1laXVswLTldKXwoW0EtUFItVVdZWl1bMC05XVswLTldKXwoW0EtUFItVVdZWl1bQS1ISy1ZXVswLTldKXwoW0EtUFItVVdZWl1bQS1ISy1ZXVswLTldWzAtOV0pfChbQS1QUi1VV1laXVswLTldW0EtSEpLU1RVV10pfChbQS1QUi1VV1laXVtBLUhLLVldWzAtOV1bQUJFSE1OUFJWV1hZXSkpXFxzPyhbMC05XVtBQkQtSEpMTlAtVVctWl17Mn0pfChHSVIpXFxzPygwQUEpKSQvaS50ZXN0KCB2YWx1ZSApO1xyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgVUsgcG9zdGNvZGVcIiApO1xyXG4iLCIvKlxyXG4gKiBMZXRzIHlvdSBzYXkgXCJhdCBsZWFzdCBYIGlucHV0cyB0aGF0IG1hdGNoIHNlbGVjdG9yIFkgbXVzdCBiZSBmaWxsZWQuXCJcclxuICpcclxuICogVGhlIGVuZCByZXN1bHQgaXMgdGhhdCBuZWl0aGVyIG9mIHRoZXNlIGlucHV0czpcclxuICpcclxuICpcdDxpbnB1dCBjbGFzcz1cInByb2R1Y3RpbmZvXCIgbmFtZT1cInBhcnRudW1iZXJcIj5cclxuICpcdDxpbnB1dCBjbGFzcz1cInByb2R1Y3RpbmZvXCIgbmFtZT1cImRlc2NyaXB0aW9uXCI+XHJcbiAqXHJcbiAqXHQuLi53aWxsIHZhbGlkYXRlIHVubGVzcyBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBmaWxsZWQuXHJcbiAqXHJcbiAqIHBhcnRudW1iZXI6XHR7cmVxdWlyZV9mcm9tX2dyb3VwOiBbMSxcIi5wcm9kdWN0aW5mb1wiXX0sXHJcbiAqIGRlc2NyaXB0aW9uOiB7cmVxdWlyZV9mcm9tX2dyb3VwOiBbMSxcIi5wcm9kdWN0aW5mb1wiXX1cclxuICpcclxuICogb3B0aW9uc1swXTogbnVtYmVyIG9mIGZpZWxkcyB0aGF0IG11c3QgYmUgZmlsbGVkIGluIHRoZSBncm91cFxyXG4gKiBvcHRpb25zWzFdOiBDU1Mgc2VsZWN0b3IgdGhhdCBkZWZpbmVzIHRoZSBncm91cCBvZiBjb25kaXRpb25hbGx5IHJlcXVpcmVkIGZpZWxkc1xyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInJlcXVpcmVfZnJvbV9ncm91cFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIG9wdGlvbnMgKSB7XHJcblx0dmFyICRmaWVsZHMgPSAkKCBvcHRpb25zWyAxIF0sIGVsZW1lbnQuZm9ybSApLFxyXG5cdFx0JGZpZWxkc0ZpcnN0ID0gJGZpZWxkcy5lcSggMCApLFxyXG5cdFx0dmFsaWRhdG9yID0gJGZpZWxkc0ZpcnN0LmRhdGEoIFwidmFsaWRfcmVxX2dycFwiICkgPyAkZmllbGRzRmlyc3QuZGF0YSggXCJ2YWxpZF9yZXFfZ3JwXCIgKSA6ICQuZXh0ZW5kKCB7fSwgdGhpcyApLFxyXG5cdFx0aXNWYWxpZCA9ICRmaWVsZHMuZmlsdGVyKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHZhbGlkYXRvci5lbGVtZW50VmFsdWUoIHRoaXMgKTtcclxuXHRcdH0gKS5sZW5ndGggPj0gb3B0aW9uc1sgMCBdO1xyXG5cclxuXHQvLyBTdG9yZSB0aGUgY2xvbmVkIHZhbGlkYXRvciBmb3IgZnV0dXJlIHZhbGlkYXRpb25cclxuXHQkZmllbGRzRmlyc3QuZGF0YSggXCJ2YWxpZF9yZXFfZ3JwXCIsIHZhbGlkYXRvciApO1xyXG5cclxuXHQvLyBJZiBlbGVtZW50IGlzbid0IGJlaW5nIHZhbGlkYXRlZCwgcnVuIGVhY2ggcmVxdWlyZV9mcm9tX2dyb3VwIGZpZWxkJ3MgdmFsaWRhdGlvbiBydWxlc1xyXG5cdGlmICggISQoIGVsZW1lbnQgKS5kYXRhKCBcImJlaW5nX3ZhbGlkYXRlZFwiICkgKSB7XHJcblx0XHQkZmllbGRzLmRhdGEoIFwiYmVpbmdfdmFsaWRhdGVkXCIsIHRydWUgKTtcclxuXHRcdCRmaWVsZHMuZWFjaCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhbGlkYXRvci5lbGVtZW50KCB0aGlzICk7XHJcblx0XHR9ICk7XHJcblx0XHQkZmllbGRzLmRhdGEoIFwiYmVpbmdfdmFsaWRhdGVkXCIsIGZhbHNlICk7XHJcblx0fVxyXG5cdHJldHVybiBpc1ZhbGlkO1xyXG59LCAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGxlYXNlIGZpbGwgYXQgbGVhc3QgezB9IG9mIHRoZXNlIGZpZWxkcy5cIiApICk7XHJcbiIsIi8qXHJcbiAqIExldHMgeW91IHNheSBcImVpdGhlciBhdCBsZWFzdCBYIGlucHV0cyB0aGF0IG1hdGNoIHNlbGVjdG9yIFkgbXVzdCBiZSBmaWxsZWQsXHJcbiAqIE9SIHRoZXkgbXVzdCBhbGwgYmUgc2tpcHBlZCAobGVmdCBibGFuaykuXCJcclxuICpcclxuICogVGhlIGVuZCByZXN1bHQsIGlzIHRoYXQgbm9uZSBvZiB0aGVzZSBpbnB1dHM6XHJcbiAqXHJcbiAqXHQ8aW5wdXQgY2xhc3M9XCJwcm9kdWN0aW5mb1wiIG5hbWU9XCJwYXJ0bnVtYmVyXCI+XHJcbiAqXHQ8aW5wdXQgY2xhc3M9XCJwcm9kdWN0aW5mb1wiIG5hbWU9XCJkZXNjcmlwdGlvblwiPlxyXG4gKlx0PGlucHV0IGNsYXNzPVwicHJvZHVjdGluZm9cIiBuYW1lPVwiY29sb3JcIj5cclxuICpcclxuICpcdC4uLndpbGwgdmFsaWRhdGUgdW5sZXNzIGVpdGhlciBhdCBsZWFzdCB0d28gb2YgdGhlbSBhcmUgZmlsbGVkLFxyXG4gKlx0T1Igbm9uZSBvZiB0aGVtIGFyZS5cclxuICpcclxuICogcGFydG51bWJlcjpcdHtza2lwX29yX2ZpbGxfbWluaW11bTogWzIsXCIucHJvZHVjdGluZm9cIl19LFxyXG4gKiBkZXNjcmlwdGlvbjoge3NraXBfb3JfZmlsbF9taW5pbXVtOiBbMixcIi5wcm9kdWN0aW5mb1wiXX0sXHJcbiAqIGNvbG9yOlx0XHR7c2tpcF9vcl9maWxsX21pbmltdW06IFsyLFwiLnByb2R1Y3RpbmZvXCJdfVxyXG4gKlxyXG4gKiBvcHRpb25zWzBdOiBudW1iZXIgb2YgZmllbGRzIHRoYXQgbXVzdCBiZSBmaWxsZWQgaW4gdGhlIGdyb3VwXHJcbiAqIG9wdGlvbnNbMV06IENTUyBzZWxlY3RvciB0aGF0IGRlZmluZXMgdGhlIGdyb3VwIG9mIGNvbmRpdGlvbmFsbHkgcmVxdWlyZWQgZmllbGRzXHJcbiAqXHJcbiAqL1xyXG4kLnZhbGlkYXRvci5hZGRNZXRob2QoIFwic2tpcF9vcl9maWxsX21pbmltdW1cIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBvcHRpb25zICkge1xyXG5cdHZhciAkZmllbGRzID0gJCggb3B0aW9uc1sgMSBdLCBlbGVtZW50LmZvcm0gKSxcclxuXHRcdCRmaWVsZHNGaXJzdCA9ICRmaWVsZHMuZXEoIDAgKSxcclxuXHRcdHZhbGlkYXRvciA9ICRmaWVsZHNGaXJzdC5kYXRhKCBcInZhbGlkX3NraXBcIiApID8gJGZpZWxkc0ZpcnN0LmRhdGEoIFwidmFsaWRfc2tpcFwiICkgOiAkLmV4dGVuZCgge30sIHRoaXMgKSxcclxuXHRcdG51bWJlckZpbGxlZCA9ICRmaWVsZHMuZmlsdGVyKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHZhbGlkYXRvci5lbGVtZW50VmFsdWUoIHRoaXMgKTtcclxuXHRcdH0gKS5sZW5ndGgsXHJcblx0XHRpc1ZhbGlkID0gbnVtYmVyRmlsbGVkID09PSAwIHx8IG51bWJlckZpbGxlZCA+PSBvcHRpb25zWyAwIF07XHJcblxyXG5cdC8vIFN0b3JlIHRoZSBjbG9uZWQgdmFsaWRhdG9yIGZvciBmdXR1cmUgdmFsaWRhdGlvblxyXG5cdCRmaWVsZHNGaXJzdC5kYXRhKCBcInZhbGlkX3NraXBcIiwgdmFsaWRhdG9yICk7XHJcblxyXG5cdC8vIElmIGVsZW1lbnQgaXNuJ3QgYmVpbmcgdmFsaWRhdGVkLCBydW4gZWFjaCBza2lwX29yX2ZpbGxfbWluaW11bSBmaWVsZCdzIHZhbGlkYXRpb24gcnVsZXNcclxuXHRpZiAoICEkKCBlbGVtZW50ICkuZGF0YSggXCJiZWluZ192YWxpZGF0ZWRcIiApICkge1xyXG5cdFx0JGZpZWxkcy5kYXRhKCBcImJlaW5nX3ZhbGlkYXRlZFwiLCB0cnVlICk7XHJcblx0XHQkZmllbGRzLmVhY2goIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YWxpZGF0b3IuZWxlbWVudCggdGhpcyApO1xyXG5cdFx0fSApO1xyXG5cdFx0JGZpZWxkcy5kYXRhKCBcImJlaW5nX3ZhbGlkYXRlZFwiLCBmYWxzZSApO1xyXG5cdH1cclxuXHRyZXR1cm4gaXNWYWxpZDtcclxufSwgJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBsZWFzZSBlaXRoZXIgc2tpcCB0aGVzZSBmaWVsZHMgb3IgZmlsbCBhdCBsZWFzdCB7MH0gb2YgdGhlbS5cIiApICk7XHJcbiIsIi8qIFZhbGlkYXRlcyBVUyBTdGF0ZXMgYW5kL29yIFRlcnJpdG9yaWVzIGJ5IEBqZGZvcnN5dGhlXHJcbiAqIENhbiBiZSBjYXNlIGluc2Vuc2l0aXZlIG9yIHJlcXVpcmUgY2FwaXRhbGl6YXRpb24gLSBkZWZhdWx0IGlzIGNhc2UgaW5zZW5zaXRpdmVcclxuICogQ2FuIGluY2x1ZGUgVVMgVGVycml0b3JpZXMgb3Igbm90IC0gZGVmYXVsdCBkb2VzIG5vdFxyXG4gKiBDYW4gaW5jbHVkZSBVUyBNaWxpdGFyeSBwb3N0YWwgYWJicmV2aWF0aW9ucyAoQUEsIEFFLCBBUCkgLSBkZWZhdWx0IGRvZXMgbm90XHJcbiAqXHJcbiAqIE5vdGU6IFwiU3RhdGVzXCIgYWx3YXlzIGluY2x1ZGVzIERDIChEaXN0cmljdCBvZiBDb2xvbWJpYSlcclxuICpcclxuICogVXNhZ2UgZXhhbXBsZXM6XHJcbiAqXHJcbiAqICBUaGlzIGlzIHRoZSBkZWZhdWx0IC0gY2FzZSBpbnNlbnNpdGl2ZSwgbm8gdGVycml0b3JpZXMsIG5vIG1pbGl0YXJ5IHpvbmVzXHJcbiAqICBzdGF0ZUlucHV0OiB7XHJcbiAqICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcclxuICogICAgIGluY2x1ZGVUZXJyaXRvcmllczogZmFsc2UsXHJcbiAqICAgICBpbmNsdWRlTWlsaXRhcnk6IGZhbHNlXHJcbiAqICB9XHJcbiAqXHJcbiAqICBPbmx5IGFsbG93IGNhcGl0YWwgbGV0dGVycywgbm8gdGVycml0b3JpZXMsIG5vIG1pbGl0YXJ5IHpvbmVzXHJcbiAqICBzdGF0ZUlucHV0OiB7XHJcbiAqICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZVxyXG4gKiAgfVxyXG4gKlxyXG4gKiAgQ2FzZSBpbnNlbnNpdGl2ZSwgaW5jbHVkZSB0ZXJyaXRvcmllcyBidXQgbm90IG1pbGl0YXJ5IHpvbmVzXHJcbiAqICBzdGF0ZUlucHV0OiB7XHJcbiAqICAgICBpbmNsdWRlVGVycml0b3JpZXM6IHRydWVcclxuICogIH1cclxuICpcclxuICogIE9ubHkgYWxsb3cgY2FwaXRhbCBsZXR0ZXJzLCBpbmNsdWRlIHRlcnJpdG9yaWVzIGFuZCBtaWxpdGFyeSB6b25lc1xyXG4gKiAgc3RhdGVJbnB1dDoge1xyXG4gKiAgICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcclxuICogICAgIGluY2x1ZGVUZXJyaXRvcmllczogdHJ1ZSxcclxuICogICAgIGluY2x1ZGVNaWxpdGFyeTogdHJ1ZVxyXG4gKiAgfVxyXG4gKlxyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInN0YXRlVVNcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50LCBvcHRpb25zICkge1xyXG5cdHZhciBpc0RlZmF1bHQgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJ1bmRlZmluZWRcIixcclxuXHRcdGNhc2VTZW5zaXRpdmUgPSAoIGlzRGVmYXVsdCB8fCB0eXBlb2Ygb3B0aW9ucy5jYXNlU2Vuc2l0aXZlID09PSBcInVuZGVmaW5lZFwiICkgPyBmYWxzZSA6IG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSxcclxuXHRcdGluY2x1ZGVUZXJyaXRvcmllcyA9ICggaXNEZWZhdWx0IHx8IHR5cGVvZiBvcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcyA9PT0gXCJ1bmRlZmluZWRcIiApID8gZmFsc2UgOiBvcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcyxcclxuXHRcdGluY2x1ZGVNaWxpdGFyeSA9ICggaXNEZWZhdWx0IHx8IHR5cGVvZiBvcHRpb25zLmluY2x1ZGVNaWxpdGFyeSA9PT0gXCJ1bmRlZmluZWRcIiApID8gZmFsc2UgOiBvcHRpb25zLmluY2x1ZGVNaWxpdGFyeSxcclxuXHRcdHJlZ2V4O1xyXG5cclxuXHRpZiAoICFpbmNsdWRlVGVycml0b3JpZXMgJiYgIWluY2x1ZGVNaWxpdGFyeSApIHtcclxuXHRcdHJlZ2V4ID0gXCJeKEFbS0xSWl18Q1tBT1RdfERbQ0VdfEZMfEdBfEhJfElbQURMTl18S1tTWV18TEF8TVtBREVJTk9TVF18TltDREVISk1WWV18T1tIS1JdfFBBfFJJfFNbQ0RdfFRbTlhdfFVUfFZbQVRdfFdbQUlWWV0pJFwiO1xyXG5cdH0gZWxzZSBpZiAoIGluY2x1ZGVUZXJyaXRvcmllcyAmJiBpbmNsdWRlTWlsaXRhcnkgKSB7XHJcblx0XHRyZWdleCA9IFwiXihBW0FFS0xQUlNaXXxDW0FPVF18RFtDRV18Rkx8R1tBVV18SEl8SVtBRExOXXxLW1NZXXxMQXxNW0FERUlOT1BTVF18TltDREVISk1WWV18T1tIS1JdfFBbQVJdfFJJfFNbQ0RdfFRbTlhdfFVUfFZbQUlUXXxXW0FJVlldKSRcIjtcclxuXHR9IGVsc2UgaWYgKCBpbmNsdWRlVGVycml0b3JpZXMgKSB7XHJcblx0XHRyZWdleCA9IFwiXihBW0tMUlNaXXxDW0FPVF18RFtDRV18Rkx8R1tBVV18SEl8SVtBRExOXXxLW1NZXXxMQXxNW0FERUlOT1BTVF18TltDREVISk1WWV18T1tIS1JdfFBbQVJdfFJJfFNbQ0RdfFRbTlhdfFVUfFZbQUlUXXxXW0FJVlldKSRcIjtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmVnZXggPSBcIl4oQVtBRUtMUFJaXXxDW0FPVF18RFtDRV18Rkx8R0F8SEl8SVtBRExOXXxLW1NZXXxMQXxNW0FERUlOT1NUXXxOW0NERUhKTVZZXXxPW0hLUl18UEF8Ukl8U1tDRF18VFtOWF18VVR8VltBVF18V1tBSVZZXSkkXCI7XHJcblx0fVxyXG5cclxuXHRyZWdleCA9IGNhc2VTZW5zaXRpdmUgPyBuZXcgUmVnRXhwKCByZWdleCApIDogbmV3IFJlZ0V4cCggcmVnZXgsIFwiaVwiICk7XHJcblx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCByZWdleC50ZXN0KCB2YWx1ZSApO1xyXG59LCBcIlBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgc3RhdGVcIiApO1xyXG4iLCIvLyBUT0RPIGNoZWNrIGlmIHZhbHVlIHN0YXJ0cyB3aXRoIDwsIG90aGVyd2lzZSBkb24ndCB0cnkgc3RyaXBwaW5nIGFueXRoaW5nXHJcbiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJzdHJpcHBlZG1pbmxlbmd0aFwiLCBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQsIHBhcmFtICkge1xyXG5cdHJldHVybiAkKCB2YWx1ZSApLnRleHQoKS5sZW5ndGggPj0gcGFyYW07XHJcbn0sICQudmFsaWRhdG9yLmZvcm1hdCggXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGNoYXJhY3RlcnNcIiApICk7XHJcbiIsIiQudmFsaWRhdG9yLmFkZE1ldGhvZCggXCJ0aW1lXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eKFswMV1cXGR8MlswLTNdfFswLTldKSg6WzAtNV1cXGQpezEsMn0kLy50ZXN0KCB2YWx1ZSApO1xyXG59LCBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIHRpbWUsIGJldHdlZW4gMDA6MDAgYW5kIDIzOjU5XCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInRpbWUxMmhcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14oKDA/WzEtOV18MVswMTJdKSg6WzAtNV1cXGQpezEsMn0oXFwgP1tBUF1NKSkkL2kudGVzdCggdmFsdWUgKTtcclxufSwgXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCB0aW1lIGluIDEyLWhvdXIgYW0vcG0gZm9ybWF0XCIgKTtcclxuIiwiLy8gU2FtZSBhcyB1cmwsIGJ1dCBUTEQgaXMgb3B0aW9uYWxcclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInVybDJcIiwgZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14oaHR0cHM/fGZ0cCk6XFwvXFwvKCgoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDopKkApPygoKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKSl8KCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikqKChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuPykoOlxcZCopPykoXFwvKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSsoXFwvKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKikqKT8pPyhcXD8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KCMoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFxcL3xcXD8pKik/JC9pLnRlc3QoIHZhbHVlICk7XHJcbn0sICQudmFsaWRhdG9yLm1lc3NhZ2VzLnVybCApO1xyXG4iLCIvKipcclxuICogUmV0dXJuIHRydWUsIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIHZlaGljbGUgaWRlbnRpZmljYXRpb24gbnVtYmVyIChWSU4pLlxyXG4gKlxyXG4gKiBXb3JrcyB3aXRoIGFsbCBraW5kIG9mIHRleHQgaW5wdXRzLlxyXG4gKlxyXG4gKiBAZXhhbXBsZSA8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiMjBcIiBuYW1lPVwiVmVoaWNsZUlEXCIgY2xhc3M9XCJ7cmVxdWlyZWQ6dHJ1ZSx2aW5VUzp0cnVlfVwiIC8+XHJcbiAqIEBkZXNjIERlY2xhcmVzIGEgcmVxdWlyZWQgaW5wdXQgZWxlbWVudCB3aG9zZSB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgdmVoaWNsZSBpZGVudGlmaWNhdGlvbiBudW1iZXIuXHJcbiAqXHJcbiAqIEBuYW1lICQudmFsaWRhdG9yLm1ldGhvZHMudmluVVNcclxuICogQHR5cGUgQm9vbGVhblxyXG4gKiBAY2F0IFBsdWdpbnMvVmFsaWRhdGUvTWV0aG9kc1xyXG4gKi9cclxuJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInZpblVTXCIsIGZ1bmN0aW9uKCB2ICkge1xyXG5cdGlmICggdi5sZW5ndGggIT09IDE3ICkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0dmFyIExMID0gWyBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJQXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIgXSxcclxuXHRcdFZMID0gWyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCAxLCAyLCAzLCA0LCA1LCA3LCA5LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IF0sXHJcblx0XHRGTCA9IFsgOCwgNywgNiwgNSwgNCwgMywgMiwgMTAsIDAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIgXSxcclxuXHRcdHJzID0gMCxcclxuXHRcdGksIG4sIGQsIGYsIGNkLCBjZHY7XHJcblxyXG5cdGZvciAoIGkgPSAwOyBpIDwgMTc7IGkrKyApIHtcclxuXHRcdGYgPSBGTFsgaSBdO1xyXG5cdFx0ZCA9IHYuc2xpY2UoIGksIGkgKyAxICk7XHJcblx0XHRpZiAoIGkgPT09IDggKSB7XHJcblx0XHRcdGNkdiA9IGQ7XHJcblx0XHR9XHJcblx0XHRpZiAoICFpc05hTiggZCApICkge1xyXG5cdFx0XHRkICo9IGY7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKCBuID0gMDsgbiA8IExMLmxlbmd0aDsgbisrICkge1xyXG5cdFx0XHRcdGlmICggZC50b1VwcGVyQ2FzZSgpID09PSBMTFsgbiBdICkge1xyXG5cdFx0XHRcdFx0ZCA9IFZMWyBuIF07XHJcblx0XHRcdFx0XHRkICo9IGY7XHJcblx0XHRcdFx0XHRpZiAoIGlzTmFOKCBjZHYgKSAmJiBuID09PSA4ICkge1xyXG5cdFx0XHRcdFx0XHRjZHYgPSBMTFsgbiBdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRycyArPSBkO1xyXG5cdH1cclxuXHRjZCA9IHJzICUgMTE7XHJcblx0aWYgKCBjZCA9PT0gMTAgKSB7XHJcblx0XHRjZCA9IFwiWFwiO1xyXG5cdH1cclxuXHRpZiAoIGNkID09PSBjZHYgKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0cmV0dXJuIGZhbHNlO1xyXG59LCBcIlRoZSBzcGVjaWZpZWQgdmVoaWNsZSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKFZJTikgaXMgaW52YWxpZC5cIiApO1xyXG4iLCIkLnZhbGlkYXRvci5hZGRNZXRob2QoIFwiemlwY29kZVVTXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eXFxkezV9KC1cXGR7NH0pPyQvLnRlc3QoIHZhbHVlICk7XHJcbn0sIFwiVGhlIHNwZWNpZmllZCBVUyBaSVAgQ29kZSBpcyBpbnZhbGlkXCIgKTtcclxuIiwiJC52YWxpZGF0b3IuYWRkTWV0aG9kKCBcInppcHJhbmdlXCIsIGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eOTBbMi01XVxcZFxcezJcXH0tXFxkezR9JC8udGVzdCggdmFsdWUgKTtcclxufSwgXCJZb3VyIFpJUC1jb2RlIG11c3QgYmUgaW4gdGhlIHJhbmdlIDkwMnh4LXh4eHggdG8gOTA1eHgteHh4eFwiICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBBUiAoQXJhYmljOyDYp9mE2LnYsdio2YrYqSlcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcItmH2LDYpyDYp9mE2K3ZgtmEINil2YTYstin2YXZilwiLFxyXG5cdHJlbW90ZTogXCLZitix2KzZiSDYqti12K3ZititINmH2LDYpyDYp9mE2K3ZgtmEINmE2YTZhdiq2KfYqNi52KlcIixcclxuXHRlbWFpbDogXCLYsdis2KfYoSDYpdiv2K7Yp9mEINi52YbZiNin2YYg2KjYsdmK2K8g2KXZhNmD2KrYsdmI2YbZiiDYtdit2YrYrVwiLFxyXG5cdHVybDogXCLYsdis2KfYoSDYpdiv2K7Yp9mEINi52YbZiNin2YYg2YXZiNmC2Lkg2KXZhNmD2KrYsdmI2YbZiiDYtdit2YrYrVwiLFxyXG5cdGRhdGU6IFwi2LHYrNin2KEg2KXYr9iu2KfZhCDYqtin2LHZitiuINi12K3ZititXCIsXHJcblx0ZGF0ZUlTTzogXCLYsdis2KfYoSDYpdiv2K7Yp9mEINiq2KfYsdmK2K4g2LXYrdmK2K0gKElTTylcIixcclxuXHRudW1iZXI6IFwi2LHYrNin2KEg2KXYr9iu2KfZhCDYudiv2K8g2KjYt9ix2YrZgtipINi12K3Zitit2KlcIixcclxuXHRkaWdpdHM6IFwi2LHYrNin2KEg2KXYr9iu2KfZhCDYo9ix2YLYp9mFINmB2YLYt1wiLFxyXG5cdGNyZWRpdGNhcmQ6IFwi2LHYrNin2KEg2KXYr9iu2KfZhCDYsdmC2YUg2KjYt9in2YLYqSDYp9im2KrZhdin2YYg2LXYrdmK2K1cIixcclxuXHRlcXVhbFRvOiBcItix2KzYp9ihINil2K/Yrtin2YQg2YbZgdizINin2YTZgtmK2YXYqVwiLFxyXG5cdGV4dGVuc2lvbjogXCLYsdis2KfYoSDYpdiv2K7Yp9mEINmF2YTZgSDYqNin2YXYqtiv2KfYryDZhdmI2KfZgdmCINi52YTZitmHXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYrdix2YjZgSDZh9mIIHswfVwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2LnYr9ivINin2YTYrdix2YjZgSDZh9mIIHswfVwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLYudiv2K8g2KfZhNit2LHZiNmBINmK2KzYqCDYo9mGINmK2YPZiNmGINio2YrZhiB7MH0g2YggezF9XCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcItix2KzYp9ihINil2K/Yrtin2YQg2LnYr9ivINmC2YrZhdiq2Ycg2KjZitmGIHswfSDZiCB7MX1cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItix2KzYp9ihINil2K/Yrtin2YQg2LnYr9ivINij2YLZhCDZhdmGINij2Ygg2YrYs9in2YjZiiB7MH1cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcItix2KzYp9ihINil2K/Yrtin2YQg2LnYr9ivINij2YPYqNixINmF2YYg2KPZiCDZitiz2KfZiNmKIHswfVwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogQXogKEF6ZXJpOyBhesmZcmJheWNhbiBkaWxpKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiQnUgeGFuYSBtw7x0bMmZcSBkb2xkdXJ1bG1hbMSxZMSxci5cIixcclxuXHRyZW1vdGU6IFwiWsmZaG3JmXQgb2xtYXNhLCBkw7x6Z8O8biBtyZluYSBkYXhpbCBlZGluLlwiLFxyXG5cdGVtYWlsOiBcIlrJmWhtyZl0IG9sbWFzYSwgZMO8emfDvG4gZWxla3Ryb24gcG/Dp3QgZGF4aWwgZWRpbi5cIixcclxuXHR1cmw6IFwiWsmZaG3JmXQgb2xtYXNhLCBkw7x6Z8O8biBVUkwgZGF4aWwgZWRpbi5cIixcclxuXHRkYXRlOiBcIlrJmWhtyZl0IG9sbWFzYSwgZMO8emfDvG4gdGFyaXggZGF4aWwgZWRpbi5cIixcclxuXHRkYXRlSVNPOiBcIlrJmWhtyZl0IG9sbWFzYSwgZMO8emfDvG4gSVNPIGZvcm1hdGzEsSB0YXJpeCBkYXhpbCBlZGluLlwiLFxyXG5cdG51bWJlcjogXCJayZlobcmZdCBvbG1hc2EsIGTDvHpnw7xuIHLJmXHJmW0gZGF4aWwgZWRpbi5cIixcclxuXHRkaWdpdHM6IFwiWsmZaG3JmXQgb2xtYXNhLCB5YWxuxLF6IHLJmXHJmW0gZGF4aWwgZWRpbi5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlrJmWhtyZl0IG9sbWFzYSwgZMO8emfDvG4ga3JlZGl0IGthcnQgbsO2bXLJmXNpbmkgZGF4aWwgZWRpbi5cIixcclxuXHRlcXVhbFRvOiBcIlrJmWhtyZl0IG9sbWFzYSwgZXluaSBtyZluYW7EsSBiaXIgZGFoYSBkYXhpbCBlZGluLlwiLFxyXG5cdGV4dGVuc2lvbjogXCJayZlobcmZdCBvbG1hc2EsIGTDvHpnw7xuIGdlbmnFn2zJmW5tyZl5yZkgbWFsaWsgZmF5bMSxIHNlw6dpbi5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJayZlobcmZdCBvbG1hc2EsIHswfSBzaW12b2xkYW4gw6dveCBvbG1heWFyYXEgZGF4aWwgZWRpbi5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlrJmWhtyZl0IG9sbWFzYSwgezB9IHNpbXZvbGRhbiBheiBvbG1heWFyYXEgZGF4aWwgZWRpbi5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiWsmZaG3JmXQgb2xtYXNhLCB7MH0gLSB7MX0gYXJhbMSxxJ/EsW5kYSB1enVubHXEn2EgbWFsaWsgc2ltdm9sIGRheGlsIGVkaW4uXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlrJmWhtyZl0IG9sbWFzYSwgezB9IC0gezF9IGFyYWzEscSfxLFuZGEgcsmZccmZbSBkYXhpbCBlZGluLlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiWsmZaG3JmXQgb2xtYXNhLCB7MH0gdsmZIG9uZGFuIGtpw6dpayByyZlxyZltIGRheGlsIGVkaW4uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJayZlobcmZdCBvbG1hc2EsIHswfSB2yZkgb25kYW4gYsO2ecO8ayByyZlxyZltIGRheGlsIGVkaW5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEJHIChCdWxnYXJpYW47INCx0YrQu9Cz0LDRgNGB0LrQuCDQtdC30LjQuilcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcItCf0L7Qu9C10YLQviDQtSDQt9Cw0LTRitC70LbQuNGC0LXQu9C90L4uXCIsXHJcblx0cmVtb3RlOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INC/0YDQsNCy0LjQu9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIuXCIsXHJcblx0ZW1haWw6IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LLQsNC70LjQtNC10L0gZW1haWwuXCIsXHJcblx0dXJsOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INCy0LDQu9C40LTQvdC+IFVSTC5cIixcclxuXHRkYXRlOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INCy0LDQu9C40LTQvdCwINC00LDRgtCwLlwiLFxyXG5cdGRhdGVJU086IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LLQsNC70LjQtNC90LAg0LTQsNGC0LAgKElTTykuXCIsXHJcblx0bnVtYmVyOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INCy0LDQu9C40LTQtdC9INC90L7QvNC10YAuXCIsXHJcblx0ZGlnaXRzOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INGB0LDQvNC+INGG0LjRhNGA0LguXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLQnNC+0LvRjywg0LLRitCy0LXQtNC10YLQtSDQstCw0LvQuNC00LXQvSDQvdC+0LzQtdGAINC90LAg0LrRgNC10LTQuNGC0L3QsCDQutCw0YDRgtCwLlwiLFxyXG5cdGVxdWFsVG86IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0YHRitGJ0LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0L7RgtC90L7QstC+LlwiLFxyXG5cdGV4dGVuc2lvbjogXCLQnNC+0LvRjywg0LLRitCy0LXQtNC10YLQtSDRgdGC0L7QudC90L7RgdGCINGBINCy0LDQu9C40LTQvdC+INGA0LDQt9GI0LjRgNC10L3QuNC1LlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INC90LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INGB0LjQvNCy0L7Qu9CwLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0L/QvtC90LUgezB9INGB0LjQvNCy0L7Qu9CwLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQnNC+0LvRjywg0LLRitCy0LXQtNC10YLQtSDRgdGC0L7QudC90L7RgdGCINGBINC00YrQu9C20LjQvdCwINC80LXQttC00YMgezB9INC4IHsxfSDRgdC40LzQstC+0LvQsC5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0YHRgtC+0LnQvdC+0YHRgiDQvNC10LbQtNGDIHswfSDQuCB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQnNC+0LvRjywg0LLRitCy0LXQtNC10YLQtSDRgdGC0L7QudC90L7RgdGCINC/0L4t0LzQsNC70LrQsCDQuNC70Lgg0YDQsNCy0L3QsCDQvdCwIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INGB0YLQvtC50L3QvtGB0YIg0L/Qvi3Qs9C+0LvRj9C80LAg0LjQu9C4INGA0LDQstC90LAg0L3QsCB7MH0uXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBibl9CRCAoQmVuZ2FsaSwgQmFuZ2xhZGVzaClcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIuCmj+CmhyDgpqTgpqXgp43gpq/gpp/gpr8g4KaG4Kas4Ka24KeN4Kav4KaV4KWkXCIsXHJcblx0cmVtb3RlOiBcIuCmj+CmhyDgpqTgpqXgp43gpq/gpp/gpr8g4Kag4Ka/4KaVIOCmleCmsOCngeCmqOClpFwiLFxyXG5cdGVtYWlsOiBcIuCmheCmqOCngeCml+CnjeCmsOCmuSDgppXgprDgp4cg4KaP4KaV4Kaf4Ka/IOCmuOCmoOCmv+CmlSDgpq7gp4fgpofgprIg4Kag4Ka/4KaV4Ka+4Kao4Ka+IOCmsuCmv+CmluCngeCmqOClpFwiLFxyXG5cdHVybDogXCLgpoXgpqjgp4Hgppfgp43gprDgprkg4KaV4Kaw4KeHIOCmj+CmleCmn+CmvyDgprjgpqDgpr/gppUg4Kay4Ka/4KaZ4KeN4KaVIOCmpuCmv+CmqOClpFwiLFxyXG5cdGRhdGU6IFwi4Kak4Ka+4Kaw4Ka/4KaWIOCmuOCmoOCmv+CmlSDgpqjgp5/gpaRcIixcclxuXHRkYXRlSVNPOiBcIuCmheCmqOCngeCml+CnjeCmsOCmuSDgppXgprDgp4cg4KaP4KaV4Kaf4Ka/IOCmuOCmoOCmv+CmlSAoSVNPKSDgpqTgpr7gprDgpr/gppYg4Kay4Ka/4KaW4KeB4Kao4KWkXCIsXHJcblx0bnVtYmVyOiBcIuCmheCmqOCngeCml+CnjeCmsOCmuSDgppXgprDgp4cg4KaP4KaV4Kaf4Ka/IOCmuOCmoOCmv+CmlSDgpqjgpq7gp43gpqzgprAg4Kay4Ka/4KaW4KeB4Kao4KWkXCIsXHJcblx0ZGlnaXRzOiBcIuCmj+CmluCmvuCmqOCnhyDgprbgp4Hgpqfgp4Eg4Ka44KaC4KaW4KeN4Kav4Ka+IOCmrOCnjeCmr+CmrOCmueCmvuCmsCDgppXgprDgpr4g4Kav4Ka+4Kas4KeH4KWkXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLgpoXgpqjgp4Hgppfgp43gprDgprkg4KaV4Kaw4KeHIOCmj+CmleCmn+CmvyDgppXgp43gprDgp4fgpqHgpr/gpp8g4KaV4Ka+4Kaw4KeN4Kah4KeH4KawIOCmuOCmoOCmv+CmlSDgpqjgpq7gp43gpqzgprAg4Kay4Ka/4KaW4KeB4Kao4KWkXCIsXHJcblx0ZXF1YWxUbzogXCLgpo/gppXgpocg4Kau4Ka+4KaoIOCmhuCmrOCmvuCmsCDgprLgpr/gppbgp4HgpqjgpaRcIixcclxuXHRleHRlbnNpb246IFwi4Ka44Kag4Ka/4KaVIOCmp+CmsOCmqOCnh+CmsCDgpqvgpr7gpofgprIg4KaG4Kaq4Kay4KeL4KahIOCmleCmsOCngeCmqOClpFwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcInswfeCmn+Cmv+CmsCDgpqzgp4fgprbgpr8g4KaF4KaV4KeN4Ka34KawIOCmsuCnh+CmluCmviDgpq/gpr7gpqzgp4cg4Kao4Ka+4KWkXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJ7MH3gpp/gpr/gprAg4KaV4KauIOCmheCmleCnjeCmt+CmsCDgprLgp4fgppbgpr4g4Kav4Ka+4Kas4KeHIOCmqOCmvuClpFwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJ7MH0g4Kal4KeH4KaV4KeHIHsxfSDgpp/gpr8g4KaF4KaV4KeN4Ka34KawIOCmuOCmruCnjeCmrOCmsuCmv+CmpCDgpq7gpr7gpqgg4Kay4Ka/4KaW4KeB4Kao4KWkXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcInswfSDgpqXgp4fgppXgp4cgezF9IOCmj+CmsCDgpq7gpqfgp43gpq/gp4cg4KaP4KaV4Kaf4Ka/IOCmruCmvuCmqCDgpqzgp43gpq/gpqzgprngpr7gprAg4KaV4Kaw4KeB4Kao4KWkXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLgpoXgpqjgp4Hgppfgp43gprDgprkg4KaV4Kaw4KeHIHswfSDgpqzgpr4g4Kak4Ka+4KawIOCmmuCmvuCmh+CmpOCnhyDgppXgpq4g4Kau4Ka+4KaoIOCmrOCnjeCmr+CmrOCmueCmvuCmsCDgppXgprDgp4HgpqjgpaRcIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuCmheCmqOCngeCml+CnjeCmsOCmuSDgppXgprDgp4cgezB9IOCmrOCmviDgpqTgpr7gprAg4Kaa4Ka+4KaH4Kak4KeHIOCmrOCnh+CmtuCmvyDgpq7gpr7gpqgg4Kas4KeN4Kav4Kas4Ka54Ka+4KawIOCmleCmsOCngeCmqOClpFwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogQ0EgKENhdGFsYW47IGNhdGFsw6ApXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJBcXVlc3QgY2FtcCDDqXMgb2JsaWdhdG9yaS5cIixcclxuXHRyZW1vdGU6IFwiU2kgdXMgcGxhdSwgb21wbGUgYXF1ZXN0IGNhbXAuXCIsXHJcblx0ZW1haWw6IFwiU2kgdXMgcGxhdSwgZXNjcml1IHVuYSBhZHJlw6dhIGRlIGNvcnJldS1lIHbDoGxpZGFcIixcclxuXHR1cmw6IFwiU2kgdXMgcGxhdSwgZXNjcml1IHVuYSBVUkwgdsOgbGlkYS5cIixcclxuXHRkYXRlOiBcIlNpIHVzIHBsYXUsIGVzY3JpdSB1bmEgZGF0YSB2w6BsaWRhLlwiLFxyXG5cdGRhdGVJU086IFwiU2kgdXMgcGxhdSwgZXNjcml1IHVuYSBkYXRhIChJU08pIHbDoGxpZGEuXCIsXHJcblx0bnVtYmVyOiBcIlNpIHVzIHBsYXUsIGVzY3JpdSB1biBuw7ptZXJvIGVudGVyIHbDoGxpZC5cIixcclxuXHRkaWdpdHM6IFwiU2kgdXMgcGxhdSwgZXNjcml1IG5vbcOpcyBkw61naXRzLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiU2kgdXMgcGxhdSwgZXNjcml1IHVuIG7Dum1lcm8gZGUgdGFyamV0YSB2w6BsaWQuXCIsXHJcblx0ZXF1YWxUbzogXCJTaSB1cyBwbGF1LCBlc2NyaXUgZWwgbWF0ZWl4IHZhbG9yIGRlIG5vdS5cIixcclxuXHRleHRlbnNpb246IFwiU2kgdXMgcGxhdSwgZXNjcml1IHVuIHZhbG9yIGFtYiB1bmEgZXh0ZW5zacOzIGFjY2VwdGFkYS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTaSB1cyBwbGF1LCBubyBlc2NyaWd1aXMgbcOpcyBkZSB7MH0gY2FyYWN0ZXJzLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2kgdXMgcGxhdSwgbm8gZXNjcmlndWlzIG1lbnlzIGRlIHswfSBjYXJhY3RlcnMuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlNpIHVzIHBsYXUsIGVzY3JpdSB1biB2YWxvciBlbnRyZSB7MH0gaSB7MX0gY2FyYWN0ZXJzLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTaSB1cyBwbGF1LCBlc2NyaXUgdW4gdmFsb3IgZW50cmUgezB9IGkgezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2kgdXMgcGxhdSwgZXNjcml1IHVuIHZhbG9yIG1lbm9yIG8gaWd1YWwgYSB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTaSB1cyBwbGF1LCBlc2NyaXUgdW4gdmFsb3IgbWFqb3IgbyBpZ3VhbCBhIHswfS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IENTIChDemVjaDsgxI1lxaF0aW5hLCDEjWVza8O9IGphenlrKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiVGVudG8gw7pkYWogamUgcG92aW5uw70uXCIsXHJcblx0cmVtb3RlOiBcIlByb3PDrW0sIG9wcmF2dGUgdGVudG8gw7pkYWouXCIsXHJcblx0ZW1haWw6IFwiUHJvc8OtbSwgemFkZWp0ZSBwbGF0bsO9IGUtbWFpbC5cIixcclxuXHR1cmw6IFwiUHJvc8OtbSwgemFkZWp0ZSBwbGF0bsOpIFVSTC5cIixcclxuXHRkYXRlOiBcIlByb3PDrW0sIHphZGVqdGUgcGxhdG7DqSBkYXR1bS5cIixcclxuXHRkYXRlSVNPOiBcIlByb3PDrW0sIHphZGVqdGUgcGxhdG7DqSBkYXR1bSAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwiUHJvc8OtbSwgemFkZWp0ZSDEjcOtc2xvLlwiLFxyXG5cdGRpZ2l0czogXCJQcm9zw61tLCB6YWTDoXZlanRlIHBvdXplIMSNw61zbGljZS5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlByb3PDrW0sIHphZGVqdGUgxI3DrXNsbyBrcmVkaXRuw60ga2FydHkuXCIsXHJcblx0ZXF1YWxUbzogXCJQcm9zw61tLCB6YWRlanRlIHpub3Z1IHN0ZWpub3UgaG9kbm90dS5cIixcclxuXHRleHRlbnNpb246IFwiUHJvc8OtbSwgemFkZWp0ZSBzb3Vib3Igc2Ugc3Byw6F2bm91IHDFmcOtcG9ub3UuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc8OtbSwgemFkZWp0ZSBuZWp2w61jZSB7MH0gem5ha8WvLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc8OtbSwgemFkZWp0ZSBuZWptw6luxJsgezB9IHpuYWvFry5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc8OtbSwgemFkZWp0ZSBvZCB7MH0gZG8gezF9IHpuYWvFry5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc8OtbSwgemFkZWp0ZSBob2Rub3R1IG9kIHswfSBkbyB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zw61tLCB6YWRlanRlIGhvZG5vdHUgbWVuxaHDrSBuZWJvIHJvdm51IHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByb3PDrW0sIHphZGVqdGUgaG9kbm90dSB2xJt0xaHDrSBuZWJvIHJvdm51IHswfS5cIiApLFxyXG5cdHN0ZXA6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJNdXPDrSBiw710IG7DoXNvYmtlbSDEjcOtc2xhIHswfS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IERBIChEYW5pc2g7IGRhbnNrKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiRGV0dGUgZmVsdCBlciBww6VrcsOmdmV0LlwiLFxyXG5cdHJlbW90ZTogXCJSZXQgdmVubGlnc3QgZGV0dGUgZmVsdFwiLFxyXG5cdGVtYWlsOiBcIkluZHRhc3QgZW4gZ3lsZGlnIGVtYWlsLWFkcmVzc2UuXCIsXHJcblx0dXJsOiBcIkluZHRhc3QgZW4gZ3lsZGlnIFVSTC5cIixcclxuXHRkYXRlOiBcIkluZHRhc3QgZW4gZ3lsZGlnIGRhdG8uXCIsXHJcblx0bnVtYmVyOiBcIkluZHRhc3QgZXQgdGFsLlwiLFxyXG5cdGRpZ2l0czogXCJJbmR0YXN0IGt1biBjaWZyZS5cIixcclxuXHRjcmVkaXRjYXJkOiBcIkluZHRhc3QgZXQgZ3lsZGlndCBrcmVkaXRrb3J0bnVtbWVyLlwiLFxyXG5cdGVxdWFsVG86IFwiSW5kdGFzdCBkZW4gc2FtbWUgdsOmcmRpIGlnZW4uXCIsXHJcblx0dGltZTogXCJBbmdpdiBlbiBneWxkaWcgdGlkIG1lbGxlbSBrbC4gMDA6MDAgb2cgMjM6NTkuXCIsXHJcblx0aXB2NDogXCJBbmdpdiB2ZW5saWdzdCBlbiBneWxkaWcgSVB2NC1hZHJlc3NlLlwiLFxyXG5cdGlwdjY6IFwiQW5naXYgdmVubGlnc3QgZW4gZ3lsZGlnIElQdjYtYWRyZXNzZS5cIixcclxuXHRyZXF1aXJlX2Zyb21fZ3JvdXA6ICAkLnZhbGlkYXRvci5mb3JtYXQoIFwiQW5naXYgbWluZHN0IHswfSBhZiBkaXNzZSBmZWx0ZXIuXCIgKSxcclxuXHRleHRlbnNpb246IFwiSW5kdGFzdCB2ZW5saWdzdCBlbiB2w6ZyZGkgbWVkIGVuIGd5bGRpZyBlbmRlbHNlXCIsXHJcblx0cGF0dGVybjogXCJVZ3lsZGlndCBmb3JtYXRcIixcclxuXHRsZXR0ZXJzb25seTogXCJBbmdpdiB2ZW5saWdzdCBrdW4gYm9nc3RhdmVyLlwiLFxyXG5cdG5vd2hpdGVzcGFjZTogXCJNw6UgaWtrZSBpbmRob2xkZSBtZWxsZW1ydW1cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJJbmR0YXN0IGjDuGpzdCB7MH0gdGVnbi5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkluZHRhc3QgbWluZHN0IHswfSB0ZWduLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJJbmR0YXN0IG1pbmRzdCB7MH0gb2cgaMO4anN0IHsxfSB0ZWduLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdpdiBlbiB2w6ZyZGkgbWVsbGVtIHswfSBvZyB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdpdiBlbiB2w6ZyZGkgZGVyIGjDuGpzdCBlciB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdpdiBlbiB2w6ZyZGkgZGVyIG1pbmRzdCBlciB7MH0uXCIgKSxcclxuXHRtaW5Xb3JkczogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkluZHRhc3QgdmVubGlnc3QgbWluZHN0IHswfSBvcmRcIiApLFxyXG5cdG1heFdvcmRzOiAgJC52YWxpZGF0b3IuZm9ybWF0KCBcIkluZHRhc3QgdmVubGlnc3QgaMO4anN0IHswfSBvcmRcIiApLFxyXG5cdHN0ZXA6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdpdiBlbiB2w6ZyZGkgZ2FuZ2UgezB9LlwiICksXHJcblx0bm90RXF1YWxUbzogXCJBbmdpdiBlbiBhbmRlbiB2w6ZyZGksIHbDpnJkaWVybmUgbcOlIGlra2UgdsOmcmUgZGV0IHNhbW1lLlwiLFxyXG5cdGludGVnZXI6IFwiQW5naXYgZXQgaWtrZS1kZWNpbWFsdGFsLCBkZXIgZXIgcG9zaXRpdnQgZWxsZXIgbmVnYXRpdnQuXCJcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogREUgKEdlcm1hbiwgRGV1dHNjaClcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIkRpZXNlcyBGZWxkIGlzdCBlaW4gUGZsaWNodGZlbGQuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiR2ViZW4gU2llIGJpdHRlIG1heGltYWwgezB9IFplaWNoZW4gZWluLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiR2ViZW4gU2llIGJpdHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZWluLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJHZWJlbiBTaWUgYml0dGUgbWluZGVzdGVucyB7MH0gdW5kIG1heGltYWwgezF9IFplaWNoZW4gZWluLlwiICksXHJcblx0ZW1haWw6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgRS1NYWlsLUFkcmVzc2UgZWluLlwiLFxyXG5cdHVybDogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBVUkwgZWluLlwiLFxyXG5cdGRhdGU6IFwiR2ViZW4gU2llIGJpdHRlIGVpbiBnw7xsdGlnZXMgRGF0dW0gZWluLlwiLFxyXG5cdG51bWJlcjogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBOdW1tZXIgZWluLlwiLFxyXG5cdGRpZ2l0czogXCJHZWJlbiBTaWUgYml0dGUgbnVyIFppZmZlcm4gZWluLlwiLFxyXG5cdGVxdWFsVG86IFwiV2llZGVyaG9sZW4gU2llIGJpdHRlIGRlbnNlbGJlbiBXZXJ0LlwiLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiR2ViZW4gU2llIGJpdHRlIGVpbmVuIFdlcnQgendpc2NoZW4gezB9IHVuZCB7MX0gZWluLlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiR2ViZW4gU2llIGJpdHRlIGVpbmVuIFdlcnQga2xlaW5lciBvZGVyIGdsZWljaCB7MH0gZWluLlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiR2ViZW4gU2llIGJpdHRlIGVpbmVuIFdlcnQgZ3LDtsOfZXIgb2RlciBnbGVpY2ggezB9IGVpbi5cIiApLFxyXG5cdGNyZWRpdGNhcmQ6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgS3JlZGl0a2FydGVuLU51bW1lciBlaW4uXCIsXHJcblx0cmVtb3RlOiBcIktvcnJpZ2llcmVuIFNpZSBiaXR0ZSBkaWVzZXMgRmVsZC5cIixcclxuXHRkYXRlSVNPOiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW4gZ8O8bHRpZ2VzIERhdHVtIGVpbiAoSVNPLUZvcm1hdCkuXCIsXHJcblx0c3RlcDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkdlYmVuIFNpZSBiaXR0ZSBlaW4gVmllbGZhY2hlcyB2b24gezB9IGVpbi5cIiApLFxyXG5cdG1heFdvcmRzOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiR2ViZW4gU2llIGJpdHRlIHswfSBXw7ZydGVyIG9kZXIgd2VuaWdlciBlaW4uXCIgKSxcclxuXHRtaW5Xb3JkczogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkdlYmVuIFNpZSBiaXR0ZSBtaW5kZXN0ZW5zIHswfSBXw7ZydGVyIGVpbi5cIiApLFxyXG5cdHJhbmdlV29yZHM6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJHZWJlbiBTaWUgYml0dGUgendpc2NoZW4gezB9IHVuZCB7MX0gV8O2cnRlcm4gZWluLlwiICksXHJcblx0YWNjZXB0OiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lbiBXZXJ0IG1pdCBlaW5lbSBnw7xsdGlnZW4gTUlNRS1UeXAgZWluLlwiLFxyXG5cdGFscGhhbnVtZXJpYzogXCJHZWJlbiBTaWUgYml0dGUgbnVyIEJ1Y2hzdGFiZW4gKGtlaW5lIFVtbGF1dGUpLCBaYWhsZW4gb2RlciBVbnRlcnN0cmljaGUgZWluLlwiLFxyXG5cdGJhbmthY2NvdW50Tkw6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgS29udG9udW1tZXIgZWluLlwiLFxyXG5cdGJhbmtvcmdpcm9hY2NvdW50Tkw6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgQmFuay0gb2RlciBHaXJva29udG9udW1tZXIgZWluLlwiLFxyXG5cdGJpYzogXCJHZWJlbiBTaWUgYml0dGUgZWluZW4gZ8O8bHRpZ2VuIEJJQy1Db2RlIGVpbi5cIixcclxuXHRjaWZFUzogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBDSUYtTnVtbWVyIGVpbi5cIixcclxuXHRjcGZCUjogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBDUEYtTnVtbWVyIGVpbi5cIixcclxuXHRjcmVkaXRjYXJkdHlwZXM6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgS3JlZGl0a2FydGVuLU51bW1lciBlaW4uXCIsXHJcblx0Y3VycmVuY3k6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgV8OkaHJ1bmcgZWluLlwiLFxyXG5cdGV4dGVuc2lvbjogXCJHZWJlbiBTaWUgYml0dGUgZWluZW4gV2VydCBtaXQgZWluZXIgZ8O8bHRpZ2VuIEVyd2VpdGVydW5nIGVpbi5cIixcclxuXHRnaXJvYWNjb3VudE5MOiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIEdpcm9rb250b251bW1lciBlaW4uXCIsXHJcblx0aWJhbjogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBJQkFOIGVpbi5cIixcclxuXHRpbnRlZ2VyOiAgXCJHZWJlbiBTaWUgYml0dGUgZWluZSBwb3NpdGl2ZSBvZGVyIG5lZ2F0aXZlIE5pY2h0LURlemltYWx6YWhsIGVpbi5cIixcclxuXHRpcHY0OiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIElQdjQtQWRyZXNzZSBlaW4uXCIsXHJcblx0aXB2NjogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBJUHY2LUFkcmVzc2UgZWluLlwiLFxyXG5cdGxldHRlcnNvbmx5OiBcIkdlYmVuIFNpZSBiaXR0ZSBudXIgQnVjaHN0YWJlbiBlaW4uXCIsXHJcblx0bGV0dGVyc3dpdGhiYXNpY3B1bmM6IFwiR2ViZW4gU2llIGJpdHRlIG51ciBCdWNoc3RhYmVuIG9kZXIgSW50ZXJwdW5rdGlvbiBlaW4uXCIsXHJcblx0bW9iaWxlTkw6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgSGFuZHludW1tZXIgZWluLlwiLFxyXG5cdG1vYmlsZVVLOiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIEhhbmR5bnVtbWVyIGVpbi5cIixcclxuXHRuZXRtYXNrOiAgXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBOZXR6bWFza2UgZWluLlwiLFxyXG5cdG5pZUVTOiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIE5JRS1OdW1tZXIgZWluLlwiLFxyXG5cdG5pZkVTOiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIE5JRi1OdW1tZXIgZWluLlwiLFxyXG5cdG5pcFBMOiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIE5JUC1OdW1tZXIgZWluLlwiLFxyXG5cdG5vdEVxdWFsVG86IFwiR2ViZW4gU2llIGJpdHRlIGVpbmVuIGFuZGVyZW4gV2VydCBlaW4uIERpZSBXZXJ0ZSBkw7xyZmVuIG5pY2h0IGdsZWljaCBzZWluLlwiLFxyXG5cdG5vd2hpdGVzcGFjZTogXCJLZWluIExlZXJ6ZWljaGVuIGJpdHRlLlwiLFxyXG5cdHBhdHRlcm46IFwiVW5nw7xsdGlnZXMgRm9ybWF0LlwiLFxyXG5cdHBob25lTkw6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciBlaW4uXCIsXHJcblx0cGhvbmVzVUs6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgYnJpdGlzY2hlIFRlbGVmb25udW1tZXIgZWluLlwiLFxyXG5cdHBob25lVUs6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciBlaW4uXCIsXHJcblx0cGhvbmVVUzogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBUZWxlZm9ubnVtbWVyIGVpbi5cIixcclxuXHRwb3N0YWxjb2RlQlI6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgYnJhc2lsaWFuaXNjaGUgUG9zdGxlaXR6YWhsIGVpbi5cIixcclxuXHRwb3N0YWxDb2RlQ0E6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2Uga2FuYWRpc2NoZSBQb3N0bGVpdHphaGwgZWluLlwiLFxyXG5cdHBvc3RhbGNvZGVJVDogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBpdGFsaWVuaXNjaGUgUG9zdGxlaXR6YWhsIGVpbi5cIixcclxuXHRwb3N0YWxjb2RlTkw6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgbmllZGVybMOkbmRpc2NoZSBQb3N0bGVpdHphaGwgZWluLlwiLFxyXG5cdHBvc3Rjb2RlVUs6IFwiR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgYnJpdGlzY2hlIFBvc3RsZWl0emFobCBlaW4uXCIsXHJcblx0cmVxdWlyZV9mcm9tX2dyb3VwOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiRsO8bGxlbiBTaWUgYml0dGUgbWluZGVzdGVucyB7MH0gZGllc2VyIEZlbGRlciBhdXMuXCIgKSxcclxuXHRza2lwX29yX2ZpbGxfbWluaW11bTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIsOcYmVyc3ByaW5nZW4gU2llIGJpdHRlIGRpZXNlIEZlbGRlciBvZGVyIGbDvGxsZW4gU2llIG1pbmRlc3RlbnMgezB9IHZvbiBpaG5lbiBhdXMuXCIgKSxcclxuXHRzdGF0ZVVTOiBcIkdlYmVuIFNpZSBiaXR0ZSBlaW5lbiBnw7xsdGlnZW4gVVMtQnVuZGVzc3RhYXQgZWluLlwiLFxyXG5cdHN0cmlwcGVkbWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiR2ViZW4gU2llIGJpdHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZWluLlwiICksXHJcblx0dGltZTogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBVaHJ6ZWl0IHp3aXNjaGVuIDAwOjAwIHVuZCAyMzo1OSBlaW4uXCIsXHJcblx0dGltZTEyaDogXCJHZWJlbiBTaWUgYml0dGUgZWluZSBnw7xsdGlnZSBVaHJ6ZWl0IGltIDEyLVN0dW5kZW4tRm9ybWF0IGVpbi5cIixcclxuXHR2aW5VUzogXCJEaWUgYW5nZWdlYmVuZSBGYWhyemV1Z2lkZW50aWZpa2F0aW9uc251bW1lciAoVklOKSBpc3QgdW5nw7xsdGlnLlwiLFxyXG5cdHppcGNvZGVVUzogXCJEaWUgYW5nZWdlYmVuZSBVUy1Qb3N0bGVpdHphaGwgaXN0IHVuZ8O8bHRpZy5cIixcclxuXHR6aXByYW5nZTogXCJJaHJlIFBvc3RsZWl0emFobCBtdXNzIGltIEJlcmVpY2ggOTAyeHgteHh4eCBiaXMgOTA1eHgteHh4eCBsaWVnZW4uXCJcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogRUwgKEdyZWVrOyDOtc67zrvOt869zrnOus6sKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwizpHPhc+Ez4wgz4TOvyDPgM61zrTOr86/IM61zq/Ovc6xzrkgz4XPgM6/z4fPgc61z4nPhM65zrrPjC5cIixcclxuXHRyZW1vdGU6IFwizqDOsc+BzrHOus6xzrvPjiDOtM65zr/Pgc64z47Pg8+EzrUgzrHPhc+Ez4wgz4TOvyDPgM61zrTOr86/LlwiLFxyXG5cdGVtYWlsOiBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOvM65zrEgzq3Os866z4XPgc63IM60zrnOtc+NzrjPhc69z4POtyBlbWFpbC5cIixcclxuXHR1cmw6IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM6tzr3OsSDOrc6zzrrPhc+Bzr8gVVJMLlwiLFxyXG5cdGRhdGU6IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM68zrnOsSDOrc6zzrrPhc+BzrcgzrfOvM61z4HOv868zrfOvc6vzrEuXCIsXHJcblx0ZGF0ZUlTTzogXCLOoM6xz4HOsc66zrHOu8+OIM61zrnPg86szrPOtc+EzrUgzrzOuc6xIM6tzrPOus+Fz4HOtyDOt868zrXPgc6/zrzOt869zq/OsSAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM6tzr3Osc69IM6tzrPOus+Fz4HOvyDOsc+BzrnOuM68z4wuXCIsXHJcblx0ZGlnaXRzOiBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOvM+Mzr3OvyDOsc+BzrnOuM68zrfPhM65zrrOrCDPiM63z4bOr86xLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM6tzr3Osc69IM6tzrPOus+Fz4HOvyDOsc+BzrnOuM68z4wgz4DOuc+Dz4TPic+EzrnOus6uz4IgzrrOrM+Bz4TOsc+CLlwiLFxyXG5cdGVxdWFsVG86IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM+EzrfOvSDOr860zrnOsSDPhM65zrzOriDOvs6xzr3OrC5cIixcclxuXHRleHRlbnNpb246IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM68zrnOsSDPhM65zrzOriDOvM61IM6tzrPOus+Fz4HOtyDOtc+Azq3Ous+EzrHPg863IM6xz4HPh861zq/Ov8+FLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOvM6tz4fPgc65IM66zrHOuSB7MH0gz4fOsc+BzrHOus+Ezq7Pgc61z4IuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLOoM6xz4HOsc66zrHOu8+OIM61zrnPg86szrPOtc+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gz4fOsc+BzrHOus+Ezq7Pgc61z4IuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOvM65zrEgz4TOuc68zq4gzrzOtSDOvM6uzrrOv8+CIM68zrXPhM6xzr7PjSB7MH0gzrrOsc65IHsxfSDPh86xz4HOsc66z4TOrs+Bz4nOvS5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM68zrnOsSDPhM65zrzOriDOvM61z4TOsc6+z40gezB9IM66zrHOuSB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLOoM6xz4HOsc66zrHOu8+OIM61zrnPg86szrPOtc+EzrUgzrzOuc6xIM+EzrnOvM6uIM68zrnOus+Bz4zPhM61z4HOtyDOriDOr8+Dzrcgz4TOv8+FIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOvM65zrEgz4TOuc68zq4gzrzOtc6zzrHOu8+Nz4TOtc+Bzrcgzq4gzq/Pg863IM+Ezr/PhSB7MH0uXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBFUyAoU3BhbmlzaDsgRXNwYcOxb2wpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvLlwiLFxyXG5cdHJlbW90ZTogXCJQb3IgZmF2b3IsIHJlbGxlbmEgZXN0ZSBjYW1wby5cIixcclxuXHRlbWFpbDogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW5hIGRpcmVjY2nDs24gZGUgY29ycmVvIHbDoWxpZGEuXCIsXHJcblx0dXJsOiBcIlBvciBmYXZvciwgZXNjcmliZSB1bmEgVVJMIHbDoWxpZGEuXCIsXHJcblx0ZGF0ZTogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW5hIGZlY2hhIHbDoWxpZGEuXCIsXHJcblx0ZGF0ZUlTTzogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW5hIGZlY2hhIChJU08pIHbDoWxpZGEuXCIsXHJcblx0bnVtYmVyOiBcIlBvciBmYXZvciwgZXNjcmliZSB1biBuw7ptZXJvIHbDoWxpZG8uXCIsXHJcblx0ZGlnaXRzOiBcIlBvciBmYXZvciwgZXNjcmliZSBzw7NsbyBkw61naXRvcy5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlBvciBmYXZvciwgZXNjcmliZSB1biBuw7ptZXJvIGRlIHRhcmpldGEgdsOhbGlkby5cIixcclxuXHRlcXVhbFRvOiBcIlBvciBmYXZvciwgZXNjcmliZSBlbCBtaXNtbyB2YWxvciBkZSBudWV2by5cIixcclxuXHRleHRlbnNpb246IFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuIHZhbG9yIGNvbiB1bmEgZXh0ZW5zacOzbiBhY2VwdGFkYS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIG5vIGVzY3JpYmFzIG3DoXMgZGUgezB9IGNhcmFjdGVyZXMuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIG5vIGVzY3JpYmFzIG1lbm9zIGRlIHswfSBjYXJhY3RlcmVzLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW4gdmFsb3IgZW50cmUgezB9IHkgezF9IGNhcmFjdGVyZXMuXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZXNjcmliZSB1biB2YWxvciBlbnRyZSB7MH0geSB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW4gdmFsb3IgbWVub3IgbyBpZ3VhbCBhIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZXNjcmliZSB1biB2YWxvciBtYXlvciBvIGlndWFsIGEgezB9LlwiICksXHJcblx0bmlmRVM6IFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuIE5JRiB2w6FsaWRvLlwiLFxyXG5cdG5pZUVTOiBcIlBvciBmYXZvciwgZXNjcmliZSB1biBOSUUgdsOhbGlkby5cIixcclxuXHRjaWZFUzogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW4gQ0lGIHbDoWxpZG8uXCJcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogRVMgKFNwYW5pc2g7IEVzcGHDsW9sKVxyXG4gKiBSZWdpb246IEFSIChBcmdlbnRpbmEpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvLlwiLFxyXG5cdHJlbW90ZTogXCJQb3IgZmF2b3IsIGNvbXBsZXTDoSBlc3RlIGNhbXBvLlwiLFxyXG5cdGVtYWlsOiBcIlBvciBmYXZvciwgZXNjcmliw60gdW5hIGRpcmVjY2nDs24gZGUgY29ycmVvIHbDoWxpZGEuXCIsXHJcblx0dXJsOiBcIlBvciBmYXZvciwgZXNjcmliw60gdW5hIFVSTCB2w6FsaWRhLlwiLFxyXG5cdGRhdGU6IFwiUG9yIGZhdm9yLCBlc2NyaWLDrSB1bmEgZmVjaGEgdsOhbGlkYS5cIixcclxuXHRkYXRlSVNPOiBcIlBvciBmYXZvciwgZXNjcmliw60gdW5hIGZlY2hhIChJU08pIHbDoWxpZGEuXCIsXHJcblx0bnVtYmVyOiBcIlBvciBmYXZvciwgZXNjcmliw60gdW4gbsO6bWVybyBlbnRlcm8gdsOhbGlkby5cIixcclxuXHRkaWdpdHM6IFwiUG9yIGZhdm9yLCBlc2NyaWLDrSBzw7NsbyBkw61naXRvcy5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlBvciBmYXZvciwgZXNjcmliw60gdW4gbsO6bWVybyBkZSB0YXJqZXRhIHbDoWxpZG8uXCIsXHJcblx0ZXF1YWxUbzogXCJQb3IgZmF2b3IsIGVzY3JpYsOtIGVsIG1pc21vIHZhbG9yIGRlIG51ZXZvLlwiLFxyXG5cdGV4dGVuc2lvbjogXCJQb3IgZmF2b3IsIGVzY3JpYsOtIHVuIHZhbG9yIGNvbiB1bmEgZXh0ZW5zacOzbiBhY2VwdGFkYS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIG5vIGVzY3JpYmFzIG3DoXMgZGUgezB9IGNhcmFjdGVyZXMuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIG5vIGVzY3JpYmFzIG1lbm9zIGRlIHswfSBjYXJhY3RlcmVzLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGVzY3JpYsOtIHVuIHZhbG9yIGVudHJlIHswfSB5IHsxfSBjYXJhY3RlcmVzLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGVzY3JpYsOtIHVuIHZhbG9yIGVudHJlIHswfSB5IHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZXNjcmliw60gdW4gdmFsb3IgbWVub3IgbyBpZ3VhbCBhIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZXNjcmliw60gdW4gdmFsb3IgbWF5b3IgbyBpZ3VhbCBhIHswfS5cIiApLFxyXG5cdG5pZkVTOiBcIlBvciBmYXZvciwgZXNjcmliw60gdW4gTklGIHbDoWxpZG8uXCIsXHJcblx0bmllRVM6IFwiUG9yIGZhdm9yLCBlc2NyaWLDrSB1biBOSUUgdsOhbGlkby5cIixcclxuXHRjaWZFUzogXCJQb3IgZmF2b3IsIGVzY3JpYsOtIHVuIENJRiB2w6FsaWRvLlwiXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEVTIChTcGFuaXNoOyBFc3Bhw7FvbClcclxuICogUmVnaW9uOiBQRSAoUGVyw7opXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvLlwiLFxyXG5cdHJlbW90ZTogXCJQb3IgZmF2b3IsIGxsZW5lIGVzdGUgY2FtcG8uXCIsXHJcblx0ZW1haWw6IFwiUG9yIGZhdm9yLCBlc2NyaWJhIHVuIGNvcnJlbyBlbGVjdHLDs25pY28gdsOhbGlkby5cIixcclxuXHR1cmw6IFwiUG9yIGZhdm9yLCBlc2NyaWJhIHVuYSBVUkwgdsOhbGlkYS5cIixcclxuXHRkYXRlOiBcIlBvciBmYXZvciwgZXNjcmliYSB1bmEgZmVjaGEgdsOhbGlkYS5cIixcclxuXHRkYXRlSVNPOiBcIlBvciBmYXZvciwgZXNjcmliYSB1bmEgZmVjaGEgKElTTykgdsOhbGlkYS5cIixcclxuXHRudW1iZXI6IFwiUG9yIGZhdm9yLCBlc2NyaWJhIHVuIG7Dum1lcm8gdsOhbGlkby5cIixcclxuXHRkaWdpdHM6IFwiUG9yIGZhdm9yLCBlc2NyaWJhIHPDs2xvIGTDrWdpdG9zLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiUG9yIGZhdm9yLCBlc2NyaWJhIHVuIG7Dum1lcm8gZGUgdGFyamV0YSB2w6FsaWRvLlwiLFxyXG5cdGVxdWFsVG86IFwiUG9yIGZhdm9yLCBlc2NyaWJhIGVsIG1pc21vIHZhbG9yIGRlIG51ZXZvLlwiLFxyXG5cdGV4dGVuc2lvbjogXCJQb3IgZmF2b3IsIGVzY3JpYmEgdW4gdmFsb3IgY29uIHVuYSBleHRlbnNpw7NuIHBlcm1pdGlkYS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIG5vIGVzY3JpYmEgbcOhcyBkZSB7MH0gY2FyYWN0ZXJlcy5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgbm8gZXNjcmliYSBtZW5vcyBkZSB7MH0gY2FyYWN0ZXJlcy5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBlc2NyaWJhIHVuIHZhbG9yIGVudHJlIHswfSB5IHsxfSBjYXJhY3RlcmVzLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGVzY3JpYmEgdW4gdmFsb3IgZW50cmUgezB9IHkgezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBlc2NyaWJhIHVuIHZhbG9yIG1lbm9yIG8gaWd1YWwgYSB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGVzY3JpYmEgdW4gdmFsb3IgbWF5b3IgbyBpZ3VhbCBhIHswfS5cIiApLFxyXG5cdG5pZkVTOiBcIlBvciBmYXZvciwgZXNjcmliYSB1biBOSUYgdsOhbGlkby5cIixcclxuXHRuaWVFUzogXCJQb3IgZmF2b3IsIGVzY3JpYmEgdW4gTklFIHbDoWxpZG8uXCIsXHJcblx0Y2lmRVM6IFwiUG9yIGZhdm9yLCBlc2NyaWJhIHVuIENJRiB2w6FsaWRvLlwiXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEVUIChFc3RvbmlhbjsgZWVzdGksIGVlc3RpIGtlZWwpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJTZWUgdsOkbGkgcGVhYiBvbGVtYSB0w6RpZGV0dWQuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGFsdW4gc2lzZXN0YWdlIHbDpGhlbSBrdWkgezB9IHTDpGhlbcOkcmtpLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGFsdW4gc2lzZXN0YWdlIHbDpGhlbWFsdCB7MH0gdMOkaGVtw6Rya2kuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBhbHVuIHNpc2VzdGFnZSB2w6TDpHJ0dXMgdmFoZW1pa3VzIHswfSBrdW5pIHsxfSB0w6RoZW3DpHJraS5cIiApLFxyXG5cdGVtYWlsOiBcIlBhbHVuIHNpc2VzdGFnZSBrb3JyZWt0bmUgZS1tYWlsaSBhYWRyZXNzLlwiLFxyXG5cdHVybDogXCJQYWx1biBzaXNlc3RhZ2Uga29ycmVrdG5lIFVSTC5cIixcclxuXHRkYXRlOiBcIlBhbHVuIHNpc2VzdGFnZSBrb3JyZWt0bmUga3V1cMOkZXYuXCIsXHJcblx0ZGF0ZUlTTzogXCJQYWx1biBzaXNlc3RhZ2Uga29ycmVrdG5lIGt1dXDDpGV2IChZWVlZLU1NLUREKS5cIixcclxuXHRudW1iZXI6IFwiUGFsdW4gc2lzZXN0YWdlIGtvcnJla3RuZSBudW1iZXIuXCIsXHJcblx0ZGlnaXRzOiBcIlBhbHVuIHNpc2VzdGFnZSBhaW51bHQgbnVtYnJlaWQuXCIsXHJcblx0ZXF1YWxUbzogXCJQYWx1biBzaXNlc3RhZ2Ugc2FtYSB2w6TDpHJ0dXMgdXVlc3RpLlwiLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGFsdW4gc2lzZXN0YWdlIHbDpMOkcnR1cyB2YWhlbWlrdXMgezB9IGt1bmkgezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGFsdW4gc2lzZXN0YWdlIHbDpMOkcnR1cywgbWlzIG9uIHbDpGlrc2VtIHbDtWkgdsO1cmRuZSBhcnZ1Z2EgezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUGFsdW4gc2lzZXN0YWdlIHbDpMOkcnR1cywgbWlzIG9uIHN1dXJlbSB2w7VpIHbDtXJkbmUgYXJ2dWdhIHswfS5cIiApLFxyXG5cdGNyZWRpdGNhcmQ6IFwiUGFsdW4gc2lzZXN0YWdlIGtvcnJla3RuZSBrcmVkaWl0a2FhcmRpIG51bWJlci5cIlxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBFVSAoQmFzcXVlOyBldXNrYXJhLCBldXNrZXJhKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiRXJlbXUgaGF1IGJlaGFycmV6a29hIGRhLlwiLFxyXG5cdHJlbW90ZTogXCJNZXNlZGV6LCBiZXRlIGVyZW11IGhhdS5cIixcclxuXHRlbWFpbDogXCJNZXNlZGV6LCBpZGF0emkgYmFsaW96a28gcG9zdGEgaGVsYmlkZSBiYXQuXCIsXHJcblx0dXJsOiBcIk1lc2VkZXosIGlkYXR6aSBiYWxpb3prbyBVUkwgYmF0LlwiLFxyXG5cdGRhdGU6IFwiTWVzZWRleiwgaWRhdHppIGJhbGlvemtvIGRhdGEgYmF0LlwiLFxyXG5cdGRhdGVJU086IFwiTWVzZWRleiwgaWRhdHppIGJhbGlvemtvIChJU08pIGRhdGEgYmF0LlwiLFxyXG5cdG51bWJlcjogXCJNZXNlZGV6LCBpZGF0emkgYmFsaW96a28gemVuYmFraSBvc28gYmF0LlwiLFxyXG5cdGRpZ2l0czogXCJNZXNlZGV6LCBpZGF0emkgZGlnaXR1YWsgc29pbGlrLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiTWVzZWRleiwgaWRhdHppIGJhbGlvemtvIHR4YXJ0ZWwgemVuYmFraSBiYXQuXCIsXHJcblx0ZXF1YWxUbzogXCJNZXNlZGV6LCBpZGF0emkgYmVyZGluYSBiZXJyaXJvIGVyZS5cIixcclxuXHRleHRlbnNpb246IFwiTWVzZWRleiwgaWRhdHppIG9uYXJ0dXRha28gbHV6YXBlbmEgZHVlbiBiYWxpbyBiYXQuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTWVzZWRleiwgZXogaWRhdHppIHswfSBrYXJha3RlcmUgYmFpbm8gZ2VoaWFnby5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIk1lc2VkZXosIGV6IGlkYXR6aSB7MH0ga2FyYWt0ZXJlIGJhaW5vIGd1dHhpYWdvLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJNZXNlZGV6LCBpZGF0emkgezB9IGV0YSB7MX0ga2FyYWt0ZXJlIGFydGVrbyBiYWxpbyBiYXQuXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIk1lc2VkZXosIGlkYXR6aSB7MH0gZXRhIHsxfSBhcnRla28gYmFsaW8gYmF0LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTWVzZWRleiwgaWRhdHppIHswfSBlZG8gdHhpa2lhZ29hIGRlbiBiYWxpbyBiYXQuXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJNZXNlZGV6LCBpZGF0emkgezB9IGVkbyBoYW5kaWFnb2EgZGVuIGJhbGlvIGJhdC5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEZBIChQZXJzaWFuOyDZgdin2LHYs9uMKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi2KraqdmF24zZhCDYp9uM2YYg2YHbjNmE2K8g2KfYrNio2KfYsduMINin2LPYqi5cIixcclxuXHRyZW1vdGU6IFwi2YTYt9mB2Kcg2KfbjNmGINmB24zZhNivINix2Kcg2KrYtdit24zYrSDaqdmG24zYry5cIixcclxuXHRlbWFpbDogXCLZhNi32YHYpyDbjNqpINin24zZhduM2YQg2LXYrduM2K0g2YjYp9ix2K8g2qnZhtuM2K8uXCIsXHJcblx0dXJsOiBcItmE2LfZgdinINii2K/YsdizINi12K3bjNitINmI2KfYsdivINqp2YbbjNivLlwiLFxyXG5cdGRhdGU6IFwi2YTYt9mB2Kcg2KrYp9ix24zYriDYtdit24zYrSDZiNin2LHYryDaqdmG24zYry5cIixcclxuXHRkYXRlRkE6IFwi2YTYt9mB2Kcg24zaqSDYqtin2LHbjNiuINi12K3bjNitINmI2KfYsdivINqp2YbbjNivLlwiLFxyXG5cdGRhdGVJU086IFwi2YTYt9mB2Kcg2KrYp9ix24zYriDYtdit24zYrSDZiNin2LHYryDaqdmG24zYryAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwi2YTYt9mB2Kcg2LnYr9ivINi12K3bjNitINmI2KfYsdivINqp2YbbjNivLlwiLFxyXG5cdGRpZ2l0czogXCLZhNi32YHYpyDYqtmG2YfYpyDYsdmC2YUg2YjYp9ix2K8g2qnZhtuM2K8uXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLZhNi32YHYpyDaqdix24zYr9uM2Kog2qnYp9ix2Kog2LXYrduM2K0g2YjYp9ix2K8g2qnZhtuM2K8uXCIsXHJcblx0ZXF1YWxUbzogXCLZhNi32YHYpyDZhdmC2K/Yp9ixINio2LHYp9io2LHbjCDZiNin2LHYryDaqdmG24zYry5cIixcclxuXHRleHRlbnNpb246IFwi2YTYt9mB2Kcg2YXZgtiv2KfYsduMINmI2KfYsdivINqp2YbbjNivINqp2YdcIixcclxuXHRhbHBoYW51bWVyaWM6IFwi2YTYt9mB2Kcg2YXZgtiv2KfYsSDYsdinINi52K/YryAo2KfZhtqv2YTbjNiz24wpINmI2KfYsdivINqp2YbbjNivLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItmE2LfZgdinINio24zYtNiq2LEg2KfYsiB7MH0g2K3YsdmBINmI2KfYsdivINmG2qnZhtuM2K8uXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLZhNi32YHYpyDaqdmF2KrYsSDYp9iyIHswfSDYrdix2YEg2YjYp9ix2K8g2YbaqdmG24zYry5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2YTYt9mB2Kcg2YXZgtiv2KfYsduMINio24zZhiB7MH0g2KrYpyB7MX0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLZhNi32YHYpyDZhdmC2K/Yp9ix24wg2KjbjNmGIHswfSDYqtinIHsxfSDYrdix2YEg2YjYp9ix2K8g2qnZhtuM2K8uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLZhNi32YHYpyDZhdmC2K/Yp9ix24wg2qnZhdiq2LEg2KfYsiB7MH0g2YjYp9ix2K8g2qnZhtuM2K8uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLZhNi32YHYpyDZhdmC2K/Yp9ix24wg2KjbjNi02KrYsSDYp9iyIHswfSDZiNin2LHYryDaqdmG24zYry5cIiApLFxyXG5cdG1pbldvcmRzOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2YTYt9mB2Kcg2K3Yr9in2YLZhCB7MH0g2qnZhNmF2Ycg2YjYp9ix2K8g2qnZhtuM2K8uXCIgKSxcclxuXHRtYXhXb3JkczogJC52YWxpZGF0b3IuZm9ybWF0KCBcItmE2LfZgdinINit2K/Yp9qp2KvYsSB7MH0g2qnZhNmF2Ycg2YjYp9ix2K8g2qnZhtuM2K8uXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBGSSAoRmlubmlzaDsgc3VvbWksIHN1b21lbiBraWVsaSlcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIlQmYXVtbDttJmF1bWw7IGtlbnR0JmF1bWw7IG9uIHBha29sbGluZW4uXCIsXHJcblx0ZW1haWw6IFwiU3kmb3VtbDt0JmF1bWw7IG9pa2VhIHMmYXVtbDtoayZvdW1sO3Bvc3Rpb3NvaXRlLlwiLFxyXG5cdHVybDogXCJTeSZvdW1sO3QmYXVtbDsgb2lrZWEgVVJMLW9zb2l0ZS5cIixcclxuXHRkYXRlOiBcIlN5Jm91bWw7dCZhdW1sOyBvaWtlYSBwJmF1bWw7aXYmYXVtbDttJmF1bWw7JmF1bWw7ciZhdW1sOy5cIixcclxuXHRkYXRlSVNPOiBcIlN5Jm91bWw7dCZhdW1sOyBvaWtlYSBwJmF1bWw7aXYmYXVtbDttJmF1bWw7JmF1bWw7ciZhdW1sOyBtdW9kb3NzYSBWVlZWLUtLLVBQLlwiLFxyXG5cdG51bWJlcjogXCJTeSZvdW1sO3QmYXVtbDsgbHVrdS5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlN5Jm91bWw7dCZhdW1sOyB2b2ltYXNzYSBvbGV2YSBsdW90dG9rb3J0dGludW1lcm8uXCIsXHJcblx0ZGlnaXRzOiBcIlN5Jm91bWw7dCZhdW1sOyBwZWxrJmF1bWw7c3QmYXVtbDsmYXVtbDtuIG51bWVyb2l0YS5cIixcclxuXHRlcXVhbFRvOiBcIlN5Jm91bWw7dCZhdW1sOyBzYW1hIGFydm8gdXVkZXN0YWFuLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZvaXQgc3kmb3VtbDt0dCZhdW1sOyZhdW1sOyBlbmludCZhdW1sOyZhdW1sO24gezB9IG1lcmtraSZhdW1sOy5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlYmYXVtbDtoaW50JmF1bWw7JmF1bWw7biB7MH0gbWVya2tpJmF1bWw7LlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTeSZvdW1sO3QmYXVtbDsgdiZhdW1sO2hpbnQmYXVtbDsmYXVtbDtuIHswfSBqYSBlbmludCZhdW1sOyZhdW1sO24gezF9IG1lcmtraSZhdW1sOy5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU3kmb3VtbDt0JmF1bWw7IGFydm8gdiZhdW1sO2xpbHQmYXVtbDsgezB9Jm5kYXNoO3sxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlN5Jm91bWw7dCZhdW1sOyBhcnZvLCBqb2thIG9uIGVuaW50JmF1bWw7JmF1bWw7biB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTeSZvdW1sO3QmYXVtbDsgYXJ2bywgam9rYSBvbiB2JmF1bWw7aGludCZhdW1sOyZhdW1sO24gezB9LlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogRlIgKEZyZW5jaDsgZnJhbsOnYWlzKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiQ2UgY2hhbXAgZXN0IG9ibGlnYXRvaXJlLlwiLFxyXG5cdHJlbW90ZTogXCJWZXVpbGxleiBjb3JyaWdlciBjZSBjaGFtcC5cIixcclxuXHRlbWFpbDogXCJWZXVpbGxleiBmb3VybmlyIHVuZSBhZHJlc3NlIMOpbGVjdHJvbmlxdWUgdmFsaWRlLlwiLFxyXG5cdHVybDogXCJWZXVpbGxleiBmb3VybmlyIHVuZSBhZHJlc3NlIFVSTCB2YWxpZGUuXCIsXHJcblx0ZGF0ZTogXCJWZXVpbGxleiBmb3VybmlyIHVuZSBkYXRlIHZhbGlkZS5cIixcclxuXHRkYXRlSVNPOiBcIlZldWlsbGV6IGZvdXJuaXIgdW5lIGRhdGUgdmFsaWRlIChJU08pLlwiLFxyXG5cdG51bWJlcjogXCJWZXVpbGxleiBmb3VybmlyIHVuIG51bcOpcm8gdmFsaWRlLlwiLFxyXG5cdGRpZ2l0czogXCJWZXVpbGxleiBmb3VybmlyIHNldWxlbWVudCBkZXMgY2hpZmZyZXMuXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCJWZXVpbGxleiBmb3VybmlyIHVuIG51bcOpcm8gZGUgY2FydGUgZGUgY3LDqWRpdCB2YWxpZGUuXCIsXHJcblx0ZXF1YWxUbzogXCJWZXVpbGxleiBmb3VybmlyIGVuY29yZSBsYSBtw6ptZSB2YWxldXIuXCIsXHJcblx0bm90RXF1YWxUbzogXCJWZXVpbGxleiBmb3VybmlyIHVuZSB2YWxldXIgZGlmZsOpcmVudGUsIGxlcyB2YWxldXJzIG5lIGRvaXZlbnQgcGFzIMOqdHJlIGlkZW50aXF1ZXMuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIlZldWlsbGV6IGZvdXJuaXIgdW5lIHZhbGV1ciBhdmVjIHVuZSBleHRlbnNpb24gdmFsaWRlLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZldWlsbGV6IGZvdXJuaXIgYXUgcGx1cyB7MH0gY2FyYWN0w6hyZXMuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJWZXVpbGxleiBmb3VybmlyIGF1IG1vaW5zIHswfSBjYXJhY3TDqHJlcy5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVmV1aWxsZXogZm91cm5pciB1bmUgdmFsZXVyIHF1aSBjb250aWVudCBlbnRyZSB7MH0gZXQgezF9IGNhcmFjdMOocmVzLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJWZXVpbGxleiBmb3VybmlyIHVuZSB2YWxldXIgZW50cmUgezB9IGV0IHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZldWlsbGV6IGZvdXJuaXIgdW5lIHZhbGV1ciBpbmbDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVmV1aWxsZXogZm91cm5pciB1bmUgdmFsZXVyIHN1cMOpcmlldXJlIG91IMOpZ2FsZSDDoCB7MH0uXCIgKSxcclxuXHRzdGVwOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVmV1aWxsZXogZm91cm5pciB1bmUgdmFsZXVyIG11bHRpcGxlIGRlIHswfS5cIiApLFxyXG5cdG1heFdvcmRzOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVmV1aWxsZXogZm91cm5pciBhdSBwbHVzIHswfSBtb3RzLlwiICksXHJcblx0bWluV29yZHM6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJWZXVpbGxleiBmb3VybmlyIGF1IG1vaW5zIHswfSBtb3RzLlwiICksXHJcblx0cmFuZ2VXb3JkczogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZldWlsbGV6IGZvdXJuaXIgZW50cmUgezB9IGV0IHsxfSBtb3RzLlwiICksXHJcblx0bGV0dGVyc3dpdGhiYXNpY3B1bmM6IFwiVmV1aWxsZXogZm91cm5pciBzZXVsZW1lbnQgZGVzIGxldHRyZXMgZXQgZGVzIHNpZ25lcyBkZSBwb25jdHVhdGlvbi5cIixcclxuXHRhbHBoYW51bWVyaWM6IFwiVmV1aWxsZXogZm91cm5pciBzZXVsZW1lbnQgZGVzIGxldHRyZXMsIG5vbWJyZXMsIGVzcGFjZXMgZXQgc291bGlnbmFnZXMuXCIsXHJcblx0bGV0dGVyc29ubHk6IFwiVmV1aWxsZXogZm91cm5pciBzZXVsZW1lbnQgZGVzIGxldHRyZXMuXCIsXHJcblx0bm93aGl0ZXNwYWNlOiBcIlZldWlsbGV6IG5lIHBhcyBpbnNjcmlyZSBkJ2VzcGFjZXMgYmxhbmNzLlwiLFxyXG5cdHppcHJhbmdlOiBcIlZldWlsbGV6IGZvdXJuaXIgdW4gY29kZSBwb3N0YWwgZW50cmUgOTAyeHgteHh4eCBldCA5MDUteHgteHh4eC5cIixcclxuXHRpbnRlZ2VyOiBcIlZldWlsbGV6IGZvdXJuaXIgdW4gbm9tYnJlIG5vbiBkw6ljaW1hbCBxdWkgZXN0IHBvc2l0aWYgb3UgbsOpZ2F0aWYuXCIsXHJcblx0dmluVVM6IFwiVmV1aWxsZXogZm91cm5pciB1biBudW3DqXJvIGQnaWRlbnRpZmljYXRpb24gZHUgdsOpaGljdWxlIChWSU4pLlwiLFxyXG5cdGRhdGVJVEE6IFwiVmV1aWxsZXogZm91cm5pciB1bmUgZGF0ZSB2YWxpZGUuXCIsXHJcblx0dGltZTogXCJWZXVpbGxleiBmb3VybmlyIHVuZSBoZXVyZSB2YWxpZGUgZW50cmUgMDA6MDAgZXQgMjM6NTkuXCIsXHJcblx0cGhvbmVVUzogXCJWZXVpbGxleiBmb3VybmlyIHVuIG51bcOpcm8gZGUgdMOpbMOpcGhvbmUgdmFsaWRlLlwiLFxyXG5cdHBob25lVUs6IFwiVmV1aWxsZXogZm91cm5pciB1biBudW3DqXJvIGRlIHTDqWzDqXBob25lIHZhbGlkZS5cIixcclxuXHRtb2JpbGVVSzogXCJWZXVpbGxleiBmb3VybmlyIHVuIG51bcOpcm8gZGUgdMOpbMOpcGhvbmUgbW9iaWxlIHZhbGlkZS5cIixcclxuXHRzdHJpcHBlZG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZldWlsbGV6IGZvdXJuaXIgYXUgbW9pbnMgezB9IGNhcmFjdMOocmVzLlwiICksXHJcblx0ZW1haWwyOiBcIlZldWlsbGV6IGZvdXJuaXIgdW5lIGFkcmVzc2Ugw6lsZWN0cm9uaXF1ZSB2YWxpZGUuXCIsXHJcblx0dXJsMjogXCJWZXVpbGxleiBmb3VybmlyIHVuZSBhZHJlc3NlIFVSTCB2YWxpZGUuXCIsXHJcblx0Y3JlZGl0Y2FyZHR5cGVzOiBcIlZldWlsbGV6IGZvdXJuaXIgdW4gbnVtw6lybyBkZSBjYXJ0ZSBkZSBjcsOpZGl0IHZhbGlkZS5cIixcclxuXHRpcHY0OiBcIlZldWlsbGV6IGZvdXJuaXIgdW5lIGFkcmVzc2UgSVAgdjQgdmFsaWRlLlwiLFxyXG5cdGlwdjY6IFwiVmV1aWxsZXogZm91cm5pciB1bmUgYWRyZXNzZSBJUCB2NiB2YWxpZGUuXCIsXHJcblx0cmVxdWlyZV9mcm9tX2dyb3VwOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVmV1aWxsZXogZm91cm5pciBhdSBtb2lucyB7MH0gZGUgY2VzIGNoYW1wcy5cIiApLFxyXG5cdG5pZkVTOiBcIlZldWlsbGV6IGZvdXJuaXIgdW4gbnVtw6lybyBOSUYgdmFsaWRlLlwiLFxyXG5cdG5pZUVTOiBcIlZldWlsbGV6IGZvdXJuaXIgdW4gbnVtw6lybyBOSUUgdmFsaWRlLlwiLFxyXG5cdGNpZkVTOiBcIlZldWlsbGV6IGZvdXJuaXIgdW4gbnVtw6lybyBDSUYgdmFsaWRlLlwiLFxyXG5cdHBvc3RhbENvZGVDQTogXCJWZXVpbGxleiBmb3VybmlyIHVuIGNvZGUgcG9zdGFsIHZhbGlkZS5cIlxyXG59ICk7XHJcbiIsIi8qKlxyXG4gKiBAYXV0aG9yICBAdGF0b2Nhc3RlciA8a3V0YWxpYXRhdG9AZ21haWwuY29tPlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogR0UgKEdlb3JnaWFuOyDhg6Xhg5Dhg6Dhg5fhg6Phg5rhg5gpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCLhg5Thg6Eg4YOV4YOU4YOa4YOYIOGDoeGDkOGDleGDkOGDmuGDk+GDlOGDkeGDo+GDmuGDneGDkFwiLFxyXG5cdHJlbW90ZTogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOQ4YOh4YOs4YOd4YOg4YOd4YOXLlwiLFxyXG5cdGVtYWlsOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOh4YOs4YOd4YOg4YOYIOGDpOGDneGDoOGDm+GDkOGDouGDmOGDly5cIixcclxuXHR1cmw6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg6Hhg6zhg53hg6Dhg5gg4YOk4YOd4YOg4YOb4YOQ4YOi4YOY4YOXLlwiLFxyXG5cdGRhdGU6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg6Hhg6zhg53hg6Dhg5gg4YOX4YOQ4YOg4YOY4YOm4YOYLlwiLFxyXG5cdGRhdGVJU086IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg6Hhg6zhg53hg6Dhg5gg4YOk4YOd4YOg4YOb4YOQ4YOi4YOY4YOXIChJU08pLlwiLFxyXG5cdG51bWJlcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDoOGDmOGDquGDruGDleGDmC5cIixcclxuXHRkaWdpdHM6IFwi4YOT4YOQ4YOo4YOV4YOU4YOR4YOj4YOa4YOY4YOQIOGDm+GDruGDneGDmuGDneGDkyDhg6rhg5jhg6Thg6Dhg5Thg5Hhg5guXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDoeGDrOGDneGDoOGDmCDhg6Thg53hg6Dhg5vhg5Dhg6Lhg5jhg6Eg4YOR4YOQ4YOg4YOQ4YOX4YOY4YOhIOGDmeGDneGDk+GDmC5cIixcclxuXHRlcXVhbFRvOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOY4YOS4YOY4YOV4YOUIOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDkeGDkC5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDkOGDoOGDkCDhg6Phg5vhg5Thg6Lhg5Thg6EgezB9IOGDoeGDmOGDm+GDkeGDneGDmuGDneGDoeGDmC5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuGDqOGDlOGDmOGDp+GDleGDkOGDnOGDlOGDlyDhg5vhg5jhg5zhg5jhg5vhg6Phg5sgezB9IOGDoeGDmOGDm+GDkeGDneGDmuGDnS5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyB7MH0gLeGDk+GDkOGDnCB7MX0gLeGDm+GDk+GDlCDhg6Dhg5Dhg53hg5Phg5Thg5zhg53hg5Hhg5jhg6Eg4YOh4YOY4YOb4YOR4YOd4YOa4YOd4YOU4YOR4YOYLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cgezB9IC3hg6Hhg5AgezF9IC3hg6Eg4YOo4YOd4YOg4YOY4YOhLlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg5vhg5zhg5jhg6jhg5Xhg5zhg5Thg5rhg53hg5Hhg5Ag4YOc4YOQ4YOZ4YOa4YOU4YOR4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5ggezB9IC3hg6EuXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDkeGDkCDhg5vhg5Thg6Lhg5gg4YOQ4YOcIOGDouGDneGDmuGDmCB7MH0gLeGDoS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEdMIChHYWxpY2lhbjsgR2FsZWdvKVxyXG4gKi9cclxuKCBmdW5jdGlvbiggJCApIHtcclxuXHQkLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRcdHJlcXVpcmVkOiBcIkVzdGUgY2FtcG8gw6kgb2JyaWdhdG9yaW8uXCIsXHJcblx0XHRyZW1vdGU6IFwiUG9yIGZhdm9yLCBjdWJyZSBlc3RlIGNhbXBvLlwiLFxyXG5cdFx0ZW1haWw6IFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuaGEgZGlyZWNjacOzbiBkZSBjb3JyZW8gdsOhbGlkYS5cIixcclxuXHRcdHVybDogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW5oYSBVUkwgdsOhbGlkYS5cIixcclxuXHRcdGRhdGU6IFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuaGEgZGF0YSB2w6FsaWRhLlwiLFxyXG5cdFx0ZGF0ZUlTTzogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW5oYSBkYXRhIChJU08pIHbDoWxpZGEuXCIsXHJcblx0XHRudW1iZXI6IFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuIG7Dum1lcm8gdsOhbGlkby5cIixcclxuXHRcdGRpZ2l0czogXCJQb3IgZmF2b3IsIGVzY3JpYmUgc8OzIGTDrXhpdG9zLlwiLFxyXG5cdFx0Y3JlZGl0Y2FyZDogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW4gbsO6bWVybyBkZSB0YXJ4ZXRhIHbDoWxpZG8uXCIsXHJcblx0XHRlcXVhbFRvOiBcIlBvciBmYXZvciwgZXNjcmliZSBvIG1lc21vIHZhbG9yIGRlIG5vdm8uXCIsXHJcblx0XHRleHRlbnNpb246IFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuIHZhbG9yIGN1bmhhIGV4dGVuc2nDs24gYWNlcHRhZGEuXCIsXHJcblx0XHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIG5vbiBlc2NyaWJhcyBtw6FpcyBkZSB7MH0gY2FyYWN0ZXJlcy5cIiApLFxyXG5cdFx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBub24gZXNjcmliYXMgbWVub3MgZGUgezB9IGNhcmFjdGVyZXMuXCIgKSxcclxuXHRcdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuIHZhbG9yIGVudHJlIHswfSBlIHsxfSBjYXJhY3RlcmVzLlwiICksXHJcblx0XHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZXNjcmliZSB1biB2YWxvciBlbnRyZSB7MH0gZSB7MX0uXCIgKSxcclxuXHRcdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZXNjcmliZSB1biB2YWxvciBtZW5vciBvdSBpZ3VhbCBhIHswfS5cIiApLFxyXG5cdFx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBlc2NyaWJlIHVuIHZhbG9yIG1haW9yIG91IGlndWFsIGEgezB9LlwiICksXHJcblx0XHRuaWZFUzogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW4gTklGIHbDoWxpZG8uXCIsXHJcblx0XHRuaWVFUzogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW4gTklFIHbDoWxpZG8uXCIsXHJcblx0XHRjaWZFUzogXCJQb3IgZmF2b3IsIGVzY3JpYmUgdW4gQ0lGIHbDoWxpZG8uXCJcclxuXHR9ICk7XHJcbn0oIGpRdWVyeSApICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBIRSAoSGVicmV3OyDXoteR16jXmdeqKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi15TXqdeT15Qg15TXlteUINeU15nXoNeVINep15PXlCDXl9eV15HXlFwiLFxyXG5cdHJlbW90ZTogXCLXoNeQINec16rXp9efINep15PXlCDXlteUXCIsXHJcblx0ZW1haWw6IFwi16DXkCDXnNee15zXkCDXm9eq15XXkdeqINeT15XXkFxcXCLXnCDXl9eV16fXmdeqXCIsXHJcblx0dXJsOiBcIteg15Ag15zXntec15Ag15vXqteV15HXqiDXkNeZ16DXmNeo16DXmCDXl9eV16fXmdeqXCIsXHJcblx0ZGF0ZTogXCLXoNeQINec157XnNeQINeq15DXqNeZ15og15fXlden15lcIixcclxuXHRkYXRlSVNPOiBcIteg15Ag15zXntec15Ag16rXkNeo15nXmiDXl9eV16fXmSAoSVNPKVwiLFxyXG5cdG51bWJlcjogXCLXoNeQINec157XnNeQINee16HXpNeoXCIsXHJcblx0ZGlnaXRzOiBcIteg15Ag15zXntec15Ag16jXpyDXnteh16TXqNeZ151cIixcclxuXHRjcmVkaXRjYXJkOiBcIteg15Ag15zXntec15Ag157Xodek16gg15vXqNeY15nXoSDXkNep16jXkNeZINeX15XXp9eZXCIsXHJcblx0ZXF1YWxUbzogXCLXoNeQINec157XnNeQINeQ16og15DXldeq15Ug16LXqNeaINep15XXkVwiLFxyXG5cdGV4dGVuc2lvbjogXCLXoNeQINec157XnNeQINei16jXmiDXotedINeh15nXldee16og15fXlden15nXqlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIi7XoNeQINec15Ag15zXntec15Ag15nXldeq16gg154tIHswfSDXqteV15XXmdedXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLXoNeQINec157XnNeQINec16TXl9eV16ogezB9INeq15XXldeZ151cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi16DXkCDXnNee15zXkCDXoteo15og15HXmdefIHswfSDXnC0gezF9INeq15XXldeZ151cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi16DXkCDXnNee15zXkCDXoteo15og15HXmdefIHswfSDXnC0gezF9XCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLXoNeQINec157XnNeQINei16jXmiDXp9eY158g15DXlSDXqdeV15XXlCDXnC0gezB9XCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLXoNeQINec157XnNeQINei16jXmiDXkteT15XXnCDXkNeVINep15XXldeUINecLSB7MH1cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEhSIChDcm9hdGlhOyBocnZhdHNraSBqZXppaylcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIk92byBwb2xqZSBqZSBvYmF2ZXpuby5cIixcclxuXHRyZW1vdGU6IFwiT3ZvIHBvbGplIHRyZWJhIHBvcHJhdml0aS5cIixcclxuXHRlbWFpbDogXCJVbmVzaXRlIGlzcHJhdm51IGUtbWFpbCBhZHJlc3UuXCIsXHJcblx0dXJsOiBcIlVuZXNpdGUgaXNwcmF2YW4gVVJMLlwiLFxyXG5cdGRhdGU6IFwiVW5lc2l0ZSBpc3ByYXZhbiBkYXR1bS5cIixcclxuXHRkYXRlSVNPOiBcIlVuZXNpdGUgaXNwcmF2YW4gZGF0dW0gKElTTykuXCIsXHJcblx0bnVtYmVyOiBcIlVuZXNpdGUgaXNwcmF2YW4gYnJvai5cIixcclxuXHRkaWdpdHM6IFwiVW5lc2l0ZSBzYW1vIGJyb2pldmUuXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCJVbmVzaXRlIGlzcHJhdmFuIGJyb2oga3JlZGl0bmUga2FydGljZS5cIixcclxuXHRlcXVhbFRvOiBcIlVuZXNpdGUgcG9ub3ZvIGlzdHUgdnJpamVkbm9zdC5cIixcclxuXHRleHRlbnNpb246IFwiVW5lc2l0ZSB2cmlqZWRub3N0IHNhIGlzcHJhdm5vbSBla3N0ZW56aWpvbS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJNYWtzaW1hbG5pIGJyb2ogem5ha292YSBqZSB7MH0gLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTWluaW1hbG5pIGJyb2ogem5ha292YSBqZSB7MH0gLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJVbmVzaXRlIHZyaWplZG5vc3QgaXptZcSRdSB7MH0gaSB7MX0gem5ha292YS5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVW5lc2l0ZSB2cmlqZWRub3N0IGl6bWXEkXUgezB9IGkgezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVW5lc2l0ZSB2cmlqZWRub3N0IG1hbmp1IGlsaSBqZWRuYWt1IHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlVuZXNpdGUgdnJpamVkbm9zdCB2ZcSHdSBpbGkgamVkbmFrdSB7MH0uXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBIVSAoSHVuZ2FyaWFuOyBNYWd5YXIpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJLw7Z0ZWxlesWRIG1lZ2FkbmkuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTGVnZmVsamViYiB7MH0ga2FyYWt0ZXIgaG9zc3rDuiBsZWd5ZW4uXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJMZWdhbMOhYmIgezB9IGthcmFrdGVyIGhvc3N6w7ogbGVneWVuLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJMZWdhbMOhYmIgezB9IMOpcyBsZWdmZWxqZWJiIHsxfSBrYXJha3RlciBob3NzesO6IGxlZ3llbi5cIiApLFxyXG5cdGVtYWlsOiBcIsOJcnbDqW55ZXMgZS1tYWlsIGPDrW1uZWsga2VsbCBsZW5uaWUuXCIsXHJcblx0dXJsOiBcIsOJcnbDqW55ZXMgVVJMLW5layBrZWxsIGxlbm5pZS5cIixcclxuXHRkYXRlOiBcIkTDoXR1bW5hayBrZWxsIGxlbm5pZS5cIixcclxuXHRudW1iZXI6IFwiU3rDoW1uYWsga2VsbCBsZW5uaWUuXCIsXHJcblx0ZGlnaXRzOiBcIkNzYWsgc3rDoW1qZWd5ZWsgbGVoZXRuZWsuXCIsXHJcblx0ZXF1YWxUbzogXCJNZWcga2VsbCBlZ3llem5pZSBhIGvDqXQgw6lydMOpa25lay5cIixcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcInswfSDDqXMgezF9IGvDtnrDqSBrZWxsIGVzbmllLlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTmVtIGxlaGV0IG5hZ3lvYmIsIG1pbnQgezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTmVtIGxlaGV0IGtpc2ViYiwgbWludCB7MH0uXCIgKSxcclxuXHRjcmVkaXRjYXJkOiBcIsOJcnbDqW55ZXMgaGl0ZWxrw6FydHlhc3rDoW1uYWsga2VsbCBsZW5uaWUuXCIsXHJcblx0cmVtb3RlOiBcIkvDqXJlbSBqYXbDrXRzYSBraSBlenQgYSBtZXrFkXQuXCIsXHJcblx0ZGF0ZUlTTzogXCJLw6lyZW0gw61yam9uIGJlIGVneSDDqXJ2w6lueWVzIGTDoXR1bW90IChJU08pLlwiLFxyXG5cdHN0ZXA6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBIHswfSBlZ3lpayB0w7ZiYnN6w7Zyw7Zzw6l0IGFkamEgbWVnLlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogSFlfQU0gKEFybWVuaWFuOyDVsNWh1bXVpdaA1aXVtiDVrNWl1abVuNaCKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi1YrVodaA1b/VodWk1avWgCDVrNaA1aHWgdW01aHVtiDVpNWh1bfVv1wiLFxyXG5cdHJlbW90ZTogXCLVhtWl1oDVtNW41oLVrtWl1oQg1bPVq9W31b8g1aHWgNWq1aXWhNWoXCIsXHJcblx0ZW1haWw6IFwi1YbVpdaA1bTVuNaC1a7VpdaEINW+1aHVvtWl1oAg1afVrNWl1a/Vv9aA1bjVttWh1bXVq9W2INaD1bjVvdW/1asg1bDVodW91oHVpVwiLFxyXG5cdHVybDogXCLVhtWl1oDVtNW41oLVrtWl1oQg1b7VodW+1aXWgCBVUkxcIixcclxuXHRkYXRlOiBcItWG1aXWgNW01bjWgtWu1aXWhCDVvtWh1b7VpdaAINWh1bTVvdWh1anVq9W+XCIsXHJcblx0ZGF0ZUlTTzogXCLVhtWl1oDVtNW41oLVrtWl1oQgSVNPINaG1bjWgNW01aHVv9W41b4g1b7VodW+1aXWgCDVodW01b3VodWp1avVvtaJXCIsXHJcblx0bnVtYmVyOiBcItWG1aXWgNW01bjWgtWu1aXWhCDVqdWr1b5cIixcclxuXHRkaWdpdHM6IFwi1YbVpdaA1bTVuNaC1a7VpdaEINW01avVodW11bYg1anVvtWl1oBcIixcclxuXHRjcmVkaXRjYXJkOiBcItWG1aXWgNW01bjWgtWu1aXWhCDVs9Wr1bfVvyDVotWh1bbVr9Wh1bXVq9W2INaE1aHWgNW/1asg1bDVodW01aHWgFwiLFxyXG5cdGVxdWFsVG86IFwi1YbVpdaA1bTVuNaC1a7VpdaEINW01avWh9W21bjWgtW2INWh1oDVqtWl1oTVqCDWh9W9INW01aXVryDVodW21aPVodW0XCIsXHJcblx0ZXh0ZW5zaW9uOiBcItS41bbVv9aA1aXWhCDVs9Wr1bfVvyDVqNW21aTVrNWh1bbVuNaC1bTVuNW+INaG1aHVtdWsXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi1YbVpdaA1bTVuNaC1a7VpdaEINW41bkg1aHVvtWl1awg1oTVodW2IHswfSDVttWr1bdcIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItWG1aXWgNW01bjWgtWu1aXWhCDVuNW5INW61aHVr9Wh1b0g1oTVodW2IHswfSDVttWr1bdcIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi1YbVpdaA1bTVuNaC1a7VpdaEIHswfdaK1avWgSB7MX0g1aXWgNWv1aHWgNW41oLVqdW11aHVtNWiINWh1oDVqtWl1oRcIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi1YbVpdaA1bTVuNaC1a7VpdaEINWp1avVviB7MH3WitWr1oEgezF9INW01avVu9Wh1a/VodW11oTVuNaC1bRcIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItWG1aXWgNW01bjWgtWu1aXWhCDVqdWr1b4sINW41oDVqCDWg9W41oTWgCDVr9Wh1bQg1bDVodW+1aHVvdWh1oAg1afCoHswfdaK1avVtlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi1YbVpdaA1bTVuNaC1a7VpdaEINWp1avVviwg1bjWgNWoINW01aXVriDVr9Wh1bQg1bDVodW+1aHVvdWh1oAg1acgezB91orVq9W2XCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBJRCAoSW5kb25lc2lhOyBJbmRvbmVzaWFuKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiS29sb20gaW5pIGRpcGVybHVrYW4uXCIsXHJcblx0cmVtb3RlOiBcIkhhcmFwIGJlbmFya2FuIGtvbG9tIGluaS5cIixcclxuXHRlbWFpbDogXCJTaWxha2FuIG1hc3Vra2FuIGZvcm1hdCBlbWFpbCB5YW5nIGJlbmFyLlwiLFxyXG5cdHVybDogXCJTaWxha2FuIG1hc3Vra2FuIGZvcm1hdCBVUkwgeWFuZyBiZW5hci5cIixcclxuXHRkYXRlOiBcIlNpbGFrYW4gbWFzdWtrYW4gZm9ybWF0IHRhbmdnYWwgeWFuZyBiZW5hci5cIixcclxuXHRkYXRlSVNPOiBcIlNpbGFrYW4gbWFzdWtrYW4gZm9ybWF0IHRhbmdnYWwoSVNPKSB5YW5nIGJlbmFyLlwiLFxyXG5cdG51bWJlcjogXCJTaWxha2FuIG1hc3Vra2FuIGFuZ2thIHlhbmcgYmVuYXIuXCIsXHJcblx0ZGlnaXRzOiBcIkhhcmFwIG1hc3VrYW4gYW5na2Egc2FqYS5cIixcclxuXHRjcmVkaXRjYXJkOiBcIkhhcmFwIG1hc3Vra2FuIGZvcm1hdCBrYXJ0dSBrcmVkaXQgeWFuZyBiZW5hci5cIixcclxuXHRlcXVhbFRvOiBcIkhhcmFwIG1hc3Vra2FuIG5pbGFpIHlnIHNhbWEgZGVuZ2FuIHNlYmVsdW1ueWEuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiSW5wdXQgZGliYXRhc2kgaGFueWEgezB9IGthcmFrdGVyLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiSW5wdXQgdGlkYWsga3VyYW5nIGRhcmkgezB9IGthcmFrdGVyLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQYW5qYW5nIGthcmFrdGVyIHlnIGRpaXppbmthbiBhbnRhcmEgezB9IGRhbiB7MX0ga2FyYWt0ZXIuXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkhhcmFwIG1hc3Vra2FuIG5pbGFpIGFudGFyYSB7MH0gZGFuIHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkhhcmFwIG1hc3Vra2FuIG5pbGFpIGxlYmloIGtlY2lsIGF0YXUgc2FtYSBkZW5nYW4gezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiSGFyYXAgbWFzdWtrYW4gbmlsYWkgbGViaWggYmVzYXIgYXRhdSBzYW1hIGRlbmdhbiB7MH0uXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBJUyAoSWNlbGFuZGljOyDDrXNsZW5za2EpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCLDnmVzc2kgcmVpdHVyIGVyIG5hdcOwc3lubGVndXIuXCIsXHJcblx0cmVtb3RlOiBcIkxhZ2HDsHUgw75lbm5hbiByZWl0LlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlNsw6HDsHUgaW5uIG1lc3QgezB9IHN0YWZpLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2zDocOwdSBpbm4gbWlubnN0IHswfSBzdGFmaS5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2zDocOwdSBpbm4gbWlubnN0IHswfSBvZyBtZXN0IHsxfSBzdGFmaS5cIiApLFxyXG5cdGVtYWlsOiBcIlNsw6HDsHUgaW5uIGdpbHQgbmV0ZmFuZy5cIixcclxuXHR1cmw6IFwiU2zDocOwdSBpbm4gZ2lsZGEgdmVmc2zDs8OwLlwiLFxyXG5cdGRhdGU6IFwiU2zDocOwdSBpbm4gZ2lsZGEgZGFnc2V0bmluZ3UuXCIsXHJcblx0bnVtYmVyOiBcIlNsw6HDsHUgaW5uIHTDtmx1LlwiLFxyXG5cdGRpZ2l0czogXCJTbMOhw7B1IGlubiB0w7ZsdXN0YWZpIGVpbmfDtm5ndS5cIixcclxuXHRlcXVhbFRvOiBcIlNsw6HDsHUgc2FtYSBnaWxkaSBpbm4gYWZ0dXIuXCIsXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTbMOhw7B1IGlubiBnaWxkaSBtaWxsaSB7MH0gb2cgezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2zDocOwdSBpbm4gZ2lsZGkgc2VtIGVyIG1pbm5hIGVuIGXDsGEgamFmbnQgb2cgezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2zDocOwdSBpbm4gZ2lsZGkgc2VtIGVyIHN0w6ZycmEgZW4gZcOwYSBqYWZudCBvZyB7MH0uXCIgKSxcclxuXHRjcmVkaXRjYXJkOiBcIlNsw6HDsHUgaW5uIGdpbHQgZ3JlacOwc2x1a29ydGFuw7ptZXIuXCJcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogSVQgKEl0YWxpYW47IEl0YWxpYW5vKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiQ2FtcG8gb2JibGlnYXRvcmlvXCIsXHJcblx0cmVtb3RlOiBcIkNvbnRyb2xsYSBxdWVzdG8gY2FtcG9cIixcclxuXHRlbWFpbDogXCJJbnNlcmlzY2kgdW4gaW5kaXJpenpvIGVtYWlsIHZhbGlkb1wiLFxyXG5cdHVybDogXCJJbnNlcmlzY2kgdW4gaW5kaXJpenpvIHdlYiB2YWxpZG9cIixcclxuXHRkYXRlOiBcIkluc2VyaXNjaSB1bmEgZGF0YSB2YWxpZGFcIixcclxuXHRkYXRlSVNPOiBcIkluc2VyaXNjaSB1bmEgZGF0YSB2YWxpZGEgKElTTylcIixcclxuXHRudW1iZXI6IFwiSW5zZXJpc2NpIHVuIG51bWVybyB2YWxpZG9cIixcclxuXHRkaWdpdHM6IFwiSW5zZXJpc2NpIHNvbG8gbnVtZXJpXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCJJbnNlcmlzY2kgdW4gbnVtZXJvIGRpIGNhcnRhIGRpIGNyZWRpdG8gdmFsaWRvXCIsXHJcblx0ZXF1YWxUbzogXCJJbCB2YWxvcmUgbm9uIGNvcnJpc3BvbmRlXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIkluc2VyaXNjaSB1biB2YWxvcmUgY29uIHVuJmFwb3M7ZXN0ZW5zaW9uZSB2YWxpZGFcIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJOb24gaW5zZXJpcmUgcGkmdWdyYXZlOyBkaSB7MH0gY2FyYXR0ZXJpXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJJbnNlcmlzY2kgYWxtZW5vIHswfSBjYXJhdHRlcmlcIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiSW5zZXJpc2NpIHVuIHZhbG9yZSBjb21wcmVzbyB0cmEgezB9IGUgezF9IGNhcmF0dGVyaVwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJJbnNlcmlzY2kgdW4gdmFsb3JlIGNvbXByZXNvIHRyYSB7MH0gZSB7MX1cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkluc2VyaXNjaSB1biB2YWxvcmUgbWlub3JlIG8gdWd1YWxlIGEgezB9XCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJJbnNlcmlzY2kgdW4gdmFsb3JlIG1hZ2dpb3JlIG8gdWd1YWxlIGEgezB9XCIgKSxcclxuXHRuaWZFUzogXCJJbnNlcmlzY2kgdW4gTklGIHZhbGlkb1wiLFxyXG5cdG5pZUVTOiBcIkluc2VyaXNjaSB1biBOSUUgdmFsaWRvXCIsXHJcblx0Y2lmRVM6IFwiSW5zZXJpc2NpIHVuIENJRiB2YWxpZG9cIixcclxuXHRjdXJyZW5jeTogXCJJbnNlcmlzY2kgdW5hIHZhbHV0YSB2YWxpZGFcIlxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBKQSAoSmFwYW5lc2U7IOaXpeacrOiqnilcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIuOBk+OBruODleOCo+ODvOODq+ODieOBr+W/hemgiOOBp+OBmeOAglwiLFxyXG5cdHJlbW90ZTogXCLjgZPjga7jg5XjgqPjg7zjg6vjg4njgpLkv67mraPjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuXHRlbWFpbDogXCLmnInlirnjgapF44Oh44O844Or44Ki44OJ44Os44K544KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcblx0dXJsOiBcIuacieWKueOBqlVSTOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG5cdGRhdGU6IFwi5pyJ5Yq544Gq5pel5LuY44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcblx0ZGF0ZUlTTzogXCLmnInlirnjgarml6Xku5jvvIhJU0/vvInjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuXHRudW1iZXI6IFwi5pyJ5Yq544Gq5pWw5a2X44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcblx0ZGlnaXRzOiBcIuaVsOWtl+OBruOBv+OCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwi5pyJ5Yq544Gq44Kv44Os44K444OD44OI44Kr44O844OJ55Wq5Y+344KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcblx0ZXF1YWxUbzogXCLlkIzjgZjlgKTjgpLjgoLjgYbkuIDluqblhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuXHRleHRlbnNpb246IFwi5pyJ5Yq544Gq5ouh5by15a2Q44KS5ZCr44KA5YCk44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiezB9IOaWh+Wtl+S7peWGheOBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiezB9IOaWh+Wtl+S7peS4iuOBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJ7MH0g5paH5a2X44GL44KJIHsxfSDmloflrZfjgb7jgafjga7lgKTjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIJcIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiezB9IOOBi+OCiSB7MX0g44G+44Gn44Gu5YCk44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIgKSxcclxuXHRzdGVwOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiezB9IOOBruWAjeaVsOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiezB9IOS7peS4i+OBruWApOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiezB9IOS7peS4iuOBruWApOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogS0EgKEdlb3JnaWFuOyDhg6Xhg5Dhg6Dhg5fhg6Phg5rhg5gpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCLhg5Dhg5sg4YOV4YOU4YOa4YOY4YOhIOGDqOGDlOGDleGDoeGDlOGDkeGDkCDhg5Dhg6Phg6rhg5jhg5rhg5Thg5Hhg5Thg5rhg5jhg5AuXCIsXHJcblx0cmVtb3RlOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5vhg5jhg6Phg5fhg5jhg5fhg53hg5cg4YOh4YOs4YOd4YOg4YOYIOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDkeGDkC5cIixcclxuXHRlbWFpbDogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOd4YOXIOGDlOGDmi3hg6Thg53hg6Hhg6Lhg5jhg6Eg4YOZ4YOd4YOg4YOU4YOl4YOi4YOj4YOa4YOYIOGDm+GDmOGDoeGDkOGDm+GDkOGDoOGDl+GDmC5cIixcclxuXHR1cmw6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDm+GDmOGDo+GDl+GDmOGDl+GDneGDlyDhg5nhg53hg6Dhg5Thg6Xhg6Lhg6Phg5rhg5ggVVJMLlwiLFxyXG5cdGRhdGU6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDm+GDmOGDo+GDl+GDmOGDl+GDneGDlyDhg5nhg53hg6Dhg5Thg6Xhg6Lhg6Phg5rhg5gg4YOX4YOQ4YOg4YOY4YOm4YOYLlwiLFxyXG5cdGRhdGVJU086IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDm+GDmOGDo+GDl+GDmOGDl+GDneGDlyDhg5nhg53hg6Dhg5Thg6Xhg6Lhg6Phg5rhg5gg4YOX4YOQ4YOg4YOY4YOm4YOYIElTTyDhg6Thg53hg6Dhg5vhg5Dhg6Lhg6jhg5guXCIsXHJcblx0bnVtYmVyOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5vhg5jhg6Phg5fhg5jhg5fhg53hg5cg4YOq4YOY4YOk4YOg4YOYLlwiLFxyXG5cdGRpZ2l0czogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOd4YOXIOGDm+GDruGDneGDmuGDneGDkyDhg6rhg5jhg6Thg6Dhg5Thg5Hhg5guXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOd4YOXIOGDoeGDkOGDmeGDoOGDlOGDk+GDmOGDouGDnSDhg5Hhg5Dhg6Dhg5Dhg5fhg5jhg6Eg4YOZ4YOd4YOg4YOU4YOl4YOi4YOj4YOa4YOYIOGDnOGDneGDm+GDlOGDoOGDmC5cIixcclxuXHRlcXVhbFRvOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5vhg5jhg6Phg5fhg5jhg5fhg53hg5cg4YOQ4YOh4YOU4YOX4YOY4YOV4YOUIOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDkeGDkCDhg5nhg5jhg5Phg5Thg5Ug4YOU4YOg4YOX4YOu4YOU4YOaLlwiLFxyXG5cdGV4dGVuc2lvbjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOQ4YOY4YOg4YOp4YOY4YOd4YOXIOGDpOGDkOGDmOGDmuGDmCDhg5nhg53hg6Dhg5Thg6Xhg6Lhg6Phg5rhg5gg4YOS4YOQ4YOk4YOQ4YOg4YOX4YOd4YOU4YOR4YOY4YOXLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuGDk+GDkOGDoeGDkOGDqOGDleGDlOGDkeGDmOGDkCDhg5Dhg6Dhg5Dhg6Phg5vhg5Thg6Lhg5Thg6EgezB9IOGDoeGDmOGDm+GDkeGDneGDmuGDnS5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuGDkOGDo+GDquGDmOGDmuGDlOGDkeGDlOGDmuGDmOGDkCDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOb4YOY4YOc4YOY4YOb4YOj4YObIHswfSDhg6Hhg5jhg5vhg5Hhg53hg5rhg50uXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuGDouGDlOGDpeGDoeGDouGDqOGDmCDhg6Hhg5jhg5vhg5Hhg53hg5rhg53hg5Thg5Hhg5jhg6Eg4YOg4YOQ4YOd4YOT4YOU4YOc4YOd4YOR4YOQIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6EgezB9LeGDk+GDkOGDnCB7MX0t4YOb4YOT4YOULlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDquGDmOGDpOGDoOGDmCB7MH0t4YOT4YOQ4YOcIHsxfS3hg5vhg5Phg5QuXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDquGDmOGDpOGDoOGDmCDhg6Dhg53hg5vhg5Thg5rhg5jhg6og4YOc4YOQ4YOZ4YOa4YOU4YOR4YOY4YOQIOGDkOGDnCDhg6Phg5Phg6Dhg5jhg6HCoHswfS3hg6EuXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDquGDmOGDpOGDoOGDmCDhg6Dhg53hg5vhg5Thg5rhg5jhg6og4YOb4YOU4YOi4YOY4YOQIOGDkOGDnCDhg6Phg5Phg6Dhg5jhg6HCoHswfS3hg6EuXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBLSyAoS2F6YWtoOyDSm9Cw0LfQsNKbINGC0ZbQu9GWKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi0JHSsdC7INOp0YDRltGB0YLRliDQvNGW0L3QtNC10YLRgtGWINGC0q/RgNC00LUg0YLQvtC70YLRi9GA0YvSo9GL0LcuXCIsXHJcblx0cmVtb3RlOiBcItCU0rHRgNGL0YEg0LzQsNKT0YvQvdCwINC10L3Qs9GW0LfRg9GW0qPRltC30LTRliDRgdKx0YDQsNC50LzRi9C3LlwiLFxyXG5cdGVtYWlsOiBcItCd0LDSm9GC0Ysg0Y3Qu9C10LrRgtGA0L7QvdC00Ysg0L/QvtGI0YLQsNKj0YvQt9C00Ysg0LXQvdCz0ZbQt9GD0ZbSo9GW0LfQtNGWINGB0rHRgNCw0LnQvNGL0LcuXCIsXHJcblx0dXJsOiBcItCd0LDSm9GC0YsgVVJMLdC00Ysg0LXQvdCz0ZbQt9GD0ZbSo9GW0LfQtNGWINGB0rHRgNCw0LnQvNGL0LcuXCIsXHJcblx0ZGF0ZTogXCLQndCw0pvRgtGLIFVSTC3QtNGLINC10L3Qs9GW0LfRg9GW0qPRltC30LTRliDRgdKx0YDQsNC50LzRi9C3LlwiLFxyXG5cdGRhdGVJU086IFwi0J3QsNKb0YLRiyBJU08g0YTQvtGA0LzQsNGC0YvQvNC10L0g0YHTmdC50LrQtdGBINC00LDRgtCw0YHRi9C9INC10L3Qs9GW0LfRg9GW0qPRltC30LTRliDRgdKx0YDQsNC50LzRi9C3LlwiLFxyXG5cdG51bWJlcjogXCLQmtKv0L3QtNGWINC10L3Qs9GW0LfRg9GW0qPRltC30LTRliDRgdKx0YDQsNC50LzRi9C3LlwiLFxyXG5cdGRpZ2l0czogXCLQotC10Log0pvQsNC90LAg0YHQsNC90LTQsNGA0LTRiyDQtdC90LPRltC30YPRltKj0ZbQt9C00ZYg0YHSsdGA0LDQudC80YvQty5cIixcclxuXHRjcmVkaXRjYXJkOiBcItCd0LXRgdC40LUg0LrQsNGA0YLQsNGB0YvQvdGL0qMg0L3TqdC80ZbRgNGW0L0g0LTSsdGA0YvRgSDQtdC90LPRltC30YPRltKj0ZbQt9C00ZYg0YHSsdGA0LDQudC80YvQty5cIixcclxuXHRlcXVhbFRvOiBcItCe0YHRiyDQvNOZ0L3QtNGWINKb0LDQudGC0LAg0LXQvdCz0ZbQt9GD0ZbSo9GW0LfQtNGWINGB0rHRgNCw0LnQvNGL0LcuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcItCk0LDQudC70LTRi9KjINC60LXSo9C10LnRgtGD0ZbQvSDQtNKx0YDRi9GBINGC0LDSo9C00LDSo9GL0LcuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0rDQt9GL0L3QtNGL0pPRiyB7MH0g0YHQuNC80LLQvtC70LTQsNC9INC606nRgCDQsdC+0LvQvNCw0YHRi9C9LlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0rDQt9GL0L3QtNGL0pPRiyB7MH0g0YHQuNC80LLQvtC70LTQsNC9INCw0Lcg0LHQvtC70LzQsNGB0YvQvS5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0rDQt9GL0L3QtNGL0pPRiyB7MH0tezF9INC00LXQudGW0L0g0LzTmdC9INC10L3Qs9GW0LfRg9GW0qPRltC30LTRliDRgdKx0YDQsNC50LzRi9C3LlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0YfQuNGB0LvQviDQvtGCIHswfSDQtNC+IHsxfS4gLSB7MH0gLSB7MX0g0YHQsNC90YvQvSDQtdC90LPRltC30YPRltKj0ZbQt9C00ZYg0YHSsdGA0LDQudC80YvQty5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcInswfSDQsNC3INC90LXQvNC10YHQtSDRgtC10qMg0YHQsNC90YvQvSDQtdC90LPRltC30YPRltKj0ZbQtNGWINGB0rHRgNCw0LnQvNGL0LcuXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJ7MH0g0LrTqdC/INC90LXQvNC10YHQtSDRgtC10qMg0YHQsNC90YvQvSDQtdC90LPRltC30YPRltKj0ZbQt9C00ZYg0YHSsdGA0LDQudC80YvQty5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEtPIChLb3JlYW47IO2VnOq1reyWtClcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIu2VhOyImCDtla3rqqnsnoXri4jri6QuXCIsXHJcblx0cmVtb3RlOiBcIu2VreuqqeydhCDsiJjsoJXtlZjshLjsmpQuXCIsXHJcblx0ZW1haWw6IFwi7Jyg7Zqo7ZWY7KeAIOyViuydgCBFLU1haWzso7zshozsnoXri4jri6QuXCIsXHJcblx0dXJsOiBcIuycoO2aqO2VmOyngCDslYrsnYAgVVJM7J6F64uI64ukLlwiLFxyXG5cdGRhdGU6IFwi7Jis67CU66W4IOuCoOynnOulvCDsnoXroKXtlZjshLjsmpQuXCIsXHJcblx0ZGF0ZUlTTzogXCLsmKzrsJTrpbgg64Kg7KecKElTTynrpbwg7J6F66Cl7ZWY7IS47JqULlwiLFxyXG5cdG51bWJlcjogXCLsnKDtmqjtlZwg7Iir7J6Q6rCAIOyVhOuLmeuLiOuLpC5cIixcclxuXHRkaWdpdHM6IFwi7Iir7J6Q66eMIOyeheugpSDqsIDriqXtlanri4jri6QuXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLsi6DsmqnsubTrk5wg67KI7Zi46rCAIOuwlOultOyngCDslYrsirXri4jri6QuXCIsXHJcblx0ZXF1YWxUbzogXCLqsJnsnYAg6rCS7J2EIOuLpOyLnCDsnoXroKXtlZjshLjsmpQuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIuyYrOuwlOuluCDtmZXsnqXsnpDqsIAg7JWE64uZ64uI64ukLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcInswfeyekOulvCDrhJjsnYQg7IiYIOyXhuyKteuLiOuLpC4gXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJ7MH3snpAg7J207IOBIOyeheugpe2VmOyEuOyalC5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi66y47J6QIOq4uOydtOqwgCB7MH0g7JeQ7IScIHsxfSDsgqzsnbTsnZgg6rCS7J2EIOyeheugpe2VmOyEuOyalC5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiezB9IOyXkOyEnCB7MX0g7IKs7J207J2YIOqwkuydhCDsnoXroKXtlZjshLjsmpQuXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJ7MH0g7J207ZWY7J2YIOqwkuydhCDsnoXroKXtlZjshLjsmpQuXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJ7MH0g7J207IOB7J2YIOqwkuydhCDsnoXroKXtlZjshLjsmpQuXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBMVCAoTGl0aHVhbmlhbjsgbGlldHV2acWzIGthbGJhKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwixaBpcyBsYXVrYXMgeXJhIHByaXZhbG9tYXMuXCIsXHJcblx0cmVtb3RlOiBcIlByYcWhYXUgcGF0YWlzeXRpIMWhxK8gbGF1a8SFLlwiLFxyXG5cdGVtYWlsOiBcIlByYcWhYXUgxK92ZXN0aSB0ZWlzaW5nxIUgZWxla3Ryb25pbmlvIHBhxaF0byBhZHJlc8SFLlwiLFxyXG5cdHVybDogXCJQcmHFoWF1IMSvdmVzdGkgdGVpc2luZ8SFIFVSTC5cIixcclxuXHRkYXRlOiBcIlByYcWhYXUgxK92ZXN0aSB0ZWlzaW5nxIUgZGF0xIUuXCIsXHJcblx0ZGF0ZUlTTzogXCJQcmHFoWF1IMSvdmVzdGkgdGVpc2luZ8SFIGRhdMSFIChJU08pLlwiLFxyXG5cdG51bWJlcjogXCJQcmHFoWF1IMSvdmVzdGkgdGVpc2luZ8SFIHNrYWnEjWnFsy5cIixcclxuXHRkaWdpdHM6IFwiUHJhxaFhdSBuYXVkb3RpIHRpayBza2FpdG1lbmlzLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiUHJhxaFhdSDEr3Zlc3RpIHRlaXNpbmfEhSBrcmVkaXRpbsSXcyBrb3J0ZWzEl3MgbnVtZXLEry5cIixcclxuXHRlcXVhbFRvOiBcIlByYcWhYXUgxK92ZXN0xK8gdMSFIHBhxI1pxIUgcmVpa8WhbcSZIGRhciBrYXJ0xIUuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIlByYcWhYXUgxK92ZXN0aSByZWlrxaFtxJkgc3UgdGVpc2luZ3UgcGzEl3Rpbml1LlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByYcWhYXUgxK92ZXN0aSBuZSBkYXVnaWF1IGthaXAgezB9IHNpbWJvbGnFsy5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByYcWhYXUgxK92ZXN0aSBiZW50IHswfSBzaW1ib2xpdXMuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByYcWhYXUgxK92ZXN0aSByZWlrxaFtZXMsIGt1cmnFsyBpbGdpcyBudW8gezB9IGlraSB7MX0gc2ltYm9sacWzLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcmHFoWF1IMSvdmVzdGkgcmVpa8WhbcSZIGludGVydmFsZSBudW8gezB9IGlraSB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcmHFoWF1IMSvdmVzdGkgcmVpa8WhbcSZIG1hxb5lc27EmSBhcmJhIGx5Z2nEhSB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcmHFoWF1IMSvdmVzdGkgcmVpa8WhbcSZIGRpZGVzbsSZIGFyYmEgbHlnacSFIHswfS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IExWIChMYXR2aWFuOyBsYXR2aWXFoXUgdmFsb2RhKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwixaBpcyBsYXVrcyBpciBvYmxpZ8SBdHMuXCIsXHJcblx0cmVtb3RlOiBcIkzFq2R6dSwgcMSBcmJhdWRpZXQgxaFvIGxhdWt1LlwiLFxyXG5cdGVtYWlsOiBcIkzFq2R6dSwgaWV2YWRpZXQgZGVyxKtndSBlLXBhc3RhIGFkcmVzaS5cIixcclxuXHR1cmw6IFwiTMWrZHp1LCBpZXZhZGlldCBkZXLEq2d1IFVSTCBhZHJlc2kuXCIsXHJcblx0ZGF0ZTogXCJMxatkenUsIGlldmFkaWV0IGRlcsSrZ3UgZGF0dW11LlwiLFxyXG5cdGRhdGVJU086IFwiTMWrZHp1LCBpZXZhZGlldCBkZXLEq2d1IGRhdHVtdSAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwiTMWrZHp1LCBpZXZhZGlldCBkZXLEq2d1IG51bXVydS5cIixcclxuXHRkaWdpdHM6IFwiTMWrZHp1LCBpZXZhZGlldCB0aWthaSBjaXBhcnVzLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiTMWrZHp1LCBpZXZhZGlldCBkZXLEq2d1IGtyZWTEq3RrYXJ0ZXMgbnVtdXJ1LlwiLFxyXG5cdGVxdWFsVG86IFwiTMWrZHp1LCBpZXZhZGlldCB0byBwYcWhdSB2xJNscmVpei5cIixcclxuXHRleHRlbnNpb246IFwiTMWrZHp1LCBpZXZhZGlldCB2xJNydMSrYnUgYXIgZGVyxKtndSBwYXBsYcWhaW7EgWp1bXUuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTMWrZHp1LCBpZXZhZGlldCBuZSB2YWlyxIFrIGvEgSB7MH0gcmFrc3R6xKttZXMuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJMxatkenUsIGlldmFkaWV0IHZpc21heiB7MH0gcmFrc3R6xKttZXMuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkzFq2R6dSBpZXZhZGlldCB7MH0gbMSrZHogezF9IHJha3N0esSrbWVzLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJMxatkenUsIGlldmFkaWV0IHNrYWl0bGkgbm8gezB9IGzEq2R6IHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkzFq2R6dSwgaWV2YWRpZXQgc2thaXRsaSwga3VyxaEgaXIgbWF6xIFrcyB2YWkgdmllbsSBZHMgYXIgezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTMWrZHp1LCBpZXZhZGlldCBza2FpdGxpLCBrdXLFoSBpciBsaWVsxIFrcyB2YWkgdmllbsSBZHMgYXIgezB9LlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogTUsgKE1hY2Vkb25pYW47INC80LDQutC10LTQvtC90YHQutC4INGY0LDQt9C40LopXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCLQn9C+0LvQtdGC0L4g0LUg0LfQsNC00L7Qu9C20LjRgtC10LvQvdC+LlwiLFxyXG5cdHJlbW90ZTogXCLQn9C+0L/RgNCw0LLQtdGC0LUg0LPQviDQvtCy0LAg0L/QvtC70LVcIixcclxuXHRlbWFpbDogXCLQktC90LXRgdC10YLQtSDQv9GA0LDQstC40LvQvdCwIGUtbWFpbCDQsNC00YDQtdGB0LBcIixcclxuXHR1cmw6IFwi0JLQvdC10YHQtdGC0LUg0L/RgNCw0LLQuNC70LXQvSBVUkwuXCIsXHJcblx0ZGF0ZTogXCLQktC90LXRgdC10YLQtSDQv9GA0LDQstC40LvQtdC9INC00LDRgtGD0LxcIixcclxuXHRkYXRlSVNPOiBcItCS0L3QtdGB0LXRgtC1INC/0YDQsNCy0LjQu9C10L0g0LTQsNGC0YPQvCAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwi0JLQvdC10YHQtdGC0LUg0L/RgNCw0LLQuNC70LXQvSDQsdGA0L7RmC5cIixcclxuXHRkaWdpdHM6IFwi0JLQvdC10YHQtdGC0LUg0YHQsNC80L4g0LHRgNC+0ZjQutC4LlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwi0JLQvdC10YHQtdGC0LUg0L/RgNCw0LLQuNC70LXQvSDQsdGA0L7RmCDQvdCwINC60YDQtdC00LjRgtC90LDRgtCwINC60LDRgNGC0LjRh9C60LAuXCIsXHJcblx0ZXF1YWxUbzogXCLQktC90LXRgdC10YLQtSDRmNCwINC40YHRgtCw0YLQsCDQstGA0LXQtNC90L7RgdGCINC/0L7QstGC0L7RgNC90L4uXCIsXHJcblx0ZXh0ZW5zaW9uOiBcItCS0L3QtdGB0LXRgtC1INCy0YDQtdC00L3QvtGB0YIg0YHQviDRgdC+0L7QtNCy0LXRgtC90LAg0LXQutGB0YLQtdC90LfQuNGY0LAuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JLQvdC10YHQtdGC0LUg0LzQsNC60YHQuNC80LDQu9C90L4gezB9INC30L3QsNGG0LguXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQktC90LXRgdC10YLQtSDQsdCw0YDQtdC8IHswfSDQt9C90LDRhtC4LlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQktC90LXRgdC10YLQtSDQstGA0LXQtNC90L7RgdGCINGB0L4g0LTQvtC70LbQuNC90LAg0L/QvtC80LXRk9GDIHswfSDQuCB7MX0g0LfQvdCw0YbQuC5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JLQvdC10YHQtdGC0LUg0LLRgNC10LTQvdC+0YHRgiDQv9C+0LzQtdGT0YMgezB9INC4IHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCS0L3QtdGB0LXRgtC1INCy0YDQtdC00L3QvtGB0YIg0L/QvtC80LDQu9CwINC40LvQuCDQtdC00L3QsNC60LLQsCDQvdCwIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCS0L3QtdGB0LXRgtC1INCy0YDQtdC00L3QvtGB0YIg0L/QvtCz0L7Qu9C10LzQsCDQuNC70Lgg0LXQtNC90LDQutCy0LAg0L3QsCB7MH1cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IE1ZIChNYWxheTsgTWVsYXl1KVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiTWVkYW4gaW5pIGRpcGVybHVrYW4uXCIsXHJcblx0cmVtb3RlOiBcIlNpbGEgYmV0dWxrYW4gbWVkYW4gaW5pLlwiLFxyXG5cdGVtYWlsOiBcIlNpbGEgbWFzdWtrYW4gYWxhbWF0IGVtZWwgeWFuZyBiZXR1bC5cIixcclxuXHR1cmw6IFwiU2lsYSBtYXN1a2thbiBVUkwgeWFuZyBiZXR1bC5cIixcclxuXHRkYXRlOiBcIlNpbGEgbWFzdWtrYW4gdGFyaWtoIHlhbmcgYmV0dWwuXCIsXHJcblx0ZGF0ZUlTTzogXCJTaWxhIG1hc3Vra2FuIHRhcmlraChJU08pIHlhbmcgYmV0dWwuXCIsXHJcblx0bnVtYmVyOiBcIlNpbGEgbWFzdWtrYW4gbm9tYm9yIHlhbmcgYmV0dWwuXCIsXHJcblx0ZGlnaXRzOiBcIlNpbGEgbWFzdWtrYW4gbmlsYWkgZGlnaXQgc2FoYWphLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiU2lsYSBtYXN1a2thbiBub21ib3Iga3JlZGl0IGthZCB5YW5nIGJldHVsLlwiLFxyXG5cdGVxdWFsVG86IFwiU2lsYSBtYXN1a2thbiBuaWxhaSB5YW5nIHNhbWEgc2VtdWxhLlwiLFxyXG5cdGV4dGVuc2lvbjogXCJTaWxhIG1hc3Vra2FuIG5pbGFpIHlhbmcgdGVsYWggZGl0ZXJpbWEuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2lsYSBtYXN1a2thbiB0aWRhayBsZWJpaCBkYXJpIHswfSBha3NhcmEuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTaWxhIG1hc3Vra2FuIHNla3VyYW5nLWt1cmFuZ255YSB7MH0gYWtzYXJhLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJTaWxhIG1hc3Vra2FuIGFudGFyYSB7MH0gZGFuIHsxfSBwYW5qYW5nIGFrc2FyYS5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2lsYSBtYXN1a2thbiBuaWxhaSBhbnRhcmEgezB9IGRhbiB7MX0gYWtzYXJhLlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiU2lsYSBtYXN1a2thbiBuaWxhaSB5YW5nIGt1cmFuZyBhdGF1IHNhbWEgZGVuZ2FuIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlNpbGEgbWFzdWtrYW4gbmlsYWkgeWFuZyBsZWJpaCBhdGF1IHNhbWEgZGVuZ2FuIHswfS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IE5MIChEdXRjaDsgTmVkZXJsYW5kcywgVmxhYW1zKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiRGl0IGlzIGVlbiB2ZXJwbGljaHQgdmVsZC5cIixcclxuXHRyZW1vdGU6IFwiQ29udHJvbGVlciBkaXQgdmVsZC5cIixcclxuXHRlbWFpbDogXCJWdWwgaGllciBlZW4gZ2VsZGlnIGUtbWFpbGFkcmVzIGluLlwiLFxyXG5cdHVybDogXCJWdWwgaGllciBlZW4gZ2VsZGlnZSBVUkwgaW4uXCIsXHJcblx0ZGF0ZTogXCJWdWwgaGllciBlZW4gZ2VsZGlnZSBkYXR1bSBpbi5cIixcclxuXHRkYXRlSVNPOiBcIlZ1bCBoaWVyIGVlbiBnZWxkaWdlIGRhdHVtIGluIChJU08tZm9ybWFhdCkuXCIsXHJcblx0bnVtYmVyOiBcIlZ1bCBoaWVyIGVlbiBnZWxkaWcgZ2V0YWwgaW4uXCIsXHJcblx0ZGlnaXRzOiBcIlZ1bCBoaWVyIGFsbGVlbiBnZXRhbGxlbiBpbi5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlZ1bCBoaWVyIGVlbiBnZWxkaWcgY3JlZGl0Y2FyZG51bW1lciBpbi5cIixcclxuXHRlcXVhbFRvOiBcIlZ1bCBoaWVyIGRlemVsZmRlIHdhYXJkZSBpbi5cIixcclxuXHRleHRlbnNpb246IFwiVnVsIGhpZXIgZWVuIHdhYXJkZSBpbiBtZXQgZWVuIGdlbGRpZ2UgZXh0ZW5zaWUuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVnVsIGhpZXIgbWF4aW1hYWwgezB9IHRla2VucyBpbi5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZ1bCBoaWVyIG1pbmltYWFsIHswfSB0ZWtlbnMgaW4uXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZ1bCBoaWVyIGVlbiB3YWFyZGUgaW4gdmFuIG1pbmltYWFsIHswfSBlbiBtYXhpbWFhbCB7MX0gdGVrZW5zLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJWdWwgaGllciBlZW4gd2FhcmRlIGluIHZhbiBtaW5pbWFhbCB7MH0gZW4gbWF4aW1hYWwgezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVnVsIGhpZXIgZWVuIHdhYXJkZSBpbiBrbGVpbmVyIGRhbiBvZiBnZWxpamsgYWFuIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlZ1bCBoaWVyIGVlbiB3YWFyZGUgaW4gZ3JvdGVyIGRhbiBvZiBnZWxpamsgYWFuIHswfS5cIiApLFxyXG5cdHN0ZXA6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJWdWwgaGllciBlZW4gdmVlbHZvdWQgdmFuIHswfSBpbi5cIiApLFxyXG5cclxuXHQvLyBGb3IgdmFsaWRhdGlvbnMgaW4gYWRkaXRpb25hbC1tZXRob2RzLmpzXHJcblx0aWJhbjogXCJWdWwgaGllciBlZW4gZ2VsZGlnIElCQU4gaW4uXCIsXHJcblx0ZGF0ZU5MOiBcIlZ1bCBoaWVyIGVlbiBnZWxkaWdlIGRhdHVtIGluLlwiLFxyXG5cdHBob25lTkw6IFwiVnVsIGhpZXIgZWVuIGdlbGRpZyBOZWRlcmxhbmRzIHRlbGVmb29ubnVtbWVyIGluLlwiLFxyXG5cdG1vYmlsZU5MOiBcIlZ1bCBoaWVyIGVlbiBnZWxkaWcgTmVkZXJsYW5kcyBtb2JpZWwgdGVsZWZvb25udW1tZXIgaW4uXCIsXHJcblx0cG9zdGFsY29kZU5MOiBcIlZ1bCBoaWVyIGVlbiBnZWxkaWdlIHBvc3Rjb2RlIGluLlwiLFxyXG5cdGJhbmthY2NvdW50Tkw6IFwiVnVsIGhpZXIgZWVuIGdlbGRpZyBiYW5rcmVrZW5pbmdudW1tZXIgaW4uXCIsXHJcblx0Z2lyb2FjY291bnROTDogXCJWdWwgaGllciBlZW4gZ2VsZGlnIGdpcm9udW1tZXIgaW4uXCIsXHJcblx0YmFua29yZ2lyb2FjY291bnROTDogXCJWdWwgaGllciBlZW4gZ2VsZGlnIGJhbmstIG9mIGdpcm9udW1tZXIgaW4uXCJcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogTk8gKE5vcndlZ2lhbjsgTm9yc2spXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJBbmdpIGVuIHZlcmRpLlwiLFxyXG5cdHJlbW90ZTogXCJVZ3lsZGlnIHZlcmRpLlwiLFxyXG5cdGVtYWlsOiBcIkFuZ2kgZW4gZ3lsZGlnIGVwb3N0YWRyZXNzZS5cIixcclxuXHR1cmw6IFwiQW5naSBlbiBneWxkaWcgVVJMLlwiLFxyXG5cdGRhdGU6IFwiQW5naSBlbiBneWxkaWcgZGF0by5cIixcclxuXHRkYXRlSVNPOiBcIkFuZ2kgZW4gZ3lsZGlnIGRhdG8gKCZBUklORzsmQVJJTkc7JkFSSU5HOyZBUklORzstTU0tREQpLlwiLFxyXG5cdG51bWJlcjogXCJBbmdpIGV0IGd5bGRpZyB0YWxsLlwiLFxyXG5cdGRpZ2l0czogXCJTa3JpdiBrdW4gdGFsbC5cIixcclxuXHRlcXVhbFRvOiBcIlNrcml2IHNhbW1lIHZlcmRpIGlnamVuLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIk1ha3NpbWFsdCB7MH0gdGVnbi5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIk1pbmltdW0gezB9IHRlZ24uXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkFuZ2kgbWluaW11bSB7MH0gb2cgbWFrc2ltdW0gezF9IHRlZ24uXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkFuZ2kgZW4gdmVyZGkgbWVsbG9tIHswfSBvZyB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdpIGVuIHZlcmRpIHNvbSBlciBtaW5kcmUgZWxsZXIgbGlrIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkFuZ2kgZW4gdmVyZGkgc29tIGVyIHN0Jm9zbGFzaDtycmUgZWxsZXIgbGlrIHswfS5cIiApLFxyXG5cdHN0ZXA6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdpIGVuIHZlcmRpIGdhbmdlciB7MH0uXCIgKSxcclxuXHRjcmVkaXRjYXJkOiBcIkFuZ2kgZXQgZ3lsZGlnIGtyZWRpdHRrb3J0bnVtbWVyLlwiXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFBMIChQb2xpc2g7IGrEmXp5ayBwb2xza2ksIHBvbHN6Y3p5em5hKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiVG8gcG9sZSBqZXN0IHd5bWFnYW5lLlwiLFxyXG5cdHJlbW90ZTogXCJQcm9zesSZIG8gd3lwZcWCbmllbmllIHRlZ28gcG9sYS5cIixcclxuXHRlbWFpbDogXCJQcm9zesSZIG8gcG9kYW5pZSBwcmF3aWTFgm93ZWdvIGFkcmVzdSBlbWFpbC5cIixcclxuXHR1cmw6IFwiUHJvc3rEmSBvIHBvZGFuaWUgcHJhd2lkxYJvd2VnbyBVUkwuXCIsXHJcblx0ZGF0ZTogXCJQcm9zesSZIG8gcG9kYW5pZSBwcmF3aWTFgm93ZWogZGF0eS5cIixcclxuXHRkYXRlSVNPOiBcIlByb3N6xJkgbyBwb2RhbmllIHByYXdpZMWCb3dlaiBkYXR5IChJU08pLlwiLFxyXG5cdG51bWJlcjogXCJQcm9zesSZIG8gcG9kYW5pZSBwcmF3aWTFgm93ZWogbGljemJ5LlwiLFxyXG5cdGRpZ2l0czogXCJQcm9zesSZIG8gcG9kYW5pZSBzYW15Y2ggY3lmci5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlByb3N6xJkgbyBwb2RhbmllIHByYXdpZMWCb3dlaiBrYXJ0eSBrcmVkeXRvd2VqLlwiLFxyXG5cdGVxdWFsVG86IFwiUHJvc3rEmSBvIHBvZGFuaWUgdGVqIHNhbWVqIHdhcnRvxZtjaSBwb25vd25pZS5cIixcclxuXHRleHRlbnNpb246IFwiUHJvc3rEmSBvIHBvZGFuaWUgd2FydG/Fm2NpIHogcHJhd2lkxYJvd3ltIHJvenN6ZXJ6ZW5pZW0uXCIsXHJcblx0bmlwUEw6IFwiUHJvc3rEmSBvIHBvZGFuaWUgcHJhd2lkxYJvd2VnbyBudW1lcnUgTklQLlwiLFxyXG5cdHBob25lUEw6IFwiUHJvc3rEmSBvIHBvZGFuaWUgcHJhd2lkxYJvd2VnbyBudW1lcnUgdGVsZWZvbnVcIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zesSZIG8gcG9kYW5pZSBuaWUgd2nEmWNlaiBuacW8IHswfSB6bmFrw7N3LlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc3rEmSBvIHBvZGFuaWUgcHJ6eW5ham1uaWVqIHswfSB6bmFrw7N3LlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zesSZIG8gcG9kYW5pZSB3YXJ0b8WbY2kgbyBkxYJ1Z2/Fm2NpIG9kIHswfSBkbyB7MX0gem5ha8Ozdy5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc3rEmSBvIHBvZGFuaWUgd2FydG/Fm2NpIHogcHJ6ZWR6aWHFgnUgb2QgezB9IGRvIHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByb3N6xJkgbyBwb2RhbmllIHdhcnRvxZtjaSBtbmllanN6ZWogYsSFZMW6IHLDs3duZWogezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc3rEmSBvIHBvZGFuaWUgd2FydG/Fm2NpIHdpxJlrc3plaiBixIVkxbogcsOzd25laiB7MH0uXCIgKSxcclxuXHRwYXR0ZXJuOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9sZSB6YXdpZXJhIG5pZWRvendvbG9uZSB6bmFraS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFBUIChQb3J0dWd1ZXNlOyBwb3J0dWd1w6pzKVxyXG4gKiBSZWdpb246IEJSIChCcmF6aWwpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHJcblx0Ly8gQ29yZVxyXG5cdHJlcXVpcmVkOiBcIkVzdGUgY2FtcG8gJmVhY3V0ZTsgcmVxdWVyaWRvLlwiLFxyXG5cdHJlbW90ZTogXCJQb3IgZmF2b3IsIGNvcnJpamEgZXN0ZSBjYW1wby5cIixcclxuXHRlbWFpbDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIGVuZGVyZSZjY2VkaWw7byBkZSBlbWFpbCB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdHVybDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtYSBVUkwgdiZhYWN1dGU7bGlkYS5cIixcclxuXHRkYXRlOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW1hIGRhdGEgdiZhYWN1dGU7bGlkYS5cIixcclxuXHRkYXRlSVNPOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW1hIGRhdGEgdiZhYWN1dGU7bGlkYSAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bSBuJnVhY3V0ZTttZXJvIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0ZGlnaXRzOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2Egc29tZW50ZSBkJmlhY3V0ZTtnaXRvcy5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gY2FydCZhdGlsZGU7byBkZSBjciZlYWN1dGU7ZGl0byB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdGVxdWFsVG86IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSBvIG1lc21vIHZhbG9yIG5vdmFtZW50ZS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIG4mYXRpbGRlO28gbWFpcyBxdWUgezB9IGNhcmFjdGVyZXMuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIGFvIG1lbm9zIHswfSBjYXJhY3RlcmVzLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIHZhbG9yIGVudHJlIHswfSBlIHsxfSBjYXJhY3RlcmVzIGRlIGNvbXByaW1lbnRvLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIHZhbG9yIGVudHJlIHswfSBlIHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gdmFsb3IgbWVub3Igb3UgaWd1YWwgYSB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIHZhbG9yIG1haW9yIG91IGlndWFsIGEgezB9LlwiICksXHJcblx0c3RlcDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gdmFsb3IgbSZ1YWN1dGU7bHRpcGxvIGRlIHswfS5cIiApLFxyXG5cclxuXHQvLyBNZXRvZG9zIEFkaWNpb25haXNcclxuXHRtYXhXb3JkczogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgY29tIHswfSBwYWxhdnJhcyBvdSBtZW5vcy5cIiApLFxyXG5cdG1pbldvcmRzOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSBwZWxvIG1lbm9zIHswfSBwYWxhdnJhcy5cIiApLFxyXG5cdHJhbmdlV29yZHM6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIGVudHJlIHswfSBlIHsxfSBwYWxhdnJhcy5cIiApLFxyXG5cdGFjY2VwdDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIHRpcG8gdiZhYWN1dGU7bGlkby5cIixcclxuXHRhbHBoYW51bWVyaWM6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSBzb21lbnRlIGNvbSBsZXRyYXMsIG4mdWFjdXRlO21lcm9zIGUgc3VibGluaGFkb3MuXCIsXHJcblx0YmFua2FjY291bnROTDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIGNvbSB1bSBuJnVhY3V0ZTttZXJvIGRlIGNvbnRhIGJhbmMmYWFjdXRlO3JpYSB2JmFhY3V0ZTtsaWRhLlwiLFxyXG5cdGJhbmtvcmdpcm9hY2NvdW50Tkw6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bSBiYW5jbyB2JmFhY3V0ZTtsaWRvIG91IG4mdWFjdXRlO21lcm8gZGUgY29udGEuXCIsXHJcblx0YmljOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gYyZvYWN1dGU7ZGlnbyBCSUMgdiZhYWN1dGU7bGlkby5cIixcclxuXHRjaWZFUzogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIGMmb2FjdXRlO2RpZ28gQ0lGIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0Y3JlZGl0Y2FyZHR5cGVzOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gbiZ1YWN1dGU7bWVybyBkZSBjYXJ0JmF0aWxkZTtvIGRlIGNyJmVhY3V0ZTtkaXRvIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0Y3VycmVuY3k6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bWEgbW9lZGEgdiZhYWN1dGU7bGlkYS5cIixcclxuXHRkYXRlRkE6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bWEgZGF0YSBjb3JyZXRhLlwiLFxyXG5cdGRhdGVJVEE6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bWEgZGF0YSBjb3JyZXRhLlwiLFxyXG5cdGRhdGVOTDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtYSBkYXRhIGNvcnJldGEuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gdmFsb3IgY29tIHVtYSBleHRlbnMmYXRpbGRlO28gdiZhYWN1dGU7bGlkYS5cIixcclxuXHRnaXJvYWNjb3VudE5MOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gbiZ1YWN1dGU7bWVybyBkZSBjb250YSBjb3JyZW50ZSB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdGliYW46IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bSBjJm9hY3V0ZTtkaWdvIElCQU4gdiZhYWN1dGU7bGlkby5cIixcclxuXHRpbnRlZ2VyOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gbiZ1YWN1dGU7bWVybyBuJmF0aWxkZTtvIGRlY2ltYWwuXCIsXHJcblx0aXB2NDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIElQdjQgdiZhYWN1dGU7bGlkby5cIixcclxuXHRpcHY2OiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gSVB2NiB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdGxldHRlcnNvbmx5OiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgYXBlbmFzIGNvbSBsZXRyYXMuXCIsXHJcblx0bGV0dGVyc3dpdGhiYXNpY3B1bmM6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSBhcGVuYXMgbGV0cmFzIG91IHBvbnR1YSZjY2VkaWw7w7Vlcy5cIixcclxuXHRtb2JpbGVOTDogXCJQb3IgZmF2b3IsIGZvcm5lY2UmY2NlZGlsO2EgdW0gbiZ1YWN1dGU7bWVybyB2JmFhY3V0ZTtsaWRvIGRlIHRlbGVmb25lLlwiLFxyXG5cdG1vYmlsZVVLOiBcIlBvciBmYXZvciwgZm9ybmVjZSZjY2VkaWw7YSB1bSBuJnVhY3V0ZTttZXJvIHYmYWFjdXRlO2xpZG8gZGUgdGVsZWZvbmUuXCIsXHJcblx0bmllRVM6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bSBOSUUgdiZhYWN1dGU7bGlkby5cIixcclxuXHRuaWZFUzogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIE5JRiB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdG5vd2hpdGVzcGFjZTogXCJQb3IgZmF2b3IsIG4mYXRpbGRlO28gdXRpbGl6ZSBlc3BhJmNjZWRpbDtvcyBlbSBicmFuY28uXCIsXHJcblx0cGF0dGVybjogXCJPIGZvcm1hdG8gZm9ybmVjaWRvICZlYWN1dGU7IGludiZhYWN1dGU7bGlkby5cIixcclxuXHRwaG9uZU5MOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gbiZ1YWN1dGU7bWVybyBkZSB0ZWxlZm9uZSB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdHBob25lVUs6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bSBuJnVhY3V0ZTttZXJvIGRlIHRlbGVmb25lIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0cGhvbmVVUzogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIG4mdWFjdXRlO21lcm8gZGUgdGVsZWZvbmUgdiZhYWN1dGU7bGlkby5cIixcclxuXHRwaG9uZXNVSzogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIG4mdWFjdXRlO21lcm8gZGUgdGVsZWZvbmUgdiZhYWN1dGU7bGlkby5cIixcclxuXHRwb3N0YWxDb2RlQ0E6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bSBuJnVhY3V0ZTttZXJvIGRlIGMmb2FjdXRlO2RpZ28gcG9zdGFsIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0cG9zdGFsY29kZUlUOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gbiZ1YWN1dGU7bWVybyBkZSBjJm9hY3V0ZTtkaWdvIHBvc3RhbCB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdHBvc3RhbGNvZGVOTDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIG4mdWFjdXRlO21lcm8gZGUgYyZvYWN1dGU7ZGlnbyBwb3N0YWwgdiZhYWN1dGU7bGlkby5cIixcclxuXHRwb3N0Y29kZVVLOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gbiZ1YWN1dGU7bWVybyBkZSBjJm9hY3V0ZTtkaWdvIHBvc3RhbCB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdHBvc3RhbGNvZGVCUjogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIENFUCB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdHJlcXVpcmVfZnJvbV9ncm91cDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgcGVsbyBtZW5vcyB7MH0gZGVzdGVzIGNhbXBvcy5cIiApLFxyXG5cdHNraXBfb3JfZmlsbF9taW5pbXVtOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBvcHRhciBlbnRyZSBpZ25vcmFyIGVzc2VzIGNhbXBvcyBvdSBwcmVlbmNoZXIgcGVsbyBtZW5vcyB7MH0gZGVsZXMuXCIgKSxcclxuXHRzdGF0ZVVTOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gZXN0YWRvIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0c3RyaXBwZWRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHBlbG8gbWVub3MgezB9IGNhcmFjdGVyZXMuXCIgKSxcclxuXHR0aW1lOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gaG9yJmFhY3V0ZTtyaW8gdiZhYWN1dGU7bGlkbywgbm8gaW50ZXJ2YWRvIGRlIDAwOjAwIGEgMjM6NTkuXCIsXHJcblx0dGltZTEyaDogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIGhvciZhYWN1dGU7cmlvIHYmYWFjdXRlO2xpZG8sIG5vIGludGVydmFkbyBkZSAwMTowMCBhIDEyOjU5IGFtL3BtLlwiLFxyXG5cdHVybDI6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bWEgVVJMIHYmYWFjdXRlO2xpZGEuXCIsXHJcblx0dmluVVM6IFwiTyBuJnVhY3V0ZTttZXJvIGRlIGlkZW50aWZpY2EmY2NlZGlsOyZhdGlsZGU7byBkZSB2ZSZpYWN1dGU7Y3VsbyBpbmZvcm1hZG8gKFZJTikgJmVhY3V0ZTsgaW52JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdHppcGNvZGVVUzogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIGMmb2FjdXRlO2RpZ28gcG9zdGFsIGFtZXJpY2FubyB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdHppcHJhbmdlOiBcIk8gYyZvYWN1dGU7ZGlnbyBwb3N0YWwgZGV2ZSBlc3RhciBlbnRyZSA5MDJ4eC14eHh4IGUgOTA1eHgteHh4eFwiLFxyXG5cdGNwZkJSOiBcIlBvciBmYXZvciwgZm9ybmUmY2NlZGlsO2EgdW0gQ1BGIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0bmlzQlI6IFwiUG9yIGZhdm9yLCBmb3JuZSZjY2VkaWw7YSB1bSBOSVMvUElTIHYmYWFjdXRlO2xpZG9cIixcclxuXHRjbmhCUjogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIENOSCB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdGNucGpCUjogXCJQb3IgZmF2b3IsIGZvcm5lJmNjZWRpbDthIHVtIENOUEogdiZhYWN1dGU7bGlkby5cIlxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBQVCAoUG9ydHVndWVzZTsgcG9ydHVndcOqcylcclxuICogUmVnaW9uOiBQVCAoUG9ydHVnYWwpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJDYW1wbyBkZSBwcmVlbmNoaW1lbnRvIG9icmlnYXQmb2FjdXRlO3Jpby5cIixcclxuXHRyZW1vdGU6IFwiUG9yIGZhdm9yLCBjb3JyaWphIGVzdGUgY2FtcG8uXCIsXHJcblx0ZW1haWw6IFwiUG9yIGZhdm9yLCBpbnRyb2R1emEgdW0gZW5kZXJlJmNjZWRpbDtvIGVsZXRyJm9hY3V0ZTtuaWNvIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0dXJsOiBcIlBvciBmYXZvciwgaW50cm9kdXphIHVtIFVSTCB2JmFhY3V0ZTtsaWRvLlwiLFxyXG5cdGRhdGU6IFwiUG9yIGZhdm9yLCBpbnRyb2R1emEgdW1hIGRhdGEgdiZhYWN1dGU7bGlkYS5cIixcclxuXHRkYXRlSVNPOiBcIlBvciBmYXZvciwgaW50cm9kdXphIHVtYSBkYXRhIHYmYWFjdXRlO2xpZGEgKElTTykuXCIsXHJcblx0bnVtYmVyOiBcIlBvciBmYXZvciwgaW50cm9kdXphIHVtIG4mdWFjdXRlO21lcm8gdiZhYWN1dGU7bGlkby5cIixcclxuXHRkaWdpdHM6IFwiUG9yIGZhdm9yLCBpbnRyb2R1emEgYXBlbmFzIGQmaWFjdXRlO2dpdG9zLlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiUG9yIGZhdm9yLCBpbnRyb2R1emEgdW0gbiZ1YWN1dGU7bWVybyBkZSBjYXJ0JmF0aWxkZTtvIGRlIGNyJmVhY3V0ZTtkaXRvIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0ZXF1YWxUbzogXCJQb3IgZmF2b3IsIGludHJvZHV6YSBkZSBub3ZvIG8gbWVzbW8gdmFsb3IuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIlBvciBmYXZvciwgaW50cm9kdXphIHVtIGZpY2hlaXJvIGNvbSB1bWEgZXh0ZW5zJmF0aWxkZTtvIHYmYWFjdXRlO2xpZGEuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUG9yIGZhdm9yLCBuJmF0aWxkZTtvIGludHJvZHV6YSBtYWlzIGRvIHF1ZSB7MH0gY2FyYWN0ZXJlcy5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgaW50cm9kdXphIHBlbG8gbWVub3MgezB9IGNhcmFjdGVyZXMuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgaW50cm9kdXphIGVudHJlIHswfSBlIHsxfSBjYXJhY3RlcmVzLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGludHJvZHV6YSB1bSB2YWxvciBlbnRyZSB7MH0gZSB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQb3IgZmF2b3IsIGludHJvZHV6YSB1bSB2YWxvciBtZW5vciBvdSBpZ3VhbCBhIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlBvciBmYXZvciwgaW50cm9kdXphIHVtIHZhbG9yIG1haW9yIG91IGlndWFsIGEgezB9LlwiICksXHJcblx0bmlmRVM6IFwiUG9yIGZhdm9yLCBpbnRyb2R1emEgdW0gTklGIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0bmllRVM6IFwiUG9yIGZhdm9yLCBpbnRyb2R1emEgdW0gTklFIHYmYWFjdXRlO2xpZG8uXCIsXHJcblx0Y2lmRVM6IFwiUG9yIGZhdm9yLCBpbnRyb2R1emEgdW0gQ0lGIHYmYWFjdXRlO2xpZG8uXCJcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogUk8gKFJvbWFuaWFuLCBsaW1iYSByb23Dom7EgylcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIkFjZXN0IGPDom1wIGVzdGUgb2JsaWdhdG9yaXUuXCIsXHJcblx0cmVtb3RlOiBcIlRlIHJ1Z8SDbSBzxIMgY29tcGxldGV6aSBhY2VzdCBjw6JtcC5cIixcclxuXHRlbWFpbDogXCJUZSBydWfEg20gc8SDIGludHJvZHVjaSBvIGFkcmVzxIMgZGUgZW1haWwgdmFsaWTEg1wiLFxyXG5cdHVybDogXCJUZSBydWfEg20gc2EgaW50cm9kdWNpIG8gYWRyZXPEgyBVUkwgdmFsaWTEgy5cIixcclxuXHRkYXRlOiBcIlRlIHJ1Z8SDbSBzxIMgaW50cm9kdWNpIG8gZGF0xIMgY29yZWN0xIMuXCIsXHJcblx0ZGF0ZUlTTzogXCJUZSBydWfEg20gc8SDIGludHJvZHVjaSBvIGRhdMSDIChJU08pIGNvcmVjdMSDLlwiLFxyXG5cdG51bWJlcjogXCJUZSBydWfEg20gc8SDIGludHJvZHVjaSB1biBudW3Eg3Igw65udHJlZyB2YWxpZC5cIixcclxuXHRkaWdpdHM6IFwiVGUgcnVnxINtIHPEgyBpbnRyb2R1Y2kgZG9hciBjaWZyZS5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlRlIHJ1Z8SDbSBzxIMgaW50cm9kdWNpIHVuIG51bWFyIGRlIGNhcnRlIGRlIGNyZWRpdCB2YWxpZC5cIixcclxuXHRlcXVhbFRvOiBcIlRlIHJ1Z8SDbSBzxIMgcmVpbnRyb2R1Y2kgdmFsb2FyZWEuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIlRlIHJ1Z8SDbSBzxIMgaW50cm9kdWNpIG8gdmFsb2FyZSBjdSBvIGV4dGVuc2llIHZhbGlkxIMuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVGUgcnVnxINtIHPEgyBudSBpbnRyb2R1Y2kgbWFpIG11bHQgZGUgezB9IGNhcmFjdGVyZS5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlRlIHJ1Z8SDbSBzxIMgaW50cm9kdWNpIGNlbCBwdcibaW4gezB9IGNhcmFjdGVyZS5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVGUgcnVnxINtIHPEgyBpbnRyb2R1Y2kgbyB2YWxvYXJlIMOubnRyZSB7MH0gyJlpIHsxfSBjYXJhY3RlcmUuXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlRlIHJ1Z8SDbSBzxIMgaW50cm9kdWNpIG8gdmFsb2FyZSDDrm50cmUgezB9IMiZaSB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJUZSBydWfEg20gc8SDIGludHJvZHVjaSBvIHZhbG9hcmUgZWdhbCBzYXUgbWFpIG1pY8SDIGRlY8OidCB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJUZSBydWfEg20gc8SDIGludHJvZHVjaSBvIHZhbG9hcmUgZWdhbCBzYXUgbWFpIG1hcmUgZGVjw6J0IHswfS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFJVIChSdXNzaWFuOyDRgNGD0YHRgdC60LjQuSDRj9C30YvQuilcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcItCt0YLQviDQv9C+0LvQtSDQvdC10L7QsdGF0L7QtNC40LzQviDQt9Cw0L/QvtC70L3QuNGC0YwuXCIsXHJcblx0cmVtb3RlOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1LlwiLFxyXG5cdGVtYWlsOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQutC+0YDRgNC10LrRgtC90YvQuSDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiy5cIixcclxuXHR1cmw6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC60L7RgNGA0LXQutGC0L3Ri9C5IFVSTC5cIixcclxuXHRkYXRlOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQutC+0YDRgNC10LrRgtC90YPRjiDQtNCw0YLRgy5cIixcclxuXHRkYXRlSVNPOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQutC+0YDRgNC10LrRgtC90YPRjiDQtNCw0YLRgyDQsiDRhNC+0YDQvNCw0YLQtSBJU08uXCIsXHJcblx0bnVtYmVyOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRh9C40YHQu9C+LlwiLFxyXG5cdGRpZ2l0czogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC+0LTQuNGC0LUg0YLQvtC70YzQutC+INGG0LjRhNGA0YsuXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0L/RgNCw0LLQuNC70YzQvdGL0Lkg0L3QvtC80LXRgCDQutGA0LXQtNC40YLQvdC+0Lkg0LrQsNGA0YLRiy5cIixcclxuXHRlcXVhbFRvOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRgtCw0LrQvtC1INC20LUg0LfQvdCw0YfQtdC90LjQtSDQtdGJ0ZEg0YDQsNC3LlwiLFxyXG5cdGV4dGVuc2lvbjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQuyDRgSDQv9GA0LDQstC40LvRjNC90YvQvCDRgNCw0YHRiNC40YDQtdC90LjQtdC8LlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQvdC1INCx0L7Qu9GM0YjQtSB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQvdC1INC80LXQvdGM0YjQtSB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC30L3QsNGH0LXQvdC40LUg0LTQu9C40L3QvtC5INC+0YIgezB9INC00L4gezF9INGB0LjQvNCy0L7Qu9C+0LIuXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRh9C40YHQu9C+INC+0YIgezB9INC00L4gezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INGH0LjRgdC70L4sINC80LXQvdGM0YjQtdC1INC40LvQuCDRgNCw0LLQvdC+0LXCoHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRh9C40YHQu9C+LCDQsdC+0LvRjNGI0LXQtSDQuNC70Lgg0YDQsNCy0L3QvtC1IHswfS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFNEIChTaW5kaGk7INiz2YbajNmKKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcbiAgICByZXF1aXJlZDogXCLZh9mG2YYg2KzYp9mK2YYg2KzZiiDYttix2YjYsdiqINii2YfZilwiLFxyXG4gICAgcmVtb3RlOiBcItmH2YbZhiDYrNin2YrZhiDYrNmKINi22LHZiNix2Kog2KLZh9mKXCIsXHJcbiAgICBlbWFpbDogXCLZhNqp2YrZhCDYp9mKINmF2YrZhCDYutmE2Lcg2KLZh9mKXCIsXHJcbiAgICB1cmw6IFwi2YTaqdmK2YQg2KfZitqK2LHZitizINi62YTYtyDYotmH2YpcIixcclxuICAgIGRhdGU6IFwi2YTaqdmK2YQg2KrYp9ix2YrYriDYutmE2Lcg2KLZh9mKXCIsXHJcbiAgICBkYXRlSVNPOiBcItis2Yog2YXYudmK2KfYsSDYrNmKINmF2LfYp9io2YIg2YbZhyDYotmH2YogKElTTykg2YTaqdmK2YQg2KrYp9ix2YrYrlwiLFxyXG4gICAgbnVtYmVyOiBcItmE2qnZitmEINin2YbaryDYtdit2YrYrSDZhtin2YfZilwiLFxyXG4gICAgZGlnaXRzOiBcItix2rPZiCDYp9mG2q8g2K/Yp9iu2YQg2qrYsdmKINiz2q/Zh9is2Yog2b/ZiFwiLFxyXG4gICAgY3JlZGl0Y2FyZDogXCLZhNqp2YrZhCDaqtin2LHaiiDZhtmF2KjYsSDYtdit2YrYrSDZhtmHINii2YfZilwiLFxyXG4gICAgZXF1YWxUbzogXCLYr9in2K7ZhCDZv9mK2YQg2oDZitm9INi12K3ZititINmG2Ycg2KLZh9mKXCIsXHJcbiAgICBleHRlbnNpb246IFwi2YTaqdmK2YQg2LrZhNi3INii2YfZilwiLFxyXG4gICAgbWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2YjajCDaqdin2YYg2YjajCB7MH0g2KzZiiDYr9in2K7ZhNinINqq2LHZiiDYs9qv2YfYrNmKINm/2YpcIiApLFxyXG4gICAgbWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2q/Zh9m9INu+INqv2YfZvSB7MH0g2KzZiiDYr9in2K7ZhNinINqq2LHauyDYttix2YjYsdmKINii2YfZilwiICksXHJcbiAgICByYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItiv2KfYrtmE2Kcg2KzZiCB7MH0g270gezF92KzZiiDZiNqGINu+INmH2KzauyDYttix2YjYsdmKINii2YfZilwiICksXHJcbiAgICByYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcItiv2KfYrtmE2Kcg2KzZiCB7MH0g270gezF92KzZiiDZiNqGINu+INmH2KzauyDYttix2YjYsdmKINii2YfZilwiICksXHJcbiAgICBtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLZiNqMINqp2KfZhiDZiNqMIHswfSDYrNmKINiv2KfYrtmE2Kcg2qrYsdmKINiz2q/Zh9is2Yog2b/ZilwiICksXHJcbiAgICBtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLar9mH2b0g274g2q/Zh9m9IHswfSDYrNmKINiv2KfYrtmE2Kcg2qrYsdq7INi22LHZiNix2Yog2KLZh9mKXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBTSSAoU2xvdmVuaWFuKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiVG8gcG9samUgamUgb2J2ZXpuby5cIixcclxuXHRyZW1vdGU6IFwiVnBpcyB2IHRlbSBwb2xqdSBuaSB2IHByYXZpIG9ibGlraS5cIixcclxuXHRlbWFpbDogXCJQcm9zaW1vLCB2bmVzaXRlIHByYXZpIGVtYWlsIG5hc2xvdi5cIixcclxuXHR1cmw6IFwiUHJvc2ltbywgdm5lc2l0ZSBwcmF2aSBVUkwuXCIsXHJcblx0ZGF0ZTogXCJQcm9zaW1vLCB2bmVzaXRlIHByYXZpIGRhdHVtLlwiLFxyXG5cdGRhdGVJU086IFwiUHJvc2ltbywgdm5lc2l0ZSBwcmF2aSBkYXR1bSAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwiUHJvc2ltbywgdm5lc2l0ZSBwcmF2byDFoXRldmlsa28uXCIsXHJcblx0ZGlnaXRzOiBcIlByb3NpbW8sIHZuZXNpdGUgc2FtbyDFoXRldmlsa2UuXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCJQcm9zaW1vLCB2bmVzaXRlIHByYXZvIMWhdGV2aWxrbyBrcmVkaXRuZSBrYXJ0aWNlLlwiLFxyXG5cdGVxdWFsVG86IFwiUHJvc2ltbywgcG9ub3ZubyB2bmVzaXRlIGVuYWtvIHZzZWJpbm8uXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIlByb3NpbW8sIHZuZXNpdGUgdnNlYmlubyB6IHByYXZvIGtvbsSNbmljby5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zaW1vLCBkYSBuZSB2bmHFoWF0ZSB2ZcSNIGtvdCB7MH0gem5ha292LlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc2ltbywgdm5lc2l0ZSB2c2FqIHswfSB6bmFrb3YuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByb3NpbW8sIHZuZXNpdGUgb2QgezB9IGRvIHsxfSB6bmFrb3YuXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByb3NpbW8sIHZuZXNpdGUgdnJlZG5vc3QgbWVkIHswfSBpbiB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zaW1vLCB2bmVzaXRlIHZyZWRub3N0IG1hbmrFoW8gYWxpIGVuYWtvIHswfS5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByb3NpbW8sIHZuZXNpdGUgdnJlZG5vc3QgdmXEjWpvIGFsaSBlbmFrbyB7MH0uXCIgKVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBTSyAoU2xvdmFrOyBzbG92ZW7EjWluYSwgc2xvdmVuc2vDvSBqYXp5aylcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIlBvdmlubsOpIHphZGHFpS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJNYXhpbcOhbG5lIHswfSB6bmFrb3YuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJNaW5pbcOhbG5lIHswfSB6bmFrb3YuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIk1pbmltw6FsbmUgezB9IGEgbWF4aW3DoWxuZSB7MX0gem5ha292LlwiICksXHJcblx0ZW1haWw6IFwiRS1tYWlsb3bDoSBhZHJlc2EgbXVzw60gYnnFpSBwbGF0bsOhLlwiLFxyXG5cdHVybDogXCJVUkwgbXVzw60gYnnFpSBwbGF0bsOhLlwiLFxyXG5cdGRhdGU6IFwiTXVzw60gYnnFpSBkw6F0dW0uXCIsXHJcblx0bnVtYmVyOiBcIk11c8OtIGJ5xaUgxI3DrXNsby5cIixcclxuXHRkaWdpdHM6IFwiTcO0xb5lIG9ic2Fob3ZhxaUgaWJhIMSNw61zbGljZS5cIixcclxuXHRlcXVhbFRvOiBcIkR2ZSBob2Rub3R5IHNhIG11c2lhIHJvdm5hxaUuXCIsXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJNdXPDrSBiecWlIG1lZHppIHswfSBhIHsxfS5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIk5lbcO0xb5lIGJ5xaUgdmlhYyBha28gezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTmVtw7TFvmUgYnnFpSBtZW5laiBha28gezB9LlwiICksXHJcblx0Y3JlZGl0Y2FyZDogXCLEjMOtc2xvIHBsYXRvYm5laiBrYXJ0eSBtdXPDrSBiecWlIHBsYXRuw6kuXCIsXHJcblx0c3RlcDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIk11c8OtIGJ5xaUgbsOhc29ia29tIMSNw61zbGEgezB9LlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExhbmd1YWdlOiBTTCAoU2xvdmVuaWFuOyBzbG92ZW5za2kgamV6aWspXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJUbyBwb2xqZSBqZSBvYnZlem5vLlwiLFxyXG5cdHJlbW90ZTogXCJQcm9zaW1vIHBvcHJhdml0ZSB0byBwb2xqZS5cIixcclxuXHRlbWFpbDogXCJQcm9zaW1vIHZuZXNpdGUgdmVsamF2ZW4gZW1haWwgbmFzbG92LlwiLFxyXG5cdHVybDogXCJQcm9zaW1vIHZuZXNpdGUgdmVsamF2ZW4gVVJMIG5hc2xvdi5cIixcclxuXHRkYXRlOiBcIlByb3NpbW8gdm5lc2l0ZSB2ZWxqYXZlbiBkYXR1bS5cIixcclxuXHRkYXRlSVNPOiBcIlByb3NpbW8gdm5lc2l0ZSB2ZWxqYXZlbiBJU08gZGF0dW0uXCIsXHJcblx0bnVtYmVyOiBcIlByb3NpbW8gdm5lc2l0ZSB2ZWxqYXZubyDFoXRldmlsby5cIixcclxuXHRkaWdpdHM6IFwiUHJvc2ltbyB2bmVzaXRlIHNhbW8gxaF0ZXZpbGEuXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCJQcm9zaW1vIHZuZXNpdGUgdmVsamF2bm8gxaF0ZXZpbGtvIGtyZWRpdG5lIGthcnRpY2UuXCIsXHJcblx0ZXF1YWxUbzogXCJQcm9zaW1vIHBvbm92bm8gdm5lc2l0ZSB2cmVkbm9zdC5cIixcclxuXHRleHRlbnNpb246IFwiUHJvc2ltbyB2bmVzaXRlIHZyZWRub3N0IHogdmVsamF2bm8ga29uxI1uaWNvLlwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlByb3NpbW8gdm5lc2l0ZSBuYWp2ZcSNIHswfSB6bmFrb3YuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zaW1vIHZuZXNpdGUgbmFqbWFuaiB7MH0gem5ha292LlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zaW1vIHZuZXNpdGUgbmFqbWFuaiB7MH0gaW4gbmFqdmXEjSB7MX0gem5ha292LlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zaW1vIHZuZXNpdGUgdnJlZG5vc3QgbWVkIHswfSBpbiB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJQcm9zaW1vIHZuZXNpdGUgdnJlZG5vc3QgbWFuasWhZSBhbGkgZW5ha28gezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiUHJvc2ltbyB2bmVzaXRlIHZyZWRub3N0IHZlxI1qZSBhbGkgZW5ha28gezB9LlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogU1IgKFNlcmJpYW47INGB0YDQv9GB0LrQuCDRmNC10LfQuNC6KVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi0J/QvtGZ0LUg0ZjQtSDQvtCx0LDQstC10LfQvdC+LlwiLFxyXG5cdHJlbW90ZTogXCLQodGA0LXQtNC40YLQtSDQvtCy0L4g0L/QvtGZ0LUuXCIsXHJcblx0ZW1haWw6IFwi0KPQvdC10YHQuNGC0LUg0LjRgdC/0YDQsNCy0L3RgyDQuC3QvNC10ZjQuyDQsNC00YDQtdGB0YMuXCIsXHJcblx0dXJsOiBcItCj0L3QtdGB0LjRgtC1INC40YHQv9GA0LDQstCw0L0gVVJMLlwiLFxyXG5cdGRhdGU6IFwi0KPQvdC10YHQuNGC0LUg0LjRgdC/0YDQsNCy0LDQvSDQtNCw0YLRg9C8LlwiLFxyXG5cdGRhdGVJU086IFwi0KPQvdC10YHQuNGC0LUg0LjRgdC/0YDQsNCy0LDQvSDQtNCw0YLRg9C8IChJU08pLlwiLFxyXG5cdG51bWJlcjogXCLQo9C90LXRgdC40YLQtSDQuNGB0L/RgNCw0LLQsNC9INCx0YDQvtGYLlwiLFxyXG5cdGRpZ2l0czogXCLQo9C90LXRgdC40YLQtSDRgdCw0LzQviDRhtC40YTQtS5cIixcclxuXHRjcmVkaXRjYXJkOiBcItCj0L3QtdGB0LjRgtC1INC40YHQv9GA0LDQstCw0L0g0LHRgNC+0Zgg0LrRgNC10LTQuNGC0L3QtSDQutCw0YDRgtC40YbQtS5cIixcclxuXHRlcXVhbFRvOiBcItCj0L3QtdGB0LjRgtC1INC40YHRgtGDINCy0YDQtdC00L3QvtGB0YIg0L/QvtC90L7QstC+LlwiLFxyXG5cdGV4dGVuc2lvbjogXCLQo9C90LXRgdC40YLQtSDQstGA0LXQtNC90L7RgdGCINGB0LAg0L7QtNCz0L7QstCw0YDQsNGY0YPRm9C+0Lwg0LXQutGB0YLQtdC90LfQuNGY0L7QvC5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQo9C90LXRgdC40YLQtSDQvNCw0ZrQtSDQvtC0IHswfSDQutCw0YDQsNC60YLQtdGA0LAuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQo9C90LXRgdC40YLQtSDQsdCw0YDQtdC8IHswfSDQutCw0YDQsNC60YLQtdGA0LAuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCj0L3QtdGB0LjRgtC1INCy0YDQtdC00L3QvtGB0YIg0LTRg9Cz0LDRh9C60YMg0LjQt9C80LXRktGDIHswfSDQuCB7MX0g0LrQsNGA0LDQutGC0LXRgNCwLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQo9C90LXRgdC40YLQtSDQstGA0LXQtNC90L7RgdGCINC40LfQvNC10ZLRgyB7MH0g0LggezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0KPQvdC10YHQuNGC0LUg0LLRgNC10LTQvdC+0YHRgiDQvNCw0ZrRgyDQuNC70Lgg0ZjQtdC00L3QsNC60YMgezB9LlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0KPQvdC10YHQuNGC0LUg0LLRgNC10LTQvdC+0YHRgiDQstC10ZvRgyDQuNC70Lgg0ZjQtdC00L3QsNC60YMgezB9LlwiICksXHJcblx0c3RlcDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCj0L3QtdGB0LjRgtC1INCy0YDQtdC00L3QvtGB0YIg0LrQvtGY0LAg0ZjQtSDRg9C80L3QvtC20LDQuiDQsdGA0L7RmNCwIHswfS5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFNSIChTZXJiaWFuIC0gTGF0aW4gYWxwaGFiZXQ7IHNycHNraSBqZXppayAtIGxhdGluaWNhKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiUG9samUgamUgb2JhdmV6bm8uXCIsXHJcblx0cmVtb3RlOiBcIlNyZWRpdGUgb3ZvIHBvbGplLlwiLFxyXG5cdGVtYWlsOiBcIlVuZXNpdGUgaXNwcmF2bnUgZS1tYWlsIGFkcmVzdVwiLFxyXG5cdHVybDogXCJVbmVzaXRlIGlzcHJhdmFuIFVSTC5cIixcclxuXHRkYXRlOiBcIlVuZXNpdGUgaXNwcmF2YW4gZGF0dW0uXCIsXHJcblx0ZGF0ZUlTTzogXCJVbmVzaXRlIGlzcHJhdmFuIGRhdHVtIChJU08pLlwiLFxyXG5cdG51bWJlcjogXCJVbmVzaXRlIGlzcHJhdmFuIGJyb2ouXCIsXHJcblx0ZGlnaXRzOiBcIlVuZXNpdGUgc2FtbyBjaWZyZS5cIixcclxuXHRjcmVkaXRjYXJkOiBcIlVuZXNpdGUgaXNwcmF2YW4gYnJvaiBrcmVkaXRuZSBrYXJ0aWNlLlwiLFxyXG5cdGVxdWFsVG86IFwiVW5lc2l0ZSBpc3R1IHZyZWRub3N0IHBvbm92by5cIixcclxuXHRleHRlbnNpb246IFwiVW5lc2l0ZSB2cmVkbm9zdCBzYSBvZGdvdmFyYWp1xIdvbSBla3N0ZW56aWpvbS5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJVbmVzaXRlIG1hbmplIG9kIHswfSBrYXJha3RlcmEuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJVbmVzaXRlIGJhcmVtIHswfSBrYXJha3RlcmEuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIlVuZXNpdGUgdnJlZG5vc3QgZHVnYcSNa3UgaXptZcSRdSB7MH0gaSB7MX0ga2FyYWt0ZXJhLlwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJVbmVzaXRlIHZyZWRub3N0IGl6bWXEkXUgezB9IGkgezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiVW5lc2l0ZSB2cmVkbm9zdCBtYW5qdSBpbGkgamVkbmFrdSB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJVbmVzaXRlIHZyZWRub3N0IHZlxId1IGlsaSBqZWRuYWt1IHswfS5cIiApLFxyXG5cdHN0ZXA6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJVbmVzaXRlIHZyZWRub3N0IGtvamEgamUgdW1ub8W+YWsgYnJvamEgezB9LlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogU1YgKFN3ZWRpc2g7IFN2ZW5za2EpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCJEZXR0YSBmJmF1bWw7bHQgJmF1bWw7ciBvYmxpZ2F0b3Jpc2t0LlwiLFxyXG5cdHJlbW90ZTogXCJWYXIgc27DpGxsIG9jaCDDpXRnw6RyZGEgZGV0dGEgZsOkbHQuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiRHUgZiZhcmluZztyIGFuZ2UgaCZvdW1sO2dzdCB7MH0gdGVja2VuLlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiRHUgbSZhcmluZztzdGUgYW5nZSBtaW5zdCB7MH0gdGVja2VuLlwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdlIG1pbnN0IHswfSBvY2ggbWF4IHsxfSB0ZWNrZW4uXCIgKSxcclxuXHRlbWFpbDogXCJBbmdlIGVuIGtvcnJla3QgZS1wb3N0YWRyZXNzLlwiLFxyXG5cdHVybDogXCJBbmdlIGVuIGtvcnJla3QgVVJMLlwiLFxyXG5cdGRhdGU6IFwiQW5nZSBldHQga29ycmVrdCBkYXR1bS5cIixcclxuXHRkYXRlSVNPOiBcIkFuZ2UgZXR0IGtvcnJla3QgZGF0dW0gKCZBcmluZzsmQXJpbmc7JkFyaW5nOyZBcmluZzstTU0tREQpLlwiLFxyXG5cdG51bWJlcjogXCJBbmdlIGV0dCBrb3JyZWt0IG51bW1lci5cIixcclxuXHRkaWdpdHM6IFwiQW5nZSBlbmRhc3Qgc2lmZnJvci5cIixcclxuXHRlcXVhbFRvOiBcIkFuZ2Ugc2FtbWEgdiZhdW1sO3JkZSBpZ2VuLlwiLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiQW5nZSBldHQgdiZhdW1sO3JkZSBtZWxsYW4gezB9IG9jaCB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdlIGV0dCB2JmF1bWw7cmRlIHNvbSAmYXVtbDtyIG1pbmRyZSBlbGxlciBsaWthIG1lZCB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCJBbmdlIGV0dCB2JmF1bWw7cmRlIHNvbSAmYXVtbDtyIHN0Jm91bWw7cnJlIGVsbGVyIGxpa2EgbWVkIHswfS5cIiApLFxyXG5cdGNyZWRpdGNhcmQ6IFwiQW5nZSBldHQga29ycmVrdCBrcmVkaXRrb3J0c251bW1lci5cIixcclxuXHRwYXR0ZXJuOiBcIk9naWx0aWd0IGZvcm1hdC5cIlxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIFRyYW5zbGF0ZWQgZGVmYXVsdCBtZXNzYWdlcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBUSCAoVGhhaTsg4LmE4LiX4LiiKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li4XCIsXHJcblx0cmVtb3RlOiBcIuC5guC4m+C4o+C4lOC5geC4geC5ieC5hOC4guC5g+C4q+C5ieC4luC4ueC4geC4leC5ieC4reC4h1wiLFxyXG5cdGVtYWlsOiBcIuC5guC4m+C4o+C4lOC4o+C4sOC4muC4uOC4l+C4teC5iOC4reC4ouC4ueC5iOC4reC4teC5gOC4oeC4peC5jOC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxyXG5cdHVybDogXCLguYLguJvguKPguJTguKPguLDguJrguLggVVJMIOC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxyXG5cdGRhdGU6IFwi4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li44Lin4Lix4LiZ4LiX4Li14LmIIOC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxyXG5cdGRhdGVJU086IFwi4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li44Lin4Lix4LiZ4LiX4Li14LmIIOC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4hyAo4Lij4Liw4Lia4LiaIElTTykuXCIsXHJcblx0bnVtYmVyOiBcIuC5guC4m+C4o+C4lOC4o+C4sOC4muC4uOC4l+C4qOC4meC4tOC4ouC4oeC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxyXG5cdGRpZ2l0czogXCLguYLguJvguKPguJTguKPguLDguJrguLjguIjguLPguJnguKfguJnguYDguJXguYfguKHguJfguLXguYjguJbguLnguIHguJXguYnguK3guIdcIixcclxuXHRjcmVkaXRjYXJkOiBcIuC5guC4m+C4o+C4lOC4o+C4sOC4muC4uOC4o+C4q+C4seC4quC4muC4seC4leC4o+C5gOC4hOC4o+C4lOC4tOC4leC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxyXG5cdGVxdWFsVG86IFwi4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li44LiE4LmI4Liy4LmA4LiU4Li04Lih4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiHXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIuC5guC4m+C4o+C4lOC4o+C4sOC4muC4uOC4hOC5iOC4suC4l+C4teC5iOC4oeC4teC4quC5iOC4p+C4meC4guC4ouC4suC4ouC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuC5guC4m+C4o+C4lOC4reC4ouC5iOC4suC4o+C4sOC4muC4uOC4hOC5iOC4suC4l+C4teC5iOC4ouC4suC4p+C4geC4p+C5iOC4siB7MH0g4Lit4Lix4LiB4LiC4Lij4LiwXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLguYLguJvguKPguJTguK3guKLguYjguLLguKPguLDguJrguLjguITguYjguLLguJfguLXguYjguKrguLHguYnguJnguIHguKfguYjguLIgezB9IOC4reC4seC4geC4guC4o+C4sFwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLguYLguJvguKPguJTguK3guKLguYjguLLguKPguLDguJrguLjguITguYjguLLguITguKfguLLguKHguKLguLLguKfguKPguLDguKvguKfguYjguLLguIcgezB9IOC4luC4tuC4hyB7MX0g4Lit4Lix4LiB4LiC4Lij4LiwXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuC5guC4m+C4o+C4lOC4o+C4sOC4muC4uOC4hOC5iOC4suC4o+C4sOC4q+C4p+C5iOC4suC4hyB7MH0g4LmB4Lil4LiwIHsxfVwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li44LiE4LmI4Liy4LiZ4LmJ4Lit4Lii4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHswfVwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li44LiE4LmI4Liy4Lih4Liy4LiB4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHswfVwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogVEogKFRhamlraXN0YW47INCX0LDQsdC+0L3QuCDRgtC+0rfQuNC606MpXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCLQktC+0YDQuNC0INC60LDRgNC00LDQvdC4INC40L0g0YTQuNC70LQg0LzQsNK30LHRg9GA0Lgg0LDRgdGCLlwiLFxyXG5cdHJlbW90ZTogXCLQmNC70YLQuNC80L7RgSwg0LzQsNGK0LvRg9C80L7RgtC4INGB0LDSs9C10rMg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxyXG5cdGVtYWlsOiBcItCY0LvRgtC40LzQvtGBLCDQv9C+0YfRgtCw0Lgg0Y3Qu9C10LrRgtGA0L7QvdC40Lgg0YHQsNKz0LXSsyDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXHJcblx0dXJsOiBcItCY0LvRgtC40LzQvtGBLCBVUkwg0LDQtNGA0LXRgdC4INGB0LDSs9C10rMg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxyXG5cdGRhdGU6IFwi0JjQu9GC0LjQvNC+0YEsINGC0LDRitGA0LjRhdC4INGB0LDSs9C10rMg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxyXG5cdGRhdGVJU086IFwi0JjQu9GC0LjQvNC+0YEsINGC0LDRitGA0LjRhdC4INGB0LDSs9C10rPQuCAoSVNPKdOjINCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcclxuXHRudW1iZXI6IFwi0JjQu9GC0LjQvNC+0YEsINGA0LDSm9Cw0LzSs9C+0Lgg0YHQsNKz0LXSsyDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXHJcblx0ZGlnaXRzOiBcItCY0LvRgtC40LzQvtGBLCDRgtCw0L3Ss9C+INGA0LDSm9Cw0Lwg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwi0JjQu9GC0LjQvNC+0YEsINC60YDQtdC00LjRgiDQutCw0YDQtNC4INGB0LDSs9C10rMg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxyXG5cdGVxdWFsVG86IFwi0JjQu9GC0LjQvNC+0YEsINC80LjSm9C00L7RgNC4INCx0LDRgNC+0LHQsNGAINCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcclxuXHRleHRlbnNpb246IFwi0JjQu9GC0LjQvNC+0YEsINKb0L7RhNC40Y/QuCDRhNCw0LnQu9GA0L4g0LTRg9GA0YPRgdGCINC40L3RgtC40YXQvtCxINC60YPQvdC10LRcIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQmNC70YLQuNC80L7RgSwg0LHQtdGI0YLQsNGAINCw0LcgezB9INGA0LDQvNC3INCy0L7RgNC40LQg0L3QsNC60YPQvdC10LQuXCIgKSxcclxuXHRtaW5sZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQmNC70YLQuNC80L7RgSwg0LrQsNC80YLQsNGAINCw0LcgezB9INGA0LDQvNC3INCy0L7RgNC40LQg0L3QsNC60YPQvdC10LQuXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCY0LvRgtC40LzQvtGBLCDQutCw0LzRgtCw0YAg0LDQtyB7MH0g0LLQsCDQt9C40ZHQtNCwINCw0LcgezF9INGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JjQu9GC0LjQvNC+0YEsINCw0LcgezB9INGC0L4gezF9INGA0LDSm9Cw0Lwg0LfQuNGR0LQg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JjQu9GC0LjQvNC+0YEsINCx0LXRiNGC0LDRgCDQsNC3IHswfSDRgNCw0pvQsNC8INCy0L7RgNC40LQg0L3QsNC60YPQvdC10LQuXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQmNC70YLQuNC80L7RgSwg0LrQsNC80YLQsNGAINCw0LcgezB9INGA0LDSm9Cw0Lwg0LLQvtGA0LjQtCDQvdCw0LrRg9C90LXQtC5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFRSIChUdXJraXNoOyBUw7xya8OnZSlcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIkJ1IGFsYW7EsW4gZG9sZHVydWxtYXPEsSB6b3J1bmx1ZHVyLlwiLFxyXG5cdHJlbW90ZTogXCJMw7x0ZmVuIGJ1IGFsYW7EsSBkw7x6ZWx0aW4uXCIsXHJcblx0ZW1haWw6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIgZS1wb3N0YSBhZHJlc2kgZ2lyaW5pei5cIixcclxuXHR1cmw6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIgd2ViIGFkcmVzaSAoVVJMKSBnaXJpbml6LlwiLFxyXG5cdGRhdGU6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIgdGFyaWggZ2lyaW5pei5cIixcclxuXHRkYXRlSVNPOiBcIkzDvHRmZW4gZ2XDp2VybGkgYmlyIHRhcmloIGdpcmluaXooSVNPIGZvcm1hdMSxbmRhKVwiLFxyXG5cdG51bWJlcjogXCJMw7x0ZmVuIGdlw6dlcmxpIGJpciBzYXnEsSBnaXJpbml6LlwiLFxyXG5cdGRpZ2l0czogXCJMw7x0ZmVuIHNhZGVjZSBzYXnEsXNhbCBrYXJha3RlcmxlciBnaXJpbml6LlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIga3JlZGkga2FydMSxIGdpcmluaXouXCIsXHJcblx0ZXF1YWxUbzogXCJMw7x0ZmVuIGF5bsSxIGRlxJ9lcmkgdGVrcmFyIGdpcmluaXouXCIsXHJcblx0ZXh0ZW5zaW9uOiBcIkzDvHRmZW4gZ2XDp2VybGkgdXphbnTEsXlhIHNhaGlwIGJpciBkZcSfZXIgZ2lyaW5pei5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJMw7x0ZmVuIGVuIGZhemxhIHswfSBrYXJha3RlciB1enVubHXEn3VuZGEgYmlyIGRlxJ9lciBnaXJpbml6LlwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTMO8dGZlbiBlbiBheiB7MH0ga2FyYWt0ZXIgdXp1bmx1xJ91bmRhIGJpciBkZcSfZXIgZ2lyaW5pei5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTMO8dGZlbiBlbiBheiB7MH0gdmUgZW4gZmF6bGEgezF9IHV6dW5sdcSfdW5kYSBiaXIgZGXEn2VyIGdpcmluaXouXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkzDvHRmZW4gezB9IGlsZSB7MX0gYXJhc8SxbmRhIGJpciBkZcSfZXIgZ2lyaW5pei5cIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkzDvHRmZW4gezB9IGRlxJ9lcmluZSBlxZ9pdCB5YSBkYSBkYWhhIGvDvMOnw7xrIGJpciBkZcSfZXIgZ2lyaW5pei5cIiApLFxyXG5cdG1pbjogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkzDvHRmZW4gezB9IGRlxJ9lcmluZSBlxZ9pdCB5YSBkYSBkYWhhIGLDvHnDvGsgYmlyIGRlxJ9lciBnaXJpbml6LlwiICksXHJcblx0cmVxdWlyZV9mcm9tX2dyb3VwOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiTMO8dGZlbiBidSBhbGFubGFyxLFuIGVuIGF6IHswfSB0YW5lc2luaSBkb2xkdXJ1bnV6LlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogVUsgKFVrcmFpbmlhbjsg0YPQutGA0LDRl9C90YHRjNC60LAg0LzQvtCy0LApXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWVzc2FnZXMsIHtcclxuXHRyZXF1aXJlZDogXCLQptC1INC/0L7Qu9C1INC90LXQvtCx0YXRltC00L3QviDQt9Cw0L/QvtCy0L3QuNGC0LguXCIsXHJcblx0cmVtb3RlOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINC/0YDQsNCy0LjQu9GM0L3QtSDQt9C90LDRh9C10L3QvdGPLlwiLFxyXG5cdGVtYWlsOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINC60L7RgNC10LrRgtC90YMg0LDQtNGA0LXRgdGDINC10LvQtdC60YLRgNC+0L3QvdC+0Zcg0L/QvtGI0YLQuC5cIixcclxuXHR1cmw6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0LrQvtGA0LXQutGC0L3QuNC5IFVSTC5cIixcclxuXHRkYXRlOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINC60L7RgNC10LrRgtC90YMg0LTQsNGC0YMuXCIsXHJcblx0ZGF0ZUlTTzogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCDQutC+0YDQtdC60YLQvdGDINC00LDRgtGDINGDINGE0L7RgNC80LDRgtGWIElTTy5cIixcclxuXHRudW1iZXI6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0YfQuNGB0LvQvi5cIixcclxuXHRkaWdpdHM6IFwi0JLQstC+0LTQuNGC0LUg0L/QvtGC0YDRltCx0L3QviDQu9C40YjQtSDRhtC40YTRgNC4LlwiLFxyXG5cdGNyZWRpdGNhcmQ6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0L/RgNCw0LLQuNC70YzQvdC40Lkg0L3QvtC80LXRgCDQutGA0LXQtNC40YLQvdC+0Zcg0LrQsNGA0YLQuC5cIixcclxuXHRlcXVhbFRvOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINGC0LDQutC1INC2INC30L3QsNGH0LXQvdC90Y8g0YnQtSDRgNCw0LcuXCIsXHJcblx0ZXh0ZW5zaW9uOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LjQsdC10YDRltGC0Ywg0YTQsNC50Lsg0Lcg0L/RgNCw0LLQuNC70YzQvdC40Lwg0YDQvtC30YjQuNGA0LXQvdC90Y/QvC5cIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCDQvdC1INCx0ZbQu9GM0YjQtSB7MH0g0YHQuNC80LLQvtC70ZbQsi5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINC90LUg0LzQtdC90YjQtSB7MH0g0YHQuNC80LLQvtC70ZbQsi5cIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0LfQvdCw0YfQtdC90L3RjyDQtNC+0LLQttC40L3QvtGOINCy0ZbQtCB7MH0g0LTQviB7MX0g0YHQuNC80LLQvtC70ZbQsi5cIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0YfQuNGB0LvQviDQstGW0LQgezB9INC00L4gezF9LlwiICksXHJcblx0bWF4OiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0YfQuNGB0LvQviwg0LzQtdC90YjQtSDQsNCx0L4g0YDRltCy0L3QviB7MH0uXCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCDRh9C40YHQu9C+LCDQsdGW0LvRjNGI0LUg0LDQsdC+INGA0ZbQstC90L4gezB9LlwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogVVIgKFVyZHU7INin2LHYr9mIKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi2KfZhiDZhdi52YTZiNmF2KfYqiDaqdinINin2YbYr9ix2KfYrCDYttix2YjYsduMINuB25JcIixcclxuXHRyZW1vdGU6IFwi2KfZhiDZhdi52YTZiNmF2KfYqiDaqdinINin2YbYr9ix2KfYrCDYttix2YjYsduMINuB25JcIixcclxuXHRlbWFpbDogXCLYr9ix2Kwg2qnbjCDbgdmI2KbbjCDYp9uMINmF24zZhCDYr9ix2LPYqiDZhtuB24zauiDbgduSXCIsXHJcblx0dXJsOiBcItiv2LHYrCDaqduM2Kcg2q/bjNinINm+2KrbgSDYr9ix2LPYqiDZhtuB24zauiDbgduSXCIsXHJcblx0ZGF0ZTogXCLYr9ix2Kwg2qnbjCDar9im24wg2KrYp9ix24zYriDYr9ix2LPYqiDZhtuB24zauiDbgduSXCIsXHJcblx0ZGF0ZUlTTzogXCLZhdi524zYp9ixINqp25Ig2YXYt9in2KjZgiDZhtuB24zauiDbgduSIChJU08pINiv2LHYrCDaqduMINqv2KbbjCDYqtin2LHbjNiuXCIsXHJcblx0bnVtYmVyOiBcItiv2LHYrCDaqduM25Lar9im25Ig24HZhtiv2LPbkiDYr9ix2LPYqiDZhtuB24zauiDbgduM2rpcIixcclxuXHRkaWdpdHM6IFwi2LXYsdmBINuB2YbYr9iz25Ig2KfZhtiv2LHYp9isINqp2KbbkiDYrNin2LPaqdiq25Ig24HbjNq6XCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLYr9ix2Kwg2qnbjNinINqv24zYpyDaqdin2LHaiCDZhtmF2KjYsSDYr9ix2LPYqiDZhtuB24zauiDbgduSXCIsXHJcblx0ZXF1YWxUbzogXCLYp9mG2K/Ysdin2Kwg2qnYpyDZhdmI2KfYstmG24Eg2K/Ysdiz2Kog2YbbgduM2rog24HbklwiLFxyXG5cdGV4dGVuc2lvbjogXCLYp9mG2K/Ysdin2Kwg2K/Ysdiz2Kog2YbbgduM2rog24HbklwiLFxyXG5cdG1heGxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItiy24zYp9iv24Eg2LPbkiDYstuM2KfYr9uBIHswfSDaqdinINin2YbYr9ix2KfYrCDaqdixINiz2qnYqtuSINuB24zaulwiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2qnZhSDYs9uSINqp2YUgezB9INqp2Kcg2KfZhtiv2LHYp9isINqp2LHZhtinINi22LHZiNix24wg24HbklwiICksXHJcblx0cmFuZ2VsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLYp9mG2K/Ysdin2Kwg2qnYpyB7MH0g2KfZiNixIHsxfdqp25Ig2K/YsdmF24zYp9mGINuB2YjZhtinINi22LHZiNix24wg24HbklwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLYp9mG2K/Ysdin2Kwg2qnYpyB7MH0g2KfZiNixIHsxfSDaqduSINiv2LHZhduM2KfZhiDbgdmI2YbYpyDYttix2YjYsduMINuB25JcIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcItiy24zYp9iv24Eg2LPbkiDYstuM2KfYr9uBIHswfSDaqdinINin2YbYr9ix2KfYrCDaqdixINiz2qnYqtuSINuB24zaulwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi2qnZhSDYs9uSINqp2YUgezB9INqp2Kcg2KfZhtiv2LHYp9isINqp2LHZhtinINi22LHZiNix24wg24HbklwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBUcmFuc2xhdGVkIGRlZmF1bHQgbWVzc2FnZXMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogVkkgKFZpZXRuYW1lc2U7IFRp4bq/bmcgVmnhu4d0KVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwiSMOjeSBuaOG6rXAuXCIsXHJcblx0cmVtb3RlOiBcIkjDo3kgc+G7rWEgY2hvIMSRw7puZy5cIixcclxuXHRlbWFpbDogXCJIw6N5IG5o4bqtcCBlbWFpbC5cIixcclxuXHR1cmw6IFwiSMOjeSBuaOG6rXAgVVJMLlwiLFxyXG5cdGRhdGU6IFwiSMOjeSBuaOG6rXAgbmfDoHkuXCIsXHJcblx0ZGF0ZUlTTzogXCJIw6N5IG5o4bqtcCBuZ8OgeSAoSVNPKS5cIixcclxuXHRudW1iZXI6IFwiSMOjeSBuaOG6rXAgc+G7kS5cIixcclxuXHRkaWdpdHM6IFwiSMOjeSBuaOG6rXAgY2jhu68gc+G7kS5cIixcclxuXHRjcmVkaXRjYXJkOiBcIkjDo3kgbmjhuq1wIHPhu5EgdGjhursgdMOtbiBk4bulbmcuXCIsXHJcblx0ZXF1YWxUbzogXCJIw6N5IG5o4bqtcCB0aMOqbSBs4bqnbiBu4buvYS5cIixcclxuXHRleHRlbnNpb246IFwiUGjhuqduIG3hu58gcuG7mW5nIGtow7RuZyDEkcO6bmcuXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiSMOjeSBuaOG6rXAgdOG7qyB7MH0ga8OtIHThu7EgdHLhu58geHXhu5FuZy5cIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkjDo3kgbmjhuq1wIHThu6sgezB9IGvDrSB04buxIHRy4bufIGzDqm4uXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkjDo3kgbmjhuq1wIHThu6sgezB9IMSR4bq/biB7MX0ga8OtIHThu7EuXCIgKSxcclxuXHRyYW5nZTogJC52YWxpZGF0b3IuZm9ybWF0KCBcIkjDo3kgbmjhuq1wIHThu6sgezB9IMSR4bq/biB7MX0uXCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCJIw6N5IG5o4bqtcCB04burIHswfSB0cuG7nyB4deG7kW5nLlwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwiSMOjeSBuaOG6rXAgdOG7qyB7MH0gdHLhu58gbMOqbi5cIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFpIIChDaGluZXNlLCDkuK3mlocgKFpoxY1uZ3fDqW4pLCDmsYnor60sIOa8ouiqnilcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXNzYWdlcywge1xyXG5cdHJlcXVpcmVkOiBcIui/meaYr+W/heWhq+Wtl+autVwiLFxyXG5cdHJlbW90ZTogXCLor7fkv67mraPmraTlrZfmrrVcIixcclxuXHRlbWFpbDogXCLor7fovpPlhaXmnInmlYjnmoTnlLXlrZDpgq7ku7blnLDlnYBcIixcclxuXHR1cmw6IFwi6K+36L6T5YWl5pyJ5pWI55qE572R5Z2AXCIsXHJcblx0ZGF0ZTogXCLor7fovpPlhaXmnInmlYjnmoTml6XmnJ9cIixcclxuXHRkYXRlSVNPOiBcIuivt+i+k+WFpeacieaViOeahOaXpeacnyAoWVlZWS1NTS1ERClcIixcclxuXHRudW1iZXI6IFwi6K+36L6T5YWl5pyJ5pWI55qE5pWw5a2XXCIsXHJcblx0ZGlnaXRzOiBcIuWPquiDvei+k+WFpeaVsOWtl1wiLFxyXG5cdGNyZWRpdGNhcmQ6IFwi6K+36L6T5YWl5pyJ5pWI55qE5L+h55So5Y2h5Y+356CBXCIsXHJcblx0ZXF1YWxUbzogXCLkvaDnmoTovpPlhaXkuI3nm7jlkIxcIixcclxuXHRleHRlbnNpb246IFwi6K+36L6T5YWl5pyJ5pWI55qE5ZCO57yAXCIsXHJcblx0bWF4bGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi5pyA5aSa5Y+v5Lul6L6T5YWlIHswfSDkuKrlrZfnrKZcIiApLFxyXG5cdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuacgOWwkeimgei+k+WFpSB7MH0g5Liq5a2X56ymXCIgKSxcclxuXHRyYW5nZWxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuivt+i+k+WFpemVv+W6puWcqCB7MH0g5YiwIHsxfSDkuYvpl7TnmoTlrZfnrKbkuLJcIiApLFxyXG5cdHJhbmdlOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi6K+36L6T5YWl6IyD5Zu05ZyoIHswfSDliLAgezF9IOS5i+mXtOeahOaVsOWAvFwiICksXHJcblx0c3RlcDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuivt+i+k+WFpSB7MH0g55qE5pW05pWw5YCN5YC8XCIgKSxcclxuXHRtYXg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLor7fovpPlhaXkuI3lpKfkuo4gezB9IOeahOaVsOWAvFwiICksXHJcblx0bWluOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi6K+36L6T5YWl5LiN5bCP5LqOIHswfSDnmoTmlbDlgLxcIiApXHJcbn0gKTtcclxuIiwiLypcclxuICogVHJhbnNsYXRlZCBkZWZhdWx0IG1lc3NhZ2VzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IFpIIChDaGluZXNlOyDkuK3mlocgKFpoxY1uZ3fDqW4pLCDmsYnor60sIOa8ouiqnilcclxuICogUmVnaW9uOiBUVyAoVGFpd2FuKVxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1lc3NhZ2VzLCB7XHJcblx0cmVxdWlyZWQ6IFwi5b+F6aCI5aGr5a+rXCIsXHJcblx0cmVtb3RlOiBcIuiri+S/ruato+atpOashOS9jVwiLFxyXG5cdGVtYWlsOiBcIuiri+i8uOWFpeacieaViOeahOmbu+WtkOmDteS7tlwiLFxyXG5cdHVybDogXCLoq4vovLjlhaXmnInmlYjnmoTntrLlnYBcIixcclxuXHRkYXRlOiBcIuiri+i8uOWFpeacieaViOeahOaXpeacn1wiLFxyXG5cdGRhdGVJU086IFwi6KuL6Ly45YWl5pyJ5pWI55qE5pel5pyfIChZWVlZLU1NLUREKVwiLFxyXG5cdG51bWJlcjogXCLoq4vovLjlhaXmraPnorrnmoTmlbjlgLxcIixcclxuXHRkaWdpdHM6IFwi5Y+q5Y+v6Ly45YWl5pW45a2XXCIsXHJcblx0Y3JlZGl0Y2FyZDogXCLoq4vovLjlhaXmnInmlYjnmoTkv6HnlKjljaHomZ/norxcIixcclxuXHRlcXVhbFRvOiBcIuiri+mHjeikh+i8uOWFpeS4gOasoVwiLFxyXG5cdGV4dGVuc2lvbjogXCLoq4vovLjlhaXmnInmlYjnmoTlvozntrRcIixcclxuXHRtYXhsZW5ndGg6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLmnIDlpJogezB9IOWAi+Wtl1wiICksXHJcblx0bWlubGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi5pyA5bCRIHswfSDlgIvlrZdcIiApLFxyXG5cdHJhbmdlbGVuZ3RoOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi6KuL6Ly45YWl6ZW35bqm54K6IHswfSDoh7MgezF9IOS5i+mWk+eahOWtl+S4slwiICksXHJcblx0cmFuZ2U6ICQudmFsaWRhdG9yLmZvcm1hdCggXCLoq4vovLjlhaUgezB9IOiHsyB7MX0g5LmL6ZaT55qE5pW45YC8XCIgKSxcclxuXHRzdGVwOiAkLnZhbGlkYXRvci5mb3JtYXQoIFwi6KuL6Ly45YWlIHswfSDnmoTmlbTmlbjlgI3lgLxcIiApLFxyXG5cdG1heDogJC52YWxpZGF0b3IuZm9ybWF0KCBcIuiri+i8uOWFpeS4jeWkp+aWvCB7MH0g55qE5pW45YC8XCIgKSxcclxuXHRtaW46ICQudmFsaWRhdG9yLmZvcm1hdCggXCLoq4vovLjlhaXkuI3lsI/mlrwgezB9IOeahOaVuOWAvFwiIClcclxufSApO1xyXG4iLCIvKlxyXG4gKiBMb2NhbGl6ZWQgZGVmYXVsdCBtZXRob2RzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IERFXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWV0aG9kcywge1xyXG5cdGRhdGU6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL15cXGRcXGQ/XFwuXFxkXFxkP1xcLlxcZFxcZFxcZD9cXGQ/JC8udGVzdCggdmFsdWUgKTtcclxuXHR9LFxyXG5cdG51bWJlcjogZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXi0/KD86XFxkK3xcXGR7MSwzfSg/OlxcLlxcZHszfSkrKSg/OixcXGQrKT8kLy50ZXN0KCB2YWx1ZSApO1xyXG5cdH1cclxufSApO1xyXG4iLCIvKlxyXG4gKiBMb2NhbGl6ZWQgZGVmYXVsdCBtZXRob2RzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEVTX0NMXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWV0aG9kcywge1xyXG5cdGRhdGU6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL15cXGRcXGQ/XFwtXFxkXFxkP1xcLVxcZFxcZFxcZD9cXGQ/JC8udGVzdCggdmFsdWUgKTtcclxuXHR9LFxyXG5cdG51bWJlcjogZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXi0/KD86XFxkK3xcXGR7MSwzfSg/OlxcLlxcZHszfSkrKSg/OixcXGQrKT8kLy50ZXN0KCB2YWx1ZSApO1xyXG5cdH1cclxufSApO1xyXG4iLCIvKlxyXG4gKiBMb2NhbGl6ZWQgZGVmYXVsdCBtZXRob2RzIGZvciB0aGUgalF1ZXJ5IHZhbGlkYXRpb24gcGx1Z2luLlxyXG4gKiBMb2NhbGU6IEZJXHJcbiAqL1xyXG4kLmV4dGVuZCggJC52YWxpZGF0b3IubWV0aG9kcywge1xyXG5cdGRhdGU6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL15cXGR7MSwyfVxcLlxcZHsxLDJ9XFwuXFxkezR9JC8udGVzdCggdmFsdWUgKTtcclxuXHR9LFxyXG5cdG51bWJlcjogZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXi0/KD86XFxkKykoPzosXFxkKyk/JC8udGVzdCggdmFsdWUgKTtcclxuXHR9XHJcbn0gKTtcclxuIiwiLypcclxuICogTG9jYWxpemVkIGRlZmF1bHQgbWV0aG9kcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBJVFxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1ldGhvZHMsIHtcclxuXHRkYXRlOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eXFxkXFxkP1xcLVxcZFxcZD9cXC1cXGRcXGRcXGQ/XFxkPyQvLnRlc3QoIHZhbHVlICk7XHJcblx0fSxcclxuXHRudW1iZXI6IGZ1bmN0aW9uKCB2YWx1ZSwgZWxlbWVudCApIHtcclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKCBlbGVtZW50ICkgfHwgL14tPyg/OlxcZCt8XFxkezEsM30oPzpcXC5cXGR7M30pKykoPzosXFxkKyk/JC8udGVzdCggdmFsdWUgKTtcclxuXHR9XHJcbn0gKTtcclxuIiwiLypcclxuICogTG9jYWxpemVkIGRlZmF1bHQgbWV0aG9kcyBmb3IgdGhlIGpRdWVyeSB2YWxpZGF0aW9uIHBsdWdpbi5cclxuICogTG9jYWxlOiBOTFxyXG4gKi9cclxuJC5leHRlbmQoICQudmFsaWRhdG9yLm1ldGhvZHMsIHtcclxuXHRkYXRlOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eXFxkXFxkP1tcXC5cXC9cXC1dXFxkXFxkP1tcXC5cXC9cXC1dXFxkXFxkXFxkP1xcZD8kLy50ZXN0KCB2YWx1ZSApO1xyXG5cdH0sXHJcblx0bnVtYmVyOiBmdW5jdGlvbiggdmFsdWUsIGVsZW1lbnQgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25hbCggZWxlbWVudCApIHx8IC9eLT8oPzpcXGQrfFxcZHsxLDN9KD86XFwuXFxkezN9KSspKD86LFxcZCspPyQvLnRlc3QoIHZhbHVlICk7XHJcblx0fVxyXG59ICk7XHJcbiIsIi8qXHJcbiAqIExvY2FsaXplZCBkZWZhdWx0IG1ldGhvZHMgZm9yIHRoZSBqUXVlcnkgdmFsaWRhdGlvbiBwbHVnaW4uXHJcbiAqIExvY2FsZTogUFRfQlJcclxuICovXHJcbiQuZXh0ZW5kKCAkLnZhbGlkYXRvci5tZXRob2RzLCB7XHJcblx0ZGF0ZTogZnVuY3Rpb24oIHZhbHVlLCBlbGVtZW50ICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uYWwoIGVsZW1lbnQgKSB8fCAvXlxcZFxcZD9cXC9cXGRcXGQ/XFwvXFxkXFxkXFxkP1xcZD8kLy50ZXN0KCB2YWx1ZSApO1xyXG5cdH1cclxufSApO1xyXG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyBmYW5jeUJveCB2My41LjdcclxuLy9cclxuLy8gTGljZW5zZWQgR1BMdjMgZm9yIG9wZW4gc291cmNlIHVzZVxyXG4vLyBvciBmYW5jeUJveCBDb21tZXJjaWFsIExpY2Vuc2UgZm9yIGNvbW1lcmNpYWwgdXNlXHJcbi8vXHJcbi8vIGh0dHA6Ly9mYW5jeWFwcHMuY29tL2ZhbmN5Ym94L1xyXG4vLyBDb3B5cmlnaHQgMjAxOSBmYW5jeUFwcHNcclxuLy9cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuKGZ1bmN0aW9uICh3aW5kb3csIGRvY3VtZW50LCAkLCB1bmRlZmluZWQpIHtcclxuICBcInVzZSBzdHJpY3RcIjtcclxuXHJcbiAgd2luZG93LmNvbnNvbGUgPSB3aW5kb3cuY29uc29sZSB8fCB7XHJcbiAgICBpbmZvOiBmdW5jdGlvbiAoc3R1ZmYpIHt9XHJcbiAgfTtcclxuXHJcbiAgLy8gSWYgdGhlcmUncyBubyBqUXVlcnksIGZhbmN5Qm94IGNhbid0IHdvcmtcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBpZiAoISQpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIGZhbmN5Qm94IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWRcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIGlmICgkLmZuLmZhbmN5Ym94KSB7XHJcbiAgICBjb25zb2xlLmluZm8oXCJmYW5jeUJveCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO1xyXG5cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIFByaXZhdGUgZGVmYXVsdCBzZXR0aW5nc1xyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICB2YXIgZGVmYXVsdHMgPSB7XHJcbiAgICAvLyBDbG9zZSBleGlzdGluZyBtb2RhbHNcclxuICAgIC8vIFNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdSBkbyBub3QgbmVlZCB0byBzdGFjayBtdWx0aXBsZSBpbnN0YW5jZXNcclxuICAgIGNsb3NlRXhpc3Rpbmc6IGZhbHNlLFxyXG5cclxuICAgIC8vIEVuYWJsZSBpbmZpbml0ZSBnYWxsZXJ5IG5hdmlnYXRpb25cclxuICAgIGxvb3A6IGZhbHNlLFxyXG5cclxuICAgIC8vIEhvcml6b250YWwgc3BhY2UgYmV0d2VlbiBzbGlkZXNcclxuICAgIGd1dHRlcjogNTAsXHJcblxyXG4gICAgLy8gRW5hYmxlIGtleWJvYXJkIG5hdmlnYXRpb25cclxuICAgIGtleWJvYXJkOiB0cnVlLFxyXG5cclxuICAgIC8vIFNob3VsZCBhbGxvdyBjYXB0aW9uIHRvIG92ZXJsYXAgdGhlIGNvbnRlbnRcclxuICAgIHByZXZlbnRDYXB0aW9uT3ZlcmxhcDogdHJ1ZSxcclxuXHJcbiAgICAvLyBTaG91bGQgZGlzcGxheSBuYXZpZ2F0aW9uIGFycm93cyBhdCB0aGUgc2NyZWVuIGVkZ2VzXHJcbiAgICBhcnJvd3M6IHRydWUsXHJcblxyXG4gICAgLy8gU2hvdWxkIGRpc3BsYXkgY291bnRlciBhdCB0aGUgdG9wIGxlZnQgY29ybmVyXHJcbiAgICBpbmZvYmFyOiB0cnVlLFxyXG5cclxuICAgIC8vIFNob3VsZCBkaXNwbGF5IGNsb3NlIGJ1dHRvbiAodXNpbmcgYGJ0blRwbC5zbWFsbEJ0bmAgdGVtcGxhdGUpIG92ZXIgdGhlIGNvbnRlbnRcclxuICAgIC8vIENhbiBiZSB0cnVlLCBmYWxzZSwgXCJhdXRvXCJcclxuICAgIC8vIElmIFwiYXV0b1wiIC0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgZm9yIFwiaHRtbFwiLCBcImlubGluZVwiIG9yIFwiYWpheFwiIGl0ZW1zXHJcbiAgICBzbWFsbEJ0bjogXCJhdXRvXCIsXHJcblxyXG4gICAgLy8gU2hvdWxkIGRpc3BsYXkgdG9vbGJhciAoYnV0dG9ucyBhdCB0aGUgdG9wKVxyXG4gICAgLy8gQ2FuIGJlIHRydWUsIGZhbHNlLCBcImF1dG9cIlxyXG4gICAgLy8gSWYgXCJhdXRvXCIgLSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaGlkZGVuIGlmIFwic21hbGxCdG5cIiBpcyBlbmFibGVkXHJcbiAgICB0b29sYmFyOiBcImF1dG9cIixcclxuXHJcbiAgICAvLyBXaGF0IGJ1dHRvbnMgc2hvdWxkIGFwcGVhciBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lci5cclxuICAgIC8vIEJ1dHRvbnMgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIHRlbXBsYXRlcyBmcm9tIGBidG5UcGxgIG9wdGlvblxyXG4gICAgLy8gYW5kIHRoZXkgd2lsbCBiZSBwbGFjZWQgaW50byB0b29sYmFyIChjbGFzcz1cImZhbmN5Ym94LXRvb2xiYXJcImAgZWxlbWVudClcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgXCJ6b29tXCIsXHJcbiAgICAgIC8vXCJzaGFyZVwiLFxyXG4gICAgICBcInNsaWRlU2hvd1wiLFxyXG4gICAgICAvL1wiZnVsbFNjcmVlblwiLFxyXG4gICAgICAvL1wiZG93bmxvYWRcIixcclxuICAgICAgXCJ0aHVtYnNcIixcclxuICAgICAgXCJjbG9zZVwiXHJcbiAgICBdLFxyXG5cclxuICAgIC8vIERldGVjdCBcImlkbGVcIiB0aW1lIGluIHNlY29uZHNcclxuICAgIGlkbGVUaW1lOiAzLFxyXG5cclxuICAgIC8vIERpc2FibGUgcmlnaHQtY2xpY2sgYW5kIHVzZSBzaW1wbGUgaW1hZ2UgcHJvdGVjdGlvbiBmb3IgaW1hZ2VzXHJcbiAgICBwcm90ZWN0OiBmYWxzZSxcclxuXHJcbiAgICAvLyBTaG9ydGN1dCB0byBtYWtlIGNvbnRlbnQgXCJtb2RhbFwiIC0gZGlzYWJsZSBrZXlib2FyZCBuYXZpZ3Rpb24sIGhpZGUgYnV0dG9ucywgZXRjXHJcbiAgICBtb2RhbDogZmFsc2UsXHJcblxyXG4gICAgaW1hZ2U6IHtcclxuICAgICAgLy8gV2FpdCBmb3IgaW1hZ2VzIHRvIGxvYWQgYmVmb3JlIGRpc3BsYXlpbmdcclxuICAgICAgLy8gICB0cnVlICAtIHdhaXQgZm9yIGltYWdlIHRvIGxvYWQgYW5kIHRoZW4gZGlzcGxheTtcclxuICAgICAgLy8gICBmYWxzZSAtIGRpc3BsYXkgdGh1bWJuYWlsIGFuZCBsb2FkIHRoZSBmdWxsLXNpemVkIGltYWdlIG92ZXIgdG9wLFxyXG4gICAgICAvLyAgICAgICAgICAgcmVxdWlyZXMgcHJlZGVmaW5lZCBpbWFnZSBkaW1lbnNpb25zIChgZGF0YS13aWR0aGAgYW5kIGBkYXRhLWhlaWdodGAgYXR0cmlidXRlcylcclxuICAgICAgcHJlbG9hZDogZmFsc2VcclxuICAgIH0sXHJcblxyXG4gICAgYWpheDoge1xyXG4gICAgICAvLyBPYmplY3QgY29udGFpbmluZyBzZXR0aW5ncyBmb3IgYWpheCByZXF1ZXN0XHJcbiAgICAgIHNldHRpbmdzOiB7XHJcbiAgICAgICAgLy8gVGhpcyBoZWxwcyB0byBpbmRpY2F0ZSB0aGF0IHJlcXVlc3QgY29tZXMgZnJvbSB0aGUgbW9kYWxcclxuICAgICAgICAvLyBGZWVsIGZyZWUgdG8gY2hhbmdlIG5hbWluZ1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGZhbmN5Ym94OiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGlmcmFtZToge1xyXG4gICAgICAvLyBJZnJhbWUgdGVtcGxhdGVcclxuICAgICAgdHBsOiAnPGlmcmFtZSBpZD1cImZhbmN5Ym94LWZyYW1le3JuZH1cIiBuYW1lPVwiZmFuY3lib3gtZnJhbWV7cm5kfVwiIGNsYXNzPVwiZmFuY3lib3gtaWZyYW1lXCIgYWxsb3dmdWxsc2NyZWVuPVwiYWxsb3dmdWxsc2NyZWVuXCIgYWxsb3c9XCJhdXRvcGxheTsgZnVsbHNjcmVlblwiIHNyYz1cIlwiPjwvaWZyYW1lPicsXHJcblxyXG4gICAgICAvLyBQcmVsb2FkIGlmcmFtZSBiZWZvcmUgZGlzcGxheWluZyBpdFxyXG4gICAgICAvLyBUaGlzIGFsbG93cyB0byBjYWxjdWxhdGUgaWZyYW1lIGNvbnRlbnQgd2lkdGggYW5kIGhlaWdodFxyXG4gICAgICAvLyAobm90ZTogRHVlIHRvIFwiU2FtZSBPcmlnaW4gUG9saWN5XCIsIHlvdSBjYW4ndCBnZXQgY3Jvc3MgZG9tYWluIGRhdGEpLlxyXG4gICAgICBwcmVsb2FkOiB0cnVlLFxyXG5cclxuICAgICAgLy8gQ3VzdG9tIENTUyBzdHlsaW5nIGZvciBpZnJhbWUgd3JhcHBpbmcgZWxlbWVudFxyXG4gICAgICAvLyBZb3UgY2FuIHVzZSB0aGlzIHRvIHNldCBjdXN0b20gaWZyYW1lIGRpbWVuc2lvbnNcclxuICAgICAgY3NzOiB7fSxcclxuXHJcbiAgICAgIC8vIElmcmFtZSB0YWcgYXR0cmlidXRlc1xyXG4gICAgICBhdHRyOiB7XHJcbiAgICAgICAgc2Nyb2xsaW5nOiBcImF1dG9cIlxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEZvciBIVE1MNSB2aWRlbyBvbmx5XHJcbiAgICB2aWRlbzoge1xyXG4gICAgICB0cGw6ICc8dmlkZW8gY2xhc3M9XCJmYW5jeWJveC12aWRlb1wiIGNvbnRyb2xzIGNvbnRyb2xzTGlzdD1cIm5vZG93bmxvYWRcIiBwb3N0ZXI9XCJ7e3Bvc3Rlcn19XCI+JyArXHJcbiAgICAgICAgJzxzb3VyY2Ugc3JjPVwie3tzcmN9fVwiIHR5cGU9XCJ7e2Zvcm1hdH19XCIgLz4nICtcclxuICAgICAgICAnU29ycnksIHlvdXIgYnJvd3NlciBkb2VzblxcJ3Qgc3VwcG9ydCBlbWJlZGRlZCB2aWRlb3MsIDxhIGhyZWY9XCJ7e3NyY319XCI+ZG93bmxvYWQ8L2E+IGFuZCB3YXRjaCB3aXRoIHlvdXIgZmF2b3JpdGUgdmlkZW8gcGxheWVyIScgK1xyXG4gICAgICAgIFwiPC92aWRlbz5cIixcclxuICAgICAgZm9ybWF0OiBcIlwiLCAvLyBjdXN0b20gdmlkZW8gZm9ybWF0XHJcbiAgICAgIGF1dG9TdGFydDogdHJ1ZVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBEZWZhdWx0IGNvbnRlbnQgdHlwZSBpZiBjYW5ub3QgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseVxyXG4gICAgZGVmYXVsdFR5cGU6IFwiaW1hZ2VcIixcclxuXHJcbiAgICAvLyBPcGVuL2Nsb3NlIGFuaW1hdGlvbiB0eXBlXHJcbiAgICAvLyBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAvLyAgIGZhbHNlICAgICAgICAgICAgLSBkaXNhYmxlXHJcbiAgICAvLyAgIFwiem9vbVwiICAgICAgICAgICAtIHpvb20gaW1hZ2VzIGZyb20vdG8gdGh1bWJuYWlsXHJcbiAgICAvLyAgIFwiZmFkZVwiXHJcbiAgICAvLyAgIFwiem9vbS1pbi1vdXRcIlxyXG4gICAgLy9cclxuICAgIGFuaW1hdGlvbkVmZmVjdDogXCJ6b29tXCIsXHJcblxyXG4gICAgLy8gRHVyYXRpb24gaW4gbXMgZm9yIG9wZW4vY2xvc2UgYW5pbWF0aW9uXHJcbiAgICBhbmltYXRpb25EdXJhdGlvbjogMzY2LFxyXG5cclxuICAgIC8vIFNob3VsZCBpbWFnZSBjaGFuZ2Ugb3BhY2l0eSB3aGlsZSB6b29taW5nXHJcbiAgICAvLyBJZiBvcGFjaXR5IGlzIFwiYXV0b1wiLCB0aGVuIG9wYWNpdHkgd2lsbCBiZSBjaGFuZ2VkIGlmIGltYWdlIGFuZCB0aHVtYm5haWwgaGF2ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvc1xyXG4gICAgem9vbU9wYWNpdHk6IFwiYXV0b1wiLFxyXG5cclxuICAgIC8vIFRyYW5zaXRpb24gZWZmZWN0IGJldHdlZW4gc2xpZGVzXHJcbiAgICAvL1xyXG4gICAgLy8gUG9zc2libGUgdmFsdWVzOlxyXG4gICAgLy8gICBmYWxzZSAgICAgICAgICAgIC0gZGlzYWJsZVxyXG4gICAgLy8gICBcImZhZGUnXHJcbiAgICAvLyAgIFwic2xpZGUnXHJcbiAgICAvLyAgIFwiY2lyY3VsYXInXHJcbiAgICAvLyAgIFwidHViZSdcclxuICAgIC8vICAgXCJ6b29tLWluLW91dCdcclxuICAgIC8vICAgXCJyb3RhdGUnXHJcbiAgICAvL1xyXG4gICAgdHJhbnNpdGlvbkVmZmVjdDogXCJmYWRlXCIsXHJcblxyXG4gICAgLy8gRHVyYXRpb24gaW4gbXMgZm9yIHRyYW5zaXRpb24gYW5pbWF0aW9uXHJcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IDM2NixcclxuXHJcbiAgICAvLyBDdXN0b20gQ1NTIGNsYXNzIGZvciBzbGlkZSBlbGVtZW50XHJcbiAgICBzbGlkZUNsYXNzOiBcIlwiLFxyXG5cclxuICAgIC8vIEN1c3RvbSBDU1MgY2xhc3MgZm9yIGxheW91dFxyXG4gICAgYmFzZUNsYXNzOiBcIlwiLFxyXG5cclxuICAgIC8vIEJhc2UgdGVtcGxhdGUgZm9yIGxheW91dFxyXG4gICAgYmFzZVRwbDogJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWJnXCI+PC9kaXY+JyArXHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtaW5uZXJcIj4nICtcclxuICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1pbmZvYmFyXCI+PHNwYW4gZGF0YS1mYW5jeWJveC1pbmRleD48L3NwYW4+Jm5ic3A7LyZuYnNwOzxzcGFuIGRhdGEtZmFuY3lib3gtY291bnQ+PC9zcGFuPjwvZGl2PicgK1xyXG4gICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LXRvb2xiYXJcIj57e2J1dHRvbnN9fTwvZGl2PicgK1xyXG4gICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LW5hdmlnYXRpb25cIj57e2Fycm93c319PC9kaXY+JyArXHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtc3RhZ2VcIj48L2Rpdj4nICtcclxuICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1jYXB0aW9uXCI+PGRpdiBjbGFzcz1cImZhbmN5Ym94LWNhcHRpb25fX2JvZHlcIj48L2Rpdj48L2Rpdj4nICtcclxuICAgICAgXCI8L2Rpdj5cIiArXHJcbiAgICAgIFwiPC9kaXY+XCIsXHJcblxyXG4gICAgLy8gTG9hZGluZyBpbmRpY2F0b3IgdGVtcGxhdGVcclxuICAgIHNwaW5uZXJUcGw6ICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtbG9hZGluZ1wiPjwvZGl2PicsXHJcblxyXG4gICAgLy8gRXJyb3IgbWVzc2FnZSB0ZW1wbGF0ZVxyXG4gICAgZXJyb3JUcGw6ICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtZXJyb3JcIj48cD57e0VSUk9SfX08L3A+PC9kaXY+JyxcclxuXHJcbiAgICBidG5UcGw6IHtcclxuICAgICAgZG93bmxvYWQ6ICc8YSBkb3dubG9hZCBkYXRhLWZhbmN5Ym94LWRvd25sb2FkIGNsYXNzPVwiZmFuY3lib3gtYnV0dG9uIGZhbmN5Ym94LWJ1dHRvbi0tZG93bmxvYWRcIiB0aXRsZT1cInt7RE9XTkxPQUR9fVwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIj4nICtcclxuICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMTguNjIgMTcuMDlWMTlINS4zOHYtMS45MXptLTIuOTctNi45NkwxNyAxMS40NWwtNSA0Ljg3LTUtNC44NyAxLjM2LTEuMzIgMi42OCAyLjY0VjVoMS45MnY3Ljc3elwiLz48L3N2Zz4nICtcclxuICAgICAgICBcIjwvYT5cIixcclxuXHJcbiAgICAgIHpvb206ICc8YnV0dG9uIGRhdGEtZmFuY3lib3gtem9vbSBjbGFzcz1cImZhbmN5Ym94LWJ1dHRvbiBmYW5jeWJveC1idXR0b24tLXpvb21cIiB0aXRsZT1cInt7Wk9PTX19XCI+JyArXHJcbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTE4LjcgMTcuM2wtMy0zYTUuOSA1LjkgMCAwIDAtLjYtNy42IDUuOSA1LjkgMCAwIDAtOC40IDAgNS45IDUuOSAwIDAgMCAwIDguNCA1LjkgNS45IDAgMCAwIDcuNy43bDMgM2ExIDEgMCAwIDAgMS4zIDBjLjQtLjUuNC0xIDAtMS41ek04LjEgMTMuOGE0IDQgMCAwIDEgMC01LjcgNCA0IDAgMCAxIDUuNyAwIDQgNCAwIDAgMSAwIDUuNyA0IDQgMCAwIDEtNS43IDB6XCIvPjwvc3ZnPicgK1xyXG4gICAgICAgIFwiPC9idXR0b24+XCIsXHJcblxyXG4gICAgICBjbG9zZTogJzxidXR0b24gZGF0YS1mYW5jeWJveC1jbG9zZSBjbGFzcz1cImZhbmN5Ym94LWJ1dHRvbiBmYW5jeWJveC1idXR0b24tLWNsb3NlXCIgdGl0bGU9XCJ7e0NMT1NFfX1cIj4nICtcclxuICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMTIgMTAuNkw2LjYgNS4yIDUuMiA2LjZsNS40IDUuNC01LjQgNS40IDEuNCAxLjQgNS40LTUuNCA1LjQgNS40IDEuNC0xLjQtNS40LTUuNCA1LjQtNS40LTEuNC0xLjQtNS40IDUuNHpcIi8+PC9zdmc+JyArXHJcbiAgICAgICAgXCI8L2J1dHRvbj5cIixcclxuXHJcbiAgICAgIC8vIEFycm93c1xyXG4gICAgICBhcnJvd0xlZnQ6ICc8YnV0dG9uIGRhdGEtZmFuY3lib3gtcHJldiBjbGFzcz1cImZhbmN5Ym94LWJ1dHRvbiBmYW5jeWJveC1idXR0b24tLWFycm93X2xlZnRcIiB0aXRsZT1cInt7UFJFVn19XCI+JyArXHJcbiAgICAgICAgJzxkaXY+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMTEuMjggMTUuN2wtMS4zNCAxLjM3TDUgMTJsNC45NC01LjA3IDEuMzQgMS4zOC0yLjY4IDIuNzJIMTl2MS45NEg4LjZ6XCIvPjwvc3ZnPjwvZGl2PicgK1xyXG4gICAgICAgIFwiPC9idXR0b24+XCIsXHJcblxyXG4gICAgICBhcnJvd1JpZ2h0OiAnPGJ1dHRvbiBkYXRhLWZhbmN5Ym94LW5leHQgY2xhc3M9XCJmYW5jeWJveC1idXR0b24gZmFuY3lib3gtYnV0dG9uLS1hcnJvd19yaWdodFwiIHRpdGxlPVwie3tORVhUfX1cIj4nICtcclxuICAgICAgICAnPGRpdj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0xNS40IDEyLjk3bC0yLjY4IDIuNzIgMS4zNCAxLjM4TDE5IDEybC00Ljk0LTUuMDctMS4zNCAxLjM4IDIuNjggMi43Mkg1djEuOTR6XCIvPjwvc3ZnPjwvZGl2PicgK1xyXG4gICAgICAgIFwiPC9idXR0b24+XCIsXHJcblxyXG4gICAgICAvLyBUaGlzIHNtYWxsIGNsb3NlIGJ1dHRvbiB3aWxsIGJlIGFwcGVuZGVkIHRvIHlvdXIgaHRtbC9pbmxpbmUvYWpheCBjb250ZW50IGJ5IGRlZmF1bHQsXHJcbiAgICAgIC8vIGlmIFwic21hbGxCdG5cIiBvcHRpb24gaXMgbm90IHNldCB0byBmYWxzZVxyXG4gICAgICBzbWFsbEJ0bjogJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJmYW5jeWJveC1idXR0b24gZmFuY3lib3gtY2xvc2Utc21hbGxcIiB0aXRsZT1cInt7Q0xPU0V9fVwiPicgK1xyXG4gICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2ZXJzaW9uPVwiMVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTEzIDEybDUtNS0xLTEtNSA1LTUtNS0xIDEgNSA1LTUgNSAxIDEgNS01IDUgNSAxLTF6XCIvPjwvc3ZnPicgK1xyXG4gICAgICAgIFwiPC9idXR0b24+XCJcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQ29udGFpbmVyIGlzIGluamVjdGVkIGludG8gdGhpcyBlbGVtZW50XHJcbiAgICBwYXJlbnRFbDogXCJib2R5XCIsXHJcblxyXG4gICAgLy8gSGlkZSBicm93c2VyIHZlcnRpY2FsIHNjcm9sbGJhcnM7IHVzZSBhdCB5b3VyIG93biByaXNrXHJcbiAgICBoaWRlU2Nyb2xsYmFyOiB0cnVlLFxyXG5cclxuICAgIC8vIEZvY3VzIGhhbmRsaW5nXHJcbiAgICAvLyA9PT09PT09PT09PT09PVxyXG5cclxuICAgIC8vIFRyeSB0byBmb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgYWZ0ZXIgb3BlbmluZ1xyXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxyXG5cclxuICAgIC8vIFB1dCBmb2N1cyBiYWNrIHRvIGFjdGl2ZSBlbGVtZW50IGFmdGVyIGNsb3NpbmdcclxuICAgIGJhY2tGb2N1czogdHJ1ZSxcclxuXHJcbiAgICAvLyBEbyBub3QgbGV0IHVzZXIgdG8gZm9jdXMgb24gZWxlbWVudCBvdXRzaWRlIG1vZGFsIGNvbnRlbnRcclxuICAgIHRyYXBGb2N1czogdHJ1ZSxcclxuXHJcbiAgICAvLyBNb2R1bGUgc3BlY2lmaWMgb3B0aW9uc1xyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBmdWxsU2NyZWVuOiB7XHJcbiAgICAgIGF1dG9TdGFydDogZmFsc2VcclxuICAgIH0sXHJcblxyXG4gICAgLy8gU2V0IGB0b3VjaDogZmFsc2VgIHRvIGRpc2FibGUgcGFubmluZy9zd2lwaW5nXHJcbiAgICB0b3VjaDoge1xyXG4gICAgICB2ZXJ0aWNhbDogdHJ1ZSwgLy8gQWxsb3cgdG8gZHJhZyBjb250ZW50IHZlcnRpY2FsbHlcclxuICAgICAgbW9tZW50dW06IHRydWUgLy8gQ29udGludWUgbW92ZW1lbnQgYWZ0ZXIgcmVsZWFzaW5nIG1vdXNlL3RvdWNoIHdoZW4gcGFubmluZ1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBIYXNoIHZhbHVlIHdoZW4gaW5pdGlhbGl6aW5nIG1hbnVhbGx5LFxyXG4gICAgLy8gc2V0IGBmYWxzZWAgdG8gZGlzYWJsZSBoYXNoIGNoYW5nZVxyXG4gICAgaGFzaDogbnVsbCxcclxuXHJcbiAgICAvLyBDdXN0b21pemUgb3IgYWRkIG5ldyBtZWRpYSB0eXBlc1xyXG4gICAgLy8gRXhhbXBsZTpcclxuICAgIC8qXHJcbiAgICAgIG1lZGlhIDoge1xyXG4gICAgICAgIHlvdXR1YmUgOiB7XHJcbiAgICAgICAgICBwYXJhbXMgOiB7XHJcbiAgICAgICAgICAgIGF1dG9wbGF5IDogMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKi9cclxuICAgIG1lZGlhOiB7fSxcclxuXHJcbiAgICBzbGlkZVNob3c6IHtcclxuICAgICAgYXV0b1N0YXJ0OiBmYWxzZSxcclxuICAgICAgc3BlZWQ6IDMwMDBcclxuICAgIH0sXHJcblxyXG4gICAgdGh1bWJzOiB7XHJcbiAgICAgIGF1dG9TdGFydDogZmFsc2UsIC8vIERpc3BsYXkgdGh1bWJuYWlscyBvbiBvcGVuaW5nXHJcbiAgICAgIGhpZGVPbkNsb3NlOiB0cnVlLCAvLyBIaWRlIHRodW1ibmFpbCBncmlkIHdoZW4gY2xvc2luZyBhbmltYXRpb24gc3RhcnRzXHJcbiAgICAgIHBhcmVudEVsOiBcIi5mYW5jeWJveC1jb250YWluZXJcIiwgLy8gQ29udGFpbmVyIGlzIGluamVjdGVkIGludG8gdGhpcyBlbGVtZW50XHJcbiAgICAgIGF4aXM6IFwieVwiIC8vIFZlcnRpY2FsICh5KSBvciBob3Jpem9udGFsICh4KSBzY3JvbGxpbmdcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVXNlIG1vdXNld2hlZWwgdG8gbmF2aWdhdGUgZ2FsbGVyeVxyXG4gICAgLy8gSWYgJ2F1dG8nIC0gZW5hYmxlZCBmb3IgaW1hZ2VzIG9ubHlcclxuICAgIHdoZWVsOiBcImF1dG9cIixcclxuXHJcbiAgICAvLyBDYWxsYmFja3NcclxuICAgIC8vPT09PT09PT09PVxyXG5cclxuICAgIC8vIFNlZSBEb2N1bWVudGF0aW9uL0FQSS9FdmVudHMgZm9yIG1vcmUgaW5mb3JtYXRpb25cclxuICAgIC8vIEV4YW1wbGU6XHJcbiAgICAvKlxyXG4gICAgICBhZnRlclNob3c6IGZ1bmN0aW9uKCBpbnN0YW5jZSwgY3VycmVudCApIHtcclxuICAgICAgICBjb25zb2xlLmluZm8oICdDbGlja2VkIGVsZW1lbnQ6JyApO1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyggY3VycmVudC5vcHRzLiRvcmlnICk7XHJcbiAgICAgIH1cclxuICAgICovXHJcblxyXG4gICAgb25Jbml0OiAkLm5vb3AsIC8vIFdoZW4gaW5zdGFuY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcclxuXHJcbiAgICBiZWZvcmVMb2FkOiAkLm5vb3AsIC8vIEJlZm9yZSB0aGUgY29udGVudCBvZiBhIHNsaWRlIGlzIGJlaW5nIGxvYWRlZFxyXG4gICAgYWZ0ZXJMb2FkOiAkLm5vb3AsIC8vIFdoZW4gdGhlIGNvbnRlbnQgb2YgYSBzbGlkZSBpcyBkb25lIGxvYWRpbmdcclxuXHJcbiAgICBiZWZvcmVTaG93OiAkLm5vb3AsIC8vIEJlZm9yZSBvcGVuIGFuaW1hdGlvbiBzdGFydHNcclxuICAgIGFmdGVyU2hvdzogJC5ub29wLCAvLyBXaGVuIGNvbnRlbnQgaXMgZG9uZSBsb2FkaW5nIGFuZCBhbmltYXRpbmdcclxuXHJcbiAgICBiZWZvcmVDbG9zZTogJC5ub29wLCAvLyBCZWZvcmUgdGhlIGluc3RhbmNlIGF0dGVtcHRzIHRvIGNsb3NlLiBSZXR1cm4gZmFsc2UgdG8gY2FuY2VsIHRoZSBjbG9zZS5cclxuICAgIGFmdGVyQ2xvc2U6ICQubm9vcCwgLy8gQWZ0ZXIgaW5zdGFuY2UgaGFzIGJlZW4gY2xvc2VkXHJcblxyXG4gICAgb25BY3RpdmF0ZTogJC5ub29wLCAvLyBXaGVuIGluc3RhbmNlIGlzIGJyb3VnaHQgdG8gZnJvbnRcclxuICAgIG9uRGVhY3RpdmF0ZTogJC5ub29wLCAvLyBXaGVuIG90aGVyIGluc3RhbmNlIGhhcyBiZWVuIGFjdGl2YXRlZFxyXG5cclxuICAgIC8vIEludGVyYWN0aW9uXHJcbiAgICAvLyA9PT09PT09PT09PVxyXG5cclxuICAgIC8vIFVzZSBvcHRpb25zIGJlbG93IHRvIGN1c3RvbWl6ZSB0YWtlbiBhY3Rpb24gd2hlbiB1c2VyIGNsaWNrcyBvciBkb3VibGUgY2xpY2tzIG9uIHRoZSBmYW5jeUJveCBhcmVhLFxyXG4gICAgLy8gZWFjaCBvcHRpb24gY2FuIGJlIHN0cmluZyBvciBtZXRob2QgdGhhdCByZXR1cm5zIHZhbHVlLlxyXG4gICAgLy9cclxuICAgIC8vIFBvc3NpYmxlIHZhbHVlczpcclxuICAgIC8vICAgXCJjbG9zZVwiICAgICAgICAgICAtIGNsb3NlIGluc3RhbmNlXHJcbiAgICAvLyAgIFwibmV4dFwiICAgICAgICAgICAgLSBtb3ZlIHRvIG5leHQgZ2FsbGVyeSBpdGVtXHJcbiAgICAvLyAgIFwibmV4dE9yQ2xvc2VcIiAgICAgLSBtb3ZlIHRvIG5leHQgZ2FsbGVyeSBpdGVtIG9yIGNsb3NlIGlmIGdhbGxlcnkgaGFzIG9ubHkgb25lIGl0ZW1cclxuICAgIC8vICAgXCJ0b2dnbGVDb250cm9sc1wiICAtIHNob3cvaGlkZSBjb250cm9sc1xyXG4gICAgLy8gICBcInpvb21cIiAgICAgICAgICAgIC0gem9vbSBpbWFnZSAoaWYgbG9hZGVkKVxyXG4gICAgLy8gICBmYWxzZSAgICAgICAgICAgICAtIGRvIG5vdGhpbmdcclxuXHJcbiAgICAvLyBDbGlja2VkIG9uIHRoZSBjb250ZW50XHJcbiAgICBjbGlja0NvbnRlbnQ6IGZ1bmN0aW9uIChjdXJyZW50LCBldmVudCkge1xyXG4gICAgICByZXR1cm4gY3VycmVudC50eXBlID09PSBcImltYWdlXCIgPyBcInpvb21cIiA6IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDbGlja2VkIG9uIHRoZSBzbGlkZVxyXG4gICAgY2xpY2tTbGlkZTogXCJjbG9zZVwiLFxyXG5cclxuICAgIC8vIENsaWNrZWQgb24gdGhlIGJhY2tncm91bmQgKGJhY2tkcm9wKSBlbGVtZW50O1xyXG4gICAgLy8gaWYgeW91IGhhdmUgbm90IGNoYW5nZWQgdGhlIGxheW91dCwgdGhlbiBtb3N0IGxpa2VseSB5b3UgbmVlZCB0byB1c2UgYGNsaWNrU2xpZGVgIG9wdGlvblxyXG4gICAgY2xpY2tPdXRzaWRlOiBcImNsb3NlXCIsXHJcblxyXG4gICAgLy8gU2FtZSBhcyBwcmV2aW91cyB0d28sIGJ1dCBmb3IgZG91YmxlIGNsaWNrXHJcbiAgICBkYmxjbGlja0NvbnRlbnQ6IGZhbHNlLFxyXG4gICAgZGJsY2xpY2tTbGlkZTogZmFsc2UsXHJcbiAgICBkYmxjbGlja091dHNpZGU6IGZhbHNlLFxyXG5cclxuICAgIC8vIEN1c3RvbSBvcHRpb25zIHdoZW4gbW9iaWxlIGRldmljZSBpcyBkZXRlY3RlZFxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgbW9iaWxlOiB7XHJcbiAgICAgIHByZXZlbnRDYXB0aW9uT3ZlcmxhcDogZmFsc2UsXHJcbiAgICAgIGlkbGVUaW1lOiBmYWxzZSxcclxuICAgICAgY2xpY2tDb250ZW50OiBmdW5jdGlvbiAoY3VycmVudCwgZXZlbnQpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudC50eXBlID09PSBcImltYWdlXCIgPyBcInRvZ2dsZUNvbnRyb2xzXCIgOiBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgY2xpY2tTbGlkZTogZnVuY3Rpb24gKGN1cnJlbnQsIGV2ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQudHlwZSA9PT0gXCJpbWFnZVwiID8gXCJ0b2dnbGVDb250cm9sc1wiIDogXCJjbG9zZVwiO1xyXG4gICAgICB9LFxyXG4gICAgICBkYmxjbGlja0NvbnRlbnQ6IGZ1bmN0aW9uIChjdXJyZW50LCBldmVudCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50LnR5cGUgPT09IFwiaW1hZ2VcIiA/IFwiem9vbVwiIDogZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRibGNsaWNrU2xpZGU6IGZ1bmN0aW9uIChjdXJyZW50LCBldmVudCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50LnR5cGUgPT09IFwiaW1hZ2VcIiA/IFwiem9vbVwiIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gSW50ZXJuYXRpb25hbGl6YXRpb25cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgbGFuZzogXCJlblwiLFxyXG4gICAgaTE4bjoge1xyXG4gICAgICBlbjoge1xyXG4gICAgICAgIENMT1NFOiBcIkNsb3NlXCIsXHJcbiAgICAgICAgTkVYVDogXCJOZXh0XCIsXHJcbiAgICAgICAgUFJFVjogXCJQcmV2aW91c1wiLFxyXG4gICAgICAgIEVSUk9SOiBcIlRoZSByZXF1ZXN0ZWQgY29udGVudCBjYW5ub3QgYmUgbG9hZGVkLiA8YnIvPiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiLFxyXG4gICAgICAgIFBMQVlfU1RBUlQ6IFwiU3RhcnQgc2xpZGVzaG93XCIsXHJcbiAgICAgICAgUExBWV9TVE9QOiBcIlBhdXNlIHNsaWRlc2hvd1wiLFxyXG4gICAgICAgIEZVTExfU0NSRUVOOiBcIkZ1bGwgc2NyZWVuXCIsXHJcbiAgICAgICAgVEhVTUJTOiBcIlRodW1ibmFpbHNcIixcclxuICAgICAgICBET1dOTE9BRDogXCJEb3dubG9hZFwiLFxyXG4gICAgICAgIFNIQVJFOiBcIlNoYXJlXCIsXHJcbiAgICAgICAgWk9PTTogXCJab29tXCJcclxuICAgICAgfSxcclxuICAgICAgZGU6IHtcclxuICAgICAgICBDTE9TRTogXCJTY2hsaWUmc3psaWc7ZW5cIixcclxuICAgICAgICBORVhUOiBcIldlaXRlclwiLFxyXG4gICAgICAgIFBSRVY6IFwiWnVyJnV1bWw7Y2tcIixcclxuICAgICAgICBFUlJPUjogXCJEaWUgYW5nZWZvcmRlcnRlbiBEYXRlbiBrb25udGVuIG5pY2h0IGdlbGFkZW4gd2VyZGVuLiA8YnIvPiBCaXR0ZSB2ZXJzdWNoZW4gU2llIGVzIHNwJmF1bWw7dGVyIG5vY2htYWwuXCIsXHJcbiAgICAgICAgUExBWV9TVEFSVDogXCJEaWFzY2hhdSBzdGFydGVuXCIsXHJcbiAgICAgICAgUExBWV9TVE9QOiBcIkRpYXNjaGF1IGJlZW5kZW5cIixcclxuICAgICAgICBGVUxMX1NDUkVFTjogXCJWb2xsYmlsZFwiLFxyXG4gICAgICAgIFRIVU1CUzogXCJWb3JzY2hhdWJpbGRlclwiLFxyXG4gICAgICAgIERPV05MT0FEOiBcIkhlcnVudGVybGFkZW5cIixcclxuICAgICAgICBTSEFSRTogXCJUZWlsZW5cIixcclxuICAgICAgICBaT09NOiBcIlZlcmdyJm91bWw7JnN6bGlnO2VyblwiXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBGZXcgdXNlZnVsIHZhcmlhYmxlcyBhbmQgbWV0aG9kc1xyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHZhciAkVyA9ICQod2luZG93KTtcclxuICB2YXIgJEQgPSAkKGRvY3VtZW50KTtcclxuXHJcbiAgdmFyIGNhbGxlZCA9IDA7XHJcblxyXG4gIC8vIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhIGpRdWVyeSBvYmplY3QgYW5kIG5vdCBhIG5hdGl2ZSBKYXZhU2NyaXB0IG9iamVjdFxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIHZhciBpc1F1ZXJ5ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgcmV0dXJuIG9iaiAmJiBvYmouaGFzT3duUHJvcGVydHkgJiYgb2JqIGluc3RhbmNlb2YgJDtcclxuICB9O1xyXG5cclxuICAvLyBIYW5kbGUgbXVsdGlwbGUgYnJvd3NlcnMgZm9yIFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIgYW5kIFwiY2FuY2VsQW5pbWF0aW9uRnJhbWVcIlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICB2YXIgcmVxdWVzdEFGcmFtZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcclxuICAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICB3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICAvLyBpZiBhbGwgZWxzZSBmYWlscywgdXNlIHNldFRpbWVvdXRcclxuICAgICAgZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH0pKCk7XHJcblxyXG4gIHZhciBjYW5jZWxBRnJhbWUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgIHdpbmRvdy53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICB3aW5kb3cubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWUgfHxcclxuICAgICAgd2luZG93Lm9DYW5jZWxBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGlkKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9KSgpO1xyXG5cclxuICAvLyBEZXRlY3QgdGhlIHN1cHBvcnRlZCB0cmFuc2l0aW9uLWVuZCBldmVudCBwcm9wZXJ0eSBuYW1lXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIHZhciB0cmFuc2l0aW9uRW5kID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmYWtlZWxlbWVudFwiKSxcclxuICAgICAgdDtcclxuXHJcbiAgICB2YXIgdHJhbnNpdGlvbnMgPSB7XHJcbiAgICAgIHRyYW5zaXRpb246IFwidHJhbnNpdGlvbmVuZFwiLFxyXG4gICAgICBPVHJhbnNpdGlvbjogXCJvVHJhbnNpdGlvbkVuZFwiLFxyXG4gICAgICBNb3pUcmFuc2l0aW9uOiBcInRyYW5zaXRpb25lbmRcIixcclxuICAgICAgV2Via2l0VHJhbnNpdGlvbjogXCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCJcclxuICAgIH07XHJcblxyXG4gICAgZm9yICh0IGluIHRyYW5zaXRpb25zKSB7XHJcbiAgICAgIGlmIChlbC5zdHlsZVt0XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFwidHJhbnNpdGlvbmVuZFwiO1xyXG4gIH0pKCk7XHJcblxyXG4gIC8vIEZvcmNlIHJlZHJhdyBvbiBhbiBlbGVtZW50LlxyXG4gIC8vIFRoaXMgaGVscHMgaW4gY2FzZXMgd2hlcmUgdGhlIGJyb3dzZXIgZG9lc24ndCByZWRyYXcgYW4gdXBkYXRlZCBlbGVtZW50IHByb3Blcmx5XHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICB2YXIgZm9yY2VSZWRyYXcgPSBmdW5jdGlvbiAoJGVsKSB7XHJcbiAgICByZXR1cm4gJGVsICYmICRlbC5sZW5ndGggJiYgJGVsWzBdLm9mZnNldEhlaWdodDtcclxuICB9O1xyXG5cclxuICAvLyBFeGNsdWRlIGFycmF5IChgYnV0dG9uc2ApIG9wdGlvbnMgZnJvbSBkZWVwIG1lcmdpbmdcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICB2YXIgbWVyZ2VPcHRzID0gZnVuY3Rpb24gKG9wdHMxLCBvcHRzMikge1xyXG4gICAgdmFyIHJleiA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRzMSwgb3B0czIpO1xyXG5cclxuICAgICQuZWFjaChvcHRzMiwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgaWYgKCQuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICByZXpba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmV6O1xyXG4gIH07XHJcblxyXG4gIC8vIEhvdyBtdWNoIG9mIGFuIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB2aWV3cG9ydFxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICB2YXIgaW5WaWV3cG9ydCA9IGZ1bmN0aW9uIChlbGVtKSB7XHJcbiAgICB2YXIgZWxlbUNlbnRlciwgcmV6O1xyXG5cclxuICAgIGlmICghZWxlbSB8fCBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAkKFwiLmZhbmN5Ym94LWNvbnRhaW5lclwiKS5jc3MoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XHJcblxyXG4gICAgZWxlbUNlbnRlciA9IHtcclxuICAgICAgeDogZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgZWxlbS5vZmZzZXRXaWR0aCAvIDIsXHJcbiAgICAgIHk6IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgZWxlbS5vZmZzZXRIZWlnaHQgLyAyXHJcbiAgICB9O1xyXG5cclxuICAgIHJleiA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZWxlbUNlbnRlci54LCBlbGVtQ2VudGVyLnkpID09PSBlbGVtO1xyXG5cclxuICAgICQoXCIuZmFuY3lib3gtY29udGFpbmVyXCIpLmNzcyhcInBvaW50ZXItZXZlbnRzXCIsIFwiXCIpO1xyXG5cclxuICAgIHJldHVybiByZXo7XHJcbiAgfTtcclxuXHJcbiAgLy8gQ2xhc3MgZGVmaW5pdGlvblxyXG4gIC8vID09PT09PT09PT09PT09PT1cclxuXHJcbiAgdmFyIEZhbmN5Qm94ID0gZnVuY3Rpb24gKGNvbnRlbnQsIG9wdHMsIGluZGV4KSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgc2VsZi5vcHRzID0gbWVyZ2VPcHRzKHtcclxuICAgICAgaW5kZXg6IGluZGV4XHJcbiAgICB9LCAkLmZhbmN5Ym94LmRlZmF1bHRzKTtcclxuXHJcbiAgICBpZiAoJC5pc1BsYWluT2JqZWN0KG9wdHMpKSB7XHJcbiAgICAgIHNlbGYub3B0cyA9IG1lcmdlT3B0cyhzZWxmLm9wdHMsIG9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgkLmZhbmN5Ym94LmlzTW9iaWxlKSB7XHJcbiAgICAgIHNlbGYub3B0cyA9IG1lcmdlT3B0cyhzZWxmLm9wdHMsIHNlbGYub3B0cy5tb2JpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGYuaWQgPSBzZWxmLm9wdHMuaWQgfHwgKytjYWxsZWQ7XHJcblxyXG4gICAgc2VsZi5jdXJySW5kZXggPSBwYXJzZUludChzZWxmLm9wdHMuaW5kZXgsIDEwKSB8fCAwO1xyXG4gICAgc2VsZi5wcmV2SW5kZXggPSBudWxsO1xyXG5cclxuICAgIHNlbGYucHJldlBvcyA9IG51bGw7XHJcbiAgICBzZWxmLmN1cnJQb3MgPSAwO1xyXG5cclxuICAgIHNlbGYuZmlyc3RSdW4gPSB0cnVlO1xyXG5cclxuICAgIC8vIEFsbCBncm91cCBpdGVtc1xyXG4gICAgc2VsZi5ncm91cCA9IFtdO1xyXG5cclxuICAgIC8vIEV4aXN0aW5nIHNsaWRlcyAoZm9yIGN1cnJlbnQsIG5leHQgYW5kIHByZXZpb3VzIGdhbGxlcnkgaXRlbXMpXHJcbiAgICBzZWxmLnNsaWRlcyA9IHt9O1xyXG5cclxuICAgIC8vIENyZWF0ZSBncm91cCBlbGVtZW50c1xyXG4gICAgc2VsZi5hZGRDb250ZW50KGNvbnRlbnQpO1xyXG5cclxuICAgIGlmICghc2VsZi5ncm91cC5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGYuaW5pdCgpO1xyXG4gIH07XHJcblxyXG4gICQuZXh0ZW5kKEZhbmN5Qm94LnByb3RvdHlwZSwge1xyXG4gICAgLy8gQ3JlYXRlIERPTSBzdHJ1Y3R1cmVcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgZmlyc3RJdGVtID0gc2VsZi5ncm91cFtzZWxmLmN1cnJJbmRleF0sXHJcbiAgICAgICAgZmlyc3RJdGVtT3B0cyA9IGZpcnN0SXRlbS5vcHRzLFxyXG4gICAgICAgICRjb250YWluZXIsXHJcbiAgICAgICAgYnV0dG9uU3RyO1xyXG5cclxuICAgICAgaWYgKGZpcnN0SXRlbU9wdHMuY2xvc2VFeGlzdGluZykge1xyXG4gICAgICAgICQuZmFuY3lib3guY2xvc2UodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhpZGUgc2Nyb2xsYmFyc1xyXG4gICAgICAvLyA9PT09PT09PT09PT09PT1cclxuXHJcbiAgICAgICQoXCJib2R5XCIpLmFkZENsYXNzKFwiZmFuY3lib3gtYWN0aXZlXCIpO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICEkLmZhbmN5Ym94LmdldEluc3RhbmNlKCkgJiZcclxuICAgICAgICBmaXJzdEl0ZW1PcHRzLmhpZGVTY3JvbGxiYXIgIT09IGZhbHNlICYmXHJcbiAgICAgICAgISQuZmFuY3lib3guaXNNb2JpbGUgJiZcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodFxyXG4gICAgICApIHtcclxuICAgICAgICAkKFwiaGVhZFwiKS5hcHBlbmQoXHJcbiAgICAgICAgICAnPHN0eWxlIGlkPVwiZmFuY3lib3gtc3R5bGUtbm9zY3JvbGxcIiB0eXBlPVwidGV4dC9jc3NcIj4uY29tcGVuc2F0ZS1mb3Itc2Nyb2xsYmFye21hcmdpbi1yaWdodDonICtcclxuICAgICAgICAgICh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgK1xyXG4gICAgICAgICAgXCJweDt9PC9zdHlsZT5cIlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgICQoXCJib2R5XCIpLmFkZENsYXNzKFwiY29tcGVuc2F0ZS1mb3Itc2Nyb2xsYmFyXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBCdWlsZCBodG1sIG1hcmt1cCBhbmQgc2V0IHJlZmVyZW5jZXNcclxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgICAvLyBCdWlsZCBodG1sIGNvZGUgZm9yIGJ1dHRvbnMgYW5kIGluc2VydCBpbnRvIG1haW4gdGVtcGxhdGVcclxuICAgICAgYnV0dG9uU3RyID0gXCJcIjtcclxuXHJcbiAgICAgICQuZWFjaChmaXJzdEl0ZW1PcHRzLmJ1dHRvbnMsIGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcclxuICAgICAgICBidXR0b25TdHIgKz0gZmlyc3RJdGVtT3B0cy5idG5UcGxbdmFsdWVdIHx8IFwiXCI7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIG1hcmt1cCBmcm9tIGJhc2UgdGVtcGxhdGUsIGl0IHdpbGwgYmUgaW5pdGlhbGx5IGhpZGRlbiB0b1xyXG4gICAgICAvLyBhdm9pZCB1bm5lY2Vzc2FyeSB3b3JrIGxpa2UgcGFpbnRpbmcgd2hpbGUgaW5pdGlhbGl6aW5nIGlzIG5vdCBjb21wbGV0ZVxyXG4gICAgICAkY29udGFpbmVyID0gJChcclxuICAgICAgICAgIHNlbGYudHJhbnNsYXRlKFxyXG4gICAgICAgICAgICBzZWxmLFxyXG4gICAgICAgICAgICBmaXJzdEl0ZW1PcHRzLmJhc2VUcGxcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCJ7e2J1dHRvbnN9fVwiLCBidXR0b25TdHIpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwie3thcnJvd3N9fVwiLCBmaXJzdEl0ZW1PcHRzLmJ0blRwbC5hcnJvd0xlZnQgKyBmaXJzdEl0ZW1PcHRzLmJ0blRwbC5hcnJvd1JpZ2h0KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZmFuY3lib3gtY29udGFpbmVyLVwiICsgc2VsZi5pZClcclxuICAgICAgICAuYWRkQ2xhc3MoZmlyc3RJdGVtT3B0cy5iYXNlQ2xhc3MpXHJcbiAgICAgICAgLmRhdGEoXCJGYW5jeUJveFwiLCBzZWxmKVxyXG4gICAgICAgIC5hcHBlbmRUbyhmaXJzdEl0ZW1PcHRzLnBhcmVudEVsKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSBvYmplY3QgaG9sZGluZyByZWZlcmVuY2VzIHRvIGpRdWVyeSB3cmFwcGVkIG5vZGVzXHJcbiAgICAgIHNlbGYuJHJlZnMgPSB7XHJcbiAgICAgICAgY29udGFpbmVyOiAkY29udGFpbmVyXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBbXCJiZ1wiLCBcImlubmVyXCIsIFwiaW5mb2JhclwiLCBcInRvb2xiYXJcIiwgXCJzdGFnZVwiLCBcImNhcHRpb25cIiwgXCJuYXZpZ2F0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBzZWxmLiRyZWZzW2l0ZW1dID0gJGNvbnRhaW5lci5maW5kKFwiLmZhbmN5Ym94LVwiICsgaXRlbSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2VsZi50cmlnZ2VyKFwib25Jbml0XCIpO1xyXG5cclxuICAgICAgLy8gRW5hYmxlIGV2ZW50cywgZGVhY3RpdmUgcHJldmlvdXMgaW5zdGFuY2VzXHJcbiAgICAgIHNlbGYuYWN0aXZhdGUoKTtcclxuXHJcbiAgICAgIC8vIEJ1aWxkIHNsaWRlcywgbG9hZCBhbmQgcmV2ZWFsIGNvbnRlbnRcclxuICAgICAgc2VsZi5qdW1wVG8oc2VsZi5jdXJySW5kZXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBTaW1wbGUgaTE4biBzdXBwb3J0IC0gcmVwbGFjZXMgb2JqZWN0IGtleXMgZm91bmQgaW4gdGVtcGxhdGVcclxuICAgIC8vIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXNcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKG9iaiwgc3RyKSB7XHJcbiAgICAgIHZhciBhcnIgPSBvYmoub3B0cy5pMThuW29iai5vcHRzLmxhbmddIHx8IG9iai5vcHRzLmkxOG4uZW47XHJcblxyXG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xce1xceyhcXHcrKVxcfVxcfS9nLCBmdW5jdGlvbiAobWF0Y2gsIG4pIHtcclxuICAgICAgICByZXR1cm4gYXJyW25dID09PSB1bmRlZmluZWQgPyBtYXRjaCA6IGFycltuXTtcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFBvcHVsYXRlIGN1cnJlbnQgZ3JvdXAgd2l0aCBmcmVzaCBjb250ZW50XHJcbiAgICAvLyBDaGVjayBpZiBlYWNoIG9iamVjdCBoYXMgdmFsaWQgdHlwZSBhbmQgY29udGVudFxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBhZGRDb250ZW50OiBmdW5jdGlvbiAoY29udGVudCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgaXRlbXMgPSAkLm1ha2VBcnJheShjb250ZW50KSxcclxuICAgICAgICB0aHVtYnM7XHJcblxyXG4gICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpLCBpdGVtKSB7XHJcbiAgICAgICAgdmFyIG9iaiA9IHt9LFxyXG4gICAgICAgICAgb3B0cyA9IHt9LFxyXG4gICAgICAgICAgJGl0ZW0sXHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgZm91bmQsXHJcbiAgICAgICAgICBzcmMsXHJcbiAgICAgICAgICBzcmNQYXJ0cztcclxuXHJcbiAgICAgICAgLy8gU3RlcCAxIC0gTWFrZSBzdXJlIHdlIGhhdmUgYW4gb2JqZWN0XHJcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgICAgIGlmICgkLmlzUGxhaW5PYmplY3QoaXRlbSkpIHtcclxuICAgICAgICAgIC8vIFdlIHByb2JhYmx5IGhhdmUgbWFudWFsIHVzYWdlIGhlcmUsIHNvbWV0aGluZyBsaWtlXHJcbiAgICAgICAgICAvLyAkLmZhbmN5Ym94Lm9wZW4oIFsgeyBzcmMgOiBcImltYWdlLmpwZ1wiLCB0eXBlIDogXCJpbWFnZVwiIH0gXSApXHJcblxyXG4gICAgICAgICAgb2JqID0gaXRlbTtcclxuICAgICAgICAgIG9wdHMgPSBpdGVtLm9wdHMgfHwgaXRlbTtcclxuICAgICAgICB9IGVsc2UgaWYgKCQudHlwZShpdGVtKSA9PT0gXCJvYmplY3RcIiAmJiAkKGl0ZW0pLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gSGVyZSB3ZSBwcm9iYWJseSBoYXZlIGpRdWVyeSBjb2xsZWN0aW9uIHJldHVybmVkIGJ5IHNvbWUgc2VsZWN0b3JcclxuICAgICAgICAgICRpdGVtID0gJChpdGVtKTtcclxuXHJcbiAgICAgICAgICAvLyBTdXBwb3J0IGF0dHJpYnV0ZXMgbGlrZSBgZGF0YS1vcHRpb25zPSd7XCJ0b3VjaFwiIDogZmFsc2V9J2AgYW5kIGBkYXRhLXRvdWNoPSdmYWxzZSdgXHJcbiAgICAgICAgICBvcHRzID0gJGl0ZW0uZGF0YSgpIHx8IHt9O1xyXG4gICAgICAgICAgb3B0cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRzLCBvcHRzLm9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgIC8vIEhlcmUgd2Ugc3RvcmUgY2xpY2tlZCBlbGVtZW50XHJcbiAgICAgICAgICBvcHRzLiRvcmlnID0gJGl0ZW07XHJcblxyXG4gICAgICAgICAgb2JqLnNyYyA9IHNlbGYub3B0cy5zcmMgfHwgb3B0cy5zcmMgfHwgJGl0ZW0uYXR0cihcImhyZWZcIik7XHJcblxyXG4gICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc2ltcGxlIHN5bnRheCBpcyB1c2VkLCBmb3IgZXhhbXBsZTpcclxuICAgICAgICAgIC8vICAgYCQuZmFuY3lib3gub3BlbiggJChcIiN0ZXN0XCIpLCB7fSApO2BcclxuICAgICAgICAgIGlmICghb2JqLnR5cGUgJiYgIW9iai5zcmMpIHtcclxuICAgICAgICAgICAgb2JqLnR5cGUgPSBcImlubGluZVwiO1xyXG4gICAgICAgICAgICBvYmouc3JjID0gaXRlbTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQXNzdW1lIHdlIGhhdmUgYSBzaW1wbGUgaHRtbCBjb2RlLCBmb3IgZXhhbXBsZTpcclxuICAgICAgICAgIC8vICAgJC5mYW5jeWJveC5vcGVuKCAnPGRpdj48aDE+SGkhPC9oMT48L2Rpdj4nICk7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiaHRtbFwiLFxyXG4gICAgICAgICAgICBzcmM6IGl0ZW0gKyBcIlwiXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRWFjaCBnYWxsZXJ5IG9iamVjdCBoYXMgZnVsbCBjb2xsZWN0aW9uIG9mIG9wdGlvbnNcclxuICAgICAgICBvYmoub3B0cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBzZWxmLm9wdHMsIG9wdHMpO1xyXG5cclxuICAgICAgICAvLyBEbyBub3QgbWVyZ2UgYnV0dG9ucyBhcnJheVxyXG4gICAgICAgIGlmICgkLmlzQXJyYXkob3B0cy5idXR0b25zKSkge1xyXG4gICAgICAgICAgb2JqLm9wdHMuYnV0dG9ucyA9IG9wdHMuYnV0dG9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgkLmZhbmN5Ym94LmlzTW9iaWxlICYmIG9iai5vcHRzLm1vYmlsZSkge1xyXG4gICAgICAgICAgb2JqLm9wdHMgPSBtZXJnZU9wdHMob2JqLm9wdHMsIG9iai5vcHRzLm1vYmlsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdGVwIDIgLSBNYWtlIHN1cmUgd2UgaGF2ZSBjb250ZW50IHR5cGUsIGlmIG5vdCAtIHRyeSB0byBndWVzc1xyXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgICAgIHR5cGUgPSBvYmoudHlwZSB8fCBvYmoub3B0cy50eXBlO1xyXG4gICAgICAgIHNyYyA9IG9iai5zcmMgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKCF0eXBlICYmIHNyYykge1xyXG4gICAgICAgICAgaWYgKChmb3VuZCA9IHNyYy5tYXRjaCgvXFwuKG1wNHxtb3Z8b2d2fHdlYm0pKChcXD98IykuKik/JC9pKSkpIHtcclxuICAgICAgICAgICAgdHlwZSA9IFwidmlkZW9cIjtcclxuXHJcbiAgICAgICAgICAgIGlmICghb2JqLm9wdHMudmlkZW8uZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgb2JqLm9wdHMudmlkZW8uZm9ybWF0ID0gXCJ2aWRlby9cIiArIChmb3VuZFsxXSA9PT0gXCJvZ3ZcIiA/IFwib2dnXCIgOiBmb3VuZFsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoc3JjLm1hdGNoKC8oXmRhdGE6aW1hZ2VcXC9bYS16MC05K1xcLz1dKiwpfChcXC4oanAoZXxnfGVnKXxnaWZ8cG5nfGJtcHx3ZWJwfHN2Z3xpY28pKChcXD98IykuKik/JCkvaSkpIHtcclxuICAgICAgICAgICAgdHlwZSA9IFwiaW1hZ2VcIjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoc3JjLm1hdGNoKC9cXC4ocGRmKSgoXFw/fCMpLiopPyQvaSkpIHtcclxuICAgICAgICAgICAgdHlwZSA9IFwiaWZyYW1lXCI7XHJcbiAgICAgICAgICAgIG9iaiA9ICQuZXh0ZW5kKHRydWUsIG9iaiwge1xyXG4gICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcInBkZlwiLFxyXG4gICAgICAgICAgICAgIG9wdHM6IHtcclxuICAgICAgICAgICAgICAgIGlmcmFtZToge1xyXG4gICAgICAgICAgICAgICAgICBwcmVsb2FkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNyYy5jaGFyQXQoMCkgPT09IFwiI1wiKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSBcImlubGluZVwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgIG9iai50eXBlID0gdHlwZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VsZi50cmlnZ2VyKFwib2JqZWN0TmVlZHNUeXBlXCIsIG9iaik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW9iai5jb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgb2JqLmNvbnRlbnRUeXBlID0gJC5pbkFycmF5KG9iai50eXBlLCBbXCJodG1sXCIsIFwiaW5saW5lXCIsIFwiYWpheFwiXSkgPiAtMSA/IFwiaHRtbFwiIDogb2JqLnR5cGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdGVwIDMgLSBTb21lIGFkanVzdG1lbnRzXHJcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgICAgICBvYmouaW5kZXggPSBzZWxmLmdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKG9iai5vcHRzLnNtYWxsQnRuID09IFwiYXV0b1wiKSB7XHJcbiAgICAgICAgICBvYmoub3B0cy5zbWFsbEJ0biA9ICQuaW5BcnJheShvYmoudHlwZSwgW1wiaHRtbFwiLCBcImlubGluZVwiLCBcImFqYXhcIl0pID4gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob2JqLm9wdHMudG9vbGJhciA9PT0gXCJhdXRvXCIpIHtcclxuICAgICAgICAgIG9iai5vcHRzLnRvb2xiYXIgPSAhb2JqLm9wdHMuc21hbGxCdG47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGaW5kIHRodW1ibmFpbCBpbWFnZSwgY2hlY2sgaWYgZXhpc3RzIGFuZCBpZiBpcyBpbiB0aGUgdmlld3BvcnRcclxuICAgICAgICBvYmouJHRodW1iID0gb2JqLm9wdHMuJHRodW1iIHx8IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChvYmoub3B0cy4kdHJpZ2dlciAmJiBvYmouaW5kZXggPT09IHNlbGYub3B0cy5pbmRleCkge1xyXG4gICAgICAgICAgb2JqLiR0aHVtYiA9IG9iai5vcHRzLiR0cmlnZ2VyLmZpbmQoXCJpbWc6Zmlyc3RcIik7XHJcblxyXG4gICAgICAgICAgaWYgKG9iai4kdGh1bWIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG9iai5vcHRzLiRvcmlnID0gb2JqLm9wdHMuJHRyaWdnZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIShvYmouJHRodW1iICYmIG9iai4kdGh1bWIubGVuZ3RoKSAmJiBvYmoub3B0cy4kb3JpZykge1xyXG4gICAgICAgICAgb2JqLiR0aHVtYiA9IG9iai5vcHRzLiRvcmlnLmZpbmQoXCJpbWc6Zmlyc3RcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob2JqLiR0aHVtYiAmJiAhb2JqLiR0aHVtYi5sZW5ndGgpIHtcclxuICAgICAgICAgIG9iai4kdGh1bWIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb2JqLnRodW1iID0gb2JqLm9wdHMudGh1bWIgfHwgKG9iai4kdGh1bWIgPyBvYmouJHRodW1iWzBdLnNyYyA6IG51bGwpO1xyXG5cclxuICAgICAgICAvLyBcImNhcHRpb25cIiBpcyBhIFwic3BlY2lhbFwiIG9wdGlvbiwgaXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIGNhcHRpb24gcGVyIGdhbGxlcnkgaXRlbVxyXG4gICAgICAgIGlmICgkLnR5cGUob2JqLm9wdHMuY2FwdGlvbikgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgb2JqLm9wdHMuY2FwdGlvbiA9IG9iai5vcHRzLmNhcHRpb24uYXBwbHkoaXRlbSwgW3NlbGYsIG9ial0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCQudHlwZShzZWxmLm9wdHMuY2FwdGlvbikgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgb2JqLm9wdHMuY2FwdGlvbiA9IHNlbGYub3B0cy5jYXB0aW9uLmFwcGx5KGl0ZW0sIFtzZWxmLCBvYmpdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGNhcHRpb24gYXMgYSBzdHJpbmcgb3IgalF1ZXJ5IG9iamVjdFxyXG4gICAgICAgIGlmICghKG9iai5vcHRzLmNhcHRpb24gaW5zdGFuY2VvZiAkKSkge1xyXG4gICAgICAgICAgb2JqLm9wdHMuY2FwdGlvbiA9IG9iai5vcHRzLmNhcHRpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBvYmoub3B0cy5jYXB0aW9uICsgXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHVybCBjb250YWlucyBcImZpbHRlclwiIHVzZWQgdG8gZmlsdGVyIHRoZSBjb250ZW50XHJcbiAgICAgICAgLy8gRXhhbXBsZTogXCJhamF4Lmh0bWwgI3NvbWV0aGluZ1wiXHJcbiAgICAgICAgaWYgKG9iai50eXBlID09PSBcImFqYXhcIikge1xyXG4gICAgICAgICAgc3JjUGFydHMgPSBzcmMuc3BsaXQoL1xccysvLCAyKTtcclxuXHJcbiAgICAgICAgICBpZiAoc3JjUGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBvYmouc3JjID0gc3JjUGFydHMuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgIG9iai5vcHRzLmZpbHRlciA9IHNyY1BhcnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBIaWRlIGFsbCBidXR0b25zIGFuZCBkaXNhYmxlIGludGVyYWN0aXZpdHkgZm9yIG1vZGFsIGl0ZW1zXHJcbiAgICAgICAgaWYgKG9iai5vcHRzLm1vZGFsKSB7XHJcbiAgICAgICAgICBvYmoub3B0cyA9ICQuZXh0ZW5kKHRydWUsIG9iai5vcHRzLCB7XHJcbiAgICAgICAgICAgIHRyYXBGb2N1czogdHJ1ZSxcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGJ1dHRvbnNcclxuICAgICAgICAgICAgaW5mb2JhcjogMCxcclxuICAgICAgICAgICAgdG9vbGJhcjogMCxcclxuXHJcbiAgICAgICAgICAgIHNtYWxsQnRuOiAwLFxyXG5cclxuICAgICAgICAgICAgLy8gRGlzYWJsZSBrZXlib2FyZCBuYXZpZ2F0aW9uXHJcbiAgICAgICAgICAgIGtleWJvYXJkOiAwLFxyXG5cclxuICAgICAgICAgICAgLy8gRGlzYWJsZSBzb21lIG1vZHVsZXNcclxuICAgICAgICAgICAgc2xpZGVTaG93OiAwLFxyXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiAwLFxyXG4gICAgICAgICAgICB0aHVtYnM6IDAsXHJcbiAgICAgICAgICAgIHRvdWNoOiAwLFxyXG5cclxuICAgICAgICAgICAgLy8gRGlzYWJsZSBjbGljayBldmVudCBoYW5kbGVyc1xyXG4gICAgICAgICAgICBjbGlja0NvbnRlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBjbGlja1NsaWRlOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xpY2tPdXRzaWRlOiBmYWxzZSxcclxuICAgICAgICAgICAgZGJsY2xpY2tDb250ZW50OiBmYWxzZSxcclxuICAgICAgICAgICAgZGJsY2xpY2tTbGlkZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGRibGNsaWNrT3V0c2lkZTogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU3RlcCA0IC0gQWRkIHByb2Nlc3NlZCBvYmplY3QgdG8gZ3JvdXBcclxuICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgICAgICBzZWxmLmdyb3VwLnB1c2gob2JqKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBVcGRhdGUgY29udHJvbHMgaWYgZ2FsbGVyeSBpcyBhbHJlYWR5IG9wZW5lZFxyXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5zbGlkZXMpLmxlbmd0aCkge1xyXG4gICAgICAgIHNlbGYudXBkYXRlQ29udHJvbHMoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRodW1ibmFpbHMsIGlmIG5lZWRlZFxyXG4gICAgICAgIHRodW1icyA9IHNlbGYuVGh1bWJzO1xyXG5cclxuICAgICAgICBpZiAodGh1bWJzICYmIHRodW1icy5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgdGh1bWJzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICAgIHRodW1icy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgZm9yOlxyXG4gICAgLy8gICAtIG5hdmlnYXRpb24gYnV0dG9uc1xyXG4gICAgLy8gICAtIGJyb3dzZXIgc2Nyb2xsaW5nLCByZXNpemluZztcclxuICAgIC8vICAgLSBmb2N1c2luZ1xyXG4gICAgLy8gICAtIGtleWJvYXJkXHJcbiAgICAvLyAgIC0gZGV0ZWN0aW5nIGluYWN0aXZpdHlcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgYWRkRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgIHNlbGYucmVtb3ZlRXZlbnRzKCk7XHJcblxyXG4gICAgICAvLyBNYWtlIG5hdmlnYXRpb24gZWxlbWVudHMgY2xpY2thYmxlXHJcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICAgIHNlbGYuJHJlZnMuY29udGFpbmVyXHJcbiAgICAgICAgLm9uKFwiY2xpY2suZmItY2xvc2VcIiwgXCJbZGF0YS1mYW5jeWJveC1jbG9zZV1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgc2VsZi5jbG9zZShlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuZmItcHJldiBjbGljay5mYi1wcmV2XCIsIFwiW2RhdGEtZmFuY3lib3gtcHJldl1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgc2VsZi5wcmV2aW91cygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKFwidG91Y2hzdGFydC5mYi1uZXh0IGNsaWNrLmZiLW5leHRcIiwgXCJbZGF0YS1mYW5jeWJveC1uZXh0XVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICBzZWxmLm5leHQoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbihcImNsaWNrLmZiXCIsIFwiW2RhdGEtZmFuY3lib3gtem9vbV1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgIC8vIENsaWNrIGhhbmRsZXIgZm9yIHpvb20gYnV0dG9uXHJcbiAgICAgICAgICBzZWxmW3NlbGYuaXNTY2FsZWREb3duKCkgPyBcInNjYWxlVG9BY3R1YWxcIiA6IFwic2NhbGVUb0ZpdFwiXSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gSGFuZGxlIHBhZ2Ugc2Nyb2xsaW5nIGFuZCBicm93c2VyIHJlc2l6aW5nXHJcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgICAgJFcub24oXCJvcmllbnRhdGlvbmNoYW5nZS5mYiByZXNpemUuZmJcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZSAmJiBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LnR5cGUgPT09IFwicmVzaXplXCIpIHtcclxuICAgICAgICAgIGlmIChzZWxmLnJlcXVlc3RJZCkge1xyXG4gICAgICAgICAgICBjYW5jZWxBRnJhbWUoc2VsZi5yZXF1ZXN0SWQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNlbGYucmVxdWVzdElkID0gcmVxdWVzdEFGcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYudXBkYXRlKGUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnQgJiYgc2VsZi5jdXJyZW50LnR5cGUgPT09IFwiaWZyYW1lXCIpIHtcclxuICAgICAgICAgICAgc2VsZi4kcmVmcy5zdGFnZS5oaWRlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHNlbGYuJHJlZnMuc3RhZ2Uuc2hvdygpO1xyXG5cclxuICAgICAgICAgICAgICBzZWxmLnVwZGF0ZShlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJC5mYW5jeWJveC5pc01vYmlsZSA/IDYwMCA6IDI1MFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJEQub24oXCJrZXlkb3duLmZiXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlID0gJC5mYW5jeWJveCA/ICQuZmFuY3lib3guZ2V0SW5zdGFuY2UoKSA6IG51bGwsXHJcbiAgICAgICAgICBjdXJyZW50ID0gaW5zdGFuY2UuY3VycmVudCxcclxuICAgICAgICAgIGtleWNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcclxuXHJcbiAgICAgICAgLy8gVHJhcCBrZXlib2FyZCBmb2N1cyBpbnNpZGUgb2YgdGhlIG1vZGFsXHJcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgICAgIGlmIChrZXljb2RlID09IDkpIHtcclxuICAgICAgICAgIGlmIChjdXJyZW50Lm9wdHMudHJhcEZvY3VzKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZm9jdXMoZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIG5hdmlnYXRpb25cclxuICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnQub3B0cy5rZXlib2FyZCB8fCBlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5zaGlmdEtleSB8fCAkKGUudGFyZ2V0KS5pcyhcImlucHV0LHRleHRhcmVhLHZpZGVvLGF1ZGlvLHNlbGVjdFwiKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQmFja3NwYWNlIGFuZCBFc2Mga2V5c1xyXG4gICAgICAgIGlmIChrZXljb2RlID09PSA4IHx8IGtleWNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgc2VsZi5jbG9zZShlKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMZWZ0IGFycm93IGFuZCBVcCBhcnJvd1xyXG4gICAgICAgIGlmIChrZXljb2RlID09PSAzNyB8fCBrZXljb2RlID09PSAzOCkge1xyXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgIHNlbGYucHJldmlvdXMoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSaWdoIGFycm93IGFuZCBEb3duIGFycm93XHJcbiAgICAgICAgaWYgKGtleWNvZGUgPT09IDM5IHx8IGtleWNvZGUgPT09IDQwKSB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgc2VsZi5uZXh0KCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZi50cmlnZ2VyKFwiYWZ0ZXJLZXlkb3duXCIsIGUsIGtleWNvZGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIEhpZGUgY29udHJvbHMgYWZ0ZXIgc29tZSBpbmFjdGl2aXR5IHBlcmlvZFxyXG4gICAgICBpZiAoc2VsZi5ncm91cFtzZWxmLmN1cnJJbmRleF0ub3B0cy5pZGxlVGltZSkge1xyXG4gICAgICAgIHNlbGYuaWRsZVNlY29uZHNDb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgJEQub24oXHJcbiAgICAgICAgICBcIm1vdXNlbW92ZS5mYi1pZGxlIG1vdXNlbGVhdmUuZmItaWRsZSBtb3VzZWRvd24uZmItaWRsZSB0b3VjaHN0YXJ0LmZiLWlkbGUgdG91Y2htb3ZlLmZiLWlkbGUgc2Nyb2xsLmZiLWlkbGUga2V5ZG93bi5mYi1pZGxlXCIsXHJcbiAgICAgICAgICBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBzZWxmLmlkbGVTZWNvbmRzQ291bnRlciA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pc0lkbGUpIHtcclxuICAgICAgICAgICAgICBzZWxmLnNob3dDb250cm9scygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZWxmLmlzSWRsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNlbGYuaWRsZUludGVydmFsID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHNlbGYuaWRsZVNlY29uZHNDb3VudGVyKys7XHJcblxyXG4gICAgICAgICAgaWYgKHNlbGYuaWRsZVNlY29uZHNDb3VudGVyID49IHNlbGYuZ3JvdXBbc2VsZi5jdXJySW5kZXhdLm9wdHMuaWRsZVRpbWUgJiYgIXNlbGYuaXNEcmFnZ2luZykge1xyXG4gICAgICAgICAgICBzZWxmLmlzSWRsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuaWRsZVNlY29uZHNDb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gUmVtb3ZlIGV2ZW50cyBhZGRlZCBieSB0aGUgY29yZVxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAkVy5vZmYoXCJvcmllbnRhdGlvbmNoYW5nZS5mYiByZXNpemUuZmJcIik7XHJcbiAgICAgICRELm9mZihcImtleWRvd24uZmIgLmZiLWlkbGVcIik7XHJcblxyXG4gICAgICB0aGlzLiRyZWZzLmNvbnRhaW5lci5vZmYoXCIuZmItY2xvc2UgLmZiLXByZXYgLmZiLW5leHRcIik7XHJcblxyXG4gICAgICBpZiAoc2VsZi5pZGxlSW50ZXJ2YWwpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChzZWxmLmlkbGVJbnRlcnZhbCk7XHJcblxyXG4gICAgICAgIHNlbGYuaWRsZUludGVydmFsID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDaGFuZ2UgdG8gcHJldmlvdXMgZ2FsbGVyeSBpdGVtXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgcHJldmlvdXM6IGZ1bmN0aW9uIChkdXJhdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5qdW1wVG8odGhpcy5jdXJyUG9zIC0gMSwgZHVyYXRpb24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDaGFuZ2UgdG8gbmV4dCBnYWxsZXJ5IGl0ZW1cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIG5leHQ6IGZ1bmN0aW9uIChkdXJhdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5qdW1wVG8odGhpcy5jdXJyUG9zICsgMSwgZHVyYXRpb24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBTd2l0Y2ggdG8gc2VsZWN0ZWQgZ2FsbGVyeSBpdGVtXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAganVtcFRvOiBmdW5jdGlvbiAocG9zLCBkdXJhdGlvbikge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgZ3JvdXBMZW4gPSBzZWxmLmdyb3VwLmxlbmd0aCxcclxuICAgICAgICBmaXJzdFJ1bixcclxuICAgICAgICBpc01vdmVkLFxyXG4gICAgICAgIGxvb3AsXHJcbiAgICAgICAgY3VycmVudCxcclxuICAgICAgICBwcmV2aW91cyxcclxuICAgICAgICBzbGlkZVBvcyxcclxuICAgICAgICBzdGFnZVBvcyxcclxuICAgICAgICBwcm9wLFxyXG4gICAgICAgIGRpZmY7XHJcblxyXG4gICAgICBpZiAoc2VsZi5pc0RyYWdnaW5nIHx8IHNlbGYuaXNDbG9zaW5nIHx8IChzZWxmLmlzQW5pbWF0aW5nICYmIHNlbGYuZmlyc3RSdW4pKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaG91bGQgbG9vcD9cclxuICAgICAgcG9zID0gcGFyc2VJbnQocG9zLCAxMCk7XHJcbiAgICAgIGxvb3AgPSBzZWxmLmN1cnJlbnQgPyBzZWxmLmN1cnJlbnQub3B0cy5sb29wIDogc2VsZi5vcHRzLmxvb3A7XHJcblxyXG4gICAgICBpZiAoIWxvb3AgJiYgKHBvcyA8IDAgfHwgcG9zID49IGdyb3VwTGVuKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgb3BlbmluZyBmb3IgdGhlIGZpcnN0IHRpbWU7IHRoaXMgaGVscHMgdG8gc3BlZWQgdGhpbmdzIHVwXHJcbiAgICAgIGZpcnN0UnVuID0gc2VsZi5maXJzdFJ1biA9ICFPYmplY3Qua2V5cyhzZWxmLnNsaWRlcykubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIHNsaWRlc1xyXG4gICAgICBwcmV2aW91cyA9IHNlbGYuY3VycmVudDtcclxuXHJcbiAgICAgIHNlbGYucHJldkluZGV4ID0gc2VsZi5jdXJySW5kZXg7XHJcbiAgICAgIHNlbGYucHJldlBvcyA9IHNlbGYuY3VyclBvcztcclxuXHJcbiAgICAgIGN1cnJlbnQgPSBzZWxmLmNyZWF0ZVNsaWRlKHBvcyk7XHJcblxyXG4gICAgICBpZiAoZ3JvdXBMZW4gPiAxKSB7XHJcbiAgICAgICAgaWYgKGxvb3AgfHwgY3VycmVudC5pbmRleCA8IGdyb3VwTGVuIC0gMSkge1xyXG4gICAgICAgICAgc2VsZi5jcmVhdGVTbGlkZShwb3MgKyAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsb29wIHx8IGN1cnJlbnQuaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICBzZWxmLmNyZWF0ZVNsaWRlKHBvcyAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc2VsZi5jdXJyZW50ID0gY3VycmVudDtcclxuICAgICAgc2VsZi5jdXJySW5kZXggPSBjdXJyZW50LmluZGV4O1xyXG4gICAgICBzZWxmLmN1cnJQb3MgPSBjdXJyZW50LnBvcztcclxuXHJcbiAgICAgIHNlbGYudHJpZ2dlcihcImJlZm9yZVNob3dcIiwgZmlyc3RSdW4pO1xyXG5cclxuICAgICAgc2VsZi51cGRhdGVDb250cm9scygpO1xyXG5cclxuICAgICAgLy8gVmFsaWRhdGUgZHVyYXRpb24gbGVuZ3RoXHJcbiAgICAgIGN1cnJlbnQuZm9yY2VkRHVyYXRpb24gPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBpZiAoJC5pc051bWVyaWMoZHVyYXRpb24pKSB7XHJcbiAgICAgICAgY3VycmVudC5mb3JjZWREdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGR1cmF0aW9uID0gY3VycmVudC5vcHRzW2ZpcnN0UnVuID8gXCJhbmltYXRpb25EdXJhdGlvblwiIDogXCJ0cmFuc2l0aW9uRHVyYXRpb25cIl07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24sIDEwKTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGlmIHVzZXIgaGFzIHN3aXBlZCB0aGUgc2xpZGVzIG9yIGlmIHN0aWxsIGFuaW1hdGluZ1xyXG4gICAgICBpc01vdmVkID0gc2VsZi5pc01vdmVkKGN1cnJlbnQpO1xyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIGN1cnJlbnQgc2xpZGUgaXMgdmlzaWJsZVxyXG4gICAgICBjdXJyZW50LiRzbGlkZS5hZGRDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1jdXJyZW50XCIpO1xyXG5cclxuICAgICAgLy8gRnJlc2ggc3RhcnQgLSByZXZlYWwgY29udGFpbmVyLCBjdXJyZW50IHNsaWRlIGFuZCBzdGFydCBsb2FkaW5nIGNvbnRlbnRcclxuICAgICAgaWYgKGZpcnN0UnVuKSB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQub3B0cy5hbmltYXRpb25FZmZlY3QgJiYgZHVyYXRpb24pIHtcclxuICAgICAgICAgIHNlbGYuJHJlZnMuY29udGFpbmVyLmNzcyhcInRyYW5zaXRpb24tZHVyYXRpb25cIiwgZHVyYXRpb24gKyBcIm1zXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZi4kcmVmcy5jb250YWluZXIuYWRkQ2xhc3MoXCJmYW5jeWJveC1pcy1vcGVuXCIpLnRyaWdnZXIoXCJmb2N1c1wiKTtcclxuXHJcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBsb2FkIGNvbnRlbnQgaW50byBzbGlkZVxyXG4gICAgICAgIC8vIFRoaXMgd2lsbCBsYXRlciBjYWxsIGBhZnRlckxvYWRgIC0+IGByZXZlYWxDb250ZW50YFxyXG4gICAgICAgIHNlbGYubG9hZFNsaWRlKGN1cnJlbnQpO1xyXG5cclxuICAgICAgICBzZWxmLnByZWxvYWQoXCJpbWFnZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBHZXQgYWN0dWFsIHNsaWRlL3N0YWdlIHBvc2l0aW9ucyAoYmVmb3JlIGNsZWFuaW5nIHVwKVxyXG4gICAgICBzbGlkZVBvcyA9ICQuZmFuY3lib3guZ2V0VHJhbnNsYXRlKHByZXZpb3VzLiRzbGlkZSk7XHJcbiAgICAgIHN0YWdlUG9zID0gJC5mYW5jeWJveC5nZXRUcmFuc2xhdGUoc2VsZi4kcmVmcy5zdGFnZSk7XHJcblxyXG4gICAgICAvLyBDbGVhbiB1cCBhbGwgc2xpZGVzXHJcbiAgICAgICQuZWFjaChzZWxmLnNsaWRlcywgZnVuY3Rpb24gKGluZGV4LCBzbGlkZSkge1xyXG4gICAgICAgICQuZmFuY3lib3guc3RvcChzbGlkZS4kc2xpZGUsIHRydWUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChwcmV2aW91cy5wb3MgIT09IGN1cnJlbnQucG9zKSB7XHJcbiAgICAgICAgcHJldmlvdXMuaXNDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwcmV2aW91cy4kc2xpZGUucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1zbGlkZS0tY29tcGxldGUgZmFuY3lib3gtc2xpZGUtLWN1cnJlbnRcIik7XHJcblxyXG4gICAgICAvLyBJZiBzbGlkZXMgYXJlIG91dCBvZiBwbGFjZSwgdGhlbiBhbmltYXRlIHRoZW0gdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgICBpZiAoaXNNb3ZlZCkge1xyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBob3Jpem9udGFsIHN3aXBlIGRpc3RhbmNlXHJcbiAgICAgICAgZGlmZiA9IHNsaWRlUG9zLmxlZnQgLSAocHJldmlvdXMucG9zICogc2xpZGVQb3Mud2lkdGggKyBwcmV2aW91cy5wb3MgKiBwcmV2aW91cy5vcHRzLmd1dHRlcik7XHJcblxyXG4gICAgICAgICQuZWFjaChzZWxmLnNsaWRlcywgZnVuY3Rpb24gKGluZGV4LCBzbGlkZSkge1xyXG4gICAgICAgICAgc2xpZGUuJHNsaWRlLnJlbW92ZUNsYXNzKFwiZmFuY3lib3gtYW5pbWF0ZWRcIikucmVtb3ZlQ2xhc3MoZnVuY3Rpb24gKGluZGV4LCBjbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChjbGFzc05hbWUubWF0Y2goLyhefFxccylmYW5jeWJveC1meC1cXFMrL2cpIHx8IFtdKS5qb2luKFwiIFwiKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGVhY2ggc2xpZGUgaXMgaW4gZXF1YWwgZGlzdGFuY2VcclxuICAgICAgICAgIC8vIFRoaXMgaXMgbW9zdGx5IG5lZWRlZCBmb3IgZnJlc2hseSBhZGRlZCBzbGlkZXMsIGJlY2F1c2UgdGhleSBhcmUgbm90IHlldCBwb3NpdGlvbmVkXHJcbiAgICAgICAgICB2YXIgbGVmdFBvcyA9IHNsaWRlLnBvcyAqIHNsaWRlUG9zLndpZHRoICsgc2xpZGUucG9zICogc2xpZGUub3B0cy5ndXR0ZXI7XHJcblxyXG4gICAgICAgICAgJC5mYW5jeWJveC5zZXRUcmFuc2xhdGUoc2xpZGUuJHNsaWRlLCB7XHJcbiAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgbGVmdDogbGVmdFBvcyAtIHN0YWdlUG9zLmxlZnQgKyBkaWZmXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2xpZGUucG9zICE9PSBjdXJyZW50LnBvcykge1xyXG4gICAgICAgICAgICBzbGlkZS4kc2xpZGUuYWRkQ2xhc3MoXCJmYW5jeWJveC1zbGlkZS0tXCIgKyAoc2xpZGUucG9zID4gY3VycmVudC5wb3MgPyBcIm5leHRcIiA6IFwicHJldmlvdXNcIikpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlZHJhdyB0byBtYWtlIHN1cmUgdGhhdCB0cmFuc2l0aW9uIHdpbGwgc3RhcnRcclxuICAgICAgICAgIGZvcmNlUmVkcmF3KHNsaWRlLiRzbGlkZSk7XHJcblxyXG4gICAgICAgICAgLy8gQW5pbWF0ZSB0aGUgc2xpZGVcclxuICAgICAgICAgICQuZmFuY3lib3guYW5pbWF0ZShcclxuICAgICAgICAgICAgc2xpZGUuJHNsaWRlLCB7XHJcbiAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IChzbGlkZS5wb3MgLSBjdXJyZW50LnBvcykgKiBzbGlkZVBvcy53aWR0aCArIChzbGlkZS5wb3MgLSBjdXJyZW50LnBvcykgKiBzbGlkZS5vcHRzLmd1dHRlclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHNsaWRlLiRzbGlkZVxyXG4gICAgICAgICAgICAgICAgLmNzcyh7XHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJcIixcclxuICAgICAgICAgICAgICAgICAgb3BhY2l0eTogXCJcIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1uZXh0IGZhbmN5Ym94LXNsaWRlLS1wcmV2aW91c1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNsaWRlLnBvcyA9PT0gc2VsZi5jdXJyUG9zKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uICYmIGN1cnJlbnQub3B0cy50cmFuc2l0aW9uRWZmZWN0KSB7XHJcbiAgICAgICAgLy8gU2V0IHRyYW5zaXRpb24gZWZmZWN0IGZvciBwcmV2aW91c2x5IGFjdGl2ZSBzbGlkZVxyXG4gICAgICAgIHByb3AgPSBcImZhbmN5Ym94LWFuaW1hdGVkIGZhbmN5Ym94LWZ4LVwiICsgY3VycmVudC5vcHRzLnRyYW5zaXRpb25FZmZlY3Q7XHJcblxyXG4gICAgICAgIHByZXZpb3VzLiRzbGlkZS5hZGRDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1cIiArIChwcmV2aW91cy5wb3MgPiBjdXJyZW50LnBvcyA/IFwibmV4dFwiIDogXCJwcmV2aW91c1wiKSk7XHJcblxyXG4gICAgICAgICQuZmFuY3lib3guYW5pbWF0ZShcclxuICAgICAgICAgIHByZXZpb3VzLiRzbGlkZSxcclxuICAgICAgICAgIHByb3AsXHJcbiAgICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJldmlvdXMuJHNsaWRlLnJlbW92ZUNsYXNzKHByb3ApLnJlbW92ZUNsYXNzKFwiZmFuY3lib3gtc2xpZGUtLW5leHQgZmFuY3lib3gtc2xpZGUtLXByZXZpb3VzXCIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGN1cnJlbnQuaXNMb2FkZWQpIHtcclxuICAgICAgICBzZWxmLnJldmVhbENvbnRlbnQoY3VycmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZi5sb2FkU2xpZGUoY3VycmVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNlbGYucHJlbG9hZChcImltYWdlXCIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDcmVhdGUgbmV3IFwic2xpZGVcIiBlbGVtZW50XHJcbiAgICAvLyBUaGVzZSBhcmUgZ2FsbGVyeSBpdGVtcyAgdGhhdCBhcmUgYWN0dWFsbHkgYWRkZWQgdG8gRE9NXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgY3JlYXRlU2xpZGU6IGZ1bmN0aW9uIChwb3MpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgICRzbGlkZSxcclxuICAgICAgICBpbmRleDtcclxuXHJcbiAgICAgIGluZGV4ID0gcG9zICUgc2VsZi5ncm91cC5sZW5ndGg7XHJcbiAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gc2VsZi5ncm91cC5sZW5ndGggKyBpbmRleCA6IGluZGV4O1xyXG5cclxuICAgICAgaWYgKCFzZWxmLnNsaWRlc1twb3NdICYmIHNlbGYuZ3JvdXBbaW5kZXhdKSB7XHJcbiAgICAgICAgJHNsaWRlID0gJCgnPGRpdiBjbGFzcz1cImZhbmN5Ym94LXNsaWRlXCI+PC9kaXY+JykuYXBwZW5kVG8oc2VsZi4kcmVmcy5zdGFnZSk7XHJcblxyXG4gICAgICAgIHNlbGYuc2xpZGVzW3Bvc10gPSAkLmV4dGVuZCh0cnVlLCB7fSwgc2VsZi5ncm91cFtpbmRleF0sIHtcclxuICAgICAgICAgIHBvczogcG9zLFxyXG4gICAgICAgICAgJHNsaWRlOiAkc2xpZGUsXHJcbiAgICAgICAgICBpc0xvYWRlZDogZmFsc2VcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2VsZi51cGRhdGVTbGlkZShzZWxmLnNsaWRlc1twb3NdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHNlbGYuc2xpZGVzW3Bvc107XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFNjYWxlIGltYWdlIHRvIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgaW1hZ2U7XHJcbiAgICAvLyB4IGFuZCB5IHZhbHVlcyBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIHNsaWRlXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgc2NhbGVUb0FjdHVhbDogZnVuY3Rpb24gKHgsIHksIGR1cmF0aW9uKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBjdXJyZW50ID0gc2VsZi5jdXJyZW50LFxyXG4gICAgICAgICRjb250ZW50ID0gY3VycmVudC4kY29udGVudCxcclxuICAgICAgICBjYW52YXNXaWR0aCA9ICQuZmFuY3lib3guZ2V0VHJhbnNsYXRlKGN1cnJlbnQuJHNsaWRlKS53aWR0aCxcclxuICAgICAgICBjYW52YXNIZWlnaHQgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZShjdXJyZW50LiRzbGlkZSkuaGVpZ2h0LFxyXG4gICAgICAgIG5ld0ltZ1dpZHRoID0gY3VycmVudC53aWR0aCxcclxuICAgICAgICBuZXdJbWdIZWlnaHQgPSBjdXJyZW50LmhlaWdodCxcclxuICAgICAgICBpbWdQb3MsXHJcbiAgICAgICAgcG9zWCxcclxuICAgICAgICBwb3NZLFxyXG4gICAgICAgIHNjYWxlWCxcclxuICAgICAgICBzY2FsZVk7XHJcblxyXG4gICAgICBpZiAoc2VsZi5pc0FuaW1hdGluZyB8fCBzZWxmLmlzTW92ZWQoKSB8fCAhJGNvbnRlbnQgfHwgIShjdXJyZW50LnR5cGUgPT0gXCJpbWFnZVwiICYmIGN1cnJlbnQuaXNMb2FkZWQgJiYgIWN1cnJlbnQuaGFzRXJyb3IpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLmlzQW5pbWF0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICQuZmFuY3lib3guc3RvcCgkY29udGVudCk7XHJcblxyXG4gICAgICB4ID0geCA9PT0gdW5kZWZpbmVkID8gY2FudmFzV2lkdGggKiAwLjUgOiB4O1xyXG4gICAgICB5ID0geSA9PT0gdW5kZWZpbmVkID8gY2FudmFzSGVpZ2h0ICogMC41IDogeTtcclxuXHJcbiAgICAgIGltZ1BvcyA9ICQuZmFuY3lib3guZ2V0VHJhbnNsYXRlKCRjb250ZW50KTtcclxuXHJcbiAgICAgIGltZ1Bvcy50b3AgLT0gJC5mYW5jeWJveC5nZXRUcmFuc2xhdGUoY3VycmVudC4kc2xpZGUpLnRvcDtcclxuICAgICAgaW1nUG9zLmxlZnQgLT0gJC5mYW5jeWJveC5nZXRUcmFuc2xhdGUoY3VycmVudC4kc2xpZGUpLmxlZnQ7XHJcblxyXG4gICAgICBzY2FsZVggPSBuZXdJbWdXaWR0aCAvIGltZ1Bvcy53aWR0aDtcclxuICAgICAgc2NhbGVZID0gbmV3SW1nSGVpZ2h0IC8gaW1nUG9zLmhlaWdodDtcclxuXHJcbiAgICAgIC8vIEdldCBjZW50ZXIgcG9zaXRpb24gZm9yIG9yaWdpbmFsIGltYWdlXHJcbiAgICAgIHBvc1ggPSBjYW52YXNXaWR0aCAqIDAuNSAtIG5ld0ltZ1dpZHRoICogMC41O1xyXG4gICAgICBwb3NZID0gY2FudmFzSGVpZ2h0ICogMC41IC0gbmV3SW1nSGVpZ2h0ICogMC41O1xyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIGltYWdlIGRvZXMgbm90IG1vdmUgYXdheSBmcm9tIGVkZ2VzXHJcbiAgICAgIGlmIChuZXdJbWdXaWR0aCA+IGNhbnZhc1dpZHRoKSB7XHJcbiAgICAgICAgcG9zWCA9IGltZ1Bvcy5sZWZ0ICogc2NhbGVYIC0gKHggKiBzY2FsZVggLSB4KTtcclxuXHJcbiAgICAgICAgaWYgKHBvc1ggPiAwKSB7XHJcbiAgICAgICAgICBwb3NYID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3NYIDwgY2FudmFzV2lkdGggLSBuZXdJbWdXaWR0aCkge1xyXG4gICAgICAgICAgcG9zWCA9IGNhbnZhc1dpZHRoIC0gbmV3SW1nV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobmV3SW1nSGVpZ2h0ID4gY2FudmFzSGVpZ2h0KSB7XHJcbiAgICAgICAgcG9zWSA9IGltZ1Bvcy50b3AgKiBzY2FsZVkgLSAoeSAqIHNjYWxlWSAtIHkpO1xyXG5cclxuICAgICAgICBpZiAocG9zWSA+IDApIHtcclxuICAgICAgICAgIHBvc1kgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvc1kgPCBjYW52YXNIZWlnaHQgLSBuZXdJbWdIZWlnaHQpIHtcclxuICAgICAgICAgIHBvc1kgPSBjYW52YXNIZWlnaHQgLSBuZXdJbWdIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLnVwZGF0ZUN1cnNvcihuZXdJbWdXaWR0aCwgbmV3SW1nSGVpZ2h0KTtcclxuXHJcbiAgICAgICQuZmFuY3lib3guYW5pbWF0ZShcclxuICAgICAgICAkY29udGVudCwge1xyXG4gICAgICAgICAgdG9wOiBwb3NZLFxyXG4gICAgICAgICAgbGVmdDogcG9zWCxcclxuICAgICAgICAgIHNjYWxlWDogc2NhbGVYLFxyXG4gICAgICAgICAgc2NhbGVZOiBzY2FsZVlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGR1cmF0aW9uIHx8IDM2NixcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBzZWxmLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gU3RvcCBzbGlkZXNob3dcclxuICAgICAgaWYgKHNlbGYuU2xpZGVTaG93ICYmIHNlbGYuU2xpZGVTaG93LmlzQWN0aXZlKSB7XHJcbiAgICAgICAgc2VsZi5TbGlkZVNob3cuc3RvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFNjYWxlIGltYWdlIHRvIGZpdCBpbnNpZGUgcGFyZW50IGVsZW1lbnRcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBzY2FsZVRvRml0OiBmdW5jdGlvbiAoZHVyYXRpb24pIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnQsXHJcbiAgICAgICAgJGNvbnRlbnQgPSBjdXJyZW50LiRjb250ZW50LFxyXG4gICAgICAgIGVuZDtcclxuXHJcbiAgICAgIGlmIChzZWxmLmlzQW5pbWF0aW5nIHx8IHNlbGYuaXNNb3ZlZCgpIHx8ICEkY29udGVudCB8fCAhKGN1cnJlbnQudHlwZSA9PSBcImltYWdlXCIgJiYgY3VycmVudC5pc0xvYWRlZCAmJiAhY3VycmVudC5oYXNFcnJvcikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNlbGYuaXNBbmltYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgJC5mYW5jeWJveC5zdG9wKCRjb250ZW50KTtcclxuXHJcbiAgICAgIGVuZCA9IHNlbGYuZ2V0Rml0UG9zKGN1cnJlbnQpO1xyXG5cclxuICAgICAgc2VsZi51cGRhdGVDdXJzb3IoZW5kLndpZHRoLCBlbmQuaGVpZ2h0KTtcclxuXHJcbiAgICAgICQuZmFuY3lib3guYW5pbWF0ZShcclxuICAgICAgICAkY29udGVudCwge1xyXG4gICAgICAgICAgdG9wOiBlbmQudG9wLFxyXG4gICAgICAgICAgbGVmdDogZW5kLmxlZnQsXHJcbiAgICAgICAgICBzY2FsZVg6IGVuZC53aWR0aCAvICRjb250ZW50LndpZHRoKCksXHJcbiAgICAgICAgICBzY2FsZVk6IGVuZC5oZWlnaHQgLyAkY29udGVudC5oZWlnaHQoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHVyYXRpb24gfHwgMzY2LFxyXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHNlbGYuaXNBbmltYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBpbWFnZSBzaXplIHRvIGZpdCBpbnNpZGUgdmlld3BvcnRcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBnZXRGaXRQb3M6IGZ1bmN0aW9uIChzbGlkZSkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgJGNvbnRlbnQgPSBzbGlkZS4kY29udGVudCxcclxuICAgICAgICAkc2xpZGUgPSBzbGlkZS4kc2xpZGUsXHJcbiAgICAgICAgd2lkdGggPSBzbGlkZS53aWR0aCB8fCBzbGlkZS5vcHRzLndpZHRoLFxyXG4gICAgICAgIGhlaWdodCA9IHNsaWRlLmhlaWdodCB8fCBzbGlkZS5vcHRzLmhlaWdodCxcclxuICAgICAgICBtYXhXaWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQsXHJcbiAgICAgICAgbWluUmF0aW8sXHJcbiAgICAgICAgYXNwZWN0UmF0aW8sXHJcbiAgICAgICAgcmV6ID0ge307XHJcblxyXG4gICAgICBpZiAoIXNsaWRlLmlzTG9hZGVkIHx8ICEkY29udGVudCB8fCAhJGNvbnRlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtYXhXaWR0aCA9ICQuZmFuY3lib3guZ2V0VHJhbnNsYXRlKHNlbGYuJHJlZnMuc3RhZ2UpLndpZHRoO1xyXG4gICAgICBtYXhIZWlnaHQgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZShzZWxmLiRyZWZzLnN0YWdlKS5oZWlnaHQ7XHJcblxyXG4gICAgICBtYXhXaWR0aCAtPVxyXG4gICAgICAgIHBhcnNlRmxvYXQoJHNsaWRlLmNzcyhcInBhZGRpbmdMZWZ0XCIpKSArXHJcbiAgICAgICAgcGFyc2VGbG9hdCgkc2xpZGUuY3NzKFwicGFkZGluZ1JpZ2h0XCIpKSArXHJcbiAgICAgICAgcGFyc2VGbG9hdCgkY29udGVudC5jc3MoXCJtYXJnaW5MZWZ0XCIpKSArXHJcbiAgICAgICAgcGFyc2VGbG9hdCgkY29udGVudC5jc3MoXCJtYXJnaW5SaWdodFwiKSk7XHJcblxyXG4gICAgICBtYXhIZWlnaHQgLT1cclxuICAgICAgICBwYXJzZUZsb2F0KCRzbGlkZS5jc3MoXCJwYWRkaW5nVG9wXCIpKSArXHJcbiAgICAgICAgcGFyc2VGbG9hdCgkc2xpZGUuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSkgK1xyXG4gICAgICAgIHBhcnNlRmxvYXQoJGNvbnRlbnQuY3NzKFwibWFyZ2luVG9wXCIpKSArXHJcbiAgICAgICAgcGFyc2VGbG9hdCgkY29udGVudC5jc3MoXCJtYXJnaW5Cb3R0b21cIikpO1xyXG5cclxuICAgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XHJcbiAgICAgICAgd2lkdGggPSBtYXhXaWR0aDtcclxuICAgICAgICBoZWlnaHQgPSBtYXhIZWlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1pblJhdGlvID0gTWF0aC5taW4oMSwgbWF4V2lkdGggLyB3aWR0aCwgbWF4SGVpZ2h0IC8gaGVpZ2h0KTtcclxuXHJcbiAgICAgIHdpZHRoID0gbWluUmF0aW8gKiB3aWR0aDtcclxuICAgICAgaGVpZ2h0ID0gbWluUmF0aW8gKiBoZWlnaHQ7XHJcblxyXG4gICAgICAvLyBBZGp1c3Qgd2lkdGgvaGVpZ2h0IHRvIHByZWNpc2VseSBmaXQgaW50byBjb250YWluZXJcclxuICAgICAgaWYgKHdpZHRoID4gbWF4V2lkdGggLSAwLjUpIHtcclxuICAgICAgICB3aWR0aCA9IG1heFdpZHRoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0IC0gMC41KSB7XHJcbiAgICAgICAgaGVpZ2h0ID0gbWF4SGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2xpZGUudHlwZSA9PT0gXCJpbWFnZVwiKSB7XHJcbiAgICAgICAgcmV6LnRvcCA9IE1hdGguZmxvb3IoKG1heEhlaWdodCAtIGhlaWdodCkgKiAwLjUpICsgcGFyc2VGbG9hdCgkc2xpZGUuY3NzKFwicGFkZGluZ1RvcFwiKSk7XHJcbiAgICAgICAgcmV6LmxlZnQgPSBNYXRoLmZsb29yKChtYXhXaWR0aCAtIHdpZHRoKSAqIDAuNSkgKyBwYXJzZUZsb2F0KCRzbGlkZS5jc3MoXCJwYWRkaW5nTGVmdFwiKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoc2xpZGUuY29udGVudFR5cGUgPT09IFwidmlkZW9cIikge1xyXG4gICAgICAgIC8vIEZvcmNlIGFzcGVjdCByYXRpbyBmb3IgdGhlIHZpZGVvXHJcbiAgICAgICAgLy8gXCJJIHNheSB0aGUgd2hvbGUgd29ybGQgbXVzdCBsZWFybiBvZiBvdXIgcGVhY2VmdWwgd2F5c+KApiBieSBmb3JjZSFcIlxyXG4gICAgICAgIGFzcGVjdFJhdGlvID0gc2xpZGUub3B0cy53aWR0aCAmJiBzbGlkZS5vcHRzLmhlaWdodCA/IHdpZHRoIC8gaGVpZ2h0IDogc2xpZGUub3B0cy5yYXRpbyB8fCAxNiAvIDk7XHJcblxyXG4gICAgICAgIGlmIChoZWlnaHQgPiB3aWR0aCAvIGFzcGVjdFJhdGlvKSB7XHJcbiAgICAgICAgICBoZWlnaHQgPSB3aWR0aCAvIGFzcGVjdFJhdGlvO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2lkdGggPiBoZWlnaHQgKiBhc3BlY3RSYXRpbykge1xyXG4gICAgICAgICAgd2lkdGggPSBoZWlnaHQgKiBhc3BlY3RSYXRpbztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlei53aWR0aCA9IHdpZHRoO1xyXG4gICAgICByZXouaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgcmV0dXJuIHJlejtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVXBkYXRlIGNvbnRlbnQgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGFsbCBzbGlkZXNcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICQuZWFjaChzZWxmLnNsaWRlcywgZnVuY3Rpb24gKGtleSwgc2xpZGUpIHtcclxuICAgICAgICBzZWxmLnVwZGF0ZVNsaWRlKHNsaWRlLCBlKTtcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSBzbGlkZSBjb250ZW50IHBvc2l0aW9uIGFuZCBzaXplXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHVwZGF0ZVNsaWRlOiBmdW5jdGlvbiAoc2xpZGUsIGUpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgICRjb250ZW50ID0gc2xpZGUgJiYgc2xpZGUuJGNvbnRlbnQsXHJcbiAgICAgICAgd2lkdGggPSBzbGlkZS53aWR0aCB8fCBzbGlkZS5vcHRzLndpZHRoLFxyXG4gICAgICAgIGhlaWdodCA9IHNsaWRlLmhlaWdodCB8fCBzbGlkZS5vcHRzLmhlaWdodCxcclxuICAgICAgICAkc2xpZGUgPSBzbGlkZS4kc2xpZGU7XHJcblxyXG4gICAgICAvLyBGaXJzdCwgcHJldmVudCBjYXB0aW9uIG92ZXJsYXAsIGlmIG5lZWRlZFxyXG4gICAgICBzZWxmLmFkanVzdENhcHRpb24oc2xpZGUpO1xyXG5cclxuICAgICAgLy8gVGhlbiByZXNpemUgY29udGVudCB0byBmaXQgaW5zaWRlIHRoZSBzbGlkZVxyXG4gICAgICBpZiAoJGNvbnRlbnQgJiYgKHdpZHRoIHx8IGhlaWdodCB8fCBzbGlkZS5jb250ZW50VHlwZSA9PT0gXCJ2aWRlb1wiKSAmJiAhc2xpZGUuaGFzRXJyb3IpIHtcclxuICAgICAgICAkLmZhbmN5Ym94LnN0b3AoJGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAkLmZhbmN5Ym94LnNldFRyYW5zbGF0ZSgkY29udGVudCwgc2VsZi5nZXRGaXRQb3Moc2xpZGUpKTtcclxuXHJcbiAgICAgICAgaWYgKHNsaWRlLnBvcyA9PT0gc2VsZi5jdXJyUG9zKSB7XHJcbiAgICAgICAgICBzZWxmLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgc2VsZi51cGRhdGVDdXJzb3IoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRoZW4gc29tZSBhZGp1c3RtZW50c1xyXG4gICAgICBzZWxmLmFkanVzdExheW91dChzbGlkZSk7XHJcblxyXG4gICAgICBpZiAoJHNsaWRlLmxlbmd0aCkge1xyXG4gICAgICAgICRzbGlkZS50cmlnZ2VyKFwicmVmcmVzaFwiKTtcclxuXHJcbiAgICAgICAgaWYgKHNsaWRlLnBvcyA9PT0gc2VsZi5jdXJyUG9zKSB7XHJcbiAgICAgICAgICBzZWxmLiRyZWZzLnRvb2xiYXJcclxuICAgICAgICAgICAgLmFkZChzZWxmLiRyZWZzLm5hdmlnYXRpb24uZmluZChcIi5mYW5jeWJveC1idXR0b24tLWFycm93X3JpZ2h0XCIpKVxyXG4gICAgICAgICAgICAudG9nZ2xlQ2xhc3MoXCJjb21wZW5zYXRlLWZvci1zY3JvbGxiYXJcIiwgJHNsaWRlLmdldCgwKS5zY3JvbGxIZWlnaHQgPiAkc2xpZGUuZ2V0KDApLmNsaWVudEhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLnRyaWdnZXIoXCJvblVwZGF0ZVwiLCBzbGlkZSwgZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEhvcml6b250YWxseSBjZW50ZXIgc2xpZGVcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBjZW50ZXJTbGlkZTogZnVuY3Rpb24gKGR1cmF0aW9uKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBjdXJyZW50ID0gc2VsZi5jdXJyZW50LFxyXG4gICAgICAgICRzbGlkZSA9IGN1cnJlbnQuJHNsaWRlO1xyXG5cclxuICAgICAgaWYgKHNlbGYuaXNDbG9zaW5nIHx8ICFjdXJyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAkc2xpZGUuc2libGluZ3MoKS5jc3Moe1xyXG4gICAgICAgIHRyYW5zZm9ybTogXCJcIixcclxuICAgICAgICBvcGFjaXR5OiBcIlwiXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJHNsaWRlXHJcbiAgICAgICAgLnBhcmVudCgpXHJcbiAgICAgICAgLmNoaWxkcmVuKClcclxuICAgICAgICAucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1zbGlkZS0tcHJldmlvdXMgZmFuY3lib3gtc2xpZGUtLW5leHRcIik7XHJcblxyXG4gICAgICAkLmZhbmN5Ym94LmFuaW1hdGUoXHJcbiAgICAgICAgJHNsaWRlLCB7XHJcbiAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgb3BhY2l0eTogMVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHVyYXRpb24gPT09IHVuZGVmaW5lZCA/IDAgOiBkdXJhdGlvbixcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyBDbGVhbiB1cFxyXG4gICAgICAgICAgJHNsaWRlLmNzcyh7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogXCJcIixcclxuICAgICAgICAgICAgb3BhY2l0eTogXCJcIlxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKCFjdXJyZW50LmlzQ29tcGxldGUpIHtcclxuICAgICAgICAgICAgc2VsZi5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBzbGlkZSBpcyBtb3ZlZCAoc3dpcGVkKVxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIGlzTW92ZWQ6IGZ1bmN0aW9uIChzbGlkZSkge1xyXG4gICAgICB2YXIgY3VycmVudCA9IHNsaWRlIHx8IHRoaXMuY3VycmVudCxcclxuICAgICAgICBzbGlkZVBvcyxcclxuICAgICAgICBzdGFnZVBvcztcclxuXHJcbiAgICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RhZ2VQb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZSh0aGlzLiRyZWZzLnN0YWdlKTtcclxuICAgICAgc2xpZGVQb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZShjdXJyZW50LiRzbGlkZSk7XHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICFjdXJyZW50LiRzbGlkZS5oYXNDbGFzcyhcImZhbmN5Ym94LWFuaW1hdGVkXCIpICYmXHJcbiAgICAgICAgKE1hdGguYWJzKHNsaWRlUG9zLnRvcCAtIHN0YWdlUG9zLnRvcCkgPiAwLjUgfHwgTWF0aC5hYnMoc2xpZGVQb3MubGVmdCAtIHN0YWdlUG9zLmxlZnQpID4gMC41KVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBVcGRhdGUgY3Vyc29yIHN0eWxlIGRlcGVuZGluZyBpZiBjb250ZW50IGNhbiBiZSB6b29tZWRcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHVwZGF0ZUN1cnNvcjogZnVuY3Rpb24gKG5leHRXaWR0aCwgbmV4dEhlaWdodCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgY3VycmVudCA9IHNlbGYuY3VycmVudCxcclxuICAgICAgICAkY29udGFpbmVyID0gc2VsZi4kcmVmcy5jb250YWluZXIsXHJcbiAgICAgICAgY2FuUGFuLFxyXG4gICAgICAgIGlzWm9vbWFibGU7XHJcblxyXG4gICAgICBpZiAoIWN1cnJlbnQgfHwgc2VsZi5pc0Nsb3NpbmcgfHwgIXNlbGYuR3Vlc3R1cmVzKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAkY29udGFpbmVyLnJlbW92ZUNsYXNzKFwiZmFuY3lib3gtaXMtem9vbWFibGUgZmFuY3lib3gtY2FuLXpvb21JbiBmYW5jeWJveC1jYW4tem9vbU91dCBmYW5jeWJveC1jYW4tc3dpcGUgZmFuY3lib3gtY2FuLXBhblwiKTtcclxuXHJcbiAgICAgIGNhblBhbiA9IHNlbGYuY2FuUGFuKG5leHRXaWR0aCwgbmV4dEhlaWdodCk7XHJcblxyXG4gICAgICBpc1pvb21hYmxlID0gY2FuUGFuID8gdHJ1ZSA6IHNlbGYuaXNab29tYWJsZSgpO1xyXG5cclxuICAgICAgJGNvbnRhaW5lci50b2dnbGVDbGFzcyhcImZhbmN5Ym94LWlzLXpvb21hYmxlXCIsIGlzWm9vbWFibGUpO1xyXG5cclxuICAgICAgJChcIltkYXRhLWZhbmN5Ym94LXpvb21dXCIpLnByb3AoXCJkaXNhYmxlZFwiLCAhaXNab29tYWJsZSk7XHJcblxyXG4gICAgICBpZiAoY2FuUGFuKSB7XHJcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcImZhbmN5Ym94LWNhbi1wYW5cIik7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgaXNab29tYWJsZSAmJlxyXG4gICAgICAgIChjdXJyZW50Lm9wdHMuY2xpY2tDb250ZW50ID09PSBcInpvb21cIiB8fCAoJC5pc0Z1bmN0aW9uKGN1cnJlbnQub3B0cy5jbGlja0NvbnRlbnQpICYmIGN1cnJlbnQub3B0cy5jbGlja0NvbnRlbnQoY3VycmVudCkgPT0gXCJ6b29tXCIpKVxyXG4gICAgICApIHtcclxuICAgICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwiZmFuY3lib3gtY2FuLXpvb21JblwiKTtcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lm9wdHMudG91Y2ggJiYgKGN1cnJlbnQub3B0cy50b3VjaC52ZXJ0aWNhbCB8fCBzZWxmLmdyb3VwLmxlbmd0aCA+IDEpICYmIGN1cnJlbnQuY29udGVudFR5cGUgIT09IFwidmlkZW9cIikge1xyXG4gICAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJmYW5jeWJveC1jYW4tc3dpcGVcIik7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBzbGlkZSBpcyB6b29tYWJsZVxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIGlzWm9vbWFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnQsXHJcbiAgICAgICAgZml0UG9zO1xyXG5cclxuICAgICAgLy8gQXNzdW1lIHRoYXQgc2xpZGUgaXMgem9vbWFibGUgaWY6XHJcbiAgICAgIC8vICAgLSBpbWFnZSBpcyBzdGlsbCBsb2FkaW5nXHJcbiAgICAgIC8vICAgLSBhY3R1YWwgc2l6ZSBvZiB0aGUgaW1hZ2UgaXMgc21hbGxlciB0aGFuIGF2YWlsYWJsZSBhcmVhXHJcbiAgICAgIGlmIChjdXJyZW50ICYmICFzZWxmLmlzQ2xvc2luZyAmJiBjdXJyZW50LnR5cGUgPT09IFwiaW1hZ2VcIiAmJiAhY3VycmVudC5oYXNFcnJvcikge1xyXG4gICAgICAgIGlmICghY3VycmVudC5pc0xvYWRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmaXRQb3MgPSBzZWxmLmdldEZpdFBvcyhjdXJyZW50KTtcclxuXHJcbiAgICAgICAgaWYgKGZpdFBvcyAmJiAoY3VycmVudC53aWR0aCA+IGZpdFBvcy53aWR0aCB8fCBjdXJyZW50LmhlaWdodCA+IGZpdFBvcy5oZWlnaHQpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBpbWFnZSBkaW1lbnNpb25zIGFyZSBzbWFsbGVyIHRoYW4gYWN0dWFsXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBpc1NjYWxlZERvd246IGZ1bmN0aW9uIChuZXh0V2lkdGgsIG5leHRIZWlnaHQpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIHJleiA9IGZhbHNlLFxyXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnQsXHJcbiAgICAgICAgJGNvbnRlbnQgPSBjdXJyZW50LiRjb250ZW50O1xyXG5cclxuICAgICAgaWYgKG5leHRXaWR0aCAhPT0gdW5kZWZpbmVkICYmIG5leHRIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJleiA9IG5leHRXaWR0aCA8IGN1cnJlbnQud2lkdGggJiYgbmV4dEhlaWdodCA8IGN1cnJlbnQuaGVpZ2h0O1xyXG4gICAgICB9IGVsc2UgaWYgKCRjb250ZW50KSB7XHJcbiAgICAgICAgcmV6ID0gJC5mYW5jeWJveC5nZXRUcmFuc2xhdGUoJGNvbnRlbnQpO1xyXG4gICAgICAgIHJleiA9IHJlei53aWR0aCA8IGN1cnJlbnQud2lkdGggJiYgcmV6LmhlaWdodCA8IGN1cnJlbnQuaGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmV6O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDaGVjayBpZiBpbWFnZSBkaW1lbnNpb25zIGV4Y2VlZCBwYXJlbnQgZWxlbWVudFxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBjYW5QYW46IGZ1bmN0aW9uIChuZXh0V2lkdGgsIG5leHRIZWlnaHQpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnQsXHJcbiAgICAgICAgcG9zID0gbnVsbCxcclxuICAgICAgICByZXogPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09IFwiaW1hZ2VcIiAmJiAoY3VycmVudC5pc0NvbXBsZXRlIHx8IChuZXh0V2lkdGggJiYgbmV4dEhlaWdodCkpICYmICFjdXJyZW50Lmhhc0Vycm9yKSB7XHJcbiAgICAgICAgcmV6ID0gc2VsZi5nZXRGaXRQb3MoY3VycmVudCk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0V2lkdGggIT09IHVuZGVmaW5lZCAmJiBuZXh0SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHBvcyA9IHtcclxuICAgICAgICAgICAgd2lkdGg6IG5leHRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBuZXh0SGVpZ2h0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICBwb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZShjdXJyZW50LiRjb250ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3MgJiYgcmV6KSB7XHJcbiAgICAgICAgICByZXogPSBNYXRoLmFicyhwb3Mud2lkdGggLSByZXoud2lkdGgpID4gMS41IHx8IE1hdGguYWJzKHBvcy5oZWlnaHQgLSByZXouaGVpZ2h0KSA+IDEuNTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXo7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIExvYWQgY29udGVudCBpbnRvIHRoZSBzbGlkZVxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgbG9hZFNsaWRlOiBmdW5jdGlvbiAoc2xpZGUpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgJHNsaWRlLFxyXG4gICAgICAgIGFqYXhMb2FkO1xyXG5cclxuICAgICAgaWYgKHNsaWRlLmlzTG9hZGluZyB8fCBzbGlkZS5pc0xvYWRlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2xpZGUuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmIChzZWxmLnRyaWdnZXIoXCJiZWZvcmVMb2FkXCIsIHNsaWRlKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICBzbGlkZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0eXBlID0gc2xpZGUudHlwZTtcclxuICAgICAgJHNsaWRlID0gc2xpZGUuJHNsaWRlO1xyXG5cclxuICAgICAgJHNsaWRlXHJcbiAgICAgICAgLm9mZihcInJlZnJlc2hcIilcclxuICAgICAgICAudHJpZ2dlcihcIm9uUmVzZXRcIilcclxuICAgICAgICAuYWRkQ2xhc3Moc2xpZGUub3B0cy5zbGlkZUNsYXNzKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSBjb250ZW50IGRlcGVuZGluZyBvbiB0aGUgdHlwZVxyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFwiaW1hZ2VcIjpcclxuICAgICAgICAgIHNlbGYuc2V0SW1hZ2Uoc2xpZGUpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFwiaWZyYW1lXCI6XHJcbiAgICAgICAgICBzZWxmLnNldElmcmFtZShzbGlkZSk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgXCJodG1sXCI6XHJcbiAgICAgICAgICBzZWxmLnNldENvbnRlbnQoc2xpZGUsIHNsaWRlLnNyYyB8fCBzbGlkZS5jb250ZW50KTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBcInZpZGVvXCI6XHJcbiAgICAgICAgICBzZWxmLnNldENvbnRlbnQoXHJcbiAgICAgICAgICAgIHNsaWRlLFxyXG4gICAgICAgICAgICBzbGlkZS5vcHRzLnZpZGVvLnRwbFxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFx7XFx7c3JjXFx9XFx9L2dpLCBzbGlkZS5zcmMpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwie3tmb3JtYXR9fVwiLCBzbGlkZS5vcHRzLnZpZGVvRm9ybWF0IHx8IHNsaWRlLm9wdHMudmlkZW8uZm9ybWF0IHx8IFwiXCIpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwie3twb3N0ZXJ9fVwiLCBzbGlkZS50aHVtYiB8fCBcIlwiKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBcImlubGluZVwiOlxyXG4gICAgICAgICAgaWYgKCQoc2xpZGUuc3JjKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc2VsZi5zZXRDb250ZW50KHNsaWRlLCAkKHNsaWRlLnNyYykpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZi5zZXRFcnJvcihzbGlkZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgXCJhamF4XCI6XHJcbiAgICAgICAgICBzZWxmLnNob3dMb2FkaW5nKHNsaWRlKTtcclxuXHJcbiAgICAgICAgICBhamF4TG9hZCA9ICQuYWpheChcclxuICAgICAgICAgICAgJC5leHRlbmQoe30sIHNsaWRlLm9wdHMuYWpheC5zZXR0aW5ncywge1xyXG4gICAgICAgICAgICAgIHVybDogc2xpZGUuc3JjLFxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhLCB0ZXh0U3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGV4dFN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZi5zZXRDb250ZW50KHNsaWRlLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChqcVhIUiAmJiB0ZXh0U3RhdHVzICE9PSBcImFib3J0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZi5zZXRFcnJvcihzbGlkZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAkc2xpZGUub25lKFwib25SZXNldFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGFqYXhMb2FkLmFib3J0KCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHNlbGYuc2V0RXJyb3Ioc2xpZGUpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVXNlIHRodW1ibmFpbCBpbWFnZSwgaWYgcG9zc2libGVcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgc2V0SW1hZ2U6IGZ1bmN0aW9uIChzbGlkZSkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgZ2hvc3Q7XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBuZWVkIHRvIHNob3cgbG9hZGluZyBpY29uXHJcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciAkaW1nID0gc2xpZGUuJGltYWdlO1xyXG5cclxuICAgICAgICBpZiAoIXNlbGYuaXNDbG9zaW5nICYmIHNsaWRlLmlzTG9hZGluZyAmJiAoISRpbWcgfHwgISRpbWcubGVuZ3RoIHx8ICEkaW1nWzBdLmNvbXBsZXRlKSAmJiAhc2xpZGUuaGFzRXJyb3IpIHtcclxuICAgICAgICAgIHNlbGYuc2hvd0xvYWRpbmcoc2xpZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgNTApO1xyXG5cclxuICAgICAgLy9DaGVjayBpZiBpbWFnZSBoYXMgc3Jjc2V0XHJcbiAgICAgIHNlbGYuY2hlY2tTcmNzZXQoc2xpZGUpO1xyXG5cclxuICAgICAgLy8gVGhpcyB3aWxsIGJlIHdyYXBwZXIgY29udGFpbmluZyBib3RoIGdob3N0IGFuZCBhY3R1YWwgaW1hZ2VcclxuICAgICAgc2xpZGUuJGNvbnRlbnQgPSAkKCc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtY29udGVudFwiPjwvZGl2PicpXHJcbiAgICAgICAgLmFkZENsYXNzKFwiZmFuY3lib3gtaXMtaGlkZGVuXCIpXHJcbiAgICAgICAgLmFwcGVuZFRvKHNsaWRlLiRzbGlkZS5hZGRDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1pbWFnZVwiKSk7XHJcblxyXG4gICAgICAvLyBJZiB3ZSBoYXZlIGEgdGh1bWJuYWlsLCB3ZSBjYW4gZGlzcGxheSBpdCB3aGlsZSBhY3R1YWwgaW1hZ2UgaXMgbG9hZGluZ1xyXG4gICAgICAvLyBVc2VycyB3aWxsIG5vdCBzdGFyZSBhdCBibGFjayBzY3JlZW4gYW5kIGFjdHVhbCBpbWFnZSB3aWxsIGFwcGVhciBncmFkdWFsbHlcclxuICAgICAgaWYgKHNsaWRlLm9wdHMucHJlbG9hZCAhPT0gZmFsc2UgJiYgc2xpZGUub3B0cy53aWR0aCAmJiBzbGlkZS5vcHRzLmhlaWdodCAmJiBzbGlkZS50aHVtYikge1xyXG4gICAgICAgIHNsaWRlLndpZHRoID0gc2xpZGUub3B0cy53aWR0aDtcclxuICAgICAgICBzbGlkZS5oZWlnaHQgPSBzbGlkZS5vcHRzLmhlaWdodDtcclxuXHJcbiAgICAgICAgZ2hvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG5cclxuICAgICAgICBnaG9zdC5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgICBzbGlkZS4kZ2hvc3QgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGdob3N0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHNlbGYuYWZ0ZXJMb2FkKHNsaWRlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzbGlkZS4kZ2hvc3QgPSAkKGdob3N0KVxyXG4gICAgICAgICAgLmFkZENsYXNzKFwiZmFuY3lib3gtaW1hZ2VcIilcclxuICAgICAgICAgIC5hcHBlbmRUbyhzbGlkZS4kY29udGVudClcclxuICAgICAgICAgIC5hdHRyKFwic3JjXCIsIHNsaWRlLnRodW1iKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU3RhcnQgbG9hZGluZyBhY3R1YWwgaW1hZ2VcclxuICAgICAgc2VsZi5zZXRCaWdJbWFnZShzbGlkZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIENoZWNrIGlmIGltYWdlIGhhcyBzcmNzZXQgYW5kIGdldCB0aGUgc291cmNlXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgY2hlY2tTcmNzZXQ6IGZ1bmN0aW9uIChzbGlkZSkge1xyXG4gICAgICB2YXIgc3Jjc2V0ID0gc2xpZGUub3B0cy5zcmNzZXQgfHwgc2xpZGUub3B0cy5pbWFnZS5zcmNzZXQsXHJcbiAgICAgICAgZm91bmQsXHJcbiAgICAgICAgdGVtcCxcclxuICAgICAgICBweFJhdGlvLFxyXG4gICAgICAgIHdpbmRvd1dpZHRoO1xyXG5cclxuICAgICAgLy8gSWYgd2UgaGF2ZSBcInNyY3NldFwiLCB0aGVuIHdlIG5lZWQgdG8gZmluZCBmaXJzdCBtYXRjaGluZyBcInNyY1wiIHZhbHVlLlxyXG4gICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSB3aGVuIHlvdSBzZXQgYW4gc3JjIGF0dHJpYnV0ZSwgdGhlIGJyb3dzZXIgd2lsbCBwcmVsb2FkIHRoZSBpbWFnZVxyXG4gICAgICAvLyBiZWZvcmUgYW55IGphdmFzY3JpcHQgb3IgZXZlbiBDU1MgaXMgYXBwbGllZC5cclxuICAgICAgaWYgKHNyY3NldCkge1xyXG4gICAgICAgIHB4UmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xyXG4gICAgICAgIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggKiBweFJhdGlvO1xyXG5cclxuICAgICAgICB0ZW1wID0gc3Jjc2V0LnNwbGl0KFwiLFwiKS5tYXAoZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0ge307XHJcblxyXG4gICAgICAgICAgZWwudHJpbSgpXHJcbiAgICAgICAgICAgIC5zcGxpdCgvXFxzKy8pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkge1xyXG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlSW50KGVsLnN1YnN0cmluZygwLCBlbC5sZW5ndGggLSAxKSwgMTApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChyZXQudXJsID0gZWwpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldC5wb3N0Zml4ID0gZWxbZWwubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBTb3J0IGJ5IHZhbHVlXHJcbiAgICAgICAgdGVtcC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICByZXR1cm4gYS52YWx1ZSAtIGIudmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE9rLCBub3cgd2UgaGF2ZSBhbiBhcnJheSBvZiBhbGwgc3Jjc2V0IHZhbHVlc1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGVtcC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgdmFyIGVsID0gdGVtcFtqXTtcclxuXHJcbiAgICAgICAgICBpZiAoKGVsLnBvc3RmaXggPT09IFwid1wiICYmIGVsLnZhbHVlID49IHdpbmRvd1dpZHRoKSB8fCAoZWwucG9zdGZpeCA9PT0gXCJ4XCIgJiYgZWwudmFsdWUgPj0gcHhSYXRpbykpIHtcclxuICAgICAgICAgICAgZm91bmQgPSBlbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBub3QgZm91bmQsIHRha2UgdGhlIGxhc3Qgb25lXHJcbiAgICAgICAgaWYgKCFmb3VuZCAmJiB0ZW1wLmxlbmd0aCkge1xyXG4gICAgICAgICAgZm91bmQgPSB0ZW1wW3RlbXAubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgIHNsaWRlLnNyYyA9IGZvdW5kLnVybDtcclxuXHJcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGRlZmF1bHQgd2lkdGgvaGVpZ2h0IHZhbHVlcywgd2UgY2FuIGNhbGN1bGF0ZSBoZWlnaHQgZm9yIG1hdGNoaW5nIHNvdXJjZVxyXG4gICAgICAgICAgaWYgKHNsaWRlLndpZHRoICYmIHNsaWRlLmhlaWdodCAmJiBmb3VuZC5wb3N0Zml4ID09IFwid1wiKSB7XHJcbiAgICAgICAgICAgIHNsaWRlLmhlaWdodCA9IChzbGlkZS53aWR0aCAvIHNsaWRlLmhlaWdodCkgKiBmb3VuZC52YWx1ZTtcclxuICAgICAgICAgICAgc2xpZGUud2lkdGggPSBmb3VuZC52YWx1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzbGlkZS5vcHRzLnNyY3NldCA9IHNyY3NldDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gQ3JlYXRlIGZ1bGwtc2l6ZSBpbWFnZVxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHNldEJpZ0ltYWdlOiBmdW5jdGlvbiAoc2xpZGUpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiksXHJcbiAgICAgICAgJGltZyA9ICQoaW1nKTtcclxuXHJcbiAgICAgIHNsaWRlLiRpbWFnZSA9ICRpbWdcclxuICAgICAgICAub25lKFwiZXJyb3JcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgc2VsZi5zZXRFcnJvcihzbGlkZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub25lKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgc2l6ZXM7XHJcblxyXG4gICAgICAgICAgaWYgKCFzbGlkZS4kZ2hvc3QpIHtcclxuICAgICAgICAgICAgc2VsZi5yZXNvbHZlSW1hZ2VTbGlkZVNpemUoc2xpZGUsIHRoaXMubmF0dXJhbFdpZHRoLCB0aGlzLm5hdHVyYWxIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5hZnRlckxvYWQoc2xpZGUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzZWxmLmlzQ2xvc2luZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNsaWRlLm9wdHMuc3Jjc2V0KSB7XHJcbiAgICAgICAgICAgIHNpemVzID0gc2xpZGUub3B0cy5zaXplcztcclxuXHJcbiAgICAgICAgICAgIGlmICghc2l6ZXMgfHwgc2l6ZXMgPT09IFwiYXV0b1wiKSB7XHJcbiAgICAgICAgICAgICAgc2l6ZXMgPVxyXG4gICAgICAgICAgICAgICAgKHNsaWRlLndpZHRoIC8gc2xpZGUuaGVpZ2h0ID4gMSAmJiAkVy53aWR0aCgpIC8gJFcuaGVpZ2h0KCkgPiAxID8gXCIxMDBcIiA6IE1hdGgucm91bmQoKHNsaWRlLndpZHRoIC8gc2xpZGUuaGVpZ2h0KSAqIDEwMCkpICtcclxuICAgICAgICAgICAgICAgIFwidndcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJGltZy5hdHRyKFwic2l6ZXNcIiwgc2l6ZXMpLmF0dHIoXCJzcmNzZXRcIiwgc2xpZGUub3B0cy5zcmNzZXQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEhpZGUgdGVtcG9yYXJ5IGltYWdlIGFmdGVyIHNvbWUgZGVsYXlcclxuICAgICAgICAgIGlmIChzbGlkZS4kZ2hvc3QpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHNsaWRlLiRnaG9zdCAmJiAhc2VsZi5pc0Nsb3NpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNsaWRlLiRnaG9zdC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBNYXRoLm1pbigzMDAsIE1hdGgubWF4KDEwMDAsIHNsaWRlLmhlaWdodCAvIDE2MDApKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc2VsZi5oaWRlTG9hZGluZyhzbGlkZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkQ2xhc3MoXCJmYW5jeWJveC1pbWFnZVwiKVxyXG4gICAgICAgIC5hdHRyKFwic3JjXCIsIHNsaWRlLnNyYylcclxuICAgICAgICAuYXBwZW5kVG8oc2xpZGUuJGNvbnRlbnQpO1xyXG5cclxuICAgICAgaWYgKChpbWcuY29tcGxldGUgfHwgaW1nLnJlYWR5U3RhdGUgPT0gXCJjb21wbGV0ZVwiKSAmJiAkaW1nLm5hdHVyYWxXaWR0aCAmJiAkaW1nLm5hdHVyYWxIZWlnaHQpIHtcclxuICAgICAgICAkaW1nLnRyaWdnZXIoXCJsb2FkXCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGltZy5lcnJvcikge1xyXG4gICAgICAgICRpbWcudHJpZ2dlcihcImVycm9yXCIpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIENvbXB1dGVzIHRoZSBzbGlkZSBzaXplIGZyb20gaW1hZ2Ugc2l6ZSBhbmQgbWF4V2lkdGgvbWF4SGVpZ2h0XHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHJlc29sdmVJbWFnZVNsaWRlU2l6ZTogZnVuY3Rpb24gKHNsaWRlLCBpbWdXaWR0aCwgaW1nSGVpZ2h0KSB7XHJcbiAgICAgIHZhciBtYXhXaWR0aCA9IHBhcnNlSW50KHNsaWRlLm9wdHMud2lkdGgsIDEwKSxcclxuICAgICAgICBtYXhIZWlnaHQgPSBwYXJzZUludChzbGlkZS5vcHRzLmhlaWdodCwgMTApO1xyXG5cclxuICAgICAgLy8gU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgaW1hZ2VcclxuICAgICAgc2xpZGUud2lkdGggPSBpbWdXaWR0aDtcclxuICAgICAgc2xpZGUuaGVpZ2h0ID0gaW1nSGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKG1heFdpZHRoID4gMCkge1xyXG4gICAgICAgIHNsaWRlLndpZHRoID0gbWF4V2lkdGg7XHJcbiAgICAgICAgc2xpZGUuaGVpZ2h0ID0gTWF0aC5mbG9vcigobWF4V2lkdGggKiBpbWdIZWlnaHQpIC8gaW1nV2lkdGgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobWF4SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgIHNsaWRlLndpZHRoID0gTWF0aC5mbG9vcigobWF4SGVpZ2h0ICogaW1nV2lkdGgpIC8gaW1nSGVpZ2h0KTtcclxuICAgICAgICBzbGlkZS5oZWlnaHQgPSBtYXhIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gQ3JlYXRlIGlmcmFtZSB3cmFwcGVyLCBpZnJhbWUgYW5kIGJpbmRpbmdzXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBzZXRJZnJhbWU6IGZ1bmN0aW9uIChzbGlkZSkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgb3B0cyA9IHNsaWRlLm9wdHMuaWZyYW1lLFxyXG4gICAgICAgICRzbGlkZSA9IHNsaWRlLiRzbGlkZSxcclxuICAgICAgICAkaWZyYW1lO1xyXG5cclxuICAgICAgc2xpZGUuJGNvbnRlbnQgPSAkKCc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtY29udGVudCcgKyAob3B0cy5wcmVsb2FkID8gXCIgZmFuY3lib3gtaXMtaGlkZGVuXCIgOiBcIlwiKSArICdcIj48L2Rpdj4nKVxyXG4gICAgICAgIC5jc3Mob3B0cy5jc3MpXHJcbiAgICAgICAgLmFwcGVuZFRvKCRzbGlkZSk7XHJcblxyXG4gICAgICAkc2xpZGUuYWRkQ2xhc3MoXCJmYW5jeWJveC1zbGlkZS0tXCIgKyBzbGlkZS5jb250ZW50VHlwZSk7XHJcblxyXG4gICAgICBzbGlkZS4kaWZyYW1lID0gJGlmcmFtZSA9ICQob3B0cy50cGwucmVwbGFjZSgvXFx7cm5kXFx9L2csIG5ldyBEYXRlKCkuZ2V0VGltZSgpKSlcclxuICAgICAgICAuYXR0cihvcHRzLmF0dHIpXHJcbiAgICAgICAgLmFwcGVuZFRvKHNsaWRlLiRjb250ZW50KTtcclxuXHJcbiAgICAgIGlmIChvcHRzLnByZWxvYWQpIHtcclxuICAgICAgICBzZWxmLnNob3dMb2FkaW5nKHNsaWRlKTtcclxuXHJcbiAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgaWYgaWZyYW1lIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWRcclxuICAgICAgICAvLyAoZHVlIHRvIGJyb3dzZXIgc2VjdXJpdHkgcG9saWN5KVxyXG5cclxuICAgICAgICAkaWZyYW1lLm9uKFwibG9hZC5mYiBlcnJvci5mYlwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1JlYWR5ID0gMTtcclxuXHJcbiAgICAgICAgICBzbGlkZS4kc2xpZGUudHJpZ2dlcihcInJlZnJlc2hcIik7XHJcblxyXG4gICAgICAgICAgc2VsZi5hZnRlckxvYWQoc2xpZGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSZWNhbGN1bGF0ZSBpZnJhbWUgY29udGVudCBzaXplXHJcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgICAgICAkc2xpZGUub24oXCJyZWZyZXNoLmZiXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHZhciAkY29udGVudCA9IHNsaWRlLiRjb250ZW50LFxyXG4gICAgICAgICAgICBmcmFtZVdpZHRoID0gb3B0cy5jc3Mud2lkdGgsXHJcbiAgICAgICAgICAgIGZyYW1lSGVpZ2h0ID0gb3B0cy5jc3MuaGVpZ2h0LFxyXG4gICAgICAgICAgICAkY29udGVudHMsXHJcbiAgICAgICAgICAgICRib2R5O1xyXG5cclxuICAgICAgICAgIGlmICgkaWZyYW1lWzBdLmlzUmVhZHkgIT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICRjb250ZW50cyA9ICRpZnJhbWUuY29udGVudHMoKTtcclxuICAgICAgICAgICAgJGJvZHkgPSAkY29udGVudHMuZmluZChcImJvZHlcIik7XHJcbiAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGNvbnRlbnQgZGltZW5zaW9ucywgaWYgaXQgaXMgYWNjZXNzaWJsZVxyXG4gICAgICAgICAgaWYgKCRib2R5ICYmICRib2R5Lmxlbmd0aCAmJiAkYm9keS5jaGlsZHJlbigpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBBdm9pZCBzY3JvbGxpbmcgdG8gdG9wIChpZiBtdWx0aXBsZSBpbnN0YW5jZXMpXHJcbiAgICAgICAgICAgICRzbGlkZS5jc3MoXCJvdmVyZmxvd1wiLCBcInZpc2libGVcIik7XHJcblxyXG4gICAgICAgICAgICAkY29udGVudC5jc3Moe1xyXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcclxuICAgICAgICAgICAgICBcIm1heC13aWR0aFwiOiBcIjEwMCVcIixcclxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiOTk5OXB4XCJcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZnJhbWVXaWR0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgZnJhbWVXaWR0aCA9IE1hdGguY2VpbChNYXRoLm1heCgkYm9keVswXS5jbGllbnRXaWR0aCwgJGJvZHkub3V0ZXJXaWR0aCh0cnVlKSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkY29udGVudC5jc3MoXCJ3aWR0aFwiLCBmcmFtZVdpZHRoID8gZnJhbWVXaWR0aCA6IFwiXCIpLmNzcyhcIm1heC13aWR0aFwiLCBcIlwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcmFtZUhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgZnJhbWVIZWlnaHQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoJGJvZHlbMF0uY2xpZW50SGVpZ2h0LCAkYm9keS5vdXRlckhlaWdodCh0cnVlKSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkY29udGVudC5jc3MoXCJoZWlnaHRcIiwgZnJhbWVIZWlnaHQgPyBmcmFtZUhlaWdodCA6IFwiXCIpO1xyXG5cclxuICAgICAgICAgICAgJHNsaWRlLmNzcyhcIm92ZXJmbG93XCIsIFwiYXV0b1wiKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAkY29udGVudC5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LWlzLWhpZGRlblwiKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxmLmFmdGVyTG9hZChzbGlkZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICRpZnJhbWUuYXR0cihcInNyY1wiLCBzbGlkZS5zcmMpO1xyXG5cclxuICAgICAgLy8gUmVtb3ZlIGlmcmFtZSBpZiBjbG9zaW5nIG9yIGNoYW5naW5nIGdhbGxlcnkgaXRlbVxyXG4gICAgICAkc2xpZGUub25lKFwib25SZXNldFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gVGhpcyBoZWxwcyBJRSBub3QgdG8gdGhyb3cgZXJyb3JzIHdoZW4gY2xvc2luZ1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAkKHRoaXMpXHJcbiAgICAgICAgICAgIC5maW5kKFwiaWZyYW1lXCIpXHJcbiAgICAgICAgICAgIC5oaWRlKClcclxuICAgICAgICAgICAgLnVuYmluZCgpXHJcbiAgICAgICAgICAgIC5hdHRyKFwic3JjXCIsIFwiLy9hYm91dDpibGFua1wiKTtcclxuICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XHJcblxyXG4gICAgICAgICQodGhpcylcclxuICAgICAgICAgIC5vZmYoXCJyZWZyZXNoLmZiXCIpXHJcbiAgICAgICAgICAuZW1wdHkoKTtcclxuXHJcbiAgICAgICAgc2xpZGUuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBzbGlkZS5pc1JldmVhbGVkID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBXcmFwIGFuZCBhcHBlbmQgY29udGVudCB0byB0aGUgc2xpZGVcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgc2V0Q29udGVudDogZnVuY3Rpb24gKHNsaWRlLCBjb250ZW50KSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChzZWxmLmlzQ2xvc2luZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2VsZi5oaWRlTG9hZGluZyhzbGlkZSk7XHJcblxyXG4gICAgICBpZiAoc2xpZGUuJGNvbnRlbnQpIHtcclxuICAgICAgICAkLmZhbmN5Ym94LnN0b3Aoc2xpZGUuJGNvbnRlbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzbGlkZS4kc2xpZGUuZW1wdHkoKTtcclxuXHJcbiAgICAgIC8vIElmIGNvbnRlbnQgaXMgYSBqUXVlcnkgb2JqZWN0LCB0aGVuIGl0IHdpbGwgYmUgbW92ZWQgdG8gdGhlIHNsaWRlLlxyXG4gICAgICAvLyBUaGUgcGxhY2Vob2xkZXIgaXMgY3JlYXRlZCBzbyB3ZSB3aWxsIGtub3cgd2hlcmUgdG8gcHV0IGl0IGJhY2suXHJcbiAgICAgIGlmIChpc1F1ZXJ5KGNvbnRlbnQpICYmIGNvbnRlbnQucGFyZW50KCkubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIGNvbnRlbnQgaXMgbm90IGFscmVhZHkgbW92ZWQgdG8gZmFuY3lCb3hcclxuICAgICAgICBpZiAoY29udGVudC5oYXNDbGFzcyhcImZhbmN5Ym94LWNvbnRlbnRcIikgfHwgY29udGVudC5wYXJlbnQoKS5oYXNDbGFzcyhcImZhbmN5Ym94LWNvbnRlbnRcIikpIHtcclxuICAgICAgICAgIGNvbnRlbnQucGFyZW50cyhcIi5mYW5jeWJveC1zbGlkZVwiKS50cmlnZ2VyKFwib25SZXNldFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSB0ZW1wb3JhcnkgZWxlbWVudCBtYXJraW5nIG9yaWdpbmFsIHBsYWNlIG9mIHRoZSBjb250ZW50XHJcbiAgICAgICAgc2xpZGUuJHBsYWNlaG9sZGVyID0gJChcIjxkaXY+XCIpXHJcbiAgICAgICAgICAuaGlkZSgpXHJcbiAgICAgICAgICAuaW5zZXJ0QWZ0ZXIoY29udGVudCk7XHJcblxyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSBjb250ZW50IGlzIHZpc2libGVcclxuICAgICAgICBjb250ZW50LmNzcyhcImRpc3BsYXlcIiwgXCJpbmxpbmUtYmxvY2tcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXNsaWRlLmhhc0Vycm9yKSB7XHJcbiAgICAgICAgLy8gSWYgY29udGVudCBpcyBqdXN0IGEgcGxhaW4gdGV4dCwgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gaHRtbFxyXG4gICAgICAgIGlmICgkLnR5cGUoY29udGVudCkgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgIGNvbnRlbnQgPSAkKFwiPGRpdj5cIilcclxuICAgICAgICAgICAgLmFwcGVuZCgkLnRyaW0oY29udGVudCkpXHJcbiAgICAgICAgICAgIC5jb250ZW50cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgXCJmaWx0ZXJcIiBvcHRpb24gaXMgcHJvdmlkZWQsIHRoZW4gZmlsdGVyIGNvbnRlbnRcclxuICAgICAgICBpZiAoc2xpZGUub3B0cy5maWx0ZXIpIHtcclxuICAgICAgICAgIGNvbnRlbnQgPSAkKFwiPGRpdj5cIilcclxuICAgICAgICAgICAgLmh0bWwoY29udGVudClcclxuICAgICAgICAgICAgLmZpbmQoc2xpZGUub3B0cy5maWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc2xpZGUuJHNsaWRlLm9uZShcIm9uUmVzZXRcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIFBhdXNlIGFsbCBodG1sNSB2aWRlby9hdWRpb1xyXG4gICAgICAgICQodGhpcylcclxuICAgICAgICAgIC5maW5kKFwidmlkZW8sYXVkaW9cIilcclxuICAgICAgICAgIC50cmlnZ2VyKFwicGF1c2VcIik7XHJcblxyXG4gICAgICAgIC8vIFB1dCBjb250ZW50IGJhY2tcclxuICAgICAgICBpZiAoc2xpZGUuJHBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICBzbGlkZS4kcGxhY2Vob2xkZXIuYWZ0ZXIoY29udGVudC5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LWNvbnRlbnRcIikuaGlkZSgpKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgICBzbGlkZS4kcGxhY2Vob2xkZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGN1c3RvbSBjbG9zZSBidXR0b25cclxuICAgICAgICBpZiAoc2xpZGUuJHNtYWxsQnRuKSB7XHJcbiAgICAgICAgICBzbGlkZS4kc21hbGxCdG4ucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgICAgc2xpZGUuJHNtYWxsQnRuID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBjb250ZW50IGFuZCBtYXJrIHNsaWRlIGFzIG5vdCBsb2FkZWRcclxuICAgICAgICBpZiAoIXNsaWRlLmhhc0Vycm9yKSB7XHJcbiAgICAgICAgICAkKHRoaXMpLmVtcHR5KCk7XHJcblxyXG4gICAgICAgICAgc2xpZGUuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHNsaWRlLmlzUmV2ZWFsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJChjb250ZW50KS5hcHBlbmRUbyhzbGlkZS4kc2xpZGUpO1xyXG5cclxuICAgICAgaWYgKCQoY29udGVudCkuaXMoXCJ2aWRlbyxhdWRpb1wiKSkge1xyXG4gICAgICAgICQoY29udGVudCkuYWRkQ2xhc3MoXCJmYW5jeWJveC12aWRlb1wiKTtcclxuXHJcbiAgICAgICAgJChjb250ZW50KS53cmFwKFwiPGRpdj48L2Rpdj5cIik7XHJcblxyXG4gICAgICAgIHNsaWRlLmNvbnRlbnRUeXBlID0gXCJ2aWRlb1wiO1xyXG5cclxuICAgICAgICBzbGlkZS5vcHRzLndpZHRoID0gc2xpZGUub3B0cy53aWR0aCB8fCAkKGNvbnRlbnQpLmF0dHIoXCJ3aWR0aFwiKTtcclxuICAgICAgICBzbGlkZS5vcHRzLmhlaWdodCA9IHNsaWRlLm9wdHMuaGVpZ2h0IHx8ICQoY29udGVudCkuYXR0cihcImhlaWdodFwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2xpZGUuJGNvbnRlbnQgPSBzbGlkZS4kc2xpZGVcclxuICAgICAgICAuY2hpbGRyZW4oKVxyXG4gICAgICAgIC5maWx0ZXIoXCJkaXYsZm9ybSxtYWluLHZpZGVvLGF1ZGlvLGFydGljbGUsLmZhbmN5Ym94LWNvbnRlbnRcIilcclxuICAgICAgICAuZmlyc3QoKTtcclxuXHJcbiAgICAgIHNsaWRlLiRjb250ZW50LnNpYmxpbmdzKCkuaGlkZSgpO1xyXG5cclxuICAgICAgLy8gUmUtY2hlY2sgaWYgdGhlcmUgaXMgYSB2YWxpZCBjb250ZW50XHJcbiAgICAgIC8vIChpbiBzb21lIGNhc2VzLCBhamF4IHJlc3BvbnNlIGNhbiBjb250YWluIHZhcmlvdXMgZWxlbWVudHMgb3IgcGxhaW4gdGV4dClcclxuICAgICAgaWYgKCFzbGlkZS4kY29udGVudC5sZW5ndGgpIHtcclxuICAgICAgICBzbGlkZS4kY29udGVudCA9IHNsaWRlLiRzbGlkZVxyXG4gICAgICAgICAgLndyYXBJbm5lcihcIjxkaXY+PC9kaXY+XCIpXHJcbiAgICAgICAgICAuY2hpbGRyZW4oKVxyXG4gICAgICAgICAgLmZpcnN0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNsaWRlLiRjb250ZW50LmFkZENsYXNzKFwiZmFuY3lib3gtY29udGVudFwiKTtcclxuXHJcbiAgICAgIHNsaWRlLiRzbGlkZS5hZGRDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1cIiArIHNsaWRlLmNvbnRlbnRUeXBlKTtcclxuXHJcbiAgICAgIHNlbGYuYWZ0ZXJMb2FkKHNsaWRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBzZXRFcnJvcjogZnVuY3Rpb24gKHNsaWRlKSB7XHJcbiAgICAgIHNsaWRlLmhhc0Vycm9yID0gdHJ1ZTtcclxuXHJcbiAgICAgIHNsaWRlLiRzbGlkZVxyXG4gICAgICAgIC50cmlnZ2VyKFwib25SZXNldFwiKVxyXG4gICAgICAgIC5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1cIiArIHNsaWRlLmNvbnRlbnRUeXBlKVxyXG4gICAgICAgIC5hZGRDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1lcnJvclwiKTtcclxuXHJcbiAgICAgIHNsaWRlLmNvbnRlbnRUeXBlID0gXCJodG1sXCI7XHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoc2xpZGUsIHRoaXMudHJhbnNsYXRlKHNsaWRlLCBzbGlkZS5vcHRzLmVycm9yVHBsKSk7XHJcblxyXG4gICAgICBpZiAoc2xpZGUucG9zID09PSB0aGlzLmN1cnJQb3MpIHtcclxuICAgICAgICB0aGlzLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGljb24gaW5zaWRlIHRoZSBzbGlkZVxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHNob3dMb2FkaW5nOiBmdW5jdGlvbiAoc2xpZGUpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgc2xpZGUgPSBzbGlkZSB8fCBzZWxmLmN1cnJlbnQ7XHJcblxyXG4gICAgICBpZiAoc2xpZGUgJiYgIXNsaWRlLiRzcGlubmVyKSB7XHJcbiAgICAgICAgc2xpZGUuJHNwaW5uZXIgPSAkKHNlbGYudHJhbnNsYXRlKHNlbGYsIHNlbGYub3B0cy5zcGlubmVyVHBsKSlcclxuICAgICAgICAgIC5hcHBlbmRUbyhzbGlkZS4kc2xpZGUpXHJcbiAgICAgICAgICAuaGlkZSgpXHJcbiAgICAgICAgICAuZmFkZUluKFwiZmFzdFwiKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBSZW1vdmUgbG9hZGluZyBpY29uIGZyb20gdGhlIHNsaWRlXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgaGlkZUxvYWRpbmc6IGZ1bmN0aW9uIChzbGlkZSkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICBzbGlkZSA9IHNsaWRlIHx8IHNlbGYuY3VycmVudDtcclxuXHJcbiAgICAgIGlmIChzbGlkZSAmJiBzbGlkZS4kc3Bpbm5lcikge1xyXG4gICAgICAgIHNsaWRlLiRzcGlubmVyLnN0b3AoKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgZGVsZXRlIHNsaWRlLiRzcGlubmVyO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEFkanVzdG1lbnRzIGFmdGVyIHNsaWRlIGNvbnRlbnQgaGFzIGJlZW4gbG9hZGVkXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIGFmdGVyTG9hZDogZnVuY3Rpb24gKHNsaWRlKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChzZWxmLmlzQ2xvc2luZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2xpZGUuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHNsaWRlLmlzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHNlbGYudHJpZ2dlcihcImFmdGVyTG9hZFwiLCBzbGlkZSk7XHJcblxyXG4gICAgICBzZWxmLmhpZGVMb2FkaW5nKHNsaWRlKTtcclxuXHJcbiAgICAgIC8vIEFkZCBzbWFsbCBjbG9zZSBidXR0b25cclxuICAgICAgaWYgKHNsaWRlLm9wdHMuc21hbGxCdG4gJiYgKCFzbGlkZS4kc21hbGxCdG4gfHwgIXNsaWRlLiRzbWFsbEJ0bi5sZW5ndGgpKSB7XHJcbiAgICAgICAgc2xpZGUuJHNtYWxsQnRuID0gJChzZWxmLnRyYW5zbGF0ZShzbGlkZSwgc2xpZGUub3B0cy5idG5UcGwuc21hbGxCdG4pKS5hcHBlbmRUbyhzbGlkZS4kY29udGVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERpc2FibGUgcmlnaHQgY2xpY2tcclxuICAgICAgaWYgKHNsaWRlLm9wdHMucHJvdGVjdCAmJiBzbGlkZS4kY29udGVudCAmJiAhc2xpZGUuaGFzRXJyb3IpIHtcclxuICAgICAgICBzbGlkZS4kY29udGVudC5vbihcImNvbnRleHRtZW51LmZiXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICBpZiAoZS5idXR0b24gPT0gMikge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEFkZCBmYWtlIGVsZW1lbnQgb24gdG9wIG9mIHRoZSBpbWFnZVxyXG4gICAgICAgIC8vIFRoaXMgbWFrZXMgYSBiaXQgaGFyZGVyIGZvciB1c2VyIHRvIHNlbGVjdCBpbWFnZVxyXG4gICAgICAgIGlmIChzbGlkZS50eXBlID09PSBcImltYWdlXCIpIHtcclxuICAgICAgICAgICQoJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zcGFjZWJhbGxcIj48L2Rpdj4nKS5hcHBlbmRUbyhzbGlkZS4kY29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLmFkanVzdENhcHRpb24oc2xpZGUpO1xyXG5cclxuICAgICAgc2VsZi5hZGp1c3RMYXlvdXQoc2xpZGUpO1xyXG5cclxuICAgICAgaWYgKHNsaWRlLnBvcyA9PT0gc2VsZi5jdXJyUG9zKSB7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDdXJzb3IoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2VsZi5yZXZlYWxDb250ZW50KHNsaWRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gUHJldmVudCBjYXB0aW9uIG92ZXJsYXAsXHJcbiAgICAvLyBmaXggY3NzIGluY29uc2lzdGVuY3kgYWNyb3NzIGJyb3dzZXJzXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgYWRqdXN0Q2FwdGlvbjogZnVuY3Rpb24gKHNsaWRlKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBjdXJyZW50ID0gc2xpZGUgfHwgc2VsZi5jdXJyZW50LFxyXG4gICAgICAgIGNhcHRpb24gPSBjdXJyZW50Lm9wdHMuY2FwdGlvbixcclxuICAgICAgICBwcmV2ZW50T3ZlcmxhcCA9IGN1cnJlbnQub3B0cy5wcmV2ZW50Q2FwdGlvbk92ZXJsYXAsXHJcbiAgICAgICAgJGNhcHRpb24gPSBzZWxmLiRyZWZzLmNhcHRpb24sXHJcbiAgICAgICAgJGNsb25lLFxyXG4gICAgICAgIGNhcHRpb25IID0gZmFsc2U7XHJcblxyXG4gICAgICAkY2FwdGlvbi50b2dnbGVDbGFzcyhcImZhbmN5Ym94LWNhcHRpb24tLXNlcGFyYXRlXCIsIHByZXZlbnRPdmVybGFwKTtcclxuXHJcbiAgICAgIGlmIChwcmV2ZW50T3ZlcmxhcCAmJiBjYXB0aW9uICYmIGNhcHRpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQucG9zICE9PSBzZWxmLmN1cnJQb3MpIHtcclxuICAgICAgICAgICRjbG9uZSA9ICRjYXB0aW9uLmNsb25lKCkuYXBwZW5kVG8oJGNhcHRpb24ucGFyZW50KCkpO1xyXG5cclxuICAgICAgICAgICRjbG9uZVxyXG4gICAgICAgICAgICAuY2hpbGRyZW4oKVxyXG4gICAgICAgICAgICAuZXEoMClcclxuICAgICAgICAgICAgLmVtcHR5KClcclxuICAgICAgICAgICAgLmh0bWwoY2FwdGlvbik7XHJcblxyXG4gICAgICAgICAgY2FwdGlvbkggPSAkY2xvbmUub3V0ZXJIZWlnaHQodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgJGNsb25lLmVtcHR5KCkucmVtb3ZlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWxmLiRjYXB0aW9uKSB7XHJcbiAgICAgICAgICBjYXB0aW9uSCA9IHNlbGYuJGNhcHRpb24ub3V0ZXJIZWlnaHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdXJyZW50LiRzbGlkZS5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiLCBjYXB0aW9uSCB8fCBcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBTaW1wbGUgaGFjayB0byBmaXggaW5jb25zaXN0ZW5jeSBhY3Jvc3MgYnJvd3NlcnMsIGRlc2NyaWJlZCBoZXJlIChhZmZlY3RzIEVkZ2UsIHRvbyk6XHJcbiAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg1MThcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIGFkanVzdExheW91dDogZnVuY3Rpb24gKHNsaWRlKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBjdXJyZW50ID0gc2xpZGUgfHwgc2VsZi5jdXJyZW50LFxyXG4gICAgICAgIHNjcm9sbEhlaWdodCxcclxuICAgICAgICBtYXJnaW5Cb3R0b20sXHJcbiAgICAgICAgaW5saW5lUGFkZGluZyxcclxuICAgICAgICBhY3R1YWxQYWRkaW5nO1xyXG5cclxuICAgICAgaWYgKGN1cnJlbnQuaXNMb2FkZWQgJiYgY3VycmVudC5vcHRzLmRpc2FibGVMYXlvdXRGaXggIT09IHRydWUpIHtcclxuICAgICAgICBjdXJyZW50LiRjb250ZW50LmNzcyhcIm1hcmdpbi1ib3R0b21cIiwgXCJcIik7XHJcblxyXG4gICAgICAgIC8vIElmIHdlIHdvdWxkIGFsd2F5cyBzZXQgbWFyZ2luLWJvdHRvbSBmb3IgdGhlIGNvbnRlbnQsXHJcbiAgICAgICAgLy8gdGhlbiBpdCB3b3VsZCBwb3RlbnRpYWxseSBicmVhayB2ZXJ0aWNhbCBhbGlnblxyXG4gICAgICAgIGlmIChjdXJyZW50LiRjb250ZW50Lm91dGVySGVpZ2h0KCkgPiBjdXJyZW50LiRzbGlkZS5oZWlnaHQoKSArIDAuNSkge1xyXG4gICAgICAgICAgaW5saW5lUGFkZGluZyA9IGN1cnJlbnQuJHNsaWRlWzBdLnN0eWxlW1wicGFkZGluZy1ib3R0b21cIl07XHJcbiAgICAgICAgICBhY3R1YWxQYWRkaW5nID0gY3VycmVudC4kc2xpZGUuY3NzKFwicGFkZGluZy1ib3R0b21cIik7XHJcblxyXG4gICAgICAgICAgaWYgKHBhcnNlRmxvYXQoYWN0dWFsUGFkZGluZykgPiAwKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IGN1cnJlbnQuJHNsaWRlWzBdLnNjcm9sbEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnQuJHNsaWRlLmNzcyhcInBhZGRpbmctYm90dG9tXCIsIDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHNjcm9sbEhlaWdodCAtIGN1cnJlbnQuJHNsaWRlWzBdLnNjcm9sbEhlaWdodCkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gYWN0dWFsUGFkZGluZztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VycmVudC4kc2xpZGUuY3NzKFwicGFkZGluZy1ib3R0b21cIiwgaW5saW5lUGFkZGluZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdXJyZW50LiRjb250ZW50LmNzcyhcIm1hcmdpbi1ib3R0b21cIiwgbWFyZ2luQm90dG9tKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBNYWtlIGNvbnRlbnQgdmlzaWJsZVxyXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHJpZ2h0IGFmdGVyIGNvbnRlbnQgaGFzIGJlZW4gbG9hZGVkIG9yXHJcbiAgICAvLyB1c2VyIG5hdmlnYXRlcyBnYWxsZXJ5IGFuZCB0cmFuc2l0aW9uIHNob3VsZCBzdGFydFxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgcmV2ZWFsQ29udGVudDogZnVuY3Rpb24gKHNsaWRlKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICAkc2xpZGUgPSBzbGlkZS4kc2xpZGUsXHJcbiAgICAgICAgZW5kID0gZmFsc2UsXHJcbiAgICAgICAgc3RhcnQgPSBmYWxzZSxcclxuICAgICAgICBpc01vdmVkID0gc2VsZi5pc01vdmVkKHNsaWRlKSxcclxuICAgICAgICBpc1JldmVhbGVkID0gc2xpZGUuaXNSZXZlYWxlZCxcclxuICAgICAgICBlZmZlY3QsXHJcbiAgICAgICAgZWZmZWN0Q2xhc3NOYW1lLFxyXG4gICAgICAgIGR1cmF0aW9uLFxyXG4gICAgICAgIG9wYWNpdHk7XHJcblxyXG4gICAgICBzbGlkZS5pc1JldmVhbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGVmZmVjdCA9IHNsaWRlLm9wdHNbc2VsZi5maXJzdFJ1biA/IFwiYW5pbWF0aW9uRWZmZWN0XCIgOiBcInRyYW5zaXRpb25FZmZlY3RcIl07XHJcbiAgICAgIGR1cmF0aW9uID0gc2xpZGUub3B0c1tzZWxmLmZpcnN0UnVuID8gXCJhbmltYXRpb25EdXJhdGlvblwiIDogXCJ0cmFuc2l0aW9uRHVyYXRpb25cIl07XHJcblxyXG4gICAgICBkdXJhdGlvbiA9IHBhcnNlSW50KHNsaWRlLmZvcmNlZER1cmF0aW9uID09PSB1bmRlZmluZWQgPyBkdXJhdGlvbiA6IHNsaWRlLmZvcmNlZER1cmF0aW9uLCAxMCk7XHJcblxyXG4gICAgICBpZiAoaXNNb3ZlZCB8fCBzbGlkZS5wb3MgIT09IHNlbGYuY3VyclBvcyB8fCAhZHVyYXRpb24pIHtcclxuICAgICAgICBlZmZlY3QgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgY2FuIHpvb21cclxuICAgICAgaWYgKGVmZmVjdCA9PT0gXCJ6b29tXCIpIHtcclxuICAgICAgICBpZiAoc2xpZGUucG9zID09PSBzZWxmLmN1cnJQb3MgJiYgZHVyYXRpb24gJiYgc2xpZGUudHlwZSA9PT0gXCJpbWFnZVwiICYmICFzbGlkZS5oYXNFcnJvciAmJiAoc3RhcnQgPSBzZWxmLmdldFRodW1iUG9zKHNsaWRlKSkpIHtcclxuICAgICAgICAgIGVuZCA9IHNlbGYuZ2V0Rml0UG9zKHNsaWRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZWZmZWN0ID0gXCJmYWRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBab29tIGFuaW1hdGlvblxyXG4gICAgICAvLyA9PT09PT09PT09PT09PVxyXG4gICAgICBpZiAoZWZmZWN0ID09PSBcInpvb21cIikge1xyXG4gICAgICAgIHNlbGYuaXNBbmltYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBlbmQuc2NhbGVYID0gZW5kLndpZHRoIC8gc3RhcnQud2lkdGg7XHJcbiAgICAgICAgZW5kLnNjYWxlWSA9IGVuZC5oZWlnaHQgLyBzdGFydC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gYW5pbWF0ZSBvcGFjaXR5XHJcbiAgICAgICAgb3BhY2l0eSA9IHNsaWRlLm9wdHMuem9vbU9wYWNpdHk7XHJcblxyXG4gICAgICAgIGlmIChvcGFjaXR5ID09IFwiYXV0b1wiKSB7XHJcbiAgICAgICAgICBvcGFjaXR5ID0gTWF0aC5hYnMoc2xpZGUud2lkdGggLyBzbGlkZS5oZWlnaHQgLSBzdGFydC53aWR0aCAvIHN0YXJ0LmhlaWdodCkgPiAwLjE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BhY2l0eSkge1xyXG4gICAgICAgICAgc3RhcnQub3BhY2l0eSA9IDAuMTtcclxuICAgICAgICAgIGVuZC5vcGFjaXR5ID0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERyYXcgaW1hZ2UgYXQgc3RhcnQgcG9zaXRpb25cclxuICAgICAgICAkLmZhbmN5Ym94LnNldFRyYW5zbGF0ZShzbGlkZS4kY29udGVudC5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LWlzLWhpZGRlblwiKSwgc3RhcnQpO1xyXG5cclxuICAgICAgICBmb3JjZVJlZHJhdyhzbGlkZS4kY29udGVudCk7XHJcblxyXG4gICAgICAgIC8vIFN0YXJ0IGFuaW1hdGlvblxyXG4gICAgICAgICQuZmFuY3lib3guYW5pbWF0ZShzbGlkZS4kY29udGVudCwgZW5kLCBkdXJhdGlvbiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgc2VsZi5pc0FuaW1hdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHNlbGYuY29tcGxldGUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLnVwZGF0ZVNsaWRlKHNsaWRlKTtcclxuXHJcbiAgICAgIC8vIFNpbXBseSBzaG93IGNvbnRlbnQgaWYgbm8gZWZmZWN0XHJcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAgIGlmICghZWZmZWN0KSB7XHJcbiAgICAgICAgc2xpZGUuJGNvbnRlbnQucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1pcy1oaWRkZW5cIik7XHJcblxyXG4gICAgICAgIGlmICghaXNSZXZlYWxlZCAmJiBpc01vdmVkICYmIHNsaWRlLnR5cGUgPT09IFwiaW1hZ2VcIiAmJiAhc2xpZGUuaGFzRXJyb3IpIHtcclxuICAgICAgICAgIHNsaWRlLiRjb250ZW50LmhpZGUoKS5mYWRlSW4oXCJmYXN0XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNsaWRlLnBvcyA9PT0gc2VsZi5jdXJyUG9zKSB7XHJcbiAgICAgICAgICBzZWxmLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBhcmUgZm9yIENTUyB0cmFuc2l0b25cclxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAkLmZhbmN5Ym94LnN0b3AoJHNsaWRlKTtcclxuXHJcbiAgICAgIC8vZWZmZWN0Q2xhc3NOYW1lID0gXCJmYW5jeWJveC1hbmltYXRlZCBmYW5jeWJveC1zbGlkZS0tXCIgKyAoc2xpZGUucG9zID49IHNlbGYucHJldlBvcyA/IFwibmV4dFwiIDogXCJwcmV2aW91c1wiKSArIFwiIGZhbmN5Ym94LWZ4LVwiICsgZWZmZWN0O1xyXG4gICAgICBlZmZlY3RDbGFzc05hbWUgPSBcImZhbmN5Ym94LXNsaWRlLS1cIiArIChzbGlkZS5wb3MgPj0gc2VsZi5wcmV2UG9zID8gXCJuZXh0XCIgOiBcInByZXZpb3VzXCIpICsgXCIgZmFuY3lib3gtYW5pbWF0ZWQgZmFuY3lib3gtZngtXCIgKyBlZmZlY3Q7XHJcblxyXG4gICAgICAkc2xpZGUuYWRkQ2xhc3MoZWZmZWN0Q2xhc3NOYW1lKS5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1jdXJyZW50XCIpOyAvLy5hZGRDbGFzcyhlZmZlY3RDbGFzc05hbWUpO1xyXG5cclxuICAgICAgc2xpZGUuJGNvbnRlbnQucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1pcy1oaWRkZW5cIik7XHJcblxyXG4gICAgICAvLyBGb3JjZSByZWZsb3dcclxuICAgICAgZm9yY2VSZWRyYXcoJHNsaWRlKTtcclxuXHJcbiAgICAgIGlmIChzbGlkZS50eXBlICE9PSBcImltYWdlXCIpIHtcclxuICAgICAgICBzbGlkZS4kY29udGVudC5oaWRlKCkuc2hvdygwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJC5mYW5jeWJveC5hbmltYXRlKFxyXG4gICAgICAgICRzbGlkZSxcclxuICAgICAgICBcImZhbmN5Ym94LXNsaWRlLS1jdXJyZW50XCIsXHJcbiAgICAgICAgZHVyYXRpb24sXHJcbiAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgJHNsaWRlLnJlbW92ZUNsYXNzKGVmZmVjdENsYXNzTmFtZSkuY3NzKHtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiBcIlwiLFxyXG4gICAgICAgICAgICBvcGFjaXR5OiBcIlwiXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2xpZGUucG9zID09PSBzZWxmLmN1cnJQb3MpIHtcclxuICAgICAgICAgICAgc2VsZi5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBjYW4gYW5kIGhhdmUgdG8gem9vbSBmcm9tIHRodW1ibmFpbFxyXG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBnZXRUaHVtYlBvczogZnVuY3Rpb24gKHNsaWRlKSB7XHJcbiAgICAgIHZhciByZXogPSBmYWxzZSxcclxuICAgICAgICAkdGh1bWIgPSBzbGlkZS4kdGh1bWIsXHJcbiAgICAgICAgdGh1bWJQb3MsXHJcbiAgICAgICAgYnR3LFxyXG4gICAgICAgIGJydyxcclxuICAgICAgICBiYncsXHJcbiAgICAgICAgYmx3O1xyXG5cclxuICAgICAgaWYgKCEkdGh1bWIgfHwgIWluVmlld3BvcnQoJHRodW1iWzBdKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGh1bWJQb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZSgkdGh1bWIpO1xyXG5cclxuICAgICAgYnR3ID0gcGFyc2VGbG9hdCgkdGh1bWIuY3NzKFwiYm9yZGVyLXRvcC13aWR0aFwiKSB8fCAwKTtcclxuICAgICAgYnJ3ID0gcGFyc2VGbG9hdCgkdGh1bWIuY3NzKFwiYm9yZGVyLXJpZ2h0LXdpZHRoXCIpIHx8IDApO1xyXG4gICAgICBiYncgPSBwYXJzZUZsb2F0KCR0aHVtYi5jc3MoXCJib3JkZXItYm90dG9tLXdpZHRoXCIpIHx8IDApO1xyXG4gICAgICBibHcgPSBwYXJzZUZsb2F0KCR0aHVtYi5jc3MoXCJib3JkZXItbGVmdC13aWR0aFwiKSB8fCAwKTtcclxuXHJcbiAgICAgIHJleiA9IHtcclxuICAgICAgICB0b3A6IHRodW1iUG9zLnRvcCArIGJ0dyxcclxuICAgICAgICBsZWZ0OiB0aHVtYlBvcy5sZWZ0ICsgYmx3LFxyXG4gICAgICAgIHdpZHRoOiB0aHVtYlBvcy53aWR0aCAtIGJydyAtIGJsdyxcclxuICAgICAgICBoZWlnaHQ6IHRodW1iUG9zLmhlaWdodCAtIGJ0dyAtIGJidyxcclxuICAgICAgICBzY2FsZVg6IDEsXHJcbiAgICAgICAgc2NhbGVZOiAxXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gdGh1bWJQb3Mud2lkdGggPiAwICYmIHRodW1iUG9zLmhlaWdodCA+IDAgPyByZXogOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRmluYWwgYWRqdXN0bWVudHMgYWZ0ZXIgY3VycmVudCBnYWxsZXJ5IGl0ZW0gaXMgbW92ZWQgdG8gcG9zaXRpb25cclxuICAgIC8vIGFuZCBpdGBzIGNvbnRlbnQgaXMgbG9hZGVkXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgY3VycmVudCA9IHNlbGYuY3VycmVudCxcclxuICAgICAgICBzbGlkZXMgPSB7fSxcclxuICAgICAgICAkZWw7XHJcblxyXG4gICAgICBpZiAoc2VsZi5pc01vdmVkKCkgfHwgIWN1cnJlbnQuaXNMb2FkZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY3VycmVudC5pc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgY3VycmVudC5pc0NvbXBsZXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY3VycmVudC4kc2xpZGUuc2libGluZ3MoKS50cmlnZ2VyKFwib25SZXNldFwiKTtcclxuXHJcbiAgICAgICAgc2VsZi5wcmVsb2FkKFwiaW5saW5lXCIpO1xyXG5cclxuICAgICAgICAvLyBUcmlnZ2VyIGFueSBDU1MgdHJhbnNpdG9uIGluc2lkZSB0aGUgc2xpZGVcclxuICAgICAgICBmb3JjZVJlZHJhdyhjdXJyZW50LiRzbGlkZSk7XHJcblxyXG4gICAgICAgIGN1cnJlbnQuJHNsaWRlLmFkZENsYXNzKFwiZmFuY3lib3gtc2xpZGUtLWNvbXBsZXRlXCIpO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdW5uZWNlc3Nhcnkgc2xpZGVzXHJcbiAgICAgICAgJC5lYWNoKHNlbGYuc2xpZGVzLCBmdW5jdGlvbiAoa2V5LCBzbGlkZSkge1xyXG4gICAgICAgICAgaWYgKHNsaWRlLnBvcyA+PSBzZWxmLmN1cnJQb3MgLSAxICYmIHNsaWRlLnBvcyA8PSBzZWxmLmN1cnJQb3MgKyAxKSB7XHJcbiAgICAgICAgICAgIHNsaWRlc1tzbGlkZS5wb3NdID0gc2xpZGU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNsaWRlKSB7XHJcbiAgICAgICAgICAgICQuZmFuY3lib3guc3RvcChzbGlkZS4kc2xpZGUpO1xyXG5cclxuICAgICAgICAgICAgc2xpZGUuJHNsaWRlLm9mZigpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZWxmLnNsaWRlcyA9IHNsaWRlcztcclxuICAgICAgfVxyXG5cclxuICAgICAgc2VsZi5pc0FuaW1hdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgc2VsZi51cGRhdGVDdXJzb3IoKTtcclxuXHJcbiAgICAgIHNlbGYudHJpZ2dlcihcImFmdGVyU2hvd1wiKTtcclxuXHJcbiAgICAgIC8vIEF1dG9wbGF5IGZpcnN0IGh0bWw1IHZpZGVvL2F1ZGlvXHJcbiAgICAgIGlmICghIWN1cnJlbnQub3B0cy52aWRlby5hdXRvU3RhcnQpIHtcclxuICAgICAgICBjdXJyZW50LiRzbGlkZVxyXG4gICAgICAgICAgLmZpbmQoXCJ2aWRlbyxhdWRpb1wiKVxyXG4gICAgICAgICAgLmZpbHRlcihcIjp2aXNpYmxlOmZpcnN0XCIpXHJcbiAgICAgICAgICAudHJpZ2dlcihcInBsYXlcIilcclxuICAgICAgICAgIC5vbmUoXCJlbmRlZFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChEb2N1bWVudC5leGl0RnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICAgIERvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy53ZWJraXRFeGl0RnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICAgIHRoaXMud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZi5uZXh0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVHJ5IHRvIGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudFxyXG4gICAgICBpZiAoY3VycmVudC5vcHRzLmF1dG9Gb2N1cyAmJiBjdXJyZW50LmNvbnRlbnRUeXBlID09PSBcImh0bWxcIikge1xyXG4gICAgICAgIC8vIExvb2sgZm9yIHRoZSBmaXJzdCBpbnB1dCB3aXRoIGF1dG9mb2N1cyBhdHRyaWJ1dGVcclxuICAgICAgICAkZWwgPSBjdXJyZW50LiRjb250ZW50LmZpbmQoXCJpbnB1dFthdXRvZm9jdXNdOmVuYWJsZWQ6dmlzaWJsZTpmaXJzdFwiKTtcclxuXHJcbiAgICAgICAgaWYgKCRlbC5sZW5ndGgpIHtcclxuICAgICAgICAgICRlbC50cmlnZ2VyKFwiZm9jdXNcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlbGYuZm9jdXMobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBdm9pZCBqdW1waW5nXHJcbiAgICAgIGN1cnJlbnQuJHNsaWRlLnNjcm9sbFRvcCgwKS5zY3JvbGxMZWZ0KDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBQcmVsb2FkIG5leHQgYW5kIHByZXZpb3VzIHNsaWRlc1xyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBwcmVsb2FkOiBmdW5jdGlvbiAodHlwZSkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgcHJldixcclxuICAgICAgICBuZXh0O1xyXG5cclxuICAgICAgaWYgKHNlbGYuZ3JvdXAubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbmV4dCA9IHNlbGYuc2xpZGVzW3NlbGYuY3VyclBvcyArIDFdO1xyXG4gICAgICBwcmV2ID0gc2VsZi5zbGlkZXNbc2VsZi5jdXJyUG9zIC0gMV07XHJcblxyXG4gICAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09IHR5cGUpIHtcclxuICAgICAgICBzZWxmLmxvYWRTbGlkZShwcmV2KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5leHQgJiYgbmV4dC50eXBlID09PSB0eXBlKSB7XHJcbiAgICAgICAgc2VsZi5sb2FkU2xpZGUobmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gVHJ5IHRvIGZpbmQgYW5kIGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudFxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIGZvY3VzOiBmdW5jdGlvbiAoZSwgZmlyc3RSdW4pIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGZvY3VzYWJsZVN0ciA9IFtcclxuICAgICAgICAgIFwiYVtocmVmXVwiLFxyXG4gICAgICAgICAgXCJhcmVhW2hyZWZdXCIsXHJcbiAgICAgICAgICAnaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1cImhpZGRlblwiXSk6bm90KFthcmlhLWhpZGRlbl0pJyxcclxuICAgICAgICAgIFwic2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW2FyaWEtaGlkZGVuXSlcIixcclxuICAgICAgICAgIFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKVwiLFxyXG4gICAgICAgICAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKVwiLFxyXG4gICAgICAgICAgXCJpZnJhbWVcIixcclxuICAgICAgICAgIFwib2JqZWN0XCIsXHJcbiAgICAgICAgICBcImVtYmVkXCIsXHJcbiAgICAgICAgICBcInZpZGVvXCIsXHJcbiAgICAgICAgICBcImF1ZGlvXCIsXHJcbiAgICAgICAgICBcIltjb250ZW50ZWRpdGFibGVdXCIsXHJcbiAgICAgICAgICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4Xj1cIi1cIl0pJ1xyXG4gICAgICAgIF0uam9pbihcIixcIiksXHJcbiAgICAgICAgZm9jdXNhYmxlSXRlbXMsXHJcbiAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDtcclxuXHJcbiAgICAgIGlmIChzZWxmLmlzQ2xvc2luZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGUgfHwgIXNlbGYuY3VycmVudCB8fCAhc2VsZi5jdXJyZW50LmlzQ29tcGxldGUpIHtcclxuICAgICAgICAvLyBGb2N1cyBvbiBhbnkgZWxlbWVudCBpbnNpZGUgZmFuY3lib3hcclxuICAgICAgICBmb2N1c2FibGVJdGVtcyA9IHNlbGYuJHJlZnMuY29udGFpbmVyLmZpbmQoXCIqOnZpc2libGVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gRm9jdXMgaW5zaWRlIGN1cnJlbnQgc2xpZGVcclxuICAgICAgICBmb2N1c2FibGVJdGVtcyA9IHNlbGYuY3VycmVudC4kc2xpZGUuZmluZChcIio6dmlzaWJsZVwiICsgKGZpcnN0UnVuID8gXCI6bm90KC5mYW5jeWJveC1jbG9zZS1zbWFsbClcIiA6IFwiXCIpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9jdXNhYmxlSXRlbXMgPSBmb2N1c2FibGVJdGVtcy5maWx0ZXIoZm9jdXNhYmxlU3RyKS5maWx0ZXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAkKHRoaXMpLmNzcyhcInZpc2liaWxpdHlcIikgIT09IFwiaGlkZGVuXCIgJiYgISQodGhpcykuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoZm9jdXNhYmxlSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9jdXNlZEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmluZGV4KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAoZSAmJiBlLnNoaWZ0S2V5KSB7XHJcbiAgICAgICAgICAvLyBCYWNrIHRhYlxyXG4gICAgICAgICAgaWYgKGZvY3VzZWRJdGVtSW5kZXggPCAwIHx8IGZvY3VzZWRJdGVtSW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICBmb2N1c2FibGVJdGVtcy5lcShmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxKS50cmlnZ2VyKFwiZm9jdXNcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIE91dHNpZGUgb3IgRm9yd2FyZCB0YWJcclxuICAgICAgICAgIGlmIChmb2N1c2VkSXRlbUluZGV4IDwgMCB8fCBmb2N1c2VkSXRlbUluZGV4ID09IGZvY3VzYWJsZUl0ZW1zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zLmVxKDApLnRyaWdnZXIoXCJmb2N1c1wiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZi4kcmVmcy5jb250YWluZXIudHJpZ2dlcihcImZvY3VzXCIpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEFjdGl2YXRlcyBjdXJyZW50IGluc3RhbmNlIC0gYnJpbmdzIGNvbnRhaW5lciB0byB0aGUgZnJvbnQgYW5kIGVuYWJsZXMga2V5Ym9hcmQsXHJcbiAgICAvLyBub3RpZmllcyBvdGhlciBpbnN0YW5jZXMgYWJvdXQgZGVhY3RpdmF0aW5nXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBhY3RpdmF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBEZWFjdGl2YXRlIGFsbCBpbnN0YW5jZXNcclxuICAgICAgJChcIi5mYW5jeWJveC1jb250YWluZXJcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlID0gJCh0aGlzKS5kYXRhKFwiRmFuY3lCb3hcIik7XHJcblxyXG4gICAgICAgIC8vIFNraXAgc2VsZiBhbmQgY2xvc2luZyBpbnN0YW5jZXNcclxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuaWQgIT09IHNlbGYuaWQgJiYgIWluc3RhbmNlLmlzQ2xvc2luZykge1xyXG4gICAgICAgICAgaW5zdGFuY2UudHJpZ2dlcihcIm9uRGVhY3RpdmF0ZVwiKTtcclxuXHJcbiAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVFdmVudHMoKTtcclxuXHJcbiAgICAgICAgICBpbnN0YW5jZS5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2VsZi5pc1Zpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHNlbGYuY3VycmVudCB8fCBzZWxmLmlzSWRsZSkge1xyXG4gICAgICAgIHNlbGYudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHNlbGYudXBkYXRlQ29udHJvbHMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2VsZi50cmlnZ2VyKFwib25BY3RpdmF0ZVwiKTtcclxuXHJcbiAgICAgIHNlbGYuYWRkRXZlbnRzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFN0YXJ0IGNsb3NpbmcgcHJvY2VkdXJlXHJcbiAgICAvLyBUaGlzIHdpbGwgc3RhcnQgXCJ6b29tLW91dFwiIGFuaW1hdGlvbiBpZiBuZWVkZWQgYW5kIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgYWZ0ZXJ3YXJkc1xyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgY2xvc2U6IGZ1bmN0aW9uIChlLCBkKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBjdXJyZW50ID0gc2VsZi5jdXJyZW50LFxyXG4gICAgICAgIGVmZmVjdCxcclxuICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICAkY29udGVudCxcclxuICAgICAgICBkb21SZWN0LFxyXG4gICAgICAgIG9wYWNpdHksXHJcbiAgICAgICAgc3RhcnQsXHJcbiAgICAgICAgZW5kO1xyXG5cclxuICAgICAgdmFyIGRvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2VsZi5jbGVhblVwKGUpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHNlbGYuaXNDbG9zaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLmlzQ2xvc2luZyA9IHRydWU7XHJcblxyXG4gICAgICAvLyBJZiBiZWZvcmVDbG9zZSBjYWxsYmFjayBwcmV2ZW50cyBjbG9zaW5nLCBtYWtlIHN1cmUgY29udGVudCBpcyBjZW50ZXJlZFxyXG4gICAgICBpZiAoc2VsZi50cmlnZ2VyKFwiYmVmb3JlQ2xvc2VcIiwgZSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgc2VsZi5pc0Nsb3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmVxdWVzdEFGcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBzZWxmLnVwZGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBhbGwgZXZlbnRzXHJcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnN0YW5jZXMsIHRoZXkgd2lsbCBiZSBzZXQgYWdhaW4gYnkgXCJhY3RpdmF0ZVwiIG1ldGhvZFxyXG4gICAgICBzZWxmLnJlbW92ZUV2ZW50cygpO1xyXG5cclxuICAgICAgJGNvbnRlbnQgPSBjdXJyZW50LiRjb250ZW50O1xyXG4gICAgICBlZmZlY3QgPSBjdXJyZW50Lm9wdHMuYW5pbWF0aW9uRWZmZWN0O1xyXG4gICAgICBkdXJhdGlvbiA9ICQuaXNOdW1lcmljKGQpID8gZCA6IGVmZmVjdCA/IGN1cnJlbnQub3B0cy5hbmltYXRpb25EdXJhdGlvbiA6IDA7XHJcblxyXG4gICAgICBjdXJyZW50LiRzbGlkZS5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LXNsaWRlLS1jb21wbGV0ZSBmYW5jeWJveC1zbGlkZS0tbmV4dCBmYW5jeWJveC1zbGlkZS0tcHJldmlvdXMgZmFuY3lib3gtYW5pbWF0ZWRcIik7XHJcblxyXG4gICAgICBpZiAoZSAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICQuZmFuY3lib3guc3RvcChjdXJyZW50LiRzbGlkZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWZmZWN0ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBvdGhlciBzbGlkZXNcclxuICAgICAgY3VycmVudC4kc2xpZGVcclxuICAgICAgICAuc2libGluZ3MoKVxyXG4gICAgICAgIC50cmlnZ2VyKFwib25SZXNldFwiKVxyXG4gICAgICAgIC5yZW1vdmUoKTtcclxuXHJcbiAgICAgIC8vIFRyaWdnZXIgYW5pbWF0aW9uc1xyXG4gICAgICBpZiAoZHVyYXRpb24pIHtcclxuICAgICAgICBzZWxmLiRyZWZzLmNvbnRhaW5lclxyXG4gICAgICAgICAgLnJlbW92ZUNsYXNzKFwiZmFuY3lib3gtaXMtb3BlblwiKVxyXG4gICAgICAgICAgLmFkZENsYXNzKFwiZmFuY3lib3gtaXMtY2xvc2luZ1wiKVxyXG4gICAgICAgICAgLmNzcyhcInRyYW5zaXRpb24tZHVyYXRpb25cIiwgZHVyYXRpb24gKyBcIm1zXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDbGVhbiB1cFxyXG4gICAgICBzZWxmLmhpZGVMb2FkaW5nKGN1cnJlbnQpO1xyXG5cclxuICAgICAgc2VsZi5oaWRlQ29udHJvbHModHJ1ZSk7XHJcblxyXG4gICAgICBzZWxmLnVwZGF0ZUN1cnNvcigpO1xyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgcG9zc2libGUgdG8gem9vbS1vdXRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGVmZmVjdCA9PT0gXCJ6b29tXCIgJiZcclxuICAgICAgICAhKCRjb250ZW50ICYmIGR1cmF0aW9uICYmIGN1cnJlbnQudHlwZSA9PT0gXCJpbWFnZVwiICYmICFzZWxmLmlzTW92ZWQoKSAmJiAhY3VycmVudC5oYXNFcnJvciAmJiAoZW5kID0gc2VsZi5nZXRUaHVtYlBvcyhjdXJyZW50KSkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGVmZmVjdCA9IFwiZmFkZVwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWZmZWN0ID09PSBcInpvb21cIikge1xyXG4gICAgICAgICQuZmFuY3lib3guc3RvcCgkY29udGVudCk7XHJcblxyXG4gICAgICAgIGRvbVJlY3QgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZSgkY29udGVudCk7XHJcblxyXG4gICAgICAgIHN0YXJ0ID0ge1xyXG4gICAgICAgICAgdG9wOiBkb21SZWN0LnRvcCxcclxuICAgICAgICAgIGxlZnQ6IGRvbVJlY3QubGVmdCxcclxuICAgICAgICAgIHNjYWxlWDogZG9tUmVjdC53aWR0aCAvIGVuZC53aWR0aCxcclxuICAgICAgICAgIHNjYWxlWTogZG9tUmVjdC5oZWlnaHQgLyBlbmQuaGVpZ2h0LFxyXG4gICAgICAgICAgd2lkdGg6IGVuZC53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogZW5kLmhlaWdodFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gYW5pbWF0ZSBvcGFjaXR5XHJcbiAgICAgICAgb3BhY2l0eSA9IGN1cnJlbnQub3B0cy56b29tT3BhY2l0eTtcclxuXHJcbiAgICAgICAgaWYgKG9wYWNpdHkgPT0gXCJhdXRvXCIpIHtcclxuICAgICAgICAgIG9wYWNpdHkgPSBNYXRoLmFicyhjdXJyZW50LndpZHRoIC8gY3VycmVudC5oZWlnaHQgLSBlbmQud2lkdGggLyBlbmQuaGVpZ2h0KSA+IDAuMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGFjaXR5KSB7XHJcbiAgICAgICAgICBlbmQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkLmZhbmN5Ym94LnNldFRyYW5zbGF0ZSgkY29udGVudCwgc3RhcnQpO1xyXG5cclxuICAgICAgICBmb3JjZVJlZHJhdygkY29udGVudCk7XHJcblxyXG4gICAgICAgICQuZmFuY3lib3guYW5pbWF0ZSgkY29udGVudCwgZW5kLCBkdXJhdGlvbiwgZG9uZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWZmZWN0ICYmIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgJC5mYW5jeWJveC5hbmltYXRlKFxyXG4gICAgICAgICAgY3VycmVudC4kc2xpZGUuYWRkQ2xhc3MoXCJmYW5jeWJveC1zbGlkZS0tcHJldmlvdXNcIikucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1zbGlkZS0tY3VycmVudFwiKSxcclxuICAgICAgICAgIFwiZmFuY3lib3gtYW5pbWF0ZWQgZmFuY3lib3gtZngtXCIgKyBlZmZlY3QsXHJcbiAgICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICAgIGRvbmVcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIElmIHNraXAgYW5pbWF0aW9uXHJcbiAgICAgICAgaWYgKGUgPT09IHRydWUpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoZG9uZSwgZHVyYXRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRmluYWwgYWRqdXN0bWVudHMgYWZ0ZXIgcmVtb3ZpbmcgdGhlIGluc3RhbmNlXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBjbGVhblVwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgaW5zdGFuY2UsXHJcbiAgICAgICAgJGZvY3VzID0gc2VsZi5jdXJyZW50Lm9wdHMuJG9yaWcsXHJcbiAgICAgICAgeCxcclxuICAgICAgICB5O1xyXG5cclxuICAgICAgc2VsZi5jdXJyZW50LiRzbGlkZS50cmlnZ2VyKFwib25SZXNldFwiKTtcclxuXHJcbiAgICAgIHNlbGYuJHJlZnMuY29udGFpbmVyLmVtcHR5KCkucmVtb3ZlKCk7XHJcblxyXG4gICAgICBzZWxmLnRyaWdnZXIoXCJhZnRlckNsb3NlXCIsIGUpO1xyXG5cclxuICAgICAgLy8gUGxhY2UgYmFjayBmb2N1c1xyXG4gICAgICBpZiAoISFzZWxmLmN1cnJlbnQub3B0cy5iYWNrRm9jdXMpIHtcclxuICAgICAgICBpZiAoISRmb2N1cyB8fCAhJGZvY3VzLmxlbmd0aCB8fCAhJGZvY3VzLmlzKFwiOnZpc2libGVcIikpIHtcclxuICAgICAgICAgICRmb2N1cyA9IHNlbGYuJHRyaWdnZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJGZvY3VzICYmICRmb2N1cy5sZW5ndGgpIHtcclxuICAgICAgICAgIHggPSB3aW5kb3cuc2Nyb2xsWDtcclxuICAgICAgICAgIHkgPSB3aW5kb3cuc2Nyb2xsWTtcclxuXHJcbiAgICAgICAgICAkZm9jdXMudHJpZ2dlcihcImZvY3VzXCIpO1xyXG5cclxuICAgICAgICAgICQoXCJodG1sLCBib2R5XCIpXHJcbiAgICAgICAgICAgIC5zY3JvbGxUb3AoeSlcclxuICAgICAgICAgICAgLnNjcm9sbExlZnQoeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLmN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGluc3RhbmNlc1xyXG4gICAgICBpbnN0YW5jZSA9ICQuZmFuY3lib3guZ2V0SW5zdGFuY2UoKTtcclxuXHJcbiAgICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgIGluc3RhbmNlLmFjdGl2YXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1hY3RpdmUgY29tcGVuc2F0ZS1mb3Itc2Nyb2xsYmFyXCIpO1xyXG5cclxuICAgICAgICAkKFwiI2ZhbmN5Ym94LXN0eWxlLW5vc2Nyb2xsXCIpLnJlbW92ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIENhbGwgY2FsbGJhY2sgYW5kIHRyaWdnZXIgYW4gZXZlbnRcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICB0cmlnZ2VyOiBmdW5jdGlvbiAobmFtZSwgc2xpZGUpIHtcclxuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxyXG4gICAgICAgIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIG9iaiA9IHNsaWRlICYmIHNsaWRlLm9wdHMgPyBzbGlkZSA6IHNlbGYuY3VycmVudCxcclxuICAgICAgICByZXo7XHJcblxyXG4gICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KG9iaik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2JqID0gc2VsZjtcclxuICAgICAgfVxyXG5cclxuICAgICAgYXJncy51bnNoaWZ0KHNlbGYpO1xyXG5cclxuICAgICAgaWYgKCQuaXNGdW5jdGlvbihvYmoub3B0c1tuYW1lXSkpIHtcclxuICAgICAgICByZXogPSBvYmoub3B0c1tuYW1lXS5hcHBseShvYmosIGFyZ3MpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmV6ID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiByZXo7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuYW1lID09PSBcImFmdGVyQ2xvc2VcIiB8fCAhc2VsZi4kcmVmcykge1xyXG4gICAgICAgICRELnRyaWdnZXIobmFtZSArIFwiLmZiXCIsIGFyZ3MpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGYuJHJlZnMuY29udGFpbmVyLnRyaWdnZXIobmFtZSArIFwiLmZiXCIsIGFyZ3MpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSBpbmZvYmFyIHZhbHVlcywgbmF2aWdhdGlvbiBidXR0b24gc3RhdGVzIGFuZCByZXZlYWwgY2FwdGlvblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgdXBkYXRlQ29udHJvbHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnQsXHJcbiAgICAgICAgaW5kZXggPSBjdXJyZW50LmluZGV4LFxyXG4gICAgICAgICRjb250YWluZXIgPSBzZWxmLiRyZWZzLmNvbnRhaW5lcixcclxuICAgICAgICAkY2FwdGlvbiA9IHNlbGYuJHJlZnMuY2FwdGlvbixcclxuICAgICAgICBjYXB0aW9uID0gY3VycmVudC5vcHRzLmNhcHRpb247XHJcblxyXG4gICAgICAvLyBSZWNhbGN1bGF0ZSBjb250ZW50IGRpbWVuc2lvbnNcclxuICAgICAgY3VycmVudC4kc2xpZGUudHJpZ2dlcihcInJlZnJlc2hcIik7XHJcblxyXG4gICAgICAvLyBTZXQgY2FwdGlvblxyXG4gICAgICBpZiAoY2FwdGlvbiAmJiBjYXB0aW9uLmxlbmd0aCkge1xyXG4gICAgICAgIHNlbGYuJGNhcHRpb24gPSAkY2FwdGlvbjtcclxuXHJcbiAgICAgICAgJGNhcHRpb25cclxuICAgICAgICAgIC5jaGlsZHJlbigpXHJcbiAgICAgICAgICAuZXEoMClcclxuICAgICAgICAgIC5odG1sKGNhcHRpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGYuJGNhcHRpb24gPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXNlbGYuaGFzSGlkZGVuQ29udHJvbHMgJiYgIXNlbGYuaXNJZGxlKSB7XHJcbiAgICAgICAgc2VsZi5zaG93Q29udHJvbHMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIGluZm8gYW5kIG5hdmlnYXRpb24gZWxlbWVudHNcclxuICAgICAgJGNvbnRhaW5lci5maW5kKFwiW2RhdGEtZmFuY3lib3gtY291bnRdXCIpLmh0bWwoc2VsZi5ncm91cC5sZW5ndGgpO1xyXG4gICAgICAkY29udGFpbmVyLmZpbmQoXCJbZGF0YS1mYW5jeWJveC1pbmRleF1cIikuaHRtbChpbmRleCArIDEpO1xyXG5cclxuICAgICAgJGNvbnRhaW5lci5maW5kKFwiW2RhdGEtZmFuY3lib3gtcHJldl1cIikucHJvcChcImRpc2FibGVkXCIsICFjdXJyZW50Lm9wdHMubG9vcCAmJiBpbmRleCA8PSAwKTtcclxuICAgICAgJGNvbnRhaW5lci5maW5kKFwiW2RhdGEtZmFuY3lib3gtbmV4dF1cIikucHJvcChcImRpc2FibGVkXCIsICFjdXJyZW50Lm9wdHMubG9vcCAmJiBpbmRleCA+PSBzZWxmLmdyb3VwLmxlbmd0aCAtIDEpO1xyXG5cclxuICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gXCJpbWFnZVwiKSB7XHJcbiAgICAgICAgLy8gUmUtZW5hYmxlIGJ1dHRvbnM7IHVwZGF0ZSBkb3dubG9hZCBidXR0b24gc291cmNlXHJcbiAgICAgICAgJGNvbnRhaW5lclxyXG4gICAgICAgICAgLmZpbmQoXCJbZGF0YS1mYW5jeWJveC16b29tXVwiKVxyXG4gICAgICAgICAgLnNob3coKVxyXG4gICAgICAgICAgLmVuZCgpXHJcbiAgICAgICAgICAuZmluZChcIltkYXRhLWZhbmN5Ym94LWRvd25sb2FkXVwiKVxyXG4gICAgICAgICAgLmF0dHIoXCJocmVmXCIsIGN1cnJlbnQub3B0cy5pbWFnZS5zcmMgfHwgY3VycmVudC5zcmMpXHJcbiAgICAgICAgICAuc2hvdygpO1xyXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQub3B0cy50b29sYmFyKSB7XHJcbiAgICAgICAgJGNvbnRhaW5lci5maW5kKFwiW2RhdGEtZmFuY3lib3gtZG93bmxvYWRdLFtkYXRhLWZhbmN5Ym94LXpvb21dXCIpLmhpZGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTWFrZSBzdXJlIGZvY3VzIGlzIG5vdCBvbiBkaXNhYmxlZCBidXR0b24vZWxlbWVudFxyXG4gICAgICBpZiAoJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhcIjpoaWRkZW4sW2Rpc2FibGVkXVwiKSkge1xyXG4gICAgICAgIHNlbGYuJHJlZnMuY29udGFpbmVyLnRyaWdnZXIoXCJmb2N1c1wiKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBIaWRlIHRvb2xiYXIgYW5kIGNhcHRpb25cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIGhpZGVDb250cm9sczogZnVuY3Rpb24gKGFuZENhcHRpb24pIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGFyciA9IFtcImluZm9iYXJcIiwgXCJ0b29sYmFyXCIsIFwibmF2XCJdO1xyXG5cclxuICAgICAgaWYgKGFuZENhcHRpb24gfHwgIXNlbGYuY3VycmVudC5vcHRzLnByZXZlbnRDYXB0aW9uT3ZlcmxhcCkge1xyXG4gICAgICAgIGFyci5wdXNoKFwiY2FwdGlvblwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy4kcmVmcy5jb250YWluZXIucmVtb3ZlQ2xhc3MoXHJcbiAgICAgICAgYXJyXHJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoaSkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiZmFuY3lib3gtc2hvdy1cIiArIGk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuam9pbihcIiBcIilcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuaGFzSGlkZGVuQ29udHJvbHMgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93Q29udHJvbHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIG9wdHMgPSBzZWxmLmN1cnJlbnQgPyBzZWxmLmN1cnJlbnQub3B0cyA6IHNlbGYub3B0cyxcclxuICAgICAgICAkY29udGFpbmVyID0gc2VsZi4kcmVmcy5jb250YWluZXI7XHJcblxyXG4gICAgICBzZWxmLmhhc0hpZGRlbkNvbnRyb2xzID0gZmFsc2U7XHJcbiAgICAgIHNlbGYuaWRsZVNlY29uZHNDb3VudGVyID0gMDtcclxuXHJcbiAgICAgICRjb250YWluZXJcclxuICAgICAgICAudG9nZ2xlQ2xhc3MoXCJmYW5jeWJveC1zaG93LXRvb2xiYXJcIiwgISEob3B0cy50b29sYmFyICYmIG9wdHMuYnV0dG9ucykpXHJcbiAgICAgICAgLnRvZ2dsZUNsYXNzKFwiZmFuY3lib3gtc2hvdy1pbmZvYmFyXCIsICEhKG9wdHMuaW5mb2JhciAmJiBzZWxmLmdyb3VwLmxlbmd0aCA+IDEpKVxyXG4gICAgICAgIC50b2dnbGVDbGFzcyhcImZhbmN5Ym94LXNob3ctY2FwdGlvblwiLCAhIXNlbGYuJGNhcHRpb24pXHJcbiAgICAgICAgLnRvZ2dsZUNsYXNzKFwiZmFuY3lib3gtc2hvdy1uYXZcIiwgISEob3B0cy5hcnJvd3MgJiYgc2VsZi5ncm91cC5sZW5ndGggPiAxKSlcclxuICAgICAgICAudG9nZ2xlQ2xhc3MoXCJmYW5jeWJveC1pcy1tb2RhbFwiLCAhIW9wdHMubW9kYWwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUb2dnbGUgdG9vbGJhciBhbmQgY2FwdGlvblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICB0b2dnbGVDb250cm9sczogZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAodGhpcy5oYXNIaWRkZW5Db250cm9scykge1xyXG4gICAgICAgIHRoaXMuc2hvd0NvbnRyb2xzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oaWRlQ29udHJvbHMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAkLmZhbmN5Ym94ID0ge1xyXG4gICAgdmVyc2lvbjogXCIzLjUuN1wiLFxyXG4gICAgZGVmYXVsdHM6IGRlZmF1bHRzLFxyXG5cclxuICAgIC8vIEdldCBjdXJyZW50IGluc3RhbmNlIGFuZCBleGVjdXRlIGEgY29tbWFuZC5cclxuICAgIC8vXHJcbiAgICAvLyBFeGFtcGxlcyBvZiB1c2FnZTpcclxuICAgIC8vXHJcbiAgICAvLyAgICRpbnN0YW5jZSA9ICQuZmFuY3lib3guZ2V0SW5zdGFuY2UoKTtcclxuICAgIC8vICAgJC5mYW5jeWJveC5nZXRJbnN0YW5jZSgpLmp1bXBUbyggMSApO1xyXG4gICAgLy8gICAkLmZhbmN5Ym94LmdldEluc3RhbmNlKCAnanVtcFRvJywgMSApO1xyXG4gICAgLy8gICAkLmZhbmN5Ym94LmdldEluc3RhbmNlKCBmdW5jdGlvbigpIHtcclxuICAgIC8vICAgICAgIGNvbnNvbGUuaW5mbyggdGhpcy5jdXJySW5kZXggKTtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKGNvbW1hbmQpIHtcclxuICAgICAgdmFyIGluc3RhbmNlID0gJCgnLmZhbmN5Ym94LWNvbnRhaW5lcjpub3QoXCIuZmFuY3lib3gtaXMtY2xvc2luZ1wiKTpsYXN0JykuZGF0YShcIkZhbmN5Qm94XCIpLFxyXG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xyXG5cclxuICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgRmFuY3lCb3gpIHtcclxuICAgICAgICBpZiAoJC50eXBlKGNvbW1hbmQpID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICBpbnN0YW5jZVtjb21tYW5kXS5hcHBseShpbnN0YW5jZSwgYXJncyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgkLnR5cGUoY29tbWFuZCkgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgY29tbWFuZC5hcHBseShpbnN0YW5jZSwgYXJncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQ3JlYXRlIG5ldyBpbnN0YW5jZVxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIG9wZW46IGZ1bmN0aW9uIChpdGVtcywgb3B0cywgaW5kZXgpIHtcclxuICAgICAgcmV0dXJuIG5ldyBGYW5jeUJveChpdGVtcywgb3B0cywgaW5kZXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDbG9zZSBjdXJyZW50IG9yIGFsbCBpbnN0YW5jZXNcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIGNsb3NlOiBmdW5jdGlvbiAoYWxsKSB7XHJcbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2UoKTtcclxuXHJcbiAgICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgIGluc3RhbmNlLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGFuZCBjbG9zZSBuZXh0IGluc3RhbmNlXHJcbiAgICAgICAgaWYgKGFsbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5jbG9zZShhbGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBDbG9zZSBhbGwgaW5zdGFuY2VzIGFuZCB1bmJpbmQgYWxsIGV2ZW50c1xyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMuY2xvc2UodHJ1ZSk7XHJcblxyXG4gICAgICAkRC5hZGQoXCJib2R5XCIpLm9mZihcImNsaWNrLmZiLXN0YXJ0XCIsIFwiKipcIik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFRyeSB0byBkZXRlY3QgbW9iaWxlIGRldmljZXNcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBpc01vYmlsZTogL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFxyXG5cclxuICAgIC8vIERldGVjdCBpZiAndHJhbnNsYXRlM2QnIHN1cHBvcnQgaXMgYXZhaWxhYmxlXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHVzZTNkOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUgJiZcclxuICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkaXYpICYmXHJcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGl2KS5nZXRQcm9wZXJ0eVZhbHVlKFwidHJhbnNmb3JtXCIpICYmXHJcbiAgICAgICAgIShkb2N1bWVudC5kb2N1bWVudE1vZGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgMTEpXHJcbiAgICAgICk7XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgY3VycmVudCB2aXN1YWwgc3RhdGUgb2YgYW4gZWxlbWVudFxyXG4gICAgLy8gcmV0dXJucyBhcnJheVsgdG9wLCBsZWZ0LCBob3Jpem9udGFsLXNjYWxlLCB2ZXJ0aWNhbC1zY2FsZSwgb3BhY2l0eSBdXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBnZXRUcmFuc2xhdGU6IGZ1bmN0aW9uICgkZWwpIHtcclxuICAgICAgdmFyIGRvbVJlY3Q7XHJcblxyXG4gICAgICBpZiAoISRlbCB8fCAhJGVsLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9tUmVjdCA9ICRlbFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdG9wOiBkb21SZWN0LnRvcCB8fCAwLFxyXG4gICAgICAgIGxlZnQ6IGRvbVJlY3QubGVmdCB8fCAwLFxyXG4gICAgICAgIHdpZHRoOiBkb21SZWN0LndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogZG9tUmVjdC5oZWlnaHQsXHJcbiAgICAgICAgb3BhY2l0eTogcGFyc2VGbG9hdCgkZWwuY3NzKFwib3BhY2l0eVwiKSlcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gU2hvcnRjdXQgZm9yIHNldHRpbmcgXCJ0cmFuc2xhdGUzZFwiIHByb3BlcnRpZXMgZm9yIGVsZW1lbnRcclxuICAgIC8vIENhbiBzZXQgYmUgdXNlZCB0byBzZXQgb3BhY2l0eSwgdG9vXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gKCRlbCwgcHJvcHMpIHtcclxuICAgICAgdmFyIHN0ciA9IFwiXCIsXHJcbiAgICAgICAgY3NzID0ge307XHJcblxyXG4gICAgICBpZiAoISRlbCB8fCAhcHJvcHMpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwcm9wcy5sZWZ0ICE9PSB1bmRlZmluZWQgfHwgcHJvcHMudG9wICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBzdHIgPVxyXG4gICAgICAgICAgKHByb3BzLmxlZnQgPT09IHVuZGVmaW5lZCA/ICRlbC5wb3NpdGlvbigpLmxlZnQgOiBwcm9wcy5sZWZ0KSArXHJcbiAgICAgICAgICBcInB4LCBcIiArXHJcbiAgICAgICAgICAocHJvcHMudG9wID09PSB1bmRlZmluZWQgPyAkZWwucG9zaXRpb24oKS50b3AgOiBwcm9wcy50b3ApICtcclxuICAgICAgICAgIFwicHhcIjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlM2QpIHtcclxuICAgICAgICAgIHN0ciA9IFwidHJhbnNsYXRlM2QoXCIgKyBzdHIgKyBcIiwgMHB4KVwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSBcInRyYW5zbGF0ZShcIiArIHN0ciArIFwiKVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByb3BzLnNjYWxlWCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnNjYWxlWSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3RyICs9IFwiIHNjYWxlKFwiICsgcHJvcHMuc2NhbGVYICsgXCIsIFwiICsgcHJvcHMuc2NhbGVZICsgXCIpXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcHMuc2NhbGVYICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBzdHIgKz0gXCIgc2NhbGVYKFwiICsgcHJvcHMuc2NhbGVYICsgXCIpXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgY3NzLnRyYW5zZm9ybSA9IHN0cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByb3BzLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNzcy5vcGFjaXR5ID0gcHJvcHMub3BhY2l0eTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByb3BzLndpZHRoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjc3Mud2lkdGggPSBwcm9wcy53aWR0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByb3BzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY3NzLmhlaWdodCA9IHByb3BzLmhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICRlbC5jc3MoY3NzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gU2ltcGxlIENTUyB0cmFuc2l0aW9uIGhhbmRsZXJcclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24gKCRlbCwgdG8sIGR1cmF0aW9uLCBjYWxsYmFjaywgbGVhdmVBbmltYXRpb25OYW1lKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBmcm9tO1xyXG5cclxuICAgICAgaWYgKCQuaXNGdW5jdGlvbihkdXJhdGlvbikpIHtcclxuICAgICAgICBjYWxsYmFjayA9IGR1cmF0aW9uO1xyXG4gICAgICAgIGR1cmF0aW9uID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2VsZi5zdG9wKCRlbCk7XHJcblxyXG4gICAgICBmcm9tID0gc2VsZi5nZXRUcmFuc2xhdGUoJGVsKTtcclxuXHJcbiAgICAgICRlbC5vbih0cmFuc2l0aW9uRW5kLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIC8vIFNraXAgZXZlbnRzIGZyb20gY2hpbGQgZWxlbWVudHMgYW5kIHotaW5kZXggY2hhbmdlXHJcbiAgICAgICAgaWYgKGUgJiYgZS5vcmlnaW5hbEV2ZW50ICYmICghJGVsLmlzKGUub3JpZ2luYWxFdmVudC50YXJnZXQpIHx8IGUub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUgPT0gXCJ6LWluZGV4XCIpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLnN0b3AoJGVsKTtcclxuXHJcbiAgICAgICAgaWYgKCQuaXNOdW1lcmljKGR1cmF0aW9uKSkge1xyXG4gICAgICAgICAgJGVsLmNzcyhcInRyYW5zaXRpb24tZHVyYXRpb25cIiwgXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJC5pc1BsYWluT2JqZWN0KHRvKSkge1xyXG4gICAgICAgICAgaWYgKHRvLnNjYWxlWCAhPT0gdW5kZWZpbmVkICYmIHRvLnNjYWxlWSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0VHJhbnNsYXRlKCRlbCwge1xyXG4gICAgICAgICAgICAgIHRvcDogdG8udG9wLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IHRvLmxlZnQsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IGZyb20ud2lkdGggKiB0by5zY2FsZVgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBmcm9tLmhlaWdodCAqIHRvLnNjYWxlWSxcclxuICAgICAgICAgICAgICBzY2FsZVg6IDEsXHJcbiAgICAgICAgICAgICAgc2NhbGVZOiAxXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobGVhdmVBbmltYXRpb25OYW1lICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICAkZWwucmVtb3ZlQ2xhc3ModG8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcclxuICAgICAgICAgIGNhbGxiYWNrKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoJC5pc051bWVyaWMoZHVyYXRpb24pKSB7XHJcbiAgICAgICAgJGVsLmNzcyhcInRyYW5zaXRpb24tZHVyYXRpb25cIiwgZHVyYXRpb24gKyBcIm1zXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTdGFydCBhbmltYXRpb24gYnkgY2hhbmdpbmcgQ1NTIHByb3BlcnRpZXMgb3IgY2xhc3MgbmFtZVxyXG4gICAgICBpZiAoJC5pc1BsYWluT2JqZWN0KHRvKSkge1xyXG4gICAgICAgIGlmICh0by5zY2FsZVggIT09IHVuZGVmaW5lZCAmJiB0by5zY2FsZVkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZGVsZXRlIHRvLndpZHRoO1xyXG4gICAgICAgICAgZGVsZXRlIHRvLmhlaWdodDtcclxuXHJcbiAgICAgICAgICBpZiAoJGVsLnBhcmVudCgpLmhhc0NsYXNzKFwiZmFuY3lib3gtc2xpZGUtLWltYWdlXCIpKSB7XHJcbiAgICAgICAgICAgICRlbC5wYXJlbnQoKS5hZGRDbGFzcyhcImZhbmN5Ym94LWlzLXNjYWxpbmdcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkLmZhbmN5Ym94LnNldFRyYW5zbGF0ZSgkZWwsIHRvKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZWwuYWRkQ2xhc3ModG8pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCBgdHJhbnNpdGlvbmVuZGAgY2FsbGJhY2sgZ2V0cyBmaXJlZFxyXG4gICAgICAkZWwuZGF0YShcclxuICAgICAgICBcInRpbWVyXCIsXHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAkZWwudHJpZ2dlcih0cmFuc2l0aW9uRW5kKTtcclxuICAgICAgICB9LCBkdXJhdGlvbiArIDMzKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdG9wOiBmdW5jdGlvbiAoJGVsLCBjYWxsQ2FsbGJhY2spIHtcclxuICAgICAgaWYgKCRlbCAmJiAkZWwubGVuZ3RoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KCRlbC5kYXRhKFwidGltZXJcIikpO1xyXG5cclxuICAgICAgICBpZiAoY2FsbENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAkZWwudHJpZ2dlcih0cmFuc2l0aW9uRW5kKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRlbC5vZmYodHJhbnNpdGlvbkVuZCkuY3NzKFwidHJhbnNpdGlvbi1kdXJhdGlvblwiLCBcIlwiKTtcclxuXHJcbiAgICAgICAgJGVsLnBhcmVudCgpLnJlbW92ZUNsYXNzKFwiZmFuY3lib3gtaXMtc2NhbGluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vIERlZmF1bHQgY2xpY2sgaGFuZGxlciBmb3IgXCJmYW5jeWJveGVkXCIgbGlua3NcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiBfcnVuKGUsIG9wdHMpIHtcclxuICAgIHZhciBpdGVtcyA9IFtdLFxyXG4gICAgICBpbmRleCA9IDAsXHJcbiAgICAgICR0YXJnZXQsXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICBpbnN0YW5jZTtcclxuXHJcbiAgICAvLyBBdm9pZCBvcGVuaW5nIG11bHRpcGxlIHRpbWVzXHJcbiAgICBpZiAoZSAmJiBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgaWYgKGUgJiYgZS5kYXRhKSB7XHJcbiAgICAgIG9wdHMgPSBtZXJnZU9wdHMoZS5kYXRhLm9wdGlvbnMsIG9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgICR0YXJnZXQgPSBvcHRzLiR0YXJnZXQgfHwgJChlLmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIoXCJibHVyXCIpO1xyXG4gICAgaW5zdGFuY2UgPSAkLmZhbmN5Ym94LmdldEluc3RhbmNlKCk7XHJcblxyXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLiR0cmlnZ2VyICYmIGluc3RhbmNlLiR0cmlnZ2VyLmlzKCR0YXJnZXQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0cy5zZWxlY3Rvcikge1xyXG4gICAgICBpdGVtcyA9ICQob3B0cy5zZWxlY3Rvcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBHZXQgYWxsIHJlbGF0ZWQgaXRlbXMgYW5kIGZpbmQgaW5kZXggZm9yIGNsaWNrZWQgb25lXHJcbiAgICAgIHZhbHVlID0gJHRhcmdldC5hdHRyKFwiZGF0YS1mYW5jeWJveFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgaXRlbXMgPSBlLmRhdGEgPyBlLmRhdGEuaXRlbXMgOiBbXTtcclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmxlbmd0aCA/IGl0ZW1zLmZpbHRlcignW2RhdGEtZmFuY3lib3g9XCInICsgdmFsdWUgKyAnXCJdJykgOiAkKCdbZGF0YS1mYW5jeWJveD1cIicgKyB2YWx1ZSArICdcIl0nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpdGVtcyA9IFskdGFyZ2V0XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluZGV4ID0gJChpdGVtcykuaW5kZXgoJHRhcmdldCk7XHJcblxyXG4gICAgLy8gU29tZXRpbWVzIGN1cnJlbnQgaXRlbSBjYW4gbm90IGJlIGZvdW5kXHJcbiAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgIGluZGV4ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW5jZSA9ICQuZmFuY3lib3gub3BlbihpdGVtcywgb3B0cywgaW5kZXgpO1xyXG5cclxuICAgIC8vIFNhdmUgbGFzdCBhY3RpdmUgZWxlbWVudFxyXG4gICAgaW5zdGFuY2UuJHRyaWdnZXIgPSAkdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgLy8gQ3JlYXRlIGEgalF1ZXJ5IHBsdWdpblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgJC5mbi5mYW5jeWJveCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgc2VsZWN0b3I7XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBzZWxlY3RvciA9IG9wdGlvbnMuc2VsZWN0b3IgfHwgZmFsc2U7XHJcblxyXG4gICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgIC8vIFVzZSBib2R5IGVsZW1lbnQgaW5zdGVhZCBvZiBkb2N1bWVudCBzbyBpdCBleGVjdXRlcyBmaXJzdFxyXG4gICAgICAkKFwiYm9keVwiKVxyXG4gICAgICAgIC5vZmYoXCJjbGljay5mYi1zdGFydFwiLCBzZWxlY3RvcilcclxuICAgICAgICAub24oXCJjbGljay5mYi1zdGFydFwiLCBzZWxlY3Rvciwge1xyXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xyXG4gICAgICAgIH0sIF9ydW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vZmYoXCJjbGljay5mYi1zdGFydFwiKS5vbihcclxuICAgICAgICBcImNsaWNrLmZiLXN0YXJ0XCIsIHtcclxuICAgICAgICAgIGl0ZW1zOiB0aGlzLFxyXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX3J1blxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8vIFNlbGYgaW5pdGlhbGl6aW5nIHBsdWdpbiBmb3IgYWxsIGVsZW1lbnRzIGhhdmluZyBgZGF0YS1mYW5jeWJveGAgYXR0cmlidXRlXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgJEQub24oXCJjbGljay5mYi1zdGFydFwiLCBcIltkYXRhLWZhbmN5Ym94XVwiLCBfcnVuKTtcclxuXHJcbiAgLy8gRW5hYmxlIFwidHJpZ2dlciBlbGVtZW50c1wiXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAkRC5vbihcImNsaWNrLmZiLXN0YXJ0XCIsIFwiW2RhdGEtZmFuY3lib3gtdHJpZ2dlcl1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICQoJ1tkYXRhLWZhbmN5Ym94PVwiJyArICQodGhpcykuYXR0cihcImRhdGEtZmFuY3lib3gtdHJpZ2dlclwiKSArICdcIl0nKVxyXG4gICAgICAuZXEoJCh0aGlzKS5hdHRyKFwiZGF0YS1mYW5jeWJveC1pbmRleFwiKSB8fCAwKVxyXG4gICAgICAudHJpZ2dlcihcImNsaWNrLmZiLXN0YXJ0XCIsIHtcclxuICAgICAgICAkdHJpZ2dlcjogJCh0aGlzKVxyXG4gICAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgLy8gVHJhY2sgZm9jdXMgZXZlbnQgZm9yIGJldHRlciBhY2Nlc3NpYmlsaXR5IHN0eWxpbmdcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYnV0dG9uU3RyID0gXCIuZmFuY3lib3gtYnV0dG9uXCIsXHJcbiAgICAgIGZvY3VzU3RyID0gXCJmYW5jeWJveC1mb2N1c1wiLFxyXG4gICAgICAkcHJlc3NlZCA9IG51bGw7XHJcblxyXG4gICAgJEQub24oXCJtb3VzZWRvd24gbW91c2V1cCBmb2N1cyBibHVyXCIsIGJ1dHRvblN0ciwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgc3dpdGNoIChlLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XHJcbiAgICAgICAgICAkcHJlc3NlZCA9ICQodGhpcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxyXG4gICAgICAgICAgJHByZXNzZWQgPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcclxuICAgICAgICAgICQoYnV0dG9uU3RyKS5yZW1vdmVDbGFzcyhmb2N1c1N0cik7XHJcblxyXG4gICAgICAgICAgaWYgKCEkKHRoaXMpLmlzKCRwcmVzc2VkKSAmJiAhJCh0aGlzKS5pcyhcIltkaXNhYmxlZF1cIikpIHtcclxuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhmb2N1c1N0cik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcclxuICAgICAgICAgICQoYnV0dG9uU3RyKS5yZW1vdmVDbGFzcyhmb2N1c1N0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSkoKTtcclxufSkod2luZG93LCBkb2N1bWVudCwgalF1ZXJ5KTtcclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy9cclxuLy8gTWVkaWFcclxuLy8gQWRkcyBhZGRpdGlvbmFsIG1lZGlhIHR5cGUgc3VwcG9ydFxyXG4vL1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4oZnVuY3Rpb24gKCQpIHtcclxuICBcInVzZSBzdHJpY3RcIjtcclxuXHJcbiAgLy8gT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBmb3IgZWFjaCBtZWRpYSB0eXBlXHJcbiAgdmFyIGRlZmF1bHRzID0ge1xyXG4gICAgeW91dHViZToge1xyXG4gICAgICBtYXRjaGVyOiAvKHlvdXR1YmVcXC5jb218eW91dHVcXC5iZXx5b3V0dWJlXFwtbm9jb29raWVcXC5jb20pXFwvKHdhdGNoXFw/KC4qJik/dj18dlxcL3x1XFwvfGVtYmVkXFwvPyk/KHZpZGVvc2VyaWVzXFw/bGlzdD0oLiopfFtcXHctXXsxMX18XFw/bGlzdFR5cGU9KC4qKSZsaXN0PSguKikpKC4qKS9pLFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBhdXRvcGxheTogMSxcclxuICAgICAgICBhdXRvaGlkZTogMSxcclxuICAgICAgICBmczogMSxcclxuICAgICAgICByZWw6IDAsXHJcbiAgICAgICAgaGQ6IDEsXHJcbiAgICAgICAgd21vZGU6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgICBlbmFibGVqc2FwaTogMSxcclxuICAgICAgICBodG1sNTogMVxyXG4gICAgICB9LFxyXG4gICAgICBwYXJhbVBsYWNlOiA4LFxyXG4gICAgICB0eXBlOiBcImlmcmFtZVwiLFxyXG4gICAgICB1cmw6IFwiaHR0cHM6Ly93d3cueW91dHViZS1ub2Nvb2tpZS5jb20vZW1iZWQvJDRcIixcclxuICAgICAgdGh1bWI6IFwiaHR0cHM6Ly9pbWcueW91dHViZS5jb20vdmkvJDQvaHFkZWZhdWx0LmpwZ1wiXHJcbiAgICB9LFxyXG5cclxuICAgIHZpbWVvOiB7XHJcbiAgICAgIG1hdGNoZXI6IC9eLit2aW1lby5jb21cXC8oLipcXC8pPyhbXFxkXSspKC4qKT8vLFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBhdXRvcGxheTogMSxcclxuICAgICAgICBoZDogMSxcclxuICAgICAgICBzaG93X3RpdGxlOiAxLFxyXG4gICAgICAgIHNob3dfYnlsaW5lOiAxLFxyXG4gICAgICAgIHNob3dfcG9ydHJhaXQ6IDAsXHJcbiAgICAgICAgZnVsbHNjcmVlbjogMVxyXG4gICAgICB9LFxyXG4gICAgICBwYXJhbVBsYWNlOiAzLFxyXG4gICAgICB0eXBlOiBcImlmcmFtZVwiLFxyXG4gICAgICB1cmw6IFwiLy9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLyQyXCJcclxuICAgIH0sXHJcblxyXG4gICAgaW5zdGFncmFtOiB7XHJcbiAgICAgIG1hdGNoZXI6IC8oaW5zdGFnclxcLmFtfGluc3RhZ3JhbVxcLmNvbSlcXC9wXFwvKFthLXpBLVowLTlfXFwtXSspXFwvPy9pLFxyXG4gICAgICB0eXBlOiBcImltYWdlXCIsXHJcbiAgICAgIHVybDogXCIvLyQxL3AvJDIvbWVkaWEvP3NpemU9bFwiXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEV4YW1wbGVzOlxyXG4gICAgLy8gaHR0cDovL21hcHMuZ29vZ2xlLmNvbS8/bGw9NDguODU3OTk1LDIuMjk0Mjk3JnNwbj0wLjAwNzY2NiwwLjAyMTEzNiZ0PW0mej0xNlxyXG4gICAgLy8gaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL0AzNy43ODUyMDA2LC0xMjIuNDE0NjM1NSwxNC42NXpcclxuICAgIC8vIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9ANTIuMjExMTEyMywyLjkyMzc1NDIsNi42MXo/aGw9ZW5cclxuICAgIC8vIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9wbGFjZS9Hb29nbGVwbGV4L0AzNy40MjIwMDQxLC0xMjIuMDgzMzQ5NCwxN3ovZGF0YT0hNG01ITNtNCExczB4MDoweDZjMjk2YzY2NjE5MzY3ZTAhOG0yITNkMzcuNDIxOTk5OCE0ZC0xMjIuMDg0MDU3MlxyXG4gICAgZ21hcF9wbGFjZToge1xyXG4gICAgICBtYXRjaGVyOiAvKG1hcHNcXC4pP2dvb2dsZVxcLihbYS16XXsyLDN9KFxcLlthLXpdezJ9KT8pXFwvKCgobWFwc1xcLyhwbGFjZVxcLyguKilcXC8pP1xcQCguKiksKFxcZCsuP1xcZCs/KXopKXwoXFw/bGw9KSkoLiopPy9pLFxyXG4gICAgICB0eXBlOiBcImlmcmFtZVwiLFxyXG4gICAgICB1cmw6IGZ1bmN0aW9uIChyZXopIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgXCIvL21hcHMuZ29vZ2xlLlwiICtcclxuICAgICAgICAgIHJlelsyXSArXHJcbiAgICAgICAgICBcIi8/bGw9XCIgK1xyXG4gICAgICAgICAgKHJlels5XSA/IHJlels5XSArIFwiJno9XCIgKyBNYXRoLmZsb29yKHJlelsxMF0pICsgKHJlelsxMl0gPyByZXpbMTJdLnJlcGxhY2UoL15cXC8vLCBcIiZcIikgOiBcIlwiKSA6IHJlelsxMl0gKyBcIlwiKS5yZXBsYWNlKC9cXD8vLCBcIiZcIikgK1xyXG4gICAgICAgICAgXCImb3V0cHV0PVwiICtcclxuICAgICAgICAgIChyZXpbMTJdICYmIHJlelsxMl0uaW5kZXhPZihcImxheWVyPWNcIikgPiAwID8gXCJzdmVtYmVkXCIgOiBcImVtYmVkXCIpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBFeGFtcGxlczpcclxuICAgIC8vIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9zZWFyY2gvRW1waXJlK1N0YXRlK0J1aWxkaW5nL1xyXG4gICAgLy8gaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3NlYXJjaC8/YXBpPTEmcXVlcnk9Y2VudHVyeWxpbmsrZmllbGRcclxuICAgIC8vIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9zZWFyY2gvP2FwaT0xJnF1ZXJ5PTQ3LjU5NTE1MTgsLTEyMi4zMzE2MzkzXHJcbiAgICBnbWFwX3NlYXJjaDoge1xyXG4gICAgICBtYXRjaGVyOiAvKG1hcHNcXC4pP2dvb2dsZVxcLihbYS16XXsyLDN9KFxcLlthLXpdezJ9KT8pXFwvKG1hcHNcXC9zZWFyY2hcXC8pKC4qKS9pLFxyXG4gICAgICB0eXBlOiBcImlmcmFtZVwiLFxyXG4gICAgICB1cmw6IGZ1bmN0aW9uIChyZXopIHtcclxuICAgICAgICByZXR1cm4gXCIvL21hcHMuZ29vZ2xlLlwiICsgcmV6WzJdICsgXCIvbWFwcz9xPVwiICsgcmV6WzVdLnJlcGxhY2UoXCJxdWVyeT1cIiwgXCJxPVwiKS5yZXBsYWNlKFwiYXBpPTFcIiwgXCJcIikgKyBcIiZvdXRwdXQ9ZW1iZWRcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vIEZvcm1hdHMgbWF0Y2hpbmcgdXJsIHRvIGZpbmFsIGZvcm1cclxuICB2YXIgZm9ybWF0ID0gZnVuY3Rpb24gKHVybCwgcmV6LCBwYXJhbXMpIHtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwgXCJcIjtcclxuXHJcbiAgICBpZiAoJC50eXBlKHBhcmFtcykgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgcGFyYW1zID0gJC5wYXJhbShwYXJhbXMsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgICQuZWFjaChyZXosIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKFwiJFwiICsga2V5LCB2YWx1ZSB8fCBcIlwiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgIHVybCArPSAodXJsLmluZGV4T2YoXCI/XCIpID4gMCA/IFwiJlwiIDogXCI/XCIpICsgcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1cmw7XHJcbiAgfTtcclxuXHJcbiAgJChkb2N1bWVudCkub24oXCJvYmplY3ROZWVkc1R5cGUuZmJcIiwgZnVuY3Rpb24gKGUsIGluc3RhbmNlLCBpdGVtKSB7XHJcbiAgICB2YXIgdXJsID0gaXRlbS5zcmMgfHwgXCJcIixcclxuICAgICAgdHlwZSA9IGZhbHNlLFxyXG4gICAgICBtZWRpYSxcclxuICAgICAgdGh1bWIsXHJcbiAgICAgIHJleixcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICB1cmxQYXJhbXMsXHJcbiAgICAgIHBhcmFtT2JqLFxyXG4gICAgICBwcm92aWRlcjtcclxuXHJcbiAgICBtZWRpYSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0cywgaXRlbS5vcHRzLm1lZGlhKTtcclxuXHJcbiAgICAvLyBMb29rIGZvciBhbnkgbWF0Y2hpbmcgbWVkaWEgdHlwZVxyXG4gICAgJC5lYWNoKG1lZGlhLCBmdW5jdGlvbiAocHJvdmlkZXJOYW1lLCBwcm92aWRlck9wdHMpIHtcclxuICAgICAgcmV6ID0gdXJsLm1hdGNoKHByb3ZpZGVyT3B0cy5tYXRjaGVyKTtcclxuXHJcbiAgICAgIGlmICghcmV6KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0eXBlID0gcHJvdmlkZXJPcHRzLnR5cGU7XHJcbiAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXJOYW1lO1xyXG4gICAgICBwYXJhbU9iaiA9IHt9O1xyXG5cclxuICAgICAgaWYgKHByb3ZpZGVyT3B0cy5wYXJhbVBsYWNlICYmIHJleltwcm92aWRlck9wdHMucGFyYW1QbGFjZV0pIHtcclxuICAgICAgICB1cmxQYXJhbXMgPSByZXpbcHJvdmlkZXJPcHRzLnBhcmFtUGxhY2VdO1xyXG5cclxuICAgICAgICBpZiAodXJsUGFyYW1zWzBdID09IFwiP1wiKSB7XHJcbiAgICAgICAgICB1cmxQYXJhbXMgPSB1cmxQYXJhbXMuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXJsUGFyYW1zID0gdXJsUGFyYW1zLnNwbGl0KFwiJlwiKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCB1cmxQYXJhbXMubGVuZ3RoOyArK20pIHtcclxuICAgICAgICAgIHZhciBwID0gdXJsUGFyYW1zW21dLnNwbGl0KFwiPVwiLCAyKTtcclxuXHJcbiAgICAgICAgICBpZiAocC5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICBwYXJhbU9ialtwWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChwWzFdLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyYW1zID0gJC5leHRlbmQodHJ1ZSwge30sIHByb3ZpZGVyT3B0cy5wYXJhbXMsIGl0ZW0ub3B0c1twcm92aWRlck5hbWVdLCBwYXJhbU9iaik7XHJcblxyXG4gICAgICB1cmwgPVxyXG4gICAgICAgICQudHlwZShwcm92aWRlck9wdHMudXJsKSA9PT0gXCJmdW5jdGlvblwiID8gcHJvdmlkZXJPcHRzLnVybC5jYWxsKHRoaXMsIHJleiwgcGFyYW1zLCBpdGVtKSA6IGZvcm1hdChwcm92aWRlck9wdHMudXJsLCByZXosIHBhcmFtcyk7XHJcblxyXG4gICAgICB0aHVtYiA9XHJcbiAgICAgICAgJC50eXBlKHByb3ZpZGVyT3B0cy50aHVtYikgPT09IFwiZnVuY3Rpb25cIiA/IHByb3ZpZGVyT3B0cy50aHVtYi5jYWxsKHRoaXMsIHJleiwgcGFyYW1zLCBpdGVtKSA6IGZvcm1hdChwcm92aWRlck9wdHMudGh1bWIsIHJleik7XHJcblxyXG4gICAgICBpZiAocHJvdmlkZXJOYW1lID09PSBcInlvdXR1YmVcIikge1xyXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC8mdD0oKFxcZCspbSk/KFxcZCspcy8sIGZ1bmN0aW9uIChtYXRjaCwgcDEsIG0sIHMpIHtcclxuICAgICAgICAgIHJldHVybiBcIiZzdGFydD1cIiArICgobSA/IHBhcnNlSW50KG0sIDEwKSAqIDYwIDogMCkgKyBwYXJzZUludChzLCAxMCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3ZpZGVyTmFtZSA9PT0gXCJ2aW1lb1wiKSB7XHJcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXCImJTIzXCIsIFwiI1wiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSWYgaXQgaXMgZm91bmQsIHRoZW4gY2hhbmdlIGNvbnRlbnQgdHlwZSBhbmQgdXBkYXRlIHRoZSB1cmxcclxuXHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICBpZiAoIWl0ZW0ub3B0cy50aHVtYiAmJiAhKGl0ZW0ub3B0cy4kdGh1bWIgJiYgaXRlbS5vcHRzLiR0aHVtYi5sZW5ndGgpKSB7XHJcbiAgICAgICAgaXRlbS5vcHRzLnRodW1iID0gdGh1bWI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlID09PSBcImlmcmFtZVwiKSB7XHJcbiAgICAgICAgaXRlbS5vcHRzID0gJC5leHRlbmQodHJ1ZSwgaXRlbS5vcHRzLCB7XHJcbiAgICAgICAgICBpZnJhbWU6IHtcclxuICAgICAgICAgICAgcHJlbG9hZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGF0dHI6IHtcclxuICAgICAgICAgICAgICBzY3JvbGxpbmc6IFwibm9cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICQuZXh0ZW5kKGl0ZW0sIHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHNyYzogdXJsLFxyXG4gICAgICAgIG9yaWdTcmM6IGl0ZW0uc3JjLFxyXG4gICAgICAgIGNvbnRlbnRTb3VyY2U6IHByb3ZpZGVyLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiB0eXBlID09PSBcImltYWdlXCIgPyBcImltYWdlXCIgOiBwcm92aWRlciA9PSBcImdtYXBfcGxhY2VcIiB8fCBwcm92aWRlciA9PSBcImdtYXBfc2VhcmNoXCIgPyBcIm1hcFwiIDogXCJ2aWRlb1wiXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh1cmwpIHtcclxuICAgICAgaXRlbS50eXBlID0gaXRlbS5vcHRzLmRlZmF1bHRUeXBlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBMb2FkIFlvdVR1YmUvVmlkZW8gQVBJIG9uIHJlcXVlc3QgdG8gZGV0ZWN0IHdoZW4gdmlkZW8gZmluaXNoZWQgcGxheWluZ1xyXG4gIHZhciBWaWRlb0FQSUxvYWRlciA9IHtcclxuICAgIHlvdXR1YmU6IHtcclxuICAgICAgc3JjOiBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGlcIixcclxuICAgICAgY2xhc3M6IFwiWVRcIixcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgIGxvYWRlZDogZmFsc2VcclxuICAgIH0sXHJcblxyXG4gICAgdmltZW86IHtcclxuICAgICAgc3JjOiBcImh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS9hcGkvcGxheWVyLmpzXCIsXHJcbiAgICAgIGNsYXNzOiBcIlZpbWVvXCIsXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBsb2FkZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWQ6IGZ1bmN0aW9uICh2ZW5kb3IpIHtcclxuICAgICAgdmFyIF90aGlzID0gdGhpcyxcclxuICAgICAgICBzY3JpcHQ7XHJcblxyXG4gICAgICBpZiAodGhpc1t2ZW5kb3JdLmxvYWRlZCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgX3RoaXMuZG9uZSh2ZW5kb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXNbdmVuZG9yXS5sb2FkaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzW3ZlbmRvcl0ubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG4gICAgICBzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XHJcbiAgICAgIHNjcmlwdC5zcmMgPSB0aGlzW3ZlbmRvcl0uc3JjO1xyXG5cclxuICAgICAgaWYgKHZlbmRvciA9PT0gXCJ5b3V0dWJlXCIpIHtcclxuICAgICAgICB3aW5kb3cub25Zb3VUdWJlSWZyYW1lQVBJUmVhZHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBfdGhpc1t2ZW5kb3JdLmxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICBfdGhpcy5kb25lKHZlbmRvcik7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgX3RoaXNbdmVuZG9yXS5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgX3RoaXMuZG9uZSh2ZW5kb3IpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgIH0sXHJcbiAgICBkb25lOiBmdW5jdGlvbiAodmVuZG9yKSB7XHJcbiAgICAgIHZhciBpbnN0YW5jZSwgJGVsLCBwbGF5ZXI7XHJcblxyXG4gICAgICBpZiAodmVuZG9yID09PSBcInlvdXR1YmVcIikge1xyXG4gICAgICAgIGRlbGV0ZSB3aW5kb3cub25Zb3VUdWJlSWZyYW1lQVBJUmVhZHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGluc3RhbmNlID0gJC5mYW5jeWJveC5nZXRJbnN0YW5jZSgpO1xyXG5cclxuICAgICAgaWYgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgJGVsID0gaW5zdGFuY2UuY3VycmVudC4kY29udGVudC5maW5kKFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICBpZiAodmVuZG9yID09PSBcInlvdXR1YmVcIiAmJiBZVCAhPT0gdW5kZWZpbmVkICYmIFlUKSB7XHJcbiAgICAgICAgICBwbGF5ZXIgPSBuZXcgWVQuUGxheWVyKCRlbC5hdHRyKFwiaWRcIiksIHtcclxuICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgb25TdGF0ZUNoYW5nZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZS5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHZlbmRvciA9PT0gXCJ2aW1lb1wiICYmIFZpbWVvICE9PSB1bmRlZmluZWQgJiYgVmltZW8pIHtcclxuICAgICAgICAgIHBsYXllciA9IG5ldyBWaW1lby5QbGF5ZXIoJGVsKTtcclxuXHJcbiAgICAgICAgICBwbGF5ZXIub24oXCJlbmRlZFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLm5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICQoZG9jdW1lbnQpLm9uKHtcclxuICAgIFwiYWZ0ZXJTaG93LmZiXCI6IGZ1bmN0aW9uIChlLCBpbnN0YW5jZSwgY3VycmVudCkge1xyXG4gICAgICBpZiAoaW5zdGFuY2UuZ3JvdXAubGVuZ3RoID4gMSAmJiAoY3VycmVudC5jb250ZW50U291cmNlID09PSBcInlvdXR1YmVcIiB8fCBjdXJyZW50LmNvbnRlbnRTb3VyY2UgPT09IFwidmltZW9cIikpIHtcclxuICAgICAgICBWaWRlb0FQSUxvYWRlci5sb2FkKGN1cnJlbnQuY29udGVudFNvdXJjZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufSkoalF1ZXJ5KTtcclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy9cclxuLy8gR3Vlc3R1cmVzXHJcbi8vIEFkZHMgdG91Y2ggZ3Vlc3R1cmVzLCBoYW5kbGVzIGNsaWNrIGFuZCB0YXAgZXZlbnRzXHJcbi8vXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbihmdW5jdGlvbiAod2luZG93LCBkb2N1bWVudCwgJCkge1xyXG4gIFwidXNlIHN0cmljdFwiO1xyXG5cclxuICB2YXIgcmVxdWVzdEFGcmFtZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcclxuICAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICB3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICAvLyBpZiBhbGwgZWxzZSBmYWlscywgdXNlIHNldFRpbWVvdXRcclxuICAgICAgZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH0pKCk7XHJcblxyXG4gIHZhciBjYW5jZWxBRnJhbWUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgIHdpbmRvdy53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICB3aW5kb3cubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWUgfHxcclxuICAgICAgd2luZG93Lm9DYW5jZWxBbmltYXRpb25GcmFtZSB8fFxyXG4gICAgICBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGlkKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9KSgpO1xyXG5cclxuICB2YXIgZ2V0UG9pbnRlclhZID0gZnVuY3Rpb24gKGUpIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuXHJcbiAgICBlID0gZS5vcmlnaW5hbEV2ZW50IHx8IGUgfHwgd2luZG93LmU7XHJcbiAgICBlID0gZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPyBlLnRvdWNoZXMgOiBlLmNoYW5nZWRUb3VjaGVzICYmIGUuY2hhbmdlZFRvdWNoZXMubGVuZ3RoID8gZS5jaGFuZ2VkVG91Y2hlcyA6IFtlXTtcclxuXHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZSkge1xyXG4gICAgICBpZiAoZVtrZXldLnBhZ2VYKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgeDogZVtrZXldLnBhZ2VYLFxyXG4gICAgICAgICAgeTogZVtrZXldLnBhZ2VZXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZVtrZXldLmNsaWVudFgpIHtcclxuICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICB4OiBlW2tleV0uY2xpZW50WCxcclxuICAgICAgICAgIHk6IGVba2V5XS5jbGllbnRZXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIHZhciBkaXN0YW5jZSA9IGZ1bmN0aW9uIChwb2ludDIsIHBvaW50MSwgd2hhdCkge1xyXG4gICAgaWYgKCFwb2ludDEgfHwgIXBvaW50Mikge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2hhdCA9PT0gXCJ4XCIpIHtcclxuICAgICAgcmV0dXJuIHBvaW50Mi54IC0gcG9pbnQxLng7XHJcbiAgICB9IGVsc2UgaWYgKHdoYXQgPT09IFwieVwiKSB7XHJcbiAgICAgIHJldHVybiBwb2ludDIueSAtIHBvaW50MS55O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnQyLnggLSBwb2ludDEueCwgMikgKyBNYXRoLnBvdyhwb2ludDIueSAtIHBvaW50MS55LCAyKSk7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGlzQ2xpY2thYmxlID0gZnVuY3Rpb24gKCRlbCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAkZWwuaXMoJ2EsYXJlYSxidXR0b24sW3JvbGU9XCJidXR0b25cIl0saW5wdXQsbGFiZWwsc2VsZWN0LHN1bW1hcnksdGV4dGFyZWEsdmlkZW8sYXVkaW8saWZyYW1lJykgfHxcclxuICAgICAgJC5pc0Z1bmN0aW9uKCRlbC5nZXQoMCkub25jbGljaykgfHxcclxuICAgICAgJGVsLmRhdGEoXCJzZWxlY3RhYmxlXCIpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIGF0dHJpYnV0ZXMgbGlrZSBkYXRhLWZhbmN5Ym94LW5leHQgb3IgZGF0YS1mYW5jeWJveC1jbG9zZVxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGF0dHMgPSAkZWxbMF0uYXR0cmlidXRlcywgbiA9IGF0dHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgIGlmIChhdHRzW2ldLm5vZGVOYW1lLnN1YnN0cigwLCAxNCkgPT09IFwiZGF0YS1mYW5jeWJveC1cIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIHZhciBoYXNTY3JvbGxiYXJzID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICB2YXIgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpW1wib3ZlcmZsb3cteVwiXSxcclxuICAgICAgb3ZlcmZsb3dYID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpW1wib3ZlcmZsb3cteFwiXSxcclxuICAgICAgdmVydGljYWwgPSAob3ZlcmZsb3dZID09PSBcInNjcm9sbFwiIHx8IG92ZXJmbG93WSA9PT0gXCJhdXRvXCIpICYmIGVsLnNjcm9sbEhlaWdodCA+IGVsLmNsaWVudEhlaWdodCxcclxuICAgICAgaG9yaXpvbnRhbCA9IChvdmVyZmxvd1ggPT09IFwic2Nyb2xsXCIgfHwgb3ZlcmZsb3dYID09PSBcImF1dG9cIikgJiYgZWwuc2Nyb2xsV2lkdGggPiBlbC5jbGllbnRXaWR0aDtcclxuXHJcbiAgICByZXR1cm4gdmVydGljYWwgfHwgaG9yaXpvbnRhbDtcclxuICB9O1xyXG5cclxuICB2YXIgaXNTY3JvbGxhYmxlID0gZnVuY3Rpb24gKCRlbCkge1xyXG4gICAgdmFyIHJleiA9IGZhbHNlO1xyXG5cclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgIHJleiA9IGhhc1Njcm9sbGJhcnMoJGVsLmdldCgwKSk7XHJcblxyXG4gICAgICBpZiAocmV6KSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICRlbCA9ICRlbC5wYXJlbnQoKTtcclxuXHJcbiAgICAgIGlmICghJGVsLmxlbmd0aCB8fCAkZWwuaGFzQ2xhc3MoXCJmYW5jeWJveC1zdGFnZVwiKSB8fCAkZWwuaXMoXCJib2R5XCIpKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV6O1xyXG4gIH07XHJcblxyXG4gIHZhciBHdWVzdHVyZXMgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICBzZWxmLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcblxyXG4gICAgc2VsZi4kYmcgPSBpbnN0YW5jZS4kcmVmcy5iZztcclxuICAgIHNlbGYuJHN0YWdlID0gaW5zdGFuY2UuJHJlZnMuc3RhZ2U7XHJcbiAgICBzZWxmLiRjb250YWluZXIgPSBpbnN0YW5jZS4kcmVmcy5jb250YWluZXI7XHJcblxyXG4gICAgc2VsZi5kZXN0cm95KCk7XHJcblxyXG4gICAgc2VsZi4kY29udGFpbmVyLm9uKFwidG91Y2hzdGFydC5mYi50b3VjaCBtb3VzZWRvd24uZmIudG91Y2hcIiwgJC5wcm94eShzZWxmLCBcIm9udG91Y2hzdGFydFwiKSk7XHJcbiAgfTtcclxuXHJcbiAgR3Vlc3R1cmVzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHNlbGYuJGNvbnRhaW5lci5vZmYoXCIuZmIudG91Y2hcIik7XHJcblxyXG4gICAgJChkb2N1bWVudCkub2ZmKFwiLmZiLnRvdWNoXCIpO1xyXG5cclxuICAgIGlmIChzZWxmLnJlcXVlc3RJZCkge1xyXG4gICAgICBjYW5jZWxBRnJhbWUoc2VsZi5yZXF1ZXN0SWQpO1xyXG4gICAgICBzZWxmLnJlcXVlc3RJZCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlbGYudGFwcGVkKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLnRhcHBlZCk7XHJcbiAgICAgIHNlbGYudGFwcGVkID0gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBHdWVzdHVyZXMucHJvdG90eXBlLm9udG91Y2hzdGFydCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICR0YXJnZXQgPSAkKGUudGFyZ2V0KSxcclxuICAgICAgaW5zdGFuY2UgPSBzZWxmLmluc3RhbmNlLFxyXG4gICAgICBjdXJyZW50ID0gaW5zdGFuY2UuY3VycmVudCxcclxuICAgICAgJHNsaWRlID0gY3VycmVudC4kc2xpZGUsXHJcbiAgICAgICRjb250ZW50ID0gY3VycmVudC4kY29udGVudCxcclxuICAgICAgaXNUb3VjaERldmljZSA9IGUudHlwZSA9PSBcInRvdWNoc3RhcnRcIjtcclxuXHJcbiAgICAvLyBEbyBub3QgcmVzcG9uZCB0byBib3RoICh0b3VjaCBhbmQgbW91c2UpIGV2ZW50c1xyXG4gICAgaWYgKGlzVG91Y2hEZXZpY2UpIHtcclxuICAgICAgc2VsZi4kY29udGFpbmVyLm9mZihcIm1vdXNlZG93bi5mYi50b3VjaFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZ25vcmUgcmlnaHQgY2xpY2tcclxuICAgIGlmIChlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmJ1dHRvbiA9PSAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZ25vcmUgdGFwaW5nIG9uIGxpbmtzLCBidXR0b25zLCBpbnB1dCBlbGVtZW50c1xyXG4gICAgaWYgKCEkc2xpZGUubGVuZ3RoIHx8ICEkdGFyZ2V0Lmxlbmd0aCB8fCBpc0NsaWNrYWJsZSgkdGFyZ2V0KSB8fCBpc0NsaWNrYWJsZSgkdGFyZ2V0LnBhcmVudCgpKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBJZ25vcmUgY2xpY2tzIG9uIHRoZSBzY3JvbGxiYXJcclxuICAgIGlmICghJHRhcmdldC5pcyhcImltZ1wiKSAmJiBlLm9yaWdpbmFsRXZlbnQuY2xpZW50WCA+ICR0YXJnZXRbMF0uY2xpZW50V2lkdGggKyAkdGFyZ2V0Lm9mZnNldCgpLmxlZnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElnbm9yZSBjbGlja3Mgd2hpbGUgem9vbWluZyBvciBjbG9zaW5nXHJcbiAgICBpZiAoIWN1cnJlbnQgfHwgaW5zdGFuY2UuaXNBbmltYXRpbmcgfHwgY3VycmVudC4kc2xpZGUuaGFzQ2xhc3MoXCJmYW5jeWJveC1hbmltYXRlZFwiKSkge1xyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZi5yZWFsUG9pbnRzID0gc2VsZi5zdGFydFBvaW50cyA9IGdldFBvaW50ZXJYWShlKTtcclxuXHJcbiAgICBpZiAoIXNlbGYuc3RhcnRQb2ludHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBbGxvdyBvdGhlciBzY3JpcHRzIHRvIGNhdGNoIHRvdWNoIGV2ZW50IGlmIFwidG91Y2hcIiBpcyBzZXQgdG8gZmFsc2VcclxuICAgIGlmIChjdXJyZW50LnRvdWNoKSB7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZi5zdGFydEV2ZW50ID0gZTtcclxuXHJcbiAgICBzZWxmLmNhblRhcCA9IHRydWU7XHJcbiAgICBzZWxmLiR0YXJnZXQgPSAkdGFyZ2V0O1xyXG4gICAgc2VsZi4kY29udGVudCA9ICRjb250ZW50O1xyXG4gICAgc2VsZi5vcHRzID0gY3VycmVudC5vcHRzLnRvdWNoO1xyXG5cclxuICAgIHNlbGYuaXNQYW5uaW5nID0gZmFsc2U7XHJcbiAgICBzZWxmLmlzU3dpcGluZyA9IGZhbHNlO1xyXG4gICAgc2VsZi5pc1pvb21pbmcgPSBmYWxzZTtcclxuICAgIHNlbGYuaXNTY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgIHNlbGYuY2FuUGFuID0gaW5zdGFuY2UuY2FuUGFuKCk7XHJcblxyXG4gICAgc2VsZi5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIHNlbGYuZGlzdGFuY2VYID0gc2VsZi5kaXN0YW5jZVkgPSBzZWxmLmRpc3RhbmNlID0gMDtcclxuXHJcbiAgICBzZWxmLmNhbnZhc1dpZHRoID0gTWF0aC5yb3VuZCgkc2xpZGVbMF0uY2xpZW50V2lkdGgpO1xyXG4gICAgc2VsZi5jYW52YXNIZWlnaHQgPSBNYXRoLnJvdW5kKCRzbGlkZVswXS5jbGllbnRIZWlnaHQpO1xyXG5cclxuICAgIHNlbGYuY29udGVudExhc3RQb3MgPSBudWxsO1xyXG4gICAgc2VsZi5jb250ZW50U3RhcnRQb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZShzZWxmLiRjb250ZW50KSB8fCB7XHJcbiAgICAgIHRvcDogMCxcclxuICAgICAgbGVmdDogMFxyXG4gICAgfTtcclxuICAgIHNlbGYuc2xpZGVyU3RhcnRQb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZSgkc2xpZGUpO1xyXG5cclxuICAgIC8vIFNpbmNlIHBvc2l0aW9uIHdpbGwgYmUgYWJzb2x1dGUsIGJ1dCB3ZSBuZWVkIHRvIG1ha2UgaXQgcmVsYXRpdmUgdG8gdGhlIHN0YWdlXHJcbiAgICBzZWxmLnN0YWdlUG9zID0gJC5mYW5jeWJveC5nZXRUcmFuc2xhdGUoaW5zdGFuY2UuJHJlZnMuc3RhZ2UpO1xyXG5cclxuICAgIHNlbGYuc2xpZGVyU3RhcnRQb3MudG9wIC09IHNlbGYuc3RhZ2VQb3MudG9wO1xyXG4gICAgc2VsZi5zbGlkZXJTdGFydFBvcy5sZWZ0IC09IHNlbGYuc3RhZ2VQb3MubGVmdDtcclxuXHJcbiAgICBzZWxmLmNvbnRlbnRTdGFydFBvcy50b3AgLT0gc2VsZi5zdGFnZVBvcy50b3A7XHJcbiAgICBzZWxmLmNvbnRlbnRTdGFydFBvcy5sZWZ0IC09IHNlbGYuc3RhZ2VQb3MubGVmdDtcclxuXHJcbiAgICAkKGRvY3VtZW50KVxyXG4gICAgICAub2ZmKFwiLmZiLnRvdWNoXCIpXHJcbiAgICAgIC5vbihpc1RvdWNoRGV2aWNlID8gXCJ0b3VjaGVuZC5mYi50b3VjaCB0b3VjaGNhbmNlbC5mYi50b3VjaFwiIDogXCJtb3VzZXVwLmZiLnRvdWNoIG1vdXNlbGVhdmUuZmIudG91Y2hcIiwgJC5wcm94eShzZWxmLCBcIm9udG91Y2hlbmRcIikpXHJcbiAgICAgIC5vbihpc1RvdWNoRGV2aWNlID8gXCJ0b3VjaG1vdmUuZmIudG91Y2hcIiA6IFwibW91c2Vtb3ZlLmZiLnRvdWNoXCIsICQucHJveHkoc2VsZiwgXCJvbnRvdWNobW92ZVwiKSk7XHJcblxyXG4gICAgaWYgKCQuZmFuY3lib3guaXNNb2JpbGUpIHtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzZWxmLm9uc2Nyb2xsLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTa2lwIGlmIGNsaWNrZWQgb3V0c2lkZSB0aGUgc2xpZGluZyBhcmVhXHJcbiAgICBpZiAoIShzZWxmLm9wdHMgfHwgc2VsZi5jYW5QYW4pIHx8ICEoJHRhcmdldC5pcyhzZWxmLiRzdGFnZSkgfHwgc2VsZi4kc3RhZ2UuZmluZCgkdGFyZ2V0KS5sZW5ndGgpKSB7XHJcbiAgICAgIGlmICgkdGFyZ2V0LmlzKFwiLmZhbmN5Ym94LWltYWdlXCIpKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISgkLmZhbmN5Ym94LmlzTW9iaWxlICYmICR0YXJnZXQucGFyZW50cyhcIi5mYW5jeWJveC1jYXB0aW9uXCIpLmxlbmd0aCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxmLmlzU2Nyb2xsYWJsZSA9IGlzU2Nyb2xsYWJsZSgkdGFyZ2V0KSB8fCBpc1Njcm9sbGFibGUoJHRhcmdldC5wYXJlbnQoKSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgZWxlbWVudCBpcyBzY3JvbGxhYmxlIGFuZCB0cnkgdG8gcHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcpXHJcbiAgICBpZiAoISgkLmZhbmN5Ym94LmlzTW9iaWxlICYmIHNlbGYuaXNTY3JvbGxhYmxlKSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT25lIGZpbmdlciBvciBtb3VzZSBjbGljayAtIHN3aXBlIG9yIHBhbiBhbiBpbWFnZVxyXG4gICAgaWYgKHNlbGYuc3RhcnRQb2ludHMubGVuZ3RoID09PSAxIHx8IGN1cnJlbnQuaGFzRXJyb3IpIHtcclxuICAgICAgaWYgKHNlbGYuY2FuUGFuKSB7XHJcbiAgICAgICAgJC5mYW5jeWJveC5zdG9wKHNlbGYuJGNvbnRlbnQpO1xyXG5cclxuICAgICAgICBzZWxmLmlzUGFubmluZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZi5pc1N3aXBpbmcgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLiRjb250YWluZXIuYWRkQ2xhc3MoXCJmYW5jeWJveC1pcy1ncmFiYmluZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUd28gZmluZ2VycyAtIHpvb20gaW1hZ2VcclxuICAgIGlmIChzZWxmLnN0YXJ0UG9pbnRzLmxlbmd0aCA9PT0gMiAmJiBjdXJyZW50LnR5cGUgPT09IFwiaW1hZ2VcIiAmJiAoY3VycmVudC5pc0xvYWRlZCB8fCBjdXJyZW50LiRnaG9zdCkpIHtcclxuICAgICAgc2VsZi5jYW5UYXAgPSBmYWxzZTtcclxuICAgICAgc2VsZi5pc1N3aXBpbmcgPSBmYWxzZTtcclxuICAgICAgc2VsZi5pc1Bhbm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHNlbGYuaXNab29taW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICQuZmFuY3lib3guc3RvcChzZWxmLiRjb250ZW50KTtcclxuXHJcbiAgICAgIHNlbGYuY2VudGVyUG9pbnRTdGFydFggPSAoc2VsZi5zdGFydFBvaW50c1swXS54ICsgc2VsZi5zdGFydFBvaW50c1sxXS54KSAqIDAuNSAtICQod2luZG93KS5zY3JvbGxMZWZ0KCk7XHJcbiAgICAgIHNlbGYuY2VudGVyUG9pbnRTdGFydFkgPSAoc2VsZi5zdGFydFBvaW50c1swXS55ICsgc2VsZi5zdGFydFBvaW50c1sxXS55KSAqIDAuNSAtICQod2luZG93KS5zY3JvbGxUb3AoKTtcclxuXHJcbiAgICAgIHNlbGYucGVyY2VudGFnZU9mSW1hZ2VBdFBpbmNoUG9pbnRYID0gKHNlbGYuY2VudGVyUG9pbnRTdGFydFggLSBzZWxmLmNvbnRlbnRTdGFydFBvcy5sZWZ0KSAvIHNlbGYuY29udGVudFN0YXJ0UG9zLndpZHRoO1xyXG4gICAgICBzZWxmLnBlcmNlbnRhZ2VPZkltYWdlQXRQaW5jaFBvaW50WSA9IChzZWxmLmNlbnRlclBvaW50U3RhcnRZIC0gc2VsZi5jb250ZW50U3RhcnRQb3MudG9wKSAvIHNlbGYuY29udGVudFN0YXJ0UG9zLmhlaWdodDtcclxuXHJcbiAgICAgIHNlbGYuc3RhcnREaXN0YW5jZUJldHdlZW5GaW5nZXJzID0gZGlzdGFuY2Uoc2VsZi5zdGFydFBvaW50c1swXSwgc2VsZi5zdGFydFBvaW50c1sxXSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgR3Vlc3R1cmVzLnByb3RvdHlwZS5vbnNjcm9sbCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgc2VsZi5pc1Njcm9sbGluZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzZWxmLm9uc2Nyb2xsLCB0cnVlKTtcclxuICB9O1xyXG5cclxuICBHdWVzdHVyZXMucHJvdG90eXBlLm9udG91Y2htb3ZlID0gZnVuY3Rpb24gKGUpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdXNlciBoYXMgbm90IHJlbGVhc2VkIG92ZXIgaWZyYW1lIG9yIGRpc2FibGVkIGVsZW1lbnRcclxuICAgIGlmIChlLm9yaWdpbmFsRXZlbnQuYnV0dG9ucyAhPT0gdW5kZWZpbmVkICYmIGUub3JpZ2luYWxFdmVudC5idXR0b25zID09PSAwKSB7XHJcbiAgICAgIHNlbGYub250b3VjaGVuZChlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxmLmlzU2Nyb2xsaW5nKSB7XHJcbiAgICAgIHNlbGYuY2FuVGFwID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLm5ld1BvaW50cyA9IGdldFBvaW50ZXJYWShlKTtcclxuXHJcbiAgICBpZiAoIShzZWxmLm9wdHMgfHwgc2VsZi5jYW5QYW4pIHx8ICFzZWxmLm5ld1BvaW50cy5sZW5ndGggfHwgIXNlbGYubmV3UG9pbnRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEoc2VsZi5pc1N3aXBpbmcgJiYgc2VsZi5pc1N3aXBpbmcgPT09IHRydWUpKSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLmRpc3RhbmNlWCA9IGRpc3RhbmNlKHNlbGYubmV3UG9pbnRzWzBdLCBzZWxmLnN0YXJ0UG9pbnRzWzBdLCBcInhcIik7XHJcbiAgICBzZWxmLmRpc3RhbmNlWSA9IGRpc3RhbmNlKHNlbGYubmV3UG9pbnRzWzBdLCBzZWxmLnN0YXJ0UG9pbnRzWzBdLCBcInlcIik7XHJcblxyXG4gICAgc2VsZi5kaXN0YW5jZSA9IGRpc3RhbmNlKHNlbGYubmV3UG9pbnRzWzBdLCBzZWxmLnN0YXJ0UG9pbnRzWzBdKTtcclxuXHJcbiAgICAvLyBTa2lwIGZhbHNlIG9udG91Y2htb3ZlIGV2ZW50cyAoQ2hyb21lKVxyXG4gICAgaWYgKHNlbGYuZGlzdGFuY2UgPiAwKSB7XHJcbiAgICAgIGlmIChzZWxmLmlzU3dpcGluZykge1xyXG4gICAgICAgIHNlbGYub25Td2lwZShlKTtcclxuICAgICAgfSBlbHNlIGlmIChzZWxmLmlzUGFubmluZykge1xyXG4gICAgICAgIHNlbGYub25QYW4oKTtcclxuICAgICAgfSBlbHNlIGlmIChzZWxmLmlzWm9vbWluZykge1xyXG4gICAgICAgIHNlbGYub25ab29tKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBHdWVzdHVyZXMucHJvdG90eXBlLm9uU3dpcGUgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICBpbnN0YW5jZSA9IHNlbGYuaW5zdGFuY2UsXHJcbiAgICAgIHN3aXBpbmcgPSBzZWxmLmlzU3dpcGluZyxcclxuICAgICAgbGVmdCA9IHNlbGYuc2xpZGVyU3RhcnRQb3MubGVmdCB8fCAwLFxyXG4gICAgICBhbmdsZTtcclxuXHJcbiAgICAvLyBJZiBkaXJlY3Rpb24gaXMgbm90IHlldCBkZXRlcm1pbmVkXHJcbiAgICBpZiAoc3dpcGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDEwcHggZGlzdGFuY2UgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSBhbiBhbmdsZVxyXG4gICAgICBpZiAoTWF0aC5hYnMoc2VsZi5kaXN0YW5jZSkgPiAxMCkge1xyXG4gICAgICAgIHNlbGYuY2FuVGFwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChpbnN0YW5jZS5ncm91cC5sZW5ndGggPCAyICYmIHNlbGYub3B0cy52ZXJ0aWNhbCkge1xyXG4gICAgICAgICAgc2VsZi5pc1N3aXBpbmcgPSBcInlcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmlzRHJhZ2dpbmcgfHwgc2VsZi5vcHRzLnZlcnRpY2FsID09PSBmYWxzZSB8fCAoc2VsZi5vcHRzLnZlcnRpY2FsID09PSBcImF1dG9cIiAmJiAkKHdpbmRvdykud2lkdGgoKSA+IDgwMCkpIHtcclxuICAgICAgICAgIHNlbGYuaXNTd2lwaW5nID0gXCJ4XCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFuZ2xlID0gTWF0aC5hYnMoKE1hdGguYXRhbjIoc2VsZi5kaXN0YW5jZVksIHNlbGYuZGlzdGFuY2VYKSAqIDE4MCkgLyBNYXRoLlBJKTtcclxuXHJcbiAgICAgICAgICBzZWxmLmlzU3dpcGluZyA9IGFuZ2xlID4gNDUgJiYgYW5nbGUgPCAxMzUgPyBcInlcIiA6IFwieFwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGYuaXNTd2lwaW5nID09PSBcInlcIiAmJiAkLmZhbmN5Ym94LmlzTW9iaWxlICYmIHNlbGYuaXNTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICBzZWxmLmlzU2Nyb2xsaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbnN0YW5jZS5pc0RyYWdnaW5nID0gc2VsZi5pc1N3aXBpbmc7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHBvaW50cyB0byBhdm9pZCBqdW1waW5nLCBiZWNhdXNlIHdlIGRyb3BwZWQgZmlyc3Qgc3dpcGVzIHRvIGNhbGN1bGF0ZSB0aGUgYW5nbGVcclxuICAgICAgICBzZWxmLnN0YXJ0UG9pbnRzID0gc2VsZi5uZXdQb2ludHM7XHJcblxyXG4gICAgICAgICQuZWFjaChpbnN0YW5jZS5zbGlkZXMsIGZ1bmN0aW9uIChpbmRleCwgc2xpZGUpIHtcclxuICAgICAgICAgIHZhciBzbGlkZVBvcywgc3RhZ2VQb3M7XHJcblxyXG4gICAgICAgICAgJC5mYW5jeWJveC5zdG9wKHNsaWRlLiRzbGlkZSk7XHJcblxyXG4gICAgICAgICAgc2xpZGVQb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZShzbGlkZS4kc2xpZGUpO1xyXG4gICAgICAgICAgc3RhZ2VQb3MgPSAkLmZhbmN5Ym94LmdldFRyYW5zbGF0ZShpbnN0YW5jZS4kcmVmcy5zdGFnZSk7XHJcblxyXG4gICAgICAgICAgc2xpZGUuJHNsaWRlXHJcbiAgICAgICAgICAgIC5jc3Moe1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJcIixcclxuICAgICAgICAgICAgICBvcGFjaXR5OiBcIlwiLFxyXG4gICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1kdXJhdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhcImZhbmN5Ym94LWFuaW1hdGVkXCIpXHJcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhmdW5jdGlvbiAoaW5kZXgsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoY2xhc3NOYW1lLm1hdGNoKC8oXnxcXHMpZmFuY3lib3gtZngtXFxTKy9nKSB8fCBbXSkuam9pbihcIiBcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChzbGlkZS5wb3MgPT09IGluc3RhbmNlLmN1cnJlbnQucG9zKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc2xpZGVyU3RhcnRQb3MudG9wID0gc2xpZGVQb3MudG9wIC0gc3RhZ2VQb3MudG9wO1xyXG4gICAgICAgICAgICBzZWxmLnNsaWRlclN0YXJ0UG9zLmxlZnQgPSBzbGlkZVBvcy5sZWZ0IC0gc3RhZ2VQb3MubGVmdDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAkLmZhbmN5Ym94LnNldFRyYW5zbGF0ZShzbGlkZS4kc2xpZGUsIHtcclxuICAgICAgICAgICAgdG9wOiBzbGlkZVBvcy50b3AgLSBzdGFnZVBvcy50b3AsXHJcbiAgICAgICAgICAgIGxlZnQ6IHNsaWRlUG9zLmxlZnQgLSBzdGFnZVBvcy5sZWZ0XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gU3RvcCBzbGlkZXNob3dcclxuICAgICAgICBpZiAoaW5zdGFuY2UuU2xpZGVTaG93ICYmIGluc3RhbmNlLlNsaWRlU2hvdy5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgaW5zdGFuY2UuU2xpZGVTaG93LnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdGlja3kgZWRnZXNcclxuICAgIGlmIChzd2lwaW5nID09IFwieFwiKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBzZWxmLmRpc3RhbmNlWCA+IDAgJiZcclxuICAgICAgICAoc2VsZi5pbnN0YW5jZS5ncm91cC5sZW5ndGggPCAyIHx8IChzZWxmLmluc3RhbmNlLmN1cnJlbnQuaW5kZXggPT09IDAgJiYgIXNlbGYuaW5zdGFuY2UuY3VycmVudC5vcHRzLmxvb3ApKVxyXG4gICAgICApIHtcclxuICAgICAgICBsZWZ0ID0gbGVmdCArIE1hdGgucG93KHNlbGYuZGlzdGFuY2VYLCAwLjgpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHNlbGYuZGlzdGFuY2VYIDwgMCAmJlxyXG4gICAgICAgIChzZWxmLmluc3RhbmNlLmdyb3VwLmxlbmd0aCA8IDIgfHxcclxuICAgICAgICAgIChzZWxmLmluc3RhbmNlLmN1cnJlbnQuaW5kZXggPT09IHNlbGYuaW5zdGFuY2UuZ3JvdXAubGVuZ3RoIC0gMSAmJiAhc2VsZi5pbnN0YW5jZS5jdXJyZW50Lm9wdHMubG9vcCkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxlZnQgPSBsZWZ0IC0gTWF0aC5wb3coLXNlbGYuZGlzdGFuY2VYLCAwLjgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxlZnQgPSBsZWZ0ICsgc2VsZi5kaXN0YW5jZVg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxmLnNsaWRlckxhc3RQb3MgPSB7XHJcbiAgICAgIHRvcDogc3dpcGluZyA9PSBcInhcIiA/IDAgOiBzZWxmLnNsaWRlclN0YXJ0UG9zLnRvcCArIHNlbGYuZGlzdGFuY2VZLFxyXG4gICAgICBsZWZ0OiBsZWZ0XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChzZWxmLnJlcXVlc3RJZCkge1xyXG4gICAgICBjYW5jZWxBRnJhbWUoc2VsZi5yZXF1ZXN0SWQpO1xyXG5cclxuICAgICAgc2VsZi5yZXF1ZXN0SWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGYucmVxdWVzdElkID0gcmVxdWVzdEFGcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChzZWxmLnNsaWRlckxhc3RQb3MpIHtcclxuICAgICAgICAkLmVhY2goc2VsZi5pbnN0YW5jZS5zbGlkZXMsIGZ1bmN0aW9uIChpbmRleCwgc2xpZGUpIHtcclxuICAgICAgICAgIHZhciBwb3MgPSBzbGlkZS5wb3MgLSBzZWxmLmluc3RhbmNlLmN1cnJQb3M7XHJcblxyXG4gICAgICAgICAgJC5mYW5jeWJveC5zZXRUcmFuc2xhdGUoc2xpZGUuJHNsaWRlLCB7XHJcbiAgICAgICAgICAgIHRvcDogc2VsZi5zbGlkZXJMYXN0UG9zLnRvcCxcclxuICAgICAgICAgICAgbGVmdDogc2VsZi5zbGlkZXJMYXN0UG9zLmxlZnQgKyBwb3MgKiBzZWxmLmNhbnZhc1dpZHRoICsgcG9zICogc2xpZGUub3B0cy5ndXR0ZXJcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZWxmLiRjb250YWluZXIuYWRkQ2xhc3MoXCJmYW5jeWJveC1pcy1zbGlkaW5nXCIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBHdWVzdHVyZXMucHJvdG90eXBlLm9uUGFuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIC8vIFByZXZlbnQgYWNjaWRlbnRhbCBtb3ZlbWVudCAoc29tZXRpbWVzLCB3aGVuIHRhcHBpbmcgY2FzdWFsbHksIGZpbmdlciBjYW4gbW92ZSBhIGJpdClcclxuICAgIGlmIChkaXN0YW5jZShzZWxmLm5ld1BvaW50c1swXSwgc2VsZi5yZWFsUG9pbnRzWzBdKSA8ICgkLmZhbmN5Ym94LmlzTW9iaWxlID8gMTAgOiA1KSkge1xyXG4gICAgICBzZWxmLnN0YXJ0UG9pbnRzID0gc2VsZi5uZXdQb2ludHM7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLmNhblRhcCA9IGZhbHNlO1xyXG5cclxuICAgIHNlbGYuY29udGVudExhc3RQb3MgPSBzZWxmLmxpbWl0TW92ZW1lbnQoKTtcclxuXHJcbiAgICBpZiAoc2VsZi5yZXF1ZXN0SWQpIHtcclxuICAgICAgY2FuY2VsQUZyYW1lKHNlbGYucmVxdWVzdElkKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLnJlcXVlc3RJZCA9IHJlcXVlc3RBRnJhbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAkLmZhbmN5Ym94LnNldFRyYW5zbGF0ZShzZWxmLiRjb250ZW50LCBzZWxmLmNvbnRlbnRMYXN0UG9zKTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIC8vIE1ha2UgcGFubmluZyBzdGlja3kgdG8gdGhlIGVkZ2VzXHJcbiAgR3Vlc3R1cmVzLnByb3RvdHlwZS5saW1pdE1vdmVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHZhciBjYW52YXNXaWR0aCA9IHNlbGYuY2FudmFzV2lkdGg7XHJcbiAgICB2YXIgY2FudmFzSGVpZ2h0ID0gc2VsZi5jYW52YXNIZWlnaHQ7XHJcblxyXG4gICAgdmFyIGRpc3RhbmNlWCA9IHNlbGYuZGlzdGFuY2VYO1xyXG4gICAgdmFyIGRpc3RhbmNlWSA9IHNlbGYuZGlzdGFuY2VZO1xyXG5cclxuICAgIHZhciBjb250ZW50U3RhcnRQb3MgPSBzZWxmLmNvbnRlbnRTdGFydFBvcztcclxuXHJcbiAgICB2YXIgY3VycmVudE9mZnNldFggPSBjb250ZW50U3RhcnRQb3MubGVmdDtcclxuICAgIHZhciBjdXJyZW50T2Zmc2V0WSA9IGNvbnRlbnRTdGFydFBvcy50b3A7XHJcblxyXG4gICAgdmFyIGN1cnJlbnRXaWR0aCA9IGNvbnRlbnRTdGFydFBvcy53aWR0aDtcclxuICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gY29udGVudFN0YXJ0UG9zLmhlaWdodDtcclxuXHJcbiAgICB2YXIgbWluVHJhbnNsYXRlWCwgbWluVHJhbnNsYXRlWSwgbWF4VHJhbnNsYXRlWCwgbWF4VHJhbnNsYXRlWSwgbmV3T2Zmc2V0WCwgbmV3T2Zmc2V0WTtcclxuXHJcbiAgICBpZiAoY3VycmVudFdpZHRoID4gY2FudmFzV2lkdGgpIHtcclxuICAgICAgbmV3T2Zmc2V0WCA9IGN1cnJlbnRPZmZzZXRYICsgZGlzdGFuY2VYO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3T2Zmc2V0WCA9IGN1cnJlbnRPZmZzZXRYO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld09mZnNldFkgPSBjdXJyZW50T2Zmc2V0WSArIGRpc3RhbmNlWTtcclxuXHJcbiAgICAvLyBTbG93IGRvd24gcHJvcG9ydGlvbmFsbHkgdG8gdHJhdmVsZWQgZGlzdGFuY2VcclxuICAgIG1pblRyYW5zbGF0ZVggPSBNYXRoLm1heCgwLCBjYW52YXNXaWR0aCAqIDAuNSAtIGN1cnJlbnRXaWR0aCAqIDAuNSk7XHJcbiAgICBtaW5UcmFuc2xhdGVZID0gTWF0aC5tYXgoMCwgY2FudmFzSGVpZ2h0ICogMC41IC0gY3VycmVudEhlaWdodCAqIDAuNSk7XHJcblxyXG4gICAgbWF4VHJhbnNsYXRlWCA9IE1hdGgubWluKGNhbnZhc1dpZHRoIC0gY3VycmVudFdpZHRoLCBjYW52YXNXaWR0aCAqIDAuNSAtIGN1cnJlbnRXaWR0aCAqIDAuNSk7XHJcbiAgICBtYXhUcmFuc2xhdGVZID0gTWF0aC5taW4oY2FudmFzSGVpZ2h0IC0gY3VycmVudEhlaWdodCwgY2FudmFzSGVpZ2h0ICogMC41IC0gY3VycmVudEhlaWdodCAqIDAuNSk7XHJcblxyXG4gICAgLy8gICAtPlxyXG4gICAgaWYgKGRpc3RhbmNlWCA+IDAgJiYgbmV3T2Zmc2V0WCA+IG1pblRyYW5zbGF0ZVgpIHtcclxuICAgICAgbmV3T2Zmc2V0WCA9IG1pblRyYW5zbGF0ZVggLSAxICsgTWF0aC5wb3coLW1pblRyYW5zbGF0ZVggKyBjdXJyZW50T2Zmc2V0WCArIGRpc3RhbmNlWCwgMC44KSB8fCAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICAgIDwtXHJcbiAgICBpZiAoZGlzdGFuY2VYIDwgMCAmJiBuZXdPZmZzZXRYIDwgbWF4VHJhbnNsYXRlWCkge1xyXG4gICAgICBuZXdPZmZzZXRYID0gbWF4VHJhbnNsYXRlWCArIDEgLSBNYXRoLnBvdyhtYXhUcmFuc2xhdGVYIC0gY3VycmVudE9mZnNldFggLSBkaXN0YW5jZVgsIDAuOCkgfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgIFxcL1xyXG4gICAgaWYgKGRpc3RhbmNlWSA+IDAgJiYgbmV3T2Zmc2V0WSA+IG1pblRyYW5zbGF0ZVkpIHtcclxuICAgICAgbmV3T2Zmc2V0WSA9IG1pblRyYW5zbGF0ZVkgLSAxICsgTWF0aC5wb3coLW1pblRyYW5zbGF0ZVkgKyBjdXJyZW50T2Zmc2V0WSArIGRpc3RhbmNlWSwgMC44KSB8fCAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICAgL1xcXHJcbiAgICBpZiAoZGlzdGFuY2VZIDwgMCAmJiBuZXdPZmZzZXRZIDwgbWF4VHJhbnNsYXRlWSkge1xyXG4gICAgICBuZXdPZmZzZXRZID0gbWF4VHJhbnNsYXRlWSArIDEgLSBNYXRoLnBvdyhtYXhUcmFuc2xhdGVZIC0gY3VycmVudE9mZnNldFkgLSBkaXN0YW5jZVksIDAuOCkgfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3A6IG5ld09mZnNldFksXHJcbiAgICAgIGxlZnQ6IG5ld09mZnNldFhcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgR3Vlc3R1cmVzLnByb3RvdHlwZS5saW1pdFBvc2l0aW9uID0gZnVuY3Rpb24gKG5ld09mZnNldFgsIG5ld09mZnNldFksIG5ld1dpZHRoLCBuZXdIZWlnaHQpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICB2YXIgY2FudmFzV2lkdGggPSBzZWxmLmNhbnZhc1dpZHRoO1xyXG4gICAgdmFyIGNhbnZhc0hlaWdodCA9IHNlbGYuY2FudmFzSGVpZ2h0O1xyXG5cclxuICAgIGlmIChuZXdXaWR0aCA+IGNhbnZhc1dpZHRoKSB7XHJcbiAgICAgIG5ld09mZnNldFggPSBuZXdPZmZzZXRYID4gMCA/IDAgOiBuZXdPZmZzZXRYO1xyXG4gICAgICBuZXdPZmZzZXRYID0gbmV3T2Zmc2V0WCA8IGNhbnZhc1dpZHRoIC0gbmV3V2lkdGggPyBjYW52YXNXaWR0aCAtIG5ld1dpZHRoIDogbmV3T2Zmc2V0WDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENlbnRlciBob3Jpem9udGFsbHlcclxuICAgICAgbmV3T2Zmc2V0WCA9IE1hdGgubWF4KDAsIGNhbnZhc1dpZHRoIC8gMiAtIG5ld1dpZHRoIC8gMik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5ld0hlaWdodCA+IGNhbnZhc0hlaWdodCkge1xyXG4gICAgICBuZXdPZmZzZXRZID0gbmV3T2Zmc2V0WSA+IDAgPyAwIDogbmV3T2Zmc2V0WTtcclxuICAgICAgbmV3T2Zmc2V0WSA9IG5ld09mZnNldFkgPCBjYW52YXNIZWlnaHQgLSBuZXdIZWlnaHQgPyBjYW52YXNIZWlnaHQgLSBuZXdIZWlnaHQgOiBuZXdPZmZzZXRZO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHlcclxuICAgICAgbmV3T2Zmc2V0WSA9IE1hdGgubWF4KDAsIGNhbnZhc0hlaWdodCAvIDIgLSBuZXdIZWlnaHQgLyAyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3A6IG5ld09mZnNldFksXHJcbiAgICAgIGxlZnQ6IG5ld09mZnNldFhcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgR3Vlc3R1cmVzLnByb3RvdHlwZS5vblpvb20gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGN1cnJlbnQgZGlzdGFuY2UgYmV0d2VlbiBwb2ludHMgdG8gZ2V0IHBpbmNoIHJhdGlvIGFuZCBuZXcgd2lkdGggYW5kIGhlaWdodFxyXG4gICAgdmFyIGNvbnRlbnRTdGFydFBvcyA9IHNlbGYuY29udGVudFN0YXJ0UG9zO1xyXG5cclxuICAgIHZhciBjdXJyZW50V2lkdGggPSBjb250ZW50U3RhcnRQb3Mud2lkdGg7XHJcbiAgICB2YXIgY3VycmVudEhlaWdodCA9IGNvbnRlbnRTdGFydFBvcy5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIGN1cnJlbnRPZmZzZXRYID0gY29udGVudFN0YXJ0UG9zLmxlZnQ7XHJcbiAgICB2YXIgY3VycmVudE9mZnNldFkgPSBjb250ZW50U3RhcnRQb3MudG9wO1xyXG5cclxuICAgIHZhciBlbmREaXN0YW5jZUJldHdlZW5GaW5nZXJzID0gZGlzdGFuY2Uoc2VsZi5uZXdQb2ludHNbMF0sIHNlbGYubmV3UG9pbnRzWzFdKTtcclxuXHJcbiAgICB2YXIgcGluY2hSYXRpbyA9IGVuZERpc3RhbmNlQmV0d2VlbkZpbmdlcnMgLyBzZWxmLnN0YXJ0RGlzdGFuY2VCZXR3ZWVuRmluZ2VycztcclxuXHJcbiAgICB2YXIgbmV3V2lkdGggPSBNYXRoLmZsb29yKGN1cnJlbnRXaWR0aCAqIHBpbmNoUmF0aW8pO1xyXG4gICAgdmFyIG5ld0hlaWdodCA9IE1hdGguZmxvb3IoY3VycmVudEhlaWdodCAqIHBpbmNoUmF0aW8pO1xyXG5cclxuICAgIC8vIFRoaXMgaXMgdGhlIHRyYW5zbGF0aW9uIGR1ZSB0byBwaW5jaC16b29taW5nXHJcbiAgICB2YXIgdHJhbnNsYXRlRnJvbVpvb21pbmdYID0gKGN1cnJlbnRXaWR0aCAtIG5ld1dpZHRoKSAqIHNlbGYucGVyY2VudGFnZU9mSW1hZ2VBdFBpbmNoUG9pbnRYO1xyXG4gICAgdmFyIHRyYW5zbGF0ZUZyb21ab29taW5nWSA9IChjdXJyZW50SGVpZ2h0IC0gbmV3SGVpZ2h0KSAqIHNlbGYucGVyY2VudGFnZU9mSW1hZ2VBdFBpbmNoUG9pbnRZO1xyXG5cclxuICAgIC8vIFBvaW50IGJldHdlZW4gdGhlIHR3byB0b3VjaGVzXHJcbiAgICB2YXIgY2VudGVyUG9pbnRFbmRYID0gKHNlbGYubmV3UG9pbnRzWzBdLnggKyBzZWxmLm5ld1BvaW50c1sxXS54KSAvIDIgLSAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpO1xyXG4gICAgdmFyIGNlbnRlclBvaW50RW5kWSA9IChzZWxmLm5ld1BvaW50c1swXS55ICsgc2VsZi5uZXdQb2ludHNbMV0ueSkgLyAyIC0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xyXG5cclxuICAgIC8vIEFuZCB0aGlzIGlzIHRoZSB0cmFuc2xhdGlvbiBkdWUgdG8gdHJhbnNsYXRpb24gb2YgdGhlIGNlbnRlcnBvaW50XHJcbiAgICAvLyBiZXR3ZWVuIHRoZSB0d28gZmluZ2Vyc1xyXG4gICAgdmFyIHRyYW5zbGF0ZUZyb21UcmFuc2xhdGluZ1ggPSBjZW50ZXJQb2ludEVuZFggLSBzZWxmLmNlbnRlclBvaW50U3RhcnRYO1xyXG4gICAgdmFyIHRyYW5zbGF0ZUZyb21UcmFuc2xhdGluZ1kgPSBjZW50ZXJQb2ludEVuZFkgLSBzZWxmLmNlbnRlclBvaW50U3RhcnRZO1xyXG5cclxuICAgIC8vIFRoZSBuZXcgb2Zmc2V0IGlzIHRoZSBvbGQvY3VycmVudCBvbmUgcGx1cyB0aGUgdG90YWwgdHJhbnNsYXRpb25cclxuICAgIHZhciBuZXdPZmZzZXRYID0gY3VycmVudE9mZnNldFggKyAodHJhbnNsYXRlRnJvbVpvb21pbmdYICsgdHJhbnNsYXRlRnJvbVRyYW5zbGF0aW5nWCk7XHJcbiAgICB2YXIgbmV3T2Zmc2V0WSA9IGN1cnJlbnRPZmZzZXRZICsgKHRyYW5zbGF0ZUZyb21ab29taW5nWSArIHRyYW5zbGF0ZUZyb21UcmFuc2xhdGluZ1kpO1xyXG5cclxuICAgIHZhciBuZXdQb3MgPSB7XHJcbiAgICAgIHRvcDogbmV3T2Zmc2V0WSxcclxuICAgICAgbGVmdDogbmV3T2Zmc2V0WCxcclxuICAgICAgc2NhbGVYOiBwaW5jaFJhdGlvLFxyXG4gICAgICBzY2FsZVk6IHBpbmNoUmF0aW9cclxuICAgIH07XHJcblxyXG4gICAgc2VsZi5jYW5UYXAgPSBmYWxzZTtcclxuXHJcbiAgICBzZWxmLm5ld1dpZHRoID0gbmV3V2lkdGg7XHJcbiAgICBzZWxmLm5ld0hlaWdodCA9IG5ld0hlaWdodDtcclxuXHJcbiAgICBzZWxmLmNvbnRlbnRMYXN0UG9zID0gbmV3UG9zO1xyXG5cclxuICAgIGlmIChzZWxmLnJlcXVlc3RJZCkge1xyXG4gICAgICBjYW5jZWxBRnJhbWUoc2VsZi5yZXF1ZXN0SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGYucmVxdWVzdElkID0gcmVxdWVzdEFGcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICQuZmFuY3lib3guc2V0VHJhbnNsYXRlKHNlbGYuJGNvbnRlbnQsIHNlbGYuY29udGVudExhc3RQb3MpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgR3Vlc3R1cmVzLnByb3RvdHlwZS5vbnRvdWNoZW5kID0gZnVuY3Rpb24gKGUpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICB2YXIgc3dpcGluZyA9IHNlbGYuaXNTd2lwaW5nO1xyXG4gICAgdmFyIHBhbm5pbmcgPSBzZWxmLmlzUGFubmluZztcclxuICAgIHZhciB6b29taW5nID0gc2VsZi5pc1pvb21pbmc7XHJcbiAgICB2YXIgc2Nyb2xsaW5nID0gc2VsZi5pc1Njcm9sbGluZztcclxuXHJcbiAgICBzZWxmLmVuZFBvaW50cyA9IGdldFBvaW50ZXJYWShlKTtcclxuICAgIHNlbGYuZE1zID0gTWF0aC5tYXgobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzZWxmLnN0YXJ0VGltZSwgMSk7XHJcblxyXG4gICAgc2VsZi4kY29udGFpbmVyLnJlbW92ZUNsYXNzKFwiZmFuY3lib3gtaXMtZ3JhYmJpbmdcIik7XHJcblxyXG4gICAgJChkb2N1bWVudCkub2ZmKFwiLmZiLnRvdWNoXCIpO1xyXG5cclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2VsZi5vbnNjcm9sbCwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHNlbGYucmVxdWVzdElkKSB7XHJcbiAgICAgIGNhbmNlbEFGcmFtZShzZWxmLnJlcXVlc3RJZCk7XHJcblxyXG4gICAgICBzZWxmLnJlcXVlc3RJZCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZi5pc1N3aXBpbmcgPSBmYWxzZTtcclxuICAgIHNlbGYuaXNQYW5uaW5nID0gZmFsc2U7XHJcbiAgICBzZWxmLmlzWm9vbWluZyA9IGZhbHNlO1xyXG4gICAgc2VsZi5pc1Njcm9sbGluZyA9IGZhbHNlO1xyXG5cclxuICAgIHNlbGYuaW5zdGFuY2UuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChzZWxmLmNhblRhcCkge1xyXG4gICAgICByZXR1cm4gc2VsZi5vblRhcChlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLnNwZWVkID0gMTAwO1xyXG5cclxuICAgIC8vIFNwZWVkIGluIHB4L21zXHJcbiAgICBzZWxmLnZlbG9jaXR5WCA9IChzZWxmLmRpc3RhbmNlWCAvIHNlbGYuZE1zKSAqIDAuNTtcclxuICAgIHNlbGYudmVsb2NpdHlZID0gKHNlbGYuZGlzdGFuY2VZIC8gc2VsZi5kTXMpICogMC41O1xyXG5cclxuICAgIGlmIChwYW5uaW5nKSB7XHJcbiAgICAgIHNlbGYuZW5kUGFubmluZygpO1xyXG4gICAgfSBlbHNlIGlmICh6b29taW5nKSB7XHJcbiAgICAgIHNlbGYuZW5kWm9vbWluZygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZi5lbmRTd2lwaW5nKHN3aXBpbmcsIHNjcm9sbGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuO1xyXG4gIH07XHJcblxyXG4gIEd1ZXN0dXJlcy5wcm90b3R5cGUuZW5kU3dpcGluZyA9IGZ1bmN0aW9uIChzd2lwaW5nLCBzY3JvbGxpbmcpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgcmV0ID0gZmFsc2UsXHJcbiAgICAgIGxlbiA9IHNlbGYuaW5zdGFuY2UuZ3JvdXAubGVuZ3RoLFxyXG4gICAgICBkaXN0YW5jZVggPSBNYXRoLmFicyhzZWxmLmRpc3RhbmNlWCksXHJcbiAgICAgIGNhbkFkdmFuY2UgPSBzd2lwaW5nID09IFwieFwiICYmIGxlbiA+IDEgJiYgKChzZWxmLmRNcyA+IDEzMCAmJiBkaXN0YW5jZVggPiAxMCkgfHwgZGlzdGFuY2VYID4gNTApLFxyXG4gICAgICBzcGVlZFggPSAzMDA7XHJcblxyXG4gICAgc2VsZi5zbGlkZXJMYXN0UG9zID0gbnVsbDtcclxuXHJcbiAgICAvLyBDbG9zZSBpZiBzd2lwZWQgdmVydGljYWxseSAvIG5hdmlnYXRlIGlmIGhvcml6b250YWxseVxyXG4gICAgaWYgKHN3aXBpbmcgPT0gXCJ5XCIgJiYgIXNjcm9sbGluZyAmJiBNYXRoLmFicyhzZWxmLmRpc3RhbmNlWSkgPiA1MCkge1xyXG4gICAgICAvLyBDb250aW51ZSB2ZXJ0aWNhbCBtb3ZlbWVudFxyXG4gICAgICAkLmZhbmN5Ym94LmFuaW1hdGUoXHJcbiAgICAgICAgc2VsZi5pbnN0YW5jZS5jdXJyZW50LiRzbGlkZSwge1xyXG4gICAgICAgICAgdG9wOiBzZWxmLnNsaWRlclN0YXJ0UG9zLnRvcCArIHNlbGYuZGlzdGFuY2VZICsgc2VsZi52ZWxvY2l0eVkgKiAxNTAsXHJcbiAgICAgICAgICBvcGFjaXR5OiAwXHJcbiAgICAgICAgfSxcclxuICAgICAgICAyMDBcclxuICAgICAgKTtcclxuICAgICAgcmV0ID0gc2VsZi5pbnN0YW5jZS5jbG9zZSh0cnVlLCAyNTApO1xyXG4gICAgfSBlbHNlIGlmIChjYW5BZHZhbmNlICYmIHNlbGYuZGlzdGFuY2VYID4gMCkge1xyXG4gICAgICByZXQgPSBzZWxmLmluc3RhbmNlLnByZXZpb3VzKHNwZWVkWCk7XHJcbiAgICB9IGVsc2UgaWYgKGNhbkFkdmFuY2UgJiYgc2VsZi5kaXN0YW5jZVggPCAwKSB7XHJcbiAgICAgIHJldCA9IHNlbGYuaW5zdGFuY2UubmV4dChzcGVlZFgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXQgPT09IGZhbHNlICYmIChzd2lwaW5nID09IFwieFwiIHx8IHN3aXBpbmcgPT0gXCJ5XCIpKSB7XHJcbiAgICAgIHNlbGYuaW5zdGFuY2UuY2VudGVyU2xpZGUoMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1pcy1zbGlkaW5nXCIpO1xyXG4gIH07XHJcblxyXG4gIC8vIExpbWl0IHBhbm5pbmcgZnJvbSBlZGdlc1xyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIEd1ZXN0dXJlcy5wcm90b3R5cGUuZW5kUGFubmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgbmV3T2Zmc2V0WCxcclxuICAgICAgbmV3T2Zmc2V0WSxcclxuICAgICAgbmV3UG9zO1xyXG5cclxuICAgIGlmICghc2VsZi5jb250ZW50TGFzdFBvcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlbGYub3B0cy5tb21lbnR1bSA9PT0gZmFsc2UgfHwgc2VsZi5kTXMgPiAzNTApIHtcclxuICAgICAgbmV3T2Zmc2V0WCA9IHNlbGYuY29udGVudExhc3RQb3MubGVmdDtcclxuICAgICAgbmV3T2Zmc2V0WSA9IHNlbGYuY29udGVudExhc3RQb3MudG9wO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ29udGludWUgbW92ZW1lbnRcclxuICAgICAgbmV3T2Zmc2V0WCA9IHNlbGYuY29udGVudExhc3RQb3MubGVmdCArIHNlbGYudmVsb2NpdHlYICogNTAwO1xyXG4gICAgICBuZXdPZmZzZXRZID0gc2VsZi5jb250ZW50TGFzdFBvcy50b3AgKyBzZWxmLnZlbG9jaXR5WSAqIDUwMDtcclxuICAgIH1cclxuXHJcbiAgICBuZXdQb3MgPSBzZWxmLmxpbWl0UG9zaXRpb24obmV3T2Zmc2V0WCwgbmV3T2Zmc2V0WSwgc2VsZi5jb250ZW50U3RhcnRQb3Mud2lkdGgsIHNlbGYuY29udGVudFN0YXJ0UG9zLmhlaWdodCk7XHJcblxyXG4gICAgbmV3UG9zLndpZHRoID0gc2VsZi5jb250ZW50U3RhcnRQb3Mud2lkdGg7XHJcbiAgICBuZXdQb3MuaGVpZ2h0ID0gc2VsZi5jb250ZW50U3RhcnRQb3MuaGVpZ2h0O1xyXG5cclxuICAgICQuZmFuY3lib3guYW5pbWF0ZShzZWxmLiRjb250ZW50LCBuZXdQb3MsIDM2Nik7XHJcbiAgfTtcclxuXHJcbiAgR3Vlc3R1cmVzLnByb3RvdHlwZS5lbmRab29taW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHZhciBjdXJyZW50ID0gc2VsZi5pbnN0YW5jZS5jdXJyZW50O1xyXG5cclxuICAgIHZhciBuZXdPZmZzZXRYLCBuZXdPZmZzZXRZLCBuZXdQb3MsIHJlc2V0O1xyXG5cclxuICAgIHZhciBuZXdXaWR0aCA9IHNlbGYubmV3V2lkdGg7XHJcbiAgICB2YXIgbmV3SGVpZ2h0ID0gc2VsZi5uZXdIZWlnaHQ7XHJcblxyXG4gICAgaWYgKCFzZWxmLmNvbnRlbnRMYXN0UG9zKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBuZXdPZmZzZXRYID0gc2VsZi5jb250ZW50TGFzdFBvcy5sZWZ0O1xyXG4gICAgbmV3T2Zmc2V0WSA9IHNlbGYuY29udGVudExhc3RQb3MudG9wO1xyXG5cclxuICAgIHJlc2V0ID0ge1xyXG4gICAgICB0b3A6IG5ld09mZnNldFksXHJcbiAgICAgIGxlZnQ6IG5ld09mZnNldFgsXHJcbiAgICAgIHdpZHRoOiBuZXdXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBuZXdIZWlnaHQsXHJcbiAgICAgIHNjYWxlWDogMSxcclxuICAgICAgc2NhbGVZOiAxXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFJlc2V0IHNjYWxleC9zY2FsZVkgdmFsdWVzOyB0aGlzIGhlbHBzIGZvciBwZXJmb21hbmNlIGFuZCBkb2VzIG5vdCBicmVhayBhbmltYXRpb25cclxuICAgICQuZmFuY3lib3guc2V0VHJhbnNsYXRlKHNlbGYuJGNvbnRlbnQsIHJlc2V0KTtcclxuXHJcbiAgICBpZiAobmV3V2lkdGggPCBzZWxmLmNhbnZhc1dpZHRoICYmIG5ld0hlaWdodCA8IHNlbGYuY2FudmFzSGVpZ2h0KSB7XHJcbiAgICAgIHNlbGYuaW5zdGFuY2Uuc2NhbGVUb0ZpdCgxNTApO1xyXG4gICAgfSBlbHNlIGlmIChuZXdXaWR0aCA+IGN1cnJlbnQud2lkdGggfHwgbmV3SGVpZ2h0ID4gY3VycmVudC5oZWlnaHQpIHtcclxuICAgICAgc2VsZi5pbnN0YW5jZS5zY2FsZVRvQWN0dWFsKHNlbGYuY2VudGVyUG9pbnRTdGFydFgsIHNlbGYuY2VudGVyUG9pbnRTdGFydFksIDE1MCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdQb3MgPSBzZWxmLmxpbWl0UG9zaXRpb24obmV3T2Zmc2V0WCwgbmV3T2Zmc2V0WSwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XHJcblxyXG4gICAgICAkLmZhbmN5Ym94LmFuaW1hdGUoc2VsZi4kY29udGVudCwgbmV3UG9zLCAxNTApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIEd1ZXN0dXJlcy5wcm90b3R5cGUub25UYXAgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyICR0YXJnZXQgPSAkKGUudGFyZ2V0KTtcclxuXHJcbiAgICB2YXIgaW5zdGFuY2UgPSBzZWxmLmluc3RhbmNlO1xyXG4gICAgdmFyIGN1cnJlbnQgPSBpbnN0YW5jZS5jdXJyZW50O1xyXG5cclxuICAgIHZhciBlbmRQb2ludHMgPSAoZSAmJiBnZXRQb2ludGVyWFkoZSkpIHx8IHNlbGYuc3RhcnRQb2ludHM7XHJcblxyXG4gICAgdmFyIHRhcFggPSBlbmRQb2ludHNbMF0gPyBlbmRQb2ludHNbMF0ueCAtICQod2luZG93KS5zY3JvbGxMZWZ0KCkgLSBzZWxmLnN0YWdlUG9zLmxlZnQgOiAwO1xyXG4gICAgdmFyIHRhcFkgPSBlbmRQb2ludHNbMF0gPyBlbmRQb2ludHNbMF0ueSAtICQod2luZG93KS5zY3JvbGxUb3AoKSAtIHNlbGYuc3RhZ2VQb3MudG9wIDogMDtcclxuXHJcbiAgICB2YXIgd2hlcmU7XHJcblxyXG4gICAgdmFyIHByb2Nlc3MgPSBmdW5jdGlvbiAocHJlZml4KSB7XHJcbiAgICAgIHZhciBhY3Rpb24gPSBjdXJyZW50Lm9wdHNbcHJlZml4XTtcclxuXHJcbiAgICAgIGlmICgkLmlzRnVuY3Rpb24oYWN0aW9uKSkge1xyXG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbi5hcHBseShpbnN0YW5jZSwgW2N1cnJlbnQsIGVdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XHJcbiAgICAgICAgICBpbnN0YW5jZS5jbG9zZShzZWxmLnN0YXJ0RXZlbnQpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFwidG9nZ2xlQ29udHJvbHNcIjpcclxuICAgICAgICAgIGluc3RhbmNlLnRvZ2dsZUNvbnRyb2xzKCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgXCJuZXh0XCI6XHJcbiAgICAgICAgICBpbnN0YW5jZS5uZXh0KCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgXCJuZXh0T3JDbG9zZVwiOlxyXG4gICAgICAgICAgaWYgKGluc3RhbmNlLmdyb3VwLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2UubmV4dCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5zdGFuY2UuY2xvc2Uoc2VsZi5zdGFydEV2ZW50KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBcInpvb21cIjpcclxuICAgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT0gXCJpbWFnZVwiICYmIChjdXJyZW50LmlzTG9hZGVkIHx8IGN1cnJlbnQuJGdob3N0KSkge1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UuY2FuUGFuKCkpIHtcclxuICAgICAgICAgICAgICBpbnN0YW5jZS5zY2FsZVRvRml0KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuaXNTY2FsZWREb3duKCkpIHtcclxuICAgICAgICAgICAgICBpbnN0YW5jZS5zY2FsZVRvQWN0dWFsKHRhcFgsIHRhcFkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmdyb3VwLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgICAgICBpbnN0YW5jZS5jbG9zZShzZWxmLnN0YXJ0RXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gSWdub3JlIHJpZ2h0IGNsaWNrXHJcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5idXR0b24gPT0gMikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2tpcCBpZiBjbGlja2VkIG9uIHRoZSBzY3JvbGxiYXJcclxuICAgIGlmICghJHRhcmdldC5pcyhcImltZ1wiKSAmJiB0YXBYID4gJHRhcmdldFswXS5jbGllbnRXaWR0aCArICR0YXJnZXQub2Zmc2V0KCkubGVmdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgd2hlcmUgaXMgY2xpY2tlZFxyXG4gICAgaWYgKCR0YXJnZXQuaXMoXCIuZmFuY3lib3gtYmcsLmZhbmN5Ym94LWlubmVyLC5mYW5jeWJveC1vdXRlciwuZmFuY3lib3gtY29udGFpbmVyXCIpKSB7XHJcbiAgICAgIHdoZXJlID0gXCJPdXRzaWRlXCI7XHJcbiAgICB9IGVsc2UgaWYgKCR0YXJnZXQuaXMoXCIuZmFuY3lib3gtc2xpZGVcIikpIHtcclxuICAgICAgd2hlcmUgPSBcIlNsaWRlXCI7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBpbnN0YW5jZS5jdXJyZW50LiRjb250ZW50ICYmXHJcbiAgICAgIGluc3RhbmNlLmN1cnJlbnQuJGNvbnRlbnRcclxuICAgICAgLmZpbmQoJHRhcmdldClcclxuICAgICAgLmFkZEJhY2soKVxyXG4gICAgICAuZmlsdGVyKCR0YXJnZXQpLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHdoZXJlID0gXCJDb250ZW50XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGRvdWJsZSB0YXBcclxuICAgIGlmIChzZWxmLnRhcHBlZCkge1xyXG4gICAgICAvLyBTdG9wIHByZXZpb3VzbHkgY3JlYXRlZCBzaW5nbGUgdGFwXHJcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLnRhcHBlZCk7XHJcbiAgICAgIHNlbGYudGFwcGVkID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFNraXAgaWYgZGlzdGFuY2UgYmV0d2VlbiB0YXBzIGlzIHRvbyBiaWdcclxuICAgICAgaWYgKE1hdGguYWJzKHRhcFggLSBzZWxmLnRhcFgpID4gNTAgfHwgTWF0aC5hYnModGFwWSAtIHNlbGYudGFwWSkgPiA1MCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBPSywgbm93IHdlIGFzc3VtZSB0aGF0IHRoaXMgaXMgYSBkb3VibGUtdGFwXHJcbiAgICAgIHByb2Nlc3MoXCJkYmxjbGlja1wiICsgd2hlcmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2luZ2xlIHRhcCB3aWxsIGJlIHByb2Nlc3NlZCBpZiB1c2VyIGhhcyBub3QgY2xpY2tlZCBzZWNvbmQgdGltZSB3aXRoaW4gMzAwbXNcclxuICAgICAgLy8gb3IgdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0IGZvciBkb3VibGUtdGFwXHJcbiAgICAgIHNlbGYudGFwWCA9IHRhcFg7XHJcbiAgICAgIHNlbGYudGFwWSA9IHRhcFk7XHJcblxyXG4gICAgICBpZiAoY3VycmVudC5vcHRzW1wiZGJsY2xpY2tcIiArIHdoZXJlXSAmJiBjdXJyZW50Lm9wdHNbXCJkYmxjbGlja1wiICsgd2hlcmVdICE9PSBjdXJyZW50Lm9wdHNbXCJjbGlja1wiICsgd2hlcmVdKSB7XHJcbiAgICAgICAgc2VsZi50YXBwZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHNlbGYudGFwcGVkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBpZiAoIWluc3RhbmNlLmlzQW5pbWF0aW5nKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3MoXCJjbGlja1wiICsgd2hlcmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJvY2VzcyhcImNsaWNrXCIgKyB3aGVyZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICAkKGRvY3VtZW50KVxyXG4gICAgLm9uKFwib25BY3RpdmF0ZS5mYlwiLCBmdW5jdGlvbiAoZSwgaW5zdGFuY2UpIHtcclxuICAgICAgaWYgKGluc3RhbmNlICYmICFpbnN0YW5jZS5HdWVzdHVyZXMpIHtcclxuICAgICAgICBpbnN0YW5jZS5HdWVzdHVyZXMgPSBuZXcgR3Vlc3R1cmVzKGluc3RhbmNlKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5vbihcImJlZm9yZUNsb3NlLmZiXCIsIGZ1bmN0aW9uIChlLCBpbnN0YW5jZSkge1xyXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuR3Vlc3R1cmVzKSB7XHJcbiAgICAgICAgaW5zdGFuY2UuR3Vlc3R1cmVzLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbn0pKHdpbmRvdywgZG9jdW1lbnQsIGpRdWVyeSk7XHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vXHJcbi8vIFNsaWRlU2hvd1xyXG4vLyBFbmFibGVzIHNsaWRlc2hvdyBmdW5jdGlvbmFsaXR5XHJcbi8vXHJcbi8vIEV4YW1wbGUgb2YgdXNhZ2U6XHJcbi8vICQuZmFuY3lib3guZ2V0SW5zdGFuY2UoKS5TbGlkZVNob3cuc3RhcnQoKVxyXG4vL1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4oZnVuY3Rpb24gKGRvY3VtZW50LCAkKSB7XHJcbiAgXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4gICQuZXh0ZW5kKHRydWUsICQuZmFuY3lib3guZGVmYXVsdHMsIHtcclxuICAgIGJ0blRwbDoge1xyXG4gICAgICBzbGlkZVNob3c6ICc8YnV0dG9uIGRhdGEtZmFuY3lib3gtcGxheSBjbGFzcz1cImZhbmN5Ym94LWJ1dHRvbiBmYW5jeWJveC1idXR0b24tLXBsYXlcIiB0aXRsZT1cInt7UExBWV9TVEFSVH19XCI+JyArXHJcbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTYuNSA1LjR2MTMuMmwxMS02LjZ6XCIvPjwvc3ZnPicgK1xyXG4gICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk04LjMzIDUuNzVoMi4ydjEyLjVoLTIuMlY1Ljc1em01LjE1IDBoMi4ydjEyLjVoLTIuMlY1Ljc1elwiLz48L3N2Zz4nICtcclxuICAgICAgICBcIjwvYnV0dG9uPlwiXHJcbiAgICB9LFxyXG4gICAgc2xpZGVTaG93OiB7XHJcbiAgICAgIGF1dG9TdGFydDogZmFsc2UsXHJcbiAgICAgIHNwZWVkOiAzMDAwLFxyXG4gICAgICBwcm9ncmVzczogdHJ1ZVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICB2YXIgU2xpZGVTaG93ID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9O1xyXG5cclxuICAkLmV4dGVuZChTbGlkZVNob3cucHJvdG90eXBlLCB7XHJcbiAgICB0aW1lcjogbnVsbCxcclxuICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICRidXR0b246IG51bGwsXHJcblxyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgaW5zdGFuY2UgPSBzZWxmLmluc3RhbmNlLFxyXG4gICAgICAgIG9wdHMgPSBpbnN0YW5jZS5ncm91cFtpbnN0YW5jZS5jdXJySW5kZXhdLm9wdHMuc2xpZGVTaG93O1xyXG5cclxuICAgICAgc2VsZi4kYnV0dG9uID0gaW5zdGFuY2UuJHJlZnMudG9vbGJhci5maW5kKFwiW2RhdGEtZmFuY3lib3gtcGxheV1cIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2VsZi50b2dnbGUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoaW5zdGFuY2UuZ3JvdXAubGVuZ3RoIDwgMiB8fCAhb3B0cykge1xyXG4gICAgICAgIHNlbGYuJGJ1dHRvbi5oaWRlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAob3B0cy5wcm9ncmVzcykge1xyXG4gICAgICAgIHNlbGYuJHByb2dyZXNzID0gJCgnPGRpdiBjbGFzcz1cImZhbmN5Ym94LXByb2dyZXNzXCI+PC9kaXY+JykuYXBwZW5kVG8oaW5zdGFuY2UuJHJlZnMuaW5uZXIpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBpbnN0YW5jZSA9IHNlbGYuaW5zdGFuY2UsXHJcbiAgICAgICAgY3VycmVudCA9IGluc3RhbmNlLmN1cnJlbnQ7XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiByZWFjaGVkIGxhc3QgZWxlbWVudFxyXG4gICAgICBpZiAoY3VycmVudCAmJiAoZm9yY2UgPT09IHRydWUgfHwgY3VycmVudC5vcHRzLmxvb3AgfHwgaW5zdGFuY2UuY3VyckluZGV4IDwgaW5zdGFuY2UuZ3JvdXAubGVuZ3RoIC0gMSkpIHtcclxuICAgICAgICBpZiAoc2VsZi5pc0FjdGl2ZSAmJiBjdXJyZW50LmNvbnRlbnRUeXBlICE9PSBcInZpZGVvXCIpIHtcclxuICAgICAgICAgIGlmIChzZWxmLiRwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAkLmZhbmN5Ym94LmFuaW1hdGUoc2VsZi4kcHJvZ3Jlc3Muc2hvdygpLCB7XHJcbiAgICAgICAgICAgICAgc2NhbGVYOiAxXHJcbiAgICAgICAgICAgIH0sIGN1cnJlbnQub3B0cy5zbGlkZVNob3cuc3BlZWQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNlbGYudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jdXJyZW50Lm9wdHMubG9vcCAmJiBpbnN0YW5jZS5jdXJyZW50LmluZGV4ID09IGluc3RhbmNlLmdyb3VwLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICBpbnN0YW5jZS5qdW1wVG8oMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW5zdGFuY2UubmV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCBjdXJyZW50Lm9wdHMuc2xpZGVTaG93LnNwZWVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZi5zdG9wKCk7XHJcbiAgICAgICAgaW5zdGFuY2UuaWRsZVNlY29uZHNDb3VudGVyID0gMDtcclxuICAgICAgICBpbnN0YW5jZS5zaG93Q29udHJvbHMoKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi50aW1lcik7XHJcblxyXG4gICAgICBzZWxmLnRpbWVyID0gbnVsbDtcclxuXHJcbiAgICAgIGlmIChzZWxmLiRwcm9ncmVzcykge1xyXG4gICAgICAgIHNlbGYuJHByb2dyZXNzLnJlbW92ZUF0dHIoXCJzdHlsZVwiKS5oaWRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLmluc3RhbmNlLmN1cnJlbnQ7XHJcblxyXG4gICAgICBpZiAoY3VycmVudCkge1xyXG4gICAgICAgIHNlbGYuJGJ1dHRvblxyXG4gICAgICAgICAgLmF0dHIoXCJ0aXRsZVwiLCAoY3VycmVudC5vcHRzLmkxOG5bY3VycmVudC5vcHRzLmxhbmddIHx8IGN1cnJlbnQub3B0cy5pMThuLmVuKS5QTEFZX1NUT1ApXHJcbiAgICAgICAgICAucmVtb3ZlQ2xhc3MoXCJmYW5jeWJveC1idXR0b24tLXBsYXlcIilcclxuICAgICAgICAgIC5hZGRDbGFzcyhcImZhbmN5Ym94LWJ1dHRvbi0tcGF1c2VcIik7XHJcblxyXG4gICAgICAgIHNlbGYuaXNBY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudC5pc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICBzZWxmLnNldCh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGYuaW5zdGFuY2UudHJpZ2dlcihcIm9uU2xpZGVTaG93Q2hhbmdlXCIsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLmluc3RhbmNlLmN1cnJlbnQ7XHJcblxyXG4gICAgICBzZWxmLmNsZWFyKCk7XHJcblxyXG4gICAgICBzZWxmLiRidXR0b25cclxuICAgICAgICAuYXR0cihcInRpdGxlXCIsIChjdXJyZW50Lm9wdHMuaTE4bltjdXJyZW50Lm9wdHMubGFuZ10gfHwgY3VycmVudC5vcHRzLmkxOG4uZW4pLlBMQVlfU1RBUlQpXHJcbiAgICAgICAgLnJlbW92ZUNsYXNzKFwiZmFuY3lib3gtYnV0dG9uLS1wYXVzZVwiKVxyXG4gICAgICAgIC5hZGRDbGFzcyhcImZhbmN5Ym94LWJ1dHRvbi0tcGxheVwiKTtcclxuXHJcbiAgICAgIHNlbGYuaXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHNlbGYuaW5zdGFuY2UudHJpZ2dlcihcIm9uU2xpZGVTaG93Q2hhbmdlXCIsIGZhbHNlKTtcclxuXHJcbiAgICAgIGlmIChzZWxmLiRwcm9ncmVzcykge1xyXG4gICAgICAgIHNlbGYuJHByb2dyZXNzLnJlbW92ZUF0dHIoXCJzdHlsZVwiKS5oaWRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChzZWxmLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgc2VsZi5zdG9wKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZi5zdGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gICQoZG9jdW1lbnQpLm9uKHtcclxuICAgIFwib25Jbml0LmZiXCI6IGZ1bmN0aW9uIChlLCBpbnN0YW5jZSkge1xyXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgIWluc3RhbmNlLlNsaWRlU2hvdykge1xyXG4gICAgICAgIGluc3RhbmNlLlNsaWRlU2hvdyA9IG5ldyBTbGlkZVNob3coaW5zdGFuY2UpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIFwiYmVmb3JlU2hvdy5mYlwiOiBmdW5jdGlvbiAoZSwgaW5zdGFuY2UsIGN1cnJlbnQsIGZpcnN0UnVuKSB7XHJcbiAgICAgIHZhciBTbGlkZVNob3cgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5TbGlkZVNob3c7XHJcblxyXG4gICAgICBpZiAoZmlyc3RSdW4pIHtcclxuICAgICAgICBpZiAoU2xpZGVTaG93ICYmIGN1cnJlbnQub3B0cy5zbGlkZVNob3cuYXV0b1N0YXJ0KSB7XHJcbiAgICAgICAgICBTbGlkZVNob3cuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoU2xpZGVTaG93ICYmIFNsaWRlU2hvdy5pc0FjdGl2ZSkge1xyXG4gICAgICAgIFNsaWRlU2hvdy5jbGVhcigpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIFwiYWZ0ZXJTaG93LmZiXCI6IGZ1bmN0aW9uIChlLCBpbnN0YW5jZSwgY3VycmVudCkge1xyXG4gICAgICB2YXIgU2xpZGVTaG93ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuU2xpZGVTaG93O1xyXG5cclxuICAgICAgaWYgKFNsaWRlU2hvdyAmJiBTbGlkZVNob3cuaXNBY3RpdmUpIHtcclxuICAgICAgICBTbGlkZVNob3cuc2V0KCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgXCJhZnRlcktleWRvd24uZmJcIjogZnVuY3Rpb24gKGUsIGluc3RhbmNlLCBjdXJyZW50LCBrZXlwcmVzcywga2V5Y29kZSkge1xyXG4gICAgICB2YXIgU2xpZGVTaG93ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuU2xpZGVTaG93O1xyXG5cclxuICAgICAgLy8gXCJQXCIgb3IgU3BhY2ViYXJcclxuICAgICAgaWYgKFNsaWRlU2hvdyAmJiBjdXJyZW50Lm9wdHMuc2xpZGVTaG93ICYmIChrZXljb2RlID09PSA4MCB8fCBrZXljb2RlID09PSAzMikgJiYgISQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuaXMoXCJidXR0b24sYSxpbnB1dFwiKSkge1xyXG4gICAgICAgIGtleXByZXNzLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIFNsaWRlU2hvdy50b2dnbGUoKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBcImJlZm9yZUNsb3NlLmZiIG9uRGVhY3RpdmF0ZS5mYlwiOiBmdW5jdGlvbiAoZSwgaW5zdGFuY2UpIHtcclxuICAgICAgdmFyIFNsaWRlU2hvdyA9IGluc3RhbmNlICYmIGluc3RhbmNlLlNsaWRlU2hvdztcclxuXHJcbiAgICAgIGlmIChTbGlkZVNob3cpIHtcclxuICAgICAgICBTbGlkZVNob3cuc3RvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIFBhZ2UgVmlzaWJpbGl0eSBBUEkgdG8gcGF1c2Ugc2xpZGVzaG93IHdoZW4gd2luZG93IGlzIG5vdCBhY3RpdmVcclxuICAkKGRvY3VtZW50KS5vbihcInZpc2liaWxpdHljaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGluc3RhbmNlID0gJC5mYW5jeWJveC5nZXRJbnN0YW5jZSgpLFxyXG4gICAgICBTbGlkZVNob3cgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5TbGlkZVNob3c7XHJcblxyXG4gICAgaWYgKFNsaWRlU2hvdyAmJiBTbGlkZVNob3cuaXNBY3RpdmUpIHtcclxuICAgICAgaWYgKGRvY3VtZW50LmhpZGRlbikge1xyXG4gICAgICAgIFNsaWRlU2hvdy5jbGVhcigpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFNsaWRlU2hvdy5zZXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59KShkb2N1bWVudCwgalF1ZXJ5KTtcclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy9cclxuLy8gRnVsbFNjcmVlblxyXG4vLyBBZGRzIGZ1bGxzY3JlZW4gZnVuY3Rpb25hbGl0eVxyXG4vL1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4oZnVuY3Rpb24gKGRvY3VtZW50LCAkKSB7XHJcbiAgXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4gIC8vIENvbGxlY3Rpb24gb2YgbWV0aG9kcyBzdXBwb3J0ZWQgYnkgdXNlciBicm93c2VyXHJcbiAgdmFyIGZuID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBmbk1hcCA9IFtcclxuICAgICAgW1wicmVxdWVzdEZ1bGxzY3JlZW5cIiwgXCJleGl0RnVsbHNjcmVlblwiLCBcImZ1bGxzY3JlZW5FbGVtZW50XCIsIFwiZnVsbHNjcmVlbkVuYWJsZWRcIiwgXCJmdWxsc2NyZWVuY2hhbmdlXCIsIFwiZnVsbHNjcmVlbmVycm9yXCJdLFxyXG4gICAgICAvLyBuZXcgV2ViS2l0XHJcbiAgICAgIFtcclxuICAgICAgICBcIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuXCIsXHJcbiAgICAgICAgXCJ3ZWJraXRFeGl0RnVsbHNjcmVlblwiLFxyXG4gICAgICAgIFwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnRcIixcclxuICAgICAgICBcIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkXCIsXHJcbiAgICAgICAgXCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCIsXHJcbiAgICAgICAgXCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3JcIlxyXG4gICAgICBdLFxyXG4gICAgICAvLyBvbGQgV2ViS2l0IChTYWZhcmkgNS4xKVxyXG4gICAgICBbXHJcbiAgICAgICAgXCJ3ZWJraXRSZXF1ZXN0RnVsbFNjcmVlblwiLFxyXG4gICAgICAgIFwid2Via2l0Q2FuY2VsRnVsbFNjcmVlblwiLFxyXG4gICAgICAgIFwid2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50XCIsXHJcbiAgICAgICAgXCJ3ZWJraXRDYW5jZWxGdWxsU2NyZWVuXCIsXHJcbiAgICAgICAgXCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCIsXHJcbiAgICAgICAgXCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3JcIlxyXG4gICAgICBdLFxyXG4gICAgICBbXHJcbiAgICAgICAgXCJtb3pSZXF1ZXN0RnVsbFNjcmVlblwiLFxyXG4gICAgICAgIFwibW96Q2FuY2VsRnVsbFNjcmVlblwiLFxyXG4gICAgICAgIFwibW96RnVsbFNjcmVlbkVsZW1lbnRcIixcclxuICAgICAgICBcIm1vekZ1bGxTY3JlZW5FbmFibGVkXCIsXHJcbiAgICAgICAgXCJtb3pmdWxsc2NyZWVuY2hhbmdlXCIsXHJcbiAgICAgICAgXCJtb3pmdWxsc2NyZWVuZXJyb3JcIlxyXG4gICAgICBdLFxyXG4gICAgICBbXCJtc1JlcXVlc3RGdWxsc2NyZWVuXCIsIFwibXNFeGl0RnVsbHNjcmVlblwiLCBcIm1zRnVsbHNjcmVlbkVsZW1lbnRcIiwgXCJtc0Z1bGxzY3JlZW5FbmFibGVkXCIsIFwiTVNGdWxsc2NyZWVuQ2hhbmdlXCIsIFwiTVNGdWxsc2NyZWVuRXJyb3JcIl1cclxuICAgIF07XHJcblxyXG4gICAgdmFyIHJldCA9IHt9O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5NYXAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIHZhbCA9IGZuTWFwW2ldO1xyXG5cclxuICAgICAgaWYgKHZhbCAmJiB2YWxbMV0gaW4gZG9jdW1lbnQpIHtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgcmV0W2ZuTWFwWzBdW2pdXSA9IHZhbFtqXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfSkoKTtcclxuXHJcbiAgaWYgKGZuKSB7XHJcbiAgICB2YXIgRnVsbFNjcmVlbiA9IHtcclxuICAgICAgcmVxdWVzdDogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICBlbGVtID0gZWxlbSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGVsZW1bZm4ucmVxdWVzdEZ1bGxzY3JlZW5dKGVsZW0uQUxMT1dfS0VZQk9BUkRfSU5QVVQpO1xyXG4gICAgICB9LFxyXG4gICAgICBleGl0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZG9jdW1lbnRbZm4uZXhpdEZ1bGxzY3JlZW5dKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICBlbGVtID0gZWxlbSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbigpKSB7XHJcbiAgICAgICAgICB0aGlzLmV4aXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0KGVsZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgaXNGdWxsc2NyZWVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZG9jdW1lbnRbZm4uZnVsbHNjcmVlbkVsZW1lbnRdKTtcclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBCb29sZWFuKGRvY3VtZW50W2ZuLmZ1bGxzY3JlZW5FbmFibGVkXSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJC5leHRlbmQodHJ1ZSwgJC5mYW5jeWJveC5kZWZhdWx0cywge1xyXG4gICAgICBidG5UcGw6IHtcclxuICAgICAgICBmdWxsU2NyZWVuOiAnPGJ1dHRvbiBkYXRhLWZhbmN5Ym94LWZ1bGxzY3JlZW4gY2xhc3M9XCJmYW5jeWJveC1idXR0b24gZmFuY3lib3gtYnV0dG9uLS1mc2VudGVyXCIgdGl0bGU9XCJ7e0ZVTExfU0NSRUVOfX1cIj4nICtcclxuICAgICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk03IDE0SDV2NWg1di0ySDd2LTN6bS0yLTRoMlY3aDNWNUg1djV6bTEyIDdoLTN2Mmg1di01aC0ydjN6TTE0IDV2MmgzdjNoMlY1aC01elwiLz48L3N2Zz4nICtcclxuICAgICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk01IDE2aDN2M2gydi01SDV6bTMtOEg1djJoNVY1SDh6bTYgMTFoMnYtM2gzdi0yaC01em0yLTExVjVoLTJ2NWg1Vjh6XCIvPjwvc3ZnPicgK1xyXG4gICAgICAgICAgXCI8L2J1dHRvbj5cIlxyXG4gICAgICB9LFxyXG4gICAgICBmdWxsU2NyZWVuOiB7XHJcbiAgICAgICAgYXV0b1N0YXJ0OiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbihmbi5mdWxsc2NyZWVuY2hhbmdlLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBpc0Z1bGxzY3JlZW4gPSBGdWxsU2NyZWVuLmlzRnVsbHNjcmVlbigpLFxyXG4gICAgICAgIGluc3RhbmNlID0gJC5mYW5jeWJveC5nZXRJbnN0YW5jZSgpO1xyXG5cclxuICAgICAgaWYgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgLy8gSWYgaW1hZ2UgaXMgem9vbWluZywgdGhlbiBmb3JjZSB0byBzdG9wIGFuZCByZXBvc2l0aW9uIHByb3Blcmx5XHJcbiAgICAgICAgaWYgKGluc3RhbmNlLmN1cnJlbnQgJiYgaW5zdGFuY2UuY3VycmVudC50eXBlID09PSBcImltYWdlXCIgJiYgaW5zdGFuY2UuaXNBbmltYXRpbmcpIHtcclxuICAgICAgICAgIGluc3RhbmNlLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaW5zdGFuY2UudXBkYXRlKHRydWUsIHRydWUsIDApO1xyXG5cclxuICAgICAgICAgIGlmICghaW5zdGFuY2UuaXNDb21wbGV0ZSkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5zdGFuY2UudHJpZ2dlcihcIm9uRnVsbHNjcmVlbkNoYW5nZVwiLCBpc0Z1bGxzY3JlZW4pO1xyXG5cclxuICAgICAgICBpbnN0YW5jZS4kcmVmcy5jb250YWluZXIudG9nZ2xlQ2xhc3MoXCJmYW5jeWJveC1pcy1mdWxsc2NyZWVuXCIsIGlzRnVsbHNjcmVlbik7XHJcblxyXG4gICAgICAgIGluc3RhbmNlLiRyZWZzLnRvb2xiYXJcclxuICAgICAgICAgIC5maW5kKFwiW2RhdGEtZmFuY3lib3gtZnVsbHNjcmVlbl1cIilcclxuICAgICAgICAgIC50b2dnbGVDbGFzcyhcImZhbmN5Ym94LWJ1dHRvbi0tZnNlbnRlclwiLCAhaXNGdWxsc2NyZWVuKVxyXG4gICAgICAgICAgLnRvZ2dsZUNsYXNzKFwiZmFuY3lib3gtYnV0dG9uLS1mc2V4aXRcIiwgaXNGdWxsc2NyZWVuKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAkKGRvY3VtZW50KS5vbih7XHJcbiAgICBcIm9uSW5pdC5mYlwiOiBmdW5jdGlvbiAoZSwgaW5zdGFuY2UpIHtcclxuICAgICAgdmFyICRjb250YWluZXI7XHJcblxyXG4gICAgICBpZiAoIWZuKSB7XHJcbiAgICAgICAgaW5zdGFuY2UuJHJlZnMudG9vbGJhci5maW5kKFwiW2RhdGEtZmFuY3lib3gtZnVsbHNjcmVlbl1cIikucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmdyb3VwW2luc3RhbmNlLmN1cnJJbmRleF0ub3B0cy5mdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgJGNvbnRhaW5lciA9IGluc3RhbmNlLiRyZWZzLmNvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgJGNvbnRhaW5lci5vbihcImNsaWNrLmZiLWZ1bGxzY3JlZW5cIiwgXCJbZGF0YS1mYW5jeWJveC1mdWxsc2NyZWVuXVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICBGdWxsU2NyZWVuLnRvZ2dsZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoaW5zdGFuY2Uub3B0cy5mdWxsU2NyZWVuICYmIGluc3RhbmNlLm9wdHMuZnVsbFNjcmVlbi5hdXRvU3RhcnQgPT09IHRydWUpIHtcclxuICAgICAgICAgIEZ1bGxTY3JlZW4ucmVxdWVzdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRXhwb3NlIEFQSVxyXG4gICAgICAgIGluc3RhbmNlLkZ1bGxTY3JlZW4gPSBGdWxsU2NyZWVuO1xyXG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgaW5zdGFuY2UuJHJlZnMudG9vbGJhci5maW5kKFwiW2RhdGEtZmFuY3lib3gtZnVsbHNjcmVlbl1cIikuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIFwiYWZ0ZXJLZXlkb3duLmZiXCI6IGZ1bmN0aW9uIChlLCBpbnN0YW5jZSwgY3VycmVudCwga2V5cHJlc3MsIGtleWNvZGUpIHtcclxuICAgICAgLy8gXCJGXCJcclxuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLkZ1bGxTY3JlZW4gJiYga2V5Y29kZSA9PT0gNzApIHtcclxuICAgICAgICBrZXlwcmVzcy5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICBpbnN0YW5jZS5GdWxsU2NyZWVuLnRvZ2dsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIFwiYmVmb3JlQ2xvc2UuZmJcIjogZnVuY3Rpb24gKGUsIGluc3RhbmNlKSB7XHJcbiAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5GdWxsU2NyZWVuICYmIGluc3RhbmNlLiRyZWZzLmNvbnRhaW5lci5oYXNDbGFzcyhcImZhbmN5Ym94LWlzLWZ1bGxzY3JlZW5cIikpIHtcclxuICAgICAgICBGdWxsU2NyZWVuLmV4aXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59KShkb2N1bWVudCwgalF1ZXJ5KTtcclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy9cclxuLy8gVGh1bWJzXHJcbi8vIERpc3BsYXlzIHRodW1ibmFpbHMgaW4gYSBncmlkXHJcbi8vXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbihmdW5jdGlvbiAoZG9jdW1lbnQsICQpIHtcclxuICBcInVzZSBzdHJpY3RcIjtcclxuXHJcbiAgdmFyIENMQVNTID0gXCJmYW5jeWJveC10aHVtYnNcIixcclxuICAgIENMQVNTX0FDVElWRSA9IENMQVNTICsgXCItYWN0aXZlXCI7XHJcblxyXG4gIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgZGVmYXVsdCB2YWx1ZXNcclxuICAkLmZhbmN5Ym94LmRlZmF1bHRzID0gJC5leHRlbmQoXHJcbiAgICB0cnVlLCB7XHJcbiAgICAgIGJ0blRwbDoge1xyXG4gICAgICAgIHRodW1iczogJzxidXR0b24gZGF0YS1mYW5jeWJveC10aHVtYnMgY2xhc3M9XCJmYW5jeWJveC1idXR0b24gZmFuY3lib3gtYnV0dG9uLS10aHVtYnNcIiB0aXRsZT1cInt7VEhVTUJTfX1cIj4nICtcclxuICAgICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0xNC41OSAxNC41OWgzLjc2djMuNzZoLTMuNzZ2LTMuNzZ6bS00LjQ3IDBoMy43NnYzLjc2aC0zLjc2di0zLjc2em0tNC40NyAwaDMuNzZ2My43Nkg1LjY1di0zLjc2em04Ljk0LTQuNDdoMy43NnYzLjc2aC0zLjc2di0zLjc2em0tNC40NyAwaDMuNzZ2My43NmgtMy43NnYtMy43NnptLTQuNDcgMGgzLjc2djMuNzZINS42NXYtMy43NnptOC45NC00LjQ3aDMuNzZ2My43NmgtMy43NlY1LjY1em0tNC40NyAwaDMuNzZ2My43NmgtMy43NlY1LjY1em0tNC40NyAwaDMuNzZ2My43Nkg1LjY1VjUuNjV6XCIvPjwvc3ZnPicgK1xyXG4gICAgICAgICAgXCI8L2J1dHRvbj5cIlxyXG4gICAgICB9LFxyXG4gICAgICB0aHVtYnM6IHtcclxuICAgICAgICBhdXRvU3RhcnQ6IGZhbHNlLCAvLyBEaXNwbGF5IHRodW1ibmFpbHMgb24gb3BlbmluZ1xyXG4gICAgICAgIGhpZGVPbkNsb3NlOiB0cnVlLCAvLyBIaWRlIHRodW1ibmFpbCBncmlkIHdoZW4gY2xvc2luZyBhbmltYXRpb24gc3RhcnRzXHJcbiAgICAgICAgcGFyZW50RWw6IFwiLmZhbmN5Ym94LWNvbnRhaW5lclwiLCAvLyBDb250YWluZXIgaXMgaW5qZWN0ZWQgaW50byB0aGlzIGVsZW1lbnRcclxuICAgICAgICBheGlzOiBcInlcIiAvLyBWZXJ0aWNhbCAoeSkgb3IgaG9yaXpvbnRhbCAoeCkgc2Nyb2xsaW5nXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAkLmZhbmN5Ym94LmRlZmF1bHRzXHJcbiAgKTtcclxuXHJcbiAgdmFyIEZhbmN5VGh1bWJzID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICB0aGlzLmluaXQoaW5zdGFuY2UpO1xyXG4gIH07XHJcblxyXG4gICQuZXh0ZW5kKEZhbmN5VGh1bWJzLnByb3RvdHlwZSwge1xyXG4gICAgJGJ1dHRvbjogbnVsbCxcclxuICAgICRncmlkOiBudWxsLFxyXG4gICAgJGxpc3Q6IG51bGwsXHJcbiAgICBpc1Zpc2libGU6IGZhbHNlLFxyXG4gICAgaXNBY3RpdmU6IGZhbHNlLFxyXG5cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgZ3JvdXAgPSBpbnN0YW5jZS5ncm91cCxcclxuICAgICAgICBlbmFibGVkID0gMDtcclxuXHJcbiAgICAgIHNlbGYuaW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgc2VsZi5vcHRzID0gZ3JvdXBbaW5zdGFuY2UuY3VyckluZGV4XS5vcHRzLnRodW1icztcclxuXHJcbiAgICAgIGluc3RhbmNlLlRodW1icyA9IHNlbGY7XHJcblxyXG4gICAgICBzZWxmLiRidXR0b24gPSBpbnN0YW5jZS4kcmVmcy50b29sYmFyLmZpbmQoXCJbZGF0YS1mYW5jeWJveC10aHVtYnNdXCIpO1xyXG5cclxuICAgICAgLy8gRW5hYmxlIHRodW1icyBpZiBhdCBsZWFzdCB0d28gZ3JvdXAgaXRlbXMgaGF2ZSB0aHVtYm5haWxzXHJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBncm91cC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChncm91cFtpXS50aHVtYikge1xyXG4gICAgICAgICAgZW5hYmxlZCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZWQgPiAxKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlbmFibGVkID4gMSAmJiAhIXNlbGYub3B0cykge1xyXG4gICAgICAgIHNlbGYuJGJ1dHRvbi5yZW1vdmVBdHRyKFwic3R5bGVcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBzZWxmLnRvZ2dsZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZWxmLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxmLiRidXR0b24uaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgaW5zdGFuY2UgPSBzZWxmLmluc3RhbmNlLFxyXG4gICAgICAgIHBhcmVudEVsID0gc2VsZi5vcHRzLnBhcmVudEVsLFxyXG4gICAgICAgIGxpc3QgPSBbXSxcclxuICAgICAgICBzcmM7XHJcblxyXG4gICAgICBpZiAoIXNlbGYuJGdyaWQpIHtcclxuICAgICAgICAvLyBDcmVhdGUgbWFpbiBlbGVtZW50XHJcbiAgICAgICAgc2VsZi4kZ3JpZCA9ICQoJzxkaXYgY2xhc3M9XCInICsgQ0xBU1MgKyBcIiBcIiArIENMQVNTICsgXCItXCIgKyBzZWxmLm9wdHMuYXhpcyArICdcIj48L2Rpdj4nKS5hcHBlbmRUbyhcclxuICAgICAgICAgIGluc3RhbmNlLiRyZWZzLmNvbnRhaW5lclxyXG4gICAgICAgICAgLmZpbmQocGFyZW50RWwpXHJcbiAgICAgICAgICAuYWRkQmFjaygpXHJcbiAgICAgICAgICAuZmlsdGVyKHBhcmVudEVsKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIEFkZCBcImNsaWNrXCIgZXZlbnQgdGhhdCBwZXJmb3JtcyBnYWxsZXJ5IG5hdmlnYXRpb25cclxuICAgICAgICBzZWxmLiRncmlkLm9uKFwiY2xpY2tcIiwgXCJhXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGluc3RhbmNlLmp1bXBUbygkKHRoaXMpLmF0dHIoXCJkYXRhLWluZGV4XCIpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQnVpbGQgdGhlIGxpc3RcclxuICAgICAgaWYgKCFzZWxmLiRsaXN0KSB7XHJcbiAgICAgICAgc2VsZi4kbGlzdCA9ICQoJzxkaXYgY2xhc3M9XCInICsgQ0xBU1MgKyAnX19saXN0XCI+JykuYXBwZW5kVG8oc2VsZi4kZ3JpZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICQuZWFjaChpbnN0YW5jZS5ncm91cCwgZnVuY3Rpb24gKGksIGl0ZW0pIHtcclxuICAgICAgICBzcmMgPSBpdGVtLnRodW1iO1xyXG5cclxuICAgICAgICBpZiAoIXNyYyAmJiBpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgICAgc3JjID0gaXRlbS5zcmM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0LnB1c2goXHJcbiAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtaW5kZXg9XCInICtcclxuICAgICAgICAgIGkgK1xyXG4gICAgICAgICAgJ1wiJyArXHJcbiAgICAgICAgICAoc3JjICYmIHNyYy5sZW5ndGggPyAnIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTp1cmwoJyArIHNyYyArICcpXCInIDogJ2NsYXNzPVwiZmFuY3lib3gtdGh1bWJzLW1pc3NpbmdcIicpICtcclxuICAgICAgICAgIFwiPjwvYT5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2VsZi4kbGlzdFswXS5pbm5lckhUTUwgPSBsaXN0LmpvaW4oXCJcIik7XHJcblxyXG4gICAgICBpZiAoc2VsZi5vcHRzLmF4aXMgPT09IFwieFwiKSB7XHJcbiAgICAgICAgLy8gU2V0IGZpeGVkIHdpZHRoIGZvciBsaXN0IGVsZW1lbnQgdG8gZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nXHJcbiAgICAgICAgc2VsZi4kbGlzdC53aWR0aChcclxuICAgICAgICAgIHBhcnNlSW50KHNlbGYuJGdyaWQuY3NzKFwicGFkZGluZy1yaWdodFwiKSwgMTApICtcclxuICAgICAgICAgIGluc3RhbmNlLmdyb3VwLmxlbmd0aCAqXHJcbiAgICAgICAgICBzZWxmLiRsaXN0XHJcbiAgICAgICAgICAuY2hpbGRyZW4oKVxyXG4gICAgICAgICAgLmVxKDApXHJcbiAgICAgICAgICAub3V0ZXJXaWR0aCh0cnVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZm9jdXM6IGZ1bmN0aW9uIChkdXJhdGlvbikge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgJGxpc3QgPSBzZWxmLiRsaXN0LFxyXG4gICAgICAgICRncmlkID0gc2VsZi4kZ3JpZCxcclxuICAgICAgICB0aHVtYixcclxuICAgICAgICB0aHVtYlBvcztcclxuXHJcbiAgICAgIGlmICghc2VsZi5pbnN0YW5jZS5jdXJyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aHVtYiA9ICRsaXN0XHJcbiAgICAgICAgLmNoaWxkcmVuKClcclxuICAgICAgICAucmVtb3ZlQ2xhc3MoQ0xBU1NfQUNUSVZFKVxyXG4gICAgICAgIC5maWx0ZXIoJ1tkYXRhLWluZGV4PVwiJyArIHNlbGYuaW5zdGFuY2UuY3VycmVudC5pbmRleCArICdcIl0nKVxyXG4gICAgICAgIC5hZGRDbGFzcyhDTEFTU19BQ1RJVkUpO1xyXG5cclxuICAgICAgdGh1bWJQb3MgPSB0aHVtYi5wb3NpdGlvbigpO1xyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgbmVlZCB0byBzY3JvbGwgdG8gbWFrZSBjdXJyZW50IHRodW1iIHZpc2libGVcclxuICAgICAgaWYgKHNlbGYub3B0cy5heGlzID09PSBcInlcIiAmJiAodGh1bWJQb3MudG9wIDwgMCB8fCB0aHVtYlBvcy50b3AgPiAkbGlzdC5oZWlnaHQoKSAtIHRodW1iLm91dGVySGVpZ2h0KCkpKSB7XHJcbiAgICAgICAgJGxpc3Quc3RvcCgpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBzY3JvbGxUb3A6ICRsaXN0LnNjcm9sbFRvcCgpICsgdGh1bWJQb3MudG9wXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZHVyYXRpb25cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHNlbGYub3B0cy5heGlzID09PSBcInhcIiAmJlxyXG4gICAgICAgICh0aHVtYlBvcy5sZWZ0IDwgJGdyaWQuc2Nyb2xsTGVmdCgpIHx8IHRodW1iUG9zLmxlZnQgPiAkZ3JpZC5zY3JvbGxMZWZ0KCkgKyAoJGdyaWQud2lkdGgoKSAtIHRodW1iLm91dGVyV2lkdGgoKSkpXHJcbiAgICAgICkge1xyXG4gICAgICAgICRsaXN0XHJcbiAgICAgICAgICAucGFyZW50KClcclxuICAgICAgICAgIC5zdG9wKClcclxuICAgICAgICAgIC5hbmltYXRlKHtcclxuICAgICAgICAgICAgICBzY3JvbGxMZWZ0OiB0aHVtYlBvcy5sZWZ0XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGR1cmF0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgIHRoYXQuaW5zdGFuY2UuJHJlZnMuY29udGFpbmVyLnRvZ2dsZUNsYXNzKFwiZmFuY3lib3gtc2hvdy10aHVtYnNcIiwgdGhpcy5pc1Zpc2libGUpO1xyXG5cclxuICAgICAgaWYgKHRoYXQuaXNWaXNpYmxlKSB7XHJcbiAgICAgICAgaWYgKCF0aGF0LiRncmlkKSB7XHJcbiAgICAgICAgICB0aGF0LmNyZWF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhhdC5pbnN0YW5jZS50cmlnZ2VyKFwib25UaHVtYnNTaG93XCIpO1xyXG5cclxuICAgICAgICB0aGF0LmZvY3VzKDApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoYXQuJGdyaWQpIHtcclxuICAgICAgICB0aGF0Lmluc3RhbmNlLnRyaWdnZXIoXCJvblRodW1ic0hpZGVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFVwZGF0ZSBjb250ZW50IHBvc2l0aW9uXHJcbiAgICAgIHRoYXQuaW5zdGFuY2UudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2hvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGlzLmlzVmlzaWJsZSA9ICF0aGlzLmlzVmlzaWJsZTtcclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgJChkb2N1bWVudCkub24oe1xyXG4gICAgXCJvbkluaXQuZmJcIjogZnVuY3Rpb24gKGUsIGluc3RhbmNlKSB7XHJcbiAgICAgIHZhciBUaHVtYnM7XHJcblxyXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgIWluc3RhbmNlLlRodW1icykge1xyXG4gICAgICAgIFRodW1icyA9IG5ldyBGYW5jeVRodW1icyhpbnN0YW5jZSk7XHJcblxyXG4gICAgICAgIGlmIChUaHVtYnMuaXNBY3RpdmUgJiYgVGh1bWJzLm9wdHMuYXV0b1N0YXJ0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBUaHVtYnMuc2hvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBcImJlZm9yZVNob3cuZmJcIjogZnVuY3Rpb24gKGUsIGluc3RhbmNlLCBpdGVtLCBmaXJzdFJ1bikge1xyXG4gICAgICB2YXIgVGh1bWJzID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuVGh1bWJzO1xyXG5cclxuICAgICAgaWYgKFRodW1icyAmJiBUaHVtYnMuaXNWaXNpYmxlKSB7XHJcbiAgICAgICAgVGh1bWJzLmZvY3VzKGZpcnN0UnVuID8gMCA6IDI1MCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgXCJhZnRlcktleWRvd24uZmJcIjogZnVuY3Rpb24gKGUsIGluc3RhbmNlLCBjdXJyZW50LCBrZXlwcmVzcywga2V5Y29kZSkge1xyXG4gICAgICB2YXIgVGh1bWJzID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuVGh1bWJzO1xyXG5cclxuICAgICAgLy8gXCJHXCJcclxuICAgICAgaWYgKFRodW1icyAmJiBUaHVtYnMuaXNBY3RpdmUgJiYga2V5Y29kZSA9PT0gNzEpIHtcclxuICAgICAgICBrZXlwcmVzcy5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICBUaHVtYnMudG9nZ2xlKCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgXCJiZWZvcmVDbG9zZS5mYlwiOiBmdW5jdGlvbiAoZSwgaW5zdGFuY2UpIHtcclxuICAgICAgdmFyIFRodW1icyA9IGluc3RhbmNlICYmIGluc3RhbmNlLlRodW1icztcclxuXHJcbiAgICAgIGlmIChUaHVtYnMgJiYgVGh1bWJzLmlzVmlzaWJsZSAmJiBUaHVtYnMub3B0cy5oaWRlT25DbG9zZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICBUaHVtYnMuJGdyaWQuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn0pKGRvY3VtZW50LCBqUXVlcnkpO1xyXG4vLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vXHJcbi8vIFNoYXJlXHJcbi8vIERpc3BsYXlzIHNpbXBsZSBmb3JtIGZvciBzaGFyaW5nIGN1cnJlbnQgdXJsXHJcbi8vXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbihmdW5jdGlvbiAoZG9jdW1lbnQsICQpIHtcclxuICBcInVzZSBzdHJpY3RcIjtcclxuXHJcbiAgJC5leHRlbmQodHJ1ZSwgJC5mYW5jeWJveC5kZWZhdWx0cywge1xyXG4gICAgYnRuVHBsOiB7XHJcbiAgICAgIHNoYXJlOiAnPGJ1dHRvbiBkYXRhLWZhbmN5Ym94LXNoYXJlIGNsYXNzPVwiZmFuY3lib3gtYnV0dG9uIGZhbmN5Ym94LWJ1dHRvbi0tc2hhcmVcIiB0aXRsZT1cInt7U0hBUkV9fVwiPicgK1xyXG4gICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0yLjU1IDE5YzEuNC04LjQgOS4xLTkuOCAxMS45LTkuOFY1bDcgNy03IDYuM3YtMy41Yy0yLjggMC0xMC41IDIuMS0xMS45IDQuMnpcIi8+PC9zdmc+JyArXHJcbiAgICAgICAgXCI8L2J1dHRvbj5cIlxyXG4gICAgfSxcclxuICAgIHNoYXJlOiB7XHJcbiAgICAgIHVybDogZnVuY3Rpb24gKGluc3RhbmNlLCBpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICghaW5zdGFuY2UuY3VycmVudEhhc2ggJiYgIShpdGVtLnR5cGUgPT09IFwiaW5saW5lXCIgfHwgaXRlbS50eXBlID09PSBcImh0bWxcIikgPyBpdGVtLm9yaWdTcmMgfHwgaXRlbS5zcmMgOiBmYWxzZSkgfHwgd2luZG93LmxvY2F0aW9uXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgICAgdHBsOiAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LXNoYXJlXCI+JyArXHJcbiAgICAgICAgXCI8aDE+e3tTSEFSRX19PC9oMT5cIiArXHJcbiAgICAgICAgXCI8cD5cIiArXHJcbiAgICAgICAgJzxhIGNsYXNzPVwiZmFuY3lib3gtc2hhcmVfX2J1dHRvbiBmYW5jeWJveC1zaGFyZV9fYnV0dG9uLS1mYlwiIGhyZWY9XCJodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA/dT17e3VybH19XCI+JyArXHJcbiAgICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA1MTIgNTEyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJtMjg3IDQ1NnYtMjk5YzAtMjEgNi0zNSAzNS0zNWgzOHYtNjNjLTctMS0yOS0zLTU1LTMtNTQgMC05MSAzMy05MSA5NHYzMDZtMTQzLTI1NGgtMjA1djcyaDE5NlwiIC8+PC9zdmc+JyArXHJcbiAgICAgICAgXCI8c3Bhbj5GYWNlYm9vazwvc3Bhbj5cIiArXHJcbiAgICAgICAgXCI8L2E+XCIgK1xyXG4gICAgICAgICc8YSBjbGFzcz1cImZhbmN5Ym94LXNoYXJlX19idXR0b24gZmFuY3lib3gtc2hhcmVfX2J1dHRvbi0tdHdcIiBocmVmPVwiaHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQ/dXJsPXt7dXJsfX0mdGV4dD17e2Rlc2NyfX1cIj4nICtcclxuICAgICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIm00NTYgMTMzYy0xNCA3LTMxIDExLTQ3IDEzIDE3LTEwIDMwLTI3IDM3LTQ2LTE1IDEwLTM0IDE2LTUyIDIwLTYxLTYyLTE1Ny03LTE0MSA3NS02OC0zLTEyOS0zNS0xNjktODUtMjIgMzctMTEgODYgMjYgMTA5LTEzIDAtMjYtNC0zNy05IDAgMzkgMjggNzIgNjUgODAtMTIgMy0yNSA0LTM3IDIgMTAgMzMgNDEgNTcgNzcgNTctNDIgMzAtNzcgMzgtMTIyIDM0IDE3MCAxMTEgMzc4LTMyIDM1OS0yMDggMTYtMTEgMzAtMjUgNDEtNDJ6XCIgLz48L3N2Zz4nICtcclxuICAgICAgICBcIjxzcGFuPlR3aXR0ZXI8L3NwYW4+XCIgK1xyXG4gICAgICAgIFwiPC9hPlwiICtcclxuICAgICAgICAnPGEgY2xhc3M9XCJmYW5jeWJveC1zaGFyZV9fYnV0dG9uIGZhbmN5Ym94LXNoYXJlX19idXR0b24tLXB0XCIgaHJlZj1cImh0dHBzOi8vd3d3LnBpbnRlcmVzdC5jb20vcGluL2NyZWF0ZS9idXR0b24vP3VybD17e3VybH19JmRlc2NyaXB0aW9uPXt7ZGVzY3J9fSZtZWRpYT17e21lZGlhfX1cIj4nICtcclxuICAgICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIm0yNjUgNTZjLTEwOSAwLTE2NCA3OC0xNjQgMTQ0IDAgMzkgMTUgNzQgNDcgODcgNSAyIDEwIDAgMTItNWw0LTE5YzItNiAxLTgtMy0xMy05LTExLTE1LTI1LTE1LTQ1IDAtNTggNDMtMTEwIDExMy0xMTAgNjIgMCA5NiAzOCA5NiA4OCAwIDY3LTMwIDEyMi03MyAxMjItMjQgMC00Mi0xOS0zNi00NCA2LTI5IDIwLTYwIDIwLTgxIDAtMTktMTAtMzUtMzEtMzUtMjUgMC00NCAyNi00NCA2MCAwIDIxIDcgMzYgNyAzNmwtMzAgMTI1Yy04IDM3LTEgODMgMCA4NyAwIDMgNCA0IDUgMiAyLTMgMzItMzkgNDItNzVsMTYtNjRjOCAxNiAzMSAyOSA1NiAyOSA3NCAwIDEyNC02NyAxMjQtMTU3IDAtNjktNTgtMTMyLTE0Ni0xMzJ6XCIgZmlsbD1cIiNmZmZcIi8+PC9zdmc+JyArXHJcbiAgICAgICAgXCI8c3Bhbj5QaW50ZXJlc3Q8L3NwYW4+XCIgK1xyXG4gICAgICAgIFwiPC9hPlwiICtcclxuICAgICAgICBcIjwvcD5cIiArXHJcbiAgICAgICAgJzxwPjxpbnB1dCBjbGFzcz1cImZhbmN5Ym94LXNoYXJlX19pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJ7e3VybF9yYXd9fVwiIG9uY2xpY2s9XCJzZWxlY3QoKVwiIC8+PC9wPicgK1xyXG4gICAgICAgIFwiPC9kaXY+XCJcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gZXNjYXBlSHRtbChzdHJpbmcpIHtcclxuICAgIHZhciBlbnRpdHlNYXAgPSB7XHJcbiAgICAgIFwiJlwiOiBcIiZhbXA7XCIsXHJcbiAgICAgIFwiPFwiOiBcIiZsdDtcIixcclxuICAgICAgXCI+XCI6IFwiJmd0O1wiLFxyXG4gICAgICAnXCInOiBcIiZxdW90O1wiLFxyXG4gICAgICBcIidcIjogXCImIzM5O1wiLFxyXG4gICAgICBcIi9cIjogXCImI3gyRjtcIixcclxuICAgICAgXCJgXCI6IFwiJiN4NjA7XCIsXHJcbiAgICAgIFwiPVwiOiBcIiYjeDNEO1wiXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKC9bJjw+XCInYD1cXC9dL2csIGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgIHJldHVybiBlbnRpdHlNYXBbc107XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1mYW5jeWJveC1zaGFyZV1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGluc3RhbmNlID0gJC5mYW5jeWJveC5nZXRJbnN0YW5jZSgpLFxyXG4gICAgICBjdXJyZW50ID0gaW5zdGFuY2UuY3VycmVudCB8fCBudWxsLFxyXG4gICAgICB1cmwsXHJcbiAgICAgIHRwbDtcclxuXHJcbiAgICBpZiAoIWN1cnJlbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgkLnR5cGUoY3VycmVudC5vcHRzLnNoYXJlLnVybCkgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICB1cmwgPSBjdXJyZW50Lm9wdHMuc2hhcmUudXJsLmFwcGx5KGN1cnJlbnQsIFtpbnN0YW5jZSwgY3VycmVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRwbCA9IGN1cnJlbnQub3B0cy5zaGFyZS50cGxcclxuICAgICAgLnJlcGxhY2UoL1xce1xce21lZGlhXFx9XFx9L2csIGN1cnJlbnQudHlwZSA9PT0gXCJpbWFnZVwiID8gZW5jb2RlVVJJQ29tcG9uZW50KGN1cnJlbnQuc3JjKSA6IFwiXCIpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHtcXHt1cmxcXH1cXH0vZywgZW5jb2RlVVJJQ29tcG9uZW50KHVybCkpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHtcXHt1cmxfcmF3XFx9XFx9L2csIGVzY2FwZUh0bWwodXJsKSlcclxuICAgICAgLnJlcGxhY2UoL1xce1xce2Rlc2NyXFx9XFx9L2csIGluc3RhbmNlLiRjYXB0aW9uID8gZW5jb2RlVVJJQ29tcG9uZW50KGluc3RhbmNlLiRjYXB0aW9uLnRleHQoKSkgOiBcIlwiKTtcclxuXHJcbiAgICAkLmZhbmN5Ym94Lm9wZW4oe1xyXG4gICAgICBzcmM6IGluc3RhbmNlLnRyYW5zbGF0ZShpbnN0YW5jZSwgdHBsKSxcclxuICAgICAgdHlwZTogXCJodG1sXCIsXHJcbiAgICAgIG9wdHM6IHtcclxuICAgICAgICB0b3VjaDogZmFsc2UsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0OiBmYWxzZSxcclxuICAgICAgICBhZnRlckxvYWQ6IGZ1bmN0aW9uIChzaGFyZUluc3RhbmNlLCBzaGFyZUN1cnJlbnQpIHtcclxuICAgICAgICAgIC8vIENsb3NlIHNlbGYgaWYgcGFyZW50IGluc3RhbmNlIGlzIGNsb3NpbmdcclxuICAgICAgICAgIGluc3RhbmNlLiRyZWZzLmNvbnRhaW5lci5vbmUoXCJiZWZvcmVDbG9zZS5mYlwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNoYXJlSW5zdGFuY2UuY2xvc2UobnVsbCwgMCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBPcGVuaW5nIGxpbmtzIGluIGEgcG9wdXAgd2luZG93XHJcbiAgICAgICAgICBzaGFyZUN1cnJlbnQuJGNvbnRlbnQuZmluZChcIi5mYW5jeWJveC1zaGFyZV9fYnV0dG9uXCIpLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5ocmVmLCBcIlNoYXJlXCIsIFwid2lkdGg9NTUwLCBoZWlnaHQ9NDUwXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vYmlsZToge1xyXG4gICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn0pKGRvY3VtZW50LCBqUXVlcnkpO1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vL1xyXG4vLyBIYXNoXHJcbi8vIEVuYWJsZXMgbGlua2luZyB0byBlYWNoIG1vZGFsXHJcbi8vXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbihmdW5jdGlvbiAod2luZG93LCBkb2N1bWVudCwgJCkge1xyXG4gIFwidXNlIHN0cmljdFwiO1xyXG5cclxuICAvLyBTaW1wbGUgJC5lc2NhcGVTZWxlY3RvciBwb2x5ZmlsbCAoZm9yIGpRdWVyeSBwcmlvciB2MylcclxuICBpZiAoISQuZXNjYXBlU2VsZWN0b3IpIHtcclxuICAgICQuZXNjYXBlU2VsZWN0b3IgPSBmdW5jdGlvbiAoc2VsKSB7XHJcbiAgICAgIHZhciByY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFx4ODAtXFx1RkZGRlxcdy1dL2c7XHJcbiAgICAgIHZhciBmY3NzZXNjYXBlID0gZnVuY3Rpb24gKGNoLCBhc0NvZGVQb2ludCkge1xyXG4gICAgICAgIGlmIChhc0NvZGVQb2ludCkge1xyXG4gICAgICAgICAgLy8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXHJcbiAgICAgICAgICBpZiAoY2ggPT09IFwiXFwwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXFx1RkZGRFwiO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICByZXR1cm4gY2guc2xpY2UoMCwgLTEpICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KGNoLmxlbmd0aCAtIDEpLnRvU3RyaW5nKDE2KSArIFwiIFwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxyXG4gICAgICAgIHJldHVybiBcIlxcXFxcIiArIGNoO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIChzZWwgKyBcIlwiKS5yZXBsYWNlKHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBpbmZvIGFib3V0IGdhbGxlcnkgbmFtZSBhbmQgY3VycmVudCBpbmRleCBmcm9tIHVybFxyXG4gIGZ1bmN0aW9uIHBhcnNlVXJsKCkge1xyXG4gICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHIoMSksXHJcbiAgICAgIHJleiA9IGhhc2guc3BsaXQoXCItXCIpLFxyXG4gICAgICBpbmRleCA9IHJlei5sZW5ndGggPiAxICYmIC9eXFwrP1xcZCskLy50ZXN0KHJleltyZXoubGVuZ3RoIC0gMV0pID8gcGFyc2VJbnQocmV6LnBvcCgtMSksIDEwKSB8fCAxIDogMSxcclxuICAgICAgZ2FsbGVyeSA9IHJlei5qb2luKFwiLVwiKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAvKiBJbmRleCBpcyBzdGFydGluZyBmcm9tIDEgKi9cclxuICAgICAgaW5kZXg6IGluZGV4IDwgMSA/IDEgOiBpbmRleCxcclxuICAgICAgZ2FsbGVyeTogZ2FsbGVyeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIFRyaWdnZXIgY2xpY2sgZXZudCBvbiBsaW5rcyB0byBvcGVuIG5ldyBmYW5jeUJveCBpbnN0YW5jZVxyXG4gIGZ1bmN0aW9uIHRyaWdnZXJGcm9tVXJsKHVybCkge1xyXG4gICAgaWYgKHVybC5nYWxsZXJ5ICE9PSBcIlwiKSB7XHJcbiAgICAgIC8vIElmIHdlIGNhbiBmaW5kIGVsZW1lbnQgbWF0Y2hpbmcgJ2RhdGEtZmFuY3lib3gnIGF0cmlidXRlLFxyXG4gICAgICAvLyB0aGVuIHRyaWdnZXJpbmcgY2xpY2sgZXZlbnQgc2hvdWxkIHN0YXJ0IGZhbmN5Qm94XHJcbiAgICAgICQoXCJbZGF0YS1mYW5jeWJveD0nXCIgKyAkLmVzY2FwZVNlbGVjdG9yKHVybC5nYWxsZXJ5KSArIFwiJ11cIilcclxuICAgICAgICAuZXEodXJsLmluZGV4IC0gMSlcclxuICAgICAgICAuZm9jdXMoKVxyXG4gICAgICAgIC50cmlnZ2VyKFwiY2xpY2suZmItc3RhcnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgZ2FsbGVyeSBuYW1lIGZyb20gY3VycmVudCBpbnN0YW5jZVxyXG4gIGZ1bmN0aW9uIGdldEdhbGxlcnlJRChpbnN0YW5jZSkge1xyXG4gICAgdmFyIG9wdHMsIHJldDtcclxuXHJcbiAgICBpZiAoIWluc3RhbmNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRzID0gaW5zdGFuY2UuY3VycmVudCA/IGluc3RhbmNlLmN1cnJlbnQub3B0cyA6IGluc3RhbmNlLm9wdHM7XHJcbiAgICByZXQgPSBvcHRzLmhhc2ggfHwgKG9wdHMuJG9yaWcgPyBvcHRzLiRvcmlnLmRhdGEoXCJmYW5jeWJveFwiKSB8fCBvcHRzLiRvcmlnLmRhdGEoXCJmYW5jeWJveC10cmlnZ2VyXCIpIDogXCJcIik7XHJcblxyXG4gICAgcmV0dXJuIHJldCA9PT0gXCJcIiA/IGZhbHNlIDogcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8gU3RhcnQgd2hlbiBET00gYmVjb21lcyByZWFkeVxyXG4gICQoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgZGlzYWJsZWQgdGhpcyBtb2R1bGVcclxuICAgIGlmICgkLmZhbmN5Ym94LmRlZmF1bHRzLmhhc2ggPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgaGFzaCB3aGVuIG9wZW5pbmcvY2xvc2luZyBmYW5jeUJveFxyXG4gICAgJChkb2N1bWVudCkub24oe1xyXG4gICAgICBcIm9uSW5pdC5mYlwiOiBmdW5jdGlvbiAoZSwgaW5zdGFuY2UpIHtcclxuICAgICAgICB2YXIgdXJsLCBnYWxsZXJ5O1xyXG5cclxuICAgICAgICBpZiAoaW5zdGFuY2UuZ3JvdXBbaW5zdGFuY2UuY3VyckluZGV4XS5vcHRzLmhhc2ggPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cmwgPSBwYXJzZVVybCgpO1xyXG4gICAgICAgIGdhbGxlcnkgPSBnZXRHYWxsZXJ5SUQoaW5zdGFuY2UpO1xyXG5cclxuICAgICAgICAvLyBNYWtlIHN1cmUgZ2FsbGVyeSBzdGFydCBpbmRleCBtYXRjaGVzIGluZGV4IGZyb20gaGFzaFxyXG4gICAgICAgIGlmIChnYWxsZXJ5ICYmIHVybC5nYWxsZXJ5ICYmIGdhbGxlcnkgPT0gdXJsLmdhbGxlcnkpIHtcclxuICAgICAgICAgIGluc3RhbmNlLmN1cnJJbmRleCA9IHVybC5pbmRleCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgXCJiZWZvcmVTaG93LmZiXCI6IGZ1bmN0aW9uIChlLCBpbnN0YW5jZSwgY3VycmVudCwgZmlyc3RSdW4pIHtcclxuICAgICAgICB2YXIgZ2FsbGVyeTtcclxuXHJcbiAgICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQub3B0cy5oYXNoID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgbmVlZCB0byB1cGRhdGUgd2luZG93IGhhc2hcclxuICAgICAgICBnYWxsZXJ5ID0gZ2V0R2FsbGVyeUlEKGluc3RhbmNlKTtcclxuXHJcbiAgICAgICAgaWYgKCFnYWxsZXJ5KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWYXJpYWJsZSBjb250YWluaW5nIGxhc3QgaGFzaCB2YWx1ZSBzZXQgYnkgZmFuY3lCb3hcclxuICAgICAgICAvLyBJdCB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGZhbmN5Qm94IG5lZWRzIHRvIGNsb3NlIGFmdGVyIGhhc2ggY2hhbmdlIGlzIGRldGVjdGVkXHJcbiAgICAgICAgaW5zdGFuY2UuY3VycmVudEhhc2ggPSBnYWxsZXJ5ICsgKGluc3RhbmNlLmdyb3VwLmxlbmd0aCA+IDEgPyBcIi1cIiArIChjdXJyZW50LmluZGV4ICsgMSkgOiBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8gSWYgY3VycmVudCBoYXNoIGlzIHRoZSBzYW1lICh0aGlzIGluc3RhbmNlIG1vc3QgbGlrZWx5IGlzIG9wZW5lZCBieSBoYXNoY2hhbmdlKSwgdGhlbiBkbyBub3RoaW5nXHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSBcIiNcIiArIGluc3RhbmNlLmN1cnJlbnRIYXNoKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlyc3RSdW4gJiYgIWluc3RhbmNlLm9yaWdIYXNoKSB7XHJcbiAgICAgICAgICBpbnN0YW5jZS5vcmlnSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGluc3RhbmNlLmhhc2hUaW1lcikge1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGluc3RhbmNlLmhhc2hUaW1lcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgaGFzaFxyXG4gICAgICAgIGluc3RhbmNlLmhhc2hUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKFwicmVwbGFjZVN0YXRlXCIgaW4gd2luZG93Lmhpc3RvcnkpIHtcclxuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnlbZmlyc3RSdW4gPyBcInB1c2hTdGF0ZVwiIDogXCJyZXBsYWNlU3RhdGVcIl0oe30sXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUsXHJcbiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIFwiI1wiICsgaW5zdGFuY2UuY3VycmVudEhhc2hcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaXJzdFJ1bikge1xyXG4gICAgICAgICAgICAgIGluc3RhbmNlLmhhc0NyZWF0ZWRIaXN0b3J5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBpbnN0YW5jZS5jdXJyZW50SGFzaDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpbnN0YW5jZS5oYXNoVGltZXIgPSBudWxsO1xyXG4gICAgICAgIH0sIDMwMCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBcImJlZm9yZUNsb3NlLmZiXCI6IGZ1bmN0aW9uIChlLCBpbnN0YW5jZSwgY3VycmVudCkge1xyXG4gICAgICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50Lm9wdHMuaGFzaCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsZWFyVGltZW91dChpbnN0YW5jZS5oYXNoVGltZXIpO1xyXG5cclxuICAgICAgICAvLyBHb3RvIHByZXZpb3VzIGhpc3RvcnkgZW50cnlcclxuICAgICAgICBpZiAoaW5zdGFuY2UuY3VycmVudEhhc2ggJiYgaW5zdGFuY2UuaGFzQ3JlYXRlZEhpc3RvcnkpIHtcclxuICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmN1cnJlbnRIYXNoKSB7XHJcbiAgICAgICAgICBpZiAoXCJyZXBsYWNlU3RhdGVcIiBpbiB3aW5kb3cuaGlzdG9yeSkge1xyXG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgKGluc3RhbmNlLm9yaWdIYXNoIHx8IFwiXCIpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaW5zdGFuY2Uub3JpZ0hhc2g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbnN0YW5jZS5jdXJyZW50SGFzaCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIG5lZWQgdG8gc3RhcnQvY2xvc2UgYWZ0ZXIgdXJsIGhhcyBjaGFuZ2VkXHJcbiAgICAkKHdpbmRvdykub24oXCJoYXNoY2hhbmdlLmZiXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHVybCA9IHBhcnNlVXJsKCksXHJcbiAgICAgICAgZmIgPSBudWxsO1xyXG5cclxuICAgICAgLy8gRmluZCBsYXN0IGZhbmN5Qm94IGluc3RhbmNlIHRoYXQgaGFzIFwiaGFzaFwiXHJcbiAgICAgICQuZWFjaChcclxuICAgICAgICAkKFwiLmZhbmN5Ym94LWNvbnRhaW5lclwiKVxyXG4gICAgICAgIC5nZXQoKVxyXG4gICAgICAgIC5yZXZlcnNlKCksXHJcbiAgICAgICAgZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xyXG4gICAgICAgICAgdmFyIHRtcCA9ICQodmFsdWUpLmRhdGEoXCJGYW5jeUJveFwiKTtcclxuXHJcbiAgICAgICAgICBpZiAodG1wICYmIHRtcC5jdXJyZW50SGFzaCkge1xyXG4gICAgICAgICAgICBmYiA9IHRtcDtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChmYikge1xyXG4gICAgICAgIC8vIE5vdywgY29tcGFyZSBoYXNoIHZhbHVlc1xyXG4gICAgICAgIGlmIChmYi5jdXJyZW50SGFzaCAhPT0gdXJsLmdhbGxlcnkgKyBcIi1cIiArIHVybC5pbmRleCAmJiAhKHVybC5pbmRleCA9PT0gMSAmJiBmYi5jdXJyZW50SGFzaCA9PSB1cmwuZ2FsbGVyeSkpIHtcclxuICAgICAgICAgIGZiLmN1cnJlbnRIYXNoID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBmYi5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh1cmwuZ2FsbGVyeSAhPT0gXCJcIikge1xyXG4gICAgICAgIHRyaWdnZXJGcm9tVXJsKHVybCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENoZWNrIGN1cnJlbnQgaGFzaCBhbmQgdHJpZ2dlciBjbGljayBldmVudCBvbiBtYXRjaGluZyBlbGVtZW50IHRvIHN0YXJ0IGZhbmN5Qm94LCBpZiBuZWVkZWRcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoISQuZmFuY3lib3guZ2V0SW5zdGFuY2UoKSkge1xyXG4gICAgICAgIHRyaWdnZXJGcm9tVXJsKHBhcnNlVXJsKCkpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MCk7XHJcbiAgfSk7XHJcbn0pKHdpbmRvdywgZG9jdW1lbnQsIGpRdWVyeSk7XHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vXHJcbi8vIFdoZWVsXHJcbi8vIEJhc2ljIG1vdXNlIHdlaGVlbCBzdXBwb3J0IGZvciBnYWxsZXJ5IG5hdmlnYXRpb25cclxuLy9cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuKGZ1bmN0aW9uIChkb2N1bWVudCwgJCkge1xyXG4gIFwidXNlIHN0cmljdFwiO1xyXG5cclxuICB2YXIgcHJldlRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgJChkb2N1bWVudCkub24oe1xyXG4gICAgXCJvbkluaXQuZmJcIjogZnVuY3Rpb24gKGUsIGluc3RhbmNlLCBjdXJyZW50KSB7XHJcbiAgICAgIGluc3RhbmNlLiRyZWZzLnN0YWdlLm9uKFwibW91c2V3aGVlbCBET01Nb3VzZVNjcm9sbCB3aGVlbCBNb3pNb3VzZVBpeGVsU2Nyb2xsXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBpbnN0YW5jZS5jdXJyZW50LFxyXG4gICAgICAgICAgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgaWYgKGluc3RhbmNlLmdyb3VwLmxlbmd0aCA8IDIgfHwgY3VycmVudC5vcHRzLndoZWVsID09PSBmYWxzZSB8fCAoY3VycmVudC5vcHRzLndoZWVsID09PSBcImF1dG9cIiAmJiBjdXJyZW50LnR5cGUgIT09IFwiaW1hZ2VcIikpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudC4kc2xpZGUuaGFzQ2xhc3MoXCJmYW5jeWJveC1hbmltYXRlZFwiKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZSA9IGUub3JpZ2luYWxFdmVudCB8fCBlO1xyXG5cclxuICAgICAgICBpZiAoY3VyclRpbWUgLSBwcmV2VGltZSA8IDI1MCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJldlRpbWUgPSBjdXJyVGltZTtcclxuXHJcbiAgICAgICAgaW5zdGFuY2VbKC1lLmRlbHRhWSB8fCAtZS5kZWx0YVggfHwgZS53aGVlbERlbHRhIHx8IC1lLmRldGFpbCkgPCAwID8gXCJuZXh0XCIgOiBcInByZXZpb3VzXCJdKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59KShkb2N1bWVudCwgalF1ZXJ5KTsiLCIvKiFcclxuICogalF1ZXJ5IEZvcm0gUGx1Z2luXHJcbiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxXHJcbiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cFxyXG4gKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vXHJcbiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtXHJcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlXHJcbiAqL1xyXG4vKmdsb2JhbCBBY3RpdmVYT2JqZWN0ICovXHJcblxyXG4vLyBBTUQgc3VwcG9ydFxyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICAvLyB1c2luZyBBTUQ7IHJlZ2lzdGVyIGFzIGFub24gbW9kdWxlXHJcbiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBubyBBTUQ7IGludm9rZSBkaXJlY3RseVxyXG4gICAgICAgIGZhY3RvcnkoICh0eXBlb2YoalF1ZXJ5KSAhPSAndW5kZWZpbmVkJykgPyBqUXVlcnkgOiB3aW5kb3cuWmVwdG8gKTtcclxuICAgIH1cclxufVxyXG5cclxuKGZ1bmN0aW9uKCQpIHtcclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKlxyXG4gICAgVXNhZ2UgTm90ZTpcclxuICAgIC0tLS0tLS0tLS0tXHJcbiAgICBEbyBub3QgdXNlIGJvdGggYWpheFN1Ym1pdCBhbmQgYWpheEZvcm0gb24gdGhlIHNhbWUgZm9ybS4gIFRoZXNlXHJcbiAgICBmdW5jdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIFVzZSBhamF4U3VibWl0IGlmIHlvdSB3YW50XHJcbiAgICB0byBiaW5kIHlvdXIgb3duIHN1Ym1pdCBoYW5kbGVyIHRvIHRoZSBmb3JtLiAgRm9yIGV4YW1wbGUsXHJcblxyXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgJCgnI215Rm9ybScpLm9uKCdzdWJtaXQnLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gPC0tIGltcG9ydGFudFxyXG4gICAgICAgICAgICAkKHRoaXMpLmFqYXhTdWJtaXQoe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiAnI291dHB1dCdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBVc2UgYWpheEZvcm0gd2hlbiB5b3Ugd2FudCB0aGUgcGx1Z2luIHRvIG1hbmFnZSBhbGwgdGhlIGV2ZW50IGJpbmRpbmdcclxuICAgIGZvciB5b3UuICBGb3IgZXhhbXBsZSxcclxuXHJcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcclxuICAgICAgICAkKCcjbXlGb3JtJykuYWpheEZvcm0oe1xyXG4gICAgICAgICAgICB0YXJnZXQ6ICcjb3V0cHV0J1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgWW91IGNhbiBhbHNvIHVzZSBhamF4Rm9ybSB3aXRoIGRlbGVnYXRpb24gKHJlcXVpcmVzIGpRdWVyeSB2MS43KyksIHNvIHRoZVxyXG4gICAgZm9ybSBkb2VzIG5vdCBoYXZlIHRvIGV4aXN0IHdoZW4geW91IGludm9rZSBhamF4Rm9ybTpcclxuXHJcbiAgICAkKCcjbXlGb3JtJykuYWpheEZvcm0oe1xyXG4gICAgICAgIGRlbGVnYXRpb246IHRydWUsXHJcbiAgICAgICAgdGFyZ2V0OiAnI291dHB1dCdcclxuICAgIH0pO1xyXG5cclxuICAgIFdoZW4gdXNpbmcgYWpheEZvcm0sIHRoZSBhamF4U3VibWl0IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBmb3IgeW91XHJcbiAgICBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS5cclxuKi9cclxuXHJcbi8qKlxyXG4gKiBGZWF0dXJlIGRldGVjdGlvblxyXG4gKi9cclxudmFyIGZlYXR1cmUgPSB7fTtcclxuZmVhdHVyZS5maWxlYXBpID0gJChcIjxpbnB1dCB0eXBlPSdmaWxlJy8+XCIpLmdldCgwKS5maWxlcyAhPT0gdW5kZWZpbmVkO1xyXG5mZWF0dXJlLmZvcm1kYXRhID0gd2luZG93LkZvcm1EYXRhICE9PSB1bmRlZmluZWQ7XHJcblxyXG52YXIgaGFzUHJvcCA9ICEhJC5mbi5wcm9wO1xyXG5cclxuLy8gYXR0cjIgdXNlcyBwcm9wIHdoZW4gaXQgY2FuIGJ1dCBjaGVja3MgdGhlIHJldHVybiB0eXBlIGZvclxyXG4vLyBhbiBleHBlY3RlZCBzdHJpbmcuICB0aGlzIGFjY291bnRzIGZvciB0aGUgY2FzZSB3aGVyZSBhIGZvcm0gXHJcbi8vIGNvbnRhaW5zIGlucHV0cyB3aXRoIG5hbWVzIGxpa2UgXCJhY3Rpb25cIiBvciBcIm1ldGhvZFwiOyBpbiB0aG9zZVxyXG4vLyBjYXNlcyBcInByb3BcIiByZXR1cm5zIHRoZSBlbGVtZW50XHJcbiQuZm4uYXR0cjIgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICggISBoYXNQcm9wIClcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB2YXIgdmFsID0gdGhpcy5wcm9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICBpZiAoICggdmFsICYmIHZhbC5qcXVlcnkgKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyApXHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIHJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBhamF4U3VibWl0KCkgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGltbWVkaWF0ZWx5IHN1Ym1pdHRpbmdcclxuICogYW4gSFRNTCBmb3JtIHVzaW5nIEFKQVguXHJcbiAqL1xyXG4kLmZuLmFqYXhTdWJtaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAvKmpzaGludCBzY3JpcHR1cmw6dHJ1ZSAqL1xyXG5cclxuICAgIC8vIGZhc3QgZmFpbCBpZiBub3RoaW5nIHNlbGVjdGVkIChodHRwOi8vZGV2LmpxdWVyeS5jb20vdGlja2V0LzI3NTIpXHJcbiAgICBpZiAoIXRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbG9nKCdhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQnKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbWV0aG9kLCBhY3Rpb24sIHVybCwgJGZvcm0gPSB0aGlzO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHsgc3VjY2Vzczogb3B0aW9ucyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIG9wdGlvbnMgPT09IHVuZGVmaW5lZCApIHtcclxuICAgICAgICBvcHRpb25zID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgbWV0aG9kID0gb3B0aW9ucy50eXBlIHx8IHRoaXMuYXR0cjIoJ21ldGhvZCcpO1xyXG4gICAgYWN0aW9uID0gb3B0aW9ucy51cmwgIHx8IHRoaXMuYXR0cjIoJ2FjdGlvbicpO1xyXG5cclxuICAgIHVybCA9ICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykgPyAkLnRyaW0oYWN0aW9uKSA6ICcnO1xyXG4gICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICcnO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICAgIC8vIGNsZWFuIHVybCAoZG9uJ3QgaW5jbHVkZSBoYXNoIHZhdWUpXHJcbiAgICAgICAgdXJsID0gKHVybC5tYXRjaCgvXihbXiNdKykvKXx8W10pWzFdO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7XHJcbiAgICAgICAgdXJsOiAgdXJsLFxyXG4gICAgICAgIHN1Y2Nlc3M6ICQuYWpheFNldHRpbmdzLnN1Y2Nlc3MsXHJcbiAgICAgICAgdHlwZTogbWV0aG9kIHx8ICQuYWpheFNldHRpbmdzLnR5cGUsXHJcbiAgICAgICAgaWZyYW1lU3JjOiAvXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnJykgPyAnamF2YXNjcmlwdDpmYWxzZScgOiAnYWJvdXQ6YmxhbmsnXHJcbiAgICB9LCBvcHRpb25zKTtcclxuXHJcbiAgICAvLyBob29rIGZvciBtYW5pcHVsYXRpbmcgdGhlIGZvcm0gZGF0YSBiZWZvcmUgaXQgaXMgZXh0cmFjdGVkO1xyXG4gICAgLy8gY29udmVuaWVudCBmb3IgdXNlIHdpdGggcmljaCBlZGl0b3JzIGxpa2UgdGlueU1DRSBvciBGQ0tFZGl0b3JcclxuICAgIHZhciB2ZXRvID0ge307XHJcbiAgICB0aGlzLnRyaWdnZXIoJ2Zvcm0tcHJlLXNlcmlhbGl6ZScsIFt0aGlzLCBvcHRpb25zLCB2ZXRvXSk7XHJcbiAgICBpZiAodmV0by52ZXRvKSB7XHJcbiAgICAgICAgbG9nKCdhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlcicpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByb3ZpZGUgb3Bwb3J0dW5pdHkgdG8gYWx0ZXIgZm9ybSBkYXRhIGJlZm9yZSBpdCBpcyBzZXJpYWxpemVkXHJcbiAgICBpZiAob3B0aW9ucy5iZWZvcmVTZXJpYWxpemUgJiYgb3B0aW9ucy5iZWZvcmVTZXJpYWxpemUodGhpcywgb3B0aW9ucykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgbG9nKCdhamF4U3VibWl0OiBzdWJtaXQgYWJvcnRlZCB2aWEgYmVmb3JlU2VyaWFsaXplIGNhbGxiYWNrJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRyYWRpdGlvbmFsID0gb3B0aW9ucy50cmFkaXRpb25hbDtcclxuICAgIGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHtcclxuICAgICAgICB0cmFkaXRpb25hbCA9ICQuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBlbGVtZW50cyA9IFtdO1xyXG4gICAgdmFyIHF4LCBhID0gdGhpcy5mb3JtVG9BcnJheShvcHRpb25zLnNlbWFudGljLCBlbGVtZW50cyk7XHJcbiAgICBpZiAob3B0aW9ucy5kYXRhKSB7XHJcbiAgICAgICAgb3B0aW9ucy5leHRyYURhdGEgPSBvcHRpb25zLmRhdGE7XHJcbiAgICAgICAgcXggPSAkLnBhcmFtKG9wdGlvbnMuZGF0YSwgdHJhZGl0aW9uYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdpdmUgcHJlLXN1Ym1pdCBjYWxsYmFjayBhbiBvcHBvcnR1bml0eSB0byBhYm9ydCB0aGUgc3VibWl0XHJcbiAgICBpZiAob3B0aW9ucy5iZWZvcmVTdWJtaXQgJiYgb3B0aW9ucy5iZWZvcmVTdWJtaXQoYSwgdGhpcywgb3B0aW9ucykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgbG9nKCdhamF4U3VibWl0OiBzdWJtaXQgYWJvcnRlZCB2aWEgYmVmb3JlU3VibWl0IGNhbGxiYWNrJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlyZSB2ZXRvYWJsZSAndmFsaWRhdGUnIGV2ZW50XHJcbiAgICB0aGlzLnRyaWdnZXIoJ2Zvcm0tc3VibWl0LXZhbGlkYXRlJywgW2EsIHRoaXMsIG9wdGlvbnMsIHZldG9dKTtcclxuICAgIGlmICh2ZXRvLnZldG8pIHtcclxuICAgICAgICBsb2coJ2FqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tc3VibWl0LXZhbGlkYXRlIHRyaWdnZXInKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcSA9ICQucGFyYW0oYSwgdHJhZGl0aW9uYWwpO1xyXG4gICAgaWYgKHF4KSB7XHJcbiAgICAgICAgcSA9ICggcSA/IChxICsgJyYnICsgcXgpIDogcXggKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLnR5cGUudG9VcHBlckNhc2UoKSA9PSAnR0VUJykge1xyXG4gICAgICAgIG9wdGlvbnMudXJsICs9IChvcHRpb25zLnVybC5pbmRleE9mKCc/JykgPj0gMCA/ICcmJyA6ICc/JykgKyBxO1xyXG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG51bGw7ICAvLyBkYXRhIGlzIG51bGwgZm9yICdnZXQnXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBvcHRpb25zLmRhdGEgPSBxOyAvLyBkYXRhIGlzIHRoZSBxdWVyeSBzdHJpbmcgZm9yICdwb3N0J1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYWxsYmFja3MgPSBbXTtcclxuICAgIGlmIChvcHRpb25zLnJlc2V0Rm9ybSkge1xyXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCkgeyAkZm9ybS5yZXNldEZvcm0oKTsgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5jbGVhckZvcm0pIHtcclxuICAgICAgICBjYWxsYmFja3MucHVzaChmdW5jdGlvbigpIHsgJGZvcm0uY2xlYXJGb3JtKG9wdGlvbnMuaW5jbHVkZUhpZGRlbik7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHBlcmZvcm0gYSBsb2FkIG9uIHRoZSB0YXJnZXQgb25seSBpZiBkYXRhVHlwZSBpcyBub3QgcHJvdmlkZWRcclxuICAgIGlmICghb3B0aW9ucy5kYXRhVHlwZSAmJiBvcHRpb25zLnRhcmdldCkge1xyXG4gICAgICAgIHZhciBvbGRTdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzIHx8IGZ1bmN0aW9uKCl7fTtcclxuICAgICAgICBjYWxsYmFja3MucHVzaChmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBmbiA9IG9wdGlvbnMucmVwbGFjZVRhcmdldCA/ICdyZXBsYWNlV2l0aCcgOiAnaHRtbCc7XHJcbiAgICAgICAgICAgICQob3B0aW9ucy50YXJnZXQpW2ZuXShkYXRhKS5lYWNoKG9sZFN1Y2Nlc3MsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcHRpb25zLnN1Y2Nlc3MpIHtcclxuICAgICAgICBjYWxsYmFja3MucHVzaChvcHRpb25zLnN1Y2Nlc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgeGhyKSB7IC8vIGpRdWVyeSAxLjQrIHBhc3NlcyB4aHIgYXMgM3JkIGFyZ1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0IHx8IHRoaXMgOyAgICAvLyBqUXVlcnkgMS40KyBzdXBwb3J0cyBzY29wZSBjb250ZXh0XHJcbiAgICAgICAgZm9yICh2YXIgaT0wLCBtYXg9Y2FsbGJhY2tzLmxlbmd0aDsgaSA8IG1heDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5hcHBseShjb250ZXh0LCBbZGF0YSwgc3RhdHVzLCB4aHIgfHwgJGZvcm0sICRmb3JtXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5lcnJvcikge1xyXG4gICAgICAgIHZhciBvbGRFcnJvciA9IG9wdGlvbnMuZXJyb3I7XHJcbiAgICAgICAgb3B0aW9ucy5lcnJvciA9IGZ1bmN0aW9uKHhociwgc3RhdHVzLCBlcnJvcikge1xyXG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMuY29udGV4dCB8fCB0aGlzO1xyXG4gICAgICAgICAgICBvbGRFcnJvci5hcHBseShjb250ZXh0LCBbeGhyLCBzdGF0dXMsIGVycm9yLCAkZm9ybV0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgIGlmIChvcHRpb25zLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgdmFyIG9sZENvbXBsZXRlID0gb3B0aW9ucy5jb21wbGV0ZTtcclxuICAgICAgICBvcHRpb25zLmNvbXBsZXRlID0gZnVuY3Rpb24oeGhyLCBzdGF0dXMpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHQgfHwgdGhpcztcclxuICAgICAgICAgICAgb2xkQ29tcGxldGUuYXBwbHkoY29udGV4dCwgW3hociwgc3RhdHVzLCAkZm9ybV0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXJlIHRoZXJlIGZpbGVzIHRvIHVwbG9hZD9cclxuXHJcbiAgICAvLyBbdmFsdWVdIChpc3N1ZSAjMTEzKSwgYWxzbyBzZWUgY29tbWVudDpcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybS9jb21taXQvNTg4MzA2YWVkYmExZGUwMTM4ODAzMmQ1ZjQyYTYwMTU5ZWVhOTIyOCNjb21taXRjb21tZW50LTIxODAyMTlcclxuICAgIHZhciBmaWxlSW5wdXRzID0gJCgnaW5wdXRbdHlwZT1maWxlXTplbmFibGVkJywgdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gJCh0aGlzKS52YWwoKSAhPT0gJyc7IH0pO1xyXG5cclxuICAgIHZhciBoYXNGaWxlSW5wdXRzID0gZmlsZUlucHV0cy5sZW5ndGggPiAwO1xyXG4gICAgdmFyIG1wID0gJ211bHRpcGFydC9mb3JtLWRhdGEnO1xyXG4gICAgdmFyIG11bHRpcGFydCA9ICgkZm9ybS5hdHRyKCdlbmN0eXBlJykgPT0gbXAgfHwgJGZvcm0uYXR0cignZW5jb2RpbmcnKSA9PSBtcCk7XHJcblxyXG4gICAgdmFyIGZpbGVBUEkgPSBmZWF0dXJlLmZpbGVhcGkgJiYgZmVhdHVyZS5mb3JtZGF0YTtcclxuICAgIGxvZyhcImZpbGVBUEkgOlwiICsgZmlsZUFQSSk7XHJcbiAgICB2YXIgc2hvdWxkVXNlRnJhbWUgPSAoaGFzRmlsZUlucHV0cyB8fCBtdWx0aXBhcnQpICYmICFmaWxlQVBJO1xyXG5cclxuICAgIHZhciBqcXhocjtcclxuXHJcbiAgICAvLyBvcHRpb25zLmlmcmFtZSBhbGxvd3MgdXNlciB0byBmb3JjZSBpZnJhbWUgbW9kZVxyXG4gICAgLy8gMDYtTk9WLTA5OiBub3cgZGVmYXVsdGluZyB0byBpZnJhbWUgbW9kZSBpZiBmaWxlIGlucHV0IGlzIGRldGVjdGVkXHJcbiAgICBpZiAob3B0aW9ucy5pZnJhbWUgIT09IGZhbHNlICYmIChvcHRpb25zLmlmcmFtZSB8fCBzaG91bGRVc2VGcmFtZSkpIHtcclxuICAgICAgICAvLyBoYWNrIHRvIGZpeCBTYWZhcmkgaGFuZyAodGhhbmtzIHRvIFRpbSBNb2xlbmRpamsgZm9yIHRoaXMpXHJcbiAgICAgICAgLy8gc2VlOiAgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2pxdWVyeS1kZXYvYnJvd3NlX3RocmVhZC90aHJlYWQvMzYzOTViN2FiNTEwZGQ1ZFxyXG4gICAgICAgIGlmIChvcHRpb25zLmNsb3NlS2VlcEFsaXZlKSB7XHJcbiAgICAgICAgICAgICQuZ2V0KG9wdGlvbnMuY2xvc2VLZWVwQWxpdmUsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAganF4aHIgPSBmaWxlVXBsb2FkSWZyYW1lKGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGpxeGhyID0gZmlsZVVwbG9hZElmcmFtZShhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoaGFzRmlsZUlucHV0cyB8fCBtdWx0aXBhcnQpICYmIGZpbGVBUEkpIHtcclxuICAgICAgICBqcXhociA9IGZpbGVVcGxvYWRYaHIoYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBqcXhociA9ICQuYWpheChvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAkZm9ybS5yZW1vdmVEYXRhKCdqcXhocicpLmRhdGEoJ2pxeGhyJywganF4aHIpO1xyXG5cclxuICAgIC8vIGNsZWFyIGVsZW1lbnQgYXJyYXlcclxuICAgIGZvciAodmFyIGs9MDsgayA8IGVsZW1lbnRzLmxlbmd0aDsgaysrKVxyXG4gICAgICAgIGVsZW1lbnRzW2tdID0gbnVsbDtcclxuXHJcbiAgICAvLyBmaXJlICdub3RpZnknIGV2ZW50XHJcbiAgICB0aGlzLnRyaWdnZXIoJ2Zvcm0tc3VibWl0LW5vdGlmeScsIFt0aGlzLCBvcHRpb25zXSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuXHJcbiAgICAvLyB1dGlsaXR5IGZuIGZvciBkZWVwIHNlcmlhbGl6YXRpb25cclxuICAgIGZ1bmN0aW9uIGRlZXBTZXJpYWxpemUoZXh0cmFEYXRhKXtcclxuICAgICAgICB2YXIgc2VyaWFsaXplZCA9ICQucGFyYW0oZXh0cmFEYXRhLCBvcHRpb25zLnRyYWRpdGlvbmFsKS5zcGxpdCgnJicpO1xyXG4gICAgICAgIHZhciBsZW4gPSBzZXJpYWxpemVkLmxlbmd0aDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIGksIHBhcnQ7XHJcbiAgICAgICAgZm9yIChpPTA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAvLyAjMjUyOyB1bmRvIHBhcmFtIHNwYWNlIHJlcGxhY2VtZW50XHJcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRbaV0gPSBzZXJpYWxpemVkW2ldLnJlcGxhY2UoL1xcKy9nLCcgJyk7XHJcbiAgICAgICAgICAgIHBhcnQgPSBzZXJpYWxpemVkW2ldLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgICAgIC8vICMyNzg7IHVzZSBhcnJheSBpbnN0ZWFkIG9mIG9iamVjdCBzdG9yYWdlLCBmYXZvcmluZyBhcnJheSBzZXJpYWxpemF0aW9uc1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRbMF0pLCBkZWNvZGVVUklDb21wb25lbnQocGFydFsxXSldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAgLy8gWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMiBmaWxlIHVwbG9hZHMgKGJpZyBoYXQgdGlwIHRvIGZyYW5jb2lzMm1ldHopXHJcbiAgICBmdW5jdGlvbiBmaWxlVXBsb2FkWGhyKGEpIHtcclxuICAgICAgICB2YXIgZm9ybWRhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3JtZGF0YS5hcHBlbmQoYVtpXS5uYW1lLCBhW2ldLnZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmV4dHJhRGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgc2VyaWFsaXplZERhdGEgPSBkZWVwU2VyaWFsaXplKG9wdGlvbnMuZXh0cmFEYXRhKTtcclxuICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBzZXJpYWxpemVkRGF0YS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVkRGF0YVtpXSlcclxuICAgICAgICAgICAgICAgICAgICBmb3JtZGF0YS5hcHBlbmQoc2VyaWFsaXplZERhdGFbaV1bMF0sIHNlcmlhbGl6ZWREYXRhW2ldWzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciBzID0gJC5leHRlbmQodHJ1ZSwge30sICQuYWpheFNldHRpbmdzLCBvcHRpb25zLCB7XHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBjYWNoZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHR5cGU6IG1ldGhvZCB8fCAnUE9TVCdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMudXBsb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgLy8gd29ya2Fyb3VuZCBiZWNhdXNlIGpxWEhSIGRvZXMgbm90IGV4cG9zZSB1cGxvYWQgcHJvcGVydHlcclxuICAgICAgICAgICAgcy54aHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHZhciB4aHIgPSAkLmFqYXhTZXR0aW5ncy54aHIoKTtcclxuICAgICAgICAgICAgICAgIGlmICh4aHIudXBsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZXZlbnQubG9hZGVkIHx8IGV2ZW50LnBvc2l0aW9uOyAvKmV2ZW50LnBvc2l0aW9uIGlzIGRlcHJlY2F0ZWQqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSBldmVudC50b3RhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQgPSBNYXRoLmNlaWwocG9zaXRpb24gLyB0b3RhbCAqIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cGxvYWRQcm9ncmVzcyhldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geGhyO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcy5kYXRhID0gbnVsbDtcclxuICAgICAgICB2YXIgYmVmb3JlU2VuZCA9IHMuYmVmb3JlU2VuZDtcclxuICAgICAgICBzLmJlZm9yZVNlbmQgPSBmdW5jdGlvbih4aHIsIG8pIHtcclxuICAgICAgICAgICAgLy9TZW5kIEZvcm1EYXRhKCkgcHJvdmlkZWQgYnkgdXNlclxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtRGF0YSlcclxuICAgICAgICAgICAgICAgIG8uZGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIG8uZGF0YSA9IGZvcm1kYXRhO1xyXG4gICAgICAgICAgICBpZihiZWZvcmVTZW5kKVxyXG4gICAgICAgICAgICAgICAgYmVmb3JlU2VuZC5jYWxsKHRoaXMsIHhociwgbyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gJC5hamF4KHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByaXZhdGUgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIGZpbGUgdXBsb2FkcyAoaGF0IHRpcCB0byBZQUhPTyEpXHJcbiAgICBmdW5jdGlvbiBmaWxlVXBsb2FkSWZyYW1lKGEpIHtcclxuICAgICAgICB2YXIgZm9ybSA9ICRmb3JtWzBdLCBlbCwgaSwgcywgZywgaWQsICRpbywgaW8sIHhociwgc3ViLCBuLCB0aW1lZE91dCwgdGltZW91dEhhbmRsZTtcclxuICAgICAgICB2YXIgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XHJcblxyXG4gICAgICAgIC8vICMzNDFcclxuICAgICAgICBkZWZlcnJlZC5hYm9ydCA9IGZ1bmN0aW9uKHN0YXR1cykge1xyXG4gICAgICAgICAgICB4aHIuYWJvcnQoc3RhdHVzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhhdCBldmVyeSBzZXJpYWxpemVkIGlucHV0IGlzIHN0aWxsIGVuYWJsZWRcclxuICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZWwgPSAkKGVsZW1lbnRzW2ldKTtcclxuICAgICAgICAgICAgICAgIGlmICggaGFzUHJvcCApXHJcbiAgICAgICAgICAgICAgICAgICAgZWwucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcyA9ICQuZXh0ZW5kKHRydWUsIHt9LCAkLmFqYXhTZXR0aW5ncywgb3B0aW9ucyk7XHJcbiAgICAgICAgcy5jb250ZXh0ID0gcy5jb250ZXh0IHx8IHM7XHJcbiAgICAgICAgaWQgPSAnanFGb3JtSU8nICsgKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcclxuICAgICAgICBpZiAocy5pZnJhbWVUYXJnZXQpIHtcclxuICAgICAgICAgICAgJGlvID0gJChzLmlmcmFtZVRhcmdldCk7XHJcbiAgICAgICAgICAgIG4gPSAkaW8uYXR0cjIoJ25hbWUnKTtcclxuICAgICAgICAgICAgaWYgKCFuKVxyXG4gICAgICAgICAgICAgICAgICRpby5hdHRyMignbmFtZScsIGlkKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgaWQgPSBuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgJGlvID0gJCgnPGlmcmFtZSBuYW1lPVwiJyArIGlkICsgJ1wiIHNyYz1cIicrIHMuaWZyYW1lU3JjICsnXCIgLz4nKTtcclxuICAgICAgICAgICAgJGlvLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6ICctMTAwMHB4JywgbGVmdDogJy0xMDAwcHgnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbyA9ICRpb1swXTtcclxuXHJcblxyXG4gICAgICAgIHhociA9IHsgLy8gbW9jayBvYmplY3RcclxuICAgICAgICAgICAgYWJvcnRlZDogMCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUZXh0OiBudWxsLFxyXG4gICAgICAgICAgICByZXNwb25zZVhNTDogbnVsbCxcclxuICAgICAgICAgICAgc3RhdHVzOiAwLFxyXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiAnbi9hJyxcclxuICAgICAgICAgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHt9LFxyXG4gICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oKSB7fSxcclxuICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oKSB7fSxcclxuICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGUgPSAoc3RhdHVzID09PSAndGltZW91dCcgPyAndGltZW91dCcgOiAnYWJvcnRlZCcpO1xyXG4gICAgICAgICAgICAgICAgbG9nKCdhYm9ydGluZyB1cGxvYWQuLi4gJyArIGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cnkgeyAvLyAjMjE0LCAjMjU3XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlvLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW8uY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgnU3RvcCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoKGlnbm9yZSkge31cclxuXHJcbiAgICAgICAgICAgICAgICAkaW8uYXR0cignc3JjJywgcy5pZnJhbWVTcmMpOyAvLyBhYm9ydCBvcCBpbiBwcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgeGhyLmVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgIGlmIChzLmVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHMuZXJyb3IuY2FsbChzLmNvbnRleHQsIHhociwgZSwgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIGlmIChnKVxyXG4gICAgICAgICAgICAgICAgICAgICQuZXZlbnQudHJpZ2dlcihcImFqYXhFcnJvclwiLCBbeGhyLCBzLCBlXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocy5jb21wbGV0ZSlcclxuICAgICAgICAgICAgICAgICAgICBzLmNvbXBsZXRlLmNhbGwocy5jb250ZXh0LCB4aHIsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZyA9IHMuZ2xvYmFsO1xyXG4gICAgICAgIC8vIHRyaWdnZXIgYWpheCBnbG9iYWwgZXZlbnRzIHNvIHRoYXQgYWN0aXZpdHkvYmxvY2sgaW5kaWNhdG9ycyB3b3JrIGxpa2Ugbm9ybWFsXHJcbiAgICAgICAgaWYgKGcgJiYgMCA9PT0gJC5hY3RpdmUrKykge1xyXG4gICAgICAgICAgICAkLmV2ZW50LnRyaWdnZXIoXCJhamF4U3RhcnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChnKSB7XHJcbiAgICAgICAgICAgICQuZXZlbnQudHJpZ2dlcihcImFqYXhTZW5kXCIsIFt4aHIsIHNdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzLmJlZm9yZVNlbmQgJiYgcy5iZWZvcmVTZW5kLmNhbGwocy5jb250ZXh0LCB4aHIsIHMpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAocy5nbG9iYWwpIHtcclxuICAgICAgICAgICAgICAgICQuYWN0aXZlLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHhoci5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgc3VibWl0dGluZyBlbGVtZW50IHRvIGRhdGEgaWYgd2Uga25vdyBpdFxyXG4gICAgICAgIHN1YiA9IGZvcm0uY2xrO1xyXG4gICAgICAgIGlmIChzdWIpIHtcclxuICAgICAgICAgICAgbiA9IHN1Yi5uYW1lO1xyXG4gICAgICAgICAgICBpZiAobiAmJiAhc3ViLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBzLmV4dHJhRGF0YSA9IHMuZXh0cmFEYXRhIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgcy5leHRyYURhdGFbbl0gPSBzdWIudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViLnR5cGUgPT0gXCJpbWFnZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcy5leHRyYURhdGFbbisnLngnXSA9IGZvcm0uY2xrX3g7XHJcbiAgICAgICAgICAgICAgICAgICAgcy5leHRyYURhdGFbbisnLnknXSA9IGZvcm0uY2xrX3k7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBDTElFTlRfVElNRU9VVF9BQk9SVCA9IDE7XHJcbiAgICAgICAgdmFyIFNFUlZFUl9BQk9SVCA9IDI7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICBmdW5jdGlvbiBnZXREb2MoZnJhbWUpIHtcclxuICAgICAgICAgICAgLyogaXQgbG9va3MgbGlrZSBjb250ZW50V2luZG93IG9yIGNvbnRlbnREb2N1bWVudCBkbyBub3RcclxuICAgICAgICAgICAgICogY2FycnkgdGhlIHByb3RvY29sIHByb3BlcnR5IGluIGllOCwgd2hlbiBydW5uaW5nIHVuZGVyIHNzbFxyXG4gICAgICAgICAgICAgKiBmcmFtZS5kb2N1bWVudCBpcyB0aGUgb25seSB2YWxpZCByZXNwb25zZSBkb2N1bWVudCwgc2luY2VcclxuICAgICAgICAgICAgICogdGhlIHByb3RvY29sIGlzIGtub3cgYnV0IG5vdCBvbiB0aGUgb3RoZXIgdHdvIG9iamVjdHMuIHN0cmFuZ2U/XHJcbiAgICAgICAgICAgICAqIFwiU2FtZSBvcmlnaW4gcG9saWN5XCIgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TYW1lX29yaWdpbl9wb2xpY3lcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgZG9jID0gbnVsbDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIElFOCBjYXNjYWRpbmcgYWNjZXNzIGNoZWNrXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhbWUuY29udGVudFdpbmRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvYyA9IGZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJRTggYWNjZXNzIGRlbmllZCB1bmRlciBzc2wgJiBtaXNzaW5nIHByb3RvY29sXHJcbiAgICAgICAgICAgICAgICBsb2coJ2Nhbm5vdCBnZXQgaWZyYW1lLmNvbnRlbnRXaW5kb3cgZG9jdW1lbnQ6ICcgKyBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jKSB7IC8vIHN1Y2Nlc3NmdWwgZ2V0dGluZyBjb250ZW50XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9jO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkgeyAvLyBzaW1wbHkgY2hlY2tpbmcgbWF5IHRocm93IGluIGllOCB1bmRlciBzc2wgb3IgbWlzbWF0Y2hlZCBwcm90b2NvbFxyXG4gICAgICAgICAgICAgICAgZG9jID0gZnJhbWUuY29udGVudERvY3VtZW50ID8gZnJhbWUuY29udGVudERvY3VtZW50IDogZnJhbWUuZG9jdW1lbnQ7XHJcbiAgICAgICAgICAgIH0gY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsYXN0IGF0dGVtcHRcclxuICAgICAgICAgICAgICAgIGxvZygnY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAnICsgZXJyKTtcclxuICAgICAgICAgICAgICAgIGRvYyA9IGZyYW1lLmRvY3VtZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkb2M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSYWlscyBDU1JGIGhhY2sgKHRoYW5rcyB0byBZdmFuIEJhcnRoZWxlbXkpXHJcbiAgICAgICAgdmFyIGNzcmZfdG9rZW4gPSAkKCdtZXRhW25hbWU9Y3NyZi10b2tlbl0nKS5hdHRyKCdjb250ZW50Jyk7XHJcbiAgICAgICAgdmFyIGNzcmZfcGFyYW0gPSAkKCdtZXRhW25hbWU9Y3NyZi1wYXJhbV0nKS5hdHRyKCdjb250ZW50Jyk7XHJcbiAgICAgICAgaWYgKGNzcmZfcGFyYW0gJiYgY3NyZl90b2tlbikge1xyXG4gICAgICAgICAgICBzLmV4dHJhRGF0YSA9IHMuZXh0cmFEYXRhIHx8IHt9O1xyXG4gICAgICAgICAgICBzLmV4dHJhRGF0YVtjc3JmX3BhcmFtXSA9IGNzcmZfdG9rZW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0YWtlIGEgYnJlYXRoIHNvIHRoYXQgcGVuZGluZyByZXBhaW50cyBnZXQgc29tZSBjcHUgdGltZSBiZWZvcmUgdGhlIHVwbG9hZCBzdGFydHNcclxuICAgICAgICBmdW5jdGlvbiBkb1N1Ym1pdCgpIHtcclxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGZvcm0gYXR0cnMgYXJlIHNldFxyXG4gICAgICAgICAgICB2YXIgdCA9ICRmb3JtLmF0dHIyKCd0YXJnZXQnKSwgYSA9ICRmb3JtLmF0dHIyKCdhY3Rpb24nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBmb3JtIGF0dHJzIGluIElFIGZyaWVuZGx5IHdheVxyXG4gICAgICAgICAgICBmb3JtLnNldEF0dHJpYnV0ZSgndGFyZ2V0JyxpZCk7XHJcbiAgICAgICAgICAgIGlmICghbWV0aG9kIHx8IC9wb3N0L2kudGVzdChtZXRob2QpICkge1xyXG4gICAgICAgICAgICAgICAgZm9ybS5zZXRBdHRyaWJ1dGUoJ21ldGhvZCcsICdQT1NUJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGEgIT0gcy51cmwpIHtcclxuICAgICAgICAgICAgICAgIGZvcm0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLCBzLnVybCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGllIGJvcmtzIGluIHNvbWUgY2FzZXMgd2hlbiBzZXR0aW5nIGVuY29kaW5nXHJcbiAgICAgICAgICAgIGlmICghIHMuc2tpcEVuY29kaW5nT3ZlcnJpZGUgJiYgKCFtZXRob2QgfHwgL3Bvc3QvaS50ZXN0KG1ldGhvZCkpKSB7XHJcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKHtcclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuY3R5cGU6ICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzdXBwb3J0IHRpbW91dFxyXG4gICAgICAgICAgICBpZiAocy50aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGltZWRPdXQgPSB0cnVlOyBjYihDTElFTlRfVElNRU9VVF9BQk9SVCk7IH0sIHMudGltZW91dCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGxvb2sgZm9yIHNlcnZlciBhYm9ydHNcclxuICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tTdGF0ZSgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gZ2V0RG9jKGlvKS5yZWFkeVN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZygnc3RhdGUgPSAnICsgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS50b0xvd2VyQ2FzZSgpID09ICd1bmluaXRpYWxpemVkJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjaGVja1N0YXRlLDUwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2coJ1NlcnZlciBhYm9ydDogJyAsIGUsICcgKCcsIGUubmFtZSwgJyknKTtcclxuICAgICAgICAgICAgICAgICAgICBjYihTRVJWRVJfQUJPUlQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0SGFuZGxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dEhhbmRsZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWRkIFwiZXh0cmFcIiBkYXRhIHRvIGZvcm0gaWYgcHJvdmlkZWQgaW4gb3B0aW9uc1xyXG4gICAgICAgICAgICB2YXIgZXh0cmFJbnB1dHMgPSBbXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzLmV4dHJhRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gaW4gcy5leHRyYURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KG4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHVzaW5nIHRoZSAkLnBhcmFtIGZvcm1hdCB0aGF0IGFsbG93cyBmb3IgbXVsdGlwbGUgdmFsdWVzIHdpdGggdGhlIHNhbWUgbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkLmlzUGxhaW5PYmplY3Qocy5leHRyYURhdGFbbl0pICYmIHMuZXh0cmFEYXRhW25dLmhhc093blByb3BlcnR5KCduYW1lJykgJiYgcy5leHRyYURhdGFbbl0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5wdXRzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCInK3MuZXh0cmFEYXRhW25dLm5hbWUrJ1wiPicpLnZhbChzLmV4dHJhRGF0YVtuXS52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oZm9ybSlbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbnB1dHMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIicrbisnXCI+JykudmFsKHMuZXh0cmFEYXRhW25dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKVswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXMuaWZyYW1lVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGlmcmFtZSB0byBkb2MgYW5kIHN1Ym1pdCB0aGUgZm9ybVxyXG4gICAgICAgICAgICAgICAgICAgICRpby5hcHBlbmRUbygnYm9keScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGlvLmF0dGFjaEV2ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIGlvLmF0dGFjaEV2ZW50KCdvbmxvYWQnLCBjYik7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrU3RhdGUsMTUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBpbiBjYXNlIGZvcm0gaGFzIGVsZW1lbnQgd2l0aCBuYW1lL2lkIG9mICdzdWJtaXQnXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1Ym1pdEZuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpLnN1Ym1pdDtcclxuICAgICAgICAgICAgICAgICAgICBzdWJtaXRGbi5hcHBseShmb3JtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIC8vIHJlc2V0IGF0dHJzIGFuZCByZW1vdmUgXCJleHRyYVwiIGlucHV0IGVsZW1lbnRzXHJcbiAgICAgICAgICAgICAgICBmb3JtLnNldEF0dHJpYnV0ZSgnYWN0aW9uJyxhKTtcclxuICAgICAgICAgICAgICAgIGlmKHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgdCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICRmb3JtLnJlbW92ZUF0dHIoJ3RhcmdldCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChleHRyYUlucHV0cykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzLmZvcmNlU3luYykge1xyXG4gICAgICAgICAgICBkb1N1Ym1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChkb1N1Ym1pdCwgMTApOyAvLyB0aGlzIGxldHMgZG9tIHVwZGF0ZXMgcmVuZGVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YSwgZG9jLCBkb21DaGVja0NvdW50ID0gNTAsIGNhbGxiYWNrUHJvY2Vzc2VkO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjYihlKSB7XHJcbiAgICAgICAgICAgIGlmICh4aHIuYWJvcnRlZCB8fCBjYWxsYmFja1Byb2Nlc3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkb2MgPSBnZXREb2MoaW8pO1xyXG4gICAgICAgICAgICBpZighZG9jKSB7XHJcbiAgICAgICAgICAgICAgICBsb2coJ2Nhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQnKTtcclxuICAgICAgICAgICAgICAgIGUgPSBTRVJWRVJfQUJPUlQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGUgPT09IENMSUVOVF9USU1FT1VUX0FCT1JUICYmIHhocikge1xyXG4gICAgICAgICAgICAgICAgeGhyLmFib3J0KCd0aW1lb3V0Jyk7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoeGhyLCAndGltZW91dCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUgPT0gU0VSVkVSX0FCT1JUICYmIHhocikge1xyXG4gICAgICAgICAgICAgICAgeGhyLmFib3J0KCdzZXJ2ZXIgYWJvcnQnKTtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdCh4aHIsICdlcnJvcicsICdzZXJ2ZXIgYWJvcnQnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFkb2MgfHwgZG9jLmxvY2F0aW9uLmhyZWYgPT0gcy5pZnJhbWVTcmMpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlc3BvbnNlIG5vdCByZWNlaXZlZCB5ZXRcclxuICAgICAgICAgICAgICAgIGlmICghdGltZWRPdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpby5kZXRhY2hFdmVudClcclxuICAgICAgICAgICAgICAgIGlvLmRldGFjaEV2ZW50KCdvbmxvYWQnLCBjYik7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjYiwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICdzdWNjZXNzJywgZXJyTXNnO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVkT3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ3RpbWVvdXQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBpc1htbCA9IHMuZGF0YVR5cGUgPT0gJ3htbCcgfHwgZG9jLlhNTERvY3VtZW50IHx8ICQuaXNYTUxEb2MoZG9jKTtcclxuICAgICAgICAgICAgICAgIGxvZygnaXNYbWw9Jytpc1htbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzWG1sICYmIHdpbmRvdy5vcGVyYSAmJiAoZG9jLmJvZHkgPT09IG51bGwgfHwgIWRvYy5ib2R5LmlubmVySFRNTCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoLS1kb21DaGVja0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHNvbWUgYnJvd3NlcnMgKE9wZXJhKSB0aGUgaWZyYW1lIERPTSBpcyBub3QgYWx3YXlzIHRyYXZlcnNhYmxlIHdoZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG9ubG9hZCBjYWxsYmFjayBmaXJlcywgc28gd2UgbG9vcCBhIGJpdCB0byBhY2NvbW1vZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ3JlcXVlaW5nIG9uTG9hZCBjYWxsYmFjaywgRE9NIG5vdCBhdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgMjUwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBsZXQgdGhpcyBmYWxsIHRocm91Z2ggYmVjYXVzZSBzZXJ2ZXIgcmVzcG9uc2UgY291bGQgYmUgYW4gZW1wdHkgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAvL2xvZygnQ291bGQgbm90IGFjY2VzcyBpZnJhbWUgRE9NIGFmdGVyIG11dGlwbGUgdHJpZXMuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aHJvdyAnRE9NRXhjZXB0aW9uOiBub3QgYXZhaWxhYmxlJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL2xvZygncmVzcG9uc2UgZGV0ZWN0ZWQnKTtcclxuICAgICAgICAgICAgICAgIHZhciBkb2NSb290ID0gZG9jLmJvZHkgPyBkb2MuYm9keSA6IGRvYy5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUZXh0ID0gZG9jUm9vdCA/IGRvY1Jvb3QuaW5uZXJIVE1MIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVhNTCA9IGRvYy5YTUxEb2N1bWVudCA/IGRvYy5YTUxEb2N1bWVudCA6IGRvYztcclxuICAgICAgICAgICAgICAgIGlmIChpc1htbClcclxuICAgICAgICAgICAgICAgICAgICBzLmRhdGFUeXBlID0gJ3htbCc7XHJcbiAgICAgICAgICAgICAgICB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIgPSBmdW5jdGlvbihoZWFkZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXJzID0geydjb250ZW50LXR5cGUnOiBzLmRhdGFUeXBlfTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLy8gc3VwcG9ydCBmb3IgWEhSICdzdGF0dXMnICYgJ3N0YXR1c1RleHQnIGVtdWxhdGlvbiA6XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jUm9vdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhoci5zdGF0dXMgPSBOdW1iZXIoIGRvY1Jvb3QuZ2V0QXR0cmlidXRlKCdzdGF0dXMnKSApIHx8IHhoci5zdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgeGhyLnN0YXR1c1RleHQgPSBkb2NSb290LmdldEF0dHJpYnV0ZSgnc3RhdHVzVGV4dCcpIHx8IHhoci5zdGF0dXNUZXh0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBkdCA9IChzLmRhdGFUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNjciA9IC8oanNvbnxzY3JpcHR8dGV4dCkvLnRlc3QoZHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjciB8fCBzLnRleHRhcmVhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGlmIHVzZXIgZW1iZWRkZWQgcmVzcG9uc2UgaW4gdGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGEgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RleHRhcmVhJylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVRleHQgPSB0YS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VwcG9ydCBmb3IgWEhSICdzdGF0dXMnICYgJ3N0YXR1c1RleHQnIGVtdWxhdGlvbiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zdGF0dXMgPSBOdW1iZXIoIHRhLmdldEF0dHJpYnV0ZSgnc3RhdHVzJykgKSB8fCB4aHIuc3RhdHVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3RhdHVzVGV4dCA9IHRhLmdldEF0dHJpYnV0ZSgnc3RhdHVzVGV4dCcpIHx8IHhoci5zdGF0dXNUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjb3VudCBmb3IgYnJvd3NlcnMgaW5qZWN0aW5nIHByZSBhcm91bmQganNvbiByZXNwb25zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwcmUnKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVGV4dCA9IHByZS50ZXh0Q29udGVudCA/IHByZS50ZXh0Q29udGVudCA6IHByZS5pbm5lclRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVGV4dCA9IGIudGV4dENvbnRlbnQgPyBiLnRleHRDb250ZW50IDogYi5pbm5lclRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkdCA9PSAneG1sJyAmJiAheGhyLnJlc3BvbnNlWE1MICYmIHhoci5yZXNwb25zZVRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VYTUwgPSB0b1htbCh4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBodHRwRGF0YSh4aHIsIGR0LCBzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAncGFyc2VyZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHhoci5lcnJvciA9IGVyck1zZyA9IChlcnIgfHwgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBsb2coJ2Vycm9yIGNhdWdodDogJyxlcnIpO1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIHhoci5lcnJvciA9IGVyck1zZyA9IChlcnIgfHwgc3RhdHVzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHhoci5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsb2coJ3VwbG9hZCBhYm9ydGVkJyk7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cykgeyAvLyB3ZSd2ZSBzZXQgeGhyLnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDAgfHwgeGhyLnN0YXR1cyA9PT0gMzA0KSA/ICdzdWNjZXNzJyA6ICdlcnJvcic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIG9yZGVyaW5nIG9mIHRoZXNlIGNhbGxiYWNrcy90cmlnZ2VycyBpcyBvZGQsIGJ1dCB0aGF0J3MgaG93ICQuYWpheCBkb2VzIGl0XHJcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHMuc3VjY2VzcylcclxuICAgICAgICAgICAgICAgICAgICBzLnN1Y2Nlc3MuY2FsbChzLmNvbnRleHQsIGRhdGEsICdzdWNjZXNzJywgeGhyKTtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoeGhyLnJlc3BvbnNlVGV4dCwgJ3N1Y2Nlc3MnLCB4aHIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGcpXHJcbiAgICAgICAgICAgICAgICAgICAgJC5ldmVudC50cmlnZ2VyKFwiYWpheFN1Y2Nlc3NcIiwgW3hociwgc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyck1zZyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyA9IHhoci5zdGF0dXNUZXh0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHMuZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgcy5lcnJvci5jYWxsKHMuY29udGV4dCwgeGhyLCBzdGF0dXMsIGVyck1zZyk7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoeGhyLCAnZXJyb3InLCBlcnJNc2cpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGcpXHJcbiAgICAgICAgICAgICAgICAgICAgJC5ldmVudC50cmlnZ2VyKFwiYWpheEVycm9yXCIsIFt4aHIsIHMsIGVyck1zZ10pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZylcclxuICAgICAgICAgICAgICAgICQuZXZlbnQudHJpZ2dlcihcImFqYXhDb21wbGV0ZVwiLCBbeGhyLCBzXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZyAmJiAhIC0tJC5hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICQuZXZlbnQudHJpZ2dlcihcImFqYXhTdG9wXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocy5jb21wbGV0ZSlcclxuICAgICAgICAgICAgICAgIHMuY29tcGxldGUuY2FsbChzLmNvbnRleHQsIHhociwgc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrUHJvY2Vzc2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHMudGltZW91dClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXMuaWZyYW1lVGFyZ2V0KVxyXG4gICAgICAgICAgICAgICAgICAgICRpby5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgIC8vYWRkaW5nIGVsc2UgdG8gY2xlYW4gdXAgZXhpc3RpbmcgaWZyYW1lIHJlc3BvbnNlLlxyXG4gICAgICAgICAgICAgICAgICAgICRpby5hdHRyKCdzcmMnLCBzLmlmcmFtZVNyYyk7XHJcbiAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VYTUwgPSBudWxsO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRvWG1sID0gJC5wYXJzZVhNTCB8fCBmdW5jdGlvbihzLCBkb2MpIHsgLy8gdXNlIHBhcnNlWE1MIGlmIGF2YWlsYWJsZSAoalF1ZXJ5IDEuNSspXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgZG9jID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxET00nKTtcclxuICAgICAgICAgICAgICAgIGRvYy5hc3luYyA9ICdmYWxzZSc7XHJcbiAgICAgICAgICAgICAgICBkb2MubG9hZFhNTChzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvYyA9IChuZXcgRE9NUGFyc2VyKCkpLnBhcnNlRnJvbVN0cmluZyhzLCAndGV4dC94bWwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGRvYyAmJiBkb2MuZG9jdW1lbnRFbGVtZW50ICYmIGRvYy5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT0gJ3BhcnNlcmVycm9yJykgPyBkb2MgOiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHBhcnNlSlNPTiA9ICQucGFyc2VKU09OIHx8IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICAgICAgLypqc2xpbnQgZXZpbDp0cnVlICovXHJcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3dbJ2V2YWwnXSgnKCcgKyBzICsgJyknKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgaHR0cERhdGEgPSBmdW5jdGlvbiggeGhyLCB0eXBlLCBzICkgeyAvLyBtb3N0bHkgbGlmdGVkIGZyb20ganExLjQuNFxyXG5cclxuICAgICAgICAgICAgdmFyIGN0ID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHhtbCA9IHR5cGUgPT09ICd4bWwnIHx8ICF0eXBlICYmIGN0LmluZGV4T2YoJ3htbCcpID49IDAsXHJcbiAgICAgICAgICAgICAgICBkYXRhID0geG1sID8geGhyLnJlc3BvbnNlWE1MIDogeGhyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgICAgICAgICAgIGlmICh4bWwgJiYgZGF0YS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgPT09ICdwYXJzZXJlcnJvcicpIHtcclxuICAgICAgICAgICAgICAgIGlmICgkLmVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgICQuZXJyb3IoJ3BhcnNlcmVycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHMgJiYgcy5kYXRhRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gcy5kYXRhRmlsdGVyKGRhdGEsIHR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnanNvbicgfHwgIXR5cGUgJiYgY3QuaW5kZXhPZignanNvbicpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gcGFyc2VKU09OKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcInNjcmlwdFwiIHx8ICF0eXBlICYmIGN0LmluZGV4T2YoXCJqYXZhc2NyaXB0XCIpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAkLmdsb2JhbEV2YWwoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIGFqYXhGb3JtKCkgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGZ1bGx5IGF1dG9tYXRpbmcgZm9ybSBzdWJtaXNzaW9uLlxyXG4gKlxyXG4gKiBUaGUgYWR2YW50YWdlcyBvZiB1c2luZyB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIGFqYXhTdWJtaXQoKSBhcmU6XHJcbiAqXHJcbiAqIDE6IFRoaXMgbWV0aG9kIHdpbGwgaW5jbHVkZSBjb29yZGluYXRlcyBmb3IgPGlucHV0IHR5cGU9XCJpbWFnZVwiIC8+IGVsZW1lbnRzIChpZiB0aGUgZWxlbWVudFxyXG4gKiAgICBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSkuXHJcbiAqIDIuIFRoaXMgbWV0aG9kIHdpbGwgaW5jbHVkZSB0aGUgc3VibWl0IGVsZW1lbnQncyBuYW1lL3ZhbHVlIGRhdGEgKGZvciB0aGUgZWxlbWVudCB0aGF0IHdhc1xyXG4gKiAgICB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSkuXHJcbiAqIDMuIFRoaXMgbWV0aG9kIGJpbmRzIHRoZSBzdWJtaXQoKSBtZXRob2QgdG8gdGhlIGZvcm0gZm9yIHlvdS5cclxuICpcclxuICogVGhlIG9wdGlvbnMgYXJndW1lbnQgZm9yIGFqYXhGb3JtIHdvcmtzIGV4YWN0bHkgYXMgaXQgZG9lcyBmb3IgYWpheFN1Ym1pdC4gIGFqYXhGb3JtIG1lcmVseVxyXG4gKiBwYXNzZXMgdGhlIG9wdGlvbnMgYXJndW1lbnQgYWxvbmcgYWZ0ZXIgcHJvcGVybHkgYmluZGluZyBldmVudHMgZm9yIHN1Ym1pdCBlbGVtZW50cyBhbmRcclxuICogdGhlIGZvcm0gaXRzZWxmLlxyXG4gKi9cclxuJC5mbi5hamF4Rm9ybSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgb3B0aW9ucy5kZWxlZ2F0aW9uID0gb3B0aW9ucy5kZWxlZ2F0aW9uICYmICQuaXNGdW5jdGlvbigkLmZuLm9uKTtcclxuXHJcbiAgICAvLyBpbiBqUXVlcnkgMS4zKyB3ZSBjYW4gZml4IG1pc3Rha2VzIHdpdGggdGhlIHJlYWR5IHN0YXRlXHJcbiAgICBpZiAoIW9wdGlvbnMuZGVsZWdhdGlvbiAmJiB0aGlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHZhciBvID0geyBzOiB0aGlzLnNlbGVjdG9yLCBjOiB0aGlzLmNvbnRleHQgfTtcclxuICAgICAgICBpZiAoISQuaXNSZWFkeSAmJiBvLnMpIHtcclxuICAgICAgICAgICAgbG9nKCdET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtJyk7XHJcbiAgICAgICAgICAgICQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAkKG8ucyxvLmMpLmFqYXhGb3JtKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlzIHlvdXIgRE9NIHJlYWR5PyAgaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9UdXRvcmlhbHM6SW50cm9kdWNpbmdfJChkb2N1bWVudCkucmVhZHkoKVxyXG4gICAgICAgIGxvZygndGVybWluYXRpbmc7IHplcm8gZWxlbWVudHMgZm91bmQgYnkgc2VsZWN0b3InICsgKCQuaXNSZWFkeSA/ICcnIDogJyAoRE9NIG5vdCByZWFkeSknKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCBvcHRpb25zLmRlbGVnYXRpb24gKSB7XHJcbiAgICAgICAgJChkb2N1bWVudClcclxuICAgICAgICAgICAgLm9mZignc3VibWl0LmZvcm0tcGx1Z2luJywgdGhpcy5zZWxlY3RvciwgZG9BamF4U3VibWl0KVxyXG4gICAgICAgICAgICAub2ZmKCdjbGljay5mb3JtLXBsdWdpbicsIHRoaXMuc2VsZWN0b3IsIGNhcHR1cmVTdWJtaXR0aW5nRWxlbWVudClcclxuICAgICAgICAgICAgLm9uKCdzdWJtaXQuZm9ybS1wbHVnaW4nLCB0aGlzLnNlbGVjdG9yLCBvcHRpb25zLCBkb0FqYXhTdWJtaXQpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2suZm9ybS1wbHVnaW4nLCB0aGlzLnNlbGVjdG9yLCBvcHRpb25zLCBjYXB0dXJlU3VibWl0dGluZ0VsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKClcclxuICAgICAgICAuYmluZCgnc3VibWl0LmZvcm0tcGx1Z2luJywgb3B0aW9ucywgZG9BamF4U3VibWl0KVxyXG4gICAgICAgIC5iaW5kKCdjbGljay5mb3JtLXBsdWdpbicsIG9wdGlvbnMsIGNhcHR1cmVTdWJtaXR0aW5nRWxlbWVudCk7XHJcbn07XHJcblxyXG4vLyBwcml2YXRlIGV2ZW50IGhhbmRsZXJzXHJcbmZ1bmN0aW9uIGRvQWpheFN1Ym1pdChlKSB7XHJcbiAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xyXG4gICAgdmFyIG9wdGlvbnMgPSBlLmRhdGE7XHJcbiAgICBpZiAoIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHsgLy8gaWYgZXZlbnQgaGFzIGJlZW4gY2FuY2VsZWQsIGRvbid0IHByb2NlZWRcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgJChlLnRhcmdldCkuYWpheFN1Ym1pdChvcHRpb25zKTsgLy8gIzM2NVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYXB0dXJlU3VibWl0dGluZ0VsZW1lbnQoZSkge1xyXG4gICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cclxuICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgIHZhciAkZWwgPSAkKHRhcmdldCk7XHJcbiAgICBpZiAoISgkZWwuaXMoXCJbdHlwZT1zdWJtaXRdLFt0eXBlPWltYWdlXVwiKSkpIHtcclxuICAgICAgICAvLyBpcyB0aGlzIGEgY2hpbGQgZWxlbWVudCBvZiB0aGUgc3VibWl0IGVsPyAgKGV4OiBhIHNwYW4gd2l0aGluIGEgYnV0dG9uKVxyXG4gICAgICAgIHZhciB0ID0gJGVsLmNsb3Nlc3QoJ1t0eXBlPXN1Ym1pdF0nKTtcclxuICAgICAgICBpZiAodC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YXJnZXQgPSB0WzBdO1xyXG4gICAgfVxyXG4gICAgdmFyIGZvcm0gPSB0aGlzO1xyXG4gICAgZm9ybS5jbGsgPSB0YXJnZXQ7XHJcbiAgICBpZiAodGFyZ2V0LnR5cGUgPT0gJ2ltYWdlJykge1xyXG4gICAgICAgIGlmIChlLm9mZnNldFggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmb3JtLmNsa194ID0gZS5vZmZzZXRYO1xyXG4gICAgICAgICAgICBmb3JtLmNsa195ID0gZS5vZmZzZXRZO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICQuZm4ub2Zmc2V0ID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9ICRlbC5vZmZzZXQoKTtcclxuICAgICAgICAgICAgZm9ybS5jbGtfeCA9IGUucGFnZVggLSBvZmZzZXQubGVmdDtcclxuICAgICAgICAgICAgZm9ybS5jbGtfeSA9IGUucGFnZVkgLSBvZmZzZXQudG9wO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvcm0uY2xrX3ggPSBlLnBhZ2VYIC0gdGFyZ2V0Lm9mZnNldExlZnQ7XHJcbiAgICAgICAgICAgIGZvcm0uY2xrX3kgPSBlLnBhZ2VZIC0gdGFyZ2V0Lm9mZnNldFRvcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjbGVhciBmb3JtIHZhcnNcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZvcm0uY2xrID0gZm9ybS5jbGtfeCA9IGZvcm0uY2xrX3kgPSBudWxsOyB9LCAxMDApO1xyXG59XHJcblxyXG5cclxuLy8gYWpheEZvcm1VbmJpbmQgdW5iaW5kcyB0aGUgZXZlbnQgaGFuZGxlcnMgdGhhdCB3ZXJlIGJvdW5kIGJ5IGFqYXhGb3JtXHJcbiQuZm4uYWpheEZvcm1VbmJpbmQgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnVuYmluZCgnc3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luJyk7XHJcbn07XHJcblxyXG4vKipcclxuICogZm9ybVRvQXJyYXkoKSBnYXRoZXJzIGZvcm0gZWxlbWVudCBkYXRhIGludG8gYW4gYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IGNhblxyXG4gKiBiZSBwYXNzZWQgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgYWpheCBmdW5jdGlvbnM6ICQuZ2V0LCAkLnBvc3QsIG9yIGxvYWQuXHJcbiAqIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheSBoYXMgYm90aCBhICduYW1lJyBhbmQgJ3ZhbHVlJyBwcm9wZXJ0eS4gIEFuIGV4YW1wbGUgb2ZcclxuICogYW4gYXJyYXkgZm9yIGEgc2ltcGxlIGxvZ2luIGZvcm0gbWlnaHQgYmU6XHJcbiAqXHJcbiAqIFsgeyBuYW1lOiAndXNlcm5hbWUnLCB2YWx1ZTogJ2pyZXNpZycgfSwgeyBuYW1lOiAncGFzc3dvcmQnLCB2YWx1ZTogJ3NlY3JldCcgfSBdXHJcbiAqXHJcbiAqIEl0IGlzIHRoaXMgYXJyYXkgdGhhdCBpcyBwYXNzZWQgdG8gcHJlLXN1Ym1pdCBjYWxsYmFjayBmdW5jdGlvbnMgcHJvdmlkZWQgdG8gdGhlXHJcbiAqIGFqYXhTdWJtaXQoKSBhbmQgYWpheEZvcm0oKSBtZXRob2RzLlxyXG4gKi9cclxuJC5mbi5mb3JtVG9BcnJheSA9IGZ1bmN0aW9uKHNlbWFudGljLCBlbGVtZW50cykge1xyXG4gICAgdmFyIGEgPSBbXTtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBmb3JtID0gdGhpc1swXTtcclxuICAgIHZhciBlbHMgPSBzZW1hbnRpYyA/IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSA6IGZvcm0uZWxlbWVudHM7XHJcbiAgICBpZiAoIWVscykge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBpLGosbix2LGVsLG1heCxqbWF4O1xyXG4gICAgZm9yKGk9MCwgbWF4PWVscy5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xyXG4gICAgICAgIGVsID0gZWxzW2ldO1xyXG4gICAgICAgIG4gPSBlbC5uYW1lO1xyXG4gICAgICAgIGlmICghbiB8fCBlbC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZW1hbnRpYyAmJiBmb3JtLmNsayAmJiBlbC50eXBlID09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgICAgICAvLyBoYW5kbGUgaW1hZ2UgaW5wdXRzIG9uIHRoZSBmbHkgd2hlbiBzZW1hbnRpYyA9PSB0cnVlXHJcbiAgICAgICAgICAgIGlmKGZvcm0uY2xrID09IGVsKSB7XHJcbiAgICAgICAgICAgICAgICBhLnB1c2goe25hbWU6IG4sIHZhbHVlOiAkKGVsKS52YWwoKSwgdHlwZTogZWwudHlwZSB9KTtcclxuICAgICAgICAgICAgICAgIGEucHVzaCh7bmFtZTogbisnLngnLCB2YWx1ZTogZm9ybS5jbGtfeH0sIHtuYW1lOiBuKycueScsIHZhbHVlOiBmb3JtLmNsa195fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ID0gJC5maWVsZFZhbHVlKGVsLCB0cnVlKTtcclxuICAgICAgICBpZiAodiAmJiB2LmNvbnN0cnVjdG9yID09IEFycmF5KSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50cylcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWwpO1xyXG4gICAgICAgICAgICBmb3Ioaj0wLCBqbWF4PXYubGVuZ3RoOyBqIDwgam1heDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBhLnB1c2goe25hbWU6IG4sIHZhbHVlOiB2W2pdfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZmVhdHVyZS5maWxlYXBpICYmIGVsLnR5cGUgPT0gJ2ZpbGUnKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50cylcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWwpO1xyXG4gICAgICAgICAgICB2YXIgZmlsZXMgPSBlbC5maWxlcztcclxuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGEucHVzaCh7bmFtZTogbiwgdmFsdWU6IGZpbGVzW2pdLCB0eXBlOiBlbC50eXBlfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyAjMTgwXHJcbiAgICAgICAgICAgICAgICBhLnB1c2goeyBuYW1lOiBuLCB2YWx1ZTogJycsIHR5cGU6IGVsLnR5cGUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodiAhPT0gbnVsbCAmJiB0eXBlb2YgdiAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHMpXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsKTtcclxuICAgICAgICAgICAgYS5wdXNoKHtuYW1lOiBuLCB2YWx1ZTogdiwgdHlwZTogZWwudHlwZSwgcmVxdWlyZWQ6IGVsLnJlcXVpcmVkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2VtYW50aWMgJiYgZm9ybS5jbGspIHtcclxuICAgICAgICAvLyBpbnB1dCB0eXBlPT0naW1hZ2UnIGFyZSBub3QgZm91bmQgaW4gZWxlbWVudHMgYXJyYXkhIGhhbmRsZSBpdCBoZXJlXHJcbiAgICAgICAgdmFyICRpbnB1dCA9ICQoZm9ybS5jbGspLCBpbnB1dCA9ICRpbnB1dFswXTtcclxuICAgICAgICBuID0gaW5wdXQubmFtZTtcclxuICAgICAgICBpZiAobiAmJiAhaW5wdXQuZGlzYWJsZWQgJiYgaW5wdXQudHlwZSA9PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgIGEucHVzaCh7bmFtZTogbiwgdmFsdWU6ICRpbnB1dC52YWwoKX0pO1xyXG4gICAgICAgICAgICBhLnB1c2goe25hbWU6IG4rJy54JywgdmFsdWU6IGZvcm0uY2xrX3h9LCB7bmFtZTogbisnLnknLCB2YWx1ZTogZm9ybS5jbGtfeX0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNlcmlhbGl6ZXMgZm9ybSBkYXRhIGludG8gYSAnc3VibWl0dGFibGUnIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYSBzdHJpbmdcclxuICogaW4gdGhlIGZvcm1hdDogbmFtZTE9dmFsdWUxJmFtcDtuYW1lMj12YWx1ZTJcclxuICovXHJcbiQuZm4uZm9ybVNlcmlhbGl6ZSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7XHJcbiAgICAvL2hhbmQgb2ZmIHRvIGpRdWVyeS5wYXJhbSBmb3IgcHJvcGVyIGVuY29kaW5nXHJcbiAgICByZXR1cm4gJC5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KHNlbWFudGljKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2VyaWFsaXplcyBhbGwgZmllbGQgZWxlbWVudHMgaW4gdGhlIGpRdWVyeSBvYmplY3QgaW50byBhIHF1ZXJ5IHN0cmluZy5cclxuICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYSBzdHJpbmcgaW4gdGhlIGZvcm1hdDogbmFtZTE9dmFsdWUxJmFtcDtuYW1lMj12YWx1ZTJcclxuICovXHJcbiQuZm4uZmllbGRTZXJpYWxpemUgPSBmdW5jdGlvbihzdWNjZXNzZnVsKSB7XHJcbiAgICB2YXIgYSA9IFtdO1xyXG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBuID0gdGhpcy5uYW1lO1xyXG4gICAgICAgIGlmICghbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2ID0gJC5maWVsZFZhbHVlKHRoaXMsIHN1Y2Nlc3NmdWwpO1xyXG4gICAgICAgIGlmICh2ICYmIHYuY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaT0wLG1heD12Lmxlbmd0aDsgaSA8IG1heDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhLnB1c2goe25hbWU6IG4sIHZhbHVlOiB2W2ldfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodiAhPT0gbnVsbCAmJiB0eXBlb2YgdiAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBhLnB1c2goe25hbWU6IHRoaXMubmFtZSwgdmFsdWU6IHZ9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vaGFuZCBvZmYgdG8galF1ZXJ5LnBhcmFtIGZvciBwcm9wZXIgZW5jb2RpbmdcclxuICAgIHJldHVybiAkLnBhcmFtKGEpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHZhbHVlKHMpIG9mIHRoZSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGZvcm06XHJcbiAqXHJcbiAqICA8Zm9ybT48ZmllbGRzZXQ+XHJcbiAqICAgICAgPGlucHV0IG5hbWU9XCJBXCIgdHlwZT1cInRleHRcIiAvPlxyXG4gKiAgICAgIDxpbnB1dCBuYW1lPVwiQVwiIHR5cGU9XCJ0ZXh0XCIgLz5cclxuICogICAgICA8aW5wdXQgbmFtZT1cIkJcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIkIxXCIgLz5cclxuICogICAgICA8aW5wdXQgbmFtZT1cIkJcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIkIyXCIvPlxyXG4gKiAgICAgIDxpbnB1dCBuYW1lPVwiQ1wiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwiQzFcIiAvPlxyXG4gKiAgICAgIDxpbnB1dCBuYW1lPVwiQ1wiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwiQzJcIiAvPlxyXG4gKiAgPC9maWVsZHNldD48L2Zvcm0+XHJcbiAqXHJcbiAqICB2YXIgdiA9ICQoJ2lucHV0W3R5cGU9dGV4dF0nKS5maWVsZFZhbHVlKCk7XHJcbiAqICAvLyBpZiBubyB2YWx1ZXMgYXJlIGVudGVyZWQgaW50byB0aGUgdGV4dCBpbnB1dHNcclxuICogIHYgPT0gWycnLCcnXVxyXG4gKiAgLy8gaWYgdmFsdWVzIGVudGVyZWQgaW50byB0aGUgdGV4dCBpbnB1dHMgYXJlICdmb28nIGFuZCAnYmFyJ1xyXG4gKiAgdiA9PSBbJ2ZvbycsJ2JhciddXHJcbiAqXHJcbiAqICB2YXIgdiA9ICQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdJykuZmllbGRWYWx1ZSgpO1xyXG4gKiAgLy8gaWYgbmVpdGhlciBjaGVja2JveCBpcyBjaGVja2VkXHJcbiAqICB2ID09PSB1bmRlZmluZWRcclxuICogIC8vIGlmIGJvdGggY2hlY2tib3hlcyBhcmUgY2hlY2tlZFxyXG4gKiAgdiA9PSBbJ0IxJywgJ0IyJ11cclxuICpcclxuICogIHZhciB2ID0gJCgnaW5wdXRbdHlwZT1yYWRpb10nKS5maWVsZFZhbHVlKCk7XHJcbiAqICAvLyBpZiBuZWl0aGVyIHJhZGlvIGlzIGNoZWNrZWRcclxuICogIHYgPT09IHVuZGVmaW5lZFxyXG4gKiAgLy8gaWYgZmlyc3QgcmFkaW8gaXMgY2hlY2tlZFxyXG4gKiAgdiA9PSBbJ0MxJ11cclxuICpcclxuICogVGhlIHN1Y2Nlc3NmdWwgYXJndW1lbnQgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGZpZWxkIGVsZW1lbnQgbXVzdCBiZSAnc3VjY2Vzc2Z1bCdcclxuICogKHBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9pbnRlcmFjdC9mb3Jtcy5odG1sI3N1Y2Nlc3NmdWwtY29udHJvbHMpLlxyXG4gKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgc3VjY2Vzc2Z1bCBhcmd1bWVudCBpcyB0cnVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBmYWxzZSB0aGUgdmFsdWUocylcclxuICogZm9yIGVhY2ggZWxlbWVudCBpcyByZXR1cm5lZC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2QgKmFsd2F5cyogcmV0dXJucyBhbiBhcnJheS4gIElmIG5vIHZhbGlkIHZhbHVlIGNhbiBiZSBkZXRlcm1pbmVkIHRoZVxyXG4gKiAgICBhcnJheSB3aWxsIGJlIGVtcHR5LCBvdGhlcndpc2UgaXQgd2lsbCBjb250YWluIG9uZSBvciBtb3JlIHZhbHVlcy5cclxuICovXHJcbiQuZm4uZmllbGRWYWx1ZSA9IGZ1bmN0aW9uKHN1Y2Nlc3NmdWwpIHtcclxuICAgIGZvciAodmFyIHZhbD1bXSwgaT0wLCBtYXg9dGhpcy5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXNbaV07XHJcbiAgICAgICAgdmFyIHYgPSAkLmZpZWxkVmFsdWUoZWwsIHN1Y2Nlc3NmdWwpO1xyXG4gICAgICAgIGlmICh2ID09PSBudWxsIHx8IHR5cGVvZiB2ID09ICd1bmRlZmluZWQnIHx8ICh2LmNvbnN0cnVjdG9yID09IEFycmF5ICYmICF2Lmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2LmNvbnN0cnVjdG9yID09IEFycmF5KVxyXG4gICAgICAgICAgICAkLm1lcmdlKHZhbCwgdik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB2YWwucHVzaCh2KTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGVsZW1lbnQuXHJcbiAqL1xyXG4kLmZpZWxkVmFsdWUgPSBmdW5jdGlvbihlbCwgc3VjY2Vzc2Z1bCkge1xyXG4gICAgdmFyIG4gPSBlbC5uYW1lLCB0ID0gZWwudHlwZSwgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKHN1Y2Nlc3NmdWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1Y2Nlc3NmdWwgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdWNjZXNzZnVsICYmICghbiB8fCBlbC5kaXNhYmxlZCB8fCB0ID09ICdyZXNldCcgfHwgdCA9PSAnYnV0dG9uJyB8fFxyXG4gICAgICAgICh0ID09ICdjaGVja2JveCcgfHwgdCA9PSAncmFkaW8nKSAmJiAhZWwuY2hlY2tlZCB8fFxyXG4gICAgICAgICh0ID09ICdzdWJtaXQnIHx8IHQgPT0gJ2ltYWdlJykgJiYgZWwuZm9ybSAmJiBlbC5mb3JtLmNsayAhPSBlbCB8fFxyXG4gICAgICAgIHRhZyA9PSAnc2VsZWN0JyAmJiBlbC5zZWxlY3RlZEluZGV4ID09IC0xKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFnID09ICdzZWxlY3QnKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gZWwuc2VsZWN0ZWRJbmRleDtcclxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYSA9IFtdLCBvcHMgPSBlbC5vcHRpb25zO1xyXG4gICAgICAgIHZhciBvbmUgPSAodCA9PSAnc2VsZWN0LW9uZScpO1xyXG4gICAgICAgIHZhciBtYXggPSAob25lID8gaW5kZXgrMSA6IG9wcy5sZW5ndGgpO1xyXG4gICAgICAgIGZvcih2YXIgaT0ob25lID8gaW5kZXggOiAwKTsgaSA8IG1heDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvcCA9IG9wc1tpXTtcclxuICAgICAgICAgICAgaWYgKG9wLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IG9wLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7IC8vIGV4dHJhIHBhaW4gZm9yIElFLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IChvcC5hdHRyaWJ1dGVzICYmIG9wLmF0dHJpYnV0ZXNbJ3ZhbHVlJ10gJiYgIShvcC5hdHRyaWJ1dGVzWyd2YWx1ZSddLnNwZWNpZmllZCkpID8gb3AudGV4dCA6IG9wLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9uZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYS5wdXNoKHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICQoZWwpLnZhbCgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFycyB0aGUgZm9ybSBkYXRhLiAgVGFrZXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zIG9uIHRoZSBmb3JtJ3MgaW5wdXQgZmllbGRzOlxyXG4gKiAgLSBpbnB1dCB0ZXh0IGZpZWxkcyB3aWxsIGhhdmUgdGhlaXIgJ3ZhbHVlJyBwcm9wZXJ0eSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZ1xyXG4gKiAgLSBzZWxlY3QgZWxlbWVudHMgd2lsbCBoYXZlIHRoZWlyICdzZWxlY3RlZEluZGV4JyBwcm9wZXJ0eSBzZXQgdG8gLTFcclxuICogIC0gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cyB3aWxsIGhhdmUgdGhlaXIgJ2NoZWNrZWQnIHByb3BlcnR5IHNldCB0byBmYWxzZVxyXG4gKiAgLSBpbnB1dHMgb2YgdHlwZSBzdWJtaXQsIGJ1dHRvbiwgcmVzZXQsIGFuZCBoaWRkZW4gd2lsbCAqbm90KiBiZSBlZmZlY3RlZFxyXG4gKiAgLSBidXR0b24gZWxlbWVudHMgd2lsbCAqbm90KiBiZSBlZmZlY3RlZFxyXG4gKi9cclxuJC5mbi5jbGVhckZvcm0gPSBmdW5jdGlvbihpbmNsdWRlSGlkZGVuKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYScsIHRoaXMpLmNsZWFyRmllbGRzKGluY2x1ZGVIaWRkZW4pO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXJzIHRoZSBzZWxlY3RlZCBmb3JtIGVsZW1lbnRzLlxyXG4gKi9cclxuJC5mbi5jbGVhckZpZWxkcyA9ICQuZm4uY2xlYXJJbnB1dHMgPSBmdW5jdGlvbihpbmNsdWRlSGlkZGVuKSB7XHJcbiAgICB2YXIgcmUgPSAvXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTsgLy8gJ2hpZGRlbicgaXMgbm90IGluIHRoaXMgbGlzdFxyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgdCA9IHRoaXMudHlwZSwgdGFnID0gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHJlLnRlc3QodCkgfHwgdGFnID09ICd0ZXh0YXJlYScpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0ID09ICdjaGVja2JveCcgfHwgdCA9PSAncmFkaW8nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0YWcgPT0gJ3NlbGVjdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICAgICAgfVxyXG5cdFx0ZWxzZSBpZiAodCA9PSBcImZpbGVcIikge1xyXG5cdFx0XHRpZiAoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcclxuXHRcdFx0XHQkKHRoaXMpLnJlcGxhY2VXaXRoKCQodGhpcykuY2xvbmUodHJ1ZSkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdCQodGhpcykudmFsKCcnKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG4gICAgICAgIGVsc2UgaWYgKGluY2x1ZGVIaWRkZW4pIHtcclxuICAgICAgICAgICAgLy8gaW5jbHVkZUhpZGRlbiBjYW4gYmUgdGhlIHZhbHVlIHRydWUsIG9yIGl0IGNhbiBiZSBhIHNlbGVjdG9yIHN0cmluZ1xyXG4gICAgICAgICAgICAvLyBpbmRpY2F0aW5nIGEgc3BlY2lhbCB0ZXN0OyBmb3IgZXhhbXBsZTpcclxuICAgICAgICAgICAgLy8gICQoJyNteUZvcm0nKS5jbGVhckZvcm0oJy5zcGVjaWFsOmhpZGRlbicpXHJcbiAgICAgICAgICAgIC8vIHRoZSBhYm92ZSB3b3VsZCBjbGVhbiBoaWRkZW4gaW5wdXRzIHRoYXQgaGF2ZSB0aGUgY2xhc3Mgb2YgJ3NwZWNpYWwnXHJcbiAgICAgICAgICAgIGlmICggKGluY2x1ZGVIaWRkZW4gPT09IHRydWUgJiYgL2hpZGRlbi8udGVzdCh0KSkgfHxcclxuICAgICAgICAgICAgICAgICAodHlwZW9mIGluY2x1ZGVIaWRkZW4gPT0gJ3N0cmluZycgJiYgJCh0aGlzKS5pcyhpbmNsdWRlSGlkZGVuKSkgKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlc2V0cyB0aGUgZm9ybSBkYXRhLiAgQ2F1c2VzIGFsbCBmb3JtIGVsZW1lbnRzIHRvIGJlIHJlc2V0IHRvIHRoZWlyIG9yaWdpbmFsIHZhbHVlLlxyXG4gKi9cclxuJC5mbi5yZXNldEZvcm0gPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gZ3VhcmQgYWdhaW5zdCBhbiBpbnB1dCB3aXRoIHRoZSBuYW1lIG9mICdyZXNldCdcclxuICAgICAgICAvLyBub3RlIHRoYXQgSUUgcmVwb3J0cyB0aGUgcmVzZXQgZnVuY3Rpb24gYXMgYW4gJ29iamVjdCdcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzZXQgPT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIHRoaXMucmVzZXQgPT0gJ29iamVjdCcgJiYgIXRoaXMucmVzZXQubm9kZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbmFibGVzIG9yIGRpc2FibGVzIGFueSBtYXRjaGluZyBlbGVtZW50cy5cclxuICovXHJcbiQuZm4uZW5hYmxlID0gZnVuY3Rpb24oYikge1xyXG4gICAgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGIgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gIWI7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MvdW5jaGVja3MgYW55IG1hdGNoaW5nIGNoZWNrYm94ZXMgb3IgcmFkaW8gYnV0dG9ucyBhbmRcclxuICogc2VsZWN0cy9kZXNlbGVjdHMgYW5kIG1hdGNoaW5nIG9wdGlvbiBlbGVtZW50cy5cclxuICovXHJcbiQuZm4uc2VsZWN0ZWQgPSBmdW5jdGlvbihzZWxlY3QpIHtcclxuICAgIGlmIChzZWxlY3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHNlbGVjdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciB0ID0gdGhpcy50eXBlO1xyXG4gICAgICAgIGlmICh0ID09ICdjaGVja2JveCcgfHwgdCA9PSAncmFkaW8nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHNlbGVjdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ29wdGlvbicpIHtcclxuICAgICAgICAgICAgdmFyICRzZWwgPSAkKHRoaXMpLnBhcmVudCgnc2VsZWN0Jyk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3QgJiYgJHNlbFswXSAmJiAkc2VsWzBdLnR5cGUgPT0gJ3NlbGVjdC1vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZXNlbGVjdCBhbGwgb3RoZXIgb3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgJHNlbC5maW5kKCdvcHRpb24nKS5zZWxlY3RlZChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuXHJcbi8vIGV4cG9zZSBkZWJ1ZyB2YXJcclxuJC5mbi5hamF4U3VibWl0LmRlYnVnID0gZmFsc2U7XHJcblxyXG4vLyBoZWxwZXIgZm4gZm9yIGNvbnNvbGUgbG9nZ2luZ1xyXG5mdW5jdGlvbiBsb2coKSB7XHJcbiAgICBpZiAoISQuZm4uYWpheFN1Ym1pdC5kZWJ1ZylcclxuICAgICAgICByZXR1cm47XHJcbiAgICB2YXIgbXNnID0gJ1tqcXVlcnkuZm9ybV0gJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCcnKTtcclxuICAgIGlmICh3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cpIHtcclxuICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cobXNnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHdpbmRvdy5vcGVyYSAmJiB3aW5kb3cub3BlcmEucG9zdEVycm9yKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZXJhLnBvc3RFcnJvcihtc2cpO1xyXG4gICAgfVxyXG59XHJcblxyXG59KSk7XHJcblxyXG4iLCIvKipcclxuICogalF1ZXJ5IE1hc29ucnkgdjIuMS4wOFxyXG4gKiBBIGR5bmFtaWMgbGF5b3V0IHBsdWdpbiBmb3IgalF1ZXJ5XHJcbiAqIFRoZSBmbGlwLXNpZGUgb2YgQ1NTIEZsb2F0c1xyXG4gKiBodHRwOi8vbWFzb25yeS5kZXNhbmRyby5jb21cclxuICpcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgMjAxMiBEYXZpZCBEZVNhbmRyb1xyXG4gKi9cclxuKGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj10LmV2ZW50LGk7ci5zcGVjaWFsLnNtYXJ0cmVzaXplPXtzZXR1cDpmdW5jdGlvbigpe3QodGhpcykuYmluZChcInJlc2l6ZVwiLHIuc3BlY2lhbC5zbWFydHJlc2l6ZS5oYW5kbGVyKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt0KHRoaXMpLnVuYmluZChcInJlc2l6ZVwiLHIuc3BlY2lhbC5zbWFydHJlc2l6ZS5oYW5kbGVyKX0saGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscz1hcmd1bWVudHM7ZS50eXBlPVwic21hcnRyZXNpemVcIixpJiZjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5kaXNwYXRjaC5hcHBseShuLHMpfSx0PT09XCJleGVjQXNhcFwiPzA6MTAwKX19LHQuZm4uc21hcnRyZXNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy5iaW5kKFwic21hcnRyZXNpemVcIixlKTp0aGlzLnRyaWdnZXIoXCJzbWFydHJlc2l6ZVwiLFtcImV4ZWNBc2FwXCJdKX0sdC5NYXNvbj1mdW5jdGlvbihlLG4pe3RoaXMuZWxlbWVudD10KG4pLHRoaXMuX2NyZWF0ZShlKSx0aGlzLl9pbml0KCl9LHQuTWFzb24uc2V0dGluZ3M9e2lzUmVzaXphYmxlOiEwLGlzQW5pbWF0ZWQ6ITEsYW5pbWF0aW9uT3B0aW9uczp7cXVldWU6ITEsZHVyYXRpb246NTAwfSxndXR0ZXJXaWR0aDowLGlzUlRMOiExLGlzRml0V2lkdGg6ITEsY29udGFpbmVyU3R5bGU6e3Bvc2l0aW9uOlwicmVsYXRpdmVcIn19LHQuTWFzb24ucHJvdG90eXBlPXtfZmlsdGVyRmluZEJyaWNrczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnMuaXRlbVNlbGVjdG9yO3JldHVybiB0P2UuZmlsdGVyKHQpLmFkZChlLmZpbmQodCkpOmV9LF9nZXRCcmlja3M6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmlsdGVyRmluZEJyaWNrcyhlKS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIn0pLmFkZENsYXNzKFwibWFzb25yeS1icmlja1wiKTtyZXR1cm4gdH0sX2NyZWF0ZTpmdW5jdGlvbihuKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoITAse30sdC5NYXNvbi5zZXR0aW5ncyxuKSx0aGlzLnN0eWxlUXVldWU9W107dmFyIHI9dGhpcy5lbGVtZW50WzBdLnN0eWxlO3RoaXMub3JpZ2luYWxTdHlsZT17aGVpZ2h0OnIuaGVpZ2h0fHxcIlwifTt2YXIgaT10aGlzLm9wdGlvbnMuY29udGFpbmVyU3R5bGU7Zm9yKHZhciBzIGluIGkpdGhpcy5vcmlnaW5hbFN0eWxlW3NdPXJbc118fFwiXCI7dGhpcy5lbGVtZW50LmNzcyhpKSx0aGlzLmhvcml6b250YWxEaXJlY3Rpb249dGhpcy5vcHRpb25zLmlzUlRMP1wicmlnaHRcIjpcImxlZnRcIjt2YXIgbz10aGlzLmVsZW1lbnQuY3NzKFwicGFkZGluZy1cIit0aGlzLmhvcml6b250YWxEaXJlY3Rpb24pLHU9dGhpcy5lbGVtZW50LmNzcyhcInBhZGRpbmctdG9wXCIpO3RoaXMub2Zmc2V0PXt4Om8/cGFyc2VJbnQobywxMCk6MCx5OnU/cGFyc2VJbnQodSwxMCk6MH0sdGhpcy5pc0ZsdWlkPXRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCYmdHlwZW9mIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aD09XCJmdW5jdGlvblwiO3ZhciBhPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2EuZWxlbWVudC5hZGRDbGFzcyhcIm1hc29ucnlcIil9LDApLHRoaXMub3B0aW9ucy5pc1Jlc2l6YWJsZSYmdChlKS5iaW5kKFwic21hcnRyZXNpemUubWFzb25yeVwiLGZ1bmN0aW9uKCl7YS5yZXNpemUoKX0pLHRoaXMucmVsb2FkSXRlbXMoKX0sX2luaXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZ2V0Q29sdW1ucygpLHRoaXMuX3JlTGF5b3V0KGUpfSxvcHRpb246ZnVuY3Rpb24oZSxuKXt0LmlzUGxhaW5PYmplY3QoZSkmJih0aGlzLm9wdGlvbnM9dC5leHRlbmQoITAsdGhpcy5vcHRpb25zLGUpKX0sbGF5b3V0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRoaXMuX3BsYWNlQnJpY2soZVtuXSk7dmFyIGk9e307aS5oZWlnaHQ9TWF0aC5tYXguYXBwbHkoTWF0aCx0aGlzLmNvbFlzKTtpZih0aGlzLm9wdGlvbnMuaXNGaXRXaWR0aCl7dmFyIHM9MDtuPXRoaXMuY29sczt3aGlsZSgtLW4pe2lmKHRoaXMuY29sWXNbbl0hPT0wKWJyZWFrO3MrK31pLndpZHRoPSh0aGlzLmNvbHMtcykqdGhpcy5jb2x1bW5XaWR0aC10aGlzLm9wdGlvbnMuZ3V0dGVyV2lkdGh9dGhpcy5zdHlsZVF1ZXVlLnB1c2goeyRlbDp0aGlzLmVsZW1lbnQsc3R5bGU6aX0pO3ZhciBvPXRoaXMuaXNMYWlkT3V0P3RoaXMub3B0aW9ucy5pc0FuaW1hdGVkP1wiYW5pbWF0ZVwiOlwiY3NzXCI6XCJjc3NcIix1PXRoaXMub3B0aW9ucy5hbmltYXRpb25PcHRpb25zLGE7Zm9yKG49MCxyPXRoaXMuc3R5bGVRdWV1ZS5sZW5ndGg7bjxyO24rKylhPXRoaXMuc3R5bGVRdWV1ZVtuXSxhLiRlbFtvXShhLnN0eWxlLHUpO3RoaXMuc3R5bGVRdWV1ZT1bXSx0JiZ0LmNhbGwoZSksdGhpcy5pc0xhaWRPdXQ9ITB9LF9nZXRDb2x1bW5zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmlzRml0V2lkdGg/dGhpcy5lbGVtZW50LnBhcmVudCgpOnRoaXMuZWxlbWVudCx0PWUud2lkdGgoKTt0aGlzLmNvbHVtbldpZHRoPXRoaXMuaXNGbHVpZD90aGlzLm9wdGlvbnMuY29sdW1uV2lkdGgodCk6dGhpcy5vcHRpb25zLmNvbHVtbldpZHRofHx0aGlzLiRicmlja3Mub3V0ZXJXaWR0aCghMCl8fHQsdGhpcy5jb2x1bW5XaWR0aCs9dGhpcy5vcHRpb25zLmd1dHRlcldpZHRoLHRoaXMuY29scz1NYXRoLmZsb29yKCh0K3RoaXMub3B0aW9ucy5ndXR0ZXJXaWR0aCkvdGhpcy5jb2x1bW5XaWR0aCksdGhpcy5jb2xzPU1hdGgubWF4KHRoaXMuY29scywxKX0sX3BsYWNlQnJpY2s6ZnVuY3Rpb24oZSl7dmFyIG49dChlKSxyLGkscyxvLHU7cj1NYXRoLmNlaWwobi5vdXRlcldpZHRoKCEwKS90aGlzLmNvbHVtbldpZHRoKSxyPU1hdGgubWluKHIsdGhpcy5jb2xzKTtpZihyPT09MSlzPXRoaXMuY29sWXM7ZWxzZXtpPXRoaXMuY29scysxLXIscz1bXTtmb3IodT0wO3U8aTt1Kyspbz10aGlzLmNvbFlzLnNsaWNlKHUsdStyKSxzW3VdPU1hdGgubWF4LmFwcGx5KE1hdGgsbyl9dmFyIGE9TWF0aC5taW4uYXBwbHkoTWF0aCxzKSxmPTA7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aDtsPGM7bCsrKWlmKHNbbF09PT1hKXtmPWw7YnJlYWt9dmFyIGg9e3RvcDphK3RoaXMub2Zmc2V0Lnl9O2hbdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uXT10aGlzLmNvbHVtbldpZHRoKmYrdGhpcy5vZmZzZXQueCx0aGlzLnN0eWxlUXVldWUucHVzaCh7JGVsOm4sc3R5bGU6aH0pO3ZhciBwPWErbi5vdXRlckhlaWdodCghMCksZD10aGlzLmNvbHMrMS1jO2ZvcihsPTA7bDxkO2wrKyl0aGlzLmNvbFlzW2YrbF09cH0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb2xzO3RoaXMuX2dldENvbHVtbnMoKSwodGhpcy5pc0ZsdWlkfHx0aGlzLmNvbHMhPT1lKSYmdGhpcy5fcmVMYXlvdXQoKX0sX3JlTGF5b3V0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29sczt0aGlzLmNvbFlzPVtdO3doaWxlKHQtLSl0aGlzLmNvbFlzLnB1c2goMCk7dGhpcy5sYXlvdXQodGhpcy4kYnJpY2tzLGUpfSxyZWxvYWRJdGVtczpmdW5jdGlvbigpe3RoaXMuJGJyaWNrcz10aGlzLl9nZXRCcmlja3ModGhpcy5lbGVtZW50LmNoaWxkcmVuKCkpfSxyZWxvYWQ6ZnVuY3Rpb24oZSl7dGhpcy5yZWxvYWRJdGVtcygpLHRoaXMuX2luaXQoZSl9LGFwcGVuZGVkOmZ1bmN0aW9uKGUsdCxuKXtpZih0KXt0aGlzLl9maWx0ZXJGaW5kQnJpY2tzKGUpLmNzcyh7dG9wOnRoaXMuZWxlbWVudC5oZWlnaHQoKX0pO3ZhciByPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe3IuX2FwcGVuZGVkKGUsbil9LDEpfWVsc2UgdGhpcy5fYXBwZW5kZWQoZSxuKX0sX2FwcGVuZGVkOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0QnJpY2tzKGUpO3RoaXMuJGJyaWNrcz10aGlzLiRicmlja3MuYWRkKG4pLHRoaXMubGF5b3V0KG4sdCl9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLiRicmlja3M9dGhpcy4kYnJpY2tzLm5vdChlKSxlLnJlbW92ZSgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kYnJpY2tzLnJlbW92ZUNsYXNzKFwibWFzb25yeS1icmlja1wiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5wb3NpdGlvbj1cIlwiLHRoaXMuc3R5bGUudG9wPVwiXCIsdGhpcy5zdHlsZS5sZWZ0PVwiXCJ9KTt2YXIgbj10aGlzLmVsZW1lbnRbMF0uc3R5bGU7Zm9yKHZhciByIGluIHRoaXMub3JpZ2luYWxTdHlsZSluW3JdPXRoaXMub3JpZ2luYWxTdHlsZVtyXTt0aGlzLmVsZW1lbnQudW5iaW5kKFwiLm1hc29ucnlcIikucmVtb3ZlQ2xhc3MoXCJtYXNvbnJ5XCIpLnJlbW92ZURhdGEoXCJtYXNvbnJ5XCIpLHQoZSkudW5iaW5kKFwiLm1hc29ucnlcIil9fSx0LmZuLmltYWdlc0xvYWRlZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB1KCl7ZS5jYWxsKG4scil9ZnVuY3Rpb24gYShlKXt2YXIgbj1lLnRhcmdldDtuLnNyYyE9PXMmJnQuaW5BcnJheShuLG8pPT09LTEmJihvLnB1c2gobiksLS1pPD0wJiYoc2V0VGltZW91dCh1KSxyLnVuYmluZChcIi5pbWFnZXNMb2FkZWRcIixhKSkpfXZhciBuPXRoaXMscj1uLmZpbmQoXCJpbWdcIikuYWRkKG4uZmlsdGVyKFwiaW1nXCIpKSxpPXIubGVuZ3RoLHM9XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3l3QUFBQUFBUUFCQUFBQ0FVd0FPdz09XCIsbz1bXTtyZXR1cm4gaXx8dSgpLHIuYmluZChcImxvYWQuaW1hZ2VzTG9hZGVkIGVycm9yLmltYWdlc0xvYWRlZFwiLGEpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNyYzt0aGlzLnNyYz1zLHRoaXMuc3JjPWV9KSxufTt2YXIgcz1mdW5jdGlvbih0KXtlLmNvbnNvbGUmJmUuY29uc29sZS5lcnJvcih0KX07dC5mbi5tYXNvbnJ5PWZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5kYXRhKHRoaXMsXCJtYXNvbnJ5XCIpO2lmKCFyKXtzKFwiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiBtYXNvbnJ5IHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyBhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJ1wiK2UrXCInXCIpO3JldHVybn1pZighdC5pc0Z1bmN0aW9uKHJbZV0pfHxlLmNoYXJBdCgwKT09PVwiX1wiKXtzKFwibm8gc3VjaCBtZXRob2QgJ1wiK2UrXCInIGZvciBtYXNvbnJ5IGluc3RhbmNlXCIpO3JldHVybn1yW2VdLmFwcGx5KHIsbil9KX1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQuZGF0YSh0aGlzLFwibWFzb25yeVwiKTtuPyhuLm9wdGlvbihlfHx7fSksbi5faW5pdCgpKTp0LmRhdGEodGhpcyxcIm1hc29ucnlcIixuZXcgdC5NYXNvbihlLHRoaXMpKX0pO3JldHVybiB0aGlzfX0pKHdpbmRvdyxqUXVlcnkpOyIsIi8qIVxyXG4gKiBKYXZhU2NyaXB0IENvb2tpZSB2Mi4yLjFcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2pzLWNvb2tpZS9qcy1jb29raWVcclxuICpcclxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTUgS2xhdXMgSGFydGwgJiBGYWduZXIgQnJhY2tcclxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXHJcbiAqL1xyXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcblx0dmFyIHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlcjtcclxuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcblx0XHRkZWZpbmUoZmFjdG9yeSk7XHJcblx0XHRyZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIgPSB0cnVlO1xyXG5cdH1cclxuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XHJcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcclxuXHRcdHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7XHJcblx0fVxyXG5cdGlmICghcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyKSB7XHJcblx0XHR2YXIgT2xkQ29va2llcyA9IHdpbmRvdy5Db29raWVzO1xyXG5cdFx0dmFyIGFwaSA9IHdpbmRvdy5Db29raWVzID0gZmFjdG9yeSgpO1xyXG5cdFx0YXBpLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHdpbmRvdy5Db29raWVzID0gT2xkQ29va2llcztcclxuXHRcdFx0cmV0dXJuIGFwaTtcclxuXHRcdH07XHJcblx0fVxyXG59KGZ1bmN0aW9uICgpIHtcclxuXHRmdW5jdGlvbiBleHRlbmQgKCkge1xyXG5cdFx0dmFyIGkgPSAwO1xyXG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xyXG5cdFx0Zm9yICg7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBhcmd1bWVudHNbIGkgXTtcclxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcclxuXHRcdFx0XHRyZXN1bHRba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGRlY29kZSAocykge1xyXG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvKCVbMC05QS1aXXsyfSkrL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBpbml0IChjb252ZXJ0ZXIpIHtcclxuXHRcdGZ1bmN0aW9uIGFwaSgpIHt9XHJcblxyXG5cdFx0ZnVuY3Rpb24gc2V0IChrZXksIHZhbHVlLCBhdHRyaWJ1dGVzKSB7XHJcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRhdHRyaWJ1dGVzID0gZXh0ZW5kKHtcclxuXHRcdFx0XHRwYXRoOiAnLydcclxuXHRcdFx0fSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTtcclxuXHJcblx0XHRcdGlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykge1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IG5ldyBEYXRlKG5ldyBEYXRlKCkgKiAxICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gV2UncmUgdXNpbmcgXCJleHBpcmVzXCIgYmVjYXVzZSBcIm1heC1hZ2VcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXHJcblx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IGF0dHJpYnV0ZXMuZXhwaXJlcyA/IGF0dHJpYnV0ZXMuZXhwaXJlcy50b1VUQ1N0cmluZygpIDogJyc7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcblx0XHRcdFx0aWYgKC9eW1xce1xcW10vLnRlc3QocmVzdWx0KSkge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSByZXN1bHQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIChlKSB7fVxyXG5cclxuXHRcdFx0dmFsdWUgPSBjb252ZXJ0ZXIud3JpdGUgP1xyXG5cdFx0XHRcdGNvbnZlcnRlci53cml0ZSh2YWx1ZSwga2V5KSA6XHJcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkpXHJcblx0XHRcdFx0XHQucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnwzQXwzQ3wzRXwzRHwyRnwzRnw0MHw1Qnw1RHw1RXw2MHw3Qnw3RHw3QykvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcclxuXHJcblx0XHRcdGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoa2V5KSlcclxuXHRcdFx0XHQucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnw1RXw2MHw3QykvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxyXG5cdFx0XHRcdC5yZXBsYWNlKC9bXFwoXFwpXS9nLCBlc2NhcGUpO1xyXG5cclxuXHRcdFx0dmFyIHN0cmluZ2lmaWVkQXR0cmlidXRlcyA9ICcnO1xyXG5cdFx0XHRmb3IgKHZhciBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXMpIHtcclxuXHRcdFx0XHRpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XHJcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQ29uc2lkZXJzIFJGQyA2MjY1IHNlY3Rpb24gNS4yOlxyXG5cdFx0XHRcdC8vIC4uLlxyXG5cdFx0XHRcdC8vIDMuICBJZiB0aGUgcmVtYWluaW5nIHVucGFyc2VkLWF0dHJpYnV0ZXMgY29udGFpbnMgYSAleDNCIChcIjtcIilcclxuXHRcdFx0XHQvLyAgICAgY2hhcmFjdGVyOlxyXG5cdFx0XHRcdC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXHJcblx0XHRcdFx0Ly8gbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXHJcblx0XHRcdFx0Ly8gLi4uXHJcblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyB2YWx1ZSArIHN0cmluZ2lmaWVkQXR0cmlidXRlcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHtcclxuXHRcdFx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBqYXIgPSB7fTtcclxuXHRcdFx0Ly8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheVxyXG5cdFx0XHQvLyBpbiBjYXNlIHRoZXJlIGFyZSBubyBjb29raWVzIGF0IGFsbC5cclxuXHRcdFx0dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXTtcclxuXHRcdFx0dmFyIGkgPSAwO1xyXG5cclxuXHRcdFx0Zm9yICg7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0dmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpO1xyXG5cdFx0XHRcdHZhciBjb29raWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7XHJcblxyXG5cdFx0XHRcdGlmICghanNvbiAmJiBjb29raWUuY2hhckF0KDApID09PSAnXCInKSB7XHJcblx0XHRcdFx0XHRjb29raWUgPSBjb29raWUuc2xpY2UoMSwgLTEpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHZhciBuYW1lID0gZGVjb2RlKHBhcnRzWzBdKTtcclxuXHRcdFx0XHRcdGNvb2tpZSA9IChjb252ZXJ0ZXIucmVhZCB8fCBjb252ZXJ0ZXIpKGNvb2tpZSwgbmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0ZGVjb2RlKGNvb2tpZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGpzb24pIHtcclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRjb29raWUgPSBKU09OLnBhcnNlKGNvb2tpZSk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0amFyW25hbWVdID0gY29va2llO1xyXG5cclxuXHRcdFx0XHRcdGlmIChrZXkgPT09IG5hbWUpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoZSkge31cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGtleSA/IGphcltrZXldIDogamFyO1xyXG5cdFx0fVxyXG5cclxuXHRcdGFwaS5zZXQgPSBzZXQ7XHJcblx0XHRhcGkuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG5cdFx0XHRyZXR1cm4gZ2V0KGtleSwgZmFsc2UgLyogcmVhZCBhcyByYXcgKi8pO1xyXG5cdFx0fTtcclxuXHRcdGFwaS5nZXRKU09OID0gZnVuY3Rpb24gKGtleSkge1xyXG5cdFx0XHRyZXR1cm4gZ2V0KGtleSwgdHJ1ZSAvKiByZWFkIGFzIGpzb24gKi8pO1xyXG5cdFx0fTtcclxuXHRcdGFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XHJcblx0XHRcdHNldChrZXksICcnLCBleHRlbmQoYXR0cmlidXRlcywge1xyXG5cdFx0XHRcdGV4cGlyZXM6IC0xXHJcblx0XHRcdH0pKTtcclxuXHRcdH07XHJcblxyXG5cdFx0YXBpLmRlZmF1bHRzID0ge307XHJcblxyXG5cdFx0YXBpLndpdGhDb252ZXJ0ZXIgPSBpbml0O1xyXG5cclxuXHRcdHJldHVybiBhcGk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gaW5pdChmdW5jdGlvbiAoKSB7fSk7XHJcbn0pKTtcclxuIiwiLypcclxuKiBsb2dsZXZlbCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9waW10ZXJyeS9sb2dsZXZlbFxyXG4qXHJcbiogQ29weXJpZ2h0IChjKSAyMDEzIFRpbSBQZXJyeVxyXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cclxuKi9cclxuKGZ1bmN0aW9uIChyb290LCBkZWZpbml0aW9uKSB7XHJcbiAgICBcInVzZSBzdHJpY3RcIjtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJvb3QubG9nID0gZGVmaW5pdGlvbigpO1xyXG4gICAgfVxyXG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcclxuICAgIFwidXNlIHN0cmljdFwiO1xyXG5cclxuICAgIC8vIFNsaWdodGx5IGR1YmlvdXMgdHJpY2tzIHRvIGN1dCBkb3duIG1pbmltaXplZCBmaWxlIHNpemVcclxuICAgIHZhciBub29wID0gZnVuY3Rpb24oKSB7fTtcclxuICAgIHZhciB1bmRlZmluZWRUeXBlID0gXCJ1bmRlZmluZWRcIjtcclxuXHJcbiAgICB2YXIgbG9nTWV0aG9kcyA9IFtcclxuICAgICAgICBcInRyYWNlXCIsXHJcbiAgICAgICAgXCJkZWJ1Z1wiLFxyXG4gICAgICAgIFwiaW5mb1wiLFxyXG4gICAgICAgIFwid2FyblwiLFxyXG4gICAgICAgIFwiZXJyb3JcIlxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBDcm9zcy1icm93c2VyIGJpbmQgZXF1aXZhbGVudCB0aGF0IHdvcmtzIGF0IGxlYXN0IGJhY2sgdG8gSUU2XHJcbiAgICBmdW5jdGlvbiBiaW5kTWV0aG9kKG9iaiwgbWV0aG9kTmFtZSkge1xyXG4gICAgICAgIHZhciBtZXRob2QgPSBvYmpbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QuYmluZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kLmJpbmQob2JqKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwobWV0aG9kLCBvYmopO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBNaXNzaW5nIGJpbmQgc2hpbSBvciBJRTggKyBNb2Rlcm5penIsIGZhbGxiYWNrIHRvIHdyYXBwaW5nXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5hcHBseShtZXRob2QsIFtvYmosIGFyZ3VtZW50c10pO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBCdWlsZCB0aGUgYmVzdCBsb2dnaW5nIG1ldGhvZCBwb3NzaWJsZSBmb3IgdGhpcyBlbnZcclxuICAgIC8vIFdoZXJldmVyIHBvc3NpYmxlIHdlIHdhbnQgdG8gYmluZCwgbm90IHdyYXAsIHRvIHByZXNlcnZlIHN0YWNrIHRyYWNlc1xyXG4gICAgZnVuY3Rpb24gcmVhbE1ldGhvZChtZXRob2ROYW1lKSB7XHJcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdkZWJ1ZycpIHtcclxuICAgICAgICAgICAgbWV0aG9kTmFtZSA9ICdsb2cnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSB1bmRlZmluZWRUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gbWV0aG9kIHBvc3NpYmxlLCBmb3Igbm93IC0gZml4ZWQgbGF0ZXIgYnkgZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlc1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uc29sZVttZXRob2ROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsIG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uc29sZS5sb2cgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmluZE1ldGhvZChjb25zb2xlLCAnbG9nJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vb3A7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZXNlIHByaXZhdGUgZnVuY3Rpb25zIGFsd2F5cyBuZWVkIGB0aGlzYCB0byBiZSBzZXQgcHJvcGVybHlcclxuXHJcbiAgICBmdW5jdGlvbiByZXBsYWNlTG9nZ2luZ01ldGhvZHMobGV2ZWwsIGxvZ2dlck5hbWUpIHtcclxuICAgICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9nTWV0aG9kcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbWV0aG9kTmFtZSA9IGxvZ01ldGhvZHNbaV07XHJcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZV0gPSAoaSA8IGxldmVsKSA/XHJcbiAgICAgICAgICAgICAgICBub29wIDpcclxuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kRmFjdG9yeShtZXRob2ROYW1lLCBsZXZlbCwgbG9nZ2VyTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWZpbmUgbG9nLmxvZyBhcyBhbiBhbGlhcyBmb3IgbG9nLmRlYnVnXHJcbiAgICAgICAgdGhpcy5sb2cgPSB0aGlzLmRlYnVnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluIG9sZCBJRSB2ZXJzaW9ucywgdGhlIGNvbnNvbGUgaXNuJ3QgcHJlc2VudCB1bnRpbCB5b3UgZmlyc3Qgb3BlbiBpdC5cclxuICAgIC8vIFdlIGJ1aWxkIHJlYWxNZXRob2QoKSByZXBsYWNlbWVudHMgaGVyZSB0aGF0IHJlZ2VuZXJhdGUgbG9nZ2luZyBtZXRob2RzXHJcbiAgICBmdW5jdGlvbiBlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzKG1ldGhvZE5hbWUsIGxldmVsLCBsb2dnZXJOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSB1bmRlZmluZWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9nZ2luZ01ldGhvZHMuY2FsbCh0aGlzLCBsZXZlbCwgbG9nZ2VyTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzW21ldGhvZE5hbWVdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJ5IGRlZmF1bHQsIHdlIHVzZSBjbG9zZWx5IGJvdW5kIHJlYWwgbWV0aG9kcyB3aGVyZXZlciBwb3NzaWJsZSwgYW5kXHJcbiAgICAvLyBvdGhlcndpc2Ugd2Ugd2FpdCBmb3IgYSBjb25zb2xlIHRvIGFwcGVhciwgYW5kIHRoZW4gdHJ5IGFnYWluLlxyXG4gICAgZnVuY3Rpb24gZGVmYXVsdE1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIGxvZ2dlck5hbWUpIHtcclxuICAgICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xyXG4gICAgICAgIHJldHVybiByZWFsTWV0aG9kKG1ldGhvZE5hbWUpIHx8XHJcbiAgICAgICAgICAgICAgIGVuYWJsZUxvZ2dpbmdXaGVuQ29uc29sZUFycml2ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBMb2dnZXIobmFtZSwgZGVmYXVsdExldmVsLCBmYWN0b3J5KSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgdmFyIGN1cnJlbnRMZXZlbDtcclxuICAgICAgdmFyIHN0b3JhZ2VLZXkgPSBcImxvZ2xldmVsXCI7XHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgc3RvcmFnZUtleSArPSBcIjpcIiArIG5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHBlcnNpc3RMZXZlbElmUG9zc2libGUobGV2ZWxOdW0pIHtcclxuICAgICAgICAgIHZhciBsZXZlbE5hbWUgPSAobG9nTWV0aG9kc1tsZXZlbE51bV0gfHwgJ3NpbGVudCcpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IHVuZGVmaW5lZFR5cGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAvLyBVc2UgbG9jYWxTdG9yYWdlIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldID0gbGV2ZWxOYW1lO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cclxuXHJcbiAgICAgICAgICAvLyBVc2Ugc2Vzc2lvbiBjb29raWUgYXMgZmFsbGJhY2tcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmNvb2tpZSA9XHJcbiAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RvcmFnZUtleSkgKyBcIj1cIiArIGxldmVsTmFtZSArIFwiO1wiO1xyXG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBnZXRQZXJzaXN0ZWRMZXZlbCgpIHtcclxuICAgICAgICAgIHZhciBzdG9yZWRMZXZlbDtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkVHlwZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgc3RvcmVkTGV2ZWwgPSB3aW5kb3cubG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldO1xyXG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxyXG5cclxuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGNvb2tpZXMgaWYgbG9jYWwgc3RvcmFnZSBnaXZlcyB1cyBub3RoaW5nXHJcbiAgICAgICAgICBpZiAodHlwZW9mIHN0b3JlZExldmVsID09PSB1bmRlZmluZWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGNvb2tpZSA9IHdpbmRvdy5kb2N1bWVudC5jb29raWU7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNvb2tpZS5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VLZXkpICsgXCI9XCIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IC9eKFteO10rKS8uZXhlYyhjb29raWUuc2xpY2UobG9jYXRpb24pKVsxXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgc3RvcmVkIGxldmVsIGlzIG5vdCB2YWxpZCwgdHJlYXQgaXQgYXMgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxyXG4gICAgICAgICAgaWYgKHNlbGYubGV2ZWxzW3N0b3JlZExldmVsXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgc3RvcmVkTGV2ZWwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHN0b3JlZExldmVsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBQdWJsaWMgbG9nZ2VyIEFQSSAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWwgZm9yIGRldGFpbHNcclxuICAgICAgICpcclxuICAgICAgICovXHJcblxyXG4gICAgICBzZWxmLm5hbWUgPSBuYW1lO1xyXG5cclxuICAgICAgc2VsZi5sZXZlbHMgPSB7IFwiVFJBQ0VcIjogMCwgXCJERUJVR1wiOiAxLCBcIklORk9cIjogMiwgXCJXQVJOXCI6IDMsXHJcbiAgICAgICAgICBcIkVSUk9SXCI6IDQsIFwiU0lMRU5UXCI6IDV9O1xyXG5cclxuICAgICAgc2VsZi5tZXRob2RGYWN0b3J5ID0gZmFjdG9yeSB8fCBkZWZhdWx0TWV0aG9kRmFjdG9yeTtcclxuXHJcbiAgICAgIHNlbGYuZ2V0TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY3VycmVudExldmVsO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgc2VsZi5zZXRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCwgcGVyc2lzdCkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gXCJzdHJpbmdcIiAmJiBzZWxmLmxldmVsc1tsZXZlbC50b1VwcGVyQ2FzZSgpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgbGV2ZWwgPSBzZWxmLmxldmVsc1tsZXZlbC50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09IFwibnVtYmVyXCIgJiYgbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSBzZWxmLmxldmVscy5TSUxFTlQpIHtcclxuICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwgPSBsZXZlbDtcclxuICAgICAgICAgICAgICBpZiAocGVyc2lzdCAhPT0gZmFsc2UpIHsgIC8vIGRlZmF1bHRzIHRvIHRydWVcclxuICAgICAgICAgICAgICAgICAgcGVyc2lzdExldmVsSWZQb3NzaWJsZShsZXZlbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJlcGxhY2VMb2dnaW5nTWV0aG9kcy5jYWxsKHNlbGYsIGxldmVsLCBuYW1lKTtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09IHVuZGVmaW5lZFR5cGUgJiYgbGV2ZWwgPCBzZWxmLmxldmVscy5TSUxFTlQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiTm8gY29uc29sZSBhdmFpbGFibGUgZm9yIGxvZ2dpbmdcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IFwibG9nLnNldExldmVsKCkgY2FsbGVkIHdpdGggaW52YWxpZCBsZXZlbDogXCIgKyBsZXZlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHNlbGYuc2V0RGVmYXVsdExldmVsID0gZnVuY3Rpb24gKGxldmVsKSB7XHJcbiAgICAgICAgICBpZiAoIWdldFBlcnNpc3RlZExldmVsKCkpIHtcclxuICAgICAgICAgICAgICBzZWxmLnNldExldmVsKGxldmVsLCBmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBzZWxmLmVuYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcclxuICAgICAgICAgIHNlbGYuc2V0TGV2ZWwoc2VsZi5sZXZlbHMuVFJBQ0UsIHBlcnNpc3QpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgc2VsZi5kaXNhYmxlQWxsID0gZnVuY3Rpb24ocGVyc2lzdCkge1xyXG4gICAgICAgICAgc2VsZi5zZXRMZXZlbChzZWxmLmxldmVscy5TSUxFTlQsIHBlcnNpc3QpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gSW5pdGlhbGl6ZSB3aXRoIHRoZSByaWdodCBsZXZlbFxyXG4gICAgICB2YXIgaW5pdGlhbExldmVsID0gZ2V0UGVyc2lzdGVkTGV2ZWwoKTtcclxuICAgICAgaWYgKGluaXRpYWxMZXZlbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBpbml0aWFsTGV2ZWwgPSBkZWZhdWx0TGV2ZWwgPT0gbnVsbCA/IFwiV0FSTlwiIDogZGVmYXVsdExldmVsO1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGYuc2V0TGV2ZWwoaW5pdGlhbExldmVsLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqXHJcbiAgICAgKiBUb3AtbGV2ZWwgQVBJXHJcbiAgICAgKlxyXG4gICAgICovXHJcblxyXG4gICAgdmFyIGRlZmF1bHRMb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XHJcblxyXG4gICAgdmFyIF9sb2dnZXJzQnlOYW1lID0ge307XHJcbiAgICBkZWZhdWx0TG9nZ2VyLmdldExvZ2dlciA9IGZ1bmN0aW9uIGdldExvZ2dlcihuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiIHx8IG5hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBzdXBwbHkgYSBuYW1lIHdoZW4gY3JlYXRpbmcgYSBsb2dnZXIuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxvZ2dlciA9IF9sb2dnZXJzQnlOYW1lW25hbWVdO1xyXG4gICAgICAgIGlmICghbG9nZ2VyKSB7XHJcbiAgICAgICAgICBsb2dnZXIgPSBfbG9nZ2Vyc0J5TmFtZVtuYW1lXSA9IG5ldyBMb2dnZXIoXHJcbiAgICAgICAgICAgIG5hbWUsIGRlZmF1bHRMb2dnZXIuZ2V0TGV2ZWwoKSwgZGVmYXVsdExvZ2dlci5tZXRob2RGYWN0b3J5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH07XHJcblxyXG4gICAgLy8gR3JhYiB0aGUgY3VycmVudCBnbG9iYWwgbG9nIHZhcmlhYmxlIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXHJcbiAgICB2YXIgX2xvZyA9ICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlKSA/IHdpbmRvdy5sb2cgOiB1bmRlZmluZWQ7XHJcbiAgICBkZWZhdWx0TG9nZ2VyLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkVHlwZSAmJlxyXG4gICAgICAgICAgICAgICB3aW5kb3cubG9nID09PSBkZWZhdWx0TG9nZ2VyKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2cgPSBfbG9nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMb2dnZXI7XHJcbiAgICB9O1xyXG5cclxuICAgIGRlZmF1bHRMb2dnZXIuZ2V0TG9nZ2VycyA9IGZ1bmN0aW9uIGdldExvZ2dlcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9sb2dnZXJzQnlOYW1lO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gZGVmYXVsdExvZ2dlcjtcclxufSkpO1xyXG4iLCIvKlxyXG4gICAgIF8gXyAgICAgIF8gICAgICAgX1xyXG4gX19ffCAoXykgX19ffCB8IF9fICAoXylfX19cclxuLyBfX3wgfCB8LyBfX3wgfC8gLyAgfCAvIF9ffFxyXG5cXF9fIFxcIHwgfCAoX198ICAgPCBfIHwgXFxfXyBcXFxyXG58X19fL198X3xcXF9fX3xffFxcXyhfKS8gfF9fXy9cclxuICAgICAgICAgICAgICAgICAgIHxfXy9cclxuXHJcbiBWZXJzaW9uOiAxLjguMFxyXG4gIEF1dGhvcjogS2VuIFdoZWVsZXJcclxuIFdlYnNpdGU6IGh0dHA6Ly9rZW53aGVlbGVyLmdpdGh1Yi5pb1xyXG4gICAgRG9jczogaHR0cDovL2tlbndoZWVsZXIuZ2l0aHViLmlvL3NsaWNrXHJcbiAgICBSZXBvOiBodHRwOi8vZ2l0aHViLmNvbS9rZW53aGVlbGVyL3NsaWNrXHJcbiAgSXNzdWVzOiBodHRwOi8vZ2l0aHViLmNvbS9rZW53aGVlbGVyL3NsaWNrL2lzc3Vlc1xyXG5cclxuICovXHJcbi8qIGdsb2JhbCB3aW5kb3csIGRvY3VtZW50LCBkZWZpbmUsIGpRdWVyeSwgc2V0SW50ZXJ2YWwsIGNsZWFySW50ZXJ2YWwgKi9cclxuOyhmdW5jdGlvbihmYWN0b3J5KSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGpRdWVyeSk7XHJcbiAgICB9XHJcblxyXG59KGZ1bmN0aW9uKCQpIHtcclxuICAgICd1c2Ugc3RyaWN0JztcclxuICAgIHZhciBTbGljayA9IHdpbmRvdy5TbGljayB8fCB7fTtcclxuXHJcbiAgICBTbGljayA9IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGluc3RhbmNlVWlkID0gMDtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gU2xpY2soZWxlbWVudCwgc2V0dGluZ3MpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBfID0gdGhpcywgZGF0YVNldHRpbmdzO1xyXG5cclxuICAgICAgICAgICAgXy5kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBhZGFwdGl2ZUhlaWdodDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhcHBlbmRBcnJvd3M6ICQoZWxlbWVudCksXHJcbiAgICAgICAgICAgICAgICBhcHBlbmREb3RzOiAkKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAgICAgYXJyb3dzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYXNOYXZGb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBwcmV2QXJyb3c6ICc8YnV0dG9uIGNsYXNzPVwic2xpY2stcHJldlwiIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiIHR5cGU9XCJidXR0b25cIj5QcmV2aW91czwvYnV0dG9uPicsXHJcbiAgICAgICAgICAgICAgICBuZXh0QXJyb3c6ICc8YnV0dG9uIGNsYXNzPVwic2xpY2stbmV4dFwiIGFyaWEtbGFiZWw9XCJOZXh0XCIgdHlwZT1cImJ1dHRvblwiPk5leHQ8L2J1dHRvbj4nLFxyXG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYXV0b3BsYXlTcGVlZDogMzAwMCxcclxuICAgICAgICAgICAgICAgIGNlbnRlck1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY2VudGVyUGFkZGluZzogJzUwcHgnLFxyXG4gICAgICAgICAgICAgICAgY3NzRWFzZTogJ2Vhc2UnLFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tUGFnaW5nOiBmdW5jdGlvbihzbGlkZXIsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgLz4nKS50ZXh0KGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkb3RzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRvdHNDbGFzczogJ3NsaWNrLWRvdHMnLFxyXG4gICAgICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiAnbGluZWFyJyxcclxuICAgICAgICAgICAgICAgIGVkZ2VGcmljdGlvbjogMC4zNSxcclxuICAgICAgICAgICAgICAgIGZhZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZm9jdXNPblNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBmb2N1c09uQ2hhbmdlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGluZmluaXRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaW5pdGlhbFNsaWRlOiAwLFxyXG4gICAgICAgICAgICAgICAgbGF6eUxvYWQ6ICdvbmRlbWFuZCcsXHJcbiAgICAgICAgICAgICAgICBtb2JpbGVGaXJzdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwYXVzZU9uSG92ZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXVzZU9uRm9jdXM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXVzZU9uRG90c0hvdmVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3BvbmRUbzogJ3dpbmRvdycsXHJcbiAgICAgICAgICAgICAgICByZXNwb25zaXZlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcm93czogMSxcclxuICAgICAgICAgICAgICAgIHJ0bDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzbGlkZTogJycsXHJcbiAgICAgICAgICAgICAgICBzbGlkZXNQZXJSb3c6IDEsXHJcbiAgICAgICAgICAgICAgICBzbGlkZXNUb1Nob3c6IDEsXHJcbiAgICAgICAgICAgICAgICBzbGlkZXNUb1Njcm9sbDogMSxcclxuICAgICAgICAgICAgICAgIHNwZWVkOiA1MDAsXHJcbiAgICAgICAgICAgICAgICBzd2lwZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHN3aXBlVG9TbGlkZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0b3VjaE1vdmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0b3VjaFRocmVzaG9sZDogNSxcclxuICAgICAgICAgICAgICAgIHVzZUNTUzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHVzZVRyYW5zZm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlV2lkdGg6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmVydGljYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmVydGljYWxTd2lwaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHdhaXRGb3JBbmltYXRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgekluZGV4OiAxMDAwXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBfLmluaXRpYWxzID0ge1xyXG4gICAgICAgICAgICAgICAgYW5pbWF0aW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRyYWdnaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGF1dG9QbGF5VGltZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50RGlyZWN0aW9uOiAwLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudExlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2xpZGU6IDAsXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IDEsXHJcbiAgICAgICAgICAgICAgICAkZG90czogbnVsbCxcclxuICAgICAgICAgICAgICAgIGxpc3RXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGxpc3RIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBsb2FkSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAkbmV4dEFycm93OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgJHByZXZBcnJvdzogbnVsbCxcclxuICAgICAgICAgICAgICAgIHNjcm9sbGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzbGlkZUNvdW50OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc2xpZGVXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICRzbGlkZVRyYWNrOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgJHNsaWRlczogbnVsbCxcclxuICAgICAgICAgICAgICAgIHNsaWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2xpZGVPZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICBzd2lwZUxlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzd2lwaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICRsaXN0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgdG91Y2hPYmplY3Q6IHt9LFxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3Jtc0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdW5zbGlja2VkOiBmYWxzZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgJC5leHRlbmQoXywgXy5pbml0aWFscyk7XHJcblxyXG4gICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPSBudWxsO1xyXG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgXy5hbmltUHJvcCA9IG51bGw7XHJcbiAgICAgICAgICAgIF8uYnJlYWtwb2ludHMgPSBbXTtcclxuICAgICAgICAgICAgXy5icmVha3BvaW50U2V0dGluZ3MgPSBbXTtcclxuICAgICAgICAgICAgXy5jc3NUcmFuc2l0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfLmZvY3Vzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF8uaW50ZXJydXB0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgXy5oaWRkZW4gPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgXy5wYXVzZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBfLnBvc2l0aW9uUHJvcCA9IG51bGw7XHJcbiAgICAgICAgICAgIF8ucmVzcG9uZFRvID0gbnVsbDtcclxuICAgICAgICAgICAgXy5yb3dDb3VudCA9IDE7XHJcbiAgICAgICAgICAgIF8uc2hvdWxkQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBfLiRzbGlkZXIgPSAkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBfLiRzbGlkZXNDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgICAgIF8udHJhbnNmb3JtVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICBfLnZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XHJcbiAgICAgICAgICAgIF8ud2luZG93V2lkdGggPSAwO1xyXG4gICAgICAgICAgICBfLndpbmRvd1RpbWVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGRhdGFTZXR0aW5ncyA9ICQoZWxlbWVudCkuZGF0YSgnc2xpY2snKSB8fCB7fTtcclxuXHJcbiAgICAgICAgICAgIF8ub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBfLmRlZmF1bHRzLCBzZXR0aW5ncywgZGF0YVNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gXy5vcHRpb25zLmluaXRpYWxTbGlkZTtcclxuXHJcbiAgICAgICAgICAgIF8ub3JpZ2luYWxTZXR0aW5ncyA9IF8ub3B0aW9ucztcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubW96SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgXy5oaWRkZW4gPSAnbW96SGlkZGVuJztcclxuICAgICAgICAgICAgICAgIF8udmlzaWJpbGl0eUNoYW5nZSA9ICdtb3p2aXNpYmlsaXR5Y2hhbmdlJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgXy5oaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcclxuICAgICAgICAgICAgICAgIF8udmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXy5hdXRvUGxheSA9ICQucHJveHkoXy5hdXRvUGxheSwgXyk7XHJcbiAgICAgICAgICAgIF8uYXV0b1BsYXlDbGVhciA9ICQucHJveHkoXy5hdXRvUGxheUNsZWFyLCBfKTtcclxuICAgICAgICAgICAgXy5hdXRvUGxheUl0ZXJhdG9yID0gJC5wcm94eShfLmF1dG9QbGF5SXRlcmF0b3IsIF8pO1xyXG4gICAgICAgICAgICBfLmNoYW5nZVNsaWRlID0gJC5wcm94eShfLmNoYW5nZVNsaWRlLCBfKTtcclxuICAgICAgICAgICAgXy5jbGlja0hhbmRsZXIgPSAkLnByb3h5KF8uY2xpY2tIYW5kbGVyLCBfKTtcclxuICAgICAgICAgICAgXy5zZWxlY3RIYW5kbGVyID0gJC5wcm94eShfLnNlbGVjdEhhbmRsZXIsIF8pO1xyXG4gICAgICAgICAgICBfLnNldFBvc2l0aW9uID0gJC5wcm94eShfLnNldFBvc2l0aW9uLCBfKTtcclxuICAgICAgICAgICAgXy5zd2lwZUhhbmRsZXIgPSAkLnByb3h5KF8uc3dpcGVIYW5kbGVyLCBfKTtcclxuICAgICAgICAgICAgXy5kcmFnSGFuZGxlciA9ICQucHJveHkoXy5kcmFnSGFuZGxlciwgXyk7XHJcbiAgICAgICAgICAgIF8ua2V5SGFuZGxlciA9ICQucHJveHkoXy5rZXlIYW5kbGVyLCBfKTtcclxuXHJcbiAgICAgICAgICAgIF8uaW5zdGFuY2VVaWQgPSBpbnN0YW5jZVVpZCsrO1xyXG5cclxuICAgICAgICAgICAgLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3NcclxuICAgICAgICAgICAgLy8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKG11c3Qgc3RhcnQgd2l0aCA8KVxyXG4gICAgICAgICAgICAvLyBFeHRyYWN0ZWQgZnJvbSBqUXVlcnkgdjEuMTEgc291cmNlXHJcbiAgICAgICAgICAgIF8uaHRtbEV4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSopJC87XHJcblxyXG5cclxuICAgICAgICAgICAgXy5yZWdpc3RlckJyZWFrcG9pbnRzKCk7XHJcbiAgICAgICAgICAgIF8uaW5pdCh0cnVlKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gU2xpY2s7XHJcblxyXG4gICAgfSgpKTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYWN0aXZhdGVBREEgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlVHJhY2suZmluZCgnLnNsaWNrLWFjdGl2ZScpLmF0dHIoe1xyXG4gICAgICAgICAgICAnYXJpYS1oaWRkZW4nOiAnZmFsc2UnXHJcbiAgICAgICAgfSkuZmluZCgnYSwgaW5wdXQsIGJ1dHRvbiwgc2VsZWN0JykuYXR0cih7XHJcbiAgICAgICAgICAgICd0YWJpbmRleCc6ICcwJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmFkZFNsaWRlID0gU2xpY2sucHJvdG90eXBlLnNsaWNrQWRkID0gZnVuY3Rpb24obWFya3VwLCBpbmRleCwgYWRkQmVmb3JlKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZihpbmRleCkgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICBhZGRCZWZvcmUgPSBpbmRleDtcclxuICAgICAgICAgICAgaW5kZXggPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCAwIHx8IChpbmRleCA+PSBfLnNsaWRlQ291bnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8udW5sb2FkKCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kZXgpID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgXy4kc2xpZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgJChtYXJrdXApLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFkZEJlZm9yZSkge1xyXG4gICAgICAgICAgICAgICAgJChtYXJrdXApLmluc2VydEJlZm9yZShfLiRzbGlkZXMuZXEoaW5kZXgpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICQobWFya3VwKS5pbnNlcnRBZnRlcihfLiRzbGlkZXMuZXEoaW5kZXgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChhZGRCZWZvcmUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICQobWFya3VwKS5wcmVwZW5kVG8oXy4kc2xpZGVUcmFjayk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKG1hcmt1cCkuYXBwZW5kVG8oXy4kc2xpZGVUcmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uJHNsaWRlcyA9IF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpLmRldGFjaCgpO1xyXG5cclxuICAgICAgICBfLiRzbGlkZVRyYWNrLmFwcGVuZChfLiRzbGlkZXMpO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAkKGVsZW1lbnQpLmF0dHIoJ2RhdGEtc2xpY2staW5kZXgnLCBpbmRleCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlc0NhY2hlID0gXy4kc2xpZGVzO1xyXG5cclxuICAgICAgICBfLnJlaW5pdCgpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmFuaW1hdGVIZWlnaHQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPT09IDEgJiYgXy5vcHRpb25zLmFkYXB0aXZlSGVpZ2h0ID09PSB0cnVlICYmIF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEhlaWdodCA9IF8uJHNsaWRlcy5lcShfLmN1cnJlbnRTbGlkZSkub3V0ZXJIZWlnaHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIF8uJGxpc3QuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRhcmdldEhlaWdodFxyXG4gICAgICAgICAgICB9LCBfLm9wdGlvbnMuc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmFuaW1hdGVTbGlkZSA9IGZ1bmN0aW9uKHRhcmdldExlZnQsIGNhbGxiYWNrKSB7XHJcblxyXG4gICAgICAgIHZhciBhbmltUHJvcHMgPSB7fSxcclxuICAgICAgICAgICAgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uYW5pbWF0ZUhlaWdodCgpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRhcmdldExlZnQgPSAtdGFyZ2V0TGVmdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF8udHJhbnNmb3Jtc0VuYWJsZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRhcmdldExlZnRcclxuICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCwgXy5vcHRpb25zLmVhc2luZywgY2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IHRhcmdldExlZnRcclxuICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCwgXy5vcHRpb25zLmVhc2luZywgY2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoXy5jc3NUcmFuc2l0aW9ucyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMucnRsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5jdXJyZW50TGVmdCA9IC0oXy5jdXJyZW50TGVmdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKHtcclxuICAgICAgICAgICAgICAgICAgICBhbmltU3RhcnQ6IF8uY3VycmVudExlZnRcclxuICAgICAgICAgICAgICAgIH0pLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1TdGFydDogdGFyZ2V0TGVmdFxyXG4gICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBfLm9wdGlvbnMuc3BlZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBfLm9wdGlvbnMuZWFzaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA6IGZ1bmN0aW9uKG5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3cgPSBNYXRoLmNlaWwobm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1Qcm9wc1tfLmFuaW1UeXBlXSA9ICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93ICsgJ3B4LCAwcHgpJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKGFuaW1Qcm9wcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltUHJvcHNbXy5hbmltVHlwZV0gPSAndHJhbnNsYXRlKDBweCwnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgKyAncHgpJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKGFuaW1Qcm9wcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy5hcHBseVRyYW5zaXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSBNYXRoLmNlaWwodGFyZ2V0TGVmdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmltUHJvcHNbXy5hbmltVHlwZV0gPSAndHJhbnNsYXRlM2QoJyArIHRhcmdldExlZnQgKyAncHgsIDBweCwgMHB4KSc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1Qcm9wc1tfLmFuaW1UeXBlXSA9ICd0cmFuc2xhdGUzZCgwcHgsJyArIHRhcmdldExlZnQgKyAncHgsIDBweCknO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MoYW5pbVByb3BzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5kaXNhYmxlVHJhbnNpdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXROYXZUYXJnZXQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICBhc05hdkZvciA9IF8ub3B0aW9ucy5hc05hdkZvcjtcclxuXHJcbiAgICAgICAgaWYgKCBhc05hdkZvciAmJiBhc05hdkZvciAhPT0gbnVsbCApIHtcclxuICAgICAgICAgICAgYXNOYXZGb3IgPSAkKGFzTmF2Rm9yKS5ub3QoXy4kc2xpZGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhc05hdkZvcjtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5hc05hdkZvciA9IGZ1bmN0aW9uKGluZGV4KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgYXNOYXZGb3IgPSBfLmdldE5hdlRhcmdldCgpO1xyXG5cclxuICAgICAgICBpZiAoIGFzTmF2Rm9yICE9PSBudWxsICYmIHR5cGVvZiBhc05hdkZvciA9PT0gJ29iamVjdCcgKSB7XHJcbiAgICAgICAgICAgIGFzTmF2Rm9yLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJCh0aGlzKS5zbGljaygnZ2V0U2xpY2snKTtcclxuICAgICAgICAgICAgICAgIGlmKCF0YXJnZXQudW5zbGlja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNsaWRlSGFuZGxlcihpbmRleCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5hcHBseVRyYW5zaXRpb24gPSBmdW5jdGlvbihzbGlkZSkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24gPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0cmFuc2l0aW9uW18udHJhbnNpdGlvblR5cGVdID0gXy50cmFuc2Zvcm1UeXBlICsgJyAnICsgXy5vcHRpb25zLnNwZWVkICsgJ21zICcgKyBfLm9wdGlvbnMuY3NzRWFzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cmFuc2l0aW9uW18udHJhbnNpdGlvblR5cGVdID0gJ29wYWNpdHkgJyArIF8ub3B0aW9ucy5zcGVlZCArICdtcyAnICsgXy5vcHRpb25zLmNzc0Vhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHRyYW5zaXRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZSkuY3NzKHRyYW5zaXRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5hdXRvUGxheSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uYXV0b1BsYXlDbGVhcigpO1xyXG5cclxuICAgICAgICBpZiAoIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKSB7XHJcbiAgICAgICAgICAgIF8uYXV0b1BsYXlUaW1lciA9IHNldEludGVydmFsKCBfLmF1dG9QbGF5SXRlcmF0b3IsIF8ub3B0aW9ucy5hdXRvcGxheVNwZWVkICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmF1dG9QbGF5Q2xlYXIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy5hdXRvUGxheVRpbWVyKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoXy5hdXRvUGxheVRpbWVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYXV0b1BsYXlJdGVyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHNsaWRlVG8gPSBfLmN1cnJlbnRTbGlkZSArIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcclxuXHJcbiAgICAgICAgaWYgKCAhXy5wYXVzZWQgJiYgIV8uaW50ZXJydXB0ZWQgJiYgIV8uZm9jdXNzZWQgKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCBfLmRpcmVjdGlvbiA9PT0gMSAmJiAoIF8uY3VycmVudFNsaWRlICsgMSApID09PSAoIF8uc2xpZGVDb3VudCAtIDEgKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uZGlyZWN0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICggXy5kaXJlY3Rpb24gPT09IDAgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlVG8gPSBfLmN1cnJlbnRTbGlkZSAtIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBfLmN1cnJlbnRTbGlkZSAtIDEgPT09IDAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uZGlyZWN0aW9uID0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoIHNsaWRlVG8gKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmJ1aWxkQXJyb3dzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hcnJvd3MgPT09IHRydWUgKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRwcmV2QXJyb3cgPSAkKF8ub3B0aW9ucy5wcmV2QXJyb3cpLmFkZENsYXNzKCdzbGljay1hcnJvdycpO1xyXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cgPSAkKF8ub3B0aW9ucy5uZXh0QXJyb3cpLmFkZENsYXNzKCdzbGljay1hcnJvdycpO1xyXG5cclxuICAgICAgICAgICAgaWYoIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZUNsYXNzKCdzbGljay1oaWRkZW4nKS5yZW1vdmVBdHRyKCdhcmlhLWhpZGRlbiB0YWJpbmRleCcpO1xyXG4gICAgICAgICAgICAgICAgXy4kbmV4dEFycm93LnJlbW92ZUNsYXNzKCdzbGljay1oaWRkZW4nKS5yZW1vdmVBdHRyKCdhcmlhLWhpZGRlbiB0YWJpbmRleCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfLmh0bWxFeHByLnRlc3QoXy5vcHRpb25zLnByZXZBcnJvdykpIHtcclxuICAgICAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucHJlcGVuZFRvKF8ub3B0aW9ucy5hcHBlbmRBcnJvd3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfLmh0bWxFeHByLnRlc3QoXy5vcHRpb25zLm5leHRBcnJvdykpIHtcclxuICAgICAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cuYXBwZW5kVG8oXy5vcHRpb25zLmFwcGVuZEFycm93cyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cuYWRkKCBfLiRuZXh0QXJyb3cgKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWhpZGRlbicpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnYXJpYS1kaXNhYmxlZCc6ICd0cnVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RhYmluZGV4JzogJy0xJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYnVpbGREb3RzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgaSwgZG90O1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVyLmFkZENsYXNzKCdzbGljay1kb3R0ZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGRvdCA9ICQoJzx1bCAvPicpLmFkZENsYXNzKF8ub3B0aW9ucy5kb3RzQ2xhc3MpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBfLmdldERvdENvdW50KCk7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICAgICAgZG90LmFwcGVuZCgkKCc8bGkgLz4nKS5hcHBlbmQoXy5vcHRpb25zLmN1c3RvbVBhZ2luZy5jYWxsKHRoaXMsIF8sIGkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF8uJGRvdHMgPSBkb3QuYXBwZW5kVG8oXy5vcHRpb25zLmFwcGVuZERvdHMpO1xyXG5cclxuICAgICAgICAgICAgXy4kZG90cy5maW5kKCdsaScpLmZpcnN0KCkuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYnVpbGRPdXQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXMgPVxyXG4gICAgICAgICAgICBfLiRzbGlkZXJcclxuICAgICAgICAgICAgICAgIC5jaGlsZHJlbiggXy5vcHRpb25zLnNsaWRlICsgJzpub3QoLnNsaWNrLWNsb25lZCknKVxyXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1zbGlkZScpO1xyXG5cclxuICAgICAgICBfLnNsaWRlQ291bnQgPSBfLiRzbGlkZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAkKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAuYXR0cignZGF0YS1zbGljay1pbmRleCcsIGluZGV4KVxyXG4gICAgICAgICAgICAgICAgLmRhdGEoJ29yaWdpbmFsU3R5bGluZycsICQoZWxlbWVudCkuYXR0cignc3R5bGUnKSB8fCAnJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlci5hZGRDbGFzcygnc2xpY2stc2xpZGVyJyk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlVHJhY2sgPSAoXy5zbGlkZUNvdW50ID09PSAwKSA/XHJcbiAgICAgICAgICAgICQoJzxkaXYgY2xhc3M9XCJzbGljay10cmFja1wiLz4nKS5hcHBlbmRUbyhfLiRzbGlkZXIpIDpcclxuICAgICAgICAgICAgXy4kc2xpZGVzLndyYXBBbGwoJzxkaXYgY2xhc3M9XCJzbGljay10cmFja1wiLz4nKS5wYXJlbnQoKTtcclxuXHJcbiAgICAgICAgXy4kbGlzdCA9IF8uJHNsaWRlVHJhY2sud3JhcChcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzbGljay1saXN0XCIvPicpLnBhcmVudCgpO1xyXG4gICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKCdvcGFjaXR5JywgMCk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSB8fCBfLm9wdGlvbnMuc3dpcGVUb1NsaWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKCdpbWdbZGF0YS1sYXp5XScsIF8uJHNsaWRlcikubm90KCdbc3JjXScpLmFkZENsYXNzKCdzbGljay1sb2FkaW5nJyk7XHJcblxyXG4gICAgICAgIF8uc2V0dXBJbmZpbml0ZSgpO1xyXG5cclxuICAgICAgICBfLmJ1aWxkQXJyb3dzKCk7XHJcblxyXG4gICAgICAgIF8uYnVpbGREb3RzKCk7XHJcblxyXG4gICAgICAgIF8udXBkYXRlRG90cygpO1xyXG5cclxuXHJcbiAgICAgICAgXy5zZXRTbGlkZUNsYXNzZXModHlwZW9mIF8uY3VycmVudFNsaWRlID09PSAnbnVtYmVyJyA/IF8uY3VycmVudFNsaWRlIDogMCk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZHJhZ2dhYmxlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uJGxpc3QuYWRkQ2xhc3MoJ2RyYWdnYWJsZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5idWlsZFJvd3MgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLCBhLCBiLCBjLCBuZXdTbGlkZXMsIG51bU9mU2xpZGVzLCBvcmlnaW5hbFNsaWRlcyxzbGlkZXNQZXJTZWN0aW9uO1xyXG5cclxuICAgICAgICBuZXdTbGlkZXMgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgICAgb3JpZ2luYWxTbGlkZXMgPSBfLiRzbGlkZXIuY2hpbGRyZW4oKTtcclxuXHJcbiAgICAgICAgaWYoXy5vcHRpb25zLnJvd3MgPiAwKSB7XHJcblxyXG4gICAgICAgICAgICBzbGlkZXNQZXJTZWN0aW9uID0gXy5vcHRpb25zLnNsaWRlc1BlclJvdyAqIF8ub3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgICBudW1PZlNsaWRlcyA9IE1hdGguY2VpbChcclxuICAgICAgICAgICAgICAgIG9yaWdpbmFsU2xpZGVzLmxlbmd0aCAvIHNsaWRlc1BlclNlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvcihhID0gMDsgYSA8IG51bU9mU2xpZGVzOyBhKyspe1xyXG4gICAgICAgICAgICAgICAgdmFyIHNsaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBmb3IoYiA9IDA7IGIgPCBfLm9wdGlvbnMucm93czsgYisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihjID0gMDsgYyA8IF8ub3B0aW9ucy5zbGlkZXNQZXJSb3c7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gKGEgKiBzbGlkZXNQZXJTZWN0aW9uICsgKChiICogXy5vcHRpb25zLnNsaWRlc1BlclJvdykgKyBjKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFNsaWRlcy5nZXQodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKG9yaWdpbmFsU2xpZGVzLmdldCh0YXJnZXQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzbGlkZS5hcHBlbmRDaGlsZChyb3cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV3U2xpZGVzLmFwcGVuZENoaWxkKHNsaWRlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVyLmVtcHR5KCkuYXBwZW5kKG5ld1NsaWRlcyk7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlci5jaGlsZHJlbigpLmNoaWxkcmVuKCkuY2hpbGRyZW4oKVxyXG4gICAgICAgICAgICAgICAgLmNzcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzooMTAwIC8gXy5vcHRpb25zLnNsaWRlc1BlclJvdykgKyAnJScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXknOiAnaW5saW5lLWJsb2NrJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5jaGVja1Jlc3BvbnNpdmUgPSBmdW5jdGlvbihpbml0aWFsLCBmb3JjZVVwZGF0ZSkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGJyZWFrcG9pbnQsIHRhcmdldEJyZWFrcG9pbnQsIHJlc3BvbmRUb1dpZHRoLCB0cmlnZ2VyQnJlYWtwb2ludCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBzbGlkZXJXaWR0aCA9IF8uJHNsaWRlci53aWR0aCgpO1xyXG4gICAgICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8ICQod2luZG93KS53aWR0aCgpO1xyXG5cclxuICAgICAgICBpZiAoXy5yZXNwb25kVG8gPT09ICd3aW5kb3cnKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbmRUb1dpZHRoID0gd2luZG93V2lkdGg7XHJcbiAgICAgICAgfSBlbHNlIGlmIChfLnJlc3BvbmRUbyA9PT0gJ3NsaWRlcicpIHtcclxuICAgICAgICAgICAgcmVzcG9uZFRvV2lkdGggPSBzbGlkZXJXaWR0aDtcclxuICAgICAgICB9IGVsc2UgaWYgKF8ucmVzcG9uZFRvID09PSAnbWluJykge1xyXG4gICAgICAgICAgICByZXNwb25kVG9XaWR0aCA9IE1hdGgubWluKHdpbmRvd1dpZHRoLCBzbGlkZXJXaWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIF8ub3B0aW9ucy5yZXNwb25zaXZlICYmXHJcbiAgICAgICAgICAgIF8ub3B0aW9ucy5yZXNwb25zaXZlLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICBfLm9wdGlvbnMucmVzcG9uc2l2ZSAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGJyZWFrcG9pbnQgaW4gXy5icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKF8uYnJlYWtwb2ludHMuaGFzT3duUHJvcGVydHkoYnJlYWtwb2ludCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5vcmlnaW5hbFNldHRpbmdzLm1vYmlsZUZpcnN0ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uZFRvV2lkdGggPCBfLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCcmVha3BvaW50ID0gXy5icmVha3BvaW50c1ticmVha3BvaW50XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25kVG9XaWR0aCA+IF8uYnJlYWtwb2ludHNbYnJlYWtwb2ludF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnQgPSBfLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0QnJlYWtwb2ludCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF8uYWN0aXZlQnJlYWtwb2ludCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCcmVha3BvaW50ICE9PSBfLmFjdGl2ZUJyZWFrcG9pbnQgfHwgZm9yY2VVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5hY3RpdmVCcmVha3BvaW50ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmJyZWFrcG9pbnRTZXR0aW5nc1t0YXJnZXRCcmVha3BvaW50XSA9PT0gJ3Vuc2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLnVuc2xpY2sodGFyZ2V0QnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgXy5vcmlnaW5hbFNldHRpbmdzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uYnJlYWtwb2ludFNldHRpbmdzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCcmVha3BvaW50XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gXy5vcHRpb25zLmluaXRpYWxTbGlkZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ucmVmcmVzaChpbml0aWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQnJlYWtwb2ludCA9IHRhcmdldEJyZWFrcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPSB0YXJnZXRCcmVha3BvaW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmJyZWFrcG9pbnRTZXR0aW5nc1t0YXJnZXRCcmVha3BvaW50XSA9PT0gJ3Vuc2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8udW5zbGljayh0YXJnZXRCcmVha3BvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgXy5vcmlnaW5hbFNldHRpbmdzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5icmVha3BvaW50U2V0dGluZ3NbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBfLm9wdGlvbnMuaW5pdGlhbFNsaWRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ucmVmcmVzaChpbml0aWFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckJyZWFrcG9pbnQgPSB0YXJnZXRCcmVha3BvaW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF8uYWN0aXZlQnJlYWtwb2ludCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uYWN0aXZlQnJlYWtwb2ludCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zID0gXy5vcmlnaW5hbFNldHRpbmdzO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gXy5vcHRpb25zLmluaXRpYWxTbGlkZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXy5yZWZyZXNoKGluaXRpYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJCcmVha3BvaW50ID0gdGFyZ2V0QnJlYWtwb2ludDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gb25seSB0cmlnZ2VyIGJyZWFrcG9pbnRzIGR1cmluZyBhbiBhY3R1YWwgYnJlYWsuIG5vdCBvbiBpbml0aWFsaXplLlxyXG4gICAgICAgICAgICBpZiggIWluaXRpYWwgJiYgdHJpZ2dlckJyZWFrcG9pbnQgIT09IGZhbHNlICkge1xyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2JyZWFrcG9pbnQnLCBbXywgdHJpZ2dlckJyZWFrcG9pbnRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5jaGFuZ2VTbGlkZSA9IGZ1bmN0aW9uKGV2ZW50LCBkb250QW5pbWF0ZSkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLFxyXG4gICAgICAgICAgICBpbmRleE9mZnNldCwgc2xpZGVPZmZzZXQsIHVuZXZlbk9mZnNldDtcclxuXHJcbiAgICAgICAgLy8gSWYgdGFyZ2V0IGlzIGEgbGluaywgcHJldmVudCBkZWZhdWx0IGFjdGlvbi5cclxuICAgICAgICBpZigkdGFyZ2V0LmlzKCdhJykpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIHRhcmdldCBpcyBub3QgdGhlIDxsaT4gZWxlbWVudCAoaWU6IGEgY2hpbGQpLCBmaW5kIHRoZSA8bGk+LlxyXG4gICAgICAgIGlmKCEkdGFyZ2V0LmlzKCdsaScpKSB7XHJcbiAgICAgICAgICAgICR0YXJnZXQgPSAkdGFyZ2V0LmNsb3Nlc3QoJ2xpJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1bmV2ZW5PZmZzZXQgPSAoXy5zbGlkZUNvdW50ICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsICE9PSAwKTtcclxuICAgICAgICBpbmRleE9mZnNldCA9IHVuZXZlbk9mZnNldCA/IDAgOiAoXy5zbGlkZUNvdW50IC0gXy5jdXJyZW50U2xpZGUpICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmRhdGEubWVzc2FnZSkge1xyXG5cclxuICAgICAgICAgICAgY2FzZSAncHJldmlvdXMnOlxyXG4gICAgICAgICAgICAgICAgc2xpZGVPZmZzZXQgPSBpbmRleE9mZnNldCA9PT0gMCA/IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA6IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLSBpbmRleE9mZnNldDtcclxuICAgICAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jdXJyZW50U2xpZGUgLSBzbGlkZU9mZnNldCwgZmFsc2UsIGRvbnRBbmltYXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnbmV4dCc6XHJcbiAgICAgICAgICAgICAgICBzbGlkZU9mZnNldCA9IGluZGV4T2Zmc2V0ID09PSAwID8gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDogaW5kZXhPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKF8uY3VycmVudFNsaWRlICsgc2xpZGVPZmZzZXQsIGZhbHNlLCBkb250QW5pbWF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2luZGV4JzpcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGV2ZW50LmRhdGEuaW5kZXggPT09IDAgPyAwIDpcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4IHx8ICR0YXJnZXQuaW5kZXgoKSAqIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcclxuXHJcbiAgICAgICAgICAgICAgICBfLnNsaWRlSGFuZGxlcihfLmNoZWNrTmF2aWdhYmxlKGluZGV4KSwgZmFsc2UsIGRvbnRBbmltYXRlKTtcclxuICAgICAgICAgICAgICAgICR0YXJnZXQuY2hpbGRyZW4oKS50cmlnZ2VyKCdmb2N1cycpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5jaGVja05hdmlnYWJsZSA9IGZ1bmN0aW9uKGluZGV4KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgbmF2aWdhYmxlcywgcHJldk5hdmlnYWJsZTtcclxuXHJcbiAgICAgICAgbmF2aWdhYmxlcyA9IF8uZ2V0TmF2aWdhYmxlSW5kZXhlcygpO1xyXG4gICAgICAgIHByZXZOYXZpZ2FibGUgPSAwO1xyXG4gICAgICAgIGlmIChpbmRleCA+IG5hdmlnYWJsZXNbbmF2aWdhYmxlcy5sZW5ndGggLSAxXSkge1xyXG4gICAgICAgICAgICBpbmRleCA9IG5hdmlnYWJsZXNbbmF2aWdhYmxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuIGluIG5hdmlnYWJsZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IG5hdmlnYWJsZXNbbl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHByZXZOYXZpZ2FibGU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcmV2TmF2aWdhYmxlID0gbmF2aWdhYmxlc1tuXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuY2xlYW5VcEV2ZW50cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZG90cyAmJiBfLiRkb3RzICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICAkKCdsaScsIF8uJGRvdHMpXHJcbiAgICAgICAgICAgICAgICAub2ZmKCdjbGljay5zbGljaycsIF8uY2hhbmdlU2xpZGUpXHJcbiAgICAgICAgICAgICAgICAub2ZmKCdtb3VzZWVudGVyLnNsaWNrJywgJC5wcm94eShfLmludGVycnVwdCwgXywgdHJ1ZSkpXHJcbiAgICAgICAgICAgICAgICAub2ZmKCdtb3VzZWxlYXZlLnNsaWNrJywgJC5wcm94eShfLmludGVycnVwdCwgXywgZmFsc2UpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgXy4kZG90cy5vZmYoJ2tleWRvd24uc2xpY2snLCBfLmtleUhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLiRzbGlkZXIub2ZmKCdmb2N1cy5zbGljayBibHVyLnNsaWNrJyk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgXy4kcHJldkFycm93ICYmIF8uJHByZXZBcnJvdy5vZmYoJ2NsaWNrLnNsaWNrJywgXy5jaGFuZ2VTbGlkZSk7XHJcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdyAmJiBfLiRuZXh0QXJyb3cub2ZmKCdjbGljay5zbGljaycsIF8uY2hhbmdlU2xpZGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cgJiYgXy4kcHJldkFycm93Lm9mZigna2V5ZG93bi5zbGljaycsIF8ua2V5SGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cgJiYgXy4kbmV4dEFycm93Lm9mZigna2V5ZG93bi5zbGljaycsIF8ua2V5SGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uJGxpc3Qub2ZmKCd0b3VjaHN0YXJ0LnNsaWNrIG1vdXNlZG93bi5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2htb3ZlLnNsaWNrIG1vdXNlbW92ZS5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2hlbmQuc2xpY2sgbW91c2V1cC5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2hjYW5jZWwuc2xpY2sgbW91c2VsZWF2ZS5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgXy4kbGlzdC5vZmYoJ2NsaWNrLnNsaWNrJywgXy5jbGlja0hhbmRsZXIpO1xyXG5cclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoXy52aXNpYmlsaXR5Q2hhbmdlLCBfLnZpc2liaWxpdHkpO1xyXG5cclxuICAgICAgICBfLmNsZWFuVXBTbGlkZUV2ZW50cygpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgXy4kbGlzdC5vZmYoJ2tleWRvd24uc2xpY2snLCBfLmtleUhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mb2N1c09uU2VsZWN0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICQoXy4kc2xpZGVUcmFjaykuY2hpbGRyZW4oKS5vZmYoJ2NsaWNrLnNsaWNrJywgXy5zZWxlY3RIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQod2luZG93KS5vZmYoJ29yaWVudGF0aW9uY2hhbmdlLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBfLm9yaWVudGF0aW9uQ2hhbmdlKTtcclxuXHJcbiAgICAgICAgJCh3aW5kb3cpLm9mZigncmVzaXplLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBfLnJlc2l6ZSk7XHJcblxyXG4gICAgICAgICQoJ1tkcmFnZ2FibGUhPXRydWVdJywgXy4kc2xpZGVUcmFjaykub2ZmKCdkcmFnc3RhcnQnLCBfLnByZXZlbnREZWZhdWx0KTtcclxuXHJcbiAgICAgICAgJCh3aW5kb3cpLm9mZignbG9hZC5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgXy5zZXRQb3NpdGlvbik7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuY2xlYW5VcFNsaWRlRXZlbnRzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy4kbGlzdC5vZmYoJ21vdXNlZW50ZXIuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCB0cnVlKSk7XHJcbiAgICAgICAgXy4kbGlzdC5vZmYoJ21vdXNlbGVhdmUuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCBmYWxzZSkpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmNsZWFuVXBSb3dzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcywgb3JpZ2luYWxTbGlkZXM7XHJcblxyXG4gICAgICAgIGlmKF8ub3B0aW9ucy5yb3dzID4gMCkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFNsaWRlcyA9IF8uJHNsaWRlcy5jaGlsZHJlbigpLmNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsU2xpZGVzLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlci5lbXB0eSgpLmFwcGVuZChvcmlnaW5hbFNsaWRlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8uc2hvdWxkQ2xpY2sgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKHJlZnJlc2gpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLmF1dG9QbGF5Q2xlYXIoKTtcclxuXHJcbiAgICAgICAgXy50b3VjaE9iamVjdCA9IHt9O1xyXG5cclxuICAgICAgICBfLmNsZWFuVXBFdmVudHMoKTtcclxuXHJcbiAgICAgICAgJCgnLnNsaWNrLWNsb25lZCcsIF8uJHNsaWRlcikuZGV0YWNoKCk7XHJcblxyXG4gICAgICAgIGlmIChfLiRkb3RzKSB7XHJcbiAgICAgICAgICAgIF8uJGRvdHMucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIF8uJHByZXZBcnJvdyAmJiBfLiRwcmV2QXJyb3cubGVuZ3RoICkge1xyXG5cclxuICAgICAgICAgICAgXy4kcHJldkFycm93XHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkIHNsaWNrLWFycm93IHNsaWNrLWhpZGRlbicpXHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4gYXJpYS1kaXNhYmxlZCB0YWJpbmRleCcpXHJcbiAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIF8uaHRtbEV4cHIudGVzdCggXy5vcHRpb25zLnByZXZBcnJvdyApKSB7XHJcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICggXy4kbmV4dEFycm93ICYmIF8uJG5leHRBcnJvdy5sZW5ndGggKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3dcclxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2xpY2stZGlzYWJsZWQgc2xpY2stYXJyb3cgc2xpY2staGlkZGVuJylcclxuICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdhcmlhLWhpZGRlbiBhcmlhLWRpc2FibGVkIHRhYmluZGV4JylcclxuICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCcnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICggXy5odG1sRXhwci50ZXN0KCBfLm9wdGlvbnMubmV4dEFycm93ICkpIHtcclxuICAgICAgICAgICAgICAgIF8uJG5leHRBcnJvdy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChfLiRzbGlkZXMpIHtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlc1xyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzbGljay1zbGlkZSBzbGljay1hY3RpdmUgc2xpY2stY2VudGVyIHNsaWNrLXZpc2libGUgc2xpY2stY3VycmVudCcpXHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4nKVxyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc2xpY2staW5kZXgnKVxyXG4gICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3N0eWxlJywgJCh0aGlzKS5kYXRhKCdvcmlnaW5hbFN0eWxpbmcnKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5kZXRhY2goKTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suZGV0YWNoKCk7XHJcblxyXG4gICAgICAgICAgICBfLiRsaXN0LmRldGFjaCgpO1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVyLmFwcGVuZChfLiRzbGlkZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy5jbGVhblVwUm93cygpO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXIucmVtb3ZlQ2xhc3MoJ3NsaWNrLXNsaWRlcicpO1xyXG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2staW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICBfLiRzbGlkZXIucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRvdHRlZCcpO1xyXG5cclxuICAgICAgICBfLnVuc2xpY2tlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCFyZWZyZXNoKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdkZXN0cm95JywgW19dKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZGlzYWJsZVRyYW5zaXRpb24gPSBmdW5jdGlvbihzbGlkZSkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24gPSB7fTtcclxuXHJcbiAgICAgICAgdHJhbnNpdGlvbltfLnRyYW5zaXRpb25UeXBlXSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHRyYW5zaXRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZSkuY3NzKHRyYW5zaXRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5mYWRlU2xpZGUgPSBmdW5jdGlvbihzbGlkZUluZGV4LCBjYWxsYmFjaykge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLmNzc1RyYW5zaXRpb25zID09PSBmYWxzZSkge1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlSW5kZXgpLmNzcyh7XHJcbiAgICAgICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXhcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXMuZXEoc2xpZGVJbmRleCkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCwgXy5vcHRpb25zLmVhc2luZywgY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgXy5hcHBseVRyYW5zaXRpb24oc2xpZGVJbmRleCk7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXMuZXEoc2xpZGVJbmRleCkuY3NzKHtcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXhcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF8uZGlzYWJsZVRyYW5zaXRpb24oc2xpZGVJbmRleCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoKTtcclxuICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmZhZGVTbGlkZU91dCA9IGZ1bmN0aW9uKHNsaWRlSW5kZXgpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy5jc3NUcmFuc2l0aW9ucyA9PT0gZmFsc2UpIHtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZUluZGV4KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsXHJcbiAgICAgICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXggLSAyXHJcbiAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCwgXy5vcHRpb25zLmVhc2luZyk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBfLmFwcGx5VHJhbnNpdGlvbihzbGlkZUluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZUluZGV4KS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICAgICAgICAgIHpJbmRleDogXy5vcHRpb25zLnpJbmRleCAtIDJcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5maWx0ZXJTbGlkZXMgPSBTbGljay5wcm90b3R5cGUuc2xpY2tGaWx0ZXIgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXNDYWNoZSA9IF8uJHNsaWRlcztcclxuXHJcbiAgICAgICAgICAgIF8udW5sb2FkKCk7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXNDYWNoZS5maWx0ZXIoZmlsdGVyKS5hcHBlbmRUbyhfLiRzbGlkZVRyYWNrKTtcclxuXHJcbiAgICAgICAgICAgIF8ucmVpbml0KCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5mb2N1c0hhbmRsZXIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXJcclxuICAgICAgICAgICAgLm9mZignZm9jdXMuc2xpY2sgYmx1ci5zbGljaycpXHJcbiAgICAgICAgICAgIC5vbignZm9jdXMuc2xpY2sgYmx1ci5zbGljaycsICcqJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICB2YXIgJHNmID0gJCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIF8ub3B0aW9ucy5wYXVzZU9uRm9jdXMgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5mb2N1c3NlZCA9ICRzZi5pcygnOmZvY3VzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5hdXRvUGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSwgMCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZ2V0Q3VycmVudCA9IFNsaWNrLnByb3RvdHlwZS5zbGlja0N1cnJlbnRTbGlkZSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIF8uY3VycmVudFNsaWRlO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmdldERvdENvdW50ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIGJyZWFrUG9pbnQgPSAwO1xyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICB2YXIgcGFnZXJRdHkgPSAwO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICAgICAgICsrcGFnZXJRdHk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoYnJlYWtQb2ludCA8IF8uc2xpZGVDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICsrcGFnZXJRdHk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGNvdW50ZXIgKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRlciArPSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA/IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA6IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHBhZ2VyUXR5ID0gXy5zbGlkZUNvdW50O1xyXG4gICAgICAgIH0gZWxzZSBpZighXy5vcHRpb25zLmFzTmF2Rm9yKSB7XHJcbiAgICAgICAgICAgIHBhZ2VyUXR5ID0gMSArIE1hdGguY2VpbCgoXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykgLyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xyXG4gICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgd2hpbGUgKGJyZWFrUG9pbnQgPCBfLnNsaWRlQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICsrcGFnZXJRdHk7XHJcbiAgICAgICAgICAgICAgICBicmVha1BvaW50ID0gY291bnRlciArIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcclxuICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgOiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGFnZXJRdHkgLSAxO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmdldExlZnQgPSBmdW5jdGlvbihzbGlkZUluZGV4KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgdGFyZ2V0TGVmdCxcclxuICAgICAgICAgICAgdmVydGljYWxIZWlnaHQsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgdGFyZ2V0U2xpZGUsXHJcbiAgICAgICAgICAgIGNvZWY7XHJcblxyXG4gICAgICAgIF8uc2xpZGVPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZlcnRpY2FsSGVpZ2h0ID0gXy4kc2xpZGVzLmZpcnN0KCkub3V0ZXJIZWlnaHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuaW5maW5pdGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgPSAoXy5zbGlkZVdpZHRoICogXy5vcHRpb25zLnNsaWRlc1RvU2hvdykgKiAtMTtcclxuICAgICAgICAgICAgICAgIGNvZWYgPSAtMVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IHRydWUgJiYgXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2VmID0gLTEuNTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29lZiA9IC0yXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAodmVydGljYWxIZWlnaHQgKiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAqIGNvZWY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlSW5kZXggKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgPiBfLnNsaWRlQ291bnQgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzbGlkZUluZGV4ID4gXy5zbGlkZUNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgPSAoKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLSAoc2xpZGVJbmRleCAtIF8uc2xpZGVDb3VudCkpICogXy5zbGlkZVdpZHRoKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9ICgoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAtIChzbGlkZUluZGV4IC0gXy5zbGlkZUNvdW50KSkgKiB2ZXJ0aWNhbEhlaWdodCkgKiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpICogXy5zbGlkZVdpZHRoKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9ICgoXy5zbGlkZUNvdW50ICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKSAqIHZlcnRpY2FsSGVpZ2h0KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzbGlkZUluZGV4ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA+IF8uc2xpZGVDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgXy5zbGlkZU9mZnNldCA9ICgoc2xpZGVJbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIC0gXy5zbGlkZUNvdW50KSAqIF8uc2xpZGVXaWR0aDtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gKChzbGlkZUluZGV4ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykgLSBfLnNsaWRlQ291bnQpICogdmVydGljYWxIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcbiAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgPSAoKF8uc2xpZGVXaWR0aCAqIE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdykpIC8gMikgLSAoKF8uc2xpZGVXaWR0aCAqIF8uc2xpZGVDb3VudCkgLyAyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlICYmIF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ICs9IF8uc2xpZGVXaWR0aCAqIE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpIC0gXy5zbGlkZVdpZHRoO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgXy5zbGlkZU9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgKz0gXy5zbGlkZVdpZHRoICogTWF0aC5mbG9vcihfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0YXJnZXRMZWZ0ID0gKChzbGlkZUluZGV4ICogXy5zbGlkZVdpZHRoKSAqIC0xKSArIF8uc2xpZGVPZmZzZXQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGVmdCA9ICgoc2xpZGVJbmRleCAqIHZlcnRpY2FsSGVpZ2h0KSAqIC0xKSArIHZlcnRpY2FsT2Zmc2V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy52YXJpYWJsZVdpZHRoID09PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgfHwgXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0U2xpZGUgPSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS5lcShzbGlkZUluZGV4KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFNsaWRlID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykuZXEoc2xpZGVJbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFNsaWRlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IChfLiRzbGlkZVRyYWNrLndpZHRoKCkgLSB0YXJnZXRTbGlkZVswXS5vZmZzZXRMZWZ0IC0gdGFyZ2V0U2xpZGUud2lkdGgoKSkgKiAtMTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9ICAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IHRhcmdldFNsaWRlWzBdID8gdGFyZ2V0U2xpZGVbMF0ub2Zmc2V0TGVmdCAqIC0xIDogMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgfHwgXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFNsaWRlID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykuZXEoc2xpZGVJbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFNsaWRlID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykuZXEoc2xpZGVJbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTbGlkZVswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRMZWZ0ID0gKF8uJHNsaWRlVHJhY2sud2lkdGgoKSAtIHRhcmdldFNsaWRlWzBdLm9mZnNldExlZnQgLSB0YXJnZXRTbGlkZS53aWR0aCgpKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSAgMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSB0YXJnZXRTbGlkZVswXSA/IHRhcmdldFNsaWRlWzBdLm9mZnNldExlZnQgKiAtMSA6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCArPSAoXy4kbGlzdC53aWR0aCgpIC0gdGFyZ2V0U2xpZGUub3V0ZXJXaWR0aCgpKSAvIDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0YXJnZXRMZWZ0O1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmdldE9wdGlvbiA9IFNsaWNrLnByb3RvdHlwZS5zbGlja0dldE9wdGlvbiA9IGZ1bmN0aW9uKG9wdGlvbikge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHJldHVybiBfLm9wdGlvbnNbb3B0aW9uXTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXROYXZpZ2FibGVJbmRleGVzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgYnJlYWtQb2ludCA9IDAsXHJcbiAgICAgICAgICAgIGNvdW50ZXIgPSAwLFxyXG4gICAgICAgICAgICBpbmRleGVzID0gW10sXHJcbiAgICAgICAgICAgIG1heDtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgbWF4ID0gXy5zbGlkZUNvdW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgKiAtMTtcclxuICAgICAgICAgICAgY291bnRlciA9IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAqIC0xO1xyXG4gICAgICAgICAgICBtYXggPSBfLnNsaWRlQ291bnQgKiAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGJyZWFrUG9pbnQgPCBtYXgpIHtcclxuICAgICAgICAgICAgaW5kZXhlcy5wdXNoKGJyZWFrUG9pbnQpO1xyXG4gICAgICAgICAgICBicmVha1BvaW50ID0gY291bnRlciArIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcclxuICAgICAgICAgICAgY291bnRlciArPSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA/IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA6IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW5kZXhlcztcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXRTbGljayA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXRTbGlkZUNvdW50ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgc2xpZGVzVHJhdmVyc2VkLCBzd2lwZWRTbGlkZSwgY2VudGVyT2Zmc2V0O1xyXG5cclxuICAgICAgICBjZW50ZXJPZmZzZXQgPSBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSA/IF8uc2xpZGVXaWR0aCAqIE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpIDogMDtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5zd2lwZVRvU2xpZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5maW5kKCcuc2xpY2stc2xpZGUnKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBzbGlkZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlLm9mZnNldExlZnQgLSBjZW50ZXJPZmZzZXQgKyAoJChzbGlkZSkub3V0ZXJXaWR0aCgpIC8gMikgPiAoXy5zd2lwZUxlZnQgKiAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2lwZWRTbGlkZSA9IHNsaWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzbGlkZXNUcmF2ZXJzZWQgPSBNYXRoLmFicygkKHN3aXBlZFNsaWRlKS5hdHRyKCdkYXRhLXNsaWNrLWluZGV4JykgLSBfLmN1cnJlbnRTbGlkZSkgfHwgMTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzbGlkZXNUcmF2ZXJzZWQ7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmdvVG8gPSBTbGljay5wcm90b3R5cGUuc2xpY2tHb1RvID0gZnVuY3Rpb24oc2xpZGUsIGRvbnRBbmltYXRlKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy5jaGFuZ2VTbGlkZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbmRleCcsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogcGFyc2VJbnQoc2xpZGUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBkb250QW5pbWF0ZSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKGNyZWF0aW9uKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKCEkKF8uJHNsaWRlcikuaGFzQ2xhc3MoJ3NsaWNrLWluaXRpYWxpemVkJykpIHtcclxuXHJcbiAgICAgICAgICAgICQoXy4kc2xpZGVyKS5hZGRDbGFzcygnc2xpY2staW5pdGlhbGl6ZWQnKTtcclxuXHJcbiAgICAgICAgICAgIF8uYnVpbGRSb3dzKCk7XHJcbiAgICAgICAgICAgIF8uYnVpbGRPdXQoKTtcclxuICAgICAgICAgICAgXy5zZXRQcm9wcygpO1xyXG4gICAgICAgICAgICBfLnN0YXJ0TG9hZCgpO1xyXG4gICAgICAgICAgICBfLmxvYWRTbGlkZXIoKTtcclxuICAgICAgICAgICAgXy5pbml0aWFsaXplRXZlbnRzKCk7XHJcbiAgICAgICAgICAgIF8udXBkYXRlQXJyb3dzKCk7XHJcbiAgICAgICAgICAgIF8udXBkYXRlRG90cygpO1xyXG4gICAgICAgICAgICBfLmNoZWNrUmVzcG9uc2l2ZSh0cnVlKTtcclxuICAgICAgICAgICAgXy5mb2N1c0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3JlYXRpb24pIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2luaXQnLCBbX10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uaW5pdEFEQSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCBfLm9wdGlvbnMuYXV0b3BsYXkgKSB7XHJcblxyXG4gICAgICAgICAgICBfLnBhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfLmF1dG9QbGF5KCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0QURBID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICAgICAgbnVtRG90R3JvdXBzID0gTWF0aC5jZWlsKF8uc2xpZGVDb3VudCAvIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpLFxyXG4gICAgICAgICAgICAgICAgdGFiQ29udHJvbEluZGV4ZXMgPSBfLmdldE5hdmlnYWJsZUluZGV4ZXMoKS5maWx0ZXIoZnVuY3Rpb24odmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh2YWwgPj0gMCkgJiYgKHZhbCA8IF8uc2xpZGVDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVzLmFkZChfLiRzbGlkZVRyYWNrLmZpbmQoJy5zbGljay1jbG9uZWQnKSkuYXR0cih7XHJcbiAgICAgICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJyxcclxuICAgICAgICAgICAgJ3RhYmluZGV4JzogJy0xJ1xyXG4gICAgICAgIH0pLmZpbmQoJ2EsIGlucHV0LCBidXR0b24sIHNlbGVjdCcpLmF0dHIoe1xyXG4gICAgICAgICAgICAndGFiaW5kZXgnOiAnLTEnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChfLiRkb3RzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy5ub3QoXy4kc2xpZGVUcmFjay5maW5kKCcuc2xpY2stY2xvbmVkJykpLmVhY2goZnVuY3Rpb24oaSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNsaWRlQ29udHJvbEluZGV4ID0gdGFiQ29udHJvbEluZGV4ZXMuaW5kZXhPZihpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoe1xyXG4gICAgICAgICAgICAgICAgICAgICdyb2xlJzogJ3RhYnBhbmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAnc2xpY2stc2xpZGUnICsgXy5pbnN0YW5jZVVpZCArIGksXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RhYmluZGV4JzogLTFcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzbGlkZUNvbnRyb2xJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgIHZhciBhcmlhQnV0dG9uQ29udHJvbCA9ICdzbGljay1zbGlkZS1jb250cm9sJyArIF8uaW5zdGFuY2VVaWQgKyBzbGlkZUNvbnRyb2xJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgaWYgKCQoJyMnICsgYXJpYUJ1dHRvbkNvbnRyb2wpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhQnV0dG9uQ29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBfLiRkb3RzLmF0dHIoJ3JvbGUnLCAndGFibGlzdCcpLmZpbmQoJ2xpJykuZWFjaChmdW5jdGlvbihpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFwcGVkU2xpZGVJbmRleCA9IHRhYkNvbnRyb2xJbmRleGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cih7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3JvbGUnOiAncHJlc2VudGF0aW9uJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdidXR0b24nKS5maXJzdCgpLmF0dHIoe1xyXG4gICAgICAgICAgICAgICAgICAgICdyb2xlJzogJ3RhYicsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogJ3NsaWNrLXNsaWRlLWNvbnRyb2wnICsgXy5pbnN0YW5jZVVpZCArIGksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtY29udHJvbHMnOiAnc2xpY2stc2xpZGUnICsgXy5pbnN0YW5jZVVpZCArIG1hcHBlZFNsaWRlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiAoaSArIDEpICsgJyBvZiAnICsgbnVtRG90R3JvdXBzLFxyXG4gICAgICAgICAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAndGFiaW5kZXgnOiAnLTEnXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0pLmVxKF8uY3VycmVudFNsaWRlKS5maW5kKCdidXR0b24nKS5hdHRyKHtcclxuICAgICAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogJ3RydWUnLFxyXG4gICAgICAgICAgICAgICAgJ3RhYmluZGV4JzogJzAnXHJcbiAgICAgICAgICAgIH0pLmVuZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaT1fLmN1cnJlbnRTbGlkZSwgbWF4PWkrXy5vcHRpb25zLnNsaWRlc1RvU2hvdzsgaSA8IG1heDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoXy5vcHRpb25zLmZvY3VzT25DaGFuZ2UpIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKGkpLmF0dHIoeyd0YWJpbmRleCc6ICcwJ30pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKGkpLnJlbW92ZUF0dHIoJ3RhYmluZGV4Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLmFjdGl2YXRlQURBKCk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuaW5pdEFycm93RXZlbnRzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hcnJvd3MgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICBfLiRwcmV2QXJyb3dcclxuICAgICAgICAgICAgICAgLm9mZignY2xpY2suc2xpY2snKVxyXG4gICAgICAgICAgICAgICAub24oJ2NsaWNrLnNsaWNrJywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdwcmV2aW91cydcclxuICAgICAgICAgICAgICAgfSwgXy5jaGFuZ2VTbGlkZSk7XHJcbiAgICAgICAgICAgIF8uJG5leHRBcnJvd1xyXG4gICAgICAgICAgICAgICAub2ZmKCdjbGljay5zbGljaycpXHJcbiAgICAgICAgICAgICAgIC5vbignY2xpY2suc2xpY2snLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ25leHQnXHJcbiAgICAgICAgICAgICAgIH0sIF8uY2hhbmdlU2xpZGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cub24oJ2tleWRvd24uc2xpY2snLCBfLmtleUhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgXy4kbmV4dEFycm93Lm9uKCdrZXlkb3duLnNsaWNrJywgXy5rZXlIYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0RG90RXZlbnRzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5kb3RzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgJCgnbGknLCBfLiRkb3RzKS5vbignY2xpY2suc2xpY2snLCB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW5kZXgnXHJcbiAgICAgICAgICAgIH0sIF8uY2hhbmdlU2xpZGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBfLiRkb3RzLm9uKCdrZXlkb3duLnNsaWNrJywgXy5rZXlIYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5kb3RzID09PSB0cnVlICYmIF8ub3B0aW9ucy5wYXVzZU9uRG90c0hvdmVyID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgICQoJ2xpJywgXy4kZG90cylcclxuICAgICAgICAgICAgICAgIC5vbignbW91c2VlbnRlci5zbGljaycsICQucHJveHkoXy5pbnRlcnJ1cHQsIF8sIHRydWUpKVxyXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZWxlYXZlLnNsaWNrJywgJC5wcm94eShfLmludGVycnVwdCwgXywgZmFsc2UpKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmluaXRTbGlkZUV2ZW50cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICggXy5vcHRpb25zLnBhdXNlT25Ib3ZlciApIHtcclxuXHJcbiAgICAgICAgICAgIF8uJGxpc3Qub24oJ21vdXNlZW50ZXIuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCB0cnVlKSk7XHJcbiAgICAgICAgICAgIF8uJGxpc3Qub24oJ21vdXNlbGVhdmUuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCBmYWxzZSkpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuaW5pdGlhbGl6ZUV2ZW50cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uaW5pdEFycm93RXZlbnRzKCk7XHJcblxyXG4gICAgICAgIF8uaW5pdERvdEV2ZW50cygpO1xyXG4gICAgICAgIF8uaW5pdFNsaWRlRXZlbnRzKCk7XHJcblxyXG4gICAgICAgIF8uJGxpc3Qub24oJ3RvdWNoc3RhcnQuc2xpY2sgbW91c2Vkb3duLnNsaWNrJywge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdzdGFydCdcclxuICAgICAgICB9LCBfLnN3aXBlSGFuZGxlcik7XHJcbiAgICAgICAgXy4kbGlzdC5vbigndG91Y2htb3ZlLnNsaWNrIG1vdXNlbW92ZS5zbGljaycsIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbW92ZSdcclxuICAgICAgICB9LCBfLnN3aXBlSGFuZGxlcik7XHJcbiAgICAgICAgXy4kbGlzdC5vbigndG91Y2hlbmQuc2xpY2sgbW91c2V1cC5zbGljaycsIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnZW5kJ1xyXG4gICAgICAgIH0sIF8uc3dpcGVIYW5kbGVyKTtcclxuICAgICAgICBfLiRsaXN0Lm9uKCd0b3VjaGNhbmNlbC5zbGljayBtb3VzZWxlYXZlLnNsaWNrJywge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdlbmQnXHJcbiAgICAgICAgfSwgXy5zd2lwZUhhbmRsZXIpO1xyXG5cclxuICAgICAgICBfLiRsaXN0Lm9uKCdjbGljay5zbGljaycsIF8uY2xpY2tIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXy52aXNpYmlsaXR5Q2hhbmdlLCAkLnByb3h5KF8udmlzaWJpbGl0eSwgXykpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgXy4kbGlzdC5vbigna2V5ZG93bi5zbGljaycsIF8ua2V5SGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZvY3VzT25TZWxlY3QgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgJChfLiRzbGlkZVRyYWNrKS5jaGlsZHJlbigpLm9uKCdjbGljay5zbGljaycsIF8uc2VsZWN0SGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKHdpbmRvdykub24oJ29yaWVudGF0aW9uY2hhbmdlLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCAkLnByb3h5KF8ub3JpZW50YXRpb25DaGFuZ2UsIF8pKTtcclxuXHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuc2xpY2suc2xpY2stJyArIF8uaW5zdGFuY2VVaWQsICQucHJveHkoXy5yZXNpemUsIF8pKTtcclxuXHJcbiAgICAgICAgJCgnW2RyYWdnYWJsZSE9dHJ1ZV0nLCBfLiRzbGlkZVRyYWNrKS5vbignZHJhZ3N0YXJ0JywgXy5wcmV2ZW50RGVmYXVsdCk7XHJcblxyXG4gICAgICAgICQod2luZG93KS5vbignbG9hZC5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgXy5zZXRQb3NpdGlvbik7XHJcbiAgICAgICAgJChfLnNldFBvc2l0aW9uKTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0VUkgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcblxyXG4gICAgICAgICAgICBfLiRwcmV2QXJyb3cuc2hvdygpO1xyXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cuc2hvdygpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZG90cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcblxyXG4gICAgICAgICAgICBfLiRkb3RzLnNob3coKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmtleUhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcbiAgICAgICAgIC8vRG9udCBzbGlkZSBpZiB0aGUgY3Vyc29yIGlzIGluc2lkZSB0aGUgZm9ybSBmaWVsZHMgYW5kIGFycm93IGtleXMgYXJlIHByZXNzZWRcclxuICAgICAgICBpZighZXZlbnQudGFyZ2V0LnRhZ05hbWUubWF0Y2goJ1RFWFRBUkVBfElOUFVUfFNFTEVDVCcpKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzNyAmJiBfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgXy5jaGFuZ2VTbGlkZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBfLm9wdGlvbnMucnRsID09PSB0cnVlID8gJ25leHQnIDogICdwcmV2aW91cydcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAzOSAmJiBfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgXy5jaGFuZ2VTbGlkZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBfLm9wdGlvbnMucnRsID09PSB0cnVlID8gJ3ByZXZpb3VzJyA6ICduZXh0J1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmxhenlMb2FkID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgbG9hZFJhbmdlLCBjbG9uZVJhbmdlLCByYW5nZVN0YXJ0LCByYW5nZUVuZDtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gbG9hZEltYWdlcyhpbWFnZXNTY29wZSkge1xyXG5cclxuICAgICAgICAgICAgJCgnaW1nW2RhdGEtbGF6eV0nLCBpbWFnZXNTY29wZSkuZWFjaChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSAkKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlU291cmNlID0gJCh0aGlzKS5hdHRyKCdkYXRhLWxhenknKSxcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZVNyY1NldCA9ICQodGhpcykuYXR0cignZGF0YS1zcmNzZXQnKSxcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZVNpemVzICA9ICQodGhpcykuYXR0cignZGF0YS1zaXplcycpIHx8IF8uJHNsaWRlci5hdHRyKCdkYXRhLXNpemVzJyksXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VUb0xvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbWFnZVRvTG9hZC5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFuaW1hdGUoeyBvcGFjaXR5OiAwIH0sIDEwMCwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlU3JjU2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NyY3NldCcsIGltYWdlU3JjU2V0ICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZVNpemVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignc2l6ZXMnLCBpbWFnZVNpemVzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NyYycsIGltYWdlU291cmNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hbmltYXRlKHsgb3BhY2l0eTogMSB9LCAyMDAsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtbGF6eSBkYXRhLXNyY3NldCBkYXRhLXNpemVzJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2xpY2stbG9hZGluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2xhenlMb2FkZWQnLCBbXywgaW1hZ2UsIGltYWdlU291cmNlXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaW1hZ2VUb0xvYWQub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0ciggJ2RhdGEtbGF6eScgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoICdzbGljay1sb2FkaW5nJyApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyggJ3NsaWNrLWxhenlsb2FkLWVycm9yJyApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignbGF6eUxvYWRFcnJvcicsIFsgXywgaW1hZ2UsIGltYWdlU291cmNlIF0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaW1hZ2VUb0xvYWQuc3JjID0gaW1hZ2VTb3VyY2U7XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2VTdGFydCA9IF8uY3VycmVudFNsaWRlICsgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLyAyICsgMSk7XHJcbiAgICAgICAgICAgICAgICByYW5nZUVuZCA9IHJhbmdlU3RhcnQgKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgMjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBNYXRoLm1heCgwLCBfLmN1cnJlbnRTbGlkZSAtIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMiArIDEpKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlRW5kID0gMiArIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMiArIDEpICsgXy5jdXJyZW50U2xpZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByYW5nZVN0YXJ0ID0gXy5vcHRpb25zLmluZmluaXRlID8gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyArIF8uY3VycmVudFNsaWRlIDogXy5jdXJyZW50U2xpZGU7XHJcbiAgICAgICAgICAgIHJhbmdlRW5kID0gTWF0aC5jZWlsKHJhbmdlU3RhcnQgKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KTtcclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydCA+IDApIHJhbmdlU3RhcnQtLTtcclxuICAgICAgICAgICAgICAgIGlmIChyYW5nZUVuZCA8PSBfLnNsaWRlQ291bnQpIHJhbmdlRW5kKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvYWRSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stc2xpZGUnKS5zbGljZShyYW5nZVN0YXJ0LCByYW5nZUVuZCk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMubGF6eUxvYWQgPT09ICdhbnRpY2lwYXRlZCcpIHtcclxuICAgICAgICAgICAgdmFyIHByZXZTbGlkZSA9IHJhbmdlU3RhcnQgLSAxLFxyXG4gICAgICAgICAgICAgICAgbmV4dFNsaWRlID0gcmFuZ2VFbmQsXHJcbiAgICAgICAgICAgICAgICAkc2xpZGVzID0gXy4kc2xpZGVyLmZpbmQoJy5zbGljay1zbGlkZScpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZTbGlkZSA8IDApIHByZXZTbGlkZSA9IF8uc2xpZGVDb3VudCAtIDE7XHJcbiAgICAgICAgICAgICAgICBsb2FkUmFuZ2UgPSBsb2FkUmFuZ2UuYWRkKCRzbGlkZXMuZXEocHJldlNsaWRlKSk7XHJcbiAgICAgICAgICAgICAgICBsb2FkUmFuZ2UgPSBsb2FkUmFuZ2UuYWRkKCRzbGlkZXMuZXEobmV4dFNsaWRlKSk7XHJcbiAgICAgICAgICAgICAgICBwcmV2U2xpZGUtLTtcclxuICAgICAgICAgICAgICAgIG5leHRTbGlkZSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2FkSW1hZ2VzKGxvYWRSYW5nZSk7XHJcblxyXG4gICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICBjbG9uZVJhbmdlID0gXy4kc2xpZGVyLmZpbmQoJy5zbGljay1zbGlkZScpO1xyXG4gICAgICAgICAgICBsb2FkSW1hZ2VzKGNsb25lUmFuZ2UpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlmIChfLmN1cnJlbnRTbGlkZSA+PSBfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcbiAgICAgICAgICAgIGNsb25lUmFuZ2UgPSBfLiRzbGlkZXIuZmluZCgnLnNsaWNrLWNsb25lZCcpLnNsaWNlKDAsIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpO1xyXG4gICAgICAgICAgICBsb2FkSW1hZ2VzKGNsb25lUmFuZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXy5jdXJyZW50U2xpZGUgPT09IDApIHtcclxuICAgICAgICAgICAgY2xvbmVSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stY2xvbmVkJykuc2xpY2UoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAqIC0xKTtcclxuICAgICAgICAgICAgbG9hZEltYWdlcyhjbG9uZVJhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUubG9hZFNsaWRlciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uc2V0UG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVUcmFjay5jc3Moe1xyXG4gICAgICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stbG9hZGluZycpO1xyXG5cclxuICAgICAgICBfLmluaXRVSSgpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmxhenlMb2FkID09PSAncHJvZ3Jlc3NpdmUnKSB7XHJcbiAgICAgICAgICAgIF8ucHJvZ3Jlc3NpdmVMYXp5TG9hZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5uZXh0ID0gU2xpY2sucHJvdG90eXBlLnNsaWNrTmV4dCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uY2hhbmdlU2xpZGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbmV4dCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLm9yaWVudGF0aW9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoKTtcclxuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucGF1c2UgPSBTbGljay5wcm90b3R5cGUuc2xpY2tQYXVzZSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uYXV0b1BsYXlDbGVhcigpO1xyXG4gICAgICAgIF8ucGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5wbGF5ID0gU2xpY2sucHJvdG90eXBlLnNsaWNrUGxheSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uYXV0b1BsYXkoKTtcclxuICAgICAgICBfLm9wdGlvbnMuYXV0b3BsYXkgPSB0cnVlO1xyXG4gICAgICAgIF8ucGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgXy5mb2N1c3NlZCA9IGZhbHNlO1xyXG4gICAgICAgIF8uaW50ZXJydXB0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5wb3N0U2xpZGUgPSBmdW5jdGlvbihpbmRleCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmKCAhXy51bnNsaWNrZWQgKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignYWZ0ZXJDaGFuZ2UnLCBbXywgaW5kZXhdKTtcclxuXHJcbiAgICAgICAgICAgIF8uYW5pbWF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICAgICAgXy5zZXRQb3NpdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfLnN3aXBlTGVmdCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoIF8ub3B0aW9ucy5hdXRvcGxheSApIHtcclxuICAgICAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBfLmluaXRBREEoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLmZvY3VzT25DaGFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgJGN1cnJlbnRTbGlkZSA9ICQoXy4kc2xpZGVzLmdldChfLmN1cnJlbnRTbGlkZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICRjdXJyZW50U2xpZGUuYXR0cigndGFiaW5kZXgnLCAwKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5wcmV2ID0gU2xpY2sucHJvdG90eXBlLnNsaWNrUHJldiA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uY2hhbmdlU2xpZGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAncHJldmlvdXMnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucHJvZ3Jlc3NpdmVMYXp5TG9hZCA9IGZ1bmN0aW9uKCB0cnlDb3VudCApIHtcclxuXHJcbiAgICAgICAgdHJ5Q291bnQgPSB0cnlDb3VudCB8fCAxO1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgICRpbWdzVG9Mb2FkID0gJCggJ2ltZ1tkYXRhLWxhenldJywgXy4kc2xpZGVyICksXHJcbiAgICAgICAgICAgIGltYWdlLFxyXG4gICAgICAgICAgICBpbWFnZVNvdXJjZSxcclxuICAgICAgICAgICAgaW1hZ2VTcmNTZXQsXHJcbiAgICAgICAgICAgIGltYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgIGltYWdlVG9Mb2FkO1xyXG5cclxuICAgICAgICBpZiAoICRpbWdzVG9Mb2FkLmxlbmd0aCApIHtcclxuXHJcbiAgICAgICAgICAgIGltYWdlID0gJGltZ3NUb0xvYWQuZmlyc3QoKTtcclxuICAgICAgICAgICAgaW1hZ2VTb3VyY2UgPSBpbWFnZS5hdHRyKCdkYXRhLWxhenknKTtcclxuICAgICAgICAgICAgaW1hZ2VTcmNTZXQgPSBpbWFnZS5hdHRyKCdkYXRhLXNyY3NldCcpO1xyXG4gICAgICAgICAgICBpbWFnZVNpemVzICA9IGltYWdlLmF0dHIoJ2RhdGEtc2l6ZXMnKSB8fCBfLiRzbGlkZXIuYXR0cignZGF0YS1zaXplcycpO1xyXG4gICAgICAgICAgICBpbWFnZVRvTG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG5cclxuICAgICAgICAgICAgaW1hZ2VUb0xvYWQub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGltYWdlU3JjU2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NyY3NldCcsIGltYWdlU3JjU2V0ICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZVNpemVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignc2l6ZXMnLCBpbWFnZVNpemVzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoICdzcmMnLCBpbWFnZVNvdXJjZSApXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtbGF6eSBkYXRhLXNyY3NldCBkYXRhLXNpemVzJylcclxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWxvYWRpbmcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIF8ub3B0aW9ucy5hZGFwdGl2ZUhlaWdodCA9PT0gdHJ1ZSApIHtcclxuICAgICAgICAgICAgICAgICAgICBfLnNldFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2xhenlMb2FkZWQnLCBbIF8sIGltYWdlLCBpbWFnZVNvdXJjZSBdKTtcclxuICAgICAgICAgICAgICAgIF8ucHJvZ3Jlc3NpdmVMYXp5TG9hZCgpO1xyXG5cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlVG9Mb2FkLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIHRyeUNvdW50IDwgMyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgICAgICogdHJ5IHRvIGxvYWQgdGhlIGltYWdlIDMgdGltZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICogbGVhdmUgYSBzbGlnaHQgZGVsYXkgc28gd2UgZG9uJ3QgZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICogc2VydmVycyBibG9ja2luZyB0aGUgcmVxdWVzdC5cclxuICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5wcm9ncmVzc2l2ZUxhenlMb2FkKCB0cnlDb3VudCArIDEgKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0ciggJ2RhdGEtbGF6eScgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoICdzbGljay1sb2FkaW5nJyApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyggJ3NsaWNrLWxhenlsb2FkLWVycm9yJyApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignbGF6eUxvYWRFcnJvcicsIFsgXywgaW1hZ2UsIGltYWdlU291cmNlIF0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfLnByb2dyZXNzaXZlTGF6eUxvYWQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaW1hZ2VUb0xvYWQuc3JjID0gaW1hZ2VTb3VyY2U7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignYWxsSW1hZ2VzTG9hZGVkJywgWyBfIF0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKCBpbml0aWFsaXppbmcgKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcywgY3VycmVudFNsaWRlLCBsYXN0VmlzaWJsZUluZGV4O1xyXG5cclxuICAgICAgICBsYXN0VmlzaWJsZUluZGV4ID0gXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdztcclxuXHJcbiAgICAgICAgLy8gaW4gbm9uLWluZmluaXRlIHNsaWRlcnMsIHdlIGRvbid0IHdhbnQgdG8gZ28gcGFzdCB0aGVcclxuICAgICAgICAvLyBsYXN0IHZpc2libGUgaW5kZXguXHJcbiAgICAgICAgaWYoICFfLm9wdGlvbnMuaW5maW5pdGUgJiYgKCBfLmN1cnJlbnRTbGlkZSA+IGxhc3RWaXNpYmxlSW5kZXggKSkge1xyXG4gICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IGxhc3RWaXNpYmxlSW5kZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBsZXNzIHNsaWRlcyB0aGFuIHRvIHNob3csIGdvIHRvIHN0YXJ0LlxyXG4gICAgICAgIGlmICggXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKSB7XHJcbiAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gMDtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdXJyZW50U2xpZGUgPSBfLmN1cnJlbnRTbGlkZTtcclxuXHJcbiAgICAgICAgXy5kZXN0cm95KHRydWUpO1xyXG5cclxuICAgICAgICAkLmV4dGVuZChfLCBfLmluaXRpYWxzLCB7IGN1cnJlbnRTbGlkZTogY3VycmVudFNsaWRlIH0pO1xyXG5cclxuICAgICAgICBfLmluaXQoKTtcclxuXHJcbiAgICAgICAgaWYoICFpbml0aWFsaXppbmcgKSB7XHJcblxyXG4gICAgICAgICAgICBfLmNoYW5nZVNsaWRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW5kZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBjdXJyZW50U2xpZGVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZmFsc2UpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucmVnaXN0ZXJCcmVha3BvaW50cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsIGJyZWFrcG9pbnQsIGN1cnJlbnRCcmVha3BvaW50LCBsLFxyXG4gICAgICAgICAgICByZXNwb25zaXZlU2V0dGluZ3MgPSBfLm9wdGlvbnMucmVzcG9uc2l2ZSB8fCBudWxsO1xyXG5cclxuICAgICAgICBpZiAoICQudHlwZShyZXNwb25zaXZlU2V0dGluZ3MpID09PSAnYXJyYXknICYmIHJlc3BvbnNpdmVTZXR0aW5ncy5sZW5ndGggKSB7XHJcblxyXG4gICAgICAgICAgICBfLnJlc3BvbmRUbyA9IF8ub3B0aW9ucy5yZXNwb25kVG8gfHwgJ3dpbmRvdyc7XHJcblxyXG4gICAgICAgICAgICBmb3IgKCBicmVha3BvaW50IGluIHJlc3BvbnNpdmVTZXR0aW5ncyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsID0gXy5icmVha3BvaW50cy5sZW5ndGgtMTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2l2ZVNldHRpbmdzLmhhc093blByb3BlcnR5KGJyZWFrcG9pbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrcG9pbnQgPSByZXNwb25zaXZlU2V0dGluZ3NbYnJlYWtwb2ludF0uYnJlYWtwb2ludDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBicmVha3BvaW50cyBhbmQgY3V0IG91dCBhbnkgZXhpc3RpbmdcclxuICAgICAgICAgICAgICAgICAgICAvLyBvbmVzIHdpdGggdGhlIHNhbWUgYnJlYWtwb2ludCBudW1iZXIsIHdlIGRvbid0IHdhbnQgZHVwZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUoIGwgPj0gMCApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIF8uYnJlYWtwb2ludHNbbF0gJiYgXy5icmVha3BvaW50c1tsXSA9PT0gY3VycmVudEJyZWFrcG9pbnQgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmJyZWFrcG9pbnRzLnNwbGljZShsLDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGwtLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF8uYnJlYWtwb2ludHMucHVzaChjdXJyZW50QnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5icmVha3BvaW50U2V0dGluZ3NbY3VycmVudEJyZWFrcG9pbnRdID0gcmVzcG9uc2l2ZVNldHRpbmdzW2JyZWFrcG9pbnRdLnNldHRpbmdzO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF8uYnJlYWtwb2ludHMuc29ydChmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCBfLm9wdGlvbnMubW9iaWxlRmlyc3QgKSA/IGEtYiA6IGItYTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5yZWluaXQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXMgPVxyXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrXHJcbiAgICAgICAgICAgICAgICAuY2hpbGRyZW4oXy5vcHRpb25zLnNsaWRlKVxyXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1zbGlkZScpO1xyXG5cclxuICAgICAgICBfLnNsaWRlQ291bnQgPSBfLiRzbGlkZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoXy5jdXJyZW50U2xpZGUgPj0gXy5zbGlkZUNvdW50ICYmIF8uY3VycmVudFNsaWRlICE9PSAwKSB7XHJcbiAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gXy5jdXJyZW50U2xpZGUgLSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy5yZWdpc3RlckJyZWFrcG9pbnRzKCk7XHJcblxyXG4gICAgICAgIF8uc2V0UHJvcHMoKTtcclxuICAgICAgICBfLnNldHVwSW5maW5pdGUoKTtcclxuICAgICAgICBfLmJ1aWxkQXJyb3dzKCk7XHJcbiAgICAgICAgXy51cGRhdGVBcnJvd3MoKTtcclxuICAgICAgICBfLmluaXRBcnJvd0V2ZW50cygpO1xyXG4gICAgICAgIF8uYnVpbGREb3RzKCk7XHJcbiAgICAgICAgXy51cGRhdGVEb3RzKCk7XHJcbiAgICAgICAgXy5pbml0RG90RXZlbnRzKCk7XHJcbiAgICAgICAgXy5jbGVhblVwU2xpZGVFdmVudHMoKTtcclxuICAgICAgICBfLmluaXRTbGlkZUV2ZW50cygpO1xyXG5cclxuICAgICAgICBfLmNoZWNrUmVzcG9uc2l2ZShmYWxzZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZm9jdXNPblNlbGVjdCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAkKF8uJHNsaWRlVHJhY2spLmNoaWxkcmVuKCkub24oJ2NsaWNrLnNsaWNrJywgXy5zZWxlY3RIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uc2V0U2xpZGVDbGFzc2VzKHR5cGVvZiBfLmN1cnJlbnRTbGlkZSA9PT0gJ251bWJlcicgPyBfLmN1cnJlbnRTbGlkZSA6IDApO1xyXG5cclxuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XHJcbiAgICAgICAgXy5mb2N1c0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgXy5wYXVzZWQgPSAhXy5vcHRpb25zLmF1dG9wbGF5O1xyXG4gICAgICAgIF8uYXV0b1BsYXkoKTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ3JlSW5pdCcsIFtfXSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpICE9PSBfLndpbmRvd1dpZHRoKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChfLndpbmRvd0RlbGF5KTtcclxuICAgICAgICAgICAgXy53aW5kb3dEZWxheSA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgXy53aW5kb3dXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xyXG4gICAgICAgICAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoKTtcclxuICAgICAgICAgICAgICAgIGlmKCAhXy51bnNsaWNrZWQgKSB7IF8uc2V0UG9zaXRpb24oKTsgfVxyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucmVtb3ZlU2xpZGUgPSBTbGljay5wcm90b3R5cGUuc2xpY2tSZW1vdmUgPSBmdW5jdGlvbihpbmRleCwgcmVtb3ZlQmVmb3JlLCByZW1vdmVBbGwpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUJlZm9yZSA9IGluZGV4O1xyXG4gICAgICAgICAgICBpbmRleCA9IHJlbW92ZUJlZm9yZSA9PT0gdHJ1ZSA/IDAgOiBfLnNsaWRlQ291bnQgLSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gcmVtb3ZlQmVmb3JlID09PSB0cnVlID8gLS1pbmRleCA6IGluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA8IDEgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gXy5zbGlkZUNvdW50IC0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLnVubG9hZCgpO1xyXG5cclxuICAgICAgICBpZiAocmVtb3ZlQWxsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oKS5yZW1vdmUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZXEoaW5kZXgpLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy4kc2xpZGVzID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpO1xyXG5cclxuICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlVHJhY2suYXBwZW5kKF8uJHNsaWRlcyk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlc0NhY2hlID0gXy4kc2xpZGVzO1xyXG5cclxuICAgICAgICBfLnJlaW5pdCgpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldENTUyA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgcG9zaXRpb25Qcm9wcyA9IHt9LFxyXG4gICAgICAgICAgICB4LCB5O1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IC1wb3NpdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgeCA9IF8ucG9zaXRpb25Qcm9wID09ICdsZWZ0JyA/IE1hdGguY2VpbChwb3NpdGlvbikgKyAncHgnIDogJzBweCc7XHJcbiAgICAgICAgeSA9IF8ucG9zaXRpb25Qcm9wID09ICd0b3AnID8gTWF0aC5jZWlsKHBvc2l0aW9uKSArICdweCcgOiAnMHB4JztcclxuXHJcbiAgICAgICAgcG9zaXRpb25Qcm9wc1tfLnBvc2l0aW9uUHJvcF0gPSBwb3NpdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKF8udHJhbnNmb3Jtc0VuYWJsZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHBvc2l0aW9uUHJvcHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uUHJvcHMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKF8uY3NzVHJhbnNpdGlvbnMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsICcgKyB5ICsgJyknO1xyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MocG9zaXRpb25Qcm9wcyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywgJyArIHkgKyAnLCAwcHgpJztcclxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHBvc2l0aW9uUHJvcHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldERpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIF8uJGxpc3QuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAoJzBweCAnICsgXy5vcHRpb25zLmNlbnRlclBhZGRpbmcpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF8uJGxpc3QuaGVpZ2h0KF8uJHNsaWRlcy5maXJzdCgpLm91dGVySGVpZ2h0KHRydWUpICogXy5vcHRpb25zLnNsaWRlc1RvU2hvdyk7XHJcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgXy4kbGlzdC5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IChfLm9wdGlvbnMuY2VudGVyUGFkZGluZyArICcgMHB4JylcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLmxpc3RXaWR0aCA9IF8uJGxpc3Qud2lkdGgoKTtcclxuICAgICAgICBfLmxpc3RIZWlnaHQgPSBfLiRsaXN0LmhlaWdodCgpO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UgJiYgXy5vcHRpb25zLnZhcmlhYmxlV2lkdGggPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uc2xpZGVXaWR0aCA9IE1hdGguY2VpbChfLmxpc3RXaWR0aCAvIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpO1xyXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLndpZHRoKE1hdGguY2VpbCgoXy5zbGlkZVdpZHRoICogXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykubGVuZ3RoKSkpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy52YXJpYWJsZVdpZHRoID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2sud2lkdGgoNTAwMCAqIF8uc2xpZGVDb3VudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy5zbGlkZVdpZHRoID0gTWF0aC5jZWlsKF8ubGlzdFdpZHRoKTtcclxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5oZWlnaHQoTWF0aC5jZWlsKChfLiRzbGlkZXMuZmlyc3QoKS5vdXRlckhlaWdodCh0cnVlKSAqIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oJy5zbGljay1zbGlkZScpLmxlbmd0aCkpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvZmZzZXQgPSBfLiRzbGlkZXMuZmlyc3QoKS5vdXRlcldpZHRoKHRydWUpIC0gXy4kc2xpZGVzLmZpcnN0KCkud2lkdGgoKTtcclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZhcmlhYmxlV2lkdGggPT09IGZhbHNlKSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS53aWR0aChfLnNsaWRlV2lkdGggLSBvZmZzZXQpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldEZhZGUgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICB0YXJnZXRMZWZ0O1xyXG5cclxuICAgICAgICBfLiRzbGlkZXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0YXJnZXRMZWZ0ID0gKF8uc2xpZGVXaWR0aCAqIGluZGV4KSAqIC0xO1xyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiB0YXJnZXRMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXggLSAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRhcmdldExlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogXy5vcHRpb25zLnpJbmRleCAtIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVzLmVxKF8uY3VycmVudFNsaWRlKS5jc3Moe1xyXG4gICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXggLSAxLFxyXG4gICAgICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPT09IDEgJiYgXy5vcHRpb25zLmFkYXB0aXZlSGVpZ2h0ID09PSB0cnVlICYmIF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEhlaWdodCA9IF8uJHNsaWRlcy5lcShfLmN1cnJlbnRTbGlkZSkub3V0ZXJIZWlnaHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIF8uJGxpc3QuY3NzKCdoZWlnaHQnLCB0YXJnZXRIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRPcHRpb24gPVxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNsaWNrU2V0T3B0aW9uID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGFjY2VwdHMgYXJndW1lbnRzIGluIGZvcm1hdCBvZjpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqICAtIGZvciBjaGFuZ2luZyBhIHNpbmdsZSBvcHRpb24ncyB2YWx1ZTpcclxuICAgICAgICAgKiAgICAgLnNsaWNrKFwic2V0T3B0aW9uXCIsIG9wdGlvbiwgdmFsdWUsIHJlZnJlc2ggKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogIC0gZm9yIGNoYW5naW5nIGEgc2V0IG9mIHJlc3BvbnNpdmUgb3B0aW9uczpcclxuICAgICAgICAgKiAgICAgLnNsaWNrKFwic2V0T3B0aW9uXCIsICdyZXNwb25zaXZlJywgW3t9LCAuLi5dLCByZWZyZXNoIClcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqICAtIGZvciB1cGRhdGluZyBtdWx0aXBsZSB2YWx1ZXMgYXQgb25jZSAobm90IHJlc3BvbnNpdmUpXHJcbiAgICAgICAgICogICAgIC5zbGljayhcInNldE9wdGlvblwiLCB7ICdvcHRpb24nOiB2YWx1ZSwgLi4uIH0sIHJlZnJlc2ggKVxyXG4gICAgICAgICAqL1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsIGwsIGl0ZW0sIG9wdGlvbiwgdmFsdWUsIHJlZnJlc2ggPSBmYWxzZSwgdHlwZTtcclxuXHJcbiAgICAgICAgaWYoICQudHlwZSggYXJndW1lbnRzWzBdICkgPT09ICdvYmplY3QnICkge1xyXG5cclxuICAgICAgICAgICAgb3B0aW9uID0gIGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgcmVmcmVzaCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICAgICAgdHlwZSA9ICdtdWx0aXBsZSc7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoICQudHlwZSggYXJndW1lbnRzWzBdICkgPT09ICdzdHJpbmcnICkge1xyXG5cclxuICAgICAgICAgICAgb3B0aW9uID0gIGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgIHJlZnJlc2ggPSBhcmd1bWVudHNbMl07XHJcblxyXG4gICAgICAgICAgICBpZiAoIGFyZ3VtZW50c1swXSA9PT0gJ3Jlc3BvbnNpdmUnICYmICQudHlwZSggYXJndW1lbnRzWzFdICkgPT09ICdhcnJheScgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdHlwZSA9ICdyZXNwb25zaXZlJztcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICd1bmRlZmluZWQnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIHR5cGUgPSAnc2luZ2xlJztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIHR5cGUgPT09ICdzaW5nbGUnICkge1xyXG5cclxuICAgICAgICAgICAgXy5vcHRpb25zW29wdGlvbl0gPSB2YWx1ZTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICdtdWx0aXBsZScgKSB7XHJcblxyXG4gICAgICAgICAgICAkLmVhY2goIG9wdGlvbiAsIGZ1bmN0aW9uKCBvcHQsIHZhbCApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLm9wdGlvbnNbb3B0XSA9IHZhbDtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ3Jlc3BvbnNpdmUnICkge1xyXG5cclxuICAgICAgICAgICAgZm9yICggaXRlbSBpbiB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggJC50eXBlKCBfLm9wdGlvbnMucmVzcG9uc2l2ZSApICE9PSAnYXJyYXknICkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMucmVzcG9uc2l2ZSA9IFsgdmFsdWVbaXRlbV0gXTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsID0gXy5vcHRpb25zLnJlc3BvbnNpdmUubGVuZ3RoLTE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgcmVzcG9uc2l2ZSBvYmplY3QgYW5kIHNwbGljZSBvdXQgZHVwbGljYXRlcy5cclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSggbCA+PSAwICkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIF8ub3B0aW9ucy5yZXNwb25zaXZlW2xdLmJyZWFrcG9pbnQgPT09IHZhbHVlW2l0ZW1dLmJyZWFrcG9pbnQgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zLnJlc3BvbnNpdmUuc3BsaWNlKGwsMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zLnJlc3BvbnNpdmUucHVzaCggdmFsdWVbaXRlbV0gKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCByZWZyZXNoICkge1xyXG5cclxuICAgICAgICAgICAgXy51bmxvYWQoKTtcclxuICAgICAgICAgICAgXy5yZWluaXQoKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy5zZXREaW1lbnNpb25zKCk7XHJcblxyXG4gICAgICAgIF8uc2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgXy5zZXRDU1MoXy5nZXRMZWZ0KF8uY3VycmVudFNsaWRlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy5zZXRGYWRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignc2V0UG9zaXRpb24nLCBbX10pO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldFByb3BzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgYm9keVN0eWxlID0gZG9jdW1lbnQuYm9keS5zdHlsZTtcclxuXHJcbiAgICAgICAgXy5wb3NpdGlvblByb3AgPSBfLm9wdGlvbnMudmVydGljYWwgPT09IHRydWUgPyAndG9wJyA6ICdsZWZ0JztcclxuXHJcbiAgICAgICAgaWYgKF8ucG9zaXRpb25Qcm9wID09PSAndG9wJykge1xyXG4gICAgICAgICAgICBfLiRzbGlkZXIuYWRkQ2xhc3MoJ3NsaWNrLXZlcnRpY2FsJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVyLnJlbW92ZUNsYXNzKCdzbGljay12ZXJ0aWNhbCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvZHlTdHlsZS5XZWJraXRUcmFuc2l0aW9uICE9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgYm9keVN0eWxlLk1velRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICBib2R5U3R5bGUubXNUcmFuc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy51c2VDU1MgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIF8uY3NzVHJhbnNpdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIF8ub3B0aW9ucy5mYWRlICkge1xyXG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBfLm9wdGlvbnMuekluZGV4ID09PSAnbnVtYmVyJyApIHtcclxuICAgICAgICAgICAgICAgIGlmKCBfLm9wdGlvbnMuekluZGV4IDwgMyApIHtcclxuICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMuekluZGV4ID0gMztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF8ub3B0aW9ucy56SW5kZXggPSBfLmRlZmF1bHRzLnpJbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvZHlTdHlsZS5PVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgXy5hbmltVHlwZSA9ICdPVHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJy1vLXRyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAnT1RyYW5zaXRpb24nO1xyXG4gICAgICAgICAgICBpZiAoYm9keVN0eWxlLnBlcnNwZWN0aXZlUHJvcGVydHkgPT09IHVuZGVmaW5lZCAmJiBib2R5U3R5bGUud2Via2l0UGVyc3BlY3RpdmUgPT09IHVuZGVmaW5lZCkgXy5hbmltVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm9keVN0eWxlLk1velRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSAnTW96VHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJy1tb3otdHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2l0aW9uVHlwZSA9ICdNb3pUcmFuc2l0aW9uJztcclxuICAgICAgICAgICAgaWYgKGJvZHlTdHlsZS5wZXJzcGVjdGl2ZVByb3BlcnR5ID09PSB1bmRlZmluZWQgJiYgYm9keVN0eWxlLk1velBlcnNwZWN0aXZlID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvZHlTdHlsZS53ZWJraXRUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ3dlYmtpdFRyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNmb3JtVHlwZSA9ICctd2Via2l0LXRyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAnd2Via2l0VHJhbnNpdGlvbic7XHJcbiAgICAgICAgICAgIGlmIChib2R5U3R5bGUucGVyc3BlY3RpdmVQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkICYmIGJvZHlTdHlsZS53ZWJraXRQZXJzcGVjdGl2ZSA9PT0gdW5kZWZpbmVkKSBfLmFuaW1UeXBlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib2R5U3R5bGUubXNUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ21zVHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJy1tcy10cmFuc2Zvcm0nO1xyXG4gICAgICAgICAgICBfLnRyYW5zaXRpb25UeXBlID0gJ21zVHJhbnNpdGlvbic7XHJcbiAgICAgICAgICAgIGlmIChib2R5U3R5bGUubXNUcmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkgXy5hbmltVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm9keVN0eWxlLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkICYmIF8uYW5pbVR5cGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSAndHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJ3RyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAndHJhbnNpdGlvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF8udHJhbnNmb3Jtc0VuYWJsZWQgPSBfLm9wdGlvbnMudXNlVHJhbnNmb3JtICYmIChfLmFuaW1UeXBlICE9PSBudWxsICYmIF8uYW5pbVR5cGUgIT09IGZhbHNlKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRTbGlkZUNsYXNzZXMgPSBmdW5jdGlvbihpbmRleCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGNlbnRlck9mZnNldCwgYWxsU2xpZGVzLCBpbmRleE9mZnNldCwgcmVtYWluZGVyO1xyXG5cclxuICAgICAgICBhbGxTbGlkZXMgPSBfLiRzbGlkZXJcclxuICAgICAgICAgICAgLmZpbmQoJy5zbGljay1zbGlkZScpXHJcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2xpY2stYWN0aXZlIHNsaWNrLWNlbnRlciBzbGljay1jdXJyZW50JylcclxuICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgIC5lcShpbmRleClcclxuICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1jdXJyZW50Jyk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAgICAgdmFyIGV2ZW5Db2VmID0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAlIDIgPT09IDAgPyAxIDogMDtcclxuXHJcbiAgICAgICAgICAgIGNlbnRlck9mZnNldCA9IE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjZW50ZXJPZmZzZXQgJiYgaW5kZXggPD0gKF8uc2xpZGVDb3VudCAtIDEpIC0gY2VudGVyT2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZShpbmRleCAtIGNlbnRlck9mZnNldCArIGV2ZW5Db2VmLCBpbmRleCArIGNlbnRlck9mZnNldCArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stYWN0aXZlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZmZzZXQgPSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsU2xpZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZShpbmRleE9mZnNldCAtIGNlbnRlck9mZnNldCArIDEgKyBldmVuQ29lZiwgaW5kZXhPZmZzZXQgKyBjZW50ZXJPZmZzZXQgKyAyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsU2xpZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lcShhbGxTbGlkZXMubGVuZ3RoIC0gMSAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gXy5zbGlkZUNvdW50IC0gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmVxKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgICAgICAuZXEoaW5kZXgpXHJcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWNlbnRlcicpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gKF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4LCBpbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxTbGlkZXMubGVuZ3RoIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcbiAgICAgICAgICAgICAgICBpbmRleE9mZnNldCA9IF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSA/IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyBpbmRleCA6IGluZGV4O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID09IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAmJiAoXy5zbGlkZUNvdW50IC0gaW5kZXgpIDwgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4T2Zmc2V0IC0gKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLSByZW1haW5kZXIpLCBpbmRleE9mZnNldCArIHJlbWFpbmRlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4T2Zmc2V0LCBpbmRleE9mZnNldCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stYWN0aXZlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMubGF6eUxvYWQgPT09ICdvbmRlbWFuZCcgfHwgXy5vcHRpb25zLmxhenlMb2FkID09PSAnYW50aWNpcGF0ZWQnKSB7XHJcbiAgICAgICAgICAgIF8ubGF6eUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXR1cEluZmluaXRlID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgaSwgc2xpZGVJbmRleCwgaW5maW5pdGVDb3VudDtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8ub3B0aW9ucy5jZW50ZXJNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlICYmIF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xyXG5cclxuICAgICAgICAgICAgc2xpZGVJbmRleCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlQ291bnQgPSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgMTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5maW5pdGVDb3VudCA9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gXy5zbGlkZUNvdW50OyBpID4gKF8uc2xpZGVDb3VudCAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZmluaXRlQ291bnQpOyBpIC09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZUluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfLiRzbGlkZXNbc2xpZGVJbmRleF0pLmNsb25lKHRydWUpLmF0dHIoJ2lkJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLXNsaWNrLWluZGV4Jywgc2xpZGVJbmRleCAtIF8uc2xpZGVDb3VudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnByZXBlbmRUbyhfLiRzbGlkZVRyYWNrKS5hZGRDbGFzcygnc2xpY2stY2xvbmVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5maW5pdGVDb3VudCAgKyBfLnNsaWRlQ291bnQ7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXy4kc2xpZGVzW3NsaWRlSW5kZXhdKS5jbG9uZSh0cnVlKS5hdHRyKCdpZCcsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignZGF0YS1zbGljay1pbmRleCcsIHNsaWRlSW5kZXggKyBfLnNsaWRlQ291bnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhfLiRzbGlkZVRyYWNrKS5hZGRDbGFzcygnc2xpY2stY2xvbmVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmZpbmQoJy5zbGljay1jbG9uZWQnKS5maW5kKCdbaWRdJykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2lkJywgJycpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBmdW5jdGlvbiggdG9nZ2xlICkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmKCAhdG9nZ2xlICkge1xyXG4gICAgICAgICAgICBfLmF1dG9QbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF8uaW50ZXJydXB0ZWQgPSB0b2dnbGU7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc2VsZWN0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQgPVxyXG4gICAgICAgICAgICAkKGV2ZW50LnRhcmdldCkuaXMoJy5zbGljay1zbGlkZScpID9cclxuICAgICAgICAgICAgICAgICQoZXZlbnQudGFyZ2V0KSA6XHJcbiAgICAgICAgICAgICAgICAkKGV2ZW50LnRhcmdldCkucGFyZW50cygnLnNsaWNrLXNsaWRlJyk7XHJcblxyXG4gICAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KHRhcmdldEVsZW1lbnQuYXR0cignZGF0YS1zbGljay1pbmRleCcpKTtcclxuXHJcbiAgICAgICAgaWYgKCFpbmRleCkgaW5kZXggPSAwO1xyXG5cclxuICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKGluZGV4LCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLnNsaWRlSGFuZGxlcihpbmRleCk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc2xpZGVIYW5kbGVyID0gZnVuY3Rpb24oaW5kZXgsIHN5bmMsIGRvbnRBbmltYXRlKSB7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXRTbGlkZSwgYW5pbVNsaWRlLCBvbGRTbGlkZSwgc2xpZGVMZWZ0LCB0YXJnZXRMZWZ0ID0gbnVsbCxcclxuICAgICAgICAgICAgXyA9IHRoaXMsIG5hdlRhcmdldDtcclxuXHJcbiAgICAgICAgc3luYyA9IHN5bmMgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChfLmFuaW1hdGluZyA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMud2FpdEZvckFuaW1hdGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlICYmIF8uY3VycmVudFNsaWRlID09PSBpbmRleCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3luYyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgXy5hc05hdkZvcihpbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXRTbGlkZSA9IGluZGV4O1xyXG4gICAgICAgIHRhcmdldExlZnQgPSBfLmdldExlZnQodGFyZ2V0U2xpZGUpO1xyXG4gICAgICAgIHNsaWRlTGVmdCA9IF8uZ2V0TGVmdChfLmN1cnJlbnRTbGlkZSk7XHJcblxyXG4gICAgICAgIF8uY3VycmVudExlZnQgPSBfLnN3aXBlTGVmdCA9PT0gbnVsbCA/IHNsaWRlTGVmdCA6IF8uc3dpcGVMZWZ0O1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gZmFsc2UgJiYgKGluZGV4IDwgMCB8fCBpbmRleCA+IF8uZ2V0RG90Q291bnQoKSAqIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCkpIHtcclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0U2xpZGUgPSBfLmN1cnJlbnRTbGlkZTtcclxuICAgICAgICAgICAgICAgIGlmIChkb250QW5pbWF0ZSAhPT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5hbmltYXRlU2xpZGUoc2xpZGVMZWZ0LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUodGFyZ2V0U2xpZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfLnBvc3RTbGlkZSh0YXJnZXRTbGlkZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSAmJiAoaW5kZXggPCAwIHx8IGluZGV4ID4gKF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCkpKSB7XHJcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFNsaWRlID0gXy5jdXJyZW50U2xpZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9udEFuaW1hdGUgIT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uYW5pbWF0ZVNsaWRlKHNsaWRlTGVmdCwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKHRhcmdldFNsaWRlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUodGFyZ2V0U2xpZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICggXy5vcHRpb25zLmF1dG9wbGF5ICkge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKF8uYXV0b1BsYXlUaW1lcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGFyZ2V0U2xpZGUgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGFuaW1TbGlkZSA9IF8uc2xpZGVDb3VudCAtIChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYW5pbVNsaWRlID0gXy5zbGlkZUNvdW50ICsgdGFyZ2V0U2xpZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFNsaWRlID49IF8uc2xpZGVDb3VudCkge1xyXG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhbmltU2xpZGUgPSAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYW5pbVNsaWRlID0gdGFyZ2V0U2xpZGUgLSBfLnNsaWRlQ291bnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbmltU2xpZGUgPSB0YXJnZXRTbGlkZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uYW5pbWF0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2JlZm9yZUNoYW5nZScsIFtfLCBfLmN1cnJlbnRTbGlkZSwgYW5pbVNsaWRlXSk7XHJcblxyXG4gICAgICAgIG9sZFNsaWRlID0gXy5jdXJyZW50U2xpZGU7XHJcbiAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBhbmltU2xpZGU7XHJcblxyXG4gICAgICAgIF8uc2V0U2xpZGVDbGFzc2VzKF8uY3VycmVudFNsaWRlKTtcclxuXHJcbiAgICAgICAgaWYgKCBfLm9wdGlvbnMuYXNOYXZGb3IgKSB7XHJcblxyXG4gICAgICAgICAgICBuYXZUYXJnZXQgPSBfLmdldE5hdlRhcmdldCgpO1xyXG4gICAgICAgICAgICBuYXZUYXJnZXQgPSBuYXZUYXJnZXQuc2xpY2soJ2dldFNsaWNrJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIG5hdlRhcmdldC5zbGlkZUNvdW50IDw9IG5hdlRhcmdldC5vcHRpb25zLnNsaWRlc1RvU2hvdyApIHtcclxuICAgICAgICAgICAgICAgIG5hdlRhcmdldC5zZXRTbGlkZUNsYXNzZXMoXy5jdXJyZW50U2xpZGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy51cGRhdGVEb3RzKCk7XHJcbiAgICAgICAgXy51cGRhdGVBcnJvd3MoKTtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmIChkb250QW5pbWF0ZSAhPT0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIF8uZmFkZVNsaWRlT3V0KG9sZFNsaWRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfLmZhZGVTbGlkZShhbmltU2xpZGUsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfLnBvc3RTbGlkZShhbmltU2xpZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF8uYW5pbWF0ZUhlaWdodCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZG9udEFuaW1hdGUgIT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICBfLmFuaW1hdGVTbGlkZSh0YXJnZXRMZWZ0LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnN0YXJ0TG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdy5oaWRlKCk7XHJcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdy5oaWRlKCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5kb3RzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgIF8uJGRvdHMuaGlkZSgpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uJHNsaWRlci5hZGRDbGFzcygnc2xpY2stbG9hZGluZycpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlRGlyZWN0aW9uID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciB4RGlzdCwgeURpc3QsIHIsIHN3aXBlQW5nbGUsIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICB4RGlzdCA9IF8udG91Y2hPYmplY3Quc3RhcnRYIC0gXy50b3VjaE9iamVjdC5jdXJYO1xyXG4gICAgICAgIHlEaXN0ID0gXy50b3VjaE9iamVjdC5zdGFydFkgLSBfLnRvdWNoT2JqZWN0LmN1clk7XHJcbiAgICAgICAgciA9IE1hdGguYXRhbjIoeURpc3QsIHhEaXN0KTtcclxuXHJcbiAgICAgICAgc3dpcGVBbmdsZSA9IE1hdGgucm91bmQociAqIDE4MCAvIE1hdGguUEkpO1xyXG4gICAgICAgIGlmIChzd2lwZUFuZ2xlIDwgMCkge1xyXG4gICAgICAgICAgICBzd2lwZUFuZ2xlID0gMzYwIC0gTWF0aC5hYnMoc3dpcGVBbmdsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHN3aXBlQW5nbGUgPD0gNDUpICYmIChzd2lwZUFuZ2xlID49IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXy5vcHRpb25zLnJ0bCA9PT0gZmFsc2UgPyAnbGVmdCcgOiAncmlnaHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChzd2lwZUFuZ2xlIDw9IDM2MCkgJiYgKHN3aXBlQW5nbGUgPj0gMzE1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKF8ub3B0aW9ucy5ydGwgPT09IGZhbHNlID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoc3dpcGVBbmdsZSA+PSAxMzUpICYmIChzd2lwZUFuZ2xlIDw9IDIyNSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChfLm9wdGlvbnMucnRsID09PSBmYWxzZSA/ICdyaWdodCcgOiAnbGVmdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsU3dpcGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAoKHN3aXBlQW5nbGUgPj0gMzUpICYmIChzd2lwZUFuZ2xlIDw9IDEzNSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG93bic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3VwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICd2ZXJ0aWNhbCc7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc3dpcGVFbmQgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHNsaWRlQ291bnQsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjtcclxuXHJcbiAgICAgICAgXy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIF8uc3dpcGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoXy5zY3JvbGxpbmcpIHtcclxuICAgICAgICAgICAgXy5zY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IGZhbHNlO1xyXG4gICAgICAgIF8uc2hvdWxkQ2xpY2sgPSAoIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPiAxMCApID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoIF8udG91Y2hPYmplY3QuY3VyWCA9PT0gdW5kZWZpbmVkICkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIF8udG91Y2hPYmplY3QuZWRnZUhpdCA9PT0gdHJ1ZSApIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2VkZ2UnLCBbXywgXy5zd2lwZURpcmVjdGlvbigpIF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID49IF8udG91Y2hPYmplY3QubWluU3dpcGUgKSB7XHJcblxyXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfLnN3aXBlRGlyZWN0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKCBkaXJlY3Rpb24gKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdkb3duJzpcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVDb3VudCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ub3B0aW9ucy5zd2lwZVRvU2xpZGUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5jaGVja05hdmlnYWJsZSggXy5jdXJyZW50U2xpZGUgKyBfLmdldFNsaWRlQ291bnQoKSApIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY3VycmVudFNsaWRlICsgXy5nZXRTbGlkZUNvdW50KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF8uY3VycmVudERpcmVjdGlvbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3VwJzpcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVDb3VudCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ub3B0aW9ucy5zd2lwZVRvU2xpZGUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5jaGVja05hdmlnYWJsZSggXy5jdXJyZW50U2xpZGUgLSBfLmdldFNsaWRlQ291bnQoKSApIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY3VycmVudFNsaWRlIC0gXy5nZXRTbGlkZUNvdW50KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF8uY3VycmVudERpcmVjdGlvbiA9IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcblxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIGRpcmVjdGlvbiAhPSAndmVydGljYWwnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKCBzbGlkZUNvdW50ICk7XHJcbiAgICAgICAgICAgICAgICBfLnRvdWNoT2JqZWN0ID0ge307XHJcbiAgICAgICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignc3dpcGUnLCBbXywgZGlyZWN0aW9uIF0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKCBfLnRvdWNoT2JqZWN0LnN0YXJ0WCAhPT0gXy50b3VjaE9iamVjdC5jdXJYICkge1xyXG5cclxuICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKCBfLmN1cnJlbnRTbGlkZSApO1xyXG4gICAgICAgICAgICAgICAgXy50b3VjaE9iamVjdCA9IHt9O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc3dpcGVIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoKF8ub3B0aW9ucy5zd2lwZSA9PT0gZmFsc2UpIHx8ICgnb250b3VjaGVuZCcgaW4gZG9jdW1lbnQgJiYgXy5vcHRpb25zLnN3aXBlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXy5vcHRpb25zLmRyYWdnYWJsZSA9PT0gZmFsc2UgJiYgZXZlbnQudHlwZS5pbmRleE9mKCdtb3VzZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLnRvdWNoT2JqZWN0LmZpbmdlckNvdW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCAmJiBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgIT09IHVuZGVmaW5lZCA/XHJcbiAgICAgICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcy5sZW5ndGggOiAxO1xyXG5cclxuICAgICAgICBfLnRvdWNoT2JqZWN0Lm1pblN3aXBlID0gXy5saXN0V2lkdGggLyBfLm9wdGlvbnNcclxuICAgICAgICAgICAgLnRvdWNoVGhyZXNob2xkO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsU3dpcGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfLnRvdWNoT2JqZWN0Lm1pblN3aXBlID0gXy5saXN0SGVpZ2h0IC8gXy5vcHRpb25zXHJcbiAgICAgICAgICAgICAgICAudG91Y2hUaHJlc2hvbGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmRhdGEuYWN0aW9uKSB7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdzdGFydCc6XHJcbiAgICAgICAgICAgICAgICBfLnN3aXBlU3RhcnQoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdtb3ZlJzpcclxuICAgICAgICAgICAgICAgIF8uc3dpcGVNb3ZlKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcclxuICAgICAgICAgICAgICAgIF8uc3dpcGVFbmQoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zd2lwZU1vdmUgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGVkZ2VXYXNIaXQgPSBmYWxzZSxcclxuICAgICAgICAgICAgY3VyTGVmdCwgc3dpcGVEaXJlY3Rpb24sIHN3aXBlTGVuZ3RoLCBwb3NpdGlvbk9mZnNldCwgdG91Y2hlcywgdmVydGljYWxTd2lwZUxlbmd0aDtcclxuXHJcbiAgICAgICAgdG91Y2hlcyA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgIT09IHVuZGVmaW5lZCA/IGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICghXy5kcmFnZ2luZyB8fCBfLnNjcm9sbGluZyB8fCB0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN1ckxlZnQgPSBfLmdldExlZnQoXy5jdXJyZW50U2xpZGUpO1xyXG5cclxuICAgICAgICBfLnRvdWNoT2JqZWN0LmN1clggPSB0b3VjaGVzICE9PSB1bmRlZmluZWQgPyB0b3VjaGVzWzBdLnBhZ2VYIDogZXZlbnQuY2xpZW50WDtcclxuICAgICAgICBfLnRvdWNoT2JqZWN0LmN1clkgPSB0b3VjaGVzICE9PSB1bmRlZmluZWQgPyB0b3VjaGVzWzBdLnBhZ2VZIDogZXZlbnQuY2xpZW50WTtcclxuXHJcbiAgICAgICAgXy50b3VjaE9iamVjdC5zd2lwZUxlbmd0aCA9IE1hdGgucm91bmQoTWF0aC5zcXJ0KFxyXG4gICAgICAgICAgICBNYXRoLnBvdyhfLnRvdWNoT2JqZWN0LmN1clggLSBfLnRvdWNoT2JqZWN0LnN0YXJ0WCwgMikpKTtcclxuXHJcbiAgICAgICAgdmVydGljYWxTd2lwZUxlbmd0aCA9IE1hdGgucm91bmQoTWF0aC5zcXJ0KFxyXG4gICAgICAgICAgICBNYXRoLnBvdyhfLnRvdWNoT2JqZWN0LmN1clkgLSBfLnRvdWNoT2JqZWN0LnN0YXJ0WSwgMikpKTtcclxuXHJcbiAgICAgICAgaWYgKCFfLm9wdGlvbnMudmVydGljYWxTd2lwaW5nICYmICFfLnN3aXBpbmcgJiYgdmVydGljYWxTd2lwZUxlbmd0aCA+IDQpIHtcclxuICAgICAgICAgICAgXy5zY3JvbGxpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsU3dpcGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID0gdmVydGljYWxTd2lwZUxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXBlRGlyZWN0aW9uID0gXy5zd2lwZURpcmVjdGlvbigpO1xyXG5cclxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAhPT0gdW5kZWZpbmVkICYmIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPiA0KSB7XHJcbiAgICAgICAgICAgIF8uc3dpcGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwb3NpdGlvbk9mZnNldCA9IChfLm9wdGlvbnMucnRsID09PSBmYWxzZSA/IDEgOiAtMSkgKiAoXy50b3VjaE9iamVjdC5jdXJYID4gXy50b3VjaE9iamVjdC5zdGFydFggPyAxIDogLTEpO1xyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWxTd2lwaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0gXy50b3VjaE9iamVjdC5jdXJZID4gXy50b3VjaE9iamVjdC5zdGFydFkgPyAxIDogLTE7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgc3dpcGVMZW5ndGggPSBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoO1xyXG5cclxuICAgICAgICBfLnRvdWNoT2JqZWN0LmVkZ2VIaXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaWYgKChfLmN1cnJlbnRTbGlkZSA9PT0gMCAmJiBzd2lwZURpcmVjdGlvbiA9PT0gJ3JpZ2h0JykgfHwgKF8uY3VycmVudFNsaWRlID49IF8uZ2V0RG90Q291bnQoKSAmJiBzd2lwZURpcmVjdGlvbiA9PT0gJ2xlZnQnKSkge1xyXG4gICAgICAgICAgICAgICAgc3dpcGVMZW5ndGggPSBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoICogXy5vcHRpb25zLmVkZ2VGcmljdGlvbjtcclxuICAgICAgICAgICAgICAgIF8udG91Y2hPYmplY3QuZWRnZUhpdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uc3dpcGVMZWZ0ID0gY3VyTGVmdCArIHN3aXBlTGVuZ3RoICogcG9zaXRpb25PZmZzZXQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy5zd2lwZUxlZnQgPSBjdXJMZWZ0ICsgKHN3aXBlTGVuZ3RoICogKF8uJGxpc3QuaGVpZ2h0KCkgLyBfLmxpc3RXaWR0aCkpICogcG9zaXRpb25PZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWxTd2lwaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uc3dpcGVMZWZ0ID0gY3VyTGVmdCArIHN3aXBlTGVuZ3RoICogcG9zaXRpb25PZmZzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IHRydWUgfHwgXy5vcHRpb25zLnRvdWNoTW92ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uYW5pbWF0aW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uc3dpcGVMZWZ0ID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy5zZXRDU1MoXy5zd2lwZUxlZnQpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlU3RhcnQgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHRvdWNoZXM7XHJcblxyXG4gICAgICAgIF8uaW50ZXJydXB0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoXy50b3VjaE9iamVjdC5maW5nZXJDb3VudCAhPT0gMSB8fCBfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICBfLnRvdWNoT2JqZWN0ID0ge307XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdG91Y2hlcyA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8udG91Y2hPYmplY3Quc3RhcnRYID0gXy50b3VjaE9iamVjdC5jdXJYID0gdG91Y2hlcyAhPT0gdW5kZWZpbmVkID8gdG91Y2hlcy5wYWdlWCA6IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgXy50b3VjaE9iamVjdC5zdGFydFkgPSBfLnRvdWNoT2JqZWN0LmN1clkgPSB0b3VjaGVzICE9PSB1bmRlZmluZWQgPyB0b3VjaGVzLnBhZ2VZIDogZXZlbnQuY2xpZW50WTtcclxuXHJcbiAgICAgICAgXy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUudW5maWx0ZXJTbGlkZXMgPSBTbGljay5wcm90b3R5cGUuc2xpY2tVbmZpbHRlciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLiRzbGlkZXNDYWNoZSAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgXy51bmxvYWQoKTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5kZXRhY2goKTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xyXG5cclxuICAgICAgICAgICAgXy5yZWluaXQoKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnVubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgICQoJy5zbGljay1jbG9uZWQnLCBfLiRzbGlkZXIpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICBpZiAoXy4kZG90cykge1xyXG4gICAgICAgICAgICBfLiRkb3RzLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uJHByZXZBcnJvdyAmJiBfLmh0bWxFeHByLnRlc3QoXy5vcHRpb25zLnByZXZBcnJvdykpIHtcclxuICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uJG5leHRBcnJvdyAmJiBfLmh0bWxFeHByLnRlc3QoXy5vcHRpb25zLm5leHRBcnJvdykpIHtcclxuICAgICAgICAgICAgXy4kbmV4dEFycm93LnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2xpY2stc2xpZGUgc2xpY2stYWN0aXZlIHNsaWNrLXZpc2libGUgc2xpY2stY3VycmVudCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAnJyk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUudW5zbGljayA9IGZ1bmN0aW9uKGZyb21CcmVha3BvaW50KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcigndW5zbGljaycsIFtfLCBmcm9tQnJlYWtwb2ludF0pO1xyXG4gICAgICAgIF8uZGVzdHJveSgpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnVwZGF0ZUFycm93cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGNlbnRlck9mZnNldDtcclxuXHJcbiAgICAgICAgY2VudGVyT2Zmc2V0ID0gTWF0aC5mbG9vcihfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMik7XHJcblxyXG4gICAgICAgIGlmICggXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgICBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICYmXHJcbiAgICAgICAgICAgICFfLm9wdGlvbnMuaW5maW5pdGUgKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8uY3VycmVudFNsaWRlID09PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LmFkZENsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgXy4kbmV4dEFycm93LnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5jdXJyZW50U2xpZGUgPj0gXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gZmFsc2UpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cuYWRkQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XHJcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChfLmN1cnJlbnRTbGlkZSA+PSBfLnNsaWRlQ291bnQgLSAxICYmIF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kbmV4dEFycm93LmFkZENsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnVwZGF0ZURvdHMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy4kZG90cyAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgXy4kZG90c1xyXG4gICAgICAgICAgICAgICAgLmZpbmQoJ2xpJylcclxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXHJcbiAgICAgICAgICAgICAgICAgICAgLmVuZCgpO1xyXG5cclxuICAgICAgICAgICAgXy4kZG90c1xyXG4gICAgICAgICAgICAgICAgLmZpbmQoJ2xpJylcclxuICAgICAgICAgICAgICAgIC5lcShNYXRoLmZsb29yKF8uY3VycmVudFNsaWRlIC8gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKSlcclxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stYWN0aXZlJyk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS52aXNpYmlsaXR5ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKCBfLm9wdGlvbnMuYXV0b3BsYXkgKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIGRvY3VtZW50W18uaGlkZGVuXSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLmludGVycnVwdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICAkLmZuLnNsaWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICBvcHQgPSBhcmd1bWVudHNbMF0sXHJcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxyXG4gICAgICAgICAgICBsID0gXy5sZW5ndGgsXHJcbiAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgIHJldDtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0ID09ICdvYmplY3QnIHx8IHR5cGVvZiBvcHQgPT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgICAgICBfW2ldLnNsaWNrID0gbmV3IFNsaWNrKF9baV0sIG9wdCk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJldCA9IF9baV0uc2xpY2tbb3B0XS5hcHBseShfW2ldLnNsaWNrLCBhcmdzKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXQgIT0gJ3VuZGVmaW5lZCcpIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfO1xyXG4gICAgfTtcclxuXHJcbn0pKTtcclxuIiwiLyoqXHJcbiAqXHJcbiAqIE1BSU4gSkFWQVNDUklQVCBNT0RVTEVTOiBTb25vIGkgbW9kdWxpIHByaW5jaXBhbGkuXHJcbiAqXHJcbiAqIEBhdXRob3IgICBBbmRyZWEgRGVsbCdPcmNvIDxhZG9AbmV0bmV4dC5pdD5cclxuICogQHZlcnNpb24gIHYgMS4yXHJcbiAqXHJcbiAqIE1vZHVsbyBjb3JlICBOT04gRUNNQSA2XHJcbiAqL1xyXG52YXIgRW5naW5lID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGZ1bmN0aW9uc09uUmVhZHkgPSBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQXZ2aWEgbCdlbmdpbmVcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc3RhcnQoKSB7XHJcbiAgICAgICAgZXhlY3V0ZU9uUmVhZHkoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRXNlZ3VlIGZpc2ljYW1lbnRlIGxlIGF6aW9uaSBpbiBjb2RhXHJcbiAgICAgKi9cclxuICAgIHZhciBleGVjdXRlT25SZWFkeSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uc09uUmVhZHkuc29ydChjb21wYXJlUnVsZSk7XHJcbiAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZnVuY3Rpb25zT25SZWFkeSkge1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25zT25SZWFkeVtpXS5hY3Rpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVnb2xhIGRpIGNvbXBhcmF6aW9uZSBkZWxsZSBwcmlvcml0w6BcclxuICAgICAqIEBwYXJhbSAge1t0eXBlXX0gYVxyXG4gICAgICogQHBhcmFtICB7W3R5cGVdfSBiXHJcbiAgICAgKiBAcmV0dXJuIHthbnl9XHJcbiAgICAgKi9cclxuICAgIHZhciBjb21wYXJlUnVsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgICAgICBpZiAoYS5wcmlvcml0eSA+IGIucHJpb3JpdHkpIHJldHVybiAtMTtcclxuICAgICAgICBlbHNlIGlmIChhLmxhc3Rfbm9tID4gYi5sYXN0X25vbSkgcmV0dXJuIDE7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZ1bnppb25lIGNoZSBzb3N0aXR1aXNjZSBsYSBjbGFzc2ljYSBkb2N1bWVudCByZWFkeSBkaSBqcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259ICBhY3Rpb24gRnVuemlvbmUgZGkgY2FsbGJhY2sgZGEgZXNlZ3VpcmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nID0gICAgICBcInVua293blwifSAgICBjb2RlICAgICBDb2RpY2UgaWRlbnRpZmljYXRpdm8gZGVsbCdhemlvbmVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyID0gICAgICAxfSAgICAgICAgICAgcHJpb3JpdHkgUHJpb3JpdMOgIG5lbGwnZXNlY3V6aW9uZSwgbWFnZ2lvcmUgw6ggaWwgdmFsb3JlLCBwacO5IGFsdGEgw6ggbGEgcHJpb3JpdMOgXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG9uUmVhZHkoYWN0aW9uLCBwcmlvcml0eSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcHJpb3JpdHkgPT0gXCJ1bmRlZmluZWRcIikgcHJpb3JpdHkgPSAxO1xyXG4gICAgICAgIGZ1bmN0aW9uc09uUmVhZHkucHVzaCh7XHJcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxyXG4gICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgb25SZWFkeTpvblJlYWR5LFxyXG4gICAgICAgIHN0YXJ0OnN0YXJ0XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuRW5naW5lLnN0YXJ0KCk7XHJcblxyXG5FbmdpbmUub25SZWFkeShmdW5jdGlvbigpIHtcclxuICAgIHNob3dFbGVtZW50cygpO1xyXG59KTtcclxuXHJcblxyXG5cclxuXHJcbiQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKXtcclxuICAgIHNob3dFbGVtZW50cygpO1xyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHNob3dFbGVtZW50cygpeyAgICBcclxuICAgICQoIFwiLmFuaW1cIiApLmVhY2goZnVuY3Rpb24oIGluZGV4ICkge1xyXG4gICAgICAgIGlmICgkKHRoaXMpLmlzSW5WaWV3cG9ydCgpKSB7XHJcbiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG4kKCcuaW1nX2Z1bGxfd2lkdGgnKS5zbGljayh7XHJcbiAgICBpbmZpbml0ZTogdHJ1ZSxcclxuICAgIGF1dG9wbGF5OiB0cnVlLFxyXG4gICAgYXV0b3BsYXlTcGVlZDogMjAwMCxcclxuICAgIHBhdXNlT25Ib3ZlcjogZmFsc2UsXHJcbiAgICB0b3VjaE1vdmU6IHRydWUsXHJcbiAgICBhcnJvd3M6IGZhbHNlLFxyXG4gIH0pO1xyXG5cclxuICAkKCAnLnNsaWRlR2FsbGVyeScgKS5lYWNoKCBmdW5jdGlvbigpIHtcclxuICAgICQoIHRoaXMgKS5zbGljayh7XHJcbiAgICAgICAgaW5maW5pdGU6IHRydWUsXHJcbiAgICAgICAgYXV0b3BsYXk6IHRydWUsXHJcbiAgICAgICAgYXV0b3BsYXlTcGVlZDogMjAwMCxcclxuICAgICAgICBwYXVzZU9uSG92ZXI6IGZhbHNlLFxyXG4gICAgICAgIHRvdWNoTW92ZTogdHJ1ZSxcclxuICAgICAgICBhcnJvd3M6IGZhbHNlLFxyXG4gICAgICAgIC8vIGFycm93czogdHJ1ZSxcclxuICAgICAgICAvLyBwcmV2QXJyb3c6ICQodGhpcykucGFyZW50cygnLmdhbGxlcnlCbG9jaycpLmZpbmQoJy5BcHJldicpLFxyXG4gICAgICAgIC8vIG5leHRBcnJvdzogJCh0aGlzKS5wYXJlbnRzKCcuZ2FsbGVyeUJsb2NrJykuZmluZCgnLkFuZXh0JyksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAkLmZuLmlzSW5WaWV3cG9ydCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGVsZW1lbnRUb3AgPSAkKHRoaXMpLm9mZnNldCgpLnRvcDtcclxuICAgIHZhciBlbGVtZW50Qm90dG9tID0gZWxlbWVudFRvcCArICQodGhpcykub3V0ZXJIZWlnaHQoKTtcclxuXHJcbiAgICB2YXIgdmlld3BvcnRUb3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XHJcbiAgICB2YXIgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArICQod2luZG93KS5oZWlnaHQoKTtcclxuXHJcbiAgICByZXR1cm4gZWxlbWVudEJvdHRvbSA+IHZpZXdwb3J0VG9wICYmIGVsZW1lbnRUb3AgPCB2aWV3cG9ydEJvdHRvbTtcclxufTsiXX0=