/*! * 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,"'")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?" ":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&&_?"":" ")),!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&&_?"":" ")+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(" ")},_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(" ")},_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> </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( / | /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ämä kenttä on pakollinen.", email: "Syötä oikea sähköpostiosoite.", url: "Syötä oikea URL-osoite.", date: "Syötä oikea päivämäärä.", dateISO: "Syötä oikea päivämäärä muodossa VVVV-KK-PP.", number: "Syötä luku.", creditcard: "Syötä voimassa oleva luottokorttinumero.", digits: "Syötä pelkästään numeroita.", equalTo: "Syötä sama arvo uudestaan.", maxlength: $.validator.format( "Voit syöttää enintään {0} merkkiä." ), minlength: $.validator.format( "Vähintään {0} merkkiä." ), rangelength: $.validator.format( "Syötä vähintään {0} ja enintään {1} merkkiä." ), range: $.validator.format( "Syötä arvo väliltä {0}–{1}." ), max: $.validator.format( "Syötä arvo, joka on enintään {0}." ), min: $.validator.format( "Syötä arvo, joka on vähintää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'estensione valida", maxlength: $.validator.format( "Non inserire più 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ø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 é requerido.", remote: "Por favor, corrija este campo.", email: "Por favor, forneça um endereço de email válido.", url: "Por favor, forneça uma URL válida.", date: "Por favor, forneça uma data válida.", dateISO: "Por favor, forneça uma data válida (ISO).", number: "Por favor, forneça um número válido.", digits: "Por favor, forneça somente dígitos.", creditcard: "Por favor, forneça um cartão de crédito válido.", equalTo: "Por favor, forneça o mesmo valor novamente.", maxlength: $.validator.format( "Por favor, forneça não mais que {0} caracteres." ), minlength: $.validator.format( "Por favor, forneça ao menos {0} caracteres." ), rangelength: $.validator.format( "Por favor, forneça um valor entre {0} e {1} caracteres de comprimento." ), range: $.validator.format( "Por favor, forneça um valor entre {0} e {1}." ), max: $.validator.format( "Por favor, forneça um valor menor ou igual a {0}." ), min: $.validator.format( "Por favor, forneça um valor maior ou igual a {0}." ), step: $.validator.format( "Por favor, forneça um valor múltiplo de {0}." ), // Metodos Adicionais maxWords: $.validator.format( "Por favor, forneça com {0} palavras ou menos." ), minWords: $.validator.format( "Por favor, forneça pelo menos {0} palavras." ), rangeWords: $.validator.format( "Por favor, forneça entre {0} e {1} palavras." ), accept: "Por favor, forneça um tipo válido.", alphanumeric: "Por favor, forneça somente com letras, números e sublinhados.", bankaccountNL: "Por favor, forneça com um número de conta bancária válida.", bankorgiroaccountNL: "Por favor, forneça um banco válido ou número de conta.", bic: "Por favor, forneça um código BIC válido.", cifES: "Por favor, forneça um código CIF válido.", creditcardtypes: "Por favor, forneça um número de cartão de crédito válido.", currency: "Por favor, forneça uma moeda válida.", dateFA: "Por favor, forneça uma data correta.", dateITA: "Por favor, forneça uma data correta.", dateNL: "Por favor, forneça uma data correta.", extension: "Por favor, forneça um valor com uma extensão válida.", giroaccountNL: "Por favor, forneça um número de conta corrente válido.", iban: "Por favor, forneça um código IBAN válido.", integer: "Por favor, forneça um número não decimal.", ipv4: "Por favor, forneça um IPv4 válido.", ipv6: "Por favor, forneça um IPv6 válido.", lettersonly: "Por favor, forneça apenas com letras.", letterswithbasicpunc: "Por favor, forneça apenas letras ou pontuações.", mobileNL: "Por favor, forneceça um número válido de telefone.", mobileUK: "Por favor, forneceça um número válido de telefone.", nieES: "Por favor, forneça um NIE válido.", nifES: "Por favor, forneça um NIF válido.", nowhitespace: "Por favor, não utilize espaços em branco.", pattern: "O formato fornecido é inválido.", phoneNL: "Por favor, forneça um número de telefone válido.", phoneUK: "Por favor, forneça um número de telefone válido.", phoneUS: "Por favor, forneça um número de telefone válido.", phonesUK: "Por favor, forneça um número de telefone válido.", postalCodeCA: "Por favor, forneça um número de código postal válido.", postalcodeIT: "Por favor, forneça um número de código postal válido.", postalcodeNL: "Por favor, forneça um número de código postal válido.", postcodeUK: "Por favor, forneça um número de código postal válido.", postalcodeBR: "Por favor, forneça um CEP válido.", require_from_group: $.validator.format( "Por favor, forneç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ça um estado válido.", strippedminlength: $.validator.format( "Por favor, forneça pelo menos {0} caracteres." ), time: "Por favor, forneça um horário válido, no intervado de 00:00 a 23:59.", time12h: "Por favor, forneça um horário válido, no intervado de 01:00 a 12:59 am/pm.", url2: "Por favor, forneça uma URL válida.", vinUS: "O número de identificação de veículo informado (VIN) é inválido.", zipcodeUS: "Por favor, forneça um código postal americano válido.", ziprange: "O código postal deve estar entre 902xx-xxxx e 905xx-xxxx", cpfBR: "Por favor, forneça um CPF válido.", nisBR: "Por favor, forneça um NIS/PIS válido", cnhBR: "Por favor, forneça um CNH válido.", cnpjBR: "Por favor, forneça um CNPJ vá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ório.", remote: "Por favor, corrija este campo.", email: "Por favor, introduza um endereço eletrónico válido.", url: "Por favor, introduza um URL válido.", date: "Por favor, introduza uma data válida.", dateISO: "Por favor, introduza uma data válida (ISO).", number: "Por favor, introduza um número válido.", digits: "Por favor, introduza apenas dígitos.", creditcard: "Por favor, introduza um número de cartão de crédito válido.", equalTo: "Por favor, introduza de novo o mesmo valor.", extension: "Por favor, introduza um ficheiro com uma extensão válida.", maxlength: $.validator.format( "Por favor, nã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álido.", nieES: "Por favor, introduza um NIE válido.", cifES: "Por favor, introduza um CIF vá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ält är obligatoriskt.", remote: "Var snäll och åtgärda detta fält.", maxlength: $.validator.format( "Du får ange högst {0} tecken." ), minlength: $.validator.format( "Du må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 (ÅÅÅÅ-MM-DD).", number: "Ange ett korrekt nummer.", digits: "Ange endast siffror.", equalTo: "Ange samma värde igen.", range: $.validator.format( "Ange ett värde mellan {0} och {1}." ), max: $.validator.format( "Ange ett värde som är mindre eller lika med {0}." ), min: $.validator.format( "Ange ett värde som är stö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> / <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ßen", NEXT: "Weiter", PREV: "Zurück", ERROR: "Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.", PLAY_START: "Diaschau starten", PLAY_STOP: "Diaschau beenden", FULL_SCREEN: "Vollbild", THUMBS: "Vorschaubilder", DOWNLOAD: "Herunterladen", SHARE: "Teilen", ZOOM: "Vergröß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 = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/", "`": "`", "=": "=" }; 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&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&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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QyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDQyxVQUFVLENBQUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsVUFBVSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsRUFBRSxDQUFDQyxVQUFVLENBQUMsS0FBSyxDQUFDQyxXQUFXLENBQUMsRUFBRSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUNDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENB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SUFBSUMsV0FBVyxFQUFFenBFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3RDLE1BQU0sQ0FBQyxDQUFDLENBQUM5M0IsR0FBRztJQUNyQyxJQUFJOGpHLGNBQWMsRUFBRUQsV0FBVyxFQUFFenBFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2dJLFdBQVcsQ0FBQyxDQUFDOztJQUV0RCxJQUFJMmhFLFlBQVksRUFBRTNwRSxDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUMrMUIsU0FBUyxDQUFDLENBQUM7SUFDdkMsSUFBSW05RSxlQUFlLEVBQUVELFlBQVksRUFBRTNwRSxDQUFDLENBQUN0cEMsTUFBTSxDQUFDLENBQUNrM0IsTUFBTSxDQUFDLENBQUM7O0lBRXJELE9BQU84N0UsY0FBYyxFQUFFQyxZQUFZLEdBQUdGLFdBQVcsRUFBRUcsY0FBYztBQUNyRSxDQUFDIiwiZmlsZSI6Im1haW4tbmF0aXZlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXHJcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xXHJcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cclxuICpcclxuICogSW5jbHVkZXMgU2l6emxlLmpzXHJcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xyXG4gKlxyXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXHJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxyXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxyXG4gKlxyXG4gKiBEYXRlOiAyMDE5LTA1LTAxVDIxOjA0WlxyXG4gKi9cclxuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xyXG5cclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHJcblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcclxuXHJcblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXHJcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxyXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcclxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxyXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cclxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcclxuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXHJcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/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=